Bladeren bron

1.新增逾期未收款订单/产品罚款记录新增方法

GouGengquan 3 maanden geleden
bovenliggende
commit
002382363a
20 gewijzigde bestanden met toevoegingen van 1241 en 0 verwijderingen
  1. 83 0
      biz-base/src/main/java/com/dayou/controller/FinanceFineController.java
  2. 83 0
      biz-base/src/main/java/com/dayou/controller/FinanceFineRefundController.java
  3. 96 0
      biz-base/src/main/java/com/dayou/controller/ProductionReturnController.java
  4. 49 0
      dao/src/main/java/com/dayou/mapper/FinanceFineMapper.java
  5. 16 0
      dao/src/main/java/com/dayou/mapper/FinanceFineRefundMapper.java
  6. 16 0
      dao/src/main/java/com/dayou/mapper/ProductionReturnMapper.java
  7. 136 0
      dao/src/main/resources/mapper/FinanceFineMapper.xml
  8. 28 0
      dao/src/main/resources/mapper/FinanceFineRefundMapper.xml
  9. 35 0
      dao/src/main/resources/mapper/ProductionReturnMapper.xml
  10. 83 0
      domain/src/main/java/com/dayou/entity/FinanceFine.java
  11. 64 0
      domain/src/main/java/com/dayou/entity/FinanceFineRefund.java
  12. 109 0
      domain/src/main/java/com/dayou/entity/ProductionReturn.java
  13. 33 0
      domain/src/main/java/com/dayou/vo/CompileFineAssetsOrder.java
  14. 30 0
      domain/src/main/java/com/dayou/vo/CompileFineMajorOrder.java
  15. 28 0
      service/src/main/java/com/dayou/service/IFinanceFineRefundService.java
  16. 36 0
      service/src/main/java/com/dayou/service/IFinanceFineService.java
  17. 28 0
      service/src/main/java/com/dayou/service/IProductionReturnService.java
  18. 66 0
      service/src/main/java/com/dayou/service/impl/FinanceFineRefundServiceImpl.java
  19. 156 0
      service/src/main/java/com/dayou/service/impl/FinanceFineServiceImpl.java
  20. 66 0
      service/src/main/java/com/dayou/service/impl/ProductionReturnServiceImpl.java

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

