Ver código fonte

产品出入库通用接口开发

wucl 11 meses atrás
pai
commit
47adb0d490

+ 11 - 0
biz-base/src/main/java/com/dayou/controller/BusinessProductionController.java

@@ -165,4 +165,15 @@ public class BusinessProductionController{
     public RestResponse<Boolean> doAllotRealAmountToProd(@RequestBody List<OrderReportDTO> claimOrders) {
         return RestResponse.data(assetsProductionService.doAllotRealAmountToProd(claimOrders));
     }
+
+    /**
+     * 大中型、资产、个贷产品通用出入库接口
+     * @param ProductionNo
+     * @return
+     */
+    @PostMapping("/inOut")
+    public RestResponse<Boolean> inOutWareHouse(String ProductionNo){
+        Boolean ret = businessProductionService.inOutWareHouse(ProductionNo);
+        return RestResponse.data(ret);
+    }
 }

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

@@ -7,6 +7,7 @@ import com.dayou.vo.WorkNodeInstanceVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -31,4 +32,6 @@ public interface WorkFlowNodeInstanceMapper extends CustomBaseMapper<WorkFlowNod
     List<NightingaleEchartsVO> instanceNodeCountByCode(@Param("businessType") String businessType);
 
     List<String> checkIfReverse(@Param("productionType")String productionType, @Param("productionNo")String productionNo);
+
+    Map<String, Object> getInOutInstanceNode(@Param("productionNo") String productionNo);
 }

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

@@ -205,4 +205,34 @@
             AND wfi.business_min_id like concat ('%',#{productionNo},'%')
         </if>
     </select>
+
+    <select id="getInOutInstanceNode" parameterType="java.lang.String" resultType="map">
+        SELECT
+            wtr.id,
+            wfni.*
+        FROM
+            work_task_record wtr
+                LEFT JOIN work_node_task wnt ON wnt.id = wtr.task_id
+                inner JOIN (
+                SELECT
+                    wn.CODE,
+                    wfni.id as instanceId,
+                    wfni.business_id as businessId,
+                    wfni.business_sub_id as businessSubId,
+                    wfni.business_min_id as businessMinId,
+                    wfni.business_type as businessType
+                FROM
+                    work_flow_node_instance wfni
+                        LEFT JOIN work_node wn ON wn.id = wfni.node_id
+                WHERE
+                    wfni.state = 'PENDING'
+                  AND wfni.deleted = 0
+                  AND wn.deleted = 0
+            ) wfni ON wtr.instance_id = wfni.instanceId
+
+        WHERE
+            wnt.deleted = 0
+          AND wtr.deleted = 0 and wfni.code in ('STATEMENT_IN','STATEMENT_OUT','REPORT_IN','REPORT_OUT','LETTER_IN','LETTER_OUT')
+        and (wfni.business_sub_id = #{productionNo} or wfni.business_min_id = #{productionNo})
+    </select>
 </mapper>

+ 2 - 0
domain/src/main/java/com/dayou/dto/WareHouseDTO.java

@@ -1,5 +1,6 @@
 package com.dayou.dto;
 
+import lombok.Builder;
 import lombok.Data;
 
 /**
@@ -9,6 +10,7 @@ import lombok.Data;
  * @since: 2023/12/7
  * created with IntelliJ IDEA.
  */
+@Builder
 @Data
 public class WareHouseDTO {
 

+ 1 - 0
domain/src/main/java/com/dayou/dto/WorkNodeCommit.java

@@ -4,6 +4,7 @@ import com.dayou.enums.ProductionEnum;
 import com.dayou.enums.workflow.NodeLogEnum;
 import com.github.liangbaika.validate.annations.AbcValidate;
 import com.github.liangbaika.validate.enums.Check;
+import lombok.Builder;
 import lombok.Data;
 
 import java.util.List;

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

@@ -19,4 +19,6 @@ public interface IBusinessProductionService{
     String doCreateValidateCode(MainBusinessEnum businessEnum,Long businessId,String reportNo);
 
     String doCreateNormalCode(String production,String reportNo);
+
+    Boolean inOutWareHouse(String productionNo);
 }

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

@@ -1,12 +1,24 @@
 package com.dayou.service.impl;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.dayou.common.BaseEntity;
 import com.dayou.configuration.DfsConfig;
+import com.dayou.dto.TaskRecordDTO;
+import com.dayou.dto.WareHouseDTO;
+import com.dayou.dto.WorkNodeCommit;
+import com.dayou.entity.MajorProduction;
+import com.dayou.entity.WorkTaskRecord;
 import com.dayou.enums.MainBusinessEnum;
+import com.dayou.enums.workflow.WorkflowNodeEnum;
 import com.dayou.mapper.MajorProductionMapper;
 import com.dayou.mapper.PersonalTargetMapper;
-import com.dayou.service.IBusinessProductionService;
-import com.dayou.service.IPersonalTargetService;
+import com.dayou.mapper.WorkFlowNodeInstanceMapper;
+import com.dayou.service.*;
+import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
+import com.dayou.service.workflow.IWorkFlowService;
+import com.dayou.service.workflow.IWorkTaskRecordService;
 import com.dayou.utils.FileUploadUtils;
 import com.dayou.utils.PersonalUtils;
 import com.dayou.utils.QRCodeUtil;
@@ -18,12 +30,16 @@ import org.springframework.context.ResourceLoaderAware;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.*;
+import java.time.LocalDateTime;
+import java.util.Map;
 
 import static com.dayou.common.Constants.PNG;
 import static com.dayou.common.Constants.PROD_VALIDATE_URI;
 import static com.dayou.enums.MainBusinessEnum.PERSONAL_BUSINESS;
+import static com.dayou.enums.workflow.NodeLogEnum.PASS;
 
 /**
  * 类说明:
@@ -46,6 +62,23 @@ public class BusinessProductionServiceImpl implements IBusinessProductionService
 
     @Autowired
     private DfsConfig dfsConfig;
+    @Autowired
+    private IMajorProductionService majorProductionService;
+
+    @Autowired
+    private WorkFlowNodeInstanceMapper workFlowNodeInstanceMapper;
+
+    @Autowired
+    private IPersonalProductionService personalProductionService;
+
+    @Autowired
+    private IAssetsProductionService assetsProductionService;
+
+    @Autowired
+    private IWorkFlowService workFlowService;
+
+    @Autowired
+    private IWorkTaskRecordService workTaskRecordService;
 
     @Override
     public void setResourceLoader(ResourceLoader resourceLoader) {
@@ -116,4 +149,73 @@ public class BusinessProductionServiceImpl implements IBusinessProductionService
             throw new RuntimeException(e);
         }
     }
+
+    @Transactional
+    @Override
+    public Boolean inOutWareHouse(String productionNo) {
+        if (StrUtil.isNotBlank(productionNo)){
+
+            Map<String,Object> nodeMap = workFlowNodeInstanceMapper.getInOutInstanceNode(productionNo);
+            MainBusinessEnum businessType = MainBusinessEnum.valueOf((String) nodeMap.get("businessType"));
+            Long businessId = (Long) nodeMap.get("businessId");
+            Long recodeId = (Long) nodeMap.get("id");
+            String code = (String) nodeMap.get("code");
+
+            //完成出库业务操作
+            Boolean doRet = doInOutWareHouse(businessType, businessId, recodeId, productionNo);
+
+            if (doRet){
+                //提交工作流节点
+                WorkNodeCommit workNodeCommit = new WorkNodeCommit();
+                workNodeCommit.setState(PASS);
+                workNodeCommit.setIfCheckTask(true);
+                workNodeCommit.setComments(code.contains("IN")?"入库":"出库");
+                workNodeCommit.setInstanceNodeId((Long) nodeMap.get("instanceId"));
+                workNodeCommit.setBusinessSubId((String) nodeMap.get("businessSubId"));
+                workNodeCommit.setBusinessMinId((String) nodeMap.get("businessMinId"));
+                return workFlowService.commit(workNodeCommit);
+            }
+
+        }
+        return Boolean.FALSE;
+    }
+
+    private Boolean doInOutWareHouse(MainBusinessEnum businessEnum,Long businessId,Long recordId,String productionNo) {
+        TaskRecordDTO<WareHouseDTO> taskRecordDTO = new TaskRecordDTO<>();
+        taskRecordDTO.setRecordId(recordId);
+        Boolean doWareHouseRet = Boolean.FALSE;
+        switch (businessEnum){
+            case PERSONAL_BUSINESS:
+
+                break;
+            case MAJOR_BUSINESS:
+                MajorProduction mp = majorProductionService.getOne(new LambdaQueryWrapper<MajorProduction>()
+                        .select(BaseEntity::getId,MajorProduction::getProduction,MajorProduction::getRepertoryState)
+                        .eq(MajorProduction::getMajorId, businessId)
+                        .eq(MajorProduction::getReportNo, productionNo));
+                Long productionId = mp.getId();
+                String productionType = mp.getProduction();
+                Boolean state = mp.getRepertoryState()==null?Boolean.FALSE:Boolean.TRUE;
+                WareHouseDTO wareHouseDTO = WareHouseDTO.builder()
+                        .productionId(productionId)
+                        .productionType(productionType)
+                        .repertoryState(Boolean.FALSE)
+                        .repertoryState(state)
+                        .reportNo(productionNo).build();
+                taskRecordDTO.setTaskData(wareHouseDTO);
+                doWareHouseRet = majorProductionService.warehouse(taskRecordDTO);
+                break;
+            case ASSET_BUSINESS:
+                break;
+
+
+        }
+        if (doWareHouseRet){
+            //完成任务
+            return workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished, Boolean.TRUE)
+                    .set(WorkTaskRecord::getFinishTime, LocalDateTime.now()).eq(BaseEntity::getId, recordId));
+        }
+        return doWareHouseRet;
+
+    }
 }