Przeglądaj źródła

1.新增接口根据资产产品id更新文件路由信息(用于复审或四审时)
2.新增接口根据产品号获取产品实收款
3.校验订单收款开发
4.production_fund新增字段产品应收款
5.撰写出具报告时新增产品应收款信息

GouGengquan 1 rok temu
rodzic
commit
c0b381dc14

+ 22 - 0
biz-base/src/main/java/com/dayou/controller/AssetsProductionController.java

@@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.*;
 import com.dayou.utils.ConvertUtil;
 import com.dayou.utils.HttpKit;
 import com.dayou.exception.ErrorCode;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -181,5 +183,25 @@ public class AssetsProductionController extends BaseController {
         return RestResponse.data(assetsProductionService.assetsProRepertory(taskRecordDTO.getTaskData()));
     }
 
+    /**
+     * 根据资产产品id更新文件路由信息
+     * @param assetsProduction 产品信息dto
+     * @return RestResponse<Boolean>
+     */
+    @PutMapping("/updateProductionFileInfo")
+    public RestResponse<Boolean> updateProductionFileInfo(@RequestBody AssetsProduction assetsProduction) {
+        return RestResponse.data(assetsProductionService.updateProductionFileInfo(assetsProduction));
+    }
+
+    /**
+     * 根据产品号获取产品实收款
+     * @param productionNo 产品号
+     * @return RestResponse<BigDecimal>
+     */
+    @GetMapping("/getProductionRealAmount/{productionNo}")
+    public RestResponse<BigDecimal> getProductionRealAmount(@PathVariable String productionNo) {
+        return RestResponse.data(assetsProductionService.getProductionRealAmount(productionNo));
+    }
+
 }
 

+ 15 - 0
dao/src/main/java/com/dayou/mapper/AssetsProductionMapper.java

@@ -5,6 +5,7 @@ import com.dayou.entity.AssetsProduction;
 import com.dayou.dao.CustomBaseMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -82,4 +83,18 @@ public interface AssetsProductionMapper extends CustomBaseMapper<AssetsProductio
      * @return Integer
      */
     Integer getInatanceCountByIdAndProNo(@Param("businessId") Long businessId, @Param("productionNo") String productionNo);
+
+    /**
+     * 根据资产产品id更新文件路由信息
+     * @param assetsProduction 产品信息dto
+     * @return Boolean
+     */
+    Boolean updateProductionFileInfo(AssetsProduction assetsProduction);
+
+    /**
+     * 获取产品实收款
+     * @param productionNo 产品号
+     * @return BigDecimal
+     */
+    BigDecimal getProductionRealAmount(@Param("productionNo") String productionNo);
 }

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

@@ -138,6 +138,7 @@
         bailor_contact_tel,
         assets.created,
         ( SELECT SUM(estimated_value) FROM assets_evaluation_target WHERE assets_evaluation_target.assets_id = assets.id ) AS estimated_value,
+        fund.id AS orderFundId,
         fund.should_amount,
         fund.real_amount,
         fund.discount,

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

@@ -161,5 +161,20 @@
           AND id = #{id}
     </select>
 
+    <!--根据资产产品id更新文件路由信息-->
+    <update id="updateProductionFileInfo">
+        UPDATE assets_production
+        SET file_path = #{filePath},
+            comment = #{comment}
+        WHERE id = #{id}
+    </update>
+
+    <!--获取产品实收款-->
+    <select id="getProductionRealAmount" resultType="java.math.BigDecimal">
+        SELECT real_amount
+        FROM production_fund
+        WHERE production_no = #{productionNo}
+        AND deleted = 0
+    </select>
 
 </mapper>

+ 4 - 0
domain/src/main/java/com/dayou/entity/ProductionFund.java

