Browse Source

1.表修改
2.认领资产/个贷/大中型实收款到产品时如有已确认罚款新增罚款退款记录
3.优化资产入库统计查询SQL的速度

GouGengquan 3 months ago
parent
commit
764aa3df1a

+ 9 - 0
dao/src/main/java/com/dayou/mapper/FinanceFineMapper.java

@@ -70,4 +70,13 @@ public interface FinanceFineMapper extends CustomBaseMapper<FinanceFine> {
      */
      */
     BigDecimal getInvoiceByFundInfo(@Param("orderFundId") Long orderFundId, @Param("productionFundId") Long productionFundId);
     BigDecimal getInvoiceByFundInfo(@Param("orderFundId") Long orderFundId, @Param("productionFundId") Long productionFundId);
 
 
+    /**
+     * 根据收款信息获取符合条件的罚款表信息
+     * 且已确认罚款
+     * @param orderFundId 订单收款id
+     * @param productionFundId 产品收款id
+     * @return FinanceFine
+     */
+    FinanceFine getFineByFundInfo(@Param("orderFundId") Long orderFundId, @Param("productionFundId") Long productionFundId);
+
 }
 }

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

@@ -552,7 +552,7 @@
         LEFT JOIN assets_evaluation_target AS target ON target.report_no = production.production_no
         LEFT JOIN assets_evaluation_target AS target ON target.report_no = production.production_no
         LEFT JOIN assets_evaluation_target_purpose AS purpose ON purpose.id = target.evaluation_purpose_id
         LEFT JOIN assets_evaluation_target_purpose AS purpose ON purpose.id = target.evaluation_purpose_id
         LEFT JOIN assets_evaluation_method AS method ON method.id = target.choice_evaluation_method_id
         LEFT JOIN assets_evaluation_method AS method ON method.id = target.choice_evaluation_method_id
-        LEFT JOIN production_fund AS fund ON fund.production_no = production.production_no
+        LEFT JOIN production_fund AS fund ON fund.production_no = production.production_no AND fund.business_id = production.business_id
         WHERE production.deleted = 0
         WHERE production.deleted = 0
         AND (production.repertory_state = 0 OR production.repertory_state = 1)
         AND (production.repertory_state = 0 OR production.repertory_state = 1)
         AND production.production_type != 'STATEMENT'
         AND production.production_type != 'STATEMENT'

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