@@ -0,0 +1,83 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IFinanceFineService;
+import com.dayou.entity.FinanceFine;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 超期未收款罚款表
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@RestController
+@RequestMapping("financeFine")
+@Slf4j
+public class FinanceFineController extends BaseController {
+    @Autowired
+    private IFinanceFineService financeFineService;
+
+    /**
+    * 超期未收款罚款表列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<FinanceFine>> page(FinanceFine financeFine, Page page){
+        Page<FinanceFine> pages=financeFineService.selectPage(page,financeFine);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 超期未收款罚款表详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<FinanceFine> detail(@PathVariable Long id){
+        FinanceFine xFinanceFine =financeFineService.detail(id);
+        return RestResponse.data(xFinanceFine);
+     }
+
+    /**
+     * 超期未收款罚款表新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody FinanceFine financeFine) {
+        Boolean ret = financeFineService.add(financeFine);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 超期未收款罚款表更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody FinanceFine financeFine) {
+        Boolean ret = financeFineService.update(financeFine);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 超期未收款罚款表删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = financeFineService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 83 - 0
biz-base/src/main/java/com/dayou/controller/FinanceFineRefundController.java

@@ -0,0 +1,83 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IFinanceFineRefundService;
+import com.dayou.entity.FinanceFineRefund;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 罚款退款表
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@RestController
+@RequestMapping("financeFineRefund")
+@Slf4j
+public class FinanceFineRefundController extends BaseController {
+    @Autowired
+    private IFinanceFineRefundService financeFineRefundService;
+
+    /**
+    * 罚款退款表列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<FinanceFineRefund>> page(FinanceFineRefund financeFineRefund, Page page){
+        Page<FinanceFineRefund> pages=financeFineRefundService.selectPage(page,financeFineRefund);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 罚款退款表详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<FinanceFineRefund> detail(@PathVariable Long id){
+        FinanceFineRefund xFinanceFineRefund =financeFineRefundService.detail(id);
+        return RestResponse.data(xFinanceFineRefund);
+     }
+
+    /**
+     * 罚款退款表新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody FinanceFineRefund financeFineRefund) {
+        Boolean ret = financeFineRefundService.add(financeFineRefund);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 罚款退款表更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody FinanceFineRefund financeFineRefund) {
+        Boolean ret = financeFineRefundService.update(financeFineRefund);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 罚款退款表删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = financeFineRefundService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 96 - 0
biz-base/src/main/java/com/dayou/controller/ProductionReturnController.java

@@ -0,0 +1,96 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IProductionReturnService;
+import com.dayou.entity.ProductionReturn;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.common.PullDownModel;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 产品退回申请表
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@RestController
+@RequestMapping("productionReturn")
+@Slf4j
+public class ProductionReturnController extends BaseController {
+    @Autowired
+    private IProductionReturnService productionReturnService;
+
+    /**
+    * 产品退回申请表列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<ProductionReturn>> page(ProductionReturn productionReturn, Page page){
+        Page<ProductionReturn> pages=productionReturnService.selectPage(page,productionReturn);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 产品退回申请表详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<ProductionReturn> detail(@PathVariable Long id){
+        ProductionReturn xProductionReturn =productionReturnService.detail(id);
+        return RestResponse.data(xProductionReturn);
+     }
+
+    /**
+     * 产品退回申请表新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody ProductionReturn productionReturn) {
+        Boolean ret = productionReturnService.add(productionReturn);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 产品退回申请表更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody ProductionReturn productionReturn) {
+        Boolean ret = productionReturnService.update(productionReturn);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 产品退回申请表删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = productionReturnService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+    /**
+     * 产品退回申请表下拉列表
+     */
+    @GetMapping("/simpleAll")
+    public RestResponse<List<PullDownModel>> simpleAll(){
+        LambdaQueryWrapper<ProductionReturn> lambdaQueryWrapper = new LambdaQueryWrapper<ProductionReturn>()
+        .select(ProductionReturn::getId,ProductionReturn::getName)
+        .eq(ProductionReturn::getDeleted,false);
+        List<ProductionReturn> list= productionReturnService.list(lambdaQueryWrapper);
+        List<PullDownModel> ret=ConvertUtil.copyList(list, PullDownModel.class);
+        return RestResponse.data(ret);
+    }
+}
+

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

@@ -0,0 +1,49 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.FinanceFine;
+import com.dayou.dao.CustomBaseMapper;
+import com.dayou.entity.FinanceInvoice;
+import com.dayou.vo.CompileFineAssetsOrder;
+import com.dayou.vo.CompileFineMajorOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 超期未收款罚款表 Mapper 接口
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface FinanceFineMapper extends CustomBaseMapper<FinanceFine> {
+
+    /**
+     * 获取逾期资产产品款项信息(不包含预评)
+     * @return List<CompileFineAssetsOrder>
+     */
+    List<CompileFineAssetsOrder> getAssetsOrder();
+
+    /**
+     * 获取逾期个贷产品款项信息(只查询结果报告)
+     * @return List<Long>
+     */
+    List<Long> getPersonalOrder();
+
+    /**
+     * 获取逾期大中型产品款项信息
+     * @return List<CompileFineAssetsOrder>
+     */
+    List<CompileFineMajorOrder> getMajorOrder();
+
+    /**
+     * 根据收款信息获取符合条件的实际开票金额的5%
+     * @param orderFundId 订单收款id
+     * @param productionFundId 产品收款id
+     * @return BigDecimal 返回开票金额
+     */
+    BigDecimal getInvoiceByFundInfo(@Param("orderFundId") Long orderFundId, @Param("productionFundId") Long productionFundId);
+
+}

+ 16 - 0
dao/src/main/java/com/dayou/mapper/FinanceFineRefundMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.FinanceFineRefund;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 罚款退款表 Mapper 接口
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface FinanceFineRefundMapper extends CustomBaseMapper<FinanceFineRefund> {
+
+}

