Browse Source

提交代码

夏文涛 2 years ago
parent
commit
848b5b5885
99 changed files with 4194 additions and 523 deletions
  1. 510 327
      .idea/workspace.xml
  2. 5 5
      src/main/java/com/repair/AutoCode.java
  3. 2 2
      src/main/java/com/repair/api/RepairAdminControllerAPI.java
  4. 7 2
      src/main/java/com/repair/api/RepairClassesSettingsControllerAPI.java
  5. 10 0
      src/main/java/com/repair/api/RepairConsumablesControllerAPI.java
  6. 2 2
      src/main/java/com/repair/api/RepairConsumeControllerAPI.java
  7. 5 0
      src/main/java/com/repair/api/RepairLeaveMessageControllerAPI.java
  8. 32 0
      src/main/java/com/repair/api/RepairRecordControllerAPI.java
  9. 185 0
      src/main/java/com/repair/common/utils/DelayedUtils.java
  10. 81 1
      src/main/java/com/repair/common/utils/ExcelExportUtil.java
  11. 1 1
      src/main/java/com/repair/common/utils/ExcelUtils.java
  12. 68 4
      src/main/java/com/repair/common/utils/TimeExchange.java
  13. 127 0
      src/main/java/com/repair/common/utils/WeiXiaoUtil.java
  14. 4 0
      src/main/java/com/repair/config/WxOpenidConfig.java
  15. 48 8
      src/main/java/com/repair/controller/RepairAdminController.java
  16. 98 43
      src/main/java/com/repair/controller/RepairClassesSettingsController.java
  17. 67 0
      src/main/java/com/repair/controller/RepairConsumablesController.java
  18. 3 3
      src/main/java/com/repair/controller/RepairConsumeController.java
  19. 54 3
      src/main/java/com/repair/controller/RepairLeaveMessageController.java
  20. 450 25
      src/main/java/com/repair/controller/RepairRecordController.java
  21. 101 0
      src/main/java/com/repair/controller/RepairShiftSettingsController.java
  22. 20 0
      src/main/java/com/repair/controller/WxAccessTokenController.java
  23. 5 1
      src/main/java/com/repair/mapper/RepairCollaborateRecordMapper.java
  24. 8 1
      src/main/java/com/repair/mapper/RepairConsumablesMapper.java
  25. 5 1
      src/main/java/com/repair/mapper/RepairDispatchRecordMapper.java
  26. 19 2
      src/main/java/com/repair/mapper/RepairRecordMapper.java
  27. 9 1
      src/main/java/com/repair/mapper/RepairUserMapper.java
  28. 18 0
      src/main/java/com/repair/mapper/WxAccessTokenMapper.java
  29. 1 1
      src/main/java/com/repair/model/enumModel/eRecordStatu.java
  30. 38 0
      src/main/java/com/repair/model/enumModel/eTechnicianStatu.java
  31. 33 0
      src/main/java/com/repair/model/enumModel/eUserStatu.java
  32. 36 1
      src/main/java/com/repair/model/pojo/RepairAdmin.java
  33. 8 0
      src/main/java/com/repair/model/pojo/RepairCollaborateRecord.java
  34. 7 4
      src/main/java/com/repair/model/pojo/RepairDispatchRecord.java
  35. 3 7
      src/main/java/com/repair/model/pojo/RepairReceiving.java
  36. 9 9
      src/main/java/com/repair/model/pojo/RepairRecord.java
  37. 8 0
      src/main/java/com/repair/model/pojo/RepairTransferRecord.java
  38. 65 0
      src/main/java/com/repair/model/pojo/WxAccessToken.java
  39. 37 0
      src/main/java/com/repair/model/request/repairLeaveMessageRequest.java
  40. 8 0
      src/main/java/com/repair/model/request/repairRecordRequest.java
  41. 26 0
      src/main/java/com/repair/model/request/timeVo.java
  42. 20 6
      src/main/java/com/repair/model/vo/ClassesSettingVo.java
  43. 26 0
      src/main/java/com/repair/model/vo/CollaborateRecordVo.java
  44. 105 0
      src/main/java/com/repair/model/vo/ConsumableExcelVo.java
  45. 81 0
      src/main/java/com/repair/model/vo/ConsumablePageVo.java
  46. 15 1
      src/main/java/com/repair/model/vo/ConsumeVo.java
  47. 32 0
      src/main/java/com/repair/model/vo/MaintenanceTechnicianVo.java
  48. 26 10
      src/main/java/com/repair/model/vo/MyRepairRecordVo.java
  49. 14 0
      src/main/java/com/repair/model/vo/RepairCardNumberVo.java
  50. 0 2
      src/main/java/com/repair/model/vo/RepairConsumeVo.java
  51. 17 0
      src/main/java/com/repair/model/vo/RepairLogisticsVo.java
  52. 57 0
      src/main/java/com/repair/model/vo/RepairManageCountVo.java
  53. 106 0
      src/main/java/com/repair/model/vo/RepairRecordPageVo.java
  54. 92 0
      src/main/java/com/repair/model/vo/RepairTechnicianVo.java
  55. 63 0
      src/main/java/com/repair/model/vo/UserDataVo.java
  56. 87 0
      src/main/java/com/repair/model/vo/pendingOrderVo.java
  57. 21 0
      src/main/java/com/repair/model/vo/shiftSettingVo.java
  58. 5 1
      src/main/java/com/repair/services/RepairAdminService.java
  59. 4 0
      src/main/java/com/repair/services/RepairCollaborateRecordService.java
  60. 6 1
      src/main/java/com/repair/services/RepairConsumablesService.java
  61. 5 0
      src/main/java/com/repair/services/RepairDispatchRecordService.java
  62. 5 0
      src/main/java/com/repair/services/RepairLeaveMessageService.java
  63. 20 3
      src/main/java/com/repair/services/RepairRecordService.java
  64. 2 0
      src/main/java/com/repair/services/RepairShiftSettingsService.java
  65. 9 2
      src/main/java/com/repair/services/RepairUserService.java
  66. 22 0
      src/main/java/com/repair/services/WxAccessTokenService.java
  67. 15 3
      src/main/java/com/repair/services/impl/RepairAdminServiceImpl.java
  68. 8 4
      src/main/java/com/repair/services/impl/RepairCollaborateRecordServiceImpl.java
  69. 19 1
      src/main/java/com/repair/services/impl/RepairConsumablesServiceImpl.java
  70. 16 2
      src/main/java/com/repair/services/impl/RepairDispatchRecordServiceImpl.java
  71. 15 0
      src/main/java/com/repair/services/impl/RepairLeaveMessageServiceImpl.java
  72. 82 6
      src/main/java/com/repair/services/impl/RepairRecordServiceImpl.java
  73. 11 0
      src/main/java/com/repair/services/impl/RepairShiftSettingsServiceImpl.java
  74. 36 3
      src/main/java/com/repair/services/impl/RepairUserServiceImpl.java
  75. 53 0
      src/main/java/com/repair/services/impl/WxAccessTokenServiceImpl.java
  76. 1 0
      src/main/resources/application-dev.yml
  77. 1 0
      src/main/resources/application-prod.yml
  78. 1 0
      src/main/resources/application.yml
  79. 2 0
      src/main/resources/mapper/repair/RepairClassesSettingsMapper.xml
  80. 31 0
      src/main/resources/mapper/repair/RepairCollaborateRecordMapper.xml
  81. 57 0
      src/main/resources/mapper/repair/RepairConsumablesMapper.xml
  82. 15 0
      src/main/resources/mapper/repair/RepairDispatchRecordMapper.xml
  83. 267 10
      src/main/resources/mapper/repair/RepairRecordMapper.xml
  84. 31 2
      src/main/resources/mapper/repair/RepairUserMapper.xml
  85. 5 0
      src/main/resources/mapper/repair/WxAccessTokenMapper.xml
  86. 5 0
      target/classes/META-INF/spring-configuration-metadata.json
  87. 1 0
      target/classes/application-dev.yml
  88. 1 0
      target/classes/application-prod.yml
  89. 1 0
      target/classes/application.yml
  90. 2 0
      target/classes/mapper/repair/RepairClassesSettingsMapper.xml
  91. 31 0
      target/classes/mapper/repair/RepairCollaborateRecordMapper.xml
  92. 57 0
      target/classes/mapper/repair/RepairConsumablesMapper.xml
  93. 15 0
      target/classes/mapper/repair/RepairDispatchRecordMapper.xml
  94. 267 10
      target/classes/mapper/repair/RepairRecordMapper.xml
  95. 31 2
      target/classes/mapper/repair/RepairUserMapper.xml
  96. 5 0
      target/classes/mapper/repair/WxAccessTokenMapper.xml
  97. 26 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  98. 23 0
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
  99. BIN
      target/repair_system-0.0.1-SNAPSHOT.jar.original

File diff suppressed because it is too large
+ 510 - 327
.idea/workspace.xml


+ 5 - 5
src/main/java/com/repair/AutoCode.java

