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

绩效工资人员提成计算

wucl преди 1 година
родител
ревизия
6e88b59035

+ 43 - 0
biz-base/src/main/java/com/dayou/controller/BusinessIncomeController.java

@@ -0,0 +1,43 @@
+package com.dayou.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.common.RestResponse;
+import com.dayou.service.IBusinessIncomeService;
+import com.dayou.vo.UserCommissionProdVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 业务收入
+ *
+ * @author wucl
+ * @since 2023-11-06
+ */
+@RestController
+@RequestMapping("businessIncome")
+@Slf4j
+public class BusinessIncomeController extends BaseController {
+
+
+    @Autowired
+    private IBusinessIncomeService businessIncomeService;
+
+
+    /**
+     * 我的大中型业务收入列表
+     * @param vo
+     * @param page
+     * @return
+     */
+    @GetMapping("/my/major")
+    public RestResponse<Page<UserCommissionProdVO>> myMajorIncome(UserCommissionProdVO vo,Page page){
+        Page<UserCommissionProdVO> ret = businessIncomeService.myMajorIncome(page,vo);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 110 - 0
biz-base/src/main/java/com/dayou/controller/FinanceRealFundController.java

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.dayou.vo.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +26,7 @@ import org.springframework.http.MediaType;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 
 /**
  * 财务实收款
@@ -174,5 +176,113 @@ public class FinanceRealFundController extends BaseController {
         List<UserCommissionProdVO> ret = financeRealFundService.majorEvaluatorCommissionDetail(vo);
         return RestResponse.data(ret);
     }
+
+    /**
+     * 大中型评估人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/evaluator/commission/total/export")
+    public void majorEvaluatorTotalAmountExport(@Valid UserCommissionTotalAmountVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionTotalAmountVO> result = financeRealFundService.majorEvaluatorTotalAmountExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        exportPlus(response,"大中型评估人员总提成金额"+ startDate +"至"+ endDate,result, UserCommissionTotalAmountVO.class);
+    }
+
+    /**
+     * 大中型评估人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/evaluator/commission/current/export")
+    public void evaluatorCurUserDetailExport(@Valid UserCommissionProdVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionProdVO> result = financeRealFundService.evaluatorCurUserDetailExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        String userName = "";
+        if (CollectionUtil.isNotEmpty(result)){
+            userName = result.get(0).getUserName();
+        }
+        exportPlus(response,userName+"_大中型评估人员提成详情"+ startDate +"至"+ endDate,result, UserCommissionProdVO.class);
+    }
+
+    /**
+     * 大中型评估所有人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/evaluator/commission/all/export")
+    public void evaluatorAllUserDetailExport(@Valid UserCommissionProdVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionProdVO> result = financeRealFundService.evaluatorAllUserDetailExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        exportPlus(response,"大中型评估人员提成详情"+ startDate +"至"+ endDate,result, UserCommissionProdVO.class);
+    }
+
+    /**
+     * 大中型市场人员总提成列表
+     * @param vo
+     * @return
+     */
+    @GetMapping("/commission/major/market")
+    public RestResponse<List<UserCommissionTotalAmountVO>> majorMarketCommission(UserCommissionTotalAmountVO vo){
+        List<UserCommissionTotalAmountVO> ret = financeRealFundService.majorMarketCommission(vo);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 大中型市场人员总提成列表
+     * @param vo
+     * @return
+     */
+    @GetMapping("/commission/major/market/detail")
+    public RestResponse<List<UserCommissionProdVO>> majorMarketCommissionDetail(UserCommissionProdVO vo){
+        List<UserCommissionProdVO> ret = financeRealFundService.majorMarketCommissionDetail(vo);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 大中型市场人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/market/commission/total/export")
+    public void majorMarketTotalAmountExport(@Valid UserCommissionTotalAmountVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionTotalAmountVO> result = financeRealFundService.majorMarketTotalAmountExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        exportPlus(response,"大中型市场人员总提成金额"+ startDate +"至"+ endDate,result, UserCommissionTotalAmountVO.class);
+    }
+
+    /**
+     * 大中型市场人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/market/commission/current/export")
+    public void marketCurUserDetailExport(@Valid UserCommissionProdVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionProdVO> result = financeRealFundService.marketCurUserDetailExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        String userName = "";
+        if (CollectionUtil.isNotEmpty(result)){
+            userName = result.get(0).getUserName();
+        }
+        exportPlus(response,userName+"_大中型市场人员提成详情"+ startDate +"至"+ endDate,result, UserCommissionProdVO.class);
+    }
+
+    /**
+     * 大中型市场所有人员总提成导出
+     * @param vo
+     * @return
+     */
+    @GetMapping("/major/market/commission/all/export")
+    public void marketAllUserDetailExport(@Valid UserCommissionProdVO vo, HttpServletResponse response)throws IOException {
+        List<UserCommissionProdVO> result = financeRealFundService.marketAllUserDetailExport(vo);
+        String startDate = vo.getStartDate().split(" ")[0];
+        String endDate = vo.getEndDate().split(" ")[0];
+        exportPlus(response,"大中型市场人员提成详情"+ startDate +"至"+ endDate,result, UserCommissionProdVO.class);
+    }
 }
 

+ 18 - 0
dao/src/main/java/com/dayou/mapper/BusinessIncomeMapper.java

@@ -0,0 +1,18 @@
+package com.dayou.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.vo.UserCommissionProdVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/31
+ * created with IntelliJ IDEA.
+ */
+public interface BusinessIncomeMapper {
+
+
+    Page<UserCommissionProdVO> myMajorIncome(Page page, @Param("vo") UserCommissionProdVO vo);
+}

+ 13 - 0
dao/src/main/java/com/dayou/mapper/FinanceRealFundMapper.java

@@ -38,4 +38,17 @@ public interface FinanceRealFundMapper extends CustomBaseMapper<FinanceRealFund>
     List<UserCommissionTotalAmountVO> majorEvaluatorCommission(@Param("vo") UserCommissionTotalAmountVO vo);
 
     List<UserCommissionProdVO> majorEvaluatorCommissionDetail(@Param("vo") UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorEvaluatorTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> evaluatorUserDetailExport(@Param("vo")UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorMarketCommission(@Param("vo") UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> majorMarketCommissionDetail(@Param("vo")UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorMarketTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> marketUserDetailExport(@Param("vo")UserCommissionProdVO vo);
+
 }

+ 69 - 0
dao/src/main/resources/mapper/BusinessIncomeMapper.xml

@@ -0,0 +1,69 @@
+<?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.BusinessIncomeMapper">
+
+    <select id="myMajorIncome" parameterType="com.dayou.vo.UserCommissionProdVO" resultType="com.dayou.vo.UserCommissionProdVO">
+        SELECT
+            mpa.id,
+            fc.claim_amount as realAmount,
+            mp.report_no,
+            IF
+                ( fc.claim_datetime > mp.save_file_date, fc.claim_datetime, mp.save_file_date ) AS settleDate,
+            mp.NAME,
+            mp.created,
+            dd.NAME AS businessCate,
+            bcr.min_ratio AS ratio,
+            mpa.user_id,
+            mpa.ratio AS allotRatio,
+            ( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio ) AS commissionAmount,
+            ( fc.claim_amount * ( bcr.min_ratio / 100 ) ) AS totalAmount,
+            u.name as userName,
+            (case mpa.user_type when 'EVALUATE' then '评估人员' else '市场人员' end) as  userType
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+                UNION ALL
+                SELECT
+                    allot_amount AS claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    created AS claim_datetime
+                FROM
+                    order_fund_allot
+                WHERE
+                    deleted = 0
+                  AND created  &gt;= #{vo.startDate}
+                  AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id,order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, delivery_date,created FROM major_production WHERE deleted = 0 ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id,business_id, production_id, business_type ,commission_rate_id FROM commission_declare WHERE  deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT id,major_id,user_type, major_production_id, user_id, ratio ,declare_id FROM major_production_allot WHERE deleted = 0 ) mpa
+                          ON ( mpa.major_id = m.id and (mpa.major_production_id is null or mpa.major_production_id = mp.id )
+                              and  if(mpa.user_type='MARKET','COMMISSION_DECLARE_MAJOR_MARKET','COMMISSION_DECLARE_MAJOR_EVALUATE') = cd.business_type
+                                 )
+                              and if(mpa.user_type='MARKET',mp.delivery_date is not null,mp.save_file_date is not null)
+                left join user u on u.id = mpa.user_id
+
+        WHERE
+            u.id= #{vo.userId}
+        order by settleDate DESC
+    </select>
+
+</mapper>

+ 5 - 1
dao/src/main/resources/mapper/CommissionDeclareMapper.xml

@@ -78,6 +78,7 @@
         commission_declare
         WHERE
         deleted = 0
+        AND business_type='COMMISSION_DECLARE_MAJOR_MARKET'
         AND declare_user_id = #{marketUserId}) cd ON major.mId = cd.xId) bus left join business_commission_rate bcr on
         bus.commission_rate_id = bcr.id
         LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
@@ -154,7 +155,10 @@
         m.deleted = 0
         AND m.principal_id = #{evaluateUserId}
         ) major
-        LEFT JOIN ( SELECT id, ifnull( production_id, business_id ) AS xId, commission_rate_id,declare_result FROM commission_declare WHERE deleted = 0 and declare_user_id = #{evaluateUserId} ) cd ON major.mId = cd.xId) bus left join business_commission_rate bcr on
+        LEFT JOIN ( SELECT id, ifnull( production_id, business_id ) AS xId, commission_rate_id,declare_result FROM commission_declare
+      WHERE deleted = 0 and declare_user_id = #{evaluateUserId}
+        AND business_type='COMMISSION_DECLARE_MAJOR_EVALUATE'
+      ) cd ON major.mId = cd.xId) bus left join business_commission_rate bcr on
         bus.commission_rate_id = bcr.id left join dict_data dd on dd.id = bcr.business_cate_id
         <where>
             <if test="declare!=null and declare.orderId!=null and declare.orderId!=''">

+ 338 - 10
dao/src/main/resources/mapper/FinanceRealFundMapper.xml

@@ -191,9 +191,10 @@
                     deleted = 0
                   AND production_fund_id IS NOT NULL
                   AND claim_datetime &gt;= #{settleVO.startDate}
-                  AND claim_datetime  &lt;= #{settleVO.endDate} UNION ALL SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
-                                                                                                                                                                                                    AND created &gt;= #{settleVO.startDate}
-                                                                                                                                                                                                    AND created &lt;= #{settleVO.endDate}
+                  AND claim_datetime  &lt;= #{settleVO.endDate} UNION ALL
+                SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
+                    AND created  &gt;= #{settleVO.startDate}
+                    AND created &lt;= #{settleVO.endDate}
             ) fc
                 INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
                 INNER JOIN ( SELECT id, major_id, NAME, report_no, production, evaluate_amount, save_file_date FROM major_production WHERE deleted = 0 AND save_file_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
@@ -271,9 +272,10 @@
                     deleted = 0
                   AND production_fund_id IS NOT NULL
                   AND claim_datetime  &gt;= #{settleVO.startDate}
-                  AND claim_datetime &lt;= #{settleVO.endDate} UNION ALL SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
-                                                                                                                                                                                                   AND created  &gt;= #{settleVO.startDate}
-                                                                                                                                                                                                   AND created &lt;= #{settleVO.endDate}
+                  AND claim_datetime &lt;= #{settleVO.endDate} UNION ALL
+            SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
+                AND created  &gt;= #{settleVO.startDate}
+                AND created &lt;= #{settleVO.endDate}
             ) fc
                 INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
                 INNER JOIN ( SELECT id, major_id, NAME, report_no, production, evaluate_amount, delivery_date FROM major_production WHERE deleted = 0 AND delivery_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
@@ -344,10 +346,18 @@
                     AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
                 LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
                 LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
-                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE' ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id )
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE'
+
+                ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id)
                 LEFT JOIN user u ON u.id = mpa.user_id
+
         GROUP BY
             mpa.user_id
+            having 1=1
+            <if test="vo!=null and vo.userName!=null and vo.userName!=''">
+                and u.name like concat ('%',#{vo.userName},'%')
+            </if>
+        order by commissionTotalAmount DESC
     </select>
 
     <select id="majorEvaluatorCommissionDetail" parameterType="com.dayou.vo.UserCommissionProdVO" resultType="com.dayou.vo.UserCommissionProdVO">
@@ -364,7 +374,8 @@
             mpa.user_id,
             mpa.ratio AS allotRatio,
             ( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio ) AS commissionAmount,
-            ( fc.claim_amount * ( bcr.min_ratio / 100 ) ) AS totalAmount
+            ( fc.claim_amount * ( bcr.min_ratio / 100 ) ) AS totalAmount,
+            u.name as userName
         FROM
             (
                 SELECT
@@ -400,9 +411,326 @@
                     AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
                 LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
                 LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
-                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE' ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id )
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE' ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id)
+                LEFT JOIN user u on u.id = mpa.user_id
         WHERE
             mpa.user_id = #{vo.userId}
         order by settleDate DESC
     </select>
-</mapper>
+
+    <select id="majorEvaluatorTotalAmountExport" parameterType="com.dayou.vo.UserCommissionTotalAmountVO" resultType="com.dayou.vo.UserCommissionTotalAmountVO">
+        SELECT mpa.user_id as id, u.name as userName, ROUND(sum(( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio )),2) AS commissionTotalAmount,
+               '评估人员' as userType,
+               '大中型业务' as businessType,
+               #{vo.startDate} as startDate,
+                #{vo.endDate} as endDate
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+                UNION ALL
+                SELECT
+                    allot_amount AS claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    created AS claim_datetime
+                FROM
+                    order_fund_allot
+                WHERE
+                    deleted = 0
+                  AND created  &gt;= #{vo.startDate}
+                  AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND save_file_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_EVALUATE' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE'
+
+            ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id)
+                LEFT JOIN user u ON u.id = mpa.user_id
+        GROUP BY
+            mpa.user_id
+    </select>
+
+    <select id="evaluatorUserDetailExport" parameterType="com.dayou.vo.UserCommissionProdVO" resultType="com.dayou.vo.UserCommissionProdVO">
+        SELECT
+            mp.id,
+        ROUND(fc.claim_amount,2) as realAmount,
+            mp.report_no,
+            IF
+                ( fc.claim_datetime > mp.save_file_date, fc.claim_datetime, mp.save_file_date ) AS settleDate,
+            mp.NAME,
+            mp.created,
+            dd.NAME AS businessCate,
+        ROUND(bcr.min_ratio,2) AS ratio,
+            mpa.user_id,
+        ROUND(mpa.ratio*100,2) AS allotRatio,
+        ROUND(( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio ),2) AS commissionAmount,
+        ROUND(( fc.claim_amount * ( bcr.min_ratio / 100 ) ),2) AS totalAmount,
+            u.name as userName
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+                UNION ALL
+                SELECT
+                    allot_amount AS claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    created AS claim_datetime
+                FROM
+                    order_fund_allot
+                WHERE
+                    deleted = 0
+                  AND created  &gt;= #{vo.startDate}
+                  AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND save_file_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_EVALUATE' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'EVALUATE' ) mpa ON ( mpa.major_id = m.id AND mpa.major_production_id = mp.id)
+                LEFT JOIN user u on u.id = mpa.user_id
+            <where>
+                <if test="vo!=null and vo.userId!=null">
+                   and mpa.user_id = #{vo.userId}
+                </if>
+            </where>
+        order by mpa.user_id
+    </select>
+
+    <select id="majorMarketCommission" parameterType="com.dayou.vo.UserCommissionTotalAmountVO" resultType="com.dayou.vo.UserCommissionTotalAmountVO">
+        SELECT mpa.user_id as id, u.name as userName, sum(( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio )) AS commissionTotalAmount
+        FROM
+        (
+        SELECT
+        claim_amount,
+        order_fund_id,
+        production_fund_id,
+        claim_datetime
+        FROM
+        finance_claim
+        WHERE
+        deleted = 0
+        AND production_fund_id IS NOT NULL
+        AND claim_datetime &gt;= #{vo.startDate}
+        AND claim_datetime  &lt;= #{vo.endDate}
+
+        UNION ALL SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
+        AND created  &gt;= #{vo.startDate}
+        AND created &lt;= #{vo.endDate}
+        ) fc
+        INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+        INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND delivery_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+        LEFT JOIN major m ON m.id = mp.major_id
+        INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_MARKET' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+        cd.business_id = m.id
+        AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+        LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+        LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+        LEFT JOIN ( SELECT major_id, major_production_id,declare_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'MARKET'
+
+        ) mpa ON ( mpa.major_id = m.id AND cd.id = mpa.declare_id AND (mpa.major_production_id is null or mpa.major_production_id = mp.id ))
+        LEFT JOIN user u ON u.id = mpa.user_id
+
+        GROUP BY
+        mpa.user_id
+        having 1=1
+        <if test="vo!=null and vo.userName!=null and vo.userName!=''">
+            and u.name like concat ('%',#{vo.userName},'%')
+        </if>
+        order by commissionTotalAmount DESC
+    </select>
+
+    <select id="majorMarketCommissionDetail" parameterType="com.dayou.vo.UserCommissionProdVO" resultType="com.dayou.vo.UserCommissionProdVO">
+        SELECT
+            mp.id,
+            fc.claim_amount as realAmount,
+            mp.report_no,
+            IF
+                ( fc.claim_datetime > mp.save_file_date, fc.claim_datetime, mp.save_file_date ) AS settleDate,
+            mp.NAME,
+            mp.created,
+            dd.NAME AS businessCate,
+            bcr.min_ratio AS ratio,
+            mpa.user_id,
+            mpa.ratio AS allotRatio,
+            ( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio ) AS commissionAmount,
+            ( fc.claim_amount * ( bcr.min_ratio / 100 ) ) AS totalAmount,
+            u.name as userName
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+                UNION ALL
+                SELECT
+                    allot_amount AS claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    created AS claim_datetime
+                FROM
+                    order_fund_allot
+                WHERE
+                    deleted = 0
+                  AND created  &gt;= #{vo.startDate}
+                  AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND delivery_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_MARKET' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio,declare_id FROM major_production_allot WHERE deleted = 0 AND user_type = 'MARKET' ) mpa  ON ( mpa.major_id = m.id AND cd.id = mpa.declare_id AND (mpa.major_production_id is null or mpa.major_production_id = mp.id ))
+                LEFT JOIN user u on u.id = mpa.user_id
+        WHERE
+            mpa.user_id = #{vo.userId}
+        order by settleDate DESC
+    </select>
+
+    <select id="majorMarketTotalAmountExport" parameterType="com.dayou.vo.UserCommissionTotalAmountVO" resultType="com.dayou.vo.UserCommissionTotalAmountVO">
+        SELECT mpa.user_id as id, u.name as userName, ROUND(sum(( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio )),2) AS commissionTotalAmount,
+               '市场人员' as userType,
+               '大中型业务' as businessType,
+               #{vo.startDate} as startDate,
+               #{vo.endDate} as endDate
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+
+                UNION ALL
+                SELECT allot_amount AS claim_amount, order_fund_id, production_fund_id, created AS claim_datetime FROM order_fund_allot WHERE deleted = 0
+                AND created  &gt;= #{vo.startDate}
+                AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND delivery_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_MARKET' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT major_id, major_production_id,declare_id, user_id, ratio FROM major_production_allot WHERE deleted = 0 AND user_type = 'MARKET'
+
+            ) mpa ON ( mpa.major_id = m.id AND cd.id = mpa.declare_id AND (mpa.major_production_id is null or mpa.major_production_id = mp.id ))
+                LEFT JOIN user u ON u.id = mpa.user_id
+
+        GROUP BY
+            mpa.user_id
+        order by commissionTotalAmount DESC
+    </select>
+
+    <select id="marketUserDetailExport" parameterType="com.dayou.vo.UserCommissionProdVO" resultType="com.dayou.vo.UserCommissionProdVO">
+        SELECT
+        mp.id,
+        ROUND(fc.claim_amount,2) as realAmount,
+        mp.report_no,
+        IF
+        ( fc.claim_datetime > mp.save_file_date, fc.claim_datetime, mp.save_file_date ) AS settleDate,
+        mp.NAME,
+        mp.created,
+        dd.NAME AS businessCate,
+        ROUND(bcr.min_ratio,2) AS ratio,
+        mpa.user_id,
+        ROUND(mpa.ratio*100,2) AS allotRatio,
+        ROUND(( fc.claim_amount * ( bcr.min_ratio / 100 )* mpa.ratio ),2) AS commissionAmount,
+        ROUND(( fc.claim_amount * ( bcr.min_ratio / 100 ) ),2) AS totalAmount,
+        u.name as userName
+        FROM
+            (
+                SELECT
+                    claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    claim_datetime
+                FROM
+                    finance_claim
+                WHERE
+                    deleted = 0
+                  AND production_fund_id IS NOT NULL
+                  AND claim_datetime &gt;= #{vo.startDate}
+                  AND claim_datetime  &lt;= #{vo.endDate}
+                UNION ALL
+                SELECT
+                    allot_amount AS claim_amount,
+                    order_fund_id,
+                    production_fund_id,
+                    created AS claim_datetime
+                FROM
+                    order_fund_allot
+                WHERE
+                    deleted = 0
+                  AND created  &gt;= #{vo.startDate}
+                  AND created &lt;= #{vo.endDate}
+            ) fc
+                INNER JOIN ( SELECT id, order_fund_id, business_id, production_no FROM production_fund WHERE business_type = 'MAJOR_BUSINESS' AND deleted = 0 ) pf ON ( pf.id = fc.production_fund_id AND pf.order_fund_id = fc.order_fund_id )
+                INNER JOIN ( SELECT id, major_id, NAME, report_no, production, save_file_date, created FROM major_production WHERE deleted = 0 AND delivery_date IS NOT NULL ) mp ON mp.report_no = pf.production_no
+                LEFT JOIN major m ON m.id = mp.major_id
+                INNER JOIN ( SELECT id, business_id, production_id, commission_rate_id FROM commission_declare WHERE business_type = 'COMMISSION_DECLARE_MAJOR_MARKET' AND deleted = 0 AND declare_result = '审核通过' ) cd ON (
+                        cd.business_id = m.id
+                    AND ( cd.production_id IS NULL OR cd.production_id = mp.id ))
+                LEFT JOIN business_commission_rate bcr ON bcr.id = cd.commission_rate_id
+                LEFT JOIN dict_data dd ON dd.id = bcr.business_cate_id
+                LEFT JOIN ( SELECT major_id, major_production_id, user_id, ratio,declare_id FROM major_production_allot WHERE deleted = 0 AND user_type = 'MARKET' ) mpa  ON ( mpa.major_id = m.id AND cd.id = mpa.declare_id AND (mpa.major_production_id is null or mpa.major_production_id = mp.id ))
+                LEFT JOIN user u on u.id = mpa.user_id
+        <where>
+            <if test="vo!=null and vo.userId!=null">
+                and mpa.user_id = #{vo.userId}
+            </if>
+        </where>
+        order by mpa.user_id
+    </select>
+  </mapper>

+ 16 - 12
domain/src/main/java/com/dayou/vo/UserCommissionProdVO.java

@@ -1,5 +1,6 @@
 package com.dayou.vo;
 
+import com.dayou.annotation.Excel;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -16,32 +17,35 @@ import java.time.LocalDate;
 public class UserCommissionProdVO {
 
     /**
-     * 产品id (大中型,资产,个贷 产品id)
+     * 产品id (大中型,资产,个贷 产品,id)
      */
     private Long id;
-
+    @Excel(name = "姓名")
+    private String userName;
+    @Excel(name = "产品号")
     private String reportNo;
-
+    @Excel(name = "项目名称")
     private String name;
-
+    @Excel(name = "项目分类")
     private String businessCate;
-
+    @Excel(name = "提成比例(%)")
     private BigDecimal ratio;
-
+    @Excel(name = "总提成额(元)")
     private BigDecimal totalAmount;
-
+    @Excel(name = "分配比例(%)")
     private BigDecimal allotRatio;
-
+    @Excel(name = "提成额(元)")
     private BigDecimal commissionAmount;
-
+    @Excel(name = "出报告时间")
     private LocalDate created;
-
+    @Excel(name = "实收款(元)")
     private BigDecimal realAmount;
-
+    @Excel(name = "提成日期")
     private LocalDate settleDate;
-
     private Long userId;
 
+    private String userType;
+
     private String startDate;
 
     private String endDate;

+ 13 - 3
domain/src/main/java/com/dayou/vo/UserCommissionTotalAmountVO.java

@@ -1,5 +1,8 @@
 package com.dayou.vo;
 
+import com.dayou.annotation.Excel;
+import com.github.liangbaika.validate.annations.AbcValidate;
+import com.github.liangbaika.validate.enums.Check;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -19,11 +22,18 @@ public class UserCommissionTotalAmountVO {
      */
     private Long id;
 
+    @Excel(name="人员")
     private String userName;
-
+    @Excel(name="提成金额(元)")
     private BigDecimal commissionTotalAmount;
-
+    @Excel(name = "统计时段(开始)")
+    @AbcValidate(required = true,message = "统计时间段不能为空",fun = Check.NotEmpty)
     private String startDate;
-
+    @Excel(name = "统计时段(结束)")
+    @AbcValidate(required = true,message = "统计时间段不能为空",fun = Check.NotEmpty)
     private String endDate;
+    @Excel(name = "人员类型")
+    private String userType;
+    @Excel(name = "业务类型")
+    private String businessType;
 }

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

@@ -0,0 +1,15 @@
+package com.dayou.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.vo.UserCommissionProdVO;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/31
+ * created with IntelliJ IDEA.
+ */
+public interface IBusinessIncomeService {
+    Page<UserCommissionProdVO> myMajorIncome(Page page, UserCommissionProdVO vo);
+}

+ 16 - 0
service/src/main/java/com/dayou/service/IFinanceRealFundService.java

@@ -47,4 +47,20 @@ public interface IFinanceRealFundService extends IService<FinanceRealFund> {
     List<UserCommissionTotalAmountVO> majorEvaluatorCommission(UserCommissionTotalAmountVO vo);
 
     List<UserCommissionProdVO> majorEvaluatorCommissionDetail(UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorEvaluatorTotalAmountExport(UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> evaluatorCurUserDetailExport(UserCommissionProdVO vo);
+
+    List<UserCommissionProdVO> evaluatorAllUserDetailExport(UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorMarketCommission(UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> majorMarketCommissionDetail(UserCommissionProdVO vo);
+
+    List<UserCommissionTotalAmountVO> majorMarketTotalAmountExport(UserCommissionTotalAmountVO vo);
+
+    List<UserCommissionProdVO> marketCurUserDetailExport(UserCommissionProdVO vo);
+
+    List<UserCommissionProdVO> marketAllUserDetailExport(UserCommissionProdVO vo);
 }

+ 31 - 0
service/src/main/java/com/dayou/service/impl/BusinessIncomeServiceImpl.java

@@ -0,0 +1,31 @@
+package com.dayou.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.mapper.BusinessIncomeMapper;
+import com.dayou.service.IBusinessIncomeService;
+import com.dayou.service.IFinanceRealFundService;
+import com.dayou.utils.LoginContext;
+import com.dayou.vo.UserCommissionProdVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/31
+ * created with IntelliJ IDEA.
+ */
+@Service
+public class BusinessIncomeServiceImpl implements IBusinessIncomeService {
+
+    @Autowired
+    private BusinessIncomeMapper businessIncomeMapper;
+    @Override
+    public Page<UserCommissionProdVO> myMajorIncome(Page page, UserCommissionProdVO vo) {
+        Long currentUserId = LoginContext.getCurrentUserId();
+        vo.setUserId(currentUserId);
+        Page<UserCommissionProdVO> ret = businessIncomeMapper.myMajorIncome(page,vo);
+        return ret;
+    }
+}

+ 42 - 0
service/src/main/java/com/dayou/service/impl/FinanceRealFundServiceImpl.java

@@ -139,4 +139,46 @@ public class FinanceRealFundServiceImpl extends ServiceImpl<FinanceRealFundMappe
     public List<UserCommissionProdVO> majorEvaluatorCommissionDetail(UserCommissionProdVO vo) {
         return financeRealFundMapper.majorEvaluatorCommissionDetail(vo);
     }
+
+    @Override
+    public List<UserCommissionTotalAmountVO> majorEvaluatorTotalAmountExport(UserCommissionTotalAmountVO vo) {
+        return financeRealFundMapper.majorEvaluatorTotalAmountExport(vo);
+    }
+
+    @Override
+    public List<UserCommissionProdVO> evaluatorCurUserDetailExport(UserCommissionProdVO vo) {
+        return financeRealFundMapper.evaluatorUserDetailExport(vo);
+    }
+
+    @Override
+    public List<UserCommissionProdVO> evaluatorAllUserDetailExport(UserCommissionProdVO vo) {
+        vo.setUserId(null);
+        return financeRealFundMapper.evaluatorUserDetailExport(vo);
+    }
+
+    @Override
+    public List<UserCommissionTotalAmountVO> majorMarketCommission(UserCommissionTotalAmountVO vo) {
+        return financeRealFundMapper.majorMarketCommission(vo);
+    }
+
+    @Override
+    public List<UserCommissionProdVO> majorMarketCommissionDetail(UserCommissionProdVO vo) {
+        return financeRealFundMapper.majorMarketCommissionDetail(vo);
+    }
+
+    @Override
+    public List<UserCommissionTotalAmountVO> majorMarketTotalAmountExport(UserCommissionTotalAmountVO vo) {
+        return financeRealFundMapper.majorMarketTotalAmountExport(vo);
+    }
+
+    @Override
+    public List<UserCommissionProdVO> marketCurUserDetailExport(UserCommissionProdVO vo) {
+        return financeRealFundMapper.marketUserDetailExport(vo);
+    }
+
+    @Override
+    public List<UserCommissionProdVO> marketAllUserDetailExport(UserCommissionProdVO vo) {
+        vo.setUserId(null);
+        return financeRealFundMapper.marketUserDetailExport(vo);
+    }
 }