diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairStatsController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairStatsController.java new file mode 100644 index 0000000..095603e --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairStatsController.java @@ -0,0 +1,46 @@ +package com.ics.admin.controller; + +import com.ics.admin.domain.RepairFloorStatsVo; +import com.ics.admin.domain.RepairWorkerStatsVo; +import com.ics.admin.service.IRepairStatsService; +import com.ics.common.core.controller.BaseController; +import com.ics.common.core.domain.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.wf.jwtp.annotation.RequiresPermissions; + +/** + * 工单各种统计接口 + * created at 2024-8-15 20:36 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@RestController +@RequestMapping("admin/repair/stats") +public class RepairStatsController extends BaseController { + @Autowired + private IRepairStatsService repairWorkerStatsService; + + /** + * 人员绩效,维修人员 + */ + @RequiresPermissions(value = {"repair:attach:operator"}) + @RequestMapping("workerList") + public R workerList(RepairWorkerStatsVo repairWorkerStatsVo) { + startPage(); + return result(repairWorkerStatsService.selectRepairWorkerStatsList(repairWorkerStatsVo)); + } + + /** + * 人员绩效,楼层管理员 + */ + @RequiresPermissions(value = {"repair:attach:operator"}) + @RequestMapping("floorList") + public R floorList(RepairFloorStatsVo repairFloorStatsVo) { + startPage(); + return result(repairWorkerStatsService.selectRepairFloorStatsVoList(repairFloorStatsVo)); + } +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairFloorStatsVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairFloorStatsVo.java new file mode 100644 index 0000000..dd7effb --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairFloorStatsVo.java @@ -0,0 +1,52 @@ +package com.ics.admin.domain; + +import lombok.Data; + +/** + * 对应视图floor_stats + * created at 2024-8-15 21:18 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Data +public class RepairFloorStatsVo { + private static final long serialVersionUID = -202408152119L; + /** + * 用户id + */ + private Long id; + /** 姓名 */ + private String name; + + /** 电话 */ + private String mobile; + + /** 所属楼层 */ + private String adr; + + /** 工单总数 */ + private Long zs; + + /** 处理中 */ + private Long process; + + /** 已完成 */ + private Long closed; + + /** 未解决 */ + private Long unresolved; + + /** 评价总数 */ + private Long pj; + + /** 好评 */ + private String h; + + /** 中评 */ + private String m; + + /** 差评 */ + private String l; +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairStatsByTimeVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairStatsByTimeVo.java new file mode 100644 index 0000000..13488fd --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairStatsByTimeVo.java @@ -0,0 +1,16 @@ +package com.ics.admin.domain; + +import java.io.Serializable; + +/** + * created at 2024-8-15 21:46 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +public class RepairStatsByTimeVo implements Serializable { + private static final long serialVersionUID = -202408152311L; + + +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairWorkerStatsVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairWorkerStatsVo.java new file mode 100644 index 0000000..0beac4a --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairWorkerStatsVo.java @@ -0,0 +1,57 @@ +package com.ics.admin.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 对应视图worker_stats + * created at 2024-8-15 19:56 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Data +public class RepairWorkerStatsVo implements Serializable { + private static final long serialVersionUID = -202408151957L; + /** + * 用户id + */ + private Long id; + /** 姓名 */ + private String username; + + /** 电话 */ + private String mobile; + + /** 设备类型id */ + private Long typeid; + + /** 名称 */ + private String typename; + + /** 工单总数 */ + private Long zs; + + /** 处理中 */ + private Long process; + + /** 已完成 */ + private Long closed; + + /** 未解决 */ + private Long unresolved; + + /** 评价总数 */ + private Long pj; + + /** 好评 */ + private String h; + + /** 中评 */ + private String m; + + /** 差评 */ + private String l; +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairStatsMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairStatsMapper.java new file mode 100644 index 0000000..0f73d7c --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairStatsMapper.java @@ -0,0 +1,33 @@ +package com.ics.admin.mapper; + +import com.ics.admin.domain.RepairFloorStatsVo; +import com.ics.admin.domain.RepairWorkerStatsVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * created at 2024-8-15 20:28 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Mapper +public interface RepairStatsMapper { + /** + * 人员绩效,维修人员 + * + * @param repairWorkerStatsVo VIEW + * @return VIEW集合 + */ + List selectRepairWorkerStatsList(RepairWorkerStatsVo repairWorkerStatsVo); + + /** + * 人员绩效,楼层管理员 + * + * @param repairFloorStatsVo VIEW + * @return VIEW集合 + */ + List selectRepairFloorStatsVoList(RepairFloorStatsVo repairFloorStatsVo); +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IRepairStatsService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IRepairStatsService.java new file mode 100644 index 0000000..6006903 --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IRepairStatsService.java @@ -0,0 +1,30 @@ +package com.ics.admin.service; + +import com.ics.admin.domain.RepairFloorStatsVo; +import com.ics.admin.domain.RepairWorkerStatsVo; + +import java.util.List; + +/** + * 维修人员统计接口 + * + * @author ics + * @date 2024-08-15 + */ +public interface IRepairStatsService { + /** + * 查询VIEW列表 + * + * @param repairWorkerStatsVo VIEW + * @return VIEW集合 + */ + List selectRepairWorkerStatsList(RepairWorkerStatsVo repairWorkerStatsVo); + + /** + * 查询VIEW列表 + * + * @param repairFloorStatsVo VIEW + * @return VIEW集合 + */ + List selectRepairFloorStatsVoList(RepairFloorStatsVo repairFloorStatsVo); +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/RepairStatsServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/RepairStatsServiceImpl.java new file mode 100644 index 0000000..1ea9a6c --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/RepairStatsServiceImpl.java @@ -0,0 +1,101 @@ +package com.ics.admin.service.impl; + +import com.ics.admin.domain.RepairFloorStatsVo; +import com.ics.admin.domain.RepairWorkerStatsVo; +import com.ics.admin.mapper.RepairStatsMapper; +import com.ics.admin.service.IRepairStatsService; +import com.ics.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * created at 2024-8-15 20:34 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Service +public class RepairStatsServiceImpl implements IRepairStatsService { + @Autowired + private RepairStatsMapper repairStatsMapper; + + /** + * 人员绩效--维修人员 + * + * @param repairWorkerStatsVo VIEW + * @return VIEW + */ + @Override + public List selectRepairWorkerStatsList(RepairWorkerStatsVo repairWorkerStatsVo) { + return repairStatsMapper.selectRepairWorkerStatsList(repairWorkerStatsVo); + } + + /** + * 人员绩效--楼层管理员 + * + * @param repairFloorStatsVo VIEW + * @return VIEW + */ + @Override + public List selectRepairFloorStatsVoList(RepairFloorStatsVo repairFloorStatsVo) { + return repairStatsMapper.selectRepairFloorStatsVoList(repairFloorStatsVo); + } + + +// +// public void tt() { +//// Calendar c = getCalendar(2024, 9); +//// +//// +//// System.out.println(getDate(c, 1, true)); +//// System.out.println(getDate(c, 1, false)); +//// System.out.println(getDate(c, 2, true)); +//// System.out.println(getDate(c, 2, false)); +//// System.out.println(getDate(c, 3, true)); +//// System.out.println(getDate(c, 3, false)); +// } + + + /** + * 获取指定年月的日历 + */ + private Calendar getCalendar(int year, int month) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month > 0 ? month - 1 : month); + return calendar; + } + + /** + * 获取边界日期 + * + * @param calendar 是否指定日期 ,null 就是当前日期 + * @param type 1 周 2,月 3 年 + * @param start ture 开始时间 false 结束时间 + * @return + */ + private Date getDate(Calendar calendar, int type, boolean start) { + if (calendar == null) calendar = Calendar.getInstance(); + String time = start ? " 00:00:00" : " 23:59:59"; + if (type == 1) { + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); + if (!start) calendar.add(Calendar.DAY_OF_MONTH, 6); + return DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateTime(calendar.getTime()) + time); + } + if (type == 2) { + calendar.set(Calendar.DAY_OF_MONTH, start ? calendar.getActualMinimum(Calendar.DAY_OF_MONTH) : calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); + return DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateTime(calendar.getTime()) + time); + } + if (type == 3) { + calendar.set(Calendar.DAY_OF_YEAR, start ? calendar.getActualMinimum(Calendar.DAY_OF_YEAR) : calendar.getActualMaximum(Calendar.DAY_OF_YEAR)); + return DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateTime(calendar.getTime()) + time); + } + return null; + } +} diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairStatsMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairStatsMapper.xml new file mode 100644 index 0000000..18ab3ea --- /dev/null +++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairStatsMapper.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/shoot-hand/ics/2024/view.sql b/shoot-hand/ics/2024/view.sql new file mode 100644 index 0000000..d3d57c3 --- /dev/null +++ b/shoot-hand/ics/2024/view.sql @@ -0,0 +1,40 @@ +CREATE VIEW worker_stats AS +select + user.id,user.name username,user.mobile,dt.id typeid,dt.name typename, + count(rep.id) as zs, + SUM(case when rep.status=5 or rep.status=7 then 1 else 0 end) as process, + SUM(case when rep.status=9 or rep.status=13 then 1 else 0 end) as closed, + SUM(case when rep.resolve=0 then 1 else 0 end) as Unresolved, + count(rep.eval_service) pj, + SUM(case when rep.eval_service>=4 then 1 else 0 end) as h, + SUM(case when rep.eval_service=3 then 1 else 0 end) as m, + SUM(case when rep.eval_service<=2 then 1 else 0 end) as l +from + ics_customer_staff user, ics_repair rep, ics_repair_device_type dt +where + user.delete_flag=0 and rep.delete_flag=0 and dt.delete_flag=0 + and user.id=rep.repair_user_id and rep.type_id=dt.id + and (rep.status=5 or rep.status=7 or rep.status=9 or rep.status=13) +GROUP BY + user.id,user.name,user.mobile,dt.id,dt.name + + +CREATE VIEW floor_stats AS +select user.id,user.name,user.mobile,group_concat(DISTINCT CONCAT(ad.name,'/',floor.name)) adr, + count(rep.id) as zs, + SUM(case when rep.status<9 then 1 else 0 end) as process, + SUM(case when rep.status>=9 then 1 else 0 end) as closed, + SUM(case when rep.resolve=0 then 1 else 0 end) as Unresolved, + count(rep.eval_service) pj, + SUM(case when rep.eval_service>=4 then 1 else 0 end) as h, + SUM(case when rep.eval_service=3 then 1 else 0 end) as m, + SUM(case when rep.eval_service<=2 then 1 else 0 end) as l +from + ics_customer_staff user, ics_repair_address ad, ics_repair_address_floor floor, ics_repair rep +where + user.delete_flag=0 and floor.delete_flag=0 and rep.delete_flag=0 and ad.delete_flag=0 + and user.id=floor.admin_id and floor.address_id=ad.id and floor.id=rep.floor_id +GROUP BY + user.id,user.name,user.mobile + +