+ 16 - 0
dao/src/main/java/com/dayou/mapper/ProductionReturnMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.ProductionReturn;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 产品退回申请表 Mapper 接口
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface ProductionReturnMapper extends CustomBaseMapper<ProductionReturn> {
+
+}

+ 136 - 0
dao/src/main/resources/mapper/FinanceFineMapper.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.FinanceFineMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.FinanceFine">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="created" property="created" />
+        <result column="modified" property="modified" />
+        <result column="order_fund_id" property="orderFundId" />
+        <result column="production_fund_id" property="productionFundId" />
+        <result column="fine_amount" property="fineAmount" />
+        <result column="real_fine_amount" property="realFineAmount" />
+        <result column="explain" property="explain" />
+        <result column="remark" property="remark" />
+        <result column="status" property="status" />
+        <result column="leader_id" property="leaderId" />
+        <result column="confirm_date" property="confirmDate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        order_fund_id, production_fund_id, fine_amount, real_fine_amount, explain, remark, status, leader_id, confirm_date
+    </sql>
+
+    <!--获取逾期资产产品款项信息-->
+    <select id="getAssetsOrder" resultType="com.dayou.vo.CompileFineAssetsOrder">
+        SELECT
+            `of`.id,
+            pf.id,
+            pf.production_should_amount,
+            pf.standard_amount
+        FROM
+            (
+                SELECT
+                    id,
+                    business_id,
+                    production_no,
+                    production_type,
+                    evaluate_amount,
+                    repertory_out_time
+                FROM
+                    assets_production AS ap
+                WHERE
+                    deleted = 0
+                  AND repertory_out_time IS NOT NULL
+                  AND production_type != 'STATEMENT'
+            ) AS ap
+                LEFT JOIN ( SELECT id, business_id, production_no, production_should_amount, real_amount, standard_amount FROM production_fund WHERE business_type = 'ASSET_BUSINESS' AND deleted = 0 ) AS pf ON ( ap.business_id = pf.business_id AND ap.production_no = pf.production_no )
+                LEFT JOIN ( SELECT id, business_id, should_amount FROM order_fund WHERE business_type = 'ASSET_BUSINESS' AND deleted = 0 ) AS `of` ON `of`.business_id = ap.business_id
+                LEFT JOIN assets AS a ON a.id = ap.business_id
+                LEFT JOIN finance_fine AS ff ON ff.deleted = 0 AND `of`.id = ff.order_fund_id AND pf.id = ff.production_fund_id
+        WHERE ( pf.production_no IS NULL OR pf.real_amount IS NULL )
+          AND ap.repertory_out_time > '2024-01-01 00:00:00'
+          AND DATEDIFF(CURDATE(), DATE( ap.repertory_out_time )) >= 90
+          AND ff.id IS NULL
+    </select>
+
+    <!--获取逾期个贷产品款项信息-->
+    <select id="getPersonalOrder" resultType="java.lang.Long">
+        SELECT
+            ofu.id
+        FROM
+                ( SELECT id, order_id FROM personal WHERE deleted = 0 ) AS p
+                    INNER JOIN personal_target pt ON pt.personal_id = p.id
+                    INNER JOIN ( SELECT id, business_id FROM order_fund WHERE business_type = 'PERSONAL_BUSINESS' AND deleted = 0 AND real_amount IS NULL ) AS ofu ON ofu.business_id = p.id
+                    INNER JOIN ( SELECT target_id,( repertory_out_time ) AS rot,production FROM personal_production WHERE repertory_out_time IS NOT NULL GROUP BY target_id ) AS pp ON pp.target_id = pt.id
+                    LEFT JOIN finance_fine AS ff ON ff.deleted = 0 AND ofu.id = ff.order_fund_id
+        WHERE pp.rot > '2024-01-01 00:00:00'
+          AND DATEDIFF(CURDATE(), DATE( pp.rot )) >= 90
+          AND ff.id IS NULL
+    </select>
+
+    <!--获取逾期大中型产品款项信息-->
+    <select id="getMajorOrder" resultType="com.dayou.vo.CompileFineMajorOrder">
+        SELECT
+            pf.id,
+            pf.order_fund_id,
+            pf.production_should_amount AS shouldAmount,
+            pf.standard_amount
+        FROM
+            (
+                SELECT
+                    id,
+                    business_id,
+                    production_no,
+                    production_type,
+                    production_should_amount,
+                    standard_amount,
+                    order_fund_id
+                FROM
+                    production_fund
+                WHERE
+                    business_type = 'MAJOR_BUSINESS'
+                  AND deleted = 0
+                  AND production_should_amount IS NOT NULL
+                  AND production_should_amount != 0
+                  AND real_amount IS NULL
+            ) AS pf
+                INNER JOIN (
+                SELECT
+                    id,
+                    major_id,
+                    report_no,
+                    production AS productionType,
+                    repertory_out_time
+                FROM
+                    major_production mp
+                WHERE
+                    deleted = 0
+                  AND repertory_out_time IS NOT NULL
+            ) AS mp ON ( mp.major_id = pf.business_id AND mp.report_no = pf.production_no AND mp.productionType = pf.production_type )
+                LEFT JOIN major AS m ON m.id = mp.major_id
+                LEFT JOIN finance_fine AS ff ON ff.deleted = 0 AND pf.order_fund_id = ff.order_fund_id AND pf.id = ff.production_fund_id
+        WHERE mp.repertory_out_time > '2024-01-01 00:00:00'
+          AND DATEDIFF(CURDATE(), DATE( mp.repertory_out_time )) >= 90
+          AND ff.id IS NULL
+    </select>
+
+    <!--根据收款信息获取符合条件的实际开票金额-->
+    <select id="getInvoiceByFundInfo" resultType="java.math.BigDecimal">
+        SELECT SUM(real_amount) * 0.05
+        FROM finance_invoice
+        WHERE deleted = 0
+        AND order_fund_id = #{orderFundId}
+        <if test="productionFundId != null">
+            AND production_fund_id = #{productionFundId}
+        </if>
+    </select>
+
+</mapper>

