From 39e8f9e0f8243d86c2972477bc5b4105330a5530 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期四, 26 十二月 2024 16:21:53 +0800
Subject: [PATCH] 计划超期更新

---
 business/src/main/resources/mapper/PlanMapper.xml                   |    2 
 business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java     |    3 +
 business/src/main/java/com/ycl/domain/vo/ProjectPlanResponseVO.java |    1 
 business/src/main/java/com/ycl/domain/entity/Plan.java              |    4 +
 business/src/main/java/com/ycl/domain/entity/ProjectInfo.java       |    4 +
 business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java    |  140 ++++++++++++++++++++++++++++++++++++++++++++++
 business/src/main/java/com/ycl/domain/form/PlanForm.java            |    4 +
 business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java         |    3 +
 8 files changed, 160 insertions(+), 1 deletions(-)

diff --git a/business/src/main/java/com/ycl/domain/entity/Plan.java b/business/src/main/java/com/ycl/domain/entity/Plan.java
index f0f7feb..849afdd 100644
--- a/business/src/main/java/com/ycl/domain/entity/Plan.java
+++ b/business/src/main/java/com/ycl/domain/entity/Plan.java
@@ -38,4 +38,8 @@
     @TableField("year_status")
     /** 骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛� */
     private Integer yearStatus;
+
+    @TableField("exception")
+    /** 寮傚父锛�0锛氳鍒掕秴鏈燂紝1锛氳繘搴﹁秴鏈燂級 */
+    private Integer exception;
 }
diff --git a/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java b/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
index ce65b79..2b74065 100644
--- a/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
+++ b/business/src/main/java/com/ycl/domain/entity/ProjectInfo.java
@@ -144,4 +144,8 @@
     @TableField("used_status")
     /** 浣跨敤鐘舵�侊紙0锛氳崏绋匡紝1锛氭彁浜�,2:瀹℃牳閫氳繃锛�-1锛氶┏鍥烇級 */
     private Integer usedStatus;
+
+    @TableField("coding")
+    /** 缂栫爜 */
+    private String coding;
 }
diff --git a/business/src/main/java/com/ycl/domain/form/PlanForm.java b/business/src/main/java/com/ycl/domain/form/PlanForm.java
index 1c79ee4..caf47aa 100644
--- a/business/src/main/java/com/ycl/domain/form/PlanForm.java
+++ b/business/src/main/java/com/ycl/domain/form/PlanForm.java
@@ -44,6 +44,10 @@
     @ApiModelProperty("骞村害锛�0锛氬凡涓婃姤锛�1锛氭湭涓婃姤锛�")
     private Integer yearStatus;
 
