浏览代码

委托时系统将生成当月及下月数据(2条数据),如果在起始月+结束月不足2个月时创建委托,会多生成1条数据导致错误。

rainwer 7 月之前
父节点
当前提交
62452791d4

+ 55 - 28
src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderCurrentController.java

@@ -85,6 +85,9 @@ public class WorkOrderCurrentController extends BaseController {
     private IBizEntrustExamineService entrustExamineService;
     @Resource
     private IBizArchiveInputService bizArchiveInputService;
+    @Resource
+    private IBizWorkOrderService workOrderService;
+
     /**
      * 查询工单信息列表
      */
@@ -206,23 +209,40 @@ public class WorkOrderCurrentController extends BaseController {
         // 添加本月
         boolean status = addEntrust(entrust.getWorkOrderIds(), entrust.getWorkMonth(), entrust.getToTenantId());
         //如果下月工单没有被修改则可以委托
-        // 添加下一月
+        // 判断合同下月是否结束了
         DateTime currentMonth = DateTime.of(entrust.getWorkMonth());
+        DateTime nextMonth = currentMonth.offset(DateField.MONTH, 1);
+
+        BizWorkOrder bizWorkOrder = new BizWorkOrder();
+        bizWorkOrder.setIds(entrust.getWorkOrderIds());
+        List<BizWorkOrder> workOrderList = workOrderService.getList(bizWorkOrder);
+
+        List<Long> filterWorkOrderIds = workOrderList.stream().filter(w -> {
+            if (Objects.isNull(w.getEndMonth())) {
+                return true;
+            }
+            return nextMonth.isBeforeOrEquals(w.getEndMonth());
+        }).map(BizWorkOrder::getId).collect(Collectors.toList());
+
+        if(CollectionUtils.isEmpty(filterWorkOrderIds)) {
+            return toAjax(status);
+        }
+        // 添加下一月
         List<Long> notNeedWorkIds = null;
         List<BizEntrust> list = bizEntrustService.list(new LambdaQueryWrapper<BizEntrust>()
                 .eq(BizEntrust::getDeleted, 0)
-                .eq(BizEntrust::getWorkMonth, currentMonth.offset(DateField.MONTH, 1).toSqlDate())
-                .in(BizEntrust::getWorkOrderId, entrust.getWorkOrderIds()));
+                .eq(BizEntrust::getWorkMonth, nextMonth.toSqlDate())
+                .in(BizEntrust::getWorkOrderId, filterWorkOrderIds));
 
         notNeedWorkIds = list.stream().filter(l ->
-                    {
-                        Long updaterId = l.getCreatorId();
-                        SysUser sysUser = userService.selectUserById(Long.valueOf(updaterId));
-                        return sysUser != null ? true : false;
-                    }
-            ).map(l -> l.getWorkOrderId()).collect(Collectors.toList());
+                {
+                    Long updaterId = l.getCreatorId();
+                    SysUser sysUser = userService.selectUserById(Long.valueOf(updaterId));
+                    return sysUser != null ? true : false;
+                }
+        ).map(l -> l.getWorkOrderId()).collect(Collectors.toList());
         List<Long> finalNotNeedWorkIds = notNeedWorkIds;
-        List<Long> needWorkIds = entrust.getWorkOrderIds().stream().filter(l -> !finalNotNeedWorkIds.contains(l)).collect(Collectors.toList());
+        List<Long> needWorkIds = filterWorkOrderIds.stream().filter(l -> !finalNotNeedWorkIds.contains(l)).collect(Collectors.toList());
 
         status = status && addEntrust(needWorkIds, currentMonth.toSqlDate(), entrust.getToTenantId());
         // 添加委托
@@ -472,6 +492,9 @@ public class WorkOrderCurrentController extends BaseController {
     }
 
     private boolean addEntrust(List<Long> workOrderId, Date paramWorkMonth, Long toTenantId) {
+        if(CollectionUtils.isEmpty(workOrderId)) {
+            return true;
+        }
         BizEntrust entrust = new BizEntrust();
         entrust.setWorkOrderIds(workOrderId);
         entrust.setWorkMonth(paramWorkMonth);
@@ -510,6 +533,7 @@ public class WorkOrderCurrentController extends BaseController {
         // 保存
         return (entrustList.isEmpty() || bizEntrustService.updateBatchById(entrustList)) && (addEntrusts.isEmpty() || bizEntrustService.saveBatch(addEntrusts));
     }
+
     @PostMapping("/saveExamine")
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult saveExamine(@RequestBody BizEntrustExamine entrustExamine) {
@@ -527,14 +551,15 @@ public class WorkOrderCurrentController extends BaseController {
             bizEntrustExamine.setEntrustCome(entrustList.get(0).getFromTenantId());
             bizEntrustExamine.setCancelReason(entrustExamine.getCancelReason());
             bizEntrustExamine.setStatus(0);
-           if (entrustExamine.getNextFlag() != null && entrustExamine.getNextFlag() == 1){
-               bizEntrustExamine.setNextFlag(1);
-           }
+            if (entrustExamine.getNextFlag() != null && entrustExamine.getNextFlag() == 1) {
+                bizEntrustExamine.setNextFlag(1);
+            }
             return bizEntrustExamine;
         }).collect(Collectors.toList());
         entrustExamineService.saveBatch(entrustExamineList);
         return AjaxResult.success();
     }