@@ -52,6 +52,10 @@ public class ProductionFund extends BaseEntity {
      */
     private Long orderFundId;
 
+    /**
+     * 产品应收款
+     */
+    private BigDecimal productionShouldAmount;
 
     /**
      * 实收款

+ 3 - 3
domain/src/main/java/com/dayou/enums/workflow/CallbackEnum.java

@@ -127,21 +127,21 @@ public enum CallbackEnum {
             //评估报告在校验产品类型时节点
             NecessaryNode report = new NecessaryNode();
             report.setProduction(ProductionEnum.REPORT);
-            WorkflowNodeEnum[] reportWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
+            WorkflowNodeEnum[] reportWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT_APPLY,REPORT_OUT_DEPARTMENT_CHECK,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
             report.setNecessaryNodes(reportWorkflowNodeEnums);
             this.necessaryNodes.add(report);
 
             //咨询报告在校验产品类型时节点
             NecessaryNode consult = new NecessaryNode();
             report.setProduction(ProductionEnum.CONSULT);
-            WorkflowNodeEnum[] consultWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
+            WorkflowNodeEnum[] consultWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT_APPLY,REPORT_OUT_DEPARTMENT_CHECK,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
             report.setNecessaryNodes(consultWorkflowNodeEnums);
             this.necessaryNodes.add(consult);
 
             //复评函在校验产品类型时的节点
             NecessaryNode letter = new NecessaryNode();
             letter.setProduction(ProductionEnum.LETTER);
-            WorkflowNodeEnum[] letterWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
+            WorkflowNodeEnum[] letterWorkflowNodeEnums = {ASSET_REPORT_TAKE_NO,WRITE_REPORT, CHECK_REPORT,RECHECK_REPORT,FOURTH_CHECK_REPORT,REPORT_BOOKBINDING_STAMP,REPORT_IN,REPORT_OUT_APPLY,REPORT_OUT_DEPARTMENT_CHECK,REPORT_OUT,CHECK_ARCHIVING,RECHECK_ARCHIVING,BUSINESS_ARCHIVING};
             letter.setNecessaryNodes(letterWorkflowNodeEnums);
             this.necessaryNodes.add(letter);
         }

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

@@ -144,4 +144,9 @@ public class AssetsVO extends Assets {
      * 产品类型
      */
     private String productionType;
+
+    /**
+     *
+     */
+    private Long orderFundId;
 }

+ 15 - 0
service/src/main/java/com/dayou/service/IAssetsProductionService.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -91,4 +92,18 @@ public interface IAssetsProductionService extends IService<AssetsProduction> {
          */
         Boolean assetsProRepertory(AssetsProWareHouseDTO wareHouseDTO);
 
+        /**
+         * 根据资产产品id更新文件路由信息
+         * @param assetsProduction 产品信息dto
+         * @return Boolean
+         */
+        Boolean updateProductionFileInfo(AssetsProduction assetsProduction);
+
+        /**
+         * 获取产品实收款
+         * @param productionNo 产品号
+         * @return BigDecimal
+         */
+        BigDecimal getProductionRealAmount(String productionNo);
+
 }

+ 74 - 17
service/src/main/java/com/dayou/service/impl/AssetsProductionServiceImpl.java

@@ -6,34 +6,21 @@ import com.dayou.dto.*;
 import com.dayou.entity.*;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.AssetsProductionMapper;
-import com.dayou.service.IAssetsProductionService;
+import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dayou.service.IBusinessProductionService;
-import com.dayou.service.IOrderFundService;
-import com.dayou.service.IProductionOutWarehouseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.ArrayList;
 
 import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
 
 import static com.dayou.enums.MainBusinessEnum.ASSET_BUSINESS;
 import static com.dayou.enums.ProductionEnum.STATEMENT;
@@ -53,6 +40,9 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     private AssetsProductionMapper assetsProductionMapper;
 
     @Autowired
+    private IAssetsService assetsService;
+
+    @Autowired
     private IBusinessProductionService businessProductionService;
 
     @Autowired
@@ -61,6 +51,9 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     @Autowired
     private IProductionOutWarehouseService productionOutWarehouseService;
 