+    @NotNull(message = "寮傚父闂锛�0锛氳鍒掕秴鏈燂紝1锛氳繘搴﹁秴鏈燂級涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("寮傚父闂锛�0锛氳鍒掕秴鏈燂紝1锛氳繘搴﹁秴鏈燂級")
+    private Integer exception;
+
     @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
     @ApiModelProperty("鍒涘缓鏃堕棿")
     private Date gmtCreateTime;
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java b/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
index ac5a053..c540050 100644
--- a/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
+++ b/business/src/main/java/com/ycl/domain/form/ProjectInfoForm.java
@@ -124,6 +124,9 @@
     @ApiModelProperty("浣跨敤鐘舵��")
     private Integer usedStatus;
 
+    @ApiModelProperty("璧嬬爜")
+    private String coding;
+
     public static ProjectInfo getEntityByForm(@NonNull ProjectInfoForm form, ProjectInfo entity) {
         if(entity == null) {
           entity = new ProjectInfo();
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
index 1f73b75..f1da1e0 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectInfoVO.java
@@ -157,6 +157,9 @@
     @ApiModelProperty("鐘舵�佺爜")
     private String projectColorCode;
 
+    @ApiModelProperty("璧嬬爜")
+    private String coding;
+
     @ApiModelProperty("鏂囦欢")
     private List<File> fileList;
     private Long processId;
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectPlanResponseVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectPlanResponseVO.java
index 038caec..21a51d1 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectPlanResponseVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectPlanResponseVO.java
@@ -20,4 +20,5 @@
     private String projectStatus;
     private String investType;
     private String projectColorCode;
+    private Integer exception;
 }
diff --git a/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java b/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java
index 5b307f2..b091217 100644
--- a/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/PlanServiceImpl.java
@@ -1,13 +1,19 @@
 package com.ycl.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.ycl.common.base.Result;
+import com.ycl.common.enums.business.ProjectCategoryEnum;
 import com.ycl.common.enums.business.ProjectStatusEnum;
 import com.ycl.common.enums.business.ProjectTypeEnum;
+import com.ycl.common.utils.DateUtils;
 import com.ycl.domain.entity.Plan;
+import com.ycl.domain.entity.ProjectPlanRecord;
 import com.ycl.domain.vo.ProjectPlanResponseVO;
+import com.ycl.domain.vo.ProjetPlanRecordItem;
 import com.ycl.framework.utils.PageUtil;
 import com.ycl.mapper.PlanMapper;
+import com.ycl.mapper.ProjectPlanRecordMapper;
 import com.ycl.service.PlanService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.domain.form.PlanForm;
@@ -18,7 +24,10 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.Assert;
 
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -32,6 +41,12 @@
 public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements PlanService {
 
     private final PlanMapper planMapper;
+    private final ProjectPlanRecordServiceImpl projectPlanRecordServiceImpl;
+    private final ProjectPlanRecordMapper projectPlanRecordMapper;
+
+    private static final Integer MONTH_FLAG = 0;
+    private static final Integer SEASON_FLAG = 1;
+    private static final Integer YEAR_FLAG = 2;
 
     /**
      * 娣诲姞
@@ -99,10 +114,133 @@
             record.setProjectStatus(ProjectStatusEnum.getDescByType(record.getProjectStatus()));
             record.setProjectColorCode("green");
         }
-
+        updateException(records);
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
+    // 瀵规煡璇㈠悗鐨勭粨鏋滆繘琛屽紓甯搁棶棰樻洿鏂�
+    public void updateException(List<ProjectPlanResponseVO> records) {
+        records.forEach(record -> {
+            if (null != record.getProjectPhase() && record.getProjectPhase().equals(ProjectCategoryEnum.IMPLEMENT.getDesc())){ // 瀹炴柦闃舵
+                List<ProjetPlanRecordItem> month = projectPlanRecordMapper.selectPlanList(record.getId(), MONTH_FLAG);
+                List<ProjetPlanRecordItem> season = projectPlanRecordMapper.selectPlanList(record.getId(), SEASON_FLAG);
+                List<ProjetPlanRecordItem> year = projectPlanRecordMapper.selectPlanList(record.getId(), YEAR_FLAG);
+
+                Date now = DateUtils.getNowDate();
+                Calendar calendar = Calendar.getInstance();
+                // 鏈堝害鍒ゆ柇
+                if (month.size() > 0) {
+                    Integer planMonth = month.get(month.size() - 1).getPlanTime();
+                    calendar.setTime(now);
+                    calendar.add(Calendar.DAY_OF_MONTH, 3);
+                    int monthAfterThreeDays = calendar.get(Calendar.MONTH) + 1;
+
+                    if ((planMonth < 12 && planMonth < monthAfterThreeDays)) {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }else if((planMonth == 12 && monthAfterThreeDays == 1)){
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    } else {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, null)
+                                .update();
+                    }
+                }else {
+                    new LambdaUpdateChainWrapper<>(planMapper)
+                            .eq(Plan::getProjectInfoId, record.getId())
+                            .set(Plan::getException, 0)
+                            .update();
+                }
+
+                if (season.size() > 0) {
+                    // 瀛e害鍒ゆ柇
+                    int seasonNum =season.get(season.size() - 1).getPlanTime();
+                    Date createTime = season.get(0).getCreateTime();
+                    calendar.setTime(createTime);
+                    calendar.add(Calendar.MONTH, seasonNum * 3);
+                    Date createTimeAfterMonths = calendar.getTime();
+                    // 璁$畻涓や釜鏃ユ湡涔嬮棿鐨勫樊鍊硷紝鍗曚綅涓烘绉�
+                    long diffInMillies = createTimeAfterMonths.getTime() - now.getTime();
+                    // 灏嗗樊鍊艰浆鎹负澶╂暟
+                    long diffInDays = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
+                    if (diffInDays < 3) {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }else {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, null)
+                                .update();
+                    }
+                }else {
+                    new LambdaUpdateChainWrapper<>(planMapper)
+                            .eq(Plan::getProjectInfoId, record.getId())
+                            .set(Plan::getException, 0)
+                            .update();
+                }
+
+                if (year.size() > 0) {
+                    // 骞村害鍒ゆ柇
+                    Integer planYear = year.get(year.size() - 1).getPlanTime();
+                    calendar.setTime(now);
+                    calendar.add(Calendar.DAY_OF_YEAR, 3); // 娣诲姞3澶�
+                    int planYearAfter3Days = calendar.get(Calendar.YEAR);
+                    if (planYearAfter3Days > planYear) {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }else {
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, null)
+                                .update();
+                    }
+                }else {
+                    new LambdaUpdateChainWrapper<>(planMapper)
+                            .eq(Plan::getProjectInfoId, record.getId())
+                            .set(Plan::getException, 0)
+                            .update();
+                }
+
+                month.forEach(item -> {
+                    if (item.getReportStatus() == 1) { // 鏈笂鎶�
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }
+                });
+                season.forEach(item -> {
+                    if (item.getReportStatus() == 1) { // 鏈笂鎶�
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }
+                });
+                year.forEach(item -> {
+                    if (item.getReportStatus() == 1) { // 鏈笂鎶�
+                        new LambdaUpdateChainWrapper<>(planMapper)
+                                .eq(Plan::getProjectInfoId, record.getId())
+                                .set(Plan::getException, 0)
+                                .update();
+                    }
+                });
+
+
+            }
+        });
+    }
+
     /**
      * 鏍规嵁id鏌ユ壘
      * @param id
diff --git a/business/src/main/resources/mapper/PlanMapper.xml b/business/src/main/resources/mapper/PlanMapper.xml
index 85d57c7..0b433f7 100644
--- a/business/src/main/resources/mapper/PlanMapper.xml
+++ b/business/src/main/resources/mapper/PlanMapper.xml
@@ -26,6 +26,7 @@
         <result property="yearStatus" column="year_status" />
         <result property="projectStatus" column="project_status" />
         <result property="investType" column="invest_type" />
+        <result property="exception" column="exception" />
     </resultMap>
 
 
@@ -57,6 +58,7 @@
             p.month_status,
             p.season_status,
             p.year_status,
+            p.exception,
             pi.project_status,
             pi.invest_type
         FROM t_project_info AS pi

--
Gitblit v1.8.0