Переглянути джерело

1.修复资产编辑订单基本信息时,如果没有终端客户信息报错
2.个贷撰写节点提交时设置产品完成时间
3.个贷审核节点退回到撰写节点时清空产品完成时间
4.修复资产我的订单-报告号模糊查询无法筛选同步数据

GouGengquan 5 місяців тому
батько
коміт
f041139af6

+ 1 - 1
dao/src/main/resources/mapper/AssetsMapper.xml

@@ -288,7 +288,7 @@
             assets.order_id LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%') OR
             assets.name LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%') OR
             nodeInfo.business_sub_id LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%') OR
-            nodeInfo.business_min_id LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%') OR
+            reportInfo.production_no LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%') OR
             customer.name LIKE CONCAT('%',#{assetsSelectDTO.keyWord},'%')
             )
         </if>

Різницю між файлами не показано, бо вона завелика
+ 35 - 29
dao/src/main/resources/mapper/PersonalStatisticalStatementMapper.xml


+ 22 - 0
domain/src/main/java/com/dayou/dto/PersonalStatisticalSelectDTO.java

@@ -40,4 +40,26 @@ public class PersonalStatisticalSelectDTO {
      */
     private Long inwardStaff;
 
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 客户经理id
+     */
+    private Long clientManagerId;
+
+    /**
+     * 出具产品时间筛选开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date productionTimeStart;
+
+    /**
+     * 出具产品时间筛选结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date productionTimeEnd;
+
 }

+ 2 - 2
service/src/main/java/com/dayou/service/impl/AssetsServiceImpl.java

@@ -275,11 +275,11 @@ public class AssetsServiceImpl extends ServiceImpl<AssetsMapper, Assets> impleme
 
     @Override
     public Boolean update(Assets assets) {
-        if (assets.getClienteleType().equals("个人")) {
+        if (ObjectUtil.isNotNull(assets.getClienteleType()) && assets.getClienteleType().equals("个人")) {
             assets.setClienteleId(null);
             assets.setClienteleSubId(null);
         }
-        if (assets.getTerminalClienteleType().equals("个人")) {
+        if (ObjectUtil.isNotNull(assets.getTerminalClienteleType()) && assets.getTerminalClienteleType().equals("个人")) {
             assets.setTerminalClienteleId(null);
         }
         return this.updateById(assets);

+ 49 - 25
service/src/main/java/com/dayou/service/impl/PersonalStatisticalStatementServiceImpl.java

@@ -177,34 +177,58 @@ public class PersonalStatisticalStatementServiceImpl implements IPersonalStatist
      */
     public List<PersonalEfficiencyDetailVO> setPurpose(List<PersonalEfficiencyDetailVO> detailVOList){
         for (PersonalEfficiencyDetailVO efficiencyVO : detailVOList){
-            JSONArray jsonArray = JSONArray.parseArray(efficiencyVO.getPurpose());
-            List<String> purposeCodeList = jsonArray.toJavaList(String.class);
-            StringBuilder purpose = new StringBuilder();
-            int index = 0;
-            for (String purposeCode : purposeCodeList){
-                switch (purposeCode) {
-                    case "HOUSE":
-                        purpose.append("住宅");
-                        break;
-                    case "BUSINESS":
-                        purpose.append("商业");
-                        break;
-                    case "OFFICE":
-                        purpose.append("办公");
-                        break;
-                    case "OTHER":
-                        purpose.append("工业");
-                        break;
-                    default:
-                        purpose.append("其他");
-                        break;
+            if(ObjectUtil.isNotNull(efficiencyVO.getPurpose())) {
+
+                // 有的json数组带了转义符,这里判断一下去掉
+                // 去掉第一个和最后一个反斜杠
+                String modifiedString = efficiencyVO.getPurpose();
+                if (modifiedString.startsWith("\\\\")) {
+                    modifiedString = modifiedString.substring(1);
+                }
+                if (modifiedString.endsWith("\\\\")) {
+                    modifiedString = modifiedString.substring(0, modifiedString.length() - 1);
+                }
+
+                // 去掉第一个和最后一个双引号
+                if (modifiedString.startsWith("\"")) {
+                    modifiedString = modifiedString.substring(1);
                 }
-                index++;
-                if (index < purposeCodeList.size()) {
-                    purpose.append(",");
+                if (modifiedString.endsWith("\"")) {
+                    modifiedString = modifiedString.substring(0, modifiedString.length() - 1);
+                }
+
+                efficiencyVO.setPurpose(modifiedString);
+
+
+                JSONArray jsonArray = JSONArray.parseArray(efficiencyVO.getPurpose());
+                List<String> purposeCodeList = jsonArray.toJavaList(String.class);
+                StringBuilder purpose = new StringBuilder();
+                int index = 0;
+                for (String purposeCode : purposeCodeList){
+                    switch (purposeCode) {
+                        case "HOUSE":
+                            purpose.append("住宅");
+                            break;
+                        case "BUSINESS":
+                            purpose.append("商业");
+                            break;
+                        case "OFFICE":
+                            purpose.append("办公");
+                            break;
+                        case "OTHER":
+                            purpose.append("工业");
+                            break;
+                        default:
+                            purpose.append("其他");
+                            break;
+                    }
+                    index++;
+                    if (index < purposeCodeList.size()) {
+                        purpose.append(",");
+                    }
                 }
+                efficiencyVO.setPurpose(String.valueOf(purpose));
             }
-            efficiencyVO.setPurpose(String.valueOf(purpose));
         }
         return detailVOList;
     }

+ 1 - 1
service/src/main/java/com/dayou/workflow/config/WorkNodeProcessable.java

@@ -138,7 +138,7 @@ public class WorkNodeProcessable {
         return Boolean.TRUE;
     }
 
-    private void afterForward(WorkFlowNodeInstance currentInstanceNode) {
+    public void afterForward(WorkFlowNodeInstance currentInstanceNode) {
         //终止前节点控制前置处理。
         MainBusinessEnum mainBusinessEnum = MainBusinessEnum.valueOf(currentInstanceNode.getBusinessType());
         switch (mainBusinessEnum){

+ 82 - 4
service/src/main/java/com/dayou/workflow/handler/PersonalNodeHandler.java

@@ -8,10 +8,7 @@ import com.dayou.common.BaseEntity;
 import com.dayou.dto.HandlerPermissionDTO;
 import com.dayou.dto.WorkNodeCommit;
 import com.dayou.dto.WorkNodeDTO;
-import com.dayou.entity.Department;
-import com.dayou.entity.Personal;
-import com.dayou.entity.PersonalTarget;
-import com.dayou.entity.WorkFlowNodeInstance;
+import com.dayou.entity.*;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.ProductionEnum;
 import com.dayou.enums.workflow.CallbackEnum;
@@ -21,6 +18,7 @@ import com.dayou.mapper.DepartmentMapper;
 import com.dayou.mapper.PersonalMapper;
 import com.dayou.mapper.WorkFlowNodeInstanceMapper;
 import com.dayou.service.ICustomerCompanyService;
+import com.dayou.service.IPersonalProductionService;
 import com.dayou.service.IPersonalTargetService;
 import com.dayou.service.IUserPostService;
 import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
@@ -31,11 +29,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 import static com.dayou.common.Constants.PERSONAL_DEPARTMENT;
+import static com.dayou.enums.FinanceInvoiceState.审核通过;
 import static com.dayou.enums.MainBusinessEnum.PERSONAL_BUSINESS;
+import static com.dayou.enums.ProductionEnum.*;
 import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
 
 /**
@@ -69,6 +70,9 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
     @Autowired
     private IPersonalTargetService personalTargetService;
 
+    @Autowired
+    private IPersonalProductionService personalProductionService;
+
 
     @Override
     public boolean forward(WorkNodeCommit workNodeCommit) {
@@ -121,6 +125,7 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
                 }
             }
             addNextInstanceNode(currentInstanceNode,nextWorkNode, workNodeCommit.getNextHandlerId(),workNodeCommit.getBusinessSubId(),workNodeCommit.getBusinessMinId());
+            afterForward(currentInstanceNode);
             return Boolean.TRUE;
         }
         return Boolean.FALSE;
@@ -192,6 +197,79 @@ public class PersonalNodeHandler extends WorkNodeProcessable {
             }
 
         }
+
+        // 清除产品完成时间
+        cleanProductionTime(currentNode);
+
         return super.goBack(commit);
     }
+
+    /**
+     * 节点完成后操作
+     * @param currentInstanceNode 实例信息
+     */
+    @Override
+    public void afterForward(WorkFlowNodeInstance currentInstanceNode) {
+        // 撰写节点完成后,更新产品完成时间
+        PersonalTarget target = personalTargetService.getOne(new LambdaQueryWrapper<PersonalTarget>()
+                .select(BaseEntity::getId)
+                .eq(PersonalTarget::getPersonalId, currentInstanceNode.getBusinessId())
+                .eq(PersonalTarget::getDeleted, false));
+        // 通用的更新wrapper
+        LambdaUpdateWrapper<PersonalProduction> productionTimeUpdateWrapper = new LambdaUpdateWrapper<PersonalProduction>()
+                .set(PersonalProduction::getProductionTime, new Date())
+                .eq(BaseEntity::getDeleted, false)
+                .eq(PersonalProduction::getTargetId, target.getId());
+        switch (WorkflowNodeEnum.valueOf(currentInstanceNode.getNodeCode())){
+            // 撰写意见书
+            case GENERATE_STATEMENT:
+                productionTimeUpdateWrapper.eq(PersonalProduction::getProduction, STATEMENT.getCode());
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+            // 撰写报告报告(包含技术报告和结果报告)
+            case WRITE_REPORT:
+                productionTimeUpdateWrapper.and(temp->temp.eq(PersonalProduction::getProduction,TECHNIC.getCode()).or().eq(PersonalProduction::getProduction,FINAL.getCode()));
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+            // 撰写复评函
+            case WRITE_LETTER:
+                productionTimeUpdateWrapper.eq(PersonalProduction::getProduction, LETTER.getCode());
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+        }
+    }
+
+    /**
+     * 根据节点判断是否清除产品完成时间
+     * @param currentInstanceNode 当前节点
+     */
+    public void cleanProductionTime(WorkFlowNodeInstance currentInstanceNode) {
+        // 判断是否是从审核节点退回到撰写节点,是的话需要清空产品的productionTime
+        PersonalTarget target = personalTargetService.getOne(new LambdaQueryWrapper<PersonalTarget>()
+                .select(BaseEntity::getId)
+                .eq(PersonalTarget::getPersonalId, currentInstanceNode.getBusinessId())
+                .eq(PersonalTarget::getDeleted, false));
+        // 通用的更新wrapper
+        LambdaUpdateWrapper<PersonalProduction> productionTimeUpdateWrapper = new LambdaUpdateWrapper<PersonalProduction>()
+                .set(PersonalProduction::getProductionTime, null)
+                .eq(BaseEntity::getDeleted, false)
+                .eq(PersonalProduction::getTargetId, target.getId());
+        switch (WorkflowNodeEnum.valueOf(currentInstanceNode.getNodeCode())){
+            // 审核意见书退回
+            case REVIEW_STATEMENT:
+                productionTimeUpdateWrapper.eq(PersonalProduction::getProduction, STATEMENT.getCode());
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+            // 审核报告退回
+            case CHECK_REPORT:
+                productionTimeUpdateWrapper.and(temp->temp.eq(PersonalProduction::getProduction,TECHNIC.getCode()).or().eq(PersonalProduction::getProduction,FINAL.getCode()));
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+            // 审核复评函退回
+            case CHECK_LETTER:
+                productionTimeUpdateWrapper.eq(PersonalProduction::getProduction, LETTER.getCode());
+                personalProductionService.update(productionTimeUpdateWrapper);
+                break;
+        }
+    }
 }

+ 10 - 2
sql/update_sql.sql

@@ -784,10 +784,18 @@ ALTER TABLE personal ADD KEY `idx_evaluate_aim` (`evaluate_aim`) USING BTREE;
 ALTER TABLE personal ADD KEY `idx_inward_staff` (`inward_staff`) USING BTREE;
 
 /**
-  日期:2025-02-06
+  日期:2025-02-08
   修改人:苟耕铨
   未更新到test-env
  */
 #  新增字段与索引
 ALTER TABLE `personal_production` ADD production_time datetime NULL COMMENT '产品完成时间';
-ALTER TABLE personal_production ADD KEY `idx_production_time` (`production_time`) USING BTREE;
+ALTER TABLE personal_production ADD KEY `idx_production_time` (`production_time`) USING BTREE;
+
+/**
+  日期:2025-02-08
+  修改人:苟耕铨
+  未更新到test-env
+ */
+#  新增索引
+ALTER TABLE order_fund ADD KEY `idx_created` (`created`) USING BTREE;