+
     @Transactional(rollbackFor = Exception.class)
     @PostMapping("/delEntrust")
     public AjaxResult delEntrust(@RequestBody BizEntrust bizEntrust) {
@@ -543,29 +568,29 @@ public class WorkOrderCurrentController extends BaseController {
             BizEntrustExamine one = entrustExamineService.getOne(new LambdaQueryWrapper<BizEntrustExamine>()
                     .eq(BizEntrustExamine::getWorkOrderId, id)
                     .orderByDesc(BizEntrustExamine::getCreateTime).last("limit 1"));
-            if(one!= null && one.getStatus().equals(0)){
+            if (one != null && one.getStatus().equals(0)) {
                 String name = bizCompanyService.getById(one.getCompanyId()).getName();
-                throw new RuntimeException(name+"工单正在取消委托审核中");
+                throw new RuntimeException(name + "工单正在取消委托审核中");
             }
         }
         FilterRequest filterRequest = new FilterRequest();
         filterRequest.setDate(bizEntrust.getWorkMonth());
         filterRequest.setWorkOrderIds(workOrderIds1);
-        String s =  entrustFeignClient.filterCompletedOrders(filterRequest);
-        Map<String,List<Long>> map = JSON.parseObject(s, Map.class);
+        String s = entrustFeignClient.filterCompletedOrders(filterRequest);
+        Map<String, List<Long>> map = JSON.parseObject(s, Map.class);
         List<Long> workOrderIds = map.get("workOrderIds");
         List<Long> oneList = map.get("oneList");
         List<Long> twoList = map.get("twoList");
         List<Long> threeList = map.get("threeList");
-        boolean status= false;
+        boolean status = false;
         List<Long> finishWorkIds = mergeLists(oneList, twoList, threeList);
 
-        if (!CollectionUtils.isEmpty(workOrderIds)){
+        if (!CollectionUtils.isEmpty(workOrderIds)) {
             bizEntrust.setWorkOrderIds(workOrderIds);
-             status = isStatus(bizEntrust);
+            status = isStatus(bizEntrust);
         }
         //说明当前状态工单任务都处于未完成
-        if( CollectionUtils.isEmpty(finishWorkIds) ){
+        if (CollectionUtils.isEmpty(finishWorkIds)) {
             // 取消委托
             return toAjax(status);
         }
@@ -577,7 +602,7 @@ public class WorkOrderCurrentController extends BaseController {
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("companyName", companyName);
         hashMap.put("workOrderIds", finishWorkIds);
-        return AjaxResult.success("操作成功",hashMap);
+        return AjaxResult.success("操作成功", hashMap);
     }
 
     @PostMapping("/okDelEntrust")
@@ -627,6 +652,7 @@ public class WorkOrderCurrentController extends BaseController {
         }
         return result;
     }
+
     private boolean isStatus(BizEntrust bizEntrust) {
         List<BizEntrust> entrustList = bizEntrustService.getList(bizEntrust);
         DateTime currentMonth = DateTime.of(bizEntrust.getWorkMonth());
@@ -772,22 +798,22 @@ public class WorkOrderCurrentController extends BaseController {
             bizWorkOrder.setCurrentMonth(generateDateTime);
             List<BizWorkOrder> workOrderList = bizWorkOrderService.getList(bizWorkOrder);
             BizEntrust bizEntrust = null;
-            for(BizWorkOrder workOrder :workOrderList){
+            for (BizWorkOrder workOrder : workOrderList) {
                 //判断待生成月份(newNextMonth)是否在委托表有数据
                 bizEntrustList = bizEntrustService.lambdaQuery()
                         .eq(BizEntrust::getWorkMonth, generateDateTime)
-                        .eq(BizEntrust::getTenantId,tenantId)
-                        .eq(BizEntrust::getWorkOrderId,workOrder.getId())
+                        .eq(BizEntrust::getTenantId, tenantId)
+                        .eq(BizEntrust::getWorkOrderId, workOrder.getId())
                         .list();
                 if (bizEntrustList.isEmpty()) {
                     //判断生成的当前时间(本月生成次月)段是否存在委托
                     bizEntrustList = bizEntrustService.lambdaQuery()
-                            .eq(BizEntrust::getWorkOrderId,workOrder.getId())
+                            .eq(BizEntrust::getWorkOrderId, workOrder.getId())
                             .eq(BizEntrust::getWorkMonth, nextMonthDateTime)
-                            .eq(BizEntrust::getTenantId,tenantId)
+                            .eq(BizEntrust::getTenantId, tenantId)
                             .list();
                     //如果存在委托那么取本月委托数据复制到下一个月
-                    if(!bizEntrustList.isEmpty()){
+                    if (!bizEntrustList.isEmpty()) {
                         bizEntrust = bizEntrustList.get(0);
                         bizEntrust.setId(snowflakeIdWorker.nextId());
                         System.out.println(bizEntrust.getId());
@@ -966,6 +992,7 @@ public class WorkOrderCurrentController extends BaseController {
         List<Tenant> tenants = tenantService.getFactoriesId(getTenantId());
         return success(tenants);
     }
+
     @PreAuthorize("@ss.hasAnyPermi('business:entrust:workOrder:base:edit')")
     @RequestMapping("stopWorkOrder")
     public void stopWorkOrder(@RequestBody List<BizWorkOrder> workOrderList) {

+ 1 - 1
src/main/resources/mybatis/business/BizWorkOrderMapper.xml

@@ -111,7 +111,7 @@
                 (case when t1.task_type_id
                 = 1 then DATE_ADD(t1.start_month,interval 1 month) else t1.start_month end) and
                 DATE_FORMAT(#{currentMonth}, '%Y-%m-%d') &lt;=
-                (case when t1.is_continue=1 then #{currentMonth} when t1.end_month = 0 then DATE_FORMAT(#{currentMonth},
+                (case when t1.is_continue=1 and t1.end_month != 0 then t1.end_month when t1.end_month = 0 then DATE_FORMAT(#{currentMonth},
                 '%Y-%m-%d') when t1.task_type_id = 1 then
                 DATE_ADD(t1.end_month,interval 1 month) else t1.end_month end)
             </if>