Explorar el Código

Merge branch 'master' of http://47.108.172.52:3000/dayou/item-management-1phase

GouGengquan hace 5 meses
padre
commit
9cc24df2ee

+ 7 - 0
biz-base/src/main/java/com/dayou/controller/DyoaController.java

@@ -110,4 +110,11 @@ public class DyoaController {
         Boolean ret = dyoaHistoryService.updateAssetsProduction();
         return RestResponse.data(ret);
     }
+
+    @IgnoreAuth
+    @GetMapping("/update/personalProductionTime")
+    public RestResponse<Boolean> updatePersonalProductionTime(){
+        Boolean ret = dyoaHistoryService.updatePersonalProductionTime();
+        return RestResponse.data(ret);
+    }
 }

+ 3 - 0
dao/src/main/java/com/dayou/mapper/PersonalProductionMapper.java

@@ -1,5 +1,6 @@
 package com.dayou.mapper;
 
+import com.dayou.dto.PersonalProductionDTO;
 import com.dayou.dto.ProductionDTO;
 import com.dayou.entity.PersonalProduction;
 import com.dayou.dao.CustomBaseMapper;
@@ -18,4 +19,6 @@ import java.util.List;
 public interface PersonalProductionMapper extends CustomBaseMapper<PersonalProduction> {
 
     List<ProductionDTO> getProductions(@Param("id") Long id);
+
+    List<PersonalProductionDTO> getProductionAfter2025();
 }

+ 5 - 0
dao/src/main/java/com/dayou/mapper/WorkFlowNodeInstanceMapper.java

@@ -2,10 +2,13 @@ package com.dayou.mapper;
 
 import com.dayou.entity.WorkFlowNodeInstance;
 import com.dayou.dao.CustomBaseMapper;
+import com.dayou.enums.MainBusinessEnum;
+import com.dayou.enums.workflow.WorkflowNodeEnum;
 import com.dayou.vo.NightingaleEchartsVO;
 import com.dayou.vo.WorkNodeInstanceVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -34,4 +37,6 @@ public interface WorkFlowNodeInstanceMapper extends CustomBaseMapper<WorkFlowNod
     List<String> checkIfReverse(@Param("productionType")String productionType, @Param("productionNo")String productionNo);
 
     Map<String, Object> getInOutInstanceNode(@Param("productionNo") String productionNo);
+
+    Date getNodeFinishedTime(@Param("flowId")Long flowId, @Param("nodeId")Long nodeId, @Param("businessId")Long businessId, @Param("businessSubId")String businessSubId, @Param("businessMinId")String businessMinId,@Param("businessType") String businessType);
 }

+ 6 - 0
dao/src/main/resources/mapper/PersonalMapper.xml