+ 28 - 0
dao/src/main/resources/mapper/FinanceFineRefundMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.FinanceFineRefundMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.FinanceFineRefund">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="modified" property="modified" />
+        <result column="created" property="created" />
+        <result column="fine_id" property="fineId" />
+        <result column="refund_amount" property="refundAmount" />
+        <result column="refund_reason" property="refundReason" />
+        <result column="statue" property="statue" />
+        <result column="user_id" property="userId" />
+        <result column="refund_date" property="refundDate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        modified,
+        created,
+        fine_id, refund_amount, refund_reason, statue, user_id, refund_date
+    </sql>
+
+</mapper>

+ 35 - 0
dao/src/main/resources/mapper/ProductionReturnMapper.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.ProductionReturnMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.ProductionReturn">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="modified" property="modified" />
+        <result column="created" property="created" />
+        <result column="business_type" property="businessType" />
+        <result column="business_id" property="businessId" />
+        <result column="production_id" property="productionId" />
+        <result column="clinet_manager_id" property="clinetManagerId" />
+        <result column="name" property="name" />
+        <result column="order_id" property="orderId" />
+        <result column="production_no" property="productionNo" />
+        <result column="production_type" property="productionType" />
+        <result column="client_name" property="clientName" />
+        <result column="client_sub_name" property="clientSubName" />
+        <result column="bailor" property="bailor" />
+        <result column="return_reason" property="returnReason" />
+        <result column="status" property="status" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        modified,
+        created,
+        business_type, business_id, production_id, clinet_manager_id, name, order_id, production_no, production_type, client_name, client_sub_name, bailor, return_reason, status
+    </sql>
+
+</mapper>

+ 83 - 0
domain/src/main/java/com/dayou/entity/FinanceFine.java