+    @Autowired
+    private IProductionFundService productionFundService;
+
     /**
      * 根据资产业务id查询资产业务产品
      *
@@ -128,6 +121,7 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
      * @return Boolean
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean writeAssetsProduction(AssetsProduction assetsProduction) {
         int count = this.count(new LambdaQueryWrapper<AssetsProduction>().select(AssetsProduction::getCreateProductionDate).eq(AssetsProduction::getProductionNo, assetsProduction.getProductionNo())
                 .eq(AssetsProduction::getId, assetsProduction.getId()));
@@ -136,6 +130,14 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
         }
         // 生成产品二维码
         assetsProduction.setQrCode(businessProductionService.doCreateNormalCode(assetsProduction.getProductionType(), assetsProduction.getProductionNo()));
+        // 新增收款信息
+//        AssetsProduction productionType = this.getOne(new LambdaQueryWrapper<AssetsProduction>()
+//                .select(AssetsProduction::getProductionType)
+//                .eq(AssetsProduction::getProductionNo, assetsProduction.getProductionNo())
+//                .eq(AssetsProduction::getId, assetsProduction.getId()));
+//        if (ObjectUtil.isNotNull(productionType) && !productionType.getProductionType().equals("STATEMENT")){
+            addAssetsShouldAmount(assetsProduction);
+//        }
         return assetsProductionMapper.writeAssetsProduction(assetsProduction);
     }
 
@@ -174,13 +176,14 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
 
     /**
      * 根据业务id与产品号集合获取每个产品是否有提交过的流程实例信息
+     *
      * @return List<Integer>
      */
     @Override
     public List<Integer> getInatanceCountList(AProListSelectDTO aProListSelectDTO) {
         List<Integer> countList = new ArrayList<>();
-        for (String productionNo : aProListSelectDTO.getProductionNos()){
-            countList.add(assetsProductionMapper.getInatanceCountByIdAndProNo(aProListSelectDTO.getBusinessId(),productionNo));
+        for (String productionNo : aProListSelectDTO.getProductionNos()) {
+            countList.add(assetsProductionMapper.getInatanceCountByIdAndProNo(aProListSelectDTO.getBusinessId(), productionNo));
         }
         return countList;
     }
@@ -251,4 +254,58 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
         }
         return Boolean.FALSE;
     }
+
+    /**
+     * 根据资产产品id更新文件路由信息
+     *
+     * @param assetsProduction 产品信息dto
+     * @return Boolean
+     */
+    @Override
+    public Boolean updateProductionFileInfo(AssetsProduction assetsProduction) {
+        return assetsProductionMapper.updateProductionFileInfo(assetsProduction);
+    }
+
+    /**
+     * 获取产品实收款
+     *
+     * @param productionNo 产品号
+     * @return BigDecimal
+     */
+    @Override
+    public BigDecimal getProductionRealAmount(String productionNo) {
+        return assetsProductionMapper.getProductionRealAmount(productionNo);
+    }
+
+    /**
+     * 新增订单收款信息
+     * @param assetsProduction 资产订单信息
+     */
+    public void addAssetsShouldAmount(AssetsProduction assetsProduction){
+        // 从订单收款表获取应收款信息
+        OrderFund orderFund = new OrderFund();
+        orderFund = orderFundService.getOne(new LambdaQueryWrapper<OrderFund>()
+                .select(OrderFund::getOrderId, OrderFund::getShouldAmount)
+                .eq(OrderFund::getBusinessId, assetsProduction.getBusinessId())
+                .eq(OrderFund::getBusinessType, "ASSET_BUSINESS"));
+
+        if (ObjectUtil.isNotNull(orderFund) && ObjectUtil.isNotNull(orderFund.getShouldAmount())) {
+            ProductionFund productionFund = new ProductionFund();
+            productionFund.setOrderFundId(orderFund.getId());
+            productionFund.setProductionShouldAmount(orderFund.getShouldAmount());
+            productionFund.setProductionNo(assetsProduction.getProductionNo());
+            // 新增产品的收款信息
+            productionFundService.save(productionFund);
+        } else {
+            Assets assets = assetsService.getById(assetsProduction.getBusinessId());
+            orderFund.setBusinessId(assets.getId());
+            orderFund.setOrderId(assets.getOrderId());
+            orderFund.setOrderName(assets.getName());
+            orderFund.setBusinessType("ASSET_BUSINESS");
+            orderFund.setShouldAmount(BigDecimal.valueOf(0));
+            orderFundService.save(orderFund);
+            // 订单应收款新增后 继续调用方法添加产品收款信息
+            addAssetsShouldAmount(assetsProduction);
+        }
+    }
 }

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