@@ -253,6 +253,9 @@
         <if test="apFundSelectDTO.keyWord != null and apFundSelectDTO.keyWord != ''">
         <if test="apFundSelectDTO.keyWord != null and apFundSelectDTO.keyWord != ''">
             AND production.assets_name LIKE CONCAT('%',#{apFundSelectDTO.keyWord},'%')
             AND production.assets_name LIKE CONCAT('%',#{apFundSelectDTO.keyWord},'%')
         </if>
         </if>
+        <if test="apFundSelectDTO.orderId != null and apFundSelectDTO.orderId != ''">
+            AND assets.order_id = #{apFundSelectDTO.orderId}
+        </if>
         <if test="apFundSelectDTO.eDeclareResult != null and apFundSelectDTO.eDeclareResult != ''">
         <if test="apFundSelectDTO.eDeclareResult != null and apFundSelectDTO.eDeclareResult != ''">
             AND eDeclare.declare_result = #{apFundSelectDTO.eDeclareResult}
             AND eDeclare.declare_result = #{apFundSelectDTO.eDeclareResult}
         </if>
         </if>

+ 16 - 2
dao/src/main/resources/mapper/FinanceFineMapper.xml

@@ -133,7 +133,9 @@
 
 
     <!--确认罚款金额-->
     <!--确认罚款金额-->
     <update id="confirmFineAmount">
     <update id="confirmFineAmount">
-        UPDATE finance_fine SET real_fine_amount = fine_amount
+        UPDATE finance_fine
+        SET real_fine_amount = fine_amount,
+            status = 1
         WHERE deleted = 0
         WHERE deleted = 0
         AND id = #{id}
         AND id = #{id}
     </update>
     </update>
@@ -232,7 +234,7 @@
           AND ff.id IS NULL
           AND ff.id IS NULL
     </select>
     </select>
 
 
-    <!--根据收款信息获取符合条件的实际开票金额-->
+    <!--根据收款信息获取符合条件的实际开票金额的5%-->
     <select id="getInvoiceByFundInfo" resultType="java.math.BigDecimal">
     <select id="getInvoiceByFundInfo" resultType="java.math.BigDecimal">
         SELECT SUM(real_amount) * 0.05
         SELECT SUM(real_amount) * 0.05
         FROM finance_invoice
         FROM finance_invoice
@@ -244,4 +246,16 @@
         </if>
         </if>
     </select>
     </select>
 
 
+    <!--根据收款信息获取符合条件的罚款表信息 且已确认罚款-->
+    <select id="getFineByFundInfo" resultType="com.dayou.entity.FinanceFine">
+        SELECT *
+        FROM finance_fine
+        WHERE deleted = 0
+        AND status = 1
+        AND order_fund_id = #{orderFundId}
+        <if test="productionFundId">
+            AND production_fund_id = #{productionFundId}
+        </if>
+    </select>
+
 </mapper>
 </mapper>

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

@@ -18,7 +18,7 @@ public class APFundSelectDTO {
     private String oderName;
     private String oderName;
 
 
     /**
     /**
-     * 订单id
+     * 订单
      */
      */
     private String orderId;
     private String orderId;
 
 

+ 4 - 1
domain/src/main/java/com/dayou/entity/FinanceFineRefund.java

@@ -2,6 +2,8 @@ package com.dayou.entity;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.BaseEntity;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+
+import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import com.dayou.annotation.ExcelSheet;
 import com.dayou.annotation.ExcelSheet;
@@ -18,6 +20,7 @@ import com.dayou.annotation.ImportCell;
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "罚款退款表")
 @ExcelSheet(sheetName = "罚款退款表")
+@Builder
 public class FinanceFineRefund extends BaseEntity {
 public class FinanceFineRefund extends BaseEntity {
 
 
     private static final long serialVersionUID=1L;
     private static final long serialVersionUID=1L;
@@ -46,7 +49,7 @@ public class FinanceFineRefund extends BaseEntity {
      */
      */
     @ImportCell
     @ImportCell
     @ExportCell(columnName = "RETURNED:已退 NOT_RETURNED:未退 IGNORE:不退")
     @ExportCell(columnName = "RETURNED:已退 NOT_RETURNED:未退 IGNORE:不退")
-    private String statue;
+    private String status;
 
 
     /**
     /**
      * 操作人id
      * 操作人id

+ 5 - 0
domain/src/main/java/com/dayou/entity/ProductionReturn.java

@@ -99,6 +99,11 @@ public class ProductionReturn extends BaseEntity {
     private String returnReason;
     private String returnReason;
 
 
     /**
     /**
+     * 是否包含退发票
+     */
+    private Boolean returnInvoice;
+
+    /**
      * 审核中、审核通过、审核拒绝 (用代码中的枚举code)
      * 审核中、审核通过、审核拒绝 (用代码中的枚举code)
      */
      */
     @ImportCell
     @ImportCell

+ 30 - 0
domain/src/main/java/com/dayou/enums/FineRefundStatusEnum.java

@@ -0,0 +1,30 @@
+package com.dayou.enums;
+
+/**
+ * 财务罚款后退款记录枚举状态
+ */
+public enum FineRefundStatusEnum {
+
+    RETURNED("已退","RETURNED"),
+    NOT_RETURNED("未退","NOT_RETURNED"),
+    IGNORE("不退","IGNORE"),
+    ;
+
+    private String name;
+
+    private String code;
+
+    FineRefundStatusEnum(String name, String code) {
+        this.name = name;
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+}

+ 30 - 0
domain/src/main/java/com/dayou/enums/workflow/FineRefundReason.java

@@ -0,0 +1,30 @@
+package com.dayou.enums.workflow;
+
+/**
+ * 财务罚款后退款记录枚举原因
+ */
+public enum FineRefundReason {
+
+    RETURN_PRODUCTION("退产品","RETURN_PRODUCTION"),
+    RETURN_MONEY("退款","RETURN_MONEY"),
+    RETURN_PRODUCTION_INVOICE("退产品并退发票","RETURN_PRODUCTION_INVOICE"),
+    ;
+
+    private String name;
+
+    private String code;
+
+    FineRefundReason(String name, String code) {
+        this.name = name;
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+}

+ 9 - 0
service/src/main/java/com/dayou/service/IFinanceFineService.java

@@ -55,4 +55,13 @@ public interface IFinanceFineService extends IService<FinanceFine> {
      */
      */
     void compileFineOrder();
     void compileFineOrder();
 
 
+    /**
+     * 根据收款信息获取符合条件的罚款表信息
+     * 且已确认罚款
+     * @param orderFundId 订单收款id
+     * @param productionFundId 产品收款id
+     * @return FinanceFine
+     */
+    FinanceFine getFineByFundInfo(Long orderFundId, Long productionFundId);
+
 }
 }

+ 22 - 0
service/src/main/java/com/dayou/service/impl/AssetsProductionServiceImpl.java

@@ -30,8 +30,10 @@ import java.util.Objects;
 
 
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import static com.dayou.enums.FineRefundStatusEnum.NOT_RETURNED;
 import static com.dayou.enums.MainBusinessEnum.ASSET_BUSINESS;
 import static com.dayou.enums.MainBusinessEnum.ASSET_BUSINESS;
 import static com.dayou.enums.ProductionEnum.STATEMENT;
 import static com.dayou.enums.ProductionEnum.STATEMENT;
+import static com.dayou.enums.workflow.FineRefundReason.RETURN_MONEY;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -81,6 +83,12 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
     @Autowired
     @Autowired
     private IOrderFundAllotService orderFundAllotService;
     private IOrderFundAllotService orderFundAllotService;
 
 
+    @Autowired
+    private IFinanceFineService financeFineService;
+
+    @Autowired
+    private IFinanceFineRefundService financeFineRefundService;
+
     /**
     /**
      * 根据资产业务id查询资产业务产品
      * 根据资产业务id查询资产业务产品
      *
      *
@@ -410,6 +418,20 @@ public class AssetsProductionServiceImpl extends ServiceImpl<AssetsProductionMap
                 //更新订单折扣比例
                 //更新订单折扣比例
                 orderFundMapper.updateDiscountByOrderIdAfter(orderReportDTO.getOrderFundId());
                 orderFundMapper.updateDiscountByOrderIdAfter(orderReportDTO.getOrderFundId());
 
 
+                // 新增罚款后退款记录
+                FinanceFine financeFine = financeFineService.getFineByFundInfo(orderReportDTO.getOrderFundId(), orderReportDTO.getProductionFundId());
+                // 判断罚款记录是否为空,为空说明没有已确认的罚款,不新增罚款退款记录
+                if (ObjectUtil.isNotNull(financeFine)) {
+                    FinanceFineRefund financeFineRefund = FinanceFineRefund
+                            .builder()
+                            .fineId(financeFine.getId())
+                            .refundAmount(financeFine.getRealFineAmount())
+                            .refundReason(RETURN_MONEY.getCode())
+                            .status(NOT_RETURNED.getCode())
+                            .build();
+                    financeFineRefundService.save(financeFineRefund);
+                }
+
                 //插入订单认领记录流水表
                 //插入订单认领记录流水表
                 FinanceClaim financeClaim = new FinanceClaim();
                 FinanceClaim financeClaim = new FinanceClaim();
                 Long userId = LoginContext.getCurrentUserId();
                 Long userId = LoginContext.getCurrentUserId();

+ 12 - 0
service/src/main/java/com/dayou/service/impl/FinanceFineServiceImpl.java

@@ -194,4 +194,16 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
         this.saveBatch(financeFineList);
         this.saveBatch(financeFineList);
     }
     }
 
 
+    /**
+     * 根据收款信息获取符合条件的罚款表信息
+     * 且已确认罚款
+     * @param orderFundId 订单收款id
+     * @param productionFundId 产品收款id
+     * @return FinanceFine
+     */
+    @Override
+    public FinanceFine getFineByFundInfo(Long orderFundId, Long productionFundId) {
+        return financeFineMapper.getFineByFundInfo(orderFundId, productionFundId);
+    }
+
 }
 }

+ 23 - 0
service/src/main/java/com/dayou/service/impl/MajorProductionServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.impl;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -35,7 +36,9 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import static com.dayou.common.Constants.*;
 import static com.dayou.common.Constants.*;
+import static com.dayou.enums.FineRefundStatusEnum.NOT_RETURNED;
 import static com.dayou.enums.ProductionEnum.*;
 import static com.dayou.enums.ProductionEnum.*;
+import static com.dayou.enums.workflow.FineRefundReason.RETURN_MONEY;
 import static com.dayou.message.MessageTypeEnum.*;
 import static com.dayou.message.MessageTypeEnum.*;
 
 
 /**
 /**
@@ -104,6 +107,12 @@ public class MajorProductionServiceImpl extends ServiceImpl<MajorProductionMappe
     @Autowired
     @Autowired
     private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
     private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
 
 
+    @Autowired
+    private IFinanceFineService financeFineService;
+
+    @Autowired
+    private IFinanceFineRefundService financeFineRefundService;
+
 
 
 
 
     @Override
     @Override
@@ -397,6 +406,20 @@ public class MajorProductionServiceImpl extends ServiceImpl<MajorProductionMappe
                 Long orderFundId = orderReportDTO.getOrderFundId();
                 Long orderFundId = orderReportDTO.getOrderFundId();
                 orderFundMapper.updateRealAmount(orderFundId, thisTimeAmount);
                 orderFundMapper.updateRealAmount(orderFundId, thisTimeAmount);
 
 
+                // 新增罚款后退款记录
+                FinanceFine financeFine = financeFineService.getFineByFundInfo(orderFundId, productionFundId);
+                // 判断罚款记录是否为空,为空说明没有已确认的罚款,不新增罚款退款记录
+                if (ObjectUtil.isNotNull(financeFine)) {
+                    FinanceFineRefund financeFineRefund = FinanceFineRefund
+                            .builder()
+                            .fineId(financeFine.getId())
+                            .refundAmount(financeFine.getRealFineAmount())
+                            .refundReason(RETURN_MONEY.getCode())
+                            .status(NOT_RETURNED.getCode())
+                            .build();
+                    financeFineRefundService.save(financeFineRefund);
+                }
+
                 //插入订单认领流水表
                 //插入订单认领流水表
                 FinanceClaim financeClaim = new FinanceClaim();
                 FinanceClaim financeClaim = new FinanceClaim();
                 Long userId = LoginContext.getCurrentUserId();
                 Long userId = LoginContext.getCurrentUserId();

+ 24 - 0
service/src/main/java/com/dayou/service/impl/PersonalServiceImpl.java

@@ -1,6 +1,7 @@
 package com.dayou.service.impl;
 package com.dayou.service.impl;
 
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -37,7 +38,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import static com.dayou.common.Constants.OUTWARD_TO_PRICE;
 import static com.dayou.common.Constants.OUTWARD_TO_PRICE;
 import static com.dayou.common.Constants.PERSONAL_INWARD;
 import static com.dayou.common.Constants.PERSONAL_INWARD;
+import static com.dayou.enums.FineRefundStatusEnum.NOT_RETURNED;
 import static com.dayou.enums.MainBusinessEnum.PERSONAL_BUSINESS;
 import static com.dayou.enums.MainBusinessEnum.PERSONAL_BUSINESS;
+import static com.dayou.enums.workflow.FineRefundReason.RETURN_MONEY;
 import static com.dayou.enums.workflow.NodeLogEnum.PASS;
 import static com.dayou.enums.workflow.NodeLogEnum.PASS;
 import static com.dayou.enums.workflow.NodeStateEnum.PENDING;
 import static com.dayou.enums.workflow.NodeStateEnum.PENDING;
 
 
@@ -105,6 +108,12 @@ public class PersonalServiceImpl extends ServiceImpl<PersonalMapper, Personal> i
     @Autowired
     @Autowired
     private IDictDataService dictDataService;
     private IDictDataService dictDataService;
 
 
+    @Autowired
+    private IFinanceFineService financeFineService;
+
+    @Autowired
+    private IFinanceFineRefundService financeFineRefundService;
+
 
 
     @Override
     @Override
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
@@ -397,6 +406,21 @@ public class PersonalServiceImpl extends ServiceImpl<PersonalMapper, Personal> i
                     }
                     }
                     orderFundService.save(orderFund);
                     orderFundService.save(orderFund);
                 }
                 }
+
+                // 新增罚款后退款记录
+                FinanceFine financeFine = financeFineService.getFineByFundInfo(orderFund.getId(), null);
+                // 判断罚款记录是否为空,为空说明没有已确认的罚款,不新增罚款退款记录
+                if (ObjectUtil.isNotNull(financeFine)) {
+                    FinanceFineRefund financeFineRefund = FinanceFineRefund
+                            .builder()
+                            .fineId(financeFine.getId())
+                            .refundAmount(financeFine.getRealFineAmount())
+                            .refundReason(RETURN_MONEY.getCode())
+                            .status(NOT_RETURNED.getCode())
+                            .build();
+                    financeFineRefundService.save(financeFineRefund);
+                }
+
                 FinanceClaim financeClaim = new FinanceClaim();
                 FinanceClaim financeClaim = new FinanceClaim();
                 financeClaim.setRealFundId(financeFundId);
                 financeClaim.setRealFundId(financeFundId);
                 financeClaim.setOrderFundId(orderFund.getId());
                 financeClaim.setOrderFundId(orderFund.getId());

+ 20 - 1
sql/update_sql.sql

@@ -816,4 +816,23 @@ ALTER TABLE major_production ADD KEY `idx_production_time` (`production_time`) U
   修改人:苟耕铨
   修改人:苟耕铨
   未更新到test-env
   未更新到test-env
  */
  */
-ALTER TABLE `order_fund` ADD `client_manager_id` BIGINT ( 20 ) NULL COMMENT '客户经理id(user_id)'
+ALTER TABLE `order_fund` ADD `client_manager_id` BIGINT ( 20 ) NULL COMMENT '客户经理id(user_id)';
+
+/**
+  日期:2025-04-14
+  修改人:苟耕铨
+  未更新到test-env
+ */
+ALTER TABLE `production_return` ADD `return_invoice` bit ( 1 ) DEFAULT 0 NOT NULL COMMENT '是否包含退发票';
+
+/**
+  日期:2025-04-15
+  修改人:苟耕铨
+  未更新到test-env
+ */
+# 新增字段
+ALTER TABLE finance_fine_refund CHANGE statue `status` enum('RETURNED','NOT_RETURNED','IGNORE') NOT NULL COMMENT 'RETURNED:已退 NOT_RETURNED:未退 IGNORE:不退';
+# 新增索引
+ALTER TABLE assets_evaluation_target ADD KEY `report_no` (`report_no`) USING BTREE;
+ALTER TABLE assets_evaluation_target ADD KEY `evaluation_purpose_id` (`evaluation_purpose_id`) USING BTREE;
+ALTER TABLE assets_evaluation_target ADD KEY `statement_no` (`statement_no`) USING BTREE;