@@ -0,0 +1,83 @@
+package com.dayou.entity;
+import java.math.BigDecimal;
+import com.dayou.common.BaseEntity;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 超期未收款罚款表
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "超期未收款罚款表")
+public class FinanceFine extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 订单收款id
+     */
+    private Long orderFundId;
+
+    /**
+     * 产品收款id
+     */
+    private Long productionFundId;
+
+    /**
+     * 处罚金额
+     */
+    @ImportCell
+    @ExportCell(columnName = "处罚金额")
+    private BigDecimal fineAmount;
+
+    /**
+     * 实际处罚金额
+     */
+    @ImportCell
+    @ExportCell(columnName = "实际处罚金额")
+    private BigDecimal realFineAmount;
+
+    /**
+     * 情况说明
+     */
+    @ImportCell
+    @ExportCell(columnName = "情况说明")
+    private String explain;
+
+    /**
+     * 领导备注
+     */
+    @ImportCell
+    @ExportCell(columnName = "领导备注")
+    private String remark;
+
+    /**
+     * 领导确认
+     */
+    @ImportCell
+    @ExportCell(columnName = "领导确认")
+    private Boolean status;
+
+    /**
+     * 领导id
+     */
+    private Long leaderId;
+
+    /**
+     * 确认期日
+     */
+    @ImportCell
+    @ExportCell(columnName = "确认期日")
+    private LocalDateTime confirmDate;
+
+
+}

+ 64 - 0
domain/src/main/java/com/dayou/entity/FinanceFineRefund.java

@@ -0,0 +1,64 @@
+package com.dayou.entity;
+import java.math.BigDecimal;
+import com.dayou.common.BaseEntity;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 罚款退款表
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "罚款退款表")
+public class FinanceFineRefund extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 罚款表id
+     */
+    private Long fineId;
+
+    /**
+     * 退款金额(罚款表实际罚款金额)
+     */
+    @ImportCell
+    @ExportCell(columnName = "退款金额(罚款表实际罚款金额)")
+    private BigDecimal refundAmount;
+
+    /**
+     * 退款原因
+     */
+    @ImportCell
+    @ExportCell(columnName = "退款原因")
+    private String refundReason;
+
+    /**
+     * RETURNED:已退 NOT_RETURNED:未退 IGNORE:不退
+     */
+    @ImportCell
+    @ExportCell(columnName = "RETURNED:已退 NOT_RETURNED:未退 IGNORE:不退")
+    private String statue;
+
+    /**
+     * 操作人id
+     */
+    private Long userId;
+
+    /**
+     * 退款操作日期
+     */
+    @ImportCell
+    @ExportCell(columnName = "退款操作日期")
+    private LocalDateTime refundDate;
+
+
+}

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

@@ -0,0 +1,109 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 产品退回申请表
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "产品退回申请表")
+public class ProductionReturn extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 业务类型
+     */
+    @ImportCell
+    @ExportCell(columnName = "业务类型")
+    private String businessType;
+
+    /**
+     * 业务id
+     */
+    private Long businessId;
+
+    /**
+     * 产品id
+     */
+    private Long productionId;
+
+    /**
+     * 客户经理id
+     */
+    private Long clinetManagerId;
+
+    /**
+     * 项目名称
+     */
+    @ImportCell
+    @ExportCell(columnName = "项目名称")
+    private String name;
+
+    /**
+     * 项目编号
+     */
+    @ImportCell
+    @ExportCell(columnName = "项目编号")
+    private String orderId;
+
+    /**
+     * 产品编号
+     */
+    @ImportCell
+    @ExportCell(columnName = "产品编号")
+    private String productionNo;
+
+    /**
+     * 产品类型
+     */
+    @ImportCell
+    @ExportCell(columnName = "产品类型")
+    private String productionType;
+
+    /**
+     * 客户名称
+     */
+    @ImportCell
+    @ExportCell(columnName = "客户名称")
+    private String clientName;
+
+    /**
+     * 业务来源
+     */
+    @ImportCell
+    @ExportCell(columnName = "业务来源")
+    private String clientSubName;
+
+    /**
+     * 委托人
+     */
+    @ImportCell
+    @ExportCell(columnName = "委托人")
+    private String bailor;
+
+    /**
+     * 退产品原因
+     */
+    @ImportCell
+    @ExportCell(columnName = "退产品原因")
+    private String returnReason;
+
+    /**
+     * 审核中、审核通过、审核拒绝 (用代码中的枚举code)
+     */
+    @ImportCell
+    @ExportCell(columnName = "审核中、审核通过、审核拒绝 (用代码中的枚举code)")
+    private String status;
+
+
+}