@@ -22,10 +22,10 @@ import java.util.ArrayList;
  */
 public class AutoCode {
     public static void main(String[] args) {
-// 需要构建一个 代码自动生成器 对象
+        // 需要构建一个 代码自动生成器 对象
         AutoGenerator mpg = new AutoGenerator();
-// 配置策略
-// 1、全局配置
+        // 配置策略
+        // 1、全局配置
         GlobalConfig gc = new GlobalConfig();
         String projectPath = System.getProperty("user.dir");
         gc.setOutputDir(projectPath + "/src/main/java");
@@ -48,10 +48,10 @@ public class AutoCode {
         mpg.setGlobalConfig(gc);
 //2、设置数据源
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://192.168.161.220:3306/repair_report?useUnicode=tru&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai");
+        dsc.setUrl("jdbc:mysql://172.16.20.95:3306/repair_report?useUnicode=tru&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
-        dsc.setPassword("root");
+        dsc.setPassword("Chuanghai_2023.");
         dsc.setDbType(DbType.MYSQL);
         mpg.setDataSource(dsc);
         //3、包的配置

+ 2 - 2
src/main/java/com/repair/api/RepairAdminControllerAPI.java

@@ -25,7 +25,7 @@ public interface RepairAdminControllerAPI {
 
     @GetMapping(value = "/queryPageRepairAdmin")
     @ApiOperation(value = "账号分页数据", notes = "账号分页数据", httpMethod = "GET")
-    CommonResult queryPageRepairAdmins(@RequestParam int currentPage, @RequestParam int pageCount, String account, String phone, String userName);
+    CommonResult queryPageRepairAdmins(@RequestParam int currentPage, @RequestParam int pageCount, String account, String startTime, String endTime);
 
     @PostMapping(value = "/freezeRepairAdminById")
     @ApiOperation(value = "根据ID冻结指定账号", notes = "根据ID冻结指定账户", httpMethod = "POST")
@@ -41,5 +41,5 @@ public interface RepairAdminControllerAPI {
 
     @GetMapping(value = "/downloadRepairAdminExcel")
     @ApiOperation(value = "导出账号数据", notes = "导出账号数据", httpMethod = "GET")
-    void downloadRepairAdminExcel(String account, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
+    void downloadRepairAdminExcel(String account, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
 }

+ 7 - 2
src/main/java/com/repair/api/RepairClassesSettingsControllerAPI.java

@@ -12,6 +12,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.text.ParseException;
 
 @RequestMapping("/api/repairClassesSettings")
@@ -24,19 +25,23 @@ public interface RepairClassesSettingsControllerAPI {
 
     @PostMapping(value = "/updateRepairClassesSettingsById")
     @ApiOperation(value = "编辑排班数据", notes = "编辑排班数据", httpMethod = "POST")
-    CommonResult updateRepairClassesSettingsById(@Validated @RequestBody updateRepairClassesRequest ra, BindingResult bindingResult);
+    CommonResult updateRepairClassesSettingsById(@Validated @RequestBody updateRepairClassesRequest ra, BindingResult bindingResult) throws ParseException;
 
     @GetMapping(value = "/queryPageRepairClassesSettings")
     @ApiOperation(value = "排班分页数据", notes = "排班分页数据", httpMethod = "GET")
     CommonResult queryPageRepairClassesSettingss(@RequestParam int currentPage, @RequestParam int pageCount, String startTime, String endTime);
 
+    @GetMapping(value = "/downloadRepairClassesExcel")
+    @ApiOperation(value = "导出排班数据", notes = "导出排班数据", httpMethod = "GET")
+    void downloadRepairClassesExcel(String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
+
     @GetMapping(value = "/deleteRepairClassesSettingsById")
     @ApiOperation(value = "根据ID删除指定排班", notes = "根据ID删除指定排班", httpMethod = "GET")
     CommonResult deleteRepairClassesSettingsById(@RequestParam int id);
 
     @PostMapping(value = "/importRepairClassesSettingExcel")
     @ApiOperation(value = "导入排班数据", notes = "导入排班数据", httpMethod = "POST")
-    CommonResult importRepairClassesSettingExcel(@RequestParam("file") MultipartFile file) throws IOException;
+    CommonResult importRepairClassesSettingExcel(@RequestParam("file") MultipartFile file) throws IOException, ParseException;
 
     @GetMapping(value = "/downloadRepairClassesSettingExcel")
     @ApiOperation(value = "导出排班模板", notes = "导出排班模板", httpMethod = "GET")

+ 10 - 0
src/main/java/com/repair/api/RepairConsumablesControllerAPI.java

@@ -8,6 +8,8 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.InvocationTargetException;
 import java.text.ParseException;
 
 @RequestMapping("/api/repairConsumables")
@@ -29,4 +31,12 @@ public interface RepairConsumablesControllerAPI {
     @GetMapping(value = "/deleterepairConsumablesById")
     @ApiOperation(value = "根据ID删除指定耗材记录", notes = "根据ID删除指定耗材记录", httpMethod = "GET")
     CommonResult deleterepairConsumablesById(@RequestParam int id);
+
+    @GetMapping(value = "/queryRepairConsumablePageList")
+    @ApiOperation(value = "耗材记录数据", notes = "耗材记录数据", httpMethod = "GET")
+    CommonResult queryRepairConsumablePageList(@RequestParam int currentPage, @RequestParam int pageCount, String keyWord,String startTime,String endTime);
+
+    @GetMapping(value = "/downloadRepairConsumableExcel")
+    @ApiOperation(value = "导出耗材记录数据", notes = "导出耗材记录数据", httpMethod = "GET")
+    void downloadRepairConsumableExcel(String keyWord, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
 }

+ 2 - 2
src/main/java/com/repair/api/RepairConsumeControllerAPI.java

@@ -28,7 +28,7 @@ public interface RepairConsumeControllerAPI {
 
     @GetMapping(value = "/queryPageRepairConsume")
     @ApiOperation(value = "耗材管理分页数据", notes = "耗材管理分页数据", httpMethod = "GET")
-    CommonResult queryPageRepairConsumes(@RequestParam int currentPage, @RequestParam int pageCount, String name,String startTime, String endTime);
+    CommonResult queryPageRepairConsumes(@RequestParam int currentPage, @RequestParam int pageCount, String name, String startTime, String endTime);
 
     @GetMapping(value = "/deleteRepairConsumeById")
     @ApiOperation(value = "根据ID删除指定耗材管理", notes = "根据ID删除指定耗材管理", httpMethod = "GET")
@@ -36,7 +36,7 @@ public interface RepairConsumeControllerAPI {
 
     @GetMapping(value = "/downloadRepairConsumeExcel")
     @ApiOperation(value = "导出耗材数据", notes = "导出耗材数据", httpMethod = "GET")
-    void downloadRepairConsumeExcel(String name,String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
+    void downloadRepairConsumeExcel(String name, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException;
 
     @GetMapping(value = "/downloadRepairConsumeModelExcel")
     @ApiOperation(value = "导出耗材模板", notes = "导出耗材模板", httpMethod = "GET")

+ 5 - 0
src/main/java/com/repair/api/RepairLeaveMessageControllerAPI.java

@@ -1,6 +1,7 @@
 package com.repair.api;
 
 import com.repair.model.pojo.RepairLeaveMessage;
+import com.repair.model.request.repairLeaveMessageRequest;
 import com.repair.model.result.CommonResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -27,4 +28,8 @@ public interface RepairLeaveMessageControllerAPI {
     @GetMapping(value = "/deleterepairLeaveMessageById")
     @ApiOperation(value = "根据ID删除指定消息留言", notes = "根据ID删除指定消息留言", httpMethod = "GET")
     CommonResult deleterepairLeaveMessageById(@RequestParam int id);
+
+    @PostMapping(value = "/transferToLogistics")
+    @ApiOperation(value = "转后勤", notes = "转后勤", httpMethod = "POST")
+    CommonResult transferToLogistics(@Validated @RequestBody repairLeaveMessageRequest rlmr, BindingResult bindingResult);
 }

+ 32 - 0
src/main/java/com/repair/api/RepairRecordControllerAPI.java

@@ -35,6 +35,10 @@ public interface RepairRecordControllerAPI {
     @ApiOperation(value = "文件上传", notes = "文件上传", httpMethod = "POST")
     CommonResult uploadFile(@RequestParam("file") MultipartFile file) throws Exception;
 
+    @GetMapping(value = "/revokeRepairRecordById")
+    @ApiOperation(value = "根据ID撤销指定报修记录", notes = "根据ID撤销指定报修记录", httpMethod = "GET")
+    CommonResult revokeRepairRecordById(@RequestParam int id);
+
     @GetMapping(value = "/getRepairRecordsByUserId")
     @ApiOperation(value = "根据用户ID获取报修记录", notes = "根据用户ID获取报修记录", httpMethod = "GET")
     CommonResult getRepairRecordsByUserId(@RequestParam int currentPage, @RequestParam int pageCount, @RequestParam int userId, @RequestParam int state);
@@ -42,4 +46,32 @@ public interface RepairRecordControllerAPI {
     @GetMapping(value = "/getRepairRecordCountByUserId")
     @ApiOperation(value = "根据用户ID获取报修报修数量", notes = "根据用户ID获取报修报修数量", httpMethod = "GET")
     CommonResult getRepairRecordCountByUserId(@RequestParam int userId);
+
+    @GetMapping(value = "/getTechnicianCountByUserId")
+    @ApiOperation(value = "根据用户ID获取维修师傅端工单报修数量", notes = "根据用户ID获取维修师傅端工单报修数量", httpMethod = "GET")
+    CommonResult getTechnicianCountByUserId(@RequestParam int userId);
+
+    @GetMapping(value = "/getTechniciansByUserId")
+    @ApiOperation(value = "根据用户ID获取维修师傅报修工单数据", notes = "根据用户ID获取维修师傅报修工单数据", httpMethod = "GET")
+    CommonResult getTechniciansByUserId(@RequestParam int currentPage, @RequestParam int pageCount, @RequestParam int userId, @RequestParam int state);
+
+    @GetMapping(value = "/repairRecordReminder")
+    @ApiOperation(value = "催单接口", notes = "催单接口", httpMethod = "GET")
+    CommonResult repairRecordReminder(@RequestParam int recordId);
+
+    @GetMapping(value = "/queryManageCount")
+    @ApiOperation(value = "工单状态数量", notes = "工单状态数量", httpMethod = "GET")
+    CommonResult queryManageCount();
+
+    @GetMapping(value = "/queryManagePage")
+    @ApiOperation(value = "工单管理工单数据", notes = "工单管理工单数据", httpMethod = "GET")
+    CommonResult queryManagePage(@RequestParam int currentPage, @RequestParam int pageCount, @RequestParam int state, String keyWord, String startTime, String endTime);
+
+    @GetMapping(value = "/queryPendingOrder")
+    @ApiOperation(value = "待处理池分页数据", notes = "待处理池分页数据", httpMethod = "GET")
+    CommonResult queryPendingOrder(@RequestParam int currentPage, @RequestParam int pageCount, @RequestParam int userId);
+
+    @GetMapping(value = "/receiveOrders")
+    @ApiOperation(value = "接单", notes = "接单", httpMethod = "GET")
+    CommonResult receiveOrders(@RequestParam int recordId, @RequestParam int userId) throws Exception;
 }

+ 185 - 0
src/main/java/com/repair/common/utils/DelayedUtils.java

@@ -0,0 +1,185 @@
+package com.repair.common.utils;
+
+import com.repair.model.pojo.RepairShiftSettings;
+import com.repair.model.request.timeVo;
+import lombok.SneakyThrows;
+
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/3 星期四 11:10
+ * @Description: com.repair.common.utils
+ * @Version: 1.0
+ */
+public class DelayedUtils {
+
+    public static List<timeVo> timeVos(List<RepairShiftSettings> shiftDatas) throws ParseException {
+        List<timeVo> tvs = new ArrayList<>();
+        //判断考核时间是否在工作时间段内
+        //弄出一个时间段集合 开始时间 结束时间 是否工作时间段
+        for (RepairShiftSettings sd : shiftDatas) {
+            if (sd.getIsDuty() == 1) {
+                continue;
+            }
+
+            String startTime = sd.getStartTime();
+            List<String> nw = Arrays.asList(sd.getNotWorkTime().split(","));
+            List<timeVo> tvDatas = new ArrayList<>();
+            //非工作时间必须都在结束时间之内 防止非工作时间重叠
+            for (String i : nw) {
+                String[] time = i.split("-");
+                if (TimeExchange.CompareDate(time[0], time[1], "HH:mm")) {
+                    timeVo tv = new timeVo();
+                    tv.setStart(time[0]);
+                    tv.setEnd(time[1]);
+                    tvDatas.add(tv);
+                }
+            }
+
+            Collections.sort(tvDatas, new Comparator<timeVo>() {
+                @SneakyThrows
+                @Override
+                public int compare(timeVo s1, timeVo s2) {
+                    return TimeExchange.StringToDate(s1.getStart(), "HH:mm").compareTo(TimeExchange.StringToDate(s2.getStart(), "HH:mm"));
+                }
+            });
+
+            for (int i = 0; i <= tvDatas.size(); i++) {
+
+                timeVo tvData = new timeVo();
+                tvData.setStart(startTime);
+                if (i == tvDatas.size()) {
+                    tvData.setEnd(sd.getEndTime());
+                } else {
+                    tvData.setEnd(tvDatas.get(i).getStart());
+                }
+
+                tvData.setIsWork(1);
+
+                tvs.add(tvData);
+
+                if (i < tvDatas.size()) {
+                    startTime = tvDatas.get(i).getEnd();
+                }
+            }
+        }
+
+        if (tvs.size() > 0) {
+
+            Collections.sort(tvs, new Comparator<timeVo>() {
+                @SneakyThrows
+                @Override
+                public int compare(timeVo s1, timeVo s2) {
+                    return TimeExchange.StringToDate(s1.getStart(), "HH:mm").compareTo(TimeExchange.StringToDate(s2.getStart(), "HH:mm"));
+                }
+            });
+        }
+
+        return tvs;
+    }
+
+    public static Integer addMinute(List<timeVo> tvs, int assessTime, Date nowDate, String dateNow, int workMinte, int i, int num) throws ParseException {
+        if (workMinte < assessTime) {
+            int count = i + num;
+            if(count < tvs.size()) {
+                if (count < tvs.size()) {
+                    Date nextSatrtTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(count).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                    int newWorkMinte = TimeExchange.getOffsetMinutes(nowDate, nextSatrtTime);
+                    assessTime = assessTime + newWorkMinte;
+                    num++;
+                    assessTime = addMinute(tvs, assessTime, nowDate, dateNow, workMinte, i, num);
+                }
+            }
+        }
+
+        return assessTime;
+    }
+
+    public static Integer addMinuteStart(List<timeVo> tvs, Date lastDate, int assessTime, Date nowDate, String dateNow, int workMinte, int i, int num) throws ParseException {
+        if(workMinte < assessTime){
+            int count = i + num;
+
+            if(count < tvs.size()){
+                Date nextStartWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(count).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                Date nextEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(count).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                int minute = TimeExchange.getOffsetMinutes(lastDate, nextStartWorkTime);
+                workMinte = TimeExchange.getOffsetMinutes(nowDate, nextEndWorkTime);
+                assessTime = assessTime + minute;
+                num++;
+                assessTime = addMinuteStart(tvs, nextEndWorkTime, assessTime, nowDate, dateNow, workMinte, i, num);
+            }
+        }
+        return assessTime;
+    }
+
+    public static void main(String[] args) throws ParseException {
+        List<RepairShiftSettings> shiftDatas = new ArrayList<>();
+        RepairShiftSettings shiftData = new RepairShiftSettings();
+        shiftData.setStartTime("7:00");
+        shiftData.setEndTime("19:00");
+        shiftData.setIsDuty(0);
+        shiftData.setNotWorkTime("17:00-18:30,14:00-15:50,10:00-11:11");
+        shiftDatas.add(shiftData);
+        List<timeVo> result = timeVos(shiftDatas);
+        //考核 100  160
+        //int ssss = addMinuteStart(result, TimeExchange.StringToDate("2023-08-03 14:00:00", "yyyy-MM-dd HH:mm:ss"), 270, TimeExchange.StringToDate("2023-08-03 10:11:00", "yyyy-MM-dd HH:mm:ss"), "2023-08-03", 229, 0, 2);
+
+        int isDuty = 0;
+        Date nowDate =TimeExchange.StringToDate("2023-08-03 10:00:00", "yyyy-MM-dd HH:mm:ss");
+        int acceptanceAssessTime = 50;
+        int maintenanceAssessTime = 60;
+        String dateNow = "2023-08-03";
+        if (isDuty == 0) {
+            List<timeVo> tvs = DelayedUtils.timeVos(shiftDatas);
+
+            //工作的时间是否够修完 临下班接的单不做延长
+            for (int i = 0; i < tvs.size(); i++) {
+                Date startWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                Date endWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+
+                if (nowDate.before(startWorkTime)) {
+                    if (i == 0) {
+                        int minute = TimeExchange.getOffsetMinutes(nowDate, startWorkTime);
+                        int workMinte = TimeExchange.getOffsetMinutes(nowDate, endWorkTime);
+                        acceptanceAssessTime = acceptanceAssessTime + minute;
+                        acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                        maintenanceAssessTime = maintenanceAssessTime + minute;
+                        maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                        break;
+                    } else {
+                        Date lastEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i - 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                        if (lastEndWorkTime.before(nowDate)) {
+                            Date nextStartWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                            Date nextEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                            int minute = TimeExchange.getOffsetMinutes(nowDate, nextStartWorkTime);
+                            int workMinte = TimeExchange.getOffsetMinutes(nowDate, nextEndWorkTime);
+                            acceptanceAssessTime = acceptanceAssessTime + minute;
+                            acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                            maintenanceAssessTime = maintenanceAssessTime + minute;
+                            maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                            break;
+                        }
+                    }
+                } else if (startWorkTime.before(nowDate) && nowDate.before(endWorkTime)) {
+                    int workMinte = TimeExchange.getOffsetMinutes(nowDate, endWorkTime);
+                    acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                    maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                    break;
+                } else if (endWorkTime.before(nowDate) && nowDate.before(TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss"))) {
+                    Date nextStartWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                    Date nextEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                    int minute = TimeExchange.getOffsetMinutes(nowDate, nextStartWorkTime);
+                    int workMinte = TimeExchange.getOffsetMinutes(nowDate, nextEndWorkTime);
+                    acceptanceAssessTime = acceptanceAssessTime + minute;
+                    acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                    maintenanceAssessTime = maintenanceAssessTime + minute;
+                    maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                    break;
+                }
+            }
+            String sss = "0";
+        }
+    }
+}

+ 81 - 1
src/main/java/com/repair/common/utils/ExcelExportUtil.java

@@ -3,8 +3,12 @@ package com.repair.common.utils;
 import org.apache.poi.hpsf.Decimal;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.*;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
@@ -18,6 +22,82 @@ import java.util.*;
  * @Version: 1.0
  */
 public class ExcelExportUtil {
+
+    /**
+     * 将 List<Map<String,Object>> 类型的数据导出为 Excel
+     */
+    public static void  createExcel(List<Map<String, Object>> mapList, String filename, String title, HttpServletResponse response) {
+        //获取数据源的 key, 用于获取列数及设置标题
+        Map<String, Object> map = mapList.get(0);
+        Set<String> stringSet = map.keySet();
+        ArrayList<String> headList = new ArrayList<>(stringSet);
+
+        //定义一个新的工作簿
+        XSSFWorkbook wb = new XSSFWorkbook();
+        //创建一个Sheet页
+        XSSFSheet sheet = wb.createSheet(title);
+        //设置行高
+        sheet.setDefaultRowHeight((short) (2 * 256));
+        //为有数据的每列设置列宽
+        for (int i = 0; i < headList.size(); i++) {
+            sheet.setColumnWidth(i, 8000);
+        }
+        //设置单元格字体样式
+        XSSFFont font = wb.createFont();
+        font.setFontName("等线");
+        font.setFontHeightInPoints((short) 16);
+
+        //在sheet里创建第一行,并设置单元格内容为 title (标题)
+//        XSSFRow titleRow = sheet.createRow(0);
+//        XSSFCell titleCell = titleRow.createCell(0);
+//        titleCell.setCellValue(title);
+        //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
+//        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headList.size() - 1));
+//        // 创建单元格文字居中样式并设置标题单元格居中
+//        XSSFCellStyle cellStyle = wb.createCellStyle();
+//        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+//        titleCell.setCellStyle(cellStyle);
+
+        //获得表格第二行
+        XSSFRow row = sheet.createRow(0);
+        //根据数据源信息给第二行每一列设置标题
+        for (int i = 0; i < headList.size(); i++) {
+            XSSFCell cell = row.createCell(i);
+            cell.setCellValue(headList.get(i));
+        }
+
+        XSSFRow rows;
+        XSSFCell cells;
+        //循环拿到的数据给所有行每一列设置对应的值
+        for (int i = 0; i < mapList.size(); i++) {
+            //在这个sheet页里创建一行
+            rows = sheet.createRow(i + 1);
+            //给该行数据赋值
+            for (int j = 0; j < headList.size(); j++) {
+                String value;
+                if (mapList.get(i).get(headList.get(j)) !=null){
+                    value = mapList.get(i).get(headList.get(j)).toString();
+                }else {
+                    value = "";
+                }
+                cells = rows.createCell(j);
+                cells.setCellValue(value);
+            }
+        }
+
+        try {
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//application/vnd.ms-excel");
+            response.setHeader("Content-Disposition", "attachment;filename=".concat(filename));
+            OutputStream out = response.getOutputStream();
+
+            wb.write(out);
+            wb.close();
+            out.close();;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
      * @description 考虑到下载方式的不同 这里细化成只获取一个workBook 格式为默认 无格式
      * @param list 需要存储为excel的对象集合

+ 1 - 1
src/main/java/com/repair/common/utils/ExcelUtils.java

@@ -23,7 +23,7 @@ public class ExcelUtils {
             ApplicationHome applicationHome = new ApplicationHome(ExcelUtils.class);
             String pathResouce = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath();
             String decode = URLDecoder.decode(pathResouce, "utf-8");
-            File readPath = new File(decode + "\\src\\main\\resources\\excelFile" + File.separator);
+            File readPath = new File(decode + "/project/repair" + File.separator);
             File file = new File(readPath.getAbsolutePath() + fileName);
             // 获取文件名
             String filename = file.getName();

+ 68 - 4
src/main/java/com/repair/common/utils/TimeExchange.java

@@ -12,6 +12,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -20,7 +21,6 @@ import java.util.*;
  * 时间转化工具 date转为时间戳 时间戳转date 互相与String的转换
  * 所有出现的String time 格式都必须为(yyyy-MM-dd HH:mm:ss),否则出错
  *
- * @author 赵仁杰
  */
 public class TimeExchange {
 
@@ -371,6 +371,15 @@ public class TimeExchange {
         return sd1.before(sd2);
     }
 
+    public static LocalDateTime StringToLocalTime(String time, String formatStr){
+        //1.具有转换功能的对象
+        DateTimeFormatter df = DateTimeFormatter.ofPattern(formatStr);
+        //3.LocalDate发动,将字符串转换成  df格式的LocalDateTime对象,的功能
+        LocalDateTime LocalTime = LocalDateTime.parse(time,df);
+
+        return LocalTime;
+    }
+
     /**
      * 获取一周的开始时间和结束时间
      * 获取本周星期一作为一周的第一天的起始时间和结束时间
@@ -565,10 +574,65 @@ public class TimeExchange {
         return datas;
     }
 
+    /**
+     * 获取时间date1与date2相差的秒数
+     *
+     * @param date1 起始时间
+     * @param date2 结束时间
+     * @return 返回相差的秒数
+     */
+    public static int getOffsetSeconds(Date date1, Date date2) {
+        int seconds = (int) ((date2.getTime() - date1.getTime()) / 1000);
+        return seconds;
+    }
+
+    /**
+     * 获取时间date1与date2相差的分钟数
+     *
+     * @param date1 起始时间
+     * @param date2 结束时间
+     * @return 返回相差的分钟数
+     */
+    public static int getOffsetMinutes(Date date1, Date date2) {
+        return getOffsetSeconds(date1, date2) / 60;
+    }
+
+    /**
+     * 获取时间date1与date2相差的小时数
+     *
+     * @param date1 起始时间
+     * @param date2 结束时间
+     * @return 返回相差的小时数
+     */
+    public static int getOffsetHours(Date date1, Date date2) {
+        return getOffsetMinutes(date1, date2) / 60;
+    }
+
+    /**
+     * 获取时间date1与date2相差的天数数
+     *
+     * @param date1 起始时间
+     * @param date2 结束时间
+     * @return 返回相差的天数
+     */
+    public static int getOffsetDays(Date date1, Date date2) {
+        return getOffsetHours(date1, date2) / 24+1;
+    }
+
+    public static boolean overlapping(String start1,String end1,String start2,String end2) throws ParseException {
+        boolean one = CompareDate(start1,end2,"HH:mm");
+        boolean two = CompareDate(start2,end1,"HH:mm");
+        return (one && two);
+    }
+
     public static void main(String[] args) throws ParseException {
-        LocalDate StartDate = LocalDate.parse("2023-07-02", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        LocalDate EndDate = LocalDate.parse("2023-08-02", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-        List<ClassSettingDateVo> datas = getDatesBetween(StartDate, EndDate);
+        LocalDateTime start = StringToLocalTime("12:00","HH:mm");
+        LocalDateTime end = StringToLocalTime("14:00","HH:mm");
+
+        LocalDateTime start1 = StringToLocalTime("13:00","HH:mm");
+        LocalDateTime end1 = StringToLocalTime("15:00","HH:mm");
+
+
         String sss = "";
     }
 }

+ 127 - 0
src/main/java/com/repair/common/utils/WeiXiaoUtil.java

@@ -0,0 +1,127 @@
+package com.repair.common.utils;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.repair.config.WxOpenidConfig;
+import com.repair.model.pojo.WxAccessToken;
+import com.repair.model.result.CommonResult;
+import com.repair.services.WxAccessTokenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/1 星期二 8:50
+ * @Description: com.repair.common.utils
+ * @Version: 1.0
+ */
+@Component
+public class WeiXiaoUtil {
+    @Autowired
+    private WxOpenidConfig wxOpenidConfig;
+    @Autowired
+    private WxAccessTokenService wxAccessTokenService;
+
+    /**
+     * 获取token
+     * @return
+     */
+    public String getApplicationToken() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Calendar nowTime = Calendar.getInstance();
+        nowTime.add(Calendar.MINUTE, 1);
+        String dateNow = sdf.format(nowTime.getTime());
+        System.out.println();
+        WxAccessToken aData = wxAccessTokenService.getRepairByDate(dateNow);
+        if(aData != null){
+            return aData.getAccessToken();
+        }
+
+        Map<String, Object> jsonMap = doGetApplicationToken();
+        String accessToken = jsonMap.get("access_token").toString();
+        String expiresIn = jsonMap.get("expires_in").toString();
+        System.out.println("accessToken:"+accessToken+";expires_in:"+expiresIn);
+
+        aData = new WxAccessToken();
+        aData.setAccessToken(accessToken);
+        Calendar newTime = Calendar.getInstance();
+        newTime.add(Calendar.SECOND, Integer.valueOf(expiresIn));
+        aData.setExpiresTime(newTime.getTime());
+
+        wxAccessTokenService.insertwxAccessToken(aData);
+        return accessToken;
+    }
+
+    /**
+     * 发送通知
+     * @param cards 卡号集合
+     * @param digest 摘要
+     * @param title 通知标题
+     * @param content 通知内容
+     * @param customs 自定义参数,长度为2,分别为提示文案和通知跳转链接
+     */
+    public CommonResult sendNotice(List<String> cards, String digest, String title, String content, List<String> customs) {
+        String uri = "https://open.wecard.qq.com/cgi-bin/notice/send?access_token="+ getApplicationToken();
+        Map<String, String> params = new HashMap<>();
+
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            params.put("cards", mapper.writeValueAsString(cards));
+            params.put("title", title);
+            params.put("content", content);
+            params.put("sender", "报修系统");
+            params.put("digest", digest);
+            if (customs != null && customs.size() == 2) {
+                params.put("customs", mapper.writeValueAsString(customs));
+            }
+
+            RestTemplate client = new RestTemplate();
+            ResponseEntity<String> tokenResponse = client.postForEntity(uri, params, String.class);
+            String body = tokenResponse.getBody();
+            //log.info("微校发送通知返回结果【{}】", body);
+            System.out.println("微校发送通知返回结果:"+body);
+            return CommonResult.ok("操作成功");
+        } catch (Exception e) {
+            System.out.println("微校发送通知错误:"+e.getMessage());
+            //log.error("微校发送通知错误【{}】", e.getMessage());
+            return CommonResult.fail("操作失败");
+        }
+    }
+
+    /**
+     * 获取token
+     * @return
+     */
+    private Map<String, Object> doGetApplicationToken() {
+        String uri = "https://open.wecard.qq.com/cgi-bin/oauth2/token";
+
+        // 构建请求参数
+        Map<String, String> tokenParams = new HashMap<>();
+        tokenParams.put("app_key", wxOpenidConfig.getAppid());
+        tokenParams.put("app_secret", wxOpenidConfig.getAppkey());
+        tokenParams.put("grant_type", "client_credentials");
+        tokenParams.put("scope", "base");
+        tokenParams.put("ocode", wxOpenidConfig.getOcode());
+
+        try {
+            RestTemplate client = new RestTemplate();
+            ResponseEntity<String> tokenResponse = client.postForEntity(uri, tokenParams, String.class);
+            String body = tokenResponse.getBody();
+            ObjectMapper mapper = new ObjectMapper();
+            Map<String, Object> jsonMap = mapper.readValue(body, new TypeReference<Map<String, Object>>() {});
+
+
+            return jsonMap;
+        } catch (Exception e) {
+            String sss = e.getMessage();
+        }
+        return null;
+    }
+}

+ 4 - 0
src/main/java/com/repair/config/WxOpenidConfig.java

@@ -23,5 +23,9 @@ public class WxOpenidConfig {
     //granttype
     private String granttype;
 
+    //ip地址
     private String ipconfig;
+
+    //微校主体码
+    private String ocode;
 }

+ 48 - 8
src/main/java/com/repair/controller/RepairAdminController.java

@@ -1,8 +1,7 @@
 package com.repair.controller;
 
 import com.repair.api.RepairAdminControllerAPI;
-import com.repair.common.utils.AesUtils;
-import com.repair.common.utils.paramUtils;
+import com.repair.common.utils.*;
 import com.repair.model.enumModel.eIsSuper;
 import com.repair.model.enumModel.eStatu;
 import com.repair.model.pojo.RepairAdmin;
@@ -10,7 +9,9 @@ import com.repair.model.request.freezeRepairAdminRequest;
 import com.repair.model.request.updateRepairAdminRequest;
 import com.repair.model.result.CommonResult;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.ConsumableExcelVo;
 import com.repair.services.RepairAdminService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -21,6 +22,10 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -56,7 +61,7 @@ public class RepairAdminController implements RepairAdminControllerAPI {
         if (data != null) {
             return CommonResult.fail("该账号已存在!");
         }
-
+        ra.setIsMobile(0);
         int result = repairAdminService.insertRepairAdmin(ra); // 帮我们自动生成id
 
         return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
@@ -68,13 +73,21 @@ public class RepairAdminController implements RepairAdminControllerAPI {
      * @param currentPage 当前页
      * @param pageCount   一页数据条数
      * @param account     账号
-     * @param phone       手机号
-     * @param userName    账号名称
+     * @param startTime   开始时间
+     * @param endTime     结束时间
      * @return
      */
     @Override
-    public CommonResult queryPageRepairAdmins(@RequestParam int currentPage, @RequestParam int pageCount, String account, String phone, String userName) {
-        PageUtils<RepairAdmin> result = repairAdminService.queryPageList(currentPage, pageCount, account, phone, userName);
+    public CommonResult queryPageRepairAdmins(@RequestParam int currentPage, @RequestParam int pageCount, String account, String startTime, String endTime) {
+        if (startTime != null && endTime != null) {
+            try {
+                startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+                endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+            } catch (Exception e) {
+            }
+        }
+
+        PageUtils<RepairAdmin> result = repairAdminService.queryPageList(currentPage, pageCount, account, startTime, endTime);
 
         return CommonResult.ok(result);
     }
@@ -168,8 +181,35 @@ public class RepairAdminController implements RepairAdminControllerAPI {
     }
 
     @Override
-    public void downloadRepairAdminExcel(String account, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    public void downloadRepairAdminExcel(String account, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("username", "昵称");
+        map.put("account", "账号");
+        map.put("phone", "手机号");
+        map.put("updateTimeStr", "创建时间");
+
+        if (startTime != null && endTime != null) {
+            try {
+                startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+                endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+            } catch (Exception e) {
+            }
+        }
+
+        List<RepairAdmin> datas = repairAdminService.queryRepairAdminList(account, startTime, endTime);
+
+        List<String> orderList = new ArrayList<>();
+        orderList.add("username");
+        orderList.add("account");
+        orderList.add("phone");
+        orderList.add("updateTimeStr");
+
+        //导出逻辑 这里的list是从导入里面哪来的 map1与map不一样 orderList这里为空
+        Workbook workbook = ExcelExportUtil.createWorkbook(datas, map, 1, "账号管理表", orderList);
 
+        ExcelUtils.excelDownload(workbook, "账号管理.xlsx", response);
     }
 }
 

+ 98 - 43
src/main/java/com/repair/controller/RepairClassesSettingsController.java

@@ -2,6 +2,7 @@ package com.repair.controller;
 
 import com.repair.annotation.PassToken;
 import com.repair.api.RepairClassesSettingsControllerAPI;
+import com.repair.common.utils.ExcelExportUtil;
 import com.repair.common.utils.ExcelUtils;
 import com.repair.common.utils.TimeExchange;
 import com.repair.common.utils.paramUtils;
@@ -36,6 +37,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -70,6 +72,17 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
             return CommonResult.fail("开始日期不能为空");
         }
 
+        //防止选择的班次重叠
+        List<RepairShiftSettings> datas = repairShiftSettingsService.getRepairsByShiftIds(ircr.getShiftIds());
+        for (int i = 0;i<datas.size();i++){
+            for (int j = i+1;j<datas.size();j++){
+                boolean isOver = TimeExchange.overlapping(datas.get(i).getStartTime(),datas.get(i).getEndTime(),datas.get(j).getStartTime(),datas.get(j).getEndTime());
+                if(isOver){
+                    return CommonResult.fail(datas.get(i).getStartTime()+"-"+datas.get(i).getEndTime()+"时间段和"+datas.get(j).getStartTime()+"-"+datas.get(j).getEndTime()+"时间段存在重叠");
+                }
+            }
+        }
+
         RepairClassesSettings rcs = new RepairClassesSettings();
 
         rcs.setUserId(ircr.getUserId());
@@ -82,7 +95,7 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
     }
 
     @Override
-    public CommonResult updateRepairClassesSettingsById(updateRepairClassesRequest urcr, BindingResult bindingResult) {
+    public CommonResult updateRepairClassesSettingsById(updateRepairClassesRequest urcr, BindingResult bindingResult) throws ParseException {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -92,6 +105,17 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
             return CommonResult.fail("开始日期不能为空");
         }
 
+        //防止选择的班次重叠
+        List<RepairShiftSettings> datas = repairShiftSettingsService.getRepairsByShiftIds(urcr.getShiftIds());
+        for (int i = 0;i<datas.size();i++){
+            for (int j = i+1;j<datas.size();j++){
+                boolean isOver = TimeExchange.overlapping(datas.get(i).getStartTime(),datas.get(i).getEndTime(),datas.get(j).getStartTime(),datas.get(j).getEndTime());
+                if(isOver){
+                    return CommonResult.fail(datas.get(i).getStartTime()+"-"+datas.get(i).getEndTime()+"时间段和"+datas.get(j).getStartTime()+"-"+datas.get(j).getEndTime()+"时间段存在重叠");
+                }
+            }
+        }
+
         RepairClassesSettings rcs = new RepairClassesSettings();
         rcs.setId(urcr.getId());
         rcs.setUserId(urcr.getUserId());
@@ -156,42 +180,52 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
         return CommonResult.ok(data);
     }
 
-//    @Override
-//    public CommonResult queryPageRepairClassesSettingss(int currentPage, int pageCount, String name) {
-//        PageUtils<RepairClassesSettings> result = repairClassesSettingsService.queryPageRepairClassesSettingss(currentPage, pageCount, name);
-//
-//        List<Integer> userIDs = result.getList().stream().map(RepairClassesSettings::getUserId).distinct().collect(Collectors.toList());
-//
-//        List<RepairUser> users = repairUserService.getRepairs(userIDs);
-//        List<RepairShiftSettings> shifs = repairShiftSettingsService.getRepairs();
-//
-//        List<RepairClassesVo> datas = new ArrayList<>();
-//        for (RepairClassesSettings data : result.getList()) {
-//            Optional<RepairUser> userdata = users.stream().filter(e -> e.getId() == data.getUserId()).findFirst();
-//
-//            RepairUser user = null;
-//            if (userdata != null && userdata.isPresent()) {
-//                user = userdata.get();
-//            }
-//            RepairClassesVo vo = new RepairClassesVo();
-//            vo.setId(data.getId());
-//            vo.setUserId(data.getUserId());
-//            vo.setStartDate(data.getStartDate());
-//            vo.setUserName(user == null ? "" : user.getUserName());
-//            vo.setShiftIds(Arrays.asList(data.getShiftId().split(",")));
-//            List<String> shiftNames = new ArrayList<>();
-//            for (String ssi : vo.getShiftIds()) {
-//                Optional<RepairShiftSettings> shif = shifs.stream().filter(e -> e.getId() == Integer.valueOf(ssi)).findFirst();
-//                if (shif != null && shif.isPresent()) {
-//                    shiftNames.add(shif.get().getName());
-//                }
-//            }
-//            vo.setShiftNames(shiftNames);
-//            datas.add(vo);
-//        }
-//
-//        return CommonResult.ok(new PageUtils(datas, result.getTotalCount(), result.getTotalPage(), result.getCurrPage()));
-//    }
+    @Override
+    public void downloadRepairClassesExcel(String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+        List<RepairUser> result = repairUserService.queryRepairUsers();
+
+        List<Integer> userIds = result.stream().map(RepairUser::getId).collect(Collectors.toList());
+
+        if (startTime == null || endTime == null) {
+            String[] weeks = TimeExchange.getCurrentWeekTimeFrame();
+            startTime = weeks[0];
+            endTime = weeks[1];
+        }
+
+        LocalDate StartDate = LocalDate.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDate EndDate = LocalDate.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        List<ClassSettingDateVo> dates = TimeExchange.getDatesBetween(StartDate, EndDate);
+
+        try {
+            startTime = startTime == null ? startTime : TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+            endTime = endTime == null ? endTime : TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+        } catch (Exception e) {
+
+        }
+
+        List<ClassesSettingVo> datas = repairClassesSettingsService.getRepairByUserIds(userIds, startTime, endTime);
+        List<Map<String,Object>> list = new ArrayList<>();
+        for (RepairUser ru:result) {
+            Map<String,Object> map = new LinkedHashMap<>();
+            map.put("名称",ru.getUserName());
+            List<ClassesSettingVo> classDatas = datas.stream().filter(e -> e.getUserId() == ru.getId()).collect(Collectors.toList());
+
+            for (ClassSettingDateVo d:dates) {
+                Optional<ClassesSettingVo> o = classDatas.stream().filter(e -> e.getStartDate().equals(d.getDateStr())).findFirst();
+                if (!(o != null && o.isPresent())) {
+                    map.put(d.getDateStr()+"("+d.getWeekStr()+")","");
+                }else{
+                    map.put(d.getDateStr()+"("+d.getWeekStr()+")",o.get().getShiftName());
+                }
+            }
+
+            list.add(map);
+        }
+
+        ExcelExportUtil.createExcel(list, "testExcel.xlsx", "测试文档", response);
+    }
+
+
 
     @Override
     public CommonResult deleteRepairClassesSettingsById(int id) {
@@ -207,11 +241,11 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
 
     @Override
     public void downloadRepairClassesSettingExcel(HttpServletResponse response) {
-        ExcelUtils.fileDownload("\\自定义排班模板.xlsx", response);
+        ExcelUtils.fileDownload("/自定义排班模板.xlsx", response);
     }
 
     @Override
-    public CommonResult importRepairClassesSettingExcel(MultipartFile file) throws IOException {
+    public CommonResult importRepairClassesSettingExcel(MultipartFile file) throws IOException, ParseException {
         String ContentType = file.getContentType();
         InputStream inputStream = file.getInputStream();
         List<RepairClassesSettings> result = new ArrayList<>();
@@ -242,7 +276,7 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
     }
 
 
-    private CommonResult<List<RepairClassesSettings>> readXls(InputStream inputStream) throws IOException {
+    private CommonResult<List<RepairClassesSettings>> readXls(InputStream inputStream) throws IOException, ParseException {
         int days = 0;
         int month = 0;
         List<String> datas = new ArrayList<>();
@@ -255,7 +289,7 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
         List<Integer> userZZs = new ArrayList<>();
         userZZs.add(1);
         userZZs.add(2);
-        List<RepairUser> users = repairUserService.getRepairByUserZZ(userZZs);
+        List<RepairUser> users = repairUserService.getRepairByUserZZ(userZZs,null);
         List<RepairShiftSettings> shifts = repairShiftSettingsService.getRepairs();
         //rowNum = 3 从第三行开始获取值
         //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
@@ -310,16 +344,26 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
                         String stringCellValue = row.getCell(d).getStringCellValue();
                         String[] shiftStrs = stringCellValue.split("、");
                         List<String> shiftIds = new ArrayList<>();
+                        List<RepairShiftSettings> shiftDatas = new ArrayList<>();
                         for (String shiftStr : shiftStrs) {
                             if (!shiftStr.equals("")) {
                                 Optional<RepairShiftSettings> shiftData = shifts.stream().filter(e -> e.getName().equals(shiftStr)).findFirst();
                                 if (shiftData != null && shiftData.isPresent()) {
                                     shiftIds.add(shiftData.get().getId().toString());
+                                    shiftDatas.add(shiftData.get());
                                 } else {
                                     return CommonResult.fail(UserName + "的" + datas.get(d - 1) + "的" + shiftStr + "数据不存在");
                                 }
                             }
+                        }
 
+                        for (int i = 0;i<shiftDatas.size();i++){
+                            for (int j = i+1;j<shiftDatas.size();j++){
+                                boolean isOver = TimeExchange.overlapping(shiftDatas.get(i).getStartTime(),shiftDatas.get(i).getEndTime(),shiftDatas.get(j).getStartTime(),shiftDatas.get(j).getEndTime());
+                                if(isOver){
+                                    return CommonResult.fail(UserName +"师傅的"+datas.get(d - 1)+"日"+shiftDatas.get(i).getStartTime()+"-"+shiftDatas.get(i).getEndTime()+"时间段和"+shiftDatas.get(j).getStartTime()+"-"+shiftDatas.get(j).getEndTime()+"时间段存在重叠");
+                                }
+                            }
                         }
                         classData.setShiftId(StringUtils.join(shiftIds, ','));
                         result.add(classData);
@@ -330,7 +374,7 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
         return CommonResult.ok(result);
     }
 
-    private CommonResult<List<RepairClassesSettings>> readXlsx(InputStream inputStream) throws IOException {
+    private CommonResult<List<RepairClassesSettings>> readXlsx(InputStream inputStream) throws IOException, ParseException {
         int days = 0;
         int month = 0;
         List<String> datas = new ArrayList<>();
@@ -343,7 +387,7 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
         List<Integer> userZZs = new ArrayList<>();
         userZZs.add(1);
         userZZs.add(2);
-        List<RepairUser> users = repairUserService.getRepairByUserZZ(userZZs);
+        List<RepairUser> users = repairUserService.getRepairByUserZZ(userZZs,null);
         List<RepairShiftSettings> shifts = repairShiftSettingsService.getRepairs();
         //rowNum = 3 从第三行开始获取值
         //sheetAt.getLastRowNum():从0开始统计数量 所以得+1
@@ -398,16 +442,27 @@ public class RepairClassesSettingsController implements RepairClassesSettingsCon
                         String stringCellValue = row.getCell(d).getStringCellValue();
                         String[] shiftStrs = stringCellValue.split("、");
                         List<String> shiftIds = new ArrayList<>();
+                        List<RepairShiftSettings> shiftDatas = new ArrayList<>();
                         for (String shiftStr : shiftStrs) {
                             if (!shiftStr.equals("")) {
                                 Optional<RepairShiftSettings> shiftData = shifts.stream().filter(e -> e.getName().equals(shiftStr)).findFirst();
                                 if (shiftData != null && shiftData.isPresent()) {
                                     shiftIds.add(shiftData.get().getId().toString());
+                                    shiftDatas.add(shiftData.get());
                                 } else {
                                     return CommonResult.fail(UserName + "的" + datas.get(d - 1) + "的" + shiftStr + "数据不存在");
                                 }
                             }
                         }
+
+                        for (int i = 0;i<shiftDatas.size();i++){
+                            for (int j = i+1;j<shiftDatas.size();j++){
+                                boolean isOver = TimeExchange.overlapping(shiftDatas.get(i).getStartTime(),shiftDatas.get(i).getEndTime(),shiftDatas.get(j).getStartTime(),shiftDatas.get(j).getEndTime());
+                                if(isOver){
+                                    return CommonResult.fail(UserName +"师傅的"+datas.get(d - 1)+"日"+shiftDatas.get(i).getStartTime()+"-"+shiftDatas.get(i).getEndTime()+"时间段和"+shiftDatas.get(j).getStartTime()+"-"+shiftDatas.get(j).getEndTime()+"时间段存在重叠");
+                                }
+                            }
+                        }
                         classData.setShiftId(StringUtils.join(shiftIds, ','));
                         result.add(classData);
                     }

+ 67 - 0
src/main/java/com/repair/controller/RepairConsumablesController.java

@@ -2,18 +2,32 @@ package com.repair.controller;
 
 
 import com.repair.api.RepairConsumablesControllerAPI;
+import com.repair.common.utils.ExcelExportUtil;
+import com.repair.common.utils.ExcelUtils;
+import com.repair.common.utils.TimeExchange;
 import com.repair.common.utils.paramUtils;
+import com.repair.model.pojo.RepairCollaborateRecord;
 import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.pojo.RepairShiftSettings;
 import com.repair.model.result.CommonResult;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.ConsumableExcelVo;
+import com.repair.model.vo.ConsumablePageVo;
+import com.repair.model.vo.ConsumeVo;
 import com.repair.services.RepairConsumablesService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.InvocationTargetException;
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -71,5 +85,58 @@ public class RepairConsumablesController implements RepairConsumablesControllerA
 
         return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
     }
+
+    @Override
+    public CommonResult queryRepairConsumablePageList(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
+
+        if(startTime != null && endTime != null){
+            try {
+                startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+                endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+            } catch (Exception e) {
+            }
+        }
+
+        PageUtils<ConsumablePageVo> result = repairConsumablesService.queryConsumablePageList(currentPage, pageCount, keyWord,startTime,endTime);
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public void downloadRepairConsumableExcel(String keyWord, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+        Map<String, String> map = new HashMap<>();
+        //表头与键值对的映射关系
+        map.put("id", "数据ID");
+        map.put("consumeName", "耗材名称");
+        map.put("price", "单价(元)");
+        map.put("number", "数量");
+        map.put("totalPrice", "金额(元)");
+        map.put("articleName", "工单");
+        map.put("reportTimeStr", "报修时间");
+        map.put("updateTimeStr", "维修时间");
+
+        if(startTime != null && endTime != null){
+            try {
+                startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+                endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+            } catch (Exception e) {
+            }
+        }
+        List<ConsumableExcelVo> datas = repairConsumablesService.queryConsumablePageList(keyWord, startTime, endTime);
+
+        List<String> orderList = new ArrayList<>();
+        orderList.add("id");
+        orderList.add("consumeName");
+        orderList.add("price");
+        orderList.add("number");
+        orderList.add("totalPrice");
+        orderList.add("articleName");
+        orderList.add("reportTimeStr");
+        orderList.add("updateTimeStr");
+
+        //导出逻辑 这里的list是从导入里面哪来的 map1与map不一样 orderList这里为空
+        Workbook workbook = ExcelExportUtil.createWorkbook(datas, map, 1, "耗材记录表", orderList);
+
+        ExcelUtils.excelDownload(workbook, "耗材记录.xlsx", response);
+    }
 }
 

+ 3 - 3
src/main/java/com/repair/controller/RepairConsumeController.java

@@ -157,7 +157,7 @@ public class RepairConsumeController implements RepairConsumeControllerAPI {
         map.put("price", "耗材单价");
         map.put("artileName", "物品类型");
         map.put("entryName", "录入人员");
-        map.put("updateTime", "录入时间");
+        map.put("updateTimeStr", "录入时间");
 
         if(startTime != null && endTime != null){
             try {
@@ -175,7 +175,7 @@ public class RepairConsumeController implements RepairConsumeControllerAPI {
         orderList.add("price");
         orderList.add("artileName");
         orderList.add("entryName");
-        orderList.add("updateTime");
+        orderList.add("updateTimeStr");
 
         //导出逻辑 这里的list是从导入里面哪来的 map1与map不一样 orderList这里为空
         Workbook workbook = ExcelExportUtil.createWorkbook(datas, map, 1, "耗材管理表", orderList);
@@ -185,7 +185,7 @@ public class RepairConsumeController implements RepairConsumeControllerAPI {
 
     @Override
     public void downloadRepairConsumeModelExcel(HttpServletResponse response) {
-        ExcelUtils.fileDownload("\\耗材管理模板.xlsx", response);
+        ExcelUtils.fileDownload("/耗材管理模板.xlsx", response);
     }
 
     @Override

+ 54 - 3
src/main/java/com/repair/controller/RepairLeaveMessageController.java

@@ -3,18 +3,27 @@ package com.repair.controller;
 
 import com.repair.api.RepairLeaveMessageControllerAPI;
 import com.repair.common.utils.paramUtils;
+import com.repair.model.enumModel.eRecordStatu;
 import com.repair.model.pojo.RepairLeaveMessage;
+import com.repair.model.pojo.RepairRecord;
+import com.repair.model.request.repairLeaveMessageRequest;
 import com.repair.model.result.CommonResult;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.RepairLogisticsVo;
 import com.repair.services.RepairLeaveMessageService;
+import com.repair.services.RepairRecordService;
+import com.repair.services.RepairUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
- *  前端控制器
+ * 前端控制器
  * </p>
  *
  * @author ceshi
@@ -25,9 +34,14 @@ public class RepairLeaveMessageController implements RepairLeaveMessageControlle
 
     @Autowired
     private RepairLeaveMessageService repairLeaveMessageService;
+    @Autowired
+    private RepairRecordService repairRecordService;
+    @Autowired
+    private RepairUserService repairUserService;
+
 
     @Override
-    public CommonResult InsertrepairLeaveMessage(RepairLeaveMessage rc, BindingResult bindingResult){
+    public CommonResult InsertrepairLeaveMessage(RepairLeaveMessage rc, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -39,7 +53,7 @@ public class RepairLeaveMessageController implements RepairLeaveMessageControlle
     }
 
     @Override
-    public CommonResult updaterepairLeaveMessageById(RepairLeaveMessage rc, BindingResult bindingResult){
+    public CommonResult updaterepairLeaveMessageById(RepairLeaveMessage rc, BindingResult bindingResult) {
         if (bindingResult.hasErrors()) {
             String st = paramUtils.getParamError(bindingResult);
             return CommonResult.fail(st);
@@ -68,5 +82,42 @@ public class RepairLeaveMessageController implements RepairLeaveMessageControlle
 
         return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
     }
+
+    @Override
+    public CommonResult transferToLogistics(repairLeaveMessageRequest rlmr, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            String st = paramUtils.getParamError(bindingResult);
+            return CommonResult.fail(st);
+        }
+
+        /**
+         * 获取报修工单对应校区的所有后勤人员
+         */
+        List<RepairLogisticsVo> users = repairUserService.queryLogisticsList(rlmr.getRecordId());
+        if (users.size() <= 0) {
+            return CommonResult.fail("该报修区域缺少后勤人员");
+        }
+
+        List<RepairLeaveMessage> datas = new ArrayList<>();
+        for (RepairLogisticsVo u : users) {
+            RepairLeaveMessage data = new RepairLeaveMessage();
+            data.setSenderId(rlmr.getUserId());
+            data.setRecipientId(u.getId());
+            data.setContent(rlmr.getContent());
+            data.setRecordId(rlmr.getRecordId());
+            datas.add(data);
+        }
+
+        boolean result = repairLeaveMessageService.inserBatchLeaveMessage(datas);
+
+        //将工单状态更改为待处理
+        RepairRecord rr = new RepairRecord();
+        rr.setId(rlmr.getRecordId());
+        rr.setMaintenanceState(eRecordStatu.ToLogistics.getValue());
+
+        repairRecordService.updateRepairRecord(rr);
+
+        return result ? CommonResult.ok("操作成功") : CommonResult.fail("操作失败");
+    }
 }
 

+ 450 - 25
src/main/java/com/repair/controller/RepairRecordController.java

@@ -3,29 +3,33 @@ package com.repair.controller;
 
 import com.jcraft.jsch.*;
 import com.repair.api.RepairRecordControllerAPI;
-import com.repair.common.utils.StrUtils;
-import com.repair.common.utils.TimeExchange;
-import com.repair.common.utils.paramUtils;
+import com.repair.common.utils.*;
 import com.repair.model.enumModel.eRecordStatu;
-import com.repair.model.pojo.RepairConsumables;
-import com.repair.model.pojo.RepairRecord;
+import com.repair.model.enumModel.eTechnicianStatu;
+import com.repair.model.enumModel.eUserZZ;
+import com.repair.model.pojo.*;
 import com.repair.model.request.repairRecordRequest;
+import com.repair.model.request.timeVo;
 import com.repair.model.result.CommonResult;
 import com.repair.model.result.PageUtils;
-import com.repair.model.vo.MyRepairRecordVo;
-import com.repair.model.vo.RepairRecordCountVo;
-import com.repair.model.vo.UploadFileVo;
-import com.repair.services.RepairConsumablesService;
-import com.repair.services.RepairRecordService;
+import com.repair.model.vo.*;
+import com.repair.services.*;
+import lombok.Data;
+import lombok.SneakyThrows;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
+import java.lang.reflect.Array;
+import java.text.MessageFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -43,9 +47,24 @@ import static com.repair.common.utils.StrUtils.getUUIDBits;
 public class RepairRecordController implements RepairRecordControllerAPI {
 
     @Autowired
+    private RepairUserService repairUserService;
+    @Autowired
     private RepairRecordService repairRecordService;
     @Autowired
+    private RepairReceivingService repairReceivingService;
+    @Autowired
     private RepairConsumablesService repairConsumablesService;
+    @Autowired
+    private RepairLeaveMessageService repairLeaveMessageService;
+    @Autowired
+    private RepairShiftSettingsService repairShiftSettingsService;
+    @Autowired
+    private RepairDispatchRecordService repairDispatchRecordService;
+    @Autowired
+    private RepairCollaborateRecordService repairCollaborateRecordService;
+
+    @Autowired
+    private WeiXiaoUtil weiXiaoUtil;
 
     @Override
     public CommonResult InsertRepairRecord(repairRecordRequest rrr, BindingResult bindingResult) {
@@ -56,6 +75,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         RepairRecord rr = new RepairRecord();
         rr.setAreaId(rrr.getAreaId());
         rr.setArticleId(rrr.getArticleId());
+        rr.setSchoolId(rrr.getSchoolId());
         rr.setRecordNo(getUUIDBits(15));
         rr.setAddress(rrr.getAddress());
         rr.setDescription(rrr.getDescription());
@@ -66,6 +86,7 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         rr.setUserPhone(rrr.getUserPhone());
         rr.setReportTime(new Date());
         rr.setMaintenanceState(eRecordStatu.Dispatch.getValue());
+        rr.setBuildId(rrr.getBuildId());
         int result = repairRecordService.insertRepairRecord(rr);
 
         return result > 0 ? CommonResult.ok("提交成功") : CommonResult.fail("提交失败");
@@ -160,6 +181,22 @@ public class RepairRecordController implements RepairRecordControllerAPI {
         return CommonResult.ok(result);
     }
 
+    @Override
+    public CommonResult revokeRepairRecordById(int id) {
+        RepairRecord data = repairRecordService.getRepairById(id);
+        if (data == null) {
+            return CommonResult.fail("当前数据不存在,撤销失败!");
+        }
+
+        RepairRecord rr = new RepairRecord();
+        rr.setId(id);
+        rr.setMaintenanceState(eRecordStatu.Canceled.getValue());
+
+        int result = repairRecordService.updateRepairRecord(rr);
+
+        return result > 0 ? CommonResult.ok("撤销成功") : CommonResult.fail("撤销失败");
+    }
+
     @Override//还要处理一下订单超时状态
     public CommonResult getRepairRecordsByUserId(int currentPage, int pageCount, int userId, int state) {
         PageUtils<MyRepairRecordVo> result = repairRecordService.queryMyRepairRecordList(currentPage, pageCount, state, userId);
@@ -173,35 +210,423 @@ public class RepairRecordController implements RepairRecordControllerAPI {
             r.setImages(Arrays.asList(r.getImage().split(",")));
             List<RepairConsumables> datas = rcs.stream().filter(e -> e.getRecordId() == r.getId()).collect(Collectors.toList());
             r.setConsumables(datas);
+        }
+        return CommonResult.ok(result);
+    }
+
+
+    @Override
+    public CommonResult getRepairRecordCountByUserId(int userId) {
+        RepairRecordCountVo result = repairRecordService.getRepairRecordCount(userId);
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult getTechnicianCountByUserId(int userId) {
+        String dateNow = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+        MaintenanceTechnicianVo result = repairRecordService.queryRepairTechnicianCount(userId, dateNow);
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult getTechniciansByUserId(int currentPage, int pageCount, int userId, int state) {
+        PageUtils<RepairTechnicianVo> result = null;
+        String dateNow = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+        switch (state) {
+            case 1://待接单
+                result = repairRecordService.queryPendingOrderList(currentPage, pageCount, userId, dateNow);
+                break;
+            case 2://维修中
+                result = repairRecordService.queryRepairOrderList(currentPage, pageCount, userId, dateNow);
+                break;
+            case 3://已超时
+                result = repairRecordService.queryTimeoutOrderList(currentPage, pageCount, userId, dateNow);
+                break;
+            case 4://待审核
+                result = repairRecordService.queryExamineOrderList(currentPage, pageCount, userId);
+                break;
+            default:
+                break;
+        }
+
+        return CommonResult.ok(result);
+    }
+
+    @Override
+    public CommonResult repairRecordReminder(int recordId) {
+        // 根据报修ID查找是否有派单数据 并且是有效的
+        RepairRecord record = repairRecordService.getRepairById(recordId);
+        if (record == null) {
+            return CommonResult.fail("报修工单数据无效,催单失败");
+        }
+
+        if (record.getMaintenanceState() >= eRecordStatu.Finished.getValue()) {
+            return CommonResult.fail("当前报修工单状态不支持催单操作");
+        }
+
+        List<String> cardnumber = new ArrayList<>();
+
+        // 有的话就发给被派单的维修师傅
+        // 否则就发给郭师傅
+        List<RepairCardNumberVo> cardNumbers = repairDispatchRecordService.queryRepairCardNumber(recordId);
+        if (cardNumbers.size() <= 0) {
+            List<Integer> uz = new ArrayList<>();
+            uz.add(eUserZZ.Monitor.getValue());
+            List<RepairUser> users = repairUserService.getRepairByUserZZ(uz, record.getSchoolId());
+            cardnumber = users.stream().map(RepairUser::getCardNumber).collect(Collectors.toList());
+        } else {
+            cardnumber = cardNumbers.stream().map(RepairCardNumberVo::getCardNumber).collect(Collectors.toList());
+        }
+
+        if (cardnumber.size() <= 0) {
+            return CommonResult.fail("当前工单无接收人,催单失败");
+        }
+        String content = MessageFormat.format("【报修系统】维修师傅,你好,工单{0}用户催单,请及时处理,谢谢!", record.getRecordNo());
+        CommonResult result = weiXiaoUtil.sendNotice(cardnumber, "报修工单催单", "催单", content, null);
+        return result;
+    }
+
+    @Override
+    public CommonResult queryManageCount() {
+        RepairManageCountVo result = repairRecordService.queryManageCount();
+        return CommonResult.ok(result);
+    }
+
+
+    /**
+     * 全部    0
+     * 待接单  1
+     * 维修中  2
+     * 待处理  3
+     * 待审核  4
+     * 已完成  5
+     * 已取消  6
+     * 已关单  7
+     * 已超时  8
+     */
+    @Override
+    public CommonResult queryManagePage(int currentPage, int pageCount, int state, String keyWord, String startTime, String endTime) {
+
+        if (startTime != null && endTime != null) {
+            try {
+                startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
+                endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
+            } catch (Exception e) {
+            }
+        }
 
-            //状态为待接单 判断是否是超时未接
-            if (r.getStateId() == eRecordStatu.Dispatch.getValue()) {
-                //超时未接判断标准:派单时间 < (当前时间 - 接单考核时间)
-                if (r.getDispatchTime() != null) {
-                    Date dateTime = DateUtils.addMinutes(new Date(), -r.getAcceptanceAssessTime());
+        PageUtils<RepairRecordPageVo> result = null;
+        /**
+         * 出现延时按钮
+         * 待接单 已完成 已取消 已关单 不需要出现延时按钮
+         * 0 2 3 4 8 需要
+         */
+        String stateStr = null;
+        switch (state) {
+            case 0:
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    if (r.getMaintenanceState() == 1) {
+                        r.setState("待接单");
+                    } else if (r.getMaintenanceState() == 2) {
+                        r.setState("维修中");
+                    } else if (r.getMaintenanceState() == 3) {
+                        r.setState("待处理");
+                    } else if (r.getMaintenanceState() == 5 || r.getMaintenanceState() == 6) {
+                        r.setState("待审核");
+                    } else if (r.getMaintenanceState() == 7) {
+                        r.setState("已完成");
+                    } else if (r.getMaintenanceState() == 8) {
+                        r.setState("已取消");
+                    } else if (r.getMaintenanceState() == 9) {
+                        r.setState("已关单");
+                    }
+                    r.setDelayed(1);
+                }
+                break;
+            case 1:
+                stateStr = "=1)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("待接单");
+                }
+                break;
+            case 2:
+                stateStr = "=2)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("维修中");
+                    r.setDelayed(1);
+                }
+                break;
+            case 3:
+                stateStr = "=3)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("待处理");
+                    r.setDelayed(1);
+                }
+                break;
+            case 4:
+                stateStr = "=5 or rr.maintenance_state = 6)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("待审核");
+                    r.setDelayed(1);
+                }
+                break;
+            case 5:
+                stateStr = "=7)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("已完成");
+                }
+                break;
+            case 6:
+                stateStr = "=8)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("已取消");
+                    r.setDelayed(1);
+                }
+                break;
+            case 7:
+                stateStr = "=9)";
+                result = repairRecordService.queryNotTimeout(currentPage, pageCount, stateStr, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("已关单");
+                }
+                break;
+            case 8:
+                result = repairRecordService.queryTimeout(currentPage, pageCount, keyWord, startTime, endTime);
+                for (RepairRecordPageVo r : result.getList()) {
+                    r.setState("已超时");
+                }
+                break;
+            default:
+                break;
+        }
+
+        if (result.getList().size() > 0) {
+            List<Integer> recordIds = result.getList().stream().map(RepairRecordPageVo::getId).collect(Collectors.toList());
+            /**
+             * 全部 待接单 待处理
+             * 出现派单按钮
+             * 没有派单记录的数据出现派单按钮
+             */
+            if (state == 0 || state == 1 || state == 3) {
+
+                List<RepairDispatchRecord> disps = repairDispatchRecordService.queryRepairDispatch(recordIds);
+                for (RepairRecordPageVo r : result.getList()) {
+                    long count = disps.stream().filter(e -> e.getRecordId().equals(r.getId())).count();
+                    r.setDispatch(count > 0 ? 0 : 1);
+                }
+            }
 
-                    if(r.getDispatchTime().before(dateTime)){
-                        r.setTimeoutStr("超时未接");
+            /**
+             * 全部 待审核
+             * 出现协作审核按钮
+             * 出现转单审核按钮
+             */
+            if (state == 0 || state == 4) {
+                List<CollaborateRecordVo> collaborates = repairCollaborateRecordService.queryRepairCollaborate(recordIds);
+                for (RepairRecordPageVo r : result.getList()) {
+                    long collaborate = collaborates.stream().filter(e -> e.getRecordId() == r.getId() && e.getState().equals("协作")).count();
+                    long transfer = collaborates.stream().filter(e -> e.getRecordId() == r.getId() && e.getState().equals("转单")).count();
+                    r.setCollaborate(collaborate > 0 ? 1 : 0);
+                    r.setTransfer(transfer > 0 ? 1 : 0);
+                }
+            }
+
+            if (state < 5 || state == 8) {
+                for (RepairRecordPageVo r : result.getList()) {
+                    if (r.getMaintenanceState() < eRecordStatu.Finished.getValue()) {
+                        r.setClose(1);
                     }
                 }
             }
-            //维修超时 报修时间 < (当前时间 - 维修考核时间)
-            if(r.getMaintenanceAssessTime() != null){
-                Date dateTime = DateUtils.addMinutes(new Date(), -r.getMaintenanceAssessTime());
 
-                if(r.getReportTime().before(dateTime)){
-                    r.setTimeoutStr("维修超时");
+            /**
+             * 全部 待处理 待审核 维修中
+             * 有耗材记录就显示改价按钮
+             * 出现改价按钮
+             */
+            if (state == 0 || state == 2 || state == 3 || state == 4) {
+                List<RepairConsumables> consumables = repairConsumablesService.getRepairsByRecordIds(recordIds);
+                for (RepairRecordPageVo r : result.getList()) {
+                    long collaborate = consumables.stream().filter(e -> e.getRecordId() == r.getId()).count();
+                    r.setChangePrice(collaborate > 0 ? 1 : 0);
                 }
             }
+
+            /**
+             * 出现回复按钮
+             * 有留言 且用户回复消息数大于后勤人员回复的
+             */
+            List<RepairLeaveMessage> messages = repairLeaveMessageService.getRepairsByRecordIds(recordIds);
+            for (RepairRecordPageVo r : result.getList()) {
+                List<RepairLeaveMessage> alls = messages.stream().filter(e -> e.getRecordId() == r.getId()).collect(Collectors.toList());
+                List<RepairLeaveMessage> owns = alls.stream().filter(e -> e.getRecordId() == r.getId() && e.getSenderId().equals(r.getUserId())).collect(Collectors.toList());
+                r.setReply(owns.size() > alls.size() / 2 ? 1 : 0);
+            }
+
         }
         return CommonResult.ok(result);
     }
 
-
     @Override
-    public CommonResult getRepairRecordCountByUserId(int userId) {
-        RepairRecordCountVo result = repairRecordService.getRepairRecordCount(userId);
+    public CommonResult queryPendingOrder(int currentPage, int pageCount, int userId) {
+        PageUtils<pendingOrderVo> result = repairRecordService.queryPendingOrder(currentPage, pageCount, userId);
         return CommonResult.ok(result);
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public CommonResult receiveOrders(int recordId, int userId) throws Exception {
+        try {
+            Date nowDate = new Date();
+            //获取订单
+            RepairRecord recordData = repairRecordService.getRepairById(recordId);
+            if (recordData == null) {
+                return CommonResult.fail("订单不存在,接单失败!");
+            }
+
+            if (!recordData.getMaintenanceState().equals(eRecordStatu.Dispatch.getValue())) {
+                return CommonResult.fail("订单状态错误,接单失败!");
+            }
+
+            //获取维修师傅的用户信息 并获取当天的排班数据
+            String dateNow = TimeExchange.DateToString(nowDate, "yyyy-MM-dd");
+            UserDataVo result = repairUserService.queryUserData(userId, dateNow);
+
+            if (result == null) {
+                return CommonResult.fail("非法身份,接单失败!");
+            }
+
+            if (result.getStartDate() == null || result.getShiftId() == null) {
+                return CommonResult.fail("当天未排班,无法接单!");
+            }
+
+            long count = Arrays.asList(result.getArticleId().split(",")).stream().filter(e -> e.equals(recordData.getArticleId().toString())).count();
+            if (count <= 0) {
+                return CommonResult.fail("无法维修该种类物品!");
+            }
+
+            List<String> shifts = Arrays.asList(result.getShiftId().split(","));
+            List<RepairShiftSettings> shiftDatas = repairShiftSettingsService.getRepairsByShiftIds(shifts);
+            if (shiftDatas.size() <= 0) {
+                return CommonResult.fail("当天未排班,无法接单!");
+            }
+
+            Integer isDuty = 0;
+            int acceptanceAssessTime = result.getAcceptanceAssessTime();
+            int maintenanceAssessTime = result.getMaintenanceAssessTime();
+            try {
+
+                //下班之后或者值班接的单不考核 将报修工单中的is_duty改为1
+                Date workTime = TimeExchange.StringToDate(dateNow + " " + shiftDatas.get(0).getEndTime() + ":00", "yyyy-MM-dd HH:mm:ss");
+                if (workTime.before(nowDate)) {
+                    isDuty = 1;
+                }
+
+                if (isDuty == 0) {
+                    List<timeVo> tvs = DelayedUtils.timeVos(shiftDatas);
+
+                    //工作的时间是否够修完 临下班接的单不做延长
+                    for (int i = 0; i < tvs.size(); i++) {
+                        Date startWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                        Date endWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+
+                        if (nowDate.before(startWorkTime)) {
+                            if (i == 0) {
+                                int minute = TimeExchange.getOffsetMinutes(nowDate, startWorkTime);
+                                int workMinte = TimeExchange.getOffsetMinutes(nowDate, endWorkTime);
+                                acceptanceAssessTime = acceptanceAssessTime + minute;
+                                acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                                maintenanceAssessTime = maintenanceAssessTime + minute;
+                                maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                                break;
+                            } else {
+                                Date lastEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i - 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                                if (lastEndWorkTime.before(nowDate)) {
+                                    Date nextStartWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                                    Date nextEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                                    int minute = TimeExchange.getOffsetMinutes(nowDate, nextStartWorkTime);
+                                    int workMinte = TimeExchange.getOffsetMinutes(nowDate, nextEndWorkTime);
+                                    acceptanceAssessTime = acceptanceAssessTime + minute;
+                                    acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                                    maintenanceAssessTime = maintenanceAssessTime + minute;
+                                    maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                                    break;
+                                }
+                            }
+                        } else if (startWorkTime.before(nowDate) && nowDate.before(endWorkTime)) {
+                            int workMinte = TimeExchange.getOffsetMinutes(nowDate, endWorkTime);
+                            acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                            maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, endWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 1);
+                            break;
+                        } else if (endWorkTime.before(nowDate) && nowDate.before(TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss"))) {
+                            Date nextStartWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getStart() + ":00", "yyyy-MM-dd HH:mm:ss");
+                            Date nextEndWorkTime = TimeExchange.StringToDate(dateNow + " " + tvs.get(i + 1).getEnd() + ":00", "yyyy-MM-dd HH:mm:ss");
+                            int minute = TimeExchange.getOffsetMinutes(nowDate, nextStartWorkTime);
+                            int workMinte = TimeExchange.getOffsetMinutes(nowDate, nextEndWorkTime);
+                            acceptanceAssessTime = acceptanceAssessTime + minute;
+                            acceptanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, acceptanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                            maintenanceAssessTime = maintenanceAssessTime + minute;
+                            maintenanceAssessTime = DelayedUtils.addMinuteStart(tvs, nextEndWorkTime, maintenanceAssessTime, nowDate, dateNow, workMinte, i, 2);
+                            break;
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                throw new Exception("延时异常,抢单失败!");
+            }
+
+            //将工单状态更新为维修中
+            recordData.setMaintenanceState(eRecordStatu.Maintenance.getValue());
+            recordData.setMaintenancerId(String.valueOf(userId));
+            recordData.setMaintenancerName(result.getUserName());
+            recordData.setMaintenancerPhone(result.getUserPhone());
+            recordData.setIsDuty(isDuty);
+            int updateRecord = repairRecordService.updateRepairRecord(recordData);
+            if (updateRecord <= 0) {
+                throw new Exception("抢单失败!");
+            }
+
+            //创建派单记录
+            RepairDispatchRecord rdr = new RepairDispatchRecord();
+            rdr.setRecordId(recordId);
+            rdr.setUsersId(userId);
+            rdr.setAssignedTime(new Date());
+            rdr.setAcceptanceAssessTime(acceptanceAssessTime);
+            rdr.setOrderType(0);
+            rdr.setIsLoseEfficacy(0);
+            int dispatch = repairDispatchRecordService.insertRepairDispatchRecord(rdr);
+            if (dispatch <= 0) {
+                throw new Exception("抢单失败!");
+            }
+
+            //创建接单记录
+            RepairReceiving rr = new RepairReceiving();
+            rr.setRecordId(recordId);
+            rr.setDispatchId(rdr.getId());
+            rr.setUserId(userId);
+            rr.setReceivingTime(new Date());
+            rr.setMaintenanceAssessTime(maintenanceAssessTime);
+            rr.setIsLoseEfficacy(0);
+            int receive = repairReceivingService.insertRepairReceiving(rr);
+            if (receive <= 0) {
+                throw new Exception("抢单失败!");
+            }
+
+        } catch (Exception e) {
+            //return CommonResult.fail("抢单失败");
+            throw new Exception("抢单失败!");
+        }
+
+        return CommonResult.ok("抢单成功");
+    }
+
+
 }
 

+ 101 - 0
src/main/java/com/repair/controller/RepairShiftSettingsController.java

@@ -6,6 +6,7 @@ import com.repair.common.utils.TimeExchange;
 import com.repair.common.utils.paramUtils;
 import com.repair.model.pojo.RepairShiftSettings;
 import com.repair.model.request.insertRepairShiftSettingRequest;
+import com.repair.model.request.timeVo;
 import com.repair.model.request.updateRepairShiftRequest;
 import com.repair.model.result.CommonResult;
 import com.repair.model.result.PageUtils;
@@ -18,6 +19,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.text.ParseException;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
 
 /**
  * <p>
@@ -44,6 +50,39 @@ public class RepairShiftSettingsController implements RepairShiftSettingsControl
             return CommonResult.fail("开始时间不能大于结束时间");
         }
 
+        List<timeVo> tvs = new ArrayList<>();
+        //非工作时间必须都在结束时间之内 防止非工作时间重叠
+        for (String i : irssr.getNotWorkTime()) {
+            String[] time = i.split("-");
+            if(TimeExchange.CompareDate(time[0],time[1],"HH:mm")){
+                timeVo tv = new timeVo();
+                tv.setStart(time[0]);
+                tv.setEnd(time[1]);
+                tvs.add(tv);
+            }
+        }
+
+        for (int i = 0;i<tvs.size();i++){
+            for (int j = i+1;j<tvs.size();j++){
+                boolean isOver = TimeExchange.overlapping(tvs.get(i).getStart(),tvs.get(i).getEnd(),tvs.get(j).getStart(),tvs.get(j).getEnd());
+                if(isOver){
+                    return CommonResult.fail(tvs.get(i).getStart()+"-"+tvs.get(i).getEnd()+"时间段和"+tvs.get(j).getStart()+"-"+tvs.get(j).getEnd()+"时间段存在重叠");
+                }
+            }
+        }
+
+        //非工作时间的最小时间不能小于起止时间的开始时间
+        //非工作时间的最大时间不能大于起止时间的结束时间
+        tvs.sort(Comparator.comparing(timeVo::getStart));
+        if(tvs.size() > 0){
+            if(TimeExchange.CompareDate(tvs.get(0).getStart(),irssr.getStartTime(),"HH:mm")){
+                return CommonResult.fail(tvs.get(0).getStart()+"非工作时间段不能小于开始工作时间"+irssr.getStartTime());
+            }
+            if(TimeExchange.CompareDate(irssr.getEndTime(),tvs.get(tvs.size() -1).getEnd(),"HH:mm")){
+                return CommonResult.fail(tvs.get(0).getStart()+"非工作时间段不能小于开始工作时间"+irssr.getStartTime());
+            }
+        }
+
         RepairShiftSettings rss = new RepairShiftSettings();
         rss.setName(irssr.getName());
         rss.setStartTime(irssr.getStartTime());
@@ -57,6 +96,35 @@ public class RepairShiftSettingsController implements RepairShiftSettingsControl
         return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
     }
 
+    public static void main(String[] args) throws ParseException {
+        List<timeVo> tvs = new ArrayList<>();
+        timeVo tv = new timeVo();
+        tv.setStart("5:00");
+        tv.setEnd("6:00");
+        tvs.add(tv);
+
+        timeVo tv2 = new timeVo();
+        tv2.setStart("11:00");
+        tv2.setEnd("12:00");
+        tvs.add(tv2);
+
+        timeVo tv1 = new timeVo();
+        tv1.setStart("7:00");
+        tv1.setEnd("11:30");
+        tvs.add(tv1);
+
+
+        for (int i = 0;i<tvs.size();i++){
+            for (int j = i+1;j<tvs.size();j++){
+                boolean isOver = TimeExchange.overlapping(tvs.get(i).getStart(),tvs.get(i).getEnd(),tvs.get(j).getStart(),tvs.get(j).getEnd());
+                if(isOver){
+                    String sss = tvs.get(i).getStart()+"-"+tvs.get(i).getEnd()+"时间段和"+tvs.get(j).getStart()+"-"+tvs.get(j).getEnd()+"时间段存在重叠";
+                    String ssds = "";
+                }
+            }
+        }
+    }
+
     @Override
     public CommonResult updateRepairShiftSettingsById(updateRepairShiftRequest ursr, BindingResult bindingResult) throws ParseException {
         if (bindingResult.hasErrors()) {
@@ -68,6 +136,39 @@ public class RepairShiftSettingsController implements RepairShiftSettingsControl
             return CommonResult.fail("开始时间不能大于结束时间");
         }
 
+        List<timeVo> tvs = new ArrayList<>();
+        //非工作时间必须都在结束时间之内 防止非工作时间重叠
+        for (String i : ursr.getNotWorkTime()) {
+            String[] time = i.split("-");
+            if(TimeExchange.CompareDate(time[0],time[1],"HH:mm")){
+                timeVo tv = new timeVo();
+                tv.setStart(time[0]);
+                tv.setEnd(time[1]);
+                tvs.add(tv);
+            }
+        }
+
+        for (int i = 0;i<tvs.size();i++){
+            for (int j = i+1;j<tvs.size();j++){
+                boolean isOver = TimeExchange.overlapping(tvs.get(i).getStart(),tvs.get(i).getEnd(),tvs.get(j).getStart(),tvs.get(j).getEnd());
+                if(isOver){
+                    return CommonResult.fail(tvs.get(i).getStart()+"-"+tvs.get(i).getEnd()+"时间段和"+tvs.get(j).getStart()+"-"+tvs.get(j).getEnd()+"时间段存在重叠");
+                }
+            }
+        }
+
+        //非工作时间的最小时间不能小于起止时间的开始时间
+        //非工作时间的最大时间不能大于起止时间的结束时间
+        tvs.sort(Comparator.comparing(timeVo::getStart));
+        if(tvs.size() > 0){
+            if(TimeExchange.CompareDate(tvs.get(0).getStart(),ursr.getStartTime(),"HH:mm")){
+                return CommonResult.fail(tvs.get(0).getStart()+"非工作时间段不能小于开始工作时间"+ursr.getStartTime());
+            }
+            if(TimeExchange.CompareDate(ursr.getEndTime(),tvs.get(tvs.size() -1).getEnd(),"HH:mm")){
+                return CommonResult.fail(tvs.get(0).getStart()+"非工作时间段不能小于开始工作时间"+ursr.getStartTime());
+            }
+        }
+
         RepairShiftSettings ra = new RepairShiftSettings();
         ra.setId(ursr.getId());
         ra.setName(ursr.getName());

+ 20 - 0
src/main/java/com/repair/controller/WxAccessTokenController.java

@@ -0,0 +1,20 @@
+package com.repair.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-08-01
+ */
+@RestController
+public class WxAccessTokenController {
+
+}
+

+ 5 - 1
src/main/java/com/repair/mapper/RepairCollaborateRecordMapper.java

@@ -2,8 +2,12 @@ package com.repair.mapper;
 
 import com.repair.model.pojo.RepairCollaborateRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.repair.model.vo.CollaborateRecordVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -14,5 +18,5 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface RepairCollaborateRecordMapper extends BaseMapper<RepairCollaborateRecord> {
-
+    List<CollaborateRecordVo> queryCollaborateRecordList(@Param("recordIds") List<Integer> recordIds);
 }

+ 8 - 1
src/main/java/com/repair/mapper/RepairConsumablesMapper.java

@@ -1,9 +1,15 @@
 package com.repair.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.repair.model.pojo.RepairConsumables;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.repair.model.vo.ConsumableExcelVo;
+import com.repair.model.vo.ConsumablePageVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -14,5 +20,6 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface RepairConsumablesMapper extends BaseMapper<RepairConsumables> {
-
+    IPage<ConsumablePageVo> queryConsumablePageList(IPage<ConsumablePageVo> page, @Param("keyWord") String keyWord, @Param("startTime") String startTime, @Param("endTime") String endTime);
+    List<ConsumableExcelVo> queryConsumableExcelList(@Param("keyWord") String keyWord, @Param("startTime") String startTime, @Param("endTime") String endTime);
 }

+ 5 - 1
src/main/java/com/repair/mapper/RepairDispatchRecordMapper.java

@@ -2,8 +2,12 @@ package com.repair.mapper;
 
 import com.repair.model.pojo.RepairDispatchRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.repair.model.vo.RepairCardNumberVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -14,5 +18,5 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface RepairDispatchRecordMapper extends BaseMapper<RepairDispatchRecord> {
-
+    List<RepairCardNumberVo> queryRepairCardNumber(@Param("recordId") Integer recordId);
 }

+ 19 - 2
src/main/java/com/repair/mapper/RepairRecordMapper.java

@@ -3,8 +3,7 @@ package com.repair.mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.repair.model.pojo.RepairRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.repair.model.vo.MyRepairRecordVo;
-import com.repair.model.vo.RepairRecordCountVo;
+import com.repair.model.vo.*;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -21,4 +20,22 @@ public interface RepairRecordMapper extends BaseMapper<RepairRecord> {
     RepairRecordCountVo queryRepairRecordCount(@Param("userId") Integer userId);
 
     IPage<MyRepairRecordVo> queryMyRepairRecordList(IPage<MyRepairRecordVo> page, @Param("stateStr") String stateStr, @Param("userId") Integer userId);
+
+    MaintenanceTechnicianVo queryRepairTechnicianCount(@Param("userId") Integer userId, @Param("dateNow") String dateNow);
+
+    IPage<RepairTechnicianVo> queryPendingOrderList(IPage<RepairTechnicianVo> page, @Param("userId") Integer userId, @Param("dateNow") String dateNow);
+
+    IPage<RepairTechnicianVo> queryRepairOrderList(IPage<RepairTechnicianVo> page, @Param("userId") Integer userId, @Param("dateNow") String dateNow);
+
+    IPage<RepairTechnicianVo> queryTimeoutOrderList(IPage<RepairTechnicianVo> page, @Param("userId") Integer userId, @Param("dateNow") String dateNow);
+
+    IPage<RepairTechnicianVo> queryExamineOrderList(IPage<RepairTechnicianVo> page, @Param("userId") Integer userId);
+
+    RepairManageCountVo queryManageCount();
+
+    IPage<RepairRecordPageVo> queryNotTimeout(IPage<RepairRecordPageVo> page, @Param("stateStr") String stateStr, @Param("keyWord") String keyWord, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    IPage<RepairRecordPageVo> queryTimeout(IPage<RepairRecordPageVo> page, @Param("keyWord") String keyWord, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    IPage<pendingOrderVo> queryPendingOrder(IPage<pendingOrderVo> page, @Param("userId") Integer userId);
 }

+ 9 - 1
src/main/java/com/repair/mapper/RepairUserMapper.java

@@ -4,13 +4,17 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.repair.model.pojo.RepairUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.repair.model.vo.RepairConsumeVo;
+import com.repair.model.vo.RepairLogisticsVo;
 import com.repair.model.vo.RepairUserVo;
+import com.repair.model.vo.UserDataVo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * <p>
- *  Mapper 接口
+ * Mapper 接口
  * </p>
  *
  * @author ceshi
@@ -19,4 +23,8 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface RepairUserMapper extends BaseMapper<RepairUser> {
     IPage<RepairUserVo> queryUserPageList(IPage<RepairUserVo> page, @Param("schoolId") String schoolId, @Param("teamId") String teamId, @Param("keyWord") String keyWord);
+
+    List<RepairLogisticsVo> queryLogisticsList(@Param("recordId") Integer recordId);
+
+    UserDataVo queryUserData(@Param("userId") Integer userId, @Param("dateNow") String dateNow);
 }

+ 18 - 0
src/main/java/com/repair/mapper/WxAccessTokenMapper.java

@@ -0,0 +1,18 @@
+package com.repair.mapper;
+
+import com.repair.model.pojo.WxAccessToken;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-08-01
+ */
+@Repository
+public interface WxAccessTokenMapper extends BaseMapper<WxAccessToken> {
+
+}

+ 1 - 1
src/main/java/com/repair/model/enumModel/eRecordStatu.java

@@ -10,7 +10,7 @@ public enum eRecordStatu {
     //派单中,维修中,转后勤,已完成,待确认,转单待审核,协作待审核,已取消,已关单
     Dispatch(1),//派单中 待接单
     Maintenance(2),//维修中
-    ToLogistics(3),//转后勤
+    ToLogistics(3),//转后勤 待处理
     ToConfirmed(4),//待确认
     Transfer(5),//转单待审核
     Collaborate(6),//协作待审核

+ 38 - 0
src/main/java/com/repair/model/enumModel/eTechnicianStatu.java

@@ -0,0 +1,38 @@
+package com.repair.model.enumModel;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/31 星期一 17:33
+ * @Description: com.repair.model.enumModel
+ * @Version: 1.0
+ */
+public enum eTechnicianStatu {
+    Receiving(1),//待接单
+    Maintenance(2),//维修中
+    Timeout(3),//已超时
+    examine(4);//待审核
+
+    private int value;
+
+    eTechnicianStatu(int value){
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+    public static eTechnicianStatu valueOf(int value) {
+        switch (value) {
+            case 1:
+                return eTechnicianStatu.Receiving;
+            case 2:
+                return eTechnicianStatu.Maintenance;
+            case 3:
+                return eTechnicianStatu.Timeout;
+            case 4:
+                return eTechnicianStatu.examine;
+            default:
+                return null;
+        }
+    }
+}

+ 33 - 0
src/main/java/com/repair/model/enumModel/eUserStatu.java

@@ -0,0 +1,33 @@
+package com.repair.model.enumModel;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/6 星期四 16:34
+ * @Description: com.template.model.enumModel
+ * @Version: 1.0
+ * 账号状态
+ */
+public enum eUserStatu {
+    Received(1),//大量接单
+    UnReceived(2);//停止接单
+
+    private int value;
+
+    eUserStatu(int value){
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+    public static eUserStatu valueOf(int value) {
+        switch (value) {
+            case 1:
+                return eUserStatu.Received;
+            case 2:
+                return eUserStatu.UnReceived;
+            default:
+                return null;
+        }
+    }
+}

+ 36 - 1
src/main/java/com/repair/model/pojo/RepairAdmin.java

@@ -1,6 +1,12 @@
 package com.repair.model.pojo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.beans.Transient;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -9,6 +15,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -33,10 +40,14 @@ public class RepairAdmin implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    @ExcelProperty("数据ID")
+    @ColumnWidth(25)
     @ApiModelProperty(value = "主键")
     @TableId(value = "id", type = IdType.UUID)
     private String id;
 
+    @ExcelProperty("账号")
+    @ColumnWidth(25)
     @ApiModelProperty(value = "账号")
     @NotBlank(message = "账号不能为空")
     private String account;
@@ -45,10 +56,14 @@ public class RepairAdmin implements Serializable {
     @NotBlank(message = "密码不能为空")
     private String password;
 
+    @ExcelProperty("昵称")
+    @ColumnWidth(25)
     @ApiModelProperty(value = "昵称")
     @NotBlank(message = "昵称不能为空")
     private String username;
 
+    @ExcelProperty("手机号")
+    @ColumnWidth(25)
     @ApiModelProperty(value = "手机号")
     @NotBlank(message = "手机号不能为空")
     private String phone;
@@ -60,12 +75,14 @@ public class RepairAdmin implements Serializable {
     private Integer statu;
 
     @ApiModelProperty(value = "是否是移动端创建 不是:0;是:1")
+    @JsonIgnore
     private Integer isMobile;
 
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     //这个注解不设置的话从数据库取出来会少8小时!!!!
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @JsonIgnore
     private Date createTime;
 
     @ApiModelProperty(value = "更新时间")
@@ -73,17 +90,35 @@ public class RepairAdmin implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date updateTime;
 
+    @ExcelProperty("创建时间")
+    @ColumnWidth(25)
+    @TableField(exist = false)
+    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @JsonIgnore
+    private String updateTimeStr;
+
+    public String getUpdateTimeStr() {
+            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(updateTime);
+    }
+
+    public void setUpdateTimeStr(String updateTimeStr) {
+        this.updateTimeStr = updateTimeStr;
+    }
+
     @ApiModelProperty(value = "创建人员")
     @TableField(fill = FieldFill.INSERT)
+    @JsonIgnore
     private String createUser;
 
     @ApiModelProperty(value = "更新人员")
     @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonIgnore
     private String updateUser;
 
     @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
     @TableLogic
     @TableField(fill = FieldFill.INSERT)
+    @JsonIgnore
     private Integer deleted;
 
 }

+ 8 - 0
src/main/java/com/repair/model/pojo/RepairCollaborateRecord.java

@@ -45,6 +45,14 @@ public class RepairCollaborateRecord implements Serializable {
     @NotBlank(message = "协作人ID不能为空")
     private String collaborator;
 
+    @ApiModelProperty(value = "申请人ID")
+    @NotNull(message = "申请人不能为空")
+    private Integer userId;
+
+    @ApiModelProperty(value = "审批操作人ID")
+    @NotNull(message = "审批操作人不能为空")
+    private Integer approverId;
+
     @ApiModelProperty(value = "语音 可能做成语音文件上传的方式 然后这个字段记录语音文件名")
     @NotBlank(message = "语音不能为空")
     private String voice;

+ 7 - 4
src/main/java/com/repair/model/pojo/RepairDispatchRecord.java

@@ -2,7 +2,6 @@ package com.repair.model.pojo;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import java.util.Date;
-import com.baomidou.mybatisplus.annotation.Version;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -43,7 +42,12 @@ public class RepairDispatchRecord implements Serializable {
 
     @ApiModelProperty(value = "被派单人ID(多人用逗号隔开)")
     @NotBlank(message = "被派单人不能为空")
-    private String usersId;
+    private Integer usersId;
+
+    @ApiModelProperty(value = "是否已失效 0未失效,1已失效")
+    @NotBlank(message = "失效状态不能为空")
+    private Integer isLoseEfficacy;
+
 
     @ApiModelProperty(value = "被派单/被转单/被协作时间")
     @NotBlank(message = "订单时间不能为空")
@@ -53,8 +57,7 @@ public class RepairDispatchRecord implements Serializable {
     @NotNull(message = "接单考核时间不能为空")
     private Integer acceptanceAssessTime;
 
-    @ApiModelProperty(value = "协作或转单或派单ID")
-    @NotNull(message = "原始单数据不能为空")
+    @ApiModelProperty(value = "协作或转单ID")
     private Integer sourceId;
 
     @ApiModelProperty(value = "派单类型 0派单 1协作 2转单")

+ 3 - 7
src/main/java/com/repair/model/pojo/RepairReceiving.java

@@ -52,13 +52,9 @@ public class RepairReceiving implements Serializable {
     @NotNull(message = "接单时间不能为空")
     private Date receivingTime;
 
-    @ApiModelProperty(value = "接单考核时间(单位:分钟)")
-    @NotNull(message = "接单考核时间不能为空")
-    private Integer acceptanceAssessTime;
-
-    @ApiModelProperty(value = "订单分发时间 分发给某人的时间 用来计算在规定时间内是否接单")
-    @NotNull(message = "订单分发时间不能为空")
-    private Date repairDistributeTime;
+    @ApiModelProperty(value = "维修考核时间(单位:分钟)")
+    @NotNull(message = "维修考核时间不能为空")
+    private Integer maintenanceAssessTime;
 
     @ApiModelProperty(value = "是否已失效(未失效:0;已失效:1)")
     @NotNull(message = "接单状态不能为空")

+ 9 - 9
src/main/java/com/repair/model/pojo/RepairRecord.java

@@ -43,6 +43,9 @@ public class RepairRecord implements Serializable {
     @ApiModelProperty(value = "报修物品ID")
     private Integer articleId;
 
+    @ApiModelProperty(value = "校区ID")
+    private Integer schoolId;
+
     @ApiModelProperty(value = "报修单号")
     private String recordNo;
 
@@ -73,6 +76,9 @@ public class RepairRecord implements Serializable {
     @ApiModelProperty(value = "报修人联系电话")
     private String userPhone;
 
+    @ApiModelProperty(value = "楼栋ID")
+    private Integer buildId;
+
     @ApiModelProperty(value = "维修人ID(多个人用逗号隔开)")
     private String maintenancerId;
 
@@ -100,15 +106,6 @@ public class RepairRecord implements Serializable {
     @ApiModelProperty(value = "报修时间")
     private Date reportTime;
 
-    @ApiModelProperty(value = "派单时间")
-    private Date dispatch_time;
-
-    @ApiModelProperty(value = "接单考核时间")
-    private Integer acceptanceAssessTime;
-
-    @ApiModelProperty(value = "维修考核时间")
-    private Integer maintenanceAssessTime;
-
     @ApiModelProperty(value = "关单原因")
     private String remark;
 
@@ -133,5 +130,8 @@ public class RepairRecord implements Serializable {
     @TableLogic
     private Integer deleted;
 
+    @ApiModelProperty(value = "乐观锁")
+    @Version
+    private Integer version;
 
 }

+ 8 - 0
src/main/java/com/repair/model/pojo/RepairTransferRecord.java

@@ -53,6 +53,14 @@ public class RepairTransferRecord implements Serializable {
     @NotNull(message = "审批状态不能为空")
     private Integer approvalStatu;
 
+    @ApiModelProperty(value = "申请人ID")
+    @NotNull(message = "申请人不能为空")
+    private Integer userId;
+
+    @ApiModelProperty(value = "审批操作人ID")
+    @NotNull(message = "审批操作人不能为空")
+    private Integer approverId;
+
     @ApiModelProperty(value = "创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;

+ 65 - 0
src/main/java/com/repair/model/pojo/WxAccessToken.java

@@ -0,0 +1,65 @@
+package com.repair.model.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-08-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="WxAccessToken对象", description="")
+public class WxAccessToken implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "access_token")
+    private String accessToken;
+
+    @ApiModelProperty(value = "过期时间")
+    private Date expiresTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "创建人员")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @ApiModelProperty(value = "更新人员")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty(value = "逻辑删除 未删除:0;删除:1")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleted;
+
+
+}

+ 37 - 0
src/main/java/com/repair/model/request/repairLeaveMessageRequest.java

@@ -0,0 +1,37 @@
+package com.repair.model.request;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-07-20
+ */
+@Data
+public class repairLeaveMessageRequest implements Serializable {
+
+    /**
+     * 报修记录ID
+     */
+    @NotNull(message = "报修记录ID不能为空")
+    private Integer recordId;
+
+    /**
+     * 用户ID
+     */
+    @NotNull(message = "用户不能为空")
+    private Integer userId;
+
+    /**
+     * 内容
+     */
+    @NotNull(message = "内容不能为空")
+    private String content;
+
+}

+ 8 - 0
src/main/java/com/repair/model/request/repairRecordRequest.java

@@ -30,6 +30,14 @@ public class repairRecordRequest {
     @NotNull(message = "报修物品不能为空")
     private Integer articleId;
 
+    @ApiModelProperty(value = "校区ID")
+    @NotNull(message = "校区不能为空")
+    private Integer schoolId;
+
+    @ApiModelProperty(value = "楼栋ID")
+    @NotNull(message = "楼栋不能为空")
+    private Integer buildId;
+
     @ApiModelProperty(value = "故障描述")//不必填
     private String description;
 

+ 26 - 0
src/main/java/com/repair/model/request/timeVo.java

@@ -0,0 +1,26 @@
+package com.repair.model.request;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/2 星期三 20:35
+ * @Description: com.repair.model.request
+ * @Version: 1.0
+ */
+@Data
+public class timeVo {
+    /**
+     * 开始时间
+     */
+    private String start;
+    /**
+     * 结束时间
+     */
+    private String end;
+
+    /**
+     * 是否是工作时间
+     */
+    private Integer isWork;
+}

+ 20 - 6
src/main/java/com/repair/model/vo/ClassesSettingVo.java

@@ -58,16 +58,30 @@ public class ClassesSettingVo {
     private String shiftName;
 
     /**
-     * 班次集合名称
+     * 班次颜色
      */
-    private List<String> shiftNames;
+    @JsonIgnore
+    private String shiftColor;
 
+    /**
+     * 班次集合
+     */
+    private List<shiftSettingVo> shifts;
 
-    public List<String> getShiftNames() {
-        return shiftName == null ? new ArrayList<>() : Arrays.asList(shiftName.split(","));
+    public List<shiftSettingVo> getShifts() {
+        List<String> names = shiftName == null ? new ArrayList<>() : Arrays.asList(shiftName.split(","));
+        List<String> colors = shiftColor == null ? new ArrayList<>() : Arrays.asList(shiftColor.split(","));
+        List<shiftSettingVo> shiftList = new ArrayList<>();
+        for (int i = 0;i< names.size();i++) {
+            shiftSettingVo s = new shiftSettingVo();
+            s.setName(names.get(i) == null ? "" : names.get(i));
+            s.setColor(colors.get(i) == null ? "" : colors.get(i));
+            shiftList.add(s);
+        }
+        return shiftList;
     }
 
-    public void setShiftNames(List<String> shiftNames) {
-        this.shiftNames = shiftNames;
+    public void setShifts(List<shiftSettingVo> shifts) {
+        this.shifts = shifts;
     }
 }

+ 26 - 0
src/main/java/com/repair/model/vo/CollaborateRecordVo.java

@@ -0,0 +1,26 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/1 星期二 20:36
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class CollaborateRecordVo {
+    /**
+     * 数据ID
+     */
+    private int id;
+    /**
+     * 工单ID
+     */
+    private int recordId;
+
+    /**
+     * 转单/协作
+     */
+    private String state;
+}

+ 105 - 0
src/main/java/com/repair/model/vo/ConsumableExcelVo.java

@@ -0,0 +1,105 @@
+package com.repair.model.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/30 星期日 14:47
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class ConsumableExcelVo {
+    /**
+     * 数据ID
+     */
+    @ExcelProperty("数据ID")
+    @ColumnWidth(25)
+    private Integer id;
+
+    /**
+     * 耗材名称
+     */
+    @ExcelProperty("耗材名称")
+    @ColumnWidth(25)
+    private String consumeName;
+
+    /**
+     * 单价(元)
+     */
+    @ExcelProperty("单价(元)")
+    @ColumnWidth(25)
+    private BigDecimal price;
+
+    /**
+     * 数量
+     */
+    @ExcelProperty("数量")
+    @ColumnWidth(25)
+    private Double number;
+
+    /**
+     * 金额(元)
+     */
+    @ExcelProperty("金额(元)")
+    @ColumnWidth(25)
+    private BigDecimal totalPrice;
+
+    /**
+     * 关联故障种类
+     */
+    @ExcelProperty("关联故障种类")
+    @ColumnWidth(25)
+    private String articleName;
+
+    /**
+     * 工单
+     */
+    @ExcelProperty("工单")
+    @ColumnWidth(25)
+    private String recordNo;
+
+    /**
+     * 报修时间
+     */
+    @ExcelIgnore
+    private LocalDateTime reportTime;
+
+    @ExcelProperty("报修时间")
+    @ColumnWidth(25)
+    private String reportTimeStr;
+
+    public String getReportTimeStr() {
+        return reportTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
+
+    public void String(String reportTimeStr) {
+        this.reportTimeStr = reportTimeStr;
+    }
+
+    /**
+     * 维修时间
+     */
+    @ExcelIgnore
+    private LocalDateTime updateTime;
+
+    @ExcelProperty("维修时间")
+    @ColumnWidth(25)
+    private String updateTimeStr;
+
+    public String getUpdateTimeStr() {
+        return updateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
+
+    public void setUpdateTimeStr(String updateTimeStr) {
+        this.updateTimeStr = updateTimeStr;
+    }
+}

+ 81 - 0
src/main/java/com/repair/model/vo/ConsumablePageVo.java

@@ -0,0 +1,81 @@
+package com.repair.model.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/30 星期日 14:47
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class ConsumablePageVo {
+    /**
+     * 数据ID
+     */
+    @ExcelProperty("数据ID")
+    @ColumnWidth(25)
+    private Integer id;
+
+    /**
+     * 耗材名称
+     */
+    @ExcelProperty("耗材名称")
+    @ColumnWidth(25)
+    private String consumeName;
+
+    /**
+     * 单价(元)
+     */
+    @ExcelProperty("单价(元)")
+    @ColumnWidth(25)
+    private BigDecimal price;
+
+    /**
+     * 数量
+     */
+    @ExcelProperty("数量")
+    @ColumnWidth(25)
+    private Double number;
+
+    /**
+     * 金额(元)
+     */
+    @ExcelProperty("金额(元)")
+    @ColumnWidth(25)
+    private BigDecimal totalPrice;
+
+    /**
+     * 关联故障种类
+     */
+    @ExcelProperty("关联故障种类")
+    @ColumnWidth(25)
+    private String articleName;
+
+    /**
+     * 工单
+     */
+    @ExcelProperty("工单")
+    @ColumnWidth(25)
+    private String recordNo;
+
+    /**
+     * 报修时间
+     */
+    @ExcelProperty("报修时间")
+    @ColumnWidth(25)
+    private Date reportTime;
+
+    /**
+     * 维修时间
+     */
+    @ExcelProperty("维修时间")
+    @ColumnWidth(25)
+    private Date updateTime;
+
+}

+ 15 - 1
src/main/java/com/repair/model/vo/ConsumeVo.java

@@ -1,11 +1,14 @@
 package com.repair.model.vo;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 
 /**
  * @Author: binguo
@@ -60,7 +63,18 @@ public class ConsumeVo {
     /**
      * 录入时间
      */
+    @ExcelIgnore
+    private LocalDateTime updateTime;
+
     @ExcelProperty("录入时间")
     @ColumnWidth(25)
-    private LocalDate updateTime;
+    private String updateTimeStr;
+
+    public String getUpdateTimeStr() {
+        return updateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
+
+    public void setUpdateTimeStr(String updateTimeStr) {
+        this.updateTimeStr = updateTimeStr;
+    }
 }

+ 32 - 0
src/main/java/com/repair/model/vo/MaintenanceTechnicianVo.java

@@ -0,0 +1,32 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/31 星期一 16:23
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class MaintenanceTechnicianVo {
+    /**
+     * 待接单
+     */
+    private int receivingCount;
+
+    /**
+     * 维修中
+     */
+    private int maintenanceCount;
+
+    /**
+     * 已超时
+     */
+    private int timeoutCount;
+
+    /**
+     * 待审核
+     */
+    private int examineCount;
+}

+ 26 - 10
src/main/java/com/repair/model/vo/MyRepairRecordVo.java

@@ -1,6 +1,7 @@
 package com.repair.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.repair.model.enumModel.eRecordStatu;
 import com.repair.model.pojo.RepairConsumables;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -100,26 +101,26 @@ public class MyRepairRecordVo {
     private String maintenancerPhone;
 
     /**
-     * 接单考核时间
+     * 维修费用
      */
-    @JsonIgnore
-    private Integer acceptanceAssessTime;
+    private BigDecimal price;
 
     /**
-     * 维修考核时间
+     * 耗材记录集合
      */
-    @JsonIgnore
-    private Integer maintenanceAssessTime;
+    private List<RepairConsumables> consumables;
 
     /**
-     * 维修费用
+     * 接单超时
      */
-    private BigDecimal price;
+    @JsonIgnore
+    private String timeoutDispStr;
 
     /**
-     * 耗材记录集合
+     * 维修超时
      */
-    private List<RepairConsumables> consumables;
+    @JsonIgnore
+    private String timeoutReceStr;
 
     /**
      * 超时状态:
@@ -129,4 +130,19 @@ public class MyRepairRecordVo {
      */
     private String timeoutStr;
 
+    public String getTimeoutStr() {
+
+        StringBuilder sb = new StringBuilder();
+        if(timeoutDispStr != null && stateId == eRecordStatu.Dispatch.getValue()){
+            sb.append(timeoutDispStr);
+        }
+        if(timeoutReceStr != null && stateId == eRecordStatu.Maintenance.getValue()){
+            sb.append(timeoutReceStr);
+        }
+        return sb.length() == 0 ? timeoutStr : sb.toString();
+    }
+
+    public void setTimeoutStr(String timeoutStr) {
+        this.timeoutStr = timeoutStr;
+    }
 }

+ 14 - 0
src/main/java/com/repair/model/vo/RepairCardNumberVo.java

@@ -0,0 +1,14 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/1 星期二 10:48
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class RepairCardNumberVo {
+    private String cardNumber;
+}

+ 0 - 2
src/main/java/com/repair/model/vo/RepairConsumeVo.java

@@ -2,10 +2,8 @@ package com.repair.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 

+ 17 - 0
src/main/java/com/repair/model/vo/RepairLogisticsVo.java

@@ -0,0 +1,17 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/14 星期五 14:56
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class RepairLogisticsVo {
+    /**
+     * 数据ID
+     */
+    private Integer id;
+}

+ 57 - 0
src/main/java/com/repair/model/vo/RepairManageCountVo.java

@@ -0,0 +1,57 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/1 星期二 15:23
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class RepairManageCountVo {
+    /**
+     * 全部
+     */
+    private int allCount;
+
+    /**
+     * 待接单
+     */
+    private int dispatchCount;
+
+    /**
+     * 维修中
+     */
+    private int maintenanceCount;
+
+    /**
+     * 待处理
+     */
+    private int logisticsCount;
+
+    /**
+     * 待审核
+     */
+    private int examineCount;
+
+    /**
+     * 已完成
+     */
+    private int finishedCount;
+
+    /**
+     * 已取消
+     */
+    private int canceledCount;
+
+    /**
+     * 已关单
+     */
+    private int closedCount;
+
+    /**
+     * 已超时
+     */
+    private int timeoutCount;
+}

+ 106 - 0
src/main/java/com/repair/model/vo/RepairRecordPageVo.java

@@ -0,0 +1,106 @@
+package com.repair.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/1 星期二 14:20
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class RepairRecordPageVo {
+    /**
+     * 数据ID
+     */
+    private int id;
+    /**
+     * 工单编号
+     */
+    private String recordNo;
+    /**
+     * 报修区域
+     */
+    private String areaName;
+    /**
+     * 用户ID
+     */
+    @JsonIgnore
+    private int userId;
+    /**
+     * 姓名
+     */
+    private String userName;
+    /**
+     * 电话
+     */
+    private String userPhone;
+    /**
+     * 报修物品
+     */
+    private String articleName;
+    /**
+     * 故障描述
+     */
+    private String description;
+
+    /**
+     * 订单维修状态
+     */
+    @JsonIgnore
+    private int maintenanceState;
+    /**
+     * 状态
+     */
+    private String state;
+    /**
+     * 报修时间
+     */
+    private Date reportTime;
+    /**
+     * 技术员
+     */
+    private String maintenancerName;
+
+    /**
+     * 出现派单按钮
+     */
+    private int dispatch;
+
+    /**
+     * 出现协作审核按钮
+     */
+    private int collaborate;
+
+    /**
+     * 出现转单审核按钮
+     */
+    private int transfer;
+
+    /**
+     * 出现关单按钮
+     */
+    private int close;
+
+    /**
+     * 出现改价按钮
+     */
+    private int changePrice;
+
+    /**
+     * 出现回复按钮
+     */
+    private int reply;
+
+    /**
+     * 出现延时按钮
+     */
+    private int delayed;
+    /**
+     * 出现详情按钮
+     */
+    private int details;
+}

+ 92 - 0
src/main/java/com/repair/model/vo/RepairTechnicianVo.java

@@ -0,0 +1,92 @@
+package com.repair.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/31 星期一 16:23
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class RepairTechnicianVo {
+    /**
+     * 待接单
+     */
+    private Integer id;
+
+    /**
+     * 工单编号
+     */
+    private String recordNo;
+
+    /**
+     * 报修时间
+     */
+    private Date reportTime;
+
+    /**
+     * 报修名称
+     */
+    private String userName;
+
+    /**
+     * 报修电话
+     */
+    private String userPhone;
+
+    /**
+     * 报修区域
+     */
+    private String areaName;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 报修物品
+     */
+    private String articleName;
+
+    /**
+     * 故障描述
+     */
+    private String description;
+
+    /**
+     * 图片
+     */
+    @JsonIgnore
+    private String image;
+
+    /**
+     * 上传图片集合
+     */
+    private List<String> images;
+
+    public List<String> getImages() {
+        return image == null ? new ArrayList<>() : Arrays.asList(image.split(",")) ;
+    }
+
+    public void setImages(List<String> images) {
+        this.images = images;
+    }
+
+    /**
+     * 工单状态
+     */
+    private String state;
+
+    /**
+     * 工单超时状态
+     */
+    private String timeoutStr;
+}

+ 63 - 0
src/main/java/com/repair/model/vo/UserDataVo.java

@@ -0,0 +1,63 @@
+package com.repair.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/2 星期三 11:17
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class UserDataVo {
+    /**
+     * 用户ID
+     */
+    private int id;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+    /**
+     * 用户手机
+     */
+    private String userPhone;
+
+    /**
+     * 用户接单状态
+     */
+    private int state;
+
+    /**
+     * 排班日期
+     */
+    private Date startDate;
+
+    /**
+     * 接单考核时间
+     */
+    private int acceptanceAssessTime;
+
+    /**
+     * 维修考核时间
+     */
+    private int maintenanceAssessTime;
+
+    /**
+     * 排班班次ID
+     */
+    private String shiftId;
+
+    /**
+     * 报修物品ID
+     */
+    private String articleId;
+
+}

+ 87 - 0
src/main/java/com/repair/model/vo/pendingOrderVo.java

@@ -0,0 +1,87 @@
+package com.repair.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/8/2 星期三 10:00
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class pendingOrderVo {
+    /**
+     * 数据ID
+     */
+    private int id;
+
+    /**
+     * 工单编号
+     */
+    private String recordNo;
+
+    /**
+     * 报修时间
+     */
+    private Date reportTime;
+
+    /**
+     * 报修姓名
+     */
+    private String userName;
+
+    /**
+     * 报修电话
+     */
+    private String userPhone;
+
+    /**
+     * 报修区域
+     */
+    private String areaName;
+
+    /**
+     * 详细地址
+     */
+    private String address;
+
+    /**
+     * 报修物品
+     */
+    private String articleName;
+
+    /**
+     * 故障描述
+     */
+    private String description;
+
+    /**
+     * 上传图片
+     */
+    @JsonIgnore
+    private String image;
+
+    /**
+     * 上传图片集合
+     */
+    private List<String> images;
+
+    public List<String> getImages() {
+        return image == null ? new ArrayList<>() : Arrays.asList(image.split(","));
+    }
+
+    public void setImages(List<String> images) {
+        this.images = images;
+    }
+
+    /**
+     * 工单状态
+     */
+    private String state;
+}

+ 21 - 0
src/main/java/com/repair/model/vo/shiftSettingVo.java

@@ -0,0 +1,21 @@
+package com.repair.model.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/7/31 星期一 10:38
+ * @Description: com.repair.model.vo
+ * @Version: 1.0
+ */
+@Data
+public class shiftSettingVo {
+    /**
+     * 班次名称
+     */
+    private String name;
+    /**
+     * 颜色名称
+     */
+    private String color;
+}

+ 5 - 1
src/main/java/com/repair/services/RepairAdminService.java

@@ -7,6 +7,8 @@ import com.repair.model.request.queryAccountPageRequest;
 import com.repair.model.request.updateRepairAdminRequest;
 import com.repair.model.result.PageUtils;
 
+import java.util.List;
+
 /**
  * <p>
  * 服务类
@@ -22,11 +24,13 @@ public interface RepairAdminService extends IService<RepairAdmin> {
 
     RepairAdmin getRepairByAccount(String Account);
 
-    PageUtils<RepairAdmin> queryPageList(int currentPage, int pageCount, String account, String phone, String userName);
+    PageUtils<RepairAdmin> queryPageList(int currentPage, int pageCount, String account, String startTime, String endTime);
 
     RepairAdmin getRepairById(String id);
 
     int updateRepaiRadmin(updateRepairAdminRequest urar);
 
     int updateRepairAdmin(RepairAdmin ra);
+
+    List<RepairAdmin> queryRepairAdminList(String account, String startTime,String endTime);
 }

+ 4 - 0
src/main/java/com/repair/services/RepairCollaborateRecordService.java

@@ -3,7 +3,9 @@ package com.repair.services;
 import com.repair.model.pojo.RepairCollaborateRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.pojo.RepairCollaborateRecord;
+import com.repair.model.pojo.RepairDispatchRecord;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.CollaborateRecordVo;
 
 import java.util.List;
 
@@ -27,4 +29,6 @@ public interface RepairCollaborateRecordService extends IService<RepairCollabora
     RepairCollaborateRecord getRepairById(int id);
 
     List<RepairCollaborateRecord> getRepairs();
+
+    List<CollaborateRecordVo> queryRepairCollaborate(List<Integer> recordIds);
 }

+ 6 - 1
src/main/java/com/repair/services/RepairConsumablesService.java

@@ -4,12 +4,14 @@ import com.repair.model.pojo.RepairConsumables;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.ConsumableExcelVo;
+import com.repair.model.vo.ConsumablePageVo;
 
 import java.util.List;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author ceshi
@@ -30,4 +32,7 @@ public interface RepairConsumablesService extends IService<RepairConsumables> {
 
     List<RepairConsumables> getRepairsByRecordIds(List<Integer> recordIds);
 
+    PageUtils<ConsumablePageVo> queryConsumablePageList(int currentPage, int pageCount, String keyWord, String startTime, String endTime);
+
+    List<ConsumableExcelVo> queryConsumablePageList(String keyWord, String startTime, String endTime);
 }

+ 5 - 0
src/main/java/com/repair/services/RepairDispatchRecordService.java

@@ -3,6 +3,7 @@ package com.repair.services;
 import com.repair.model.pojo.RepairDispatchRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.RepairCardNumberVo;
 
 import java.util.List;
 
@@ -26,4 +27,8 @@ public interface RepairDispatchRecordService extends IService<RepairDispatchReco
     RepairDispatchRecord getRepairById(int id);
 
     List<RepairDispatchRecord> getRepairs();
+
+    List<RepairCardNumberVo> queryRepairCardNumber(Integer recordId);
+
+    List<RepairDispatchRecord> queryRepairDispatch(List<Integer> recordIds);
 }

+ 5 - 0
src/main/java/com/repair/services/RepairLeaveMessageService.java

@@ -1,5 +1,6 @@
 package com.repair.services;
 
+import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.pojo.RepairLeaveMessage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.result.PageUtils;
@@ -26,4 +27,8 @@ public interface RepairLeaveMessageService extends IService<RepairLeaveMessage>
     RepairLeaveMessage getRepairById(int id);
 
     List<RepairLeaveMessage> getRepairs();
+
+    boolean inserBatchLeaveMessage(List<RepairLeaveMessage> datas);
+
+    List<RepairLeaveMessage> getRepairsByRecordIds(List<Integer> recordIds);
 }

+ 20 - 3
src/main/java/com/repair/services/RepairRecordService.java

@@ -4,15 +4,14 @@ import com.repair.model.pojo.RepairRecord;
 import com.repair.model.pojo.RepairRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.result.PageUtils;
-import com.repair.model.vo.MyRepairRecordVo;
-import com.repair.model.vo.RepairRecordCountVo;
+import com.repair.model.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author ceshi
@@ -34,4 +33,22 @@ public interface RepairRecordService extends IService<RepairRecord> {
     RepairRecordCountVo getRepairRecordCount(Integer userId);
 
     PageUtils<MyRepairRecordVo> queryMyRepairRecordList(int currentPage, int pageCount, Integer state, Integer userId);
+
+    MaintenanceTechnicianVo queryRepairTechnicianCount(Integer userId, String dateNow);
+
+    PageUtils<RepairTechnicianVo> queryPendingOrderList(int currentPage, int pageCount, Integer userId, String dateNow);
+
+    PageUtils<RepairTechnicianVo> queryRepairOrderList(int currentPage, int pageCount, Integer userId, String dateNow);
+
+    PageUtils<RepairTechnicianVo> queryTimeoutOrderList(int currentPage, int pageCount, Integer userId, String dateNow);
+
+    PageUtils<RepairTechnicianVo> queryExamineOrderList(int currentPage, int pageCount, Integer userId);
+
+    RepairManageCountVo queryManageCount();
+
+    PageUtils<RepairRecordPageVo> queryNotTimeout(int currentPage, int pageCount, String stateStr, String keyWord, String startTime, String endTime);
+
+    PageUtils<RepairRecordPageVo> queryTimeout(int currentPage, int pageCount, String keyWord, String startTime, String endTime);
+
+    PageUtils<pendingOrderVo> queryPendingOrder(int currentPage, int pageCount, Integer userId);
 }

+ 2 - 0
src/main/java/com/repair/services/RepairShiftSettingsService.java

@@ -26,4 +26,6 @@ public interface RepairShiftSettingsService extends IService<RepairShiftSettings
     RepairShiftSettings getRepairById(int id);
 
     List<RepairShiftSettings> getRepairs();
+
+    List<RepairShiftSettings> getRepairsByShiftIds(List<String> shiftIds);
 }

+ 9 - 2
src/main/java/com/repair/services/RepairUserService.java

@@ -3,8 +3,9 @@ package com.repair.services;
 import com.repair.model.pojo.RepairUser;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.repair.model.result.PageUtils;
-import com.repair.model.vo.RepairConsumeVo;
+import com.repair.model.vo.RepairLogisticsVo;
 import com.repair.model.vo.RepairUserVo;
+import com.repair.model.vo.UserDataVo;
 
 import java.util.List;
 
@@ -25,6 +26,8 @@ public interface RepairUserService extends IService<RepairUser> {
 
     PageUtils<RepairUser> queryPageRepairUser(int currentPage, int pageCount);
 
+    List<RepairUser> queryRepairUsers();
+
     int deleteRepairUserById(int id);
 
     RepairUser getRepairById(int id);
@@ -33,6 +36,10 @@ public interface RepairUserService extends IService<RepairUser> {
 
     List<RepairUser> getRepairs(List<Integer> ids);
 
-    List<RepairUser> getRepairByUserZZ(List<Integer> userZZId);
+    List<RepairUser> getRepairByUserZZ(List<Integer> userZZId, Integer schoolId);
+
+    List<RepairLogisticsVo> queryLogisticsList(Integer recordId);
+
+    UserDataVo queryUserData(Integer userId, String dateNow);
 }
 

+ 22 - 0
src/main/java/com/repair/services/WxAccessTokenService.java

@@ -0,0 +1,22 @@
+package com.repair.services;
+
+import com.repair.model.pojo.WxAccessToken;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-08-01
+ */
+public interface WxAccessTokenService extends IService<WxAccessToken> {
+    int insertwxAccessToken(WxAccessToken rns);
+
+    int updatewxAccessToken(WxAccessToken rns);
+
+    int deletewxAccessTokenById(int id);
+
+    WxAccessToken getRepairByDate(String dateNow);
+}

+ 15 - 3
src/main/java/com/repair/services/impl/RepairAdminServiceImpl.java

@@ -14,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.List;
+
 /**
  * <p>
  * 服务实现类
@@ -79,12 +81,22 @@ public class RepairAdminServiceImpl extends ServiceImpl<RepairAdminMapper, Repai
     }
 
     @Override
-    public PageUtils<RepairAdmin> queryPageList(int currentPage, int pageCount, String account, String phone, String userName) {
+    public List<RepairAdmin> queryRepairAdminList(String account, String startTime, String endTime) {
+        QueryWrapper<RepairAdmin> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like(StringUtils.hasText(account), "account", account);
+        queryWrapper.between(StringUtils.hasText(startTime) && StringUtils.hasText(endTime),"update_time", startTime, endTime);
+        queryWrapper.eq("is_mobile",0);
+
+        List<RepairAdmin> result = repairAdminMapper.selectList(queryWrapper);
+        return result;
+    }
+
+    @Override
+    public PageUtils<RepairAdmin> queryPageList(int currentPage, int pageCount, String account, String startTime, String endTime) {
         Page<RepairAdmin> page = new Page<>(currentPage, pageCount);
         QueryWrapper<RepairAdmin> queryWrapper = new QueryWrapper<>();
         queryWrapper.like(StringUtils.hasText(account), "account", account);
-        queryWrapper.like(StringUtils.hasText(phone), "phone", phone);
-        queryWrapper.like(StringUtils.hasText(userName), "username", userName);
+        queryWrapper.between(StringUtils.hasText(startTime) && StringUtils.hasText(endTime),"update_time", startTime, endTime);
         queryWrapper.eq("is_mobile",0);
         IPage<RepairAdmin> result = repairAdminMapper.selectPage(page, queryWrapper);
         return new PageUtils(result);

+ 8 - 4
src/main/java/com/repair/services/impl/RepairCollaborateRecordServiceImpl.java

@@ -3,12 +3,10 @@ package com.repair.services.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.repair.model.pojo.RepairCollaborateRecord;
 import com.repair.mapper.RepairCollaborateRecordMapper;
 import com.repair.model.pojo.RepairCollaborateRecord;
-import com.repair.model.pojo.RepairCollaborateRecord;
-import com.repair.model.pojo.RepairCollaborateRecord;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.CollaborateRecordVo;
 import com.repair.services.RepairCollaborateRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +16,7 @@ import java.util.List;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author ceshi
@@ -67,4 +65,10 @@ public class RepairCollaborateRecordServiceImpl extends ServiceImpl<RepairCollab
         List<RepairCollaborateRecord> result = repairCollaborateRecordMapper.selectList(null);
         return result;
     }
+
+    @Override
+    public List<CollaborateRecordVo> queryRepairCollaborate(List<Integer> recordIds) {
+        List<CollaborateRecordVo> result = repairCollaborateRecordMapper.queryCollaborateRecordList(recordIds);
+        return result;
+    }
 }

+ 19 - 1
src/main/java/com/repair/services/impl/RepairConsumablesServiceImpl.java

@@ -10,6 +10,9 @@ import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.pojo.RepairShiftSettings;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.ConsumableExcelVo;
+import com.repair.model.vo.ConsumablePageVo;
+import com.repair.model.vo.RepairConsumeVo;
 import com.repair.services.RepairConsumablesService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,7 +23,7 @@ import java.util.List;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author ceshi
@@ -77,4 +80,19 @@ public class RepairConsumablesServiceImpl extends ServiceImpl<RepairConsumablesM
         List<RepairConsumables> result = repairConsumablesMapper.selectList(queryWrapper);
         return result;
     }
+
+    @Override
+    public PageUtils<ConsumablePageVo> queryConsumablePageList(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
+        Page<ConsumablePageVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<ConsumablePageVo> datas = repairConsumablesMapper.queryConsumablePageList(page, keyWord, startTime, endTime);
+        return new PageUtils(datas);
+    }
+
+    @Override
+    public List<ConsumableExcelVo> queryConsumablePageList(String keyWord, String startTime, String endTime) {
+        List<ConsumableExcelVo> result = repairConsumablesMapper.queryConsumableExcelList(keyWord, startTime, endTime);
+        return result;
+    }
 }

+ 16 - 2
src/main/java/com/repair/services/impl/RepairDispatchRecordServiceImpl.java

@@ -5,9 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.repair.model.pojo.RepairDispatchRecord;
 import com.repair.mapper.RepairDispatchRecordMapper;
-import com.repair.model.pojo.RepairDispatchRecord;
-import com.repair.model.pojo.RepairDispatchRecord;
 import com.repair.model.result.PageUtils;
+import com.repair.model.vo.RepairCardNumberVo;
 import com.repair.services.RepairDispatchRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -66,4 +65,19 @@ public class RepairDispatchRecordServiceImpl extends ServiceImpl<RepairDispatchR
         List<RepairDispatchRecord> result = repairDispatchRecordMapper.selectList(null);
         return result;
     }
+
+    @Override
+    public List<RepairCardNumberVo> queryRepairCardNumber(Integer recordId) {
+        List<RepairCardNumberVo> result = repairDispatchRecordMapper.queryRepairCardNumber(recordId);
+        return result;
+    }
+
+    @Override
+    public List<RepairDispatchRecord> queryRepairDispatch(List<Integer> recordIds) {
+        QueryWrapper<RepairDispatchRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("record_id",recordIds);
+        queryWrapper.eq("is_lose_efficacy",0);
+        List<RepairDispatchRecord> result = repairDispatchRecordMapper.selectList(queryWrapper);
+        return result;
+    }
 }

+ 15 - 0
src/main/java/com/repair/services/impl/RepairLeaveMessageServiceImpl.java

@@ -3,6 +3,7 @@ package com.repair.services.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.repair.model.pojo.RepairConsumables;
 import com.repair.model.pojo.RepairLeaveMessage;
 import com.repair.model.pojo.RepairLeaveMessage;
 import com.repair.mapper.RepairLeaveMessageMapper;
@@ -66,4 +67,18 @@ public class RepairLeaveMessageServiceImpl extends ServiceImpl<RepairLeaveMessag
         List<RepairLeaveMessage> result = repairLeaveMessageMapper.selectList(null);
         return result;
     }
+
+    @Override
+    public boolean inserBatchLeaveMessage(List<RepairLeaveMessage> datas) {
+        boolean result = this.saveBatch(datas);
+        return result;
+    }
+
+    @Override
+    public List<RepairLeaveMessage> getRepairsByRecordIds(List<Integer> recordIds) {
+        QueryWrapper<RepairLeaveMessage> queryWrapper = new QueryWrapper();
+        queryWrapper.in("record_id", recordIds);
+        List<RepairLeaveMessage> result = repairLeaveMessageMapper.selectList(queryWrapper);
+        return result;
+    }
 }

+ 82 - 6
src/main/java/com/repair/services/impl/RepairRecordServiceImpl.java

@@ -6,8 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.repair.model.pojo.RepairRecord;
 import com.repair.mapper.RepairRecordMapper;
 import com.repair.model.result.PageUtils;
-import com.repair.model.vo.MyRepairRecordVo;
-import com.repair.model.vo.RepairRecordCountVo;
+import com.repair.model.vo.*;
 import com.repair.services.RepairRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -76,12 +75,12 @@ public class RepairRecordServiceImpl extends ServiceImpl<RepairRecordMapper, Rep
     @Override
     public PageUtils<MyRepairRecordVo> queryMyRepairRecordList(int currentPage, int pageCount, Integer state, Integer userId) {
         String stateStr = null;
-        if(state == 1){
+        if (state == 1) {
             stateStr = "<= 7";
-        }else if(state == 2){
+        } else if (state == 2) {
             stateStr = "= 4";
-        }else{
-            stateStr = "= 7";
+        } else {
+            stateStr = ">= 7";
         }
 
         Page<MyRepairRecordVo> page = new Page<>();
@@ -90,4 +89,81 @@ public class RepairRecordServiceImpl extends ServiceImpl<RepairRecordMapper, Rep
         IPage<MyRepairRecordVo> result = repairRecordMapper.queryMyRepairRecordList(page, stateStr, userId);
         return new PageUtils(result);
     }
+
+    @Override
+    public MaintenanceTechnicianVo queryRepairTechnicianCount(Integer userId, String dateNow) {
+        MaintenanceTechnicianVo result = repairRecordMapper.queryRepairTechnicianCount(userId, dateNow);
+        return result;
+    }
+
+    @Override
+    public PageUtils<RepairTechnicianVo> queryPendingOrderList(int currentPage, int pageCount, Integer userId, String dateNow) {
+        Page<RepairTechnicianVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairTechnicianVo> result = repairRecordMapper.queryPendingOrderList(page, userId, dateNow);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<RepairTechnicianVo> queryRepairOrderList(int currentPage, int pageCount, Integer userId, String dateNow) {
+        Page<RepairTechnicianVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairTechnicianVo> result = repairRecordMapper.queryRepairOrderList(page, userId, dateNow);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<RepairTechnicianVo> queryTimeoutOrderList(int currentPage, int pageCount, Integer userId, String dateNow) {
+        Page<RepairTechnicianVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairTechnicianVo> result = repairRecordMapper.queryTimeoutOrderList(page, userId, dateNow);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<RepairTechnicianVo> queryExamineOrderList(int currentPage, int pageCount, Integer userId) {
+        Page<RepairTechnicianVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairTechnicianVo> result = repairRecordMapper.queryExamineOrderList(page, userId);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public RepairManageCountVo queryManageCount() {
+        RepairManageCountVo result = repairRecordMapper.queryManageCount();
+        return result;
+    }
+
+    @Override
+    public PageUtils<RepairRecordPageVo> queryNotTimeout(int currentPage, int pageCount, String stateStr, String keyWord, String startTime, String endTime) {
+        Page<RepairRecordPageVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairRecordPageVo> result = repairRecordMapper.queryNotTimeout(page, stateStr, keyWord, startTime, endTime);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<RepairRecordPageVo> queryTimeout(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
+        Page<RepairRecordPageVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<RepairRecordPageVo> result = repairRecordMapper.queryTimeout(page, keyWord, startTime, endTime);
+        return new PageUtils(result);
+    }
+
+    @Override
+    public PageUtils<pendingOrderVo> queryPendingOrder(int currentPage, int pageCount, Integer userId) {
+        Page<pendingOrderVo> page = new Page<>();
+        page.setCurrent(currentPage);
+        page.setSize(pageCount);
+        IPage<pendingOrderVo> result = repairRecordMapper.queryPendingOrder(page, userId);
+        return new PageUtils(result);
+    }
+
+
 }

+ 11 - 0
src/main/java/com/repair/services/impl/RepairShiftSettingsServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.repair.mapper.RepairAreaMapper;
+import com.repair.model.pojo.RepairLeaveMessage;
 import com.repair.model.pojo.RepairShiftSettings;
 import com.repair.model.pojo.RepairShiftSettings;
 import com.repair.mapper.RepairShiftSettingsMapper;
@@ -68,4 +69,14 @@ public class RepairShiftSettingsServiceImpl extends ServiceImpl<RepairShiftSetti
         List<RepairShiftSettings> result = repairShiftSettingsMapper.selectList(null);
         return result;
     }
+
+    @Override
+    public List<RepairShiftSettings> getRepairsByShiftIds(List<String> shiftIds) {
+        QueryWrapper<RepairShiftSettings> queryWrapper = new QueryWrapper();
+        queryWrapper.in("id", shiftIds);
+        queryWrapper.eq("is_duty", 0);
+        queryWrapper.orderByDesc("end_time");
+        List<RepairShiftSettings> result = repairShiftSettingsMapper.selectList(queryWrapper);
+        return result;
+    }
 }

+ 36 - 3
src/main/java/com/repair/services/impl/RepairUserServiceImpl.java

@@ -8,9 +8,12 @@ import com.repair.mapper.RepairUserMapper;
 import com.repair.model.pojo.RepairWorkType;
 import com.repair.model.result.PageUtils;
 import com.repair.model.vo.RepairConsumeVo;
+import com.repair.model.vo.RepairLogisticsVo;
 import com.repair.model.vo.RepairUserVo;
+import com.repair.model.vo.UserDataVo;
 import com.repair.services.RepairUserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -44,19 +47,34 @@ public class RepairUserServiceImpl extends ServiceImpl<RepairUserMapper, RepairU
     }
 
     @Override
-    public PageUtils<RepairUser> queryPageRepairUser(int currentPage, int pageCount){
+    public PageUtils<RepairUser> queryPageRepairUser(int currentPage, int pageCount) {
+        //ru.user_zzid = 1 or ru.user_zzid = 2
         Page<RepairUser> page = new Page<>(currentPage, pageCount);
         QueryWrapper<RepairUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.and(e -> e.eq("user_zzid", 1)
+                .or()
+                .eq("user_zzid", 2));
         IPage<RepairUser> result = repairUserMapper.selectPage(page, queryWrapper);
         return new PageUtils(result);
     }
 
     @Override
+    public List<RepairUser> queryRepairUsers() {
+        QueryWrapper<RepairUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.and(e -> e.eq("user_zzid", 1)
+                .or()
+                .eq("user_zzid", 2));
+        List<RepairUser> result = repairUserMapper.selectList(queryWrapper);
+        return result;
+    }
+
+
+    @Override
     public PageUtils<RepairUserVo> queryPageRepairUser(int currentPage, int pageCount, String keyWork, Integer teamId, Integer schoolId) {
         Page<RepairUserVo> page = new Page<>();
         page.setCurrent(currentPage);
         page.setSize(pageCount);
-        IPage<RepairUserVo> datas = repairUserMapper.queryUserPageList(page, schoolId == null ? null : String.valueOf(schoolId) , teamId == null ? null : String.valueOf(teamId), keyWork);
+        IPage<RepairUserVo> datas = repairUserMapper.queryUserPageList(page, schoolId == null ? null : String.valueOf(schoolId), teamId == null ? null : String.valueOf(teamId), keyWork);
         return new PageUtils(datas);
     }
 
@@ -89,10 +107,25 @@ public class RepairUserServiceImpl extends ServiceImpl<RepairUserMapper, RepairU
     }
 
     @Override
-    public List<RepairUser> getRepairByUserZZ(List<Integer> userZZId) {
+    public List<RepairUser> getRepairByUserZZ(List<Integer> userZZId, Integer schoolId) {
         QueryWrapper<RepairUser> queryWrapper = new QueryWrapper<>();
         queryWrapper.in("user_zzid", userZZId);
+        if(schoolId != null){
+            queryWrapper.eq("school_id", schoolId);
+        }
         List<RepairUser> result = repairUserMapper.selectList(queryWrapper);
         return result;
     }
+
+    @Override
+    public List<RepairLogisticsVo> queryLogisticsList(Integer recordId) {
+        List<RepairLogisticsVo> result = repairUserMapper.queryLogisticsList(recordId);
+        return result;
+    }
+
+    @Override
+    public UserDataVo queryUserData(Integer userId, String dateNow) {
+        UserDataVo result = repairUserMapper.queryUserData(userId, dateNow);
+        return result;
+    }
 }

+ 53 - 0
src/main/java/com/repair/services/impl/WxAccessTokenServiceImpl.java

@@ -0,0 +1,53 @@
+package com.repair.services.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.repair.model.pojo.WxAccessToken;
+import com.repair.mapper.WxAccessTokenMapper;
+import com.repair.services.WxAccessTokenService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author ceshi
+ * @since 2023-08-01
+ */
+@Service
+public class WxAccessTokenServiceImpl extends ServiceImpl<WxAccessTokenMapper, WxAccessToken> implements WxAccessTokenService {
+
+    @Autowired
+    private WxAccessTokenMapper wxAccessTokenMapper;
+
+    @Override
+    public int insertwxAccessToken(WxAccessToken wat) {
+        int result = wxAccessTokenMapper.insert(wat);
+        return result;
+    }
+
+    @Override
+    public int updatewxAccessToken(WxAccessToken wat) {
+        int result = wxAccessTokenMapper.updateById(wat);
+        return result;
+    }
+
+    @Override
+    public int deletewxAccessTokenById(int id) {
+        int result = wxAccessTokenMapper.deleteById(id);
+        return result;
+    }
+
+    @Override
+    public WxAccessToken getRepairByDate(String dateNow) {
+        QueryWrapper<WxAccessToken> queryWrapper = new QueryWrapper();
+        queryWrapper.ge("expires_time",dateNow);
+        queryWrapper.orderByDesc("expires_time");
+        List<WxAccessToken> result = wxAccessTokenMapper.selectList(queryWrapper);
+        return result.size() > 0 ? result.get(0) : null;
+    }
+}

+ 1 - 0
src/main/resources/application-dev.yml

@@ -61,6 +61,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 1 - 0
src/main/resources/application-prod.yml

@@ -62,6 +62,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 1 - 0
src/main/resources/application.yml

@@ -59,6 +59,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 2 - 0
src/main/resources/mapper/repair/RepairClassesSettingsMapper.xml

@@ -10,10 +10,12 @@
         <result property="startDate" column="start_date"/>
         <result property="shiftId" column="shift_id"/>
         <result property="shiftName" column="shift_name"/>
+        <result property="shiftColor" column="shift_color"/>
     </resultMap>
 
     <select id="queryClassesSettingList" resultType="com.repair.model.vo.ClassesSettingVo" resultMap="repairClassesListMap">
         SELECT rcs.id,rcs.user_id,rcs.start_date,rcs.shift_id,(select GROUP_CONCAT(name) from repair_shift_settings where find_in_set(id,rcs.shift_id) and deleted = 0) as shift_name
+        ,(select GROUP_CONCAT(color) from repair_shift_settings where find_in_set(id,rcs.shift_id) and deleted = 0) as shift_color
         FROM repair_classes_settings rcs
         <where>
             and rcs.deleted = 0

+ 31 - 0
src/main/resources/mapper/repair/RepairCollaborateRecordMapper.xml

@@ -2,4 +2,35 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairCollaborateRecordMapper">
 
+    <resultMap type="com.repair.model.vo.CollaborateRecordVo" id="repairCollaborateRecordMap">
+        <result property="id" column="id"/>
+        <result property="recordId" column="record_id"/>
+        <result property="state" column="state"/>
+    </resultMap>
+
+    <select id="queryCollaborateRecordList" resultType="com.repair.model.vo.CollaborateRecordVo" resultMap="repairCollaborateRecordMap">
+        select id,record_id,'转单' as state from repair_transfer_record
+        <where>
+            and deleted = 0 and approval_statu = 2
+            <if test="recordIds != null and recordIds.size() > 0">
+                and record_id in
+                <foreach collection="recordIds" item="recordId" index="index" open="(" close=")" separator=",">
+                    ${recordId}
+                </foreach>
+            </if>
+        </where>
+        UNION ALL
+        select id,record_id,'协作' as state from repair_collaborate_record
+        <where>
+            and deleted = 0 and approval_statu = 2
+            <if test="recordIds != null and recordIds.size() > 0">
+                and record_id in
+                <foreach collection="recordIds" item="recordId" index="index" open="(" close=")" separator=",">
+                    ${recordId}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+
 </mapper>

+ 57 - 0
src/main/resources/mapper/repair/RepairConsumablesMapper.xml

@@ -2,4 +2,61 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairConsumablesMapper">
 
+    <resultMap type="com.repair.model.vo.ConsumablePageVo" id="repairConsumablePageMap">
+        <result property="id" column="id"/>
+        <result property="consumeName" column="consume_name"/>
+        <result property="price" column="price"/>
+        <result property="number" column="number"/>
+        <result property="totalPrice" column="total_price"/>
+        <result property="articleName" column="article_name"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryConsumablePageList" resultType="com.repair.model.vo.ConsumablePageVo" resultMap="repairConsumablePageMap">
+        select rcs.id,rcs.consume_name,rcs.price,rcs.number,rcs.total_price,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,rc.article_id) and deleted = 0) as article_name
+        ,rr.record_no,rr.report_time,rcs.update_time from repair_consumables rcs
+        left join repair_consume rc on rc.deleted = 0 and rc.id = rcs.consume_id
+        left join repair_record rr on rr.deleted = 0 and rr.id = rcs.record_id
+        <where>
+            and rcs.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rcs.consume_name like '%' #{keyWord} '%' or rr.record_no like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rcs.update_time BETWEEN #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc,rcs.update_time desc
+    </select>
+
+    <resultMap type="com.repair.model.vo.ConsumableExcelVo" id="repairConsumableExcelMap">
+        <result property="id" column="id"/>
+        <result property="consumeName" column="consume_name"/>
+        <result property="price" column="price"/>
+        <result property="number" column="number"/>
+        <result property="totalPrice" column="total_price"/>
+        <result property="articleName" column="article_name"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryConsumableExcelList" resultType="com.repair.model.vo.ConsumableExcelVo" resultMap="repairConsumableExcelMap">
+        select rcs.id,rcs.consume_name,rcs.price,rcs.number,rcs.total_price,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,rc.article_id) and deleted = 0) as article_name
+        ,rr.record_no,rr.report_time,rcs.update_time from repair_consumables rcs
+        left join repair_consume rc on rc.deleted = 0 and rc.id = rcs.consume_id
+        left join repair_record rr on rr.deleted = 0 and rr.id = rcs.record_id
+        <where>
+            and rcs.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rcs.consume_name like '%' #{keyWord} '%' or rr.record_no like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rcs.update_time BETWEEN #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc,rcs.update_time desc
+    </select>
 </mapper>

+ 15 - 0
src/main/resources/mapper/repair/RepairDispatchRecordMapper.xml

@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairDispatchRecordMapper">
+    <resultMap type="com.repair.model.vo.RepairCardNumberVo" id="repairCardNumberMap">
+        <result property="cardNumber" column="card_number"/>
+    </resultMap>
+
+    <select id="queryRepairCardNumber" resultType="com.repair.model.vo.RepairCardNumberVo" resultMap="repairCardNumberMap">
+        SELECT ru.card_number FROM repair_dispatch_record rdr
+        left join repair_user ru on ru.deleted = 0 and ru.id = rdr.users_id
+        <where>
+            and rdr.deleted = 0 and rdr.is_lose_efficacy = 0
+            <if test="recordId != null and recordId != ''">
+                and rdr.record_id = #{recordId}
+            </if>
+        </where>
+    </select>
+
 
 </mapper>

+ 267 - 10
src/main/resources/mapper/repair/RepairRecordMapper.xml

@@ -8,8 +8,10 @@
         <result property="Finished" column="Finished"/>
     </resultMap>
 
-    <select id="queryRepairRecordCount" resultType="com.repair.model.vo.RepairRecordCountVo" resultMap="repairRecordCountMap">
-        SELECT COUNT(IF(maintenance_state &lt; 7,1, NULL)) Incomplete,COUNT(IF(maintenance_state=4,1, NULL)) Confirmed,COUNT(IF(maintenance_state=7,1, NULL)) Finished FROM `repair_record`
+    <select id="queryRepairRecordCount" resultType="com.repair.model.vo.RepairRecordCountVo"
+            resultMap="repairRecordCountMap">
+        SELECT COUNT(IF(maintenance_state &lt; 7,1, NULL)) Incomplete,COUNT(IF(maintenance_state=4,1, NULL))
+        Confirmed,COUNT(IF(maintenance_state &gt;=7 ,1, NULL)) Finished FROM `repair_record`
         <where>
             and maintenance_state &lt;= 7 and deleted = 0
             <if test="userId != null and userId != ''">
@@ -34,23 +36,278 @@
         <result property="price" column="price"/>
         <result property="maintenancerName" column="maintenancer_name"/>
         <result property="maintenancerPhone" column="maintenancer_phone"/>
-        <result property="acceptanceAssessTime" column="acceptance_assess_time"/>
-        <result property="maintenanceAssessTime" column="maintenance_assess_time"/>
+        <result property="timeoutDispStr" column="timeout_disp_str"/>
+        <result property="timeoutReceStr" column="timeout_rece_str"/>
     </resultMap>
 
-    <select id="queryMyRepairRecordList" resultType="com.repair.model.vo.MyRepairRecordVo" resultMap="repairRecordOwnMap">
-        select rr.acceptance_assess_time,rr.maintenance_assess_time,rr.id,rr.price,rr.maintenancer_name,rr.maintenancer_phone,rr.record_no,rr.report_time,rr.dispatch_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rr.description,rat.name as article_name,rr.image,rr.maintenance_state as state_id from repair_record rr
+    <select id="queryMyRepairRecordList" resultType="com.repair.model.vo.MyRepairRecordVo"
+            resultMap="repairRecordOwnMap">
+        select
+        case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW() when true then '超时未接'
+        else null end as timeout_disp_str,
+        case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= NOW() when true then '维修超时'
+        else null end as timeout_rece_str,
+        rr.id,rr.price,rr.maintenancer_name,rr.maintenancer_phone,rr.record_no,rr.report_time,rr.dispatch_time,rr.user_name,rr.user_phone,rr.area_id
+        as area_name,rr.address,rr.description,rat.name as article_name,rr.image,rr.maintenance_state as state_id from
+        repair_record rr
         left join repair_article_type rat on rat.id = rr.article_id
+        left join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        left join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
         <where>
             and rr.deleted = 0
             <if test="stateStr != null and stateStr != ''">
-                and maintenance_state ${stateStr}
+                and rr.maintenance_state ${stateStr}
             </if>
             <if test="userId != null and userId != ''">
-                and user_id = #{userId}
+                and rr.user_id = #{userId}
+            </if>
+        </where>
+        order by rr.report_time DESC
+    </select>
+
+    <resultMap type="com.repair.model.vo.MaintenanceTechnicianVo" id="repairRecordTechnicianMap">
+        <result property="receivingCount" column="receiving_count"/>
+        <result property="maintenanceCount" column="maintenance_count"/>
+        <result property="timeoutCount" column="timeout_count"/>
+        <result property="examineCount" column="examine_count"/>
+    </resultMap>
+
+    <select id="queryRepairTechnicianCount" resultType="com.repair.model.vo.MaintenanceTechnicianVo"
+            resultMap="repairRecordTechnicianMap">
+        select (select Count(*) from repair_record rr1
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr1.id and
+        rdr.is_lose_efficacy = 0
+        where rr1.maintenance_state = 1 and rr1.deleted = 0) as receiving_count ,(select Count(*) from repair_record rr2
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr2.id and
+        rdv.is_lose_efficacy = 0
+        where rr2.maintenance_state = 2 and rr2.deleted = 0) as maintenance_count,(select Count(*) as cs from (select rr3.*
+        from repair_record rr3
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow}
+        where rr3.maintenance_state = 1 and rr3.deleted = 0
+        UNION ALL
+        select rr4.* from repair_record rr4
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= #{dateNow}
+        where rr4.maintenance_state = 2 and rr4.deleted = 0) c) as timeout_count,(select Count(*) as sh from (
+        select rr5.* from repair_record rr5
+        inner join repair_collaborate_record rcr on rcr.deleted = 0 and rcr.user_id = #{userId} and rcr.record_id = rr5.id and
+        rcr.approval_statu = 2
+        where rr5.maintenance_state = 6 and rr5.deleted = 0
+        UNION ALL
+        select rr.* from repair_record rr
+        inner join repair_transfer_record rtr on rtr.deleted = 0 and rtr.user_id = #{userId} and rtr.record_id = rr.id and
+        rtr.approval_statu = 2
+        where rr.maintenance_state = 5 and rr.deleted = 0) a) as examine_count
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairTechnicianVo" id="repairRecordTechnicianDataMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="areaName" column="area_name"/>
+        <result property="address" column="address"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="image" column="image"/>
+        <result property="state" column="state"/>
+        <result property="timeoutStr" column="timeout_str"/>
+    </resultMap>
+
+    <!--待接单-->
+    <select id="queryPendingOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow} when true then '超时未接' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name,rr.description,rr.image,'待接单' as state
+        from repair_record rr
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0
+        order by rr.report_time DESC
+    </select>
+
+    <!--维修中-->
+    <select id="queryRepairOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= #{dateNow} when true then '维修超时' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'维修中' as state
+        from repair_record rr
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 2 and rr.deleted = 0
+        order by rr.report_time DESC
+    </select>
+
+    <!--已超时-->
+    <select id="queryTimeoutOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        SELECT * FROM (
+        select case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow} when true then '超时未接' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'待接单' as state from repair_record rr
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0
+        UNION ALL
+        select case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= #{dateNow} when true then '维修超时' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'维修中' as state from repair_record rr
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 2 and rr.deleted = 0) t
+        order by t.report_time desc
+    </select>
+
+    <!--待审核-->
+    <select id="queryExamineOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'协作审核' as state from repair_record rr
+        inner join repair_collaborate_record rcr on rcr.deleted = 0 and rcr.user_id = #{userId} and rcr.record_id = rr.id and rcr.approval_statu = 2
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 6 and rr.deleted = 0
+        UNION ALL
+        select rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'转单审核' as state  from repair_record rr
+        inner join repair_transfer_record rtr on rtr.deleted = 0 and rtr.user_id = #{userId} and rtr.record_id = rr.id and rtr.approval_statu = 2
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 5 and rr.deleted = 0
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairManageCountVo" id="repairManageCountMap">
+        <result property="allCount" column="all_count"/>
+        <result property="dispatchCount" column="dispatch_count"/>
+        <result property="maintenanceCount" column="maintenance_count"/>
+        <result property="logisticsCount" column="logistics_count"/>
+        <result property="examineCount" column="examine_count"/>
+        <result property="finishedCount" column="finished_count"/>
+        <result property="canceledCount" column="canceled_count"/>
+        <result property="closedCount" column="closed_count"/>
+        <result property="timeoutCount" column="timeout_count"/>
+    </resultMap>
+
+    <select id="queryManageCount" resultType="com.repair.model.vo.RepairManageCountVo" resultMap="repairManageCountMap">
+        select
+        (select Count(*) from repair_record where deleted = 0) as all_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 1)  as dispatch_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 2)  as maintenance_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 3)  as logistics_count,
+        (select Count(*) from repair_record where deleted = 0 and (maintenance_state = 5 or maintenance_state = 6)) as examine_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 7)  as finished_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 8)  as canceled_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 9) as closed_count,
+        (select Count(*) as cs from (select rr3.* from repair_record rr3
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0 and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW()
+        where rr3.maintenance_state = 1 and rr3.deleted = 0
+        UNION ALL
+        select rr4.* from repair_record rr4
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0 and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= NOW()
+        where rr4.maintenance_state = 2 and rr4.deleted = 0) c) as timeout_count
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairRecordPageVo" id="repairRecordPageMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="maintenancerName" column="maintenancer_name"/>
+        <result property="details" column="details"/>
+        <result property="maintenanceState" column="maintenance_state"/>
+        <result property="userId" column="user_id"/>
+    </resultMap>
+
+    <!--除已超时外的其他数据获取方式-->
+    <select id="queryNotTimeout" resultType="com.repair.model.vo.RepairRecordPageVo" resultMap="repairRecordPageMap">
+        select rr.user_id,1 as details,rr.id,rr.record_no,rr.area_id as area_name,rr.user_name,rr.user_phone,rat.name as
+        article_name,
+        rr.description,rr.report_time,rr.maintenancer_name,rr.maintenance_state
+        from repair_record rr
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        <where>
+            and rr.deleted = 0
+            <if test="stateStr != null and stateStr != ''">
+                and (rr.maintenance_state ${stateStr}
+            </if>
+            <if test="keyWord != null and keyWord != ''">
+                and (rr.area_id like '%' #{keyWord} '%' or rr.user_name like '%' #{keyWord} '%' or rr.user_phone like
+                '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr.report_time between #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc
+    </select>
+
+    <!--#已超时获取方式-->
+    <select id="queryTimeout" resultType="com.repair.model.vo.RepairRecordPageVo" resultMap="repairRecordPageMap">
+        SELECT * FROM (
+        select rr3.user_id,1 as details,rr3.id,rr3.record_no,rr3.area_id as
+        area_name,rr3.user_name,rr3.user_phone,rat.name as article_name,
+        rr3.description,rr3.report_time,rr3.maintenancer_name,rr3.maintenance_state
+        from repair_record rr3
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr3.article_id
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW()
+        <where>
+            and rr3.maintenance_state = 1 and rr3.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rr3.area_id like '%' #{keyWord} '%' or rr3.user_name like '%' #{keyWord} '%' or rr3.user_phone like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr3.report_time between #{startTime} and #{endTime}
+            </if>
+        </where>
+        UNION ALL
+        select rr4.user_id,1 as details,rr4.id,rr4.record_no,rr4.area_id as area_name,rr4.user_name,rr4.user_phone,rat.name as
+        article_name,
+        rr4.description,rr4.report_time,rr4.maintenancer_name,rr4.maintenance_state
+        from repair_record rr4
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr4.article_id
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= NOW()
+        <where>
+            and rr4.maintenance_state = 2 and rr4.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rr4.area_id like '%' #{keyWord} '%' or rr4.user_name like '%' #{keyWord} '%' or rr4.user_phone like
+                '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr4.report_time between #{startTime} and #{endTime}
             </if>
         </where>
-        order by report_time DESC
-        </select>
+        ) t
+        order by t.report_time desc
+    </select>
+
+
+    <!--#获取待处理池数据-->
+    <resultMap type="com.repair.model.vo.pendingOrderVo" id="repairPendingOrderMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="areaName" column="area_name"/>
+        <result property="address" column="address"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="image" column="image"/>
+        <result property="state" column="state"/>
+    </resultMap>
+
+    <select id="queryPendingOrder" resultType="com.repair.model.vo.pendingOrderVo" resultMap="repairPendingOrderMap">
+        select * from (select (select Count(*) from repair_dispatch_record where is_lose_efficacy = 0 and record_id = rr.id and users_id = #{userId}) as disp_count,rr.id,rr.record_no,
+        rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name,rr.description,rr.image,'待接单' as state
+        from repair_record rr
+        left join repair_article_type rat on rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0) t where t.disp_count &lt;= 0
+        order by t.report_time desc
+    </select>
 
 </mapper>

+ 31 - 2
src/main/resources/mapper/repair/RepairUserMapper.xml

@@ -25,11 +25,11 @@
 
     <select id="queryUserPageList" resultType="com.repair.model.vo.RepairUserVo" resultMap="repairUserPageMap">
         select ru.card_number,ru.acceptance_assess_time,ru.maintenance_assess_time,ru.id,ru.article_id,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,ru.article_id)) as article_name,ru.user_name, ru.user_phone, ru.team_id, case ru.team_id when 0 then '校方人员' else '第三方人员' end as team_name, ru.school_id,ra.name as school_name,
-        ru.user_zzid,'维修师傅' as user_zzname,ru.build_id,(select GROUP_CONCAT(name) from repair_area where find_in_set(id,ru.build_id)) as build_name,ru.work_type,rwt.name as work_type_name from repair_user ru
+        ru.user_zzid,case ru.user_zzid when 3 then '后勤人员' else '维修师傅' end as user_zzname,ru.build_id,(select GROUP_CONCAT(name) from repair_area where find_in_set(id,ru.build_id)) as build_name,ru.work_type,rwt.name as work_type_name from repair_user ru
         left join repair_area ra on ra.id = ru.school_id and ra.deleted = 0
         left join repair_work_type rwt on rwt.id = ru.work_type and ra.deleted = 0
         <where>
-            and ru.deleted = 0 and (ru.user_zzid = 1 or ru.user_zzid = 2)
+            and ru.deleted = 0 and (ru.user_zzid = 1 or ru.user_zzid = 2 or ru.user_zzid = 3)
             <if test="schoolId != null and schoolId != ''">
                 and ru.school_id = ${schoolId}
             </if>
@@ -42,4 +42,33 @@
         </where>
     </select>
 
+    <resultMap type="com.repair.model.vo.RepairLogisticsVo" id="repairLogisticsMap">
+        <result property="id" column="id"/>
+    </resultMap>
+
+    <select id="queryLogisticsList" resultType="com.repair.model.vo.RepairLogisticsVo" resultMap="repairLogisticsMap">
+        select id from repair_user ru
+        where EXISTS (select id from repair_record where deleted = 0 and id = #{recordId} and school_id = ru.school_id)
+        and ru.user_zzid = 3 and ru.deleted = 0
+    </select>
+
+
+    <resultMap type="com.repair.model.vo.UserDataVo" id="userDataMap">
+        <result property="id" column="id"/>
+        <result property="state" column="state"/>
+        <result property="shiftId" column="shift_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="startDate" column="start_date"/>
+        <result property="articleId" column="article_id"/>
+        <result property="acceptanceAssessTime" column="acceptance_assess_time"/>
+        <result property="maintenanceAssessTime" column="maintenance_assess_time"/>
+    </resultMap>
+    <select id="queryUserData" resultType="com.repair.model.vo.UserDataVo" resultMap="userDataMap">
+        select ru.user_phone,ru.acceptance_assess_time,ru.maintenance_assess_time,ru.state,ru.id,ru.user_name,rcs.start_date,rcs.shift_id,GROUP_CONCAT(rat.id) as article_id from repair_user ru
+        left join repair_classes_settings rcs on rcs.deleted = 0 and rcs.user_id = #{userId} and start_date = #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and ( FIND_IN_SET(rat.id,ru.article_id) or FIND_IN_SET(rat.parent_id,ru.article_id))
+        where ru.id = #{userId} and ru.deleted = 0
+    </select>
+
 </mapper>

+ 5 - 0
src/main/resources/mapper/repair/WxAccessTokenMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.repair.mapper.WxAccessTokenMapper">
+
+</mapper>

+ 5 - 0
target/classes/META-INF/spring-configuration-metadata.json

@@ -33,6 +33,11 @@
       "sourceType": "com.repair.config.WxOpenidConfig"
     },
     {
+      "name": "openid.ocode",
+      "type": "java.lang.String",
+      "sourceType": "com.repair.config.WxOpenidConfig"
+    },
+    {
       "name": "tencentcloud.sdk-appid",
       "type": "java.lang.String",
       "sourceType": "com.repair.config.SmsConfig"

+ 1 - 0
target/classes/application-dev.yml

@@ -61,6 +61,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 1 - 0
target/classes/application-prod.yml

@@ -62,6 +62,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 1 - 0
target/classes/application.yml

@@ -59,6 +59,7 @@ openid:
   appkey: 5071958561AA629530AAA31503088330 #05742955578EC5BD29B7BC4CAC5AFACA
   granttype: authorization_code
   ipconfig: 192.168.161.220
+  ocode: 1015730314
 
 # 项目公钥私钥
 my-security:

+ 2 - 0
target/classes/mapper/repair/RepairClassesSettingsMapper.xml

@@ -10,10 +10,12 @@
         <result property="startDate" column="start_date"/>
         <result property="shiftId" column="shift_id"/>
         <result property="shiftName" column="shift_name"/>
+        <result property="shiftColor" column="shift_color"/>
     </resultMap>
 
     <select id="queryClassesSettingList" resultType="com.repair.model.vo.ClassesSettingVo" resultMap="repairClassesListMap">
         SELECT rcs.id,rcs.user_id,rcs.start_date,rcs.shift_id,(select GROUP_CONCAT(name) from repair_shift_settings where find_in_set(id,rcs.shift_id) and deleted = 0) as shift_name
+        ,(select GROUP_CONCAT(color) from repair_shift_settings where find_in_set(id,rcs.shift_id) and deleted = 0) as shift_color
         FROM repair_classes_settings rcs
         <where>
             and rcs.deleted = 0

+ 31 - 0
target/classes/mapper/repair/RepairCollaborateRecordMapper.xml

@@ -2,4 +2,35 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairCollaborateRecordMapper">
 
+    <resultMap type="com.repair.model.vo.CollaborateRecordVo" id="repairCollaborateRecordMap">
+        <result property="id" column="id"/>
+        <result property="recordId" column="record_id"/>
+        <result property="state" column="state"/>
+    </resultMap>
+
+    <select id="queryCollaborateRecordList" resultType="com.repair.model.vo.CollaborateRecordVo" resultMap="repairCollaborateRecordMap">
+        select id,record_id,'转单' as state from repair_transfer_record
+        <where>
+            and deleted = 0 and approval_statu = 2
+            <if test="recordIds != null and recordIds.size() > 0">
+                and record_id in
+                <foreach collection="recordIds" item="recordId" index="index" open="(" close=")" separator=",">
+                    ${recordId}
+                </foreach>
+            </if>
+        </where>
+        UNION ALL
+        select id,record_id,'协作' as state from repair_collaborate_record
+        <where>
+            and deleted = 0 and approval_statu = 2
+            <if test="recordIds != null and recordIds.size() > 0">
+                and record_id in
+                <foreach collection="recordIds" item="recordId" index="index" open="(" close=")" separator=",">
+                    ${recordId}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+
 </mapper>

+ 57 - 0
target/classes/mapper/repair/RepairConsumablesMapper.xml

@@ -2,4 +2,61 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairConsumablesMapper">
 
+    <resultMap type="com.repair.model.vo.ConsumablePageVo" id="repairConsumablePageMap">
+        <result property="id" column="id"/>
+        <result property="consumeName" column="consume_name"/>
+        <result property="price" column="price"/>
+        <result property="number" column="number"/>
+        <result property="totalPrice" column="total_price"/>
+        <result property="articleName" column="article_name"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryConsumablePageList" resultType="com.repair.model.vo.ConsumablePageVo" resultMap="repairConsumablePageMap">
+        select rcs.id,rcs.consume_name,rcs.price,rcs.number,rcs.total_price,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,rc.article_id) and deleted = 0) as article_name
+        ,rr.record_no,rr.report_time,rcs.update_time from repair_consumables rcs
+        left join repair_consume rc on rc.deleted = 0 and rc.id = rcs.consume_id
+        left join repair_record rr on rr.deleted = 0 and rr.id = rcs.record_id
+        <where>
+            and rcs.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rcs.consume_name like '%' #{keyWord} '%' or rr.record_no like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rcs.update_time BETWEEN #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc,rcs.update_time desc
+    </select>
+
+    <resultMap type="com.repair.model.vo.ConsumableExcelVo" id="repairConsumableExcelMap">
+        <result property="id" column="id"/>
+        <result property="consumeName" column="consume_name"/>
+        <result property="price" column="price"/>
+        <result property="number" column="number"/>
+        <result property="totalPrice" column="total_price"/>
+        <result property="articleName" column="article_name"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="queryConsumableExcelList" resultType="com.repair.model.vo.ConsumableExcelVo" resultMap="repairConsumableExcelMap">
+        select rcs.id,rcs.consume_name,rcs.price,rcs.number,rcs.total_price,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,rc.article_id) and deleted = 0) as article_name
+        ,rr.record_no,rr.report_time,rcs.update_time from repair_consumables rcs
+        left join repair_consume rc on rc.deleted = 0 and rc.id = rcs.consume_id
+        left join repair_record rr on rr.deleted = 0 and rr.id = rcs.record_id
+        <where>
+            and rcs.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rcs.consume_name like '%' #{keyWord} '%' or rr.record_no like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rcs.update_time BETWEEN #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc,rcs.update_time desc
+    </select>
 </mapper>

+ 15 - 0
target/classes/mapper/repair/RepairDispatchRecordMapper.xml

@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.repair.mapper.RepairDispatchRecordMapper">
+    <resultMap type="com.repair.model.vo.RepairCardNumberVo" id="repairCardNumberMap">
+        <result property="cardNumber" column="card_number"/>
+    </resultMap>
+
+    <select id="queryRepairCardNumber" resultType="com.repair.model.vo.RepairCardNumberVo" resultMap="repairCardNumberMap">
+        SELECT ru.card_number FROM repair_dispatch_record rdr
+        left join repair_user ru on ru.deleted = 0 and ru.id = rdr.users_id
+        <where>
+            and rdr.deleted = 0 and rdr.is_lose_efficacy = 0
+            <if test="recordId != null and recordId != ''">
+                and rdr.record_id = #{recordId}
+            </if>
+        </where>
+    </select>
+
 
 </mapper>

+ 267 - 10
target/classes/mapper/repair/RepairRecordMapper.xml

@@ -8,8 +8,10 @@
         <result property="Finished" column="Finished"/>
     </resultMap>
 
-    <select id="queryRepairRecordCount" resultType="com.repair.model.vo.RepairRecordCountVo" resultMap="repairRecordCountMap">
-        SELECT COUNT(IF(maintenance_state &lt; 7,1, NULL)) Incomplete,COUNT(IF(maintenance_state=4,1, NULL)) Confirmed,COUNT(IF(maintenance_state=7,1, NULL)) Finished FROM `repair_record`
+    <select id="queryRepairRecordCount" resultType="com.repair.model.vo.RepairRecordCountVo"
+            resultMap="repairRecordCountMap">
+        SELECT COUNT(IF(maintenance_state &lt; 7,1, NULL)) Incomplete,COUNT(IF(maintenance_state=4,1, NULL))
+        Confirmed,COUNT(IF(maintenance_state &gt;=7 ,1, NULL)) Finished FROM `repair_record`
         <where>
             and maintenance_state &lt;= 7 and deleted = 0
             <if test="userId != null and userId != ''">
@@ -34,23 +36,278 @@
         <result property="price" column="price"/>
         <result property="maintenancerName" column="maintenancer_name"/>
         <result property="maintenancerPhone" column="maintenancer_phone"/>
-        <result property="acceptanceAssessTime" column="acceptance_assess_time"/>
-        <result property="maintenanceAssessTime" column="maintenance_assess_time"/>
+        <result property="timeoutDispStr" column="timeout_disp_str"/>
+        <result property="timeoutReceStr" column="timeout_rece_str"/>
     </resultMap>
 
-    <select id="queryMyRepairRecordList" resultType="com.repair.model.vo.MyRepairRecordVo" resultMap="repairRecordOwnMap">
-        select rr.acceptance_assess_time,rr.maintenance_assess_time,rr.id,rr.price,rr.maintenancer_name,rr.maintenancer_phone,rr.record_no,rr.report_time,rr.dispatch_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rr.description,rat.name as article_name,rr.image,rr.maintenance_state as state_id from repair_record rr
+    <select id="queryMyRepairRecordList" resultType="com.repair.model.vo.MyRepairRecordVo"
+            resultMap="repairRecordOwnMap">
+        select
+        case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW() when true then '超时未接'
+        else null end as timeout_disp_str,
+        case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= NOW() when true then '维修超时'
+        else null end as timeout_rece_str,
+        rr.id,rr.price,rr.maintenancer_name,rr.maintenancer_phone,rr.record_no,rr.report_time,rr.dispatch_time,rr.user_name,rr.user_phone,rr.area_id
+        as area_name,rr.address,rr.description,rat.name as article_name,rr.image,rr.maintenance_state as state_id from
+        repair_record rr
         left join repair_article_type rat on rat.id = rr.article_id
+        left join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        left join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
         <where>
             and rr.deleted = 0
             <if test="stateStr != null and stateStr != ''">
-                and maintenance_state ${stateStr}
+                and rr.maintenance_state ${stateStr}
             </if>
             <if test="userId != null and userId != ''">
-                and user_id = #{userId}
+                and rr.user_id = #{userId}
+            </if>
+        </where>
+        order by rr.report_time DESC
+    </select>
+
+    <resultMap type="com.repair.model.vo.MaintenanceTechnicianVo" id="repairRecordTechnicianMap">
+        <result property="receivingCount" column="receiving_count"/>
+        <result property="maintenanceCount" column="maintenance_count"/>
+        <result property="timeoutCount" column="timeout_count"/>
+        <result property="examineCount" column="examine_count"/>
+    </resultMap>
+
+    <select id="queryRepairTechnicianCount" resultType="com.repair.model.vo.MaintenanceTechnicianVo"
+            resultMap="repairRecordTechnicianMap">
+        select (select Count(*) from repair_record rr1
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr1.id and
+        rdr.is_lose_efficacy = 0
+        where rr1.maintenance_state = 1 and rr1.deleted = 0) as receiving_count ,(select Count(*) from repair_record rr2
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr2.id and
+        rdv.is_lose_efficacy = 0
+        where rr2.maintenance_state = 2 and rr2.deleted = 0) as maintenance_count,(select Count(*) as cs from (select rr3.*
+        from repair_record rr3
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow}
+        where rr3.maintenance_state = 1 and rr3.deleted = 0
+        UNION ALL
+        select rr4.* from repair_record rr4
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= #{dateNow}
+        where rr4.maintenance_state = 2 and rr4.deleted = 0) c) as timeout_count,(select Count(*) as sh from (
+        select rr5.* from repair_record rr5
+        inner join repair_collaborate_record rcr on rcr.deleted = 0 and rcr.user_id = #{userId} and rcr.record_id = rr5.id and
+        rcr.approval_statu = 2
+        where rr5.maintenance_state = 6 and rr5.deleted = 0
+        UNION ALL
+        select rr.* from repair_record rr
+        inner join repair_transfer_record rtr on rtr.deleted = 0 and rtr.user_id = #{userId} and rtr.record_id = rr.id and
+        rtr.approval_statu = 2
+        where rr.maintenance_state = 5 and rr.deleted = 0) a) as examine_count
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairTechnicianVo" id="repairRecordTechnicianDataMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="areaName" column="area_name"/>
+        <result property="address" column="address"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="image" column="image"/>
+        <result property="state" column="state"/>
+        <result property="timeoutStr" column="timeout_str"/>
+    </resultMap>
+
+    <!--待接单-->
+    <select id="queryPendingOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow} when true then '超时未接' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name,rr.description,rr.image,'待接单' as state
+        from repair_record rr
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0
+        order by rr.report_time DESC
+    </select>
+
+    <!--维修中-->
+    <select id="queryRepairOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= #{dateNow} when true then '维修超时' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'维修中' as state
+        from repair_record rr
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 2 and rr.deleted = 0
+        order by rr.report_time DESC
+    </select>
+
+    <!--已超时-->
+    <select id="queryTimeoutOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        SELECT * FROM (
+        select case date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow} when true then '超时未接' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'待接单' as state from repair_record rr
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.users_id = #{userId} and rdr.record_id = rr.id and rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0
+        UNION ALL
+        select case date_add(rdv.receiving_time, interval rdv.maintenance_assess_time minute) &lt;= #{dateNow} when true then '维修超时' else null end as timeout_str,rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'维修中' as state from repair_record rr
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.user_id = #{userId} and rdv.record_id = rr.id and rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 2 and rr.deleted = 0) t
+        order by t.report_time desc
+    </select>
+
+    <!--待审核-->
+    <select id="queryExamineOrderList" resultType="com.repair.model.vo.RepairTechnicianVo"
+            resultMap="repairRecordTechnicianDataMap">
+        select rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'协作审核' as state from repair_record rr
+        inner join repair_collaborate_record rcr on rcr.deleted = 0 and rcr.user_id = #{userId} and rcr.record_id = rr.id and rcr.approval_statu = 2
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 6 and rr.deleted = 0
+        UNION ALL
+        select rr.id,rr.record_no,rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name ,rr.description,rr.image,'转单审核' as state  from repair_record rr
+        inner join repair_transfer_record rtr on rtr.deleted = 0 and rtr.user_id = #{userId} and rtr.record_id = rr.id and rtr.approval_statu = 2
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        where rr.maintenance_state = 5 and rr.deleted = 0
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairManageCountVo" id="repairManageCountMap">
+        <result property="allCount" column="all_count"/>
+        <result property="dispatchCount" column="dispatch_count"/>
+        <result property="maintenanceCount" column="maintenance_count"/>
+        <result property="logisticsCount" column="logistics_count"/>
+        <result property="examineCount" column="examine_count"/>
+        <result property="finishedCount" column="finished_count"/>
+        <result property="canceledCount" column="canceled_count"/>
+        <result property="closedCount" column="closed_count"/>
+        <result property="timeoutCount" column="timeout_count"/>
+    </resultMap>
+
+    <select id="queryManageCount" resultType="com.repair.model.vo.RepairManageCountVo" resultMap="repairManageCountMap">
+        select
+        (select Count(*) from repair_record where deleted = 0) as all_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 1)  as dispatch_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 2)  as maintenance_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 3)  as logistics_count,
+        (select Count(*) from repair_record where deleted = 0 and (maintenance_state = 5 or maintenance_state = 6)) as examine_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 7)  as finished_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 8)  as canceled_count,
+        (select Count(*) from repair_record where deleted = 0 and maintenance_state = 9) as closed_count,
+        (select Count(*) as cs from (select rr3.* from repair_record rr3
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0 and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW()
+        where rr3.maintenance_state = 1 and rr3.deleted = 0
+        UNION ALL
+        select rr4.* from repair_record rr4
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0 and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= NOW()
+        where rr4.maintenance_state = 2 and rr4.deleted = 0) c) as timeout_count
+    </select>
+
+    <resultMap type="com.repair.model.vo.RepairRecordPageVo" id="repairRecordPageMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="maintenancerName" column="maintenancer_name"/>
+        <result property="details" column="details"/>
+        <result property="maintenanceState" column="maintenance_state"/>
+        <result property="userId" column="user_id"/>
+    </resultMap>
+
+    <!--除已超时外的其他数据获取方式-->
+    <select id="queryNotTimeout" resultType="com.repair.model.vo.RepairRecordPageVo" resultMap="repairRecordPageMap">
+        select rr.user_id,1 as details,rr.id,rr.record_no,rr.area_id as area_name,rr.user_name,rr.user_phone,rat.name as
+        article_name,
+        rr.description,rr.report_time,rr.maintenancer_name,rr.maintenance_state
+        from repair_record rr
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr.article_id
+        <where>
+            and rr.deleted = 0
+            <if test="stateStr != null and stateStr != ''">
+                and (rr.maintenance_state ${stateStr}
+            </if>
+            <if test="keyWord != null and keyWord != ''">
+                and (rr.area_id like '%' #{keyWord} '%' or rr.user_name like '%' #{keyWord} '%' or rr.user_phone like
+                '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr.report_time between #{startTime} and #{endTime}
+            </if>
+        </where>
+        order by rr.report_time desc
+    </select>
+
+    <!--#已超时获取方式-->
+    <select id="queryTimeout" resultType="com.repair.model.vo.RepairRecordPageVo" resultMap="repairRecordPageMap">
+        SELECT * FROM (
+        select rr3.user_id,1 as details,rr3.id,rr3.record_no,rr3.area_id as
+        area_name,rr3.user_name,rr3.user_phone,rat.name as article_name,
+        rr3.description,rr3.report_time,rr3.maintenancer_name,rr3.maintenance_state
+        from repair_record rr3
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr3.article_id
+        inner join repair_dispatch_record rdr on rdr.deleted = 0 and rdr.record_id = rr3.id and
+        rdr.is_lose_efficacy = 0
+        and date_add(rdr.assigned_time , interval rdr.acceptance_assess_time minute) &lt;= NOW()
+        <where>
+            and rr3.maintenance_state = 1 and rr3.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rr3.area_id like '%' #{keyWord} '%' or rr3.user_name like '%' #{keyWord} '%' or rr3.user_phone like '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr3.report_time between #{startTime} and #{endTime}
+            </if>
+        </where>
+        UNION ALL
+        select rr4.user_id,1 as details,rr4.id,rr4.record_no,rr4.area_id as area_name,rr4.user_name,rr4.user_phone,rat.name as
+        article_name,
+        rr4.description,rr4.report_time,rr4.maintenancer_name,rr4.maintenance_state
+        from repair_record rr4
+        left join repair_article_type rat on rat.deleted = 0 and rat.id = rr4.article_id
+        inner join repair_receiving rdv on rdv.deleted = 0 and rdv.record_id = rr4.id and
+        rdv.is_lose_efficacy = 0
+        and date_add(rdv.receiving_time , interval rdv.maintenance_assess_time minute) &lt;= NOW()
+        <where>
+            and rr4.maintenance_state = 2 and rr4.deleted = 0
+            <if test="keyWord != null and keyWord != ''">
+                and (rr4.area_id like '%' #{keyWord} '%' or rr4.user_name like '%' #{keyWord} '%' or rr4.user_phone like
+                '%' #{keyWord} '%')
+            </if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                and rr4.report_time between #{startTime} and #{endTime}
             </if>
         </where>
-        order by report_time DESC
-        </select>
+        ) t
+        order by t.report_time desc
+    </select>
+
+
+    <!--#获取待处理池数据-->
+    <resultMap type="com.repair.model.vo.pendingOrderVo" id="repairPendingOrderMap">
+        <result property="id" column="id"/>
+        <result property="recordNo" column="record_no"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="areaName" column="area_name"/>
+        <result property="address" column="address"/>
+        <result property="articleName" column="article_name"/>
+        <result property="description" column="description"/>
+        <result property="image" column="image"/>
+        <result property="state" column="state"/>
+    </resultMap>
+
+    <select id="queryPendingOrder" resultType="com.repair.model.vo.pendingOrderVo" resultMap="repairPendingOrderMap">
+        select * from (select (select Count(*) from repair_dispatch_record where is_lose_efficacy = 0 and record_id = rr.id and users_id = #{userId}) as disp_count,rr.id,rr.record_no,
+        rr.report_time,rr.user_name,rr.user_phone,rr.area_id as area_name,rr.address,rat.name as article_name,rr.description,rr.image,'待接单' as state
+        from repair_record rr
+        left join repair_article_type rat on rat.id = rr.article_id
+        where rr.maintenance_state = 1 and rr.deleted = 0) t where t.disp_count &lt;= 0
+        order by t.report_time desc
+    </select>
 
 </mapper>

+ 31 - 2
target/classes/mapper/repair/RepairUserMapper.xml

@@ -25,11 +25,11 @@
 
     <select id="queryUserPageList" resultType="com.repair.model.vo.RepairUserVo" resultMap="repairUserPageMap">
         select ru.card_number,ru.acceptance_assess_time,ru.maintenance_assess_time,ru.id,ru.article_id,(select GROUP_CONCAT(name) from repair_article_type where find_in_set(id,ru.article_id)) as article_name,ru.user_name, ru.user_phone, ru.team_id, case ru.team_id when 0 then '校方人员' else '第三方人员' end as team_name, ru.school_id,ra.name as school_name,
-        ru.user_zzid,'维修师傅' as user_zzname,ru.build_id,(select GROUP_CONCAT(name) from repair_area where find_in_set(id,ru.build_id)) as build_name,ru.work_type,rwt.name as work_type_name from repair_user ru
+        ru.user_zzid,case ru.user_zzid when 3 then '后勤人员' else '维修师傅' end as user_zzname,ru.build_id,(select GROUP_CONCAT(name) from repair_area where find_in_set(id,ru.build_id)) as build_name,ru.work_type,rwt.name as work_type_name from repair_user ru
         left join repair_area ra on ra.id = ru.school_id and ra.deleted = 0
         left join repair_work_type rwt on rwt.id = ru.work_type and ra.deleted = 0
         <where>
-            and ru.deleted = 0 and (ru.user_zzid = 1 or ru.user_zzid = 2)
+            and ru.deleted = 0 and (ru.user_zzid = 1 or ru.user_zzid = 2 or ru.user_zzid = 3)
             <if test="schoolId != null and schoolId != ''">
                 and ru.school_id = ${schoolId}
             </if>
@@ -42,4 +42,33 @@
         </where>
     </select>
 
+    <resultMap type="com.repair.model.vo.RepairLogisticsVo" id="repairLogisticsMap">
+        <result property="id" column="id"/>
+    </resultMap>
+
+    <select id="queryLogisticsList" resultType="com.repair.model.vo.RepairLogisticsVo" resultMap="repairLogisticsMap">
+        select id from repair_user ru
+        where EXISTS (select id from repair_record where deleted = 0 and id = #{recordId} and school_id = ru.school_id)
+        and ru.user_zzid = 3 and ru.deleted = 0
+    </select>
+
+
+    <resultMap type="com.repair.model.vo.UserDataVo" id="userDataMap">
+        <result property="id" column="id"/>
+        <result property="state" column="state"/>
+        <result property="shiftId" column="shift_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="userPhone" column="user_phone"/>
+        <result property="startDate" column="start_date"/>
+        <result property="articleId" column="article_id"/>
+        <result property="acceptanceAssessTime" column="acceptance_assess_time"/>
+        <result property="maintenanceAssessTime" column="maintenance_assess_time"/>
+    </resultMap>
+    <select id="queryUserData" resultType="com.repair.model.vo.UserDataVo" resultMap="userDataMap">
+        select ru.user_phone,ru.acceptance_assess_time,ru.maintenance_assess_time,ru.state,ru.id,ru.user_name,rcs.start_date,rcs.shift_id,GROUP_CONCAT(rat.id) as article_id from repair_user ru
+        left join repair_classes_settings rcs on rcs.deleted = 0 and rcs.user_id = #{userId} and start_date = #{dateNow}
+        left join repair_article_type rat on rat.deleted = 0 and ( FIND_IN_SET(rat.id,ru.article_id) or FIND_IN_SET(rat.parent_id,ru.article_id))
+        where ru.id = #{userId} and ru.deleted = 0
+    </select>
+
 </mapper>

+ 5 - 0
target/classes/mapper/repair/WxAccessTokenMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.repair.mapper.WxAccessTokenMapper">
+
+</mapper>

+ 26 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -10,6 +10,7 @@ com\repair\api\LoginControllerAPI.class
 com\repair\mapper\RepairTrackRecordMapper.class
 com\repair\api\RepairTransferRecordControllerAPI.class
 com\repair\mapper\RepairEvaluateMapper.class
+com\repair\model\vo\MaintenanceTechnicianVo.class
 com\repair\MybatisPlusApplication.class
 com\repair\model\pojo\RepairCollaborateRecord.class
 com\repair\services\impl\RepairEvaluateServiceImpl.class
@@ -17,11 +18,15 @@ com\repair\services\RepairConsumeService.class
 com\repair\model\pojo\RepairClassesSettings.class
 com\repair\model\pojo\RepairConsume.class
 com\repair\api\RepairArticleTypeControllerAPI.class
+com\repair\model\vo\ConsumableExcelVo.class
 com\repair\model\pojo\RepairConsumables.class
+com\repair\model\vo\shiftSettingVo.class
 com\repair\mapper\RepairAdminMapper.class
 com\repair\mapper\RepairReceivingMapper.class
 com\repair\services\RepairRefundRecordService.class
 com\repair\model\request\insertRepairClassesRequest.class
+com\repair\common\utils\WeiXiaoUtil.class
+com\repair\model\vo\RepairCardNumberVo.class
 com\repair\model\pojo\RepairPayRecord.class
 com\repair\handler\MyMetaObjectHandler.class
 com\repair\model\vo\SystemMenuTreeVo.class
@@ -39,12 +44,15 @@ com\repair\services\impl\RepairClassesSettingsServiceImpl.class
 com\repair\services\impl\RepairCollaborateRecordServiceImpl.class
 com\repair\controller\RepairClassesSettingsController.class
 com\repair\controller\RepairArticleTypeController.class
+com\repair\services\impl\WxAccessTokenServiceImpl.class
 com\repair\api\RepairPayRecordControllerAPI.class
 com\repair\model\result\BaseResult.class
 com\repair\model\request\repairRecordRequest.class
 com\repair\services\impl\RepairSystemMessagesServiceImpl.class
 com\repair\model\result\PageUtils.class
 com\repair\services\impl\RepairNoticeSettingServiceImpl.class
+com\repair\controller\WxAccessTokenController.class
+com\repair\model\vo\pendingOrderVo.class
 com\repair\model\pojo\UnitTimeHelpModel.class
 com\repair\services\impl\RepairDispatchRecordServiceImpl.class
 com\repair\common\utils\WxUtil$1.class
@@ -71,7 +79,10 @@ com\repair\controller\RepairEvaluateController.class
 com\repair\services\impl\RepairConsumeServiceImpl.class
 com\repair\model\vo\ClassesSettingVo.class
 com\repair\controller\RepairRefundRecordController.class
+com\repair\model\vo\RepairRecordPageVo.class
+com\repair\model\request\timeVo.class
 com\repair\controller\RepairConsumablesController.class
+com\repair\services\WxAccessTokenService.class
 com\repair\api\RepairShiftSettingsControllerAPI.class
 com\repair\model\pojo\RepairTransferRecord.class
 com\repair\common\utils\MyX509TrustManager.class
@@ -83,10 +94,12 @@ com\repair\services\RepairClassesSettingsService.class
 com\repair\model\pojo\RepairEvaluate.class
 com\repair\services\RepairTrackRecordService.class
 com\repair\model\enumModel\eRecordStatu.class
+com\repair\model\vo\RepairLogisticsVo.class
 com\repair\mapper\RepairDispatchRecordMapper.class
 com\repair\model\pojo\RepairRecord.class
 com\repair\api\RepairSchoolControllerAPI.class
 com\repair\model\pojo\RepairArticleType.class
+com\repair\common\utils\WeiXiaoUtil$1.class
 com\repair\model\vo\RepairArticleTreeVo.class
 com\repair\common\utils\SeqUtils.class
 com\repair\services\RepairRecordService.class
@@ -112,6 +125,7 @@ com\repair\services\RepairShiftSettingsService.class
 com\repair\common\utils\WxUtil.class
 com\repair\model\vo\ClassesSettingPageVo.class
 com\repair\controller\RepairAreaController.class
+com\repair\model\vo\RepairTechnicianVo.class
 com\repair\services\impl\RepairArticleTypeServiceImpl.class
 com\repair\api\RepairConsumeControllerAPI.class
 com\repair\model\pojo\RepairSchool.class
@@ -128,10 +142,13 @@ com\repair\model\request\loginRequest.class
 com\repair\model\vo\UploadFileVo.class
 com\repair\api\RepairSystemSettingControllerAPI.class
 com\repair\mapper\RepairUserMapper.class
+com\repair\model\pojo\WxAccessToken.class
 com\repair\model\request\updateRepairAreaRequest.class
 com\repair\annotation\PassToken.class
 com\repair\config\MySecurity.class
+com\repair\model\enumModel\eUserStatu.class
 com\repair\api\RepairSystemMessagesControllerAPI.class
+com\repair\model\vo\RepairManageCountVo.class
 com\repair\common\utils\SendSms.class
 com\repair\controller\RepairWorkTypeController.class
 META-INF\spring-configuration-metadata.json
@@ -152,6 +169,7 @@ com\repair\services\RepairReceivingService.class
 com\repair\api\RepairRecordControllerAPI.class
 com\repair\model\vo\EvaluateVo.class
 com\repair\mapper\RepairClassesSettingsMapper.class
+com\repair\model\vo\ConsumablePageVo.class
 com\repair\common\utils\TimeExchange$1.class
 com\repair\model\request\updateRepairAdminRequest.class
 com\repair\model\request\updateUserDataRequest.class
@@ -160,6 +178,7 @@ com\repair\controller\RepairLeaveMessageController.class
 com\repair\services\impl\RepairConsumablesServiceImpl.class
 com\repair\model\pojo\RepairWorkType.class
 com\repair\common\utils\CommonUtil.class
+com\repair\common\utils\DelayedUtils$2.class
 com\repair\api\RepairRefundRecordControllerAPI.class
 com\repair\aop\LoginCheckAspect.class
 com\repair\model\pojo\RepairTrackRecord.class
@@ -172,6 +191,7 @@ com\repair\services\impl\RepairRecordServiceImpl.class
 com\repair\model\pojo\RepairLeaveMessage.class
 com\repair\model\vo\RepairArticleTypeTreeVo.class
 com\repair\model\pojo\RepairSystemMessages.class
+com\repair\common\utils\DelayedUtils$1.class
 com\repair\mapper\RepairSystemMessagesMapper.class
 com\repair\model\vo\RepairArticleTypeTreeVo$RepairArticleTypeTreeVoBuilder.class
 com\repair\controller\RepairTrackRecordController.class
@@ -180,6 +200,7 @@ com\repair\api\RepairConsumablesControllerAPI.class
 com\repair\config\WxOpenidConfig.class
 com\repair\common\utils\TimeExchange.class
 com\repair\controller\RepairTransferRecordController.class
+com\repair\model\enumModel\eTechnicianStatu.class
 com\repair\services\RepairArticleTypeService.class
 com\repair\model\enumModel\eIsSuper.class
 com\repair\api\RepairAreaControllerAPI.class
@@ -194,15 +215,18 @@ com\repair\model\enumModel\eWeekStatu.class
 com\repair\services\impl\RepairTransferRecordServiceImpl.class
 com\repair\services\RepairSystemSettingService.class
 com\repair\model\pojo\RepairSystemSetting.class
+com\repair\mapper\WxAccessTokenMapper.class
 com\repair\model\vo\ClassSettingDateVo.class
 com\repair\model\vo\ClassesSettingPageDataVo.class
 com\repair\api\RepairLeaveMessageControllerAPI.class
 com\repair\api\RepairUserControllerAPI.class
 com\repair\config\MyBatisPlusConfig.class
 com\repair\mapper\RepairWorkTypeMapper.class
+com\repair\model\request\repairLeaveMessageRequest.class
 com\repair\services\impl\RepairAreaServiceImpl.class
 com\repair\services\impl\RepairPayRecordServiceImpl.class
 com\repair\model\request\updateRepairShiftRequest.class
+com\repair\model\vo\UserDataVo.class
 com\repair\services\RepairEvaluateService.class
 com\repair\model\pojo\RepairShiftSettings.class
 com\repair\model\vo\RepairRecordCountVo.class
@@ -216,6 +240,7 @@ com\repair\model\vo\SystemMenuVo.class
 com\repair\mapper\RepairTransferRecordMapper.class
 com\repair\common\utils\smsUtil.class
 com\repair\annotation\UserLoginCheck.class
+com\repair\common\utils\DelayedUtils.class
 com\repair\controller\RepairUserController.class
 com\repair\model\request\updateRepairConsumeRequest.class
 com\repair\controller\RepairShiftSettingsController.class
@@ -241,5 +266,6 @@ com\repair\model\request\insertRepairShiftSettingRequest.class
 com\repair\services\RepairConsumablesService.class
 com\repair\model\request\changePasswordRequest.class
 com\repair\model\enumModel\eSchool.class
+com\repair\model\vo\CollaborateRecordVo.class
 com\repair\model\pojo\RepairReceiving.class
 com\repair\model\result\Wx_user.class

+ 23 - 0
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -12,6 +12,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairArea.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\aop\LoginCheckAspect.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairSystemSetting.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\WxAccessTokenController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\SendSms.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairReceivingController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\PageUtils.java
@@ -31,6 +32,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\insertRepairConsumeRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairDispatchRecord.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\changePasswordRequest.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\CollaborateRecordVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairConsumeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairWorkTypeServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairNoticeSettingControllerAPI.java
@@ -43,6 +45,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairSystemMessagesMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairTrackRecordService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ClassSettingDateVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairCardNumberVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\UnitTimeHelpModel.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\annotation\PassToken.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\JWTUtil.java
@@ -56,34 +59,45 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairWorkTypeController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\updateRepairConsumeRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\NoticeVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\WxAccessTokenServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairNoticeSettingService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\config\SmsConfig.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairLogisticsVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairUserController.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\WeiXiaoUtil.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairSystemSettingService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairPayRecordControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairLeaveMessage.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\result\Code.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\shiftSettingVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\annotation\ControllerIsShow.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairLeaveMessageController.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eUserStatu.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\wxLoginVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairRecordMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairSystemSettingServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairRecordControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairShiftSettingsServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairConsumeService.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\pendingOrderVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ClassesSettingPageVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ConsumablePageVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairRecordService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairConsumablesController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\result\ResponseStatusEnum.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\MaintenanceTechnicianVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairRefundRecordControllerAPI.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\repairLeaveMessageRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairReceivingMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairSystemSettingControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairArticleType.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairConsumablesService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\MimeTypeUtils.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eTechnicianStatu.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairReceiving.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairAreaControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\SystemMenuVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\WxAccessTokenService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairSchoolControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairSchoolController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairAdminService.java
@@ -120,6 +134,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairRefundRecordService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairAreaTreeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\UploadFileVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\WxAccessToken.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairSystemMessagesService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\SystemMenuTreeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairSystemMessagesServiceImpl.java
@@ -130,11 +145,14 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairClassesSettings.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairNoticeSettingServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\CommonResult.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\UserDataVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\updateRepairClassesRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairTrackRecordServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eWeekStatu.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairManageCountVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairSchool.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\ExcelUtils.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\timeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairConsumablesServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\updateRepairAdminRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\LoginControllerAPI.java
@@ -182,12 +200,14 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairUserMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairUserServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\LoginVo.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairTechnicianVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairArticleTypeController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\core\JwtlnterceptorConfig.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\TimeExchange.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairUserService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\exception\EmsExceptionHandler.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\core\SwaggerConfiguration.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\ConsumableExcelVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairClassesSettingsController.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eIsTop.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairAdminMapper.java
@@ -195,6 +215,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\result\Wx_user.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairReceivingServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\handler\MyMetaObjectHandler.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\common\utils\DelayedUtils.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\enumModel\eUserZZ.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\RepairAreaMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairEvaluateService.java
@@ -209,6 +230,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairLeaveMessageControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairWorkTypeService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\updateRepairAreaRequest.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairRecordPageVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\impl\RepairClassesSettingsServiceImpl.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\pojo\RepairTransferRecord.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\controller\RepairShiftSettingsController.java
@@ -224,6 +246,7 @@ D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repa
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairDispatchRecordService.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\vo\RepairArticleTypeTreeVo.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairCollaborateRecordService.java
+D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\mapper\WxAccessTokenMapper.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\api\RepairAdminControllerAPI.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\model\request\queryAccountPageRequest.java
 D:\Bingo\Desktop\工作内容\报修系统\repair_backend\src\main\java\com\repair\services\RepairPayRecordService.java

BIN
target/repair_system-0.0.1-SNAPSHOT.jar.original