feat : 修改排班规则

This commit is contained in:
zty 2024-12-11 12:18:09 +08:00
parent e6cad72807
commit 44af9bc494
2 changed files with 20 additions and 14 deletions

View File

@ -76,20 +76,28 @@ def db_ins_mplogx():
config = get_sysconfig() config = get_sysconfig()
with DbConnection(config['enm1']['db_host'], config['enm1']['db_user'], config['enm1']['db_password'], config['enm1']['db_database1']) as cursor: with DbConnection(config['enm1']['db_host'], config['enm1']['db_user'], config['enm1']['db_password'], config['enm1']['db_database1']) as cursor:
bill_date = config['enm1'].get('bill_date', None) bill_date = config['enm1'].get('bill_date', None)
batchs = config['enm1'].get('batch', None)
if not batchs:
raise Exception("batch is None")
try:
bill_date = datetime.datetime.strptime(bill_date, '%Y-%m-%d %H:%M:%S')
except ValueError:
raise Exception(f"Invalid date format in {bill_date}")
if bill_date is None: if bill_date is None:
raise Exception("bill_date is None") raise Exception("bill_date is None")
query = """ query = """
SELECT id, de_real_quantity, CONCAT('x', inv_name) AS inv_name, bill_date SELECT id, de_real_quantity, CONCAT('x', inv_name) AS inv_name, bill_date
FROM sa_weigh_view FROM sa_weigh_view
WHERE bill_date > %s and de_real_quantity > 0 WHERE bill_date >= %s and de_real_quantity > 0
AND inv_name IN %s
ORDER BY bill_date ORDER BY bill_date
""" """
cursor.execute(query, (bill_date,)) cursor.execute(query, (bill_date, tuple(batchs)))
rows = cursor.fetchall() # 获取数据后保存至本地 rows = cursor.fetchall() # 获取数据后保存至本地
if rows: if rows:
bill_date = rows[-1][-1] bill_date = rows[-1][-1]
db_insert_mplogx_batch(rows) db_insert_mplogx_batch(rows)
update_sysconfig({'enm1': {'bill_date': str(bill_date)}}) update_sysconfig({'enm1': {'bill_date': str(bill_date)}})

View File

@ -76,20 +76,17 @@ def get_team_x(sflog: SfLog):
def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None): def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None):
shift_rule = mgroup.shift_rule shift_rule = mgroup.shift_rule
shifts = Shift.objects.filter(rule=shift_rule) # 根据排班规则制定排班记录 shifts = Shift.objects.filter(rule=shift_rule).order_by('sort') # 根据排班规则制定排班记录
for shift in shifts: current_date = start_date
start_time_o = shift.start_time_o while current_date <= end_date:
end_time_o = shift.end_time_o for shift in shifts:
current_date = start_date start_time_o = shift.start_time_o
while current_date <= end_date: end_time_o = shift.end_time_o
start_time = datetime.datetime.combine(current_date, start_time_o) start_time = datetime.datetime.combine(current_date, start_time_o)
end_time = datetime.datetime.combine(current_date, end_time_o) end_time = datetime.datetime.combine(current_date, end_time_o)
# 以下代码是解决跨天排班时生成当天班次缺少的bug # 以下代码是解决跨天排班时生成当天班次缺少的bug
if start_time > end_time: if start_time > end_time:
if end_time.hour == 0: end_time += datetime.timedelta(days=1)
end_time += datetime.timedelta(days=1)
else:
start_time -= datetime.timedelta(days=1)
total_sec = (end_time - start_time).total_seconds() total_sec = (end_time - start_time).total_seconds()
# 创建SfLog记录 # 创建SfLog记录
@ -107,6 +104,7 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
team = get_team_x(sflog) team = get_team_x(sflog)
if team: if team:
sflog.team = team sflog.team = team
sflog.leader = team.leader
sflog.save(update_fields=['team']) sflog.save(update_fields=['team'])
current_date = current_date + datetime.timedelta(days=1) current_date = current_date + datetime.timedelta(days=1)