libushang 1 nedēļu atpakaļ
vecāks
revīzija
9327180665

+ 4 - 3
routers/api/dutyManagement/duty.py

@@ -28,6 +28,7 @@ import openpyxl
 
 router = APIRouter()
 
+'''
 @router.get("/duty_by_day")
 async def duty_by_day(
     day: str,
@@ -145,7 +146,7 @@ async def duty_by_day(
         traceback.print_exc()
         # 处理异常
         raise HTTPException(status_code=500, detail=str(e))
-
+'''
 
 @router.get("/my_calendar_by_month")
 async def calendar_by_month(
@@ -392,10 +393,10 @@ async def handover(
         where = and_(DutyShift.shift_id == shift_id)
         row = db.query(DutyShift).filter(where).first()
         if row is None:
-            raise AppException("班次不存在")
+            raise AppException(1, "班次不存在")
         
         if row.shift_status == 1:
-            raise AppException("班次已交班,不用重复操作")
+            raise AppException(1, "班次已交班,不用重复操作")
         
         row.shift_status = 1
         row.handover_time = datetime.now()

+ 159 - 0
routers/api/dutyManagement/schedule.py

@@ -1313,3 +1313,162 @@ def duty_today(
     #     }]
     # }
 
+
+# 小屏值班使用    
+@router.get("/duty_by_day")
+async def duty_by_day(
+    day: str,
+    db: Session = Depends(get_db),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        data = {}
+        # 默认值
+        data['users'] = {
+            "user1":  "-",
+            "user2": "-", 
+            "user3":  "-",
+            "user4": "-"
+        }
+
+        # now = datetime.now()
+
+        # 往前推8小时30分钟
+        # eight_and_half_hours_ago = now - timedelta(hours=8, minutes=30)
+        eight_and_half_hours_ago = datetime.strptime(day, "%Y-%m-%d")
+
+        # 获取对应的日期
+        date_of_eight_and_half_hours_ago = eight_and_half_hours_ago.date()
+
+        query = db.query(DutySchedule)
+
+        query = query.filter(DutySchedule.del_flag != '2' and DutySchedule.duty_date==date_of_eight_and_half_hours_ago)
+        now_user_info = user_id_get_user_info(db, user_id)
+        if now_user_info:
+            user_unit = mobile_phone_get_dept_id(db, mpfun.dec_data(now_user_info.phonenumber),
+                                                                   get_duty_unit_id_list(db))
+            if user_unit==0:
+                user_unit=1
+            query = query.filter(
+                DutySchedule.duty_unit == user_unit)
+        else:
+            query = query.filter(
+                DutySchedule.duty_unit == 1)
+
+        subquery = db.query(
+            DutySchedule.shift_type,
+            func.max(DutySchedule.update_time).label("latest_create_time")
+        ).filter(DutySchedule.del_flag != '2' and DutySchedule.duty_date==date_of_eight_and_half_hours_ago).group_by(
+            DutySchedule.shift_type
+        ).subquery()
+
+        query = query.join(
+            subquery,
+            and_(
+                DutySchedule.shift_type == subquery.c.shift_type,
+                DutySchedule.update_time == subquery.c.latest_create_time
+            )
+        )
+
+        query = query.order_by(DutySchedule.update_time.desc())
+        duty_data = query.all()
+        # print(query,len(duty_data),duty_data,date_of_eight_and_half_hours_ago,mobile_phone_get_dept_id(db, mpfun.dec_data(now_user_info.phonenumber),
+        #                                                            get_duty_unit_id_list(db)))
+        # 转换为字典
+        data_list = []
+        duty_id = []
+        shift_status = 0
+        for d in duty_data:
+            duty_id.append(d.id)
+
+            user_data = []
+            class_leader = []
+            main_class=[]
+            deputy_class = []
+            prepare_class = []
+
+            user_list = duty_id_get_user_id(db, d.id)
+            for user_info in user_list:
+                contact_info = user_id_get_info(db, user_info.personnel_id)
+                if contact_info:
+                    user_data.append({"position_id": user_info.position_id,
+                                      "personnel_id": user_info.personnel_id,
+                                      "name": contact_info.name,
+                                      "position": contact_info.position,
+                                      "mobile_phone": contact_info.mobile_phone,
+                                      "office_phone": contact_info.office_phone,
+                                      "department_id": contact_info.department_id,
+                                      "yzy_userid": contact_info.userid})
+                    if user_info.position_id==1:
+                        class_leader.append(contact_info.name)
+                    if user_info.position_id==2:
+                        main_class.append(contact_info.name)
+                    if user_info.position_id==8:
+                        deputy_class.append(contact_info.name)
+                    if user_info.position_id==9:
+                        prepare_class.append(contact_info.name)
+                else:
+                    user_data.append({"position_id": user_info.position_id,
+                                      "personnel_id": user_info.personnel_id})
+            data_list.append({
+                "id": d.id,
+                "start_time": d.start_time.strftime('%Y-%m-%d %H:%M:%S') if d.start_time else '',
+                "end_time": d.end_time.strftime('%Y-%m-%d %H:%M:%S') if d.end_time else '',
+                "duty_date": d.duty_date,
+                "shift_type": d.shift_type,
+                "duty_unit": d.duty_unit,
+                "duty_type": d.duty_type,
+                "createTime": d.create_time.strftime('%Y-%m-%d %H:%M:%S') if d.create_time else '',
+                "user_data": user_data,
+                "class_leader":"、".join(class_leader),
+                "main_class":"、".join(main_class),
+                "deputy_class":"、".join(deputy_class),
+                "prepare_class":"、".join(prepare_class)
+            })
+
+            data['users']["user1"] = "、".join(class_leader)
+            data['users']["user2"] = "、".join(main_class)
+            data['users']["user3"] = "、".join(deputy_class)
+            data['users']["user4"] = "、".join(prepare_class)
+
+        # 提醒事项
+        where = and_(DutyNotify.del_flag == '0', DutyNotify.notify_type == '1', DutyNotify.shift_id.in_(duty_id))
+        rows = db.query(DutyNotify).filter(where).all()
+        items = []
+        for row in rows:
+            items.append({
+                "text": row.notify_content,
+                "time": get_datetime_str(row.create_time)
+            })
+        data['remainds'] = items
+        
+        # 待办事项
+        where = and_(DutyNotify.del_flag == '0', DutyNotify.notify_type == '2', DutyNotify.shift_id.in_(duty_id))
+        rows = db.query(DutyNotify).filter(where).all()
+        items = []
+        for row in rows:
+            items.append({
+                "text": row.notify_content,
+                "time": get_datetime_str(row.create_time)
+            })
+        data['todos'] = items
+
+        data['shift_id'] = duty_id
+        data['shift_status'] = shift_status
+        data['handover_time'] = ''
+            
+        # 构建返回结果
+
+        result = {
+            "data": data,
+            "code": 200,
+            "msg": "查询成功"
+        }
+        return result
+    except Exception as e:
+        # 处理异常
+        traceback.print_exc()
+        return JSONResponse(status_code=404, content={
+            'code': 404,
+            'msg': str(e)
+        })