|
@@ -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()
|
|
|
|
|
|
# 转换为字典
|