+ 33 - 0
domain/src/main/java/com/dayou/vo/CompileFineAssetsOrder.java

@@ -0,0 +1,33 @@
+package com.dayou.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 逾期资产产品款项信息
+ */
+@Data
+public class CompileFineAssetsOrder {
+
+    /**
+     * 订单收款信息id
+     */
+    private Long orderFundId;
+
+    /**
+     * 产品收款信息id
+     */
+    private Long productionFundId;
+
+    /**
+     * 产品应收款
+     */
+    private BigDecimal productionShouldAmount;
+
+    /**
+     * 产品标准收费
+     */
+    private BigDecimal standardAmount;
+
+}

+ 30 - 0
domain/src/main/java/com/dayou/vo/CompileFineMajorOrder.java

@@ -0,0 +1,30 @@
+package com.dayou.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CompileFineMajorOrder {
+
+    /**
+     * 订单收款信息id
+     */
+    private Long orderFundId;
+
+    /**
+     * 产品收款信息id
+     */
+    private Long productionFundId;
+
+    /**
+     * 产品应收款
+     */
+    private BigDecimal productionShouldAmount;
+
+    /**
+     * 产品标准收费
+     */
+    private BigDecimal standardAmount;
+
+}

+ 28 - 0
service/src/main/java/com/dayou/service/IFinanceFineRefundService.java

@@ -0,0 +1,28 @@
+package com.dayou.service;
+import com.dayou.entity.FinanceFineRefund;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * <p>
+ * 罚款退款表 服务类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface IFinanceFineRefundService extends IService<FinanceFineRefund> {
+
+        Page<FinanceFineRefund> selectPage(Page page,FinanceFineRefund financeFineRefund);
+
+        FinanceFineRefund detail(Long id);
+
+        Boolean add(FinanceFineRefund financeFineRefund);
+
+        Boolean update(FinanceFineRefund financeFineRefund);
+
+        Boolean delete(Long id);
+
+}

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

@@ -0,0 +1,36 @@
+package com.dayou.service;
+
+import com.dayou.entity.FinanceFine;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ * 超期未收款罚款表 服务类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface IFinanceFineService extends IService<FinanceFine> {
+
+    Page<FinanceFine> selectPage(Page page, FinanceFine financeFine);
+
+    FinanceFine detail(Long id);
+
+    Boolean add(FinanceFine financeFine);
+
+    Boolean update(FinanceFine financeFine);
+
+    Boolean delete(Long id);
+
+    /**
+     * 统计财务收款预警中超过90天的订单或产品新增到罚款表
+     * @return Boolean
+     */
+    Boolean compileFineOrder();
+
+}

+ 28 - 0
service/src/main/java/com/dayou/service/IProductionReturnService.java

@@ -0,0 +1,28 @@
+package com.dayou.service;
+import com.dayou.entity.ProductionReturn;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * <p>
+ * 产品退回申请表 服务类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+public interface IProductionReturnService extends IService<ProductionReturn> {
+
+        Page<ProductionReturn> selectPage(Page page,ProductionReturn productionReturn);
+
+        ProductionReturn detail(Long id);
+
+        Boolean add(ProductionReturn productionReturn);
+
+        Boolean update(ProductionReturn productionReturn);
+
+        Boolean delete(Long id);
+
+}

+ 66 - 0
service/src/main/java/com/dayou/service/impl/FinanceFineRefundServiceImpl.java

@@ -0,0 +1,66 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.FinanceFineRefund;
+import com.dayou.mapper.FinanceFineRefundMapper;
+import com.dayou.service.IFinanceFineRefundService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.util.List;
+import java.util.ArrayList;
+import org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 罚款退款表 服务实现类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Service
+public class FinanceFineRefundServiceImpl extends ServiceImpl<FinanceFineRefundMapper, FinanceFineRefund> implements IFinanceFineRefundService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<FinanceFineRefund> selectPage(Page page,FinanceFineRefund financeFineRefund){
+        return this.page(page, new QueryWrapper<FinanceFineRefund>(financeFineRefund));
+    }
+
+
+    @Override
+    public FinanceFineRefund detail(Long id){
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(FinanceFineRefund financeFineRefund){
+        return  this.save(financeFineRefund);
+    }
+
+    @Override
+    public Boolean update(FinanceFineRefund financeFineRefund){
+        return  this.updateById(financeFineRefund);
+    }
+
+    @Override
+    public Boolean delete(Long id){
+        //逻辑删除
+        return this.removeById(id);
+    }
+}

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

