Преглед на файлове

1.逾期罚款-罚款记录状态默认值改为1(已确认);确认罚款接口更改为取消罚款,逻辑从将罚款状态update为1变更为update为0,修改相关的接口与方法逻辑
2.逾期罚款-查询接口关键字新增对客户来源与名称的搜索,返回值新增出库时
3.处理个贷部门效率值表部门接单量可能为0的情况

GouGengquan преди 2 месеца
родител
ревизия
b8995d3cd6

+ 10 - 10
biz-base/src/main/java/com/dayou/controller/FinanceFineController.java

@@ -71,21 +71,21 @@ public class FinanceFineController extends BaseController {
     }
 
     /**
-     * 确认罚款金额
+     * 取消确认罚款金额
      * @return Boolean
      */
-    @PutMapping("/confirm/{id}")
-    public RestResponse<Boolean> confirmFineAmount(@PathVariable Long id) {
-        return RestResponse.data(financeFineService.confirmFineAmount(id));
+    @PutMapping("/cancel/{id}")
+    public RestResponse<Boolean> cancelFineAmount(@PathVariable Long id) {
+        return RestResponse.data(financeFineService.cancelFineAmount(id));
     }
 
     /**
-     * 批量确认罚款金额
+     * 批量取消确认罚款金额
      * @return Boolean
      */
-    @PutMapping("/confirm/batch")
-    public RestResponse<Boolean> batchConfirmFineAmount(@RequestBody List<Long> ids) {
-       return RestResponse.data(financeFineService.batchConfirmFineAmount(ids));
+    @PutMapping("/cancel/batch")
+    public RestResponse<Boolean> batchCancelFineAmount(@RequestBody List<Long> ids) {
+       return RestResponse.data(financeFineService.batchCancelFineAmount(ids));
     }
 
     /**
@@ -125,9 +125,9 @@ public class FinanceFineController extends BaseController {
     }
 
     /**
-     * 手动同步统计财务收款预警中超过90天的订单或产品新增到罚款表
+     * 手动同步统计财务收款预警中超过270天的订单或产品新增到罚款表
      */
-    @IgnoreAuth
+    // @IgnoreAuth
     @GetMapping("/compileFineOrder")
     public void compileFineOrder() {
         financeFineService.compileFineOrder();

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

@@ -39,31 +39,31 @@ public interface FinanceFineMapper extends CustomBaseMapper<FinanceFine> {
     List<FinanceFineVO> exportList(@Param("dto") FinanceFineSelectDTO financeFineSelectDTO);
 
     /**
-     * 根据id确认罚款金额
+     * 根据id取消确认罚款金额
      * @return Boolean
      */
-    Boolean confirmFineAmount(@Param("id") Long id);
+    Boolean cancelFineAmount(@Param("id") Long id);
 
     /**
-     * 根据id批量确认罚款金额
+     * 根据id批量取消确认罚款金额
      * @return Boolean
      */
-    Boolean batchConfirmFineAmount(@Param("ids") List<Long> ids);
+    Boolean batchCancelFineAmount(@Param("ids") List<Long> ids);
 
     /**
-     * 获取逾期资产产品款项信息(不包含预评)
+     * 获取逾期270天资产产品款项信息(不包含预评)
      * @return List<CompileFineAssetsOrder>
      */
     List<CompileFineAssetsOrder> getAssetsOrder();
 
     /**
-     * 获取逾期个贷产品款项信息(只查询结果报告)
+     * 获取逾期270天个贷产品款项信息(只查询结果报告)
      * @return List<Long>
      */
     List<Long> getPersonalOrder();
 
     /**
-     * 获取逾期大中型产品款项信息
+     * 获取逾期270天大中型产品款项信息
      * @return List<CompileFineAssetsOrder>
      */
     List<CompileFineMajorOrder> getMajorOrder();

+ 14 - 8
dao/src/main/resources/mapper/FinanceFineMapper.xml

@@ -61,13 +61,15 @@
         </if>
         user.name AS clientManagerName,
         DATEDIFF(CURDATE(), DATE( pro.repertory_out_time )) AS overdueDay,
+        pro.repertory_out_time AS repertoryOutTime,
         customer.name AS customerName,
         subCustomer.name AS customerSubName,
         fine.fine_amount AS fineAmount,
         fine.real_fine_amount AS realFineAmount,
         fine.status AS status,
         fine.created AS punishDate,
-        fine.`explain` AS `explain`
+        fine.`explain` AS `explain`,
+        refund.id AS refundId
         FROM finance_fine AS fine
         LEFT JOIN order_fund AS oFund ON oFund.deleted = 0 AND fine.order_fund_id = oFund.id
         <if test="dto != null and dto.businessType == 'ASSET_BUSINESS'">
@@ -90,13 +92,17 @@
         LEFT JOIN customer_company AS customer ON customer.id = `order`.clientele_id
         LEFT JOIN customer_company AS subCustomer ON subCustomer.id = `order`.clientele_sub_id
         LEFT JOIN user ON `order`.client_manager_id = user.id AND user.deleted = 0
+        LEFT JOIN finance_fine_refund AS refund ON refund.deleted = 0 AND refund.fine_id = fine.id
         WHERE oFund.business_type = #{dto.businessType}
           AND fine.deleted = 0
         <if test="dto != null and dto.keyWord != null and dto.keyWord != ''">
             AND (`order`.order_id LIKE CONCAT('%', #{dto.keyWord},'%')
             <if test="dto != null and dto.businessType == 'ASSET_BUSINESS' or dto.businessType == 'MAJOR_BUSINESS'">
+                # 资产和大中型业务关键字可通过产品号
                 OR pFund.production_no LIKE CONCAT('%', #{dto.keyWord},'%')
             </if>
+            OR customer.name LIKE CONCAT('%', #{dto.keyWord},'%')
+            OR subCustomer.name LIKE CONCAT('%', #{dto.keyWord},'%')
             )
         </if>
         <if test="dto != null and dto.invoiceNo != null and dto.invoiceNo != ''">
@@ -133,19 +139,19 @@
     </select>
 
     <!--确认罚款金额-->
-    <update id="confirmFineAmount">
+    <update id="cancelFineAmount">
         UPDATE finance_fine
         SET real_fine_amount = fine_amount,
-            status = 1
+            status = 0
         WHERE deleted = 0
         AND id = #{id}
     </update>
 
     <!--根据id批量确认罚款金额-->
-    <update id="batchConfirmFineAmount">
+    <update id="batchCancelFineAmount">
         UPDATE finance_fine
         SET real_fine_amount = fine_amount,
-            status = 1
+            status = 0
         WHERE deleted = 0
         AND id IN
         <foreach collection="ids" open="(" close=")" separator="," item="id">
@@ -153,7 +159,7 @@
         </foreach>
     </update>
 
-    <!--获取逾期资产产品款项信息-->
+    <!--获取逾期270天资产产品款项信息-->
     <select id="getAssetsOrder" resultType="com.dayou.vo.CompileFineAssetsOrder">
         SELECT
             `of`.id AS orderFundId,
@@ -189,7 +195,7 @@
           AND `return`.id IS NULL
     </select>
 
-    <!--获取逾期个贷产品款项信息-->
+    <!--获取逾期270天个贷产品款项信息-->
     <select id="getPersonalOrder" resultType="java.lang.Long">
         SELECT
             ofu.id
@@ -207,7 +213,7 @@
           AND `return`.id IS NULL
     </select>
 
-    <!--获取逾期大中型产品款项信息-->
+    <!--获取逾期270天大中型产品款项信息-->
     <select id="getMajorOrder" resultType="com.dayou.vo.CompileFineMajorOrder">
         SELECT
             pf.id AS productionFundId,

+ 11 - 0
domain/src/main/java/com/dayou/vo/FinanceFineVO.java

@@ -79,6 +79,12 @@ public class FinanceFineVO {
     private Integer overdueDay;
 
     /**
+     * 出库日期
+     */
+    @Excel(name = "出库日期")
+    private LocalDate repertoryOutTime;
+
+    /**
      * 客户名称
      */
     @Excel(name = "客户名称")
@@ -126,4 +132,9 @@ public class FinanceFineVO {
     @Excel(name = "客户经理情况说明")
     private String explain;
 
+    /**
+     * 罚款退回记录id
+     */
+    private Long refundId;
+
 }

+ 5 - 5
service/src/main/java/com/dayou/service/IFinanceFineService.java

@@ -37,16 +37,16 @@ public interface IFinanceFineService extends IService<FinanceFine> {
     List<FinanceFineVO> exportList(FinanceFineSelectDTO financeFineSelectDTO);
 
     /**
-     * 确认罚款金额
+     * 确认取消罚款金额
      * @return Boolean
      */
-    Boolean confirmFineAmount(Long id);
+    Boolean cancelFineAmount(Long id);
 
     /**
-     * 批量确认罚款金额
+     * 批量取消确认罚款金额
      * @return Boolean
      */
-    Boolean batchConfirmFineAmount(List<Long> ids);
+    Boolean batchCancelFineAmount(List<Long> ids);
 
     FinanceFine detail(Long id);
 
@@ -57,7 +57,7 @@ public interface IFinanceFineService extends IService<FinanceFine> {
     Boolean delete(Long id);
 
     /**
-     * 统计财务收款预警中超过90天的订单或产品新增到罚款表
+     * 统计财务收款预警中超过270天的订单或产品新增到罚款表
      */
     void compileFineOrder();
 

+ 44 - 10
service/src/main/java/com/dayou/service/impl/FinanceFineServiceImpl.java

@@ -1,14 +1,18 @@
 package com.dayou.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.common.BaseEntity;
 import com.dayou.dto.FinanceFineSelectDTO;
 import com.dayou.dto.SimplePostModel;
 import com.dayou.entity.FinanceFine;
-import com.dayou.exception.BusinessException;
+import com.dayou.entity.FinanceFineRefund;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.FinanceFineMapper;
+import com.dayou.service.IFinanceFineRefundService;
 import com.dayou.service.IFinanceFineService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.DateUtils;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.CompileFineAssetsOrder;
 import com.dayou.vo.CompileFineMajorOrder;
@@ -16,12 +20,11 @@ import com.dayou.vo.FinanceFineVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 
 import org.springframework.transaction.annotation.Transactional;
 
@@ -39,6 +42,9 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
     @Autowired
     private FinanceFineMapper financeFineMapper;
 
+    @Autowired
+    private IFinanceFineRefundService financeFineRefundService;
+
     /**
      * 分页查询超期罚款
      *
@@ -75,23 +81,33 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
     }
 
     /**
-     * 确认罚款金额
+     * 取消确认罚款金额
      *
      * @return Boolean
      */
     @Override
-    public Boolean confirmFineAmount(Long id) {
-        return financeFineMapper.confirmFineAmount(id);
+    public Boolean cancelFineAmount(Long id) {
+        // 判断罚款记录是否已产生退款记录
+        int refundCount = financeFineRefundService.count(new LambdaQueryWrapper<FinanceFineRefund>().eq(FinanceFineRefund::getFineId, id).eq(BaseEntity::getDeleted, 0));
+        if (refundCount > 0) {
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"当前罚款记录已产生相应退款记录, 不可取消罚款!");
+        }
+        return financeFineMapper.cancelFineAmount(id);
     }
 
     /**
-     * 批量确认罚款金额
+     * 批量取消确认罚款金额
      * @return Boolean
      */
     @Override
-    public Boolean batchConfirmFineAmount(List<Long> ids) {
+    public Boolean batchCancelFineAmount(List<Long> ids) {
+        // 判断罚款记录是否已产生退款记录
+        int refundCount = financeFineRefundService.count(new LambdaQueryWrapper<FinanceFineRefund>().in(FinanceFineRefund::getFineId, ids).eq(BaseEntity::getDeleted, 0));
+        if (refundCount > 0) {
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"当前罚款记录已产生相应退款记录, 不可取消罚款!");
+        }
         if (!ids.isEmpty()) {
-            return financeFineMapper.batchConfirmFineAmount(ids);
+            return financeFineMapper.batchCancelFineAmount(ids);
         }else {
             ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"未选择罚款记录!");
         }
@@ -111,6 +127,15 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
 
     @Override
     public Boolean update(FinanceFine financeFine) {
+        // 判断罚款记录是否已产生退款记录
+        int refundCount = financeFineRefundService.count(new LambdaQueryWrapper<FinanceFineRefund>().eq(FinanceFineRefund::getFineId, financeFine.getId()).eq(BaseEntity::getDeleted, 0));
+        if (refundCount > 0) {
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"当前罚款记录已产生相应退款记录, 不可修改罚款信息!");
+        }
+        // 已确认的罚款记录修改罚款金额时同步修改实际罚款金额
+        if (ObjectUtil.isNotNull(financeFine.getFineAmount()) && financeFine.getStatus()) {
+            financeFine.setRealFineAmount(financeFine.getFineAmount());
+        }
         return this.updateById(financeFine);
     }
 
@@ -121,7 +146,7 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
     }
 
     /**
-     * 统计财务收款预警中超过90天的订单或产品新增到罚款表
+     * 统计财务收款预警中超过270天的订单或产品新增到罚款表
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -166,6 +191,9 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
             financeFine.setOrderFundId(assetsOrder.getOrderFundId());
             financeFine.setProductionFundId(assetsOrder.getProductionFundId());
             financeFine.setFineAmount(fineAmount);
+            // 2025-05-23日,修改数据库确认字段默认为已确认,所以新增日期就是确认罚款日期,且实际罚款金额直接设置为罚款金额
+            financeFine.setConfirmDate(DateUtils.dateToLocalDateTime(new Date()));
+            financeFine.setRealFineAmount(fineAmount);
             financeFineList.add(financeFine);
         }
 
@@ -175,6 +203,9 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
             FinanceFine financeFine = new FinanceFine();
             financeFine.setOrderFundId(orderFundId);
             financeFine.setFineAmount(BigDecimal.valueOf(50));
+            // 2025-05-23日,修改数据库确认字段默认为已确认,所以新增日期就是确认罚款日期,且实际罚款金额直接设置为罚款金额
+            financeFine.setConfirmDate(DateUtils.dateToLocalDateTime(new Date()));
+            financeFine.setRealFineAmount(BigDecimal.valueOf(50));
             financeFineList.add(financeFine);
         }
 
@@ -212,6 +243,9 @@ public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, Finan
             financeFine.setOrderFundId(majorOrder.getOrderFundId());
             financeFine.setProductionFundId(majorOrder.getProductionFundId());
             financeFine.setFineAmount(fineAmount);
+            // 2025-05-23日,修改数据库确认字段默认为已确认,所以新增日期就是确认罚款日期,且实际罚款金额直接设置为罚款金额
+            financeFine.setConfirmDate(DateUtils.dateToLocalDateTime(new Date()));
+            financeFine.setRealFineAmount(fineAmount);
             financeFineList.add(financeFine);
         }
 

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

@@ -48,8 +48,8 @@ public class PersonalStatisticalStatementServiceImpl implements IPersonalStatist
                 efficiencyVO.setYoYDeadOrderVolume(0.0);
             }
 
-            // 计算当期出单率(收费项目数/个贷订单数)
-            if (efficiencyVO.getCurrentPeriodRealAmountOrderCount() > 0) {
+            // 计算当期出单率(收费项目数/个贷订单数) && 判断当期部门接单量是否大于0,避免除数为0
+            if (efficiencyVO.getCurrentPeriodRealAmountOrderCount() > 0 && efficiencyVO.getCurrentPeriodOrderVolume().doubleValue() > 0) {
                 efficiencyVO.setCurrentPeriodOrderHasReportVolume((efficiencyVO.getCurrentPeriodRealAmountOrderCount().doubleValue() / efficiencyVO.getCurrentPeriodOrderVolume().doubleValue()));
             } else {
                 efficiencyVO.setCurrentPeriodOrderHasReportVolume(0.0);

+ 1 - 1
service/src/main/java/com/dayou/task/FinanceFineScheduled.java

@@ -14,7 +14,7 @@ public class FinanceFineScheduled {
     private IFinanceFineService financeFineService;
 
     /**
-     * 每⽉23日凌晨0点 将逾期订单/产品信息新增到finance_fine表
+     * 每⽉23日凌晨0点 将逾期270天的订单/产品信息新增到finance_fine表
      */
     @Scheduled(cron = "0 0 0 23 * ?")
     public void compileFineOrderTask() {

+ 8 - 1
sql/update_sql.sql

@@ -887,4 +887,11 @@ ALTER TABLE assets_production ADD COLUMN validate_code VARCHAR ( 255 ) COMMENT '
   以上SQL已同步到测试环境/正式环境
   同步日期:2025-04-29
   操作人:苟耕铨
- */
+ */
+
+/**
+  日期:2025-05-23
+  修改人:苟耕铨
+  未更新到test-env
+ */
+ALTER TABLE `finance_fine` MODIFY `status` bit ( 1 ) DEFAULT 1 NOT NULL COMMENT '罚款记录确认状态(默认1已确认)';