@@ -156,6 +156,12 @@
         <if test="personal!=null and personal.handlerName!=null and personal.handlerName!='' ">
             and u4.name like concat('%',#{personal.handlerName},'%')
         </if>
+        <if test="personal!=null and personal.isCancellation!=null and personal.isCancellation==true">
+            and u4.name = '项目作废'
+        </if>
+        <if test="personal!=null and personal.isCancellation!=null and personal.isCancellation==false">
+            and u4.name != '项目作废'
+        </if>
         <if test="personal!=null and personal.userIds!=null and personal.userIds.size!=0">
             and p.client_manager_id in
             <foreach collection="personal.userIds" open="(" close=")" separator="," item="userId">

+ 15 - 0
dao/src/main/resources/mapper/PersonalProductionMapper.xml

@@ -67,4 +67,19 @@
             pt.deleted = 0 and
             p.deleted = 0
     </select>
+
+    <select id="getProductionAfter2025" resultType="com.dayou.dto.PersonalProductionDTO">
+        SELECT
+            pp.id,
+            pp.production,
+            p.id AS pid,
+            p.order_id
+        FROM
+            ( SELECT id, order_id FROM personal WHERE created &gt;= '2025-01-01 00:00:00' AND deleted = 0 ) p
+                INNER JOIN personal_target pt ON pt.personal_id = p.id
+                INNER JOIN personal_production pp ON pp.target_id = pt.id
+        WHERE
+            pt.deleted = 0
+          AND pp.deleted = 0
+    </select>
 </mapper>

+ 27 - 0
dao/src/main/resources/mapper/WorkFlowNodeInstanceMapper.xml

@@ -237,4 +237,31 @@
           AND wtr.deleted = 0 and wfni.code in ('STATEMENT_IN','STATEMENT_OUT','REPORT_IN','REPORT_OUT','LETTER_IN','LETTER_OUT')
         and (wfni.businessSubId = #{productionNo} or wfni.businessMinId = #{productionNo})
     </select>
+
+    <select id="getNodeFinishedTime" resultType="java.util.Date">
+        SELECT
+            max(created)
+        FROM
+            work_flow_log
+        WHERE
+            instance_id = (
+                SELECT
+                    id
+                FROM
+                    work_flow_node_instance
+                WHERE
+                    flow_id = #{flowId}
+                  AND node_id = #{nodeId}
+                  AND business_id = #{businessId}
+                  AND business_sub_id = #{businessSubId}
+                  AND business_type = #{businessType}
+                  <if test="businessMinId!=null and businessMinId!=''">
+                      and business_min_id = #{businessMinId}
+                  </if>
+                  AND state = 'FINISHED'
+                  AND deleted = 0
+                     order by created desc limit 1
+            )
+          AND deleted =0 and state = 'PASS'
+    </select>
 </mapper>

+ 15 - 0
domain/src/main/java/com/dayou/dto/PersonalProductionDTO.java

@@ -0,0 +1,15 @@
+package com.dayou.dto;
+
+import lombok.Data;
+
+@Data
+public class PersonalProductionDTO {
+
+    private Long id;
+
+    private String production;
+
+    private Long pid;
+
+    private String orderId;
+}

+ 5 - 0
domain/src/main/java/com/dayou/vo/PersonalVO.java

@@ -213,4 +213,9 @@ public class PersonalVO extends Personal {
 
     private Set<Long> userIds;
 
+    /**
+     * 项目作废(查询条件)
+     */
+    private Boolean isCancellation;
+
 }

+ 43 - 1
service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java

@@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.PullDownModel;
+import com.dayou.dto.PersonalProductionDTO;
 import com.dayou.dto.history.*;
 import com.dayou.entity.*;
 import com.dayou.enums.MainBusinessEnum;
@@ -26,6 +27,7 @@ import com.dayou.mapper.*;
 import com.dayou.service.*;
 import com.dayou.service.impl.AssetsServiceImpl;
 import com.dayou.service.impl.PersonalProductionServiceImpl;
+import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
 import com.dayou.utils.DateUtils;
 import com.dayou.utils.HttpKit;
 import lombok.extern.slf4j.Slf4j;
@@ -51,7 +53,9 @@ import java.util.stream.Collectors;
 import static com.dayou.common.Constants.*;
 import static com.dayou.enums.FinanceInvoiceState.已作废;
 import static com.dayou.enums.MainBusinessEnum.*;
-import static com.dayou.enums.ProductionEnum.FINAL;
+import static com.dayou.enums.ProductionEnum.*;
+import static com.dayou.enums.workflow.NodeStateEnum.FINISHED;
+import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
 
 @DS("dyoa")
 @Service
@@ -1863,6 +1867,44 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
         return null;
     }
 
+    @Autowired
+    private IPersonalProductionService personalProductionService;
+
+    @Autowired
+    private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
+
+
+    @Override
+    public Boolean updatePersonalProductionTime() {
+        List<PersonalProductionDTO> list =  personalProductionService.updatePersonalProductionTime();
+        for (PersonalProductionDTO prod : list){
+            if (prod.getProduction().equals(STATEMENT.name())){
+                Date nodeFinishedTime = workFlowNodeInstanceService.getNodeFinishedTime(PERSONAL_BUSINESS, GENERATE_STATEMENT, prod.getPid(), prod.getOrderId(), null);
+                if (nodeFinishedTime!=null){
+                    personalProductionService.update(new LambdaUpdateWrapper<PersonalProduction>().eq(BaseEntity::getId,prod.getId()).set(PersonalProduction::getProductionTime,nodeFinishedTime));
+                }
+            }
+            if (prod.getProduction().equals(TECHNIC.name())){
+                Date nodeFinishedTime = workFlowNodeInstanceService.getNodeFinishedTime(PERSONAL_BUSINESS, WRITE_REPORT, prod.getPid(), prod.getOrderId(), null);
+                if (nodeFinishedTime!=null){
+                    personalProductionService.update(new LambdaUpdateWrapper<PersonalProduction>().eq(BaseEntity::getId,prod.getId()).set(PersonalProduction::getProductionTime,nodeFinishedTime));
+                }
+            }
+            if (prod.getProduction().equals(FINAL.name())){
+                Date nodeFinishedTime = workFlowNodeInstanceService.getNodeFinishedTime(PERSONAL_BUSINESS, WRITE_REPORT, prod.getPid(), prod.getOrderId(), null);
+                if (nodeFinishedTime!=null){
+                    personalProductionService.update(new LambdaUpdateWrapper<PersonalProduction>().eq(BaseEntity::getId,prod.getId()).set(PersonalProduction::getProductionTime,nodeFinishedTime));
+                }
+            }
+            if (prod.getProduction().equals(LETTER.name())){
+                Date nodeFinishedTime = workFlowNodeInstanceService.getNodeFinishedTime(PERSONAL_BUSINESS, WRITE_LETTER, prod.getPid(), prod.getOrderId(), null);
+                if (nodeFinishedTime!=null){
+                    personalProductionService.update(new LambdaUpdateWrapper<PersonalProduction>().eq(BaseEntity::getId,prod.getId()).set(PersonalProduction::getProductionTime,nodeFinishedTime));
+                }
+            }
+        }
+        return null;
+    }
 
 
     @Override

+ 1 - 0
service/src/main/java/com/dayou/dyoa/IDyoaHistoryService.java

@@ -48,4 +48,5 @@ public interface IDyoaHistoryService {
 
     Boolean updateAssetsProduction();
 
+    Boolean updatePersonalProductionTime();
 }

+ 2 - 0
service/src/main/java/com/dayou/service/IPersonalProductionService.java

@@ -1,6 +1,7 @@
 package com.dayou.service;
 import com.dayou.dto.OrderProductionsBag;
 import com.dayou.dto.OrderReportDTO;
+import com.dayou.dto.PersonalProductionDTO;
 import com.dayou.dto.TaskRecordDTO;
 import com.dayou.entity.PersonalProduction;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -48,4 +49,5 @@ public interface IPersonalProductionService extends IService<PersonalProduction>
 
     Boolean genFile(Long personalId);
 
+    List<PersonalProductionDTO> updatePersonalProductionTime();
 }

