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()
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)
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:
raise Exception("bill_date is None")
query = """
SELECT id, de_real_quantity, CONCAT('x', inv_name) AS inv_name, bill_date
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
"""
cursor.execute(query, (bill_date,))
cursor.execute(query, (bill_date, tuple(batchs)))
rows = cursor.fetchall() # 获取数据后保存至本地
if rows:
bill_date = rows[-1][-1]
db_insert_mplogx_batch(rows)
update_sysconfig({'enm1': {'bill_date': str(bill_date)}})
db_insert_mplogx_batch(rows)
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):
shift_rule = mgroup.shift_rule
shifts = Shift.objects.filter(rule=shift_rule) # 根据排班规则制定排班记录
for shift in shifts:
start_time_o = shift.start_time_o
end_time_o = shift.end_time_o
current_date = start_date
while current_date <= end_date:
shifts = Shift.objects.filter(rule=shift_rule).order_by('sort') # 根据排班规则制定排班记录
current_date = start_date
while current_date <= end_date:
for shift in shifts:
start_time_o = shift.start_time_o
end_time_o = shift.end_time_o
start_time = datetime.datetime.combine(current_date, start_time_o)
end_time = datetime.datetime.combine(current_date, end_time_o)
# 以下代码是解决跨天排班时生成当天班次缺少的bug
if start_time > end_time:
if end_time.hour == 0:
end_time += datetime.timedelta(days=1)
else:
start_time -= datetime.timedelta(days=1)
end_time += datetime.timedelta(days=1)
total_sec = (end_time - start_time).total_seconds()
# 创建SfLog记录
@ -107,6 +104,7 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
team = get_team_x(sflog)
if team:
sflog.team = team
sflog.leader = team.leader
sflog.save(update_fields=['team'])
current_date = current_date + datetime.timedelta(days=1)