Browse Source

fix:每月循环委托生成逻辑修改

ly 10 months ago
parent
commit
7751ddc59d

+ 68 - 32
src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderCurrentController.java

@@ -1,7 +1,9 @@
 package cn.ezhizao.project.business.workOrder.controller;
 
 import cn.ezhizao.common.exception.ServiceException;
+import cn.ezhizao.common.utils.DateUtils;
 import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.common.utils.uuid.SnowflakeIdWorker;
 import cn.ezhizao.fegin.FilterRequest;
 import cn.ezhizao.fegin.IFeignClient;
 import cn.ezhizao.framework.aspectj.lang.annotation.Anonymous;
@@ -45,6 +47,7 @@ import java.sql.Date;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.Month;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
@@ -74,7 +77,8 @@ public class WorkOrderCurrentController extends BaseController {
 
     @Resource
     private IFeignClient entrustFeignClient;
-
+    @Resource
+    SnowflakeIdWorker snowflakeIdWorker;
 
     @Resource
     private IBizEntrustExamineService entrustExamineService;
@@ -671,7 +675,9 @@ public class WorkOrderCurrentController extends BaseController {
         newNextMonth.setType(1);
 
         // 获取上月的委托
-        List<BizEntrust> entrusts = bizEntrustService.query().eq("tenant_id", getTenantId()).eq("work_month", nextMonthDate.toSqlDate()).list();
+        List<BizEntrust> entrusts = bizEntrustService.query()
+                .eq("tenant_id", getTenantId()).
+                eq("work_month", nextMonthDate.toSqlDate()).list();
         List<BizEntrust> entr = new ArrayList<>(entrusts);
         //将到截至月的委托去掉
         for (BizEntrust b : entr) {
@@ -710,54 +716,84 @@ public class WorkOrderCurrentController extends BaseController {
     @Anonymous
     @Transactional(rollbackFor = Exception.class)
     public void transNextTask(@RequestBody List<Tenant> storeList) {
+
         for (Tenant tenant : storeList) {
+            List<BizEntrust> bizEntrustList = null;
+            List<BizEntrust> entrusts = new ArrayList<>();
             Long tenantId = tenant.getId();
             // 将本月改为上一月,将下月改成本月,添加新月
-            List<SysCurrentMonth> months = sysCurrentMonthService.query().eq("tenant_id", tenantId).ge("type", 0).list();
-            SysCurrentMonth currentMonth = months.stream().filter(v -> v.getType().equals(0)).findFirst().orElse(new SysCurrentMonth());
+            List<SysCurrentMonth> months = sysCurrentMonthService.query()
+                    .eq("tenant_id", tenantId)
+                    .ge("type", 0).list();
+
+            // 当前月
+            SysCurrentMonth currentMonth = months.stream()
+                    .filter(v -> v.getType().equals(0)).findFirst()
+                    .orElse(new SysCurrentMonth());
             if (currentMonth.getId() == null) {
 //                throw new ServiceException("未设定本月");
                 continue;
             }
-            SysCurrentMonth nextMonth = months.stream().filter(v -> v.getType().equals(1)).findFirst().orElse(new SysCurrentMonth());
-            SysCurrentMonth newNextMonth = new SysCurrentMonth();
+
+            // 下个月
+            SysCurrentMonth nextMonth = months.stream()
+                    .filter(v -> v.getType().equals(1))
+                    .findFirst()
+                    .orElse(new SysCurrentMonth());
             currentMonth.setType(-1);
             nextMonth.setType(0);
+
+            // 下下个月
+            SysCurrentMonth newNextMonth = new SysCurrentMonth();
             DateTime nextMonthDate = DateTime.of(nextMonth.getYear() + nextMonth.getMonth() + "01", "yyyyMMdd");
             newNextMonth.setMonth(nextMonthDate.offsetNew(DateField.MONTH, 1).toString("MM"));
             newNextMonth.setYear(nextMonthDate.offsetNew(DateField.MONTH, 1).toString("yyyy"));
             newNextMonth.setTenantId(tenantId);
             newNextMonth.setType(1);
 
-            // 获取上月的委托
-            List<BizEntrust> entrusts = bizEntrustService.query().eq("tenant_id", tenantId).eq("work_month", nextMonthDate.toSqlDate()).list();
-            List<BizEntrust> entr = new ArrayList<>(entrusts);
-            //将到截至月的委托去掉
-            for (BizEntrust b : entr) {
-                List<BizWorkOrder> workOrder = bizWorkOrderService.query().eq("id", b.getWorkOrderId()).list();
-
-                Calendar calendar = Calendar.getInstance();
-                // 设置年份
-                calendar.set(Calendar.YEAR, Integer.parseInt(months.get(0).getYear()));
-                // 设置月份为(注意:月份是从0开始的,所以要减1)
-                calendar.set(Calendar.MONTH, Integer.parseInt(months.get(0).getMonth()) - 1);
-                // 设置日期
-                calendar.set(Calendar.DAY_OF_MONTH, 1);
-                Date currentMonthDate = new java.sql.Date(calendar.getTime().getTime());
-                if (!workOrder.isEmpty()) {
-                    if (workOrder.get(0).getIsStop() == 1 || (currentMonthDate == workOrder.get(0).getEndMonth())) {
-                        entrusts.removeIf(s -> s.getWorkOrderId().equals(b.getWorkOrderId()));
+            // 当前月时间
+            DateTime currentDateTime = DateTime.of(currentMonth.getYear() + currentMonth.getMonth() + "01", "yyyyMMdd");
+
+            // 下个月时间
+            DateTime nextMonthDateTime = DateTime.of(nextMonth.getYear() + nextMonth.getMonth() + "01", "yyyyMMdd");
+
+            // 生成月
+            DateTime generateDateTime = nextMonthDateTime.offsetNew(DateField.MONTH, 1);
+
+            //获取本账套下所有的下月工单
+            BizWorkOrder bizWorkOrder = new BizWorkOrder();
+            bizWorkOrder.setTenantId(tenantId);
+            bizWorkOrder.setIsStop(0);
+            bizWorkOrder.setType(1);
+            bizWorkOrder.setNoContract(0);
+            bizWorkOrder.setWorkDate(generateDateTime);
+            List<BizWorkOrder> workOrderList = bizWorkOrderService.getList(bizWorkOrder);
+            BizEntrust bizEntrust = null;
+            for(BizWorkOrder workOrder :workOrderList){
+                //判断待生成月份(newNextMonth)是否在委托表有数据
+                bizEntrustList = bizEntrustService.lambdaQuery()
+                        .eq(BizEntrust::getWorkMonth, generateDateTime)
+                        .eq(BizEntrust::getTenantId,tenantId)
+                        .eq(BizEntrust::getWorkOrderId,workOrder.getId())
+                        .list();
+                if (bizEntrustList.isEmpty()) {
+                    //判断生成的当前时间(本月生成次月)段是否存在委托
+                    bizEntrustList = bizEntrustService.lambdaQuery()
+                            .eq(BizEntrust::getWorkOrderId,workOrder.getId())
+                            .eq(BizEntrust::getWorkMonth, nextMonthDateTime)
+                            .eq(BizEntrust::getTenantId,tenantId)
+                            .list();
+                    //如果存在委托那么取本月委托数据复制到下一个月
+                    if(!bizEntrustList.isEmpty()){
+                        bizEntrust = bizEntrustList.get(0);
+                        bizEntrust.setId(snowflakeIdWorker.nextId());
+                        System.out.println(bizEntrust.getId());
+                        bizEntrust.setCurrentMonth(new Date(DateUtils.addMonths(bizEntrust.getCurrentMonth(), 1).getTime()));
+                        bizEntrust.setWorkMonth(new Date(DateUtils.addMonths(bizEntrust.getWorkMonth(), 1).getTime()));
+                        entrusts.add(bizEntrust);
                     }
                 }
             }
-            entrusts.forEach(l -> {
-                DateTime currentWorkMonth = DateTime.of(l.getWorkMonth());
-                DateTime currentMonthDate = DateTime.of(l.getCurrentMonth());
-                l.setWorkMonth(currentWorkMonth.offsetNew(DateField.MONTH, 1).toSqlDate());
-                l.setCurrentMonth(currentMonthDate.offsetNew(DateField.MONTH, 1).toSqlDate());
-                l.setId(null);
-            });
-
             toAjax(
                     (currentMonth.getId() == null || sysCurrentMonthService.updateById(currentMonth)) &&
                             (nextMonth.getId() == null || sysCurrentMonthService.updateById(nextMonth)) &&