+ 6 - 0
service/src/main/java/com/dayou/service/impl/PersonalProductionServiceImpl.java

@@ -223,6 +223,12 @@ public class PersonalProductionServiceImpl extends ServiceImpl<PersonalProductio
         }
     }
 
+    @Override
+    public List<PersonalProductionDTO> updatePersonalProductionTime() {
+        List<PersonalProductionDTO> list = personalProductionMapper.getProductionAfter2025();
+        return list;
+    }
+
     private CertificateEnum determineCertificate(List<CertificateEnum> certificates){
         if (CollectionUtil.isEmpty(certificates)){
             ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"请完善不动产权证或房产证其中一种证件");

+ 5 - 0
service/src/main/java/com/dayou/service/workflow/IWorkFlowNodeInstanceService.java

@@ -5,11 +5,14 @@ import com.dayou.entity.WorkFlowNodeInstance;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.enums.MainBusinessEnum;
+import com.dayou.enums.workflow.WorkflowNodeEnum;
 import com.dayou.vo.NightingaleEchartsVO;
 import com.dayou.vo.WorkNodeInstanceVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -46,4 +49,6 @@ public interface IWorkFlowNodeInstanceService extends IService<WorkFlowNodeInsta
     List<WorkNodeInstanceVO> instanceArray(InstanceNodeDTO instance);
 
     Boolean checkIfReverse(String productionType, String productionNo);
+
+    Date getNodeFinishedTime(MainBusinessEnum businessEnum, WorkflowNodeEnum nodeEnum,Long businessId,String businessSubId,String businessMinId);
 }

