baoyubo 5 days ago
parent
commit
07a633bdb6
1 changed files with 106 additions and 0 deletions
  1. 106 0
      routers/api/dutyManagement/schedule.py

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

@@ -90,6 +90,112 @@ async def get_dict_data_by_type(
 
         # 计算分页
         offset = (page - 1) * pageSize
+        query = query.order_by(DutySchedule.update_time.desc())
+        duty_data = query.offset(offset).limit(pageSize).all()
+
+        # 转换为字典
+        data_list = []
+        for d in duty_data:
+            user_data = []
+            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)
+                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.yzy_userid})
+            data_list.append({
+                "id": d.id,
+                "start_time": d.start_time,
+                "end_time":d.end_time,
+                "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
+            })
+        # 构建返回结果
+
+        result = {
+            "total": total_count,
+            "page": page,
+            "pageSize": pageSize,
+            "totalPages": (total_count + pageSize - 1) // pageSize,
+            "data": data_list,
+            "code": 200,
+            "msg": "查询成功"
+        }
+        return result
+
+    except Exception as e:
+        # 处理异常
+        traceback.print_exc()
+        return JSONResponse(status_code=404, content={
+            'code': 404,
+            'msg': str(e)
+        })
+
+
+@router.get('/latest_by_group')
+async def get_dict_data_by_type(
+    keywords:str =Query(None),
+    start_time:str =Query(None),
+    end_time:str =Query(None),
+    duty_unit:str =Query(None),
+    page: int = Query(1, gt=0),
+    pageSize: int = Query(10, gt=0),
+    db: Session = Depends(get_db),
+    body = Depends(remove_xss_json),
+    user_id = Depends(valid_access_token)
+):
+    try:
+        # 根据 dict_type 查询字典数据
+        # dict_data = db.query(SysDictData).filter_by(dict_type=dictType).all()
+        query = db.query(DutySchedule)
+
+        query = query.filter(DutySchedule.del_flag != '2')
+        # 添加查询条件
+        if keywords:
+            user_list= name_get_user_id(db,keywords)
+            duty_list = user_id_get_duty_id(db,user_list)
+            query = query.filter(DutySchedule.id._in(duty_list))
+        if start_time:
+            start_time = datetime.strptime(start_time, "%Y-%m-%d").date()
+            query = query.filter(DutySchedule.duty_date>=start_time)
+        if end_time:
+            end_time = datetime.strptime(end_time, "%Y-%m-%d").date()
+            query = query.filter(DutySchedule.duty_date<=end_time)
+        if duty_unit:
+            query = query.filter(DutySchedule.duty_unit==duty_unit)
+
+        subquery = db.query(
+            DutySchedule.duty_date,
+            DutySchedule.shift_type,
+            func.max(DutySchedule.update_time).label("latest_create_time")
+        ).group_by(
+            DutySchedule.duty_date,
+            DutySchedule.shift_type
+        ).subquery()
+
+        query = query.join(
+            subquery,
+            and_(
+                DutySchedule.duty_date == subquery.c.duty_date,
+                DutySchedule.shift_type == subquery.c.shift_type,
+                DutySchedule.update_time == subquery.c.latest_create_time
+            )
+        )
+        # 计算总记录数
+        total_count = query.count()
+
+        # 计算分页
+        offset = (page - 1) * pageSize
+        query = query.order_by(DutySchedule.update_time.desc())
         duty_data = query.offset(offset).limit(pageSize).all()
 
         # 转换为字典