@@ -0,0 +1,156 @@
+package com.dayou.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.dayou.entity.FinanceFine;
+import com.dayou.mapper.FinanceFineMapper;
+import com.dayou.service.IFinanceFineService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.vo.CompileFineAssetsOrder;
+import com.dayou.vo.CompileFineMajorOrder;
+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.List;
+import java.util.Objects;
+
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * <p>
+ * 超期未收款罚款表 服务实现类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Service
+public class FinanceFineServiceImpl extends ServiceImpl<FinanceFineMapper, FinanceFine> implements IFinanceFineService {
+
+    @Autowired
+    private FinanceFineMapper financeFineMapper;
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<FinanceFine> selectPage(Page page, FinanceFine financeFine) {
+        return this.page(page, new QueryWrapper<FinanceFine>(financeFine));
+    }
+
+
+    @Override
+    public FinanceFine detail(Long id) {
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(FinanceFine financeFine) {
+        return this.save(financeFine);
+    }
+
+    @Override
+    public Boolean update(FinanceFine financeFine) {
+        return this.updateById(financeFine);
+    }
+
+    @Override
+    public Boolean delete(Long id) {
+        //逻辑删除
+        return this.removeById(id);
+    }
+
+    /**
+     * 统计财务收款预警中超过90天的订单或产品新增到罚款表
+     *
+     * @return Boolean
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean compileFineOrder() {
+        List<CompileFineAssetsOrder> compileFineAssetsOrderList = financeFineMapper.getAssetsOrder();
+        List<Long> compileFinePersonalOrderList = financeFineMapper.getPersonalOrder();
+        List<CompileFineMajorOrder> compileFineMajorOrderList = financeFineMapper.getMajorOrder();
+
+        List<FinanceFine> financeFineList = new ArrayList<>();
+
+        // 处理资产的信息以插入到罚款表
+        for (CompileFineAssetsOrder assetsOrder : compileFineAssetsOrderList) {
+            // 获取开票金额的5%作为罚款金额
+            BigDecimal fineAmount = financeFineMapper.getInvoiceByFundInfo(assetsOrder.getOrderFundId(), assetsOrder.getProductionFundId());
+            // 判断罚款金额是否为null(为null说明没开票,通过其他信息设置罚款金额)
+            if (ObjectUtil.isNull(fineAmount)) {
+                // 判断应收款是否不为null且不等于1(乱填)
+                if (ObjectUtil.isNotNull(assetsOrder.getProductionShouldAmount()) && !Objects.equals(assetsOrder.getProductionShouldAmount(), BigDecimal.valueOf(1))) {
+                    // 填了应收款,按应收款的5%
+                    fineAmount = assetsOrder.getProductionShouldAmount().multiply(BigDecimal.valueOf(0.05));
+                } else {
+                    // 没有应收款的话,罚款金额就是 standard_amount * 30% * 5%
+                    fineAmount = assetsOrder.getStandardAmount().multiply(BigDecimal.valueOf(0.3)).multiply(BigDecimal.valueOf(0.05));
+                }
+            }
+
+            // 最低罚款:200元,不⾜200元,按200元罚款 最⾼罚款⾦额:5000元,超出5000元,按5000元罚款
+            // 判断罚款金额是否大于 200 小于5000
+            // 返回值大于0:第一个BigDecimal大于第二个
+            if (fineAmount.compareTo(BigDecimal.valueOf(200)) < 0) { // 金额小于200
+                fineAmount = BigDecimal.valueOf(200);
+            } else if (fineAmount.compareTo(BigDecimal.valueOf(5000)) > 0) { // 金额大于5000
+                fineAmount = BigDecimal.valueOf(5000);
+            }
+
+            // 设置罚款信息
+            FinanceFine financeFine = new FinanceFine();
+            financeFine.setOrderFundId(assetsOrder.getOrderFundId());
+            financeFine.setProductionFundId(assetsOrder.getProductionFundId());
+            financeFine.setFineAmount(fineAmount);
+            financeFineList.add(financeFine);
+        }
+
+        // 处理个贷的信息以插入到罚款表
+        for (Long orderFundId : compileFinePersonalOrderList) {
+            // 设置罚款信息
+            FinanceFine financeFine = new FinanceFine();
+            financeFine.setOrderFundId(orderFundId);
+            financeFine.setFineAmount(BigDecimal.valueOf(50));
+            financeFineList.add(financeFine);
+        }
+
+        // 处理大中型的信息以插入到罚款表
+        for (CompileFineMajorOrder majorOrder : compileFineMajorOrderList) {
+            // 获取开票金额的5%作为罚款金额
+            BigDecimal fineAmount = financeFineMapper.getInvoiceByFundInfo(majorOrder.getOrderFundId(), majorOrder.getProductionFundId());
+            // 判断罚款金额是否为null(为null说明没开票,通过其他信息设置罚款金额)
+            if (ObjectUtil.isNull(fineAmount)) {
+                // 判断应收款是否不为null且不等于1(乱填)
+                if (ObjectUtil.isNotNull(majorOrder.getProductionShouldAmount()) && !Objects.equals(majorOrder.getProductionShouldAmount(), BigDecimal.valueOf(1))) {
+                    // 填了应收款,按应收款的5%
+                    fineAmount = majorOrder.getProductionShouldAmount().multiply(BigDecimal.valueOf(0.05));
+                } else {
+                    // 没有应收款的话,罚款金额就是 standard_amount * 30% * 5%
+                    fineAmount = majorOrder.getStandardAmount().multiply(BigDecimal.valueOf(0.3)).multiply(BigDecimal.valueOf(0.05));
+                }
+            }
+
+            // 最低罚款:200元,不⾜200元,按200元罚款 最⾼罚款⾦额:5000元,超出5000元,按5000元罚款
+            // 判断罚款金额是否大于 200 小于5000
+            // 返回值大于0:第一个BigDecimal大于第二个
+            if (fineAmount.compareTo(BigDecimal.valueOf(200)) < 0) { // 金额小于200
+                fineAmount = BigDecimal.valueOf(200);
+            } else if (fineAmount.compareTo(BigDecimal.valueOf(5000)) > 0) { // 金额大于5000
+                fineAmount = BigDecimal.valueOf(5000);
+            }
+
+            // 设置罚款信息
+            FinanceFine financeFine = new FinanceFine();
+            financeFine.setOrderFundId(majorOrder.getOrderFundId());
+            financeFine.setProductionFundId(majorOrder.getProductionFundId());
+            financeFine.setFineAmount(fineAmount);
+            financeFineList.add(financeFine);
+        }
+
+        return this.saveBatch(financeFineList);
+    }
+
+}

+ 66 - 0
service/src/main/java/com/dayou/service/impl/ProductionReturnServiceImpl.java

@@ -0,0 +1,66 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.ProductionReturn;
+import com.dayou.mapper.ProductionReturnMapper;
+import com.dayou.service.IProductionReturnService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.util.List;
+import java.util.ArrayList;
+import org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 产品退回申请表 服务实现类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-04-07
+ */
+@Service
+public class ProductionReturnServiceImpl extends ServiceImpl<ProductionReturnMapper, ProductionReturn> implements IProductionReturnService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<ProductionReturn> selectPage(Page page,ProductionReturn productionReturn){
+        return this.page(page, new QueryWrapper<ProductionReturn>(productionReturn));
+    }
+
+
+    @Override
+    public ProductionReturn detail(Long id){
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(ProductionReturn productionReturn){
+        return  this.save(productionReturn);
+    }
+
+    @Override
+    public Boolean update(ProductionReturn productionReturn){
+        return  this.updateById(productionReturn);
+    }
+
+    @Override
+    public Boolean delete(Long id){
+        //逻辑删除
+        return this.removeById(id);
+    }
+}