+ 29 - 4
service/src/main/java/com/dayou/service/workflow/WorkFlowNodeInstanceServiceImpl.java

@@ -2,11 +2,16 @@ package com.dayou.service.workflow;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.FixedWorkNode;
 import com.dayou.dto.InstanceNodeDTO;
+import com.dayou.entity.WorkFlow;
 import com.dayou.entity.WorkFlowNodeInstance;
+import com.dayou.entity.WorkNode;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.ProductionEnum;
 import com.dayou.enums.workflow.CallbackEnum;
 import com.dayou.enums.workflow.NodeStateEnum;
@@ -21,10 +26,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.dayou.enums.MainBusinessEnum.ASSET_BUSINESS;
@@ -40,12 +42,19 @@ import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkFlowNodeInstanceServiceImpl extends ServiceImpl<WorkFlowNodeInstanceMapper, WorkFlowNodeInstance> implements IWorkFlowNodeInstanceService {
 
     @Autowired
     private WorkFlowNodeInstanceMapper workFlowNodeInstanceMapper;
 
+    @Autowired
+    private IWorkFlowService workFlowService;
+
+    @Autowired
+    private IWorkNodeService workNodeService;
+
     @Override
     @SuppressWarnings("unchecked")
     public Page<WorkFlowNodeInstance> selectPage(Page page,WorkFlowNodeInstance workFlowNodeInstance){
@@ -147,6 +156,22 @@ public class WorkFlowNodeInstanceServiceImpl extends ServiceImpl<WorkFlowNodeIns
         return Boolean.TRUE;
     }
 
+    /**
+     * 查询节点完成时间
+     * @param businessEnum
+     * @param nodeEnum
+     * @param businessId
+     * @param businessSubId
+     * @param businessMinId
+     * @return
+     */
+    @Override
+    public Date getNodeFinishedTime(MainBusinessEnum businessEnum, WorkflowNodeEnum nodeEnum, Long businessId, String businessSubId, String businessMinId) {
+        WorkFlow flow = workFlowService.getOne(new LambdaQueryWrapper<WorkFlow>().eq(WorkFlow::getCode, businessEnum.name()).eq(BaseEntity::getDeleted, Boolean.FALSE).select(BaseEntity::getId));
+        WorkNode node = workNodeService.getOne(new LambdaQueryWrapper<WorkNode>().eq(WorkNode::getFlowId, flow.getId()).eq(WorkNode::getCode, nodeEnum.name()).eq(BaseEntity::getDeleted, Boolean.FALSE).select(BaseEntity::getId));
+        return workFlowNodeInstanceMapper.getNodeFinishedTime(flow.getId(),node.getId(),businessId,businessSubId,businessMinId,businessEnum.name());
+    }
+
     @Override
     public List<WorkNodeInstanceVO> instanceQueue(InstanceNodeDTO instance) {
         String businessMinId = instance.getBusinessMinId();

+ 3 - 1
service/src/main/java/com/dayou/websocket/WebSocketServer.java

@@ -65,7 +65,9 @@ public class WebSocketServer {
     public void onClose(Session session){
         System.out.println("一个客户端断开连接:" + key);
         atomicInteger.incrementAndGet();
-        webSocketMap.remove(key);
+        if (key!=null){
+            webSocketMap.remove(key);
+        }
     }
 
     /**