@@ -81,7 +81,7 @@ public interface IWorkNodeService extends IService<WorkNode> {
     WorkNodeDTO getNextWorkNodeByCheckState(Long flowId, String nodeCode,String doSecondCheck,String doThirdCheck);
 
     /**
-     * 根据四审状态判断是否要进行四审节点
+     * 资产节点跳过判断方法
      * @param flowId 流程id
      * @param nodeCode 节点code
      * @return WorkNodeDTO

+ 6 - 1
service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java

@@ -319,7 +319,7 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
     }
 
     /**
-     * 根据四审状态判断是否要进行四审节点
+     * 资产节点跳过判断方法
      * @param flowId 流程id
      * @param nodeCode 节点code
      * @return WorkNodeDTO
@@ -328,9 +328,14 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
     public WorkNodeDTO getNextWorkNodeByFourthCheckState(Long flowId, String nodeCode) {
         List<WorkNodeDTO> flowNodes = getFlowNodes(flowId);
         for (int i = 0; i < flowNodes.size(); i++) {
+            // 当前为复审报告节点时跳过四审报告节点
             if (nodeCode.equals(RECHECK_REPORT.name()) && flowNodes.get(i).getCode().equals(nodeCode)) {
                 return flowNodes.get(i + 2);
             }
+            // 当前为报告入库节点时跳过出库申请节点与报告出库部门审核节点
+            if (nodeCode.equals(REPORT_IN.name()) && flowNodes.get(i).getCode().equals(nodeCode)) {
+                return flowNodes.get(i + 3);
+            }
         }
         return null;
     }

+ 8 - 1
service/src/main/java/com/dayou/workflow/handler/AssetsNodeHandler.java

@@ -85,7 +85,14 @@ public class AssetsNodeHandler extends WorkNodeProcessable {
                     // 校验资产四审
                     case CHECK_ASSET_FOURTH_CHECK_REPORT:
                         // doFourthCheck为真则执行四审节点,为假则跳过四审节点
-                        if (!workNodeCommit.getDoFourthCheck()){
+                        if (!workNodeCommit.getDoFourthCheck()) {
+                            nextWorkNode = workNodeService.getNextWorkNodeByFourthCheckState(currentInstanceNode.getFlowId(), currentInstanceNode.getNodeCode());
+                        }
+                        break;
+                    // 校验订单实收款
+                    case CHECK_ASSET_ORDER_FUND:
+                        // 产品已有实收款则跳过出库申请
+                        if (workNodeCommit.getIfProductionFund()) {
                             nextWorkNode = workNodeService.getNextWorkNodeByFourthCheckState(currentInstanceNode.getFlowId(), currentInstanceNode.getNodeCode());
                         }
                         break;

+ 8 - 1
sql/update_sql.sql

@@ -309,4 +309,11 @@ CREATE TABLE `work_record_transfer` (
                                         `modified` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
                                         `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除标识:1:删除 0:未删除',
                                         PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='任务转交表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='任务转交表';
+
+/**
+  日期:2024-05-07
+  修改人:苟耕铨
+ */
+# 业务产品收款表新增字段
+ALTER TABLE production_fund ADD COLUMN production_should_amount DECIMAL(16,2) NULL COMMENT '产品应收款';