xuqiang 1 rok pred
rodič
commit
9981eed12d

+ 9 - 6
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -70,6 +70,7 @@ import com.ydtech.modules.order.entity.vo.ya.YaExtendInfoDto;
 import com.ydtech.modules.order.entity.vo.yangguang.YgQuoteAccidentVo;
 import com.ydtech.modules.order.entity.vo.zj.ZjQuoteAccidentVo;
 import com.ydtech.modules.order.service.*;
+import com.ydtech.modules.partner.CalculateCommissionUtils;
 import com.ydtech.modules.partner.dao.PartnerPremiumDetailsMapper;
 import com.ydtech.modules.partner.model.PartnerPartnerAccount;
 import com.ydtech.modules.partner.model.PartnerPremiumDetails;
@@ -336,8 +337,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             details.setJqpremium(insAreaCompany.getJqpremium());
             details.setSypremium(insAreaCompany.getSypremium());
             details.setJypremium(insAreaCompany.getJypremium());
-            details.setProportional(String.valueOf(user.getCommissionRate()));
-            details.setExtractFee(details.getSumpremium().multiply(user.getCommissionRate()
+            BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(user.getGrade()));
+            details.setProportional(String.valueOf(bigDecimal));
+            details.setExtractFee(details.getSumpremium().multiply(bigDecimal
                     .divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
             details.setStatus(0);
             details.setType(1);
@@ -345,7 +347,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             details.setCreateTime(new Date());
             details.setLicenseno(insOrders.getLicenseno());
             details.setSource(user.getGrade());
-            int insert = partnerPremiumDetailsMapper.insert(details);
+            partnerPremiumDetailsMapper.insert(details);
             saveFeeLevelInfo(user.getGrade(),user.getReferrerId(),insAreaCompany,userId);
         }
     }
@@ -372,8 +374,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         details.setJqpremium(insAreaCompany.getJqpremium());
         details.setSypremium(insAreaCompany.getSypremium());
         details.setJypremium(insAreaCompany.getJypremium());
-        details.setProportional(String.valueOf(partnerUser.getCommissionRate()));
-        details.setExtractFee(details.getSumpremium().multiply(partnerUser.getCommissionRate()
+        BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()));
+        details.setProportional(String.valueOf(bigDecimal));
+        details.setExtractFee(details.getSumpremium().multiply(bigDecimal
                 .divide(new BigDecimal("100"))).setScale(2, RoundingMode.DOWN));
         details.setStatus(0);
         details.setType(1);
@@ -381,7 +384,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         details.setCreateTime(new Date());
         details.setLicenseno(insOrders.getLicenseno());
         details.setSource(partnerUser.getGrade());
-        int insert = partnerPremiumDetailsMapper.insert(details);
+        partnerPremiumDetailsMapper.insert(details);
         saveFeeLevelInfo(grade,partnerUser.getReferrerId(),insAreaCompany,userId);
 
     }

+ 56 - 0
src/main/java/com/ydtech/modules/partner/CalculateCommissionUtils.java

@@ -0,0 +1,56 @@
+package com.ydtech.modules.partner;
+
+
+import com.ydtech.modules.partner.model.PartnerCommissionRules;
+import com.ydtech.modules.partner.model.vo.CommissionRulesVo;
+import com.ydtech.modules.partner.service.PartnerCommissionService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
+@Component
+public class CalculateCommissionUtils {
+
+
+    private static  PartnerCommissionService commissionService;
+
+    @Autowired
+    public void setCommissionService(PartnerCommissionService commissionService) {
+        this.commissionService = commissionService;
+    }
+
+
+
+    public static BigDecimal calculateCommission(String grade) {
+        CommissionRulesVo rulesVo = commissionService.queryAll();
+        if (StringUtils.equals("1",grade)){
+            return new BigDecimal(rulesVo.getOriginator());
+        }
+        if (StringUtils.equals("2",grade)){
+            PartnerCommissionRules administrator = rulesVo.getAdministrator();
+            return new BigDecimal(administrator.getDefaultRatio());
+        }
+        if (StringUtils.equals("3",grade)){
+            PartnerCommissionRules administrator = rulesVo.getAdministrator();
+            String sharedRatio = administrator.getSharedRatio();
+            String defaultRatio = administrator.getDefaultRatio();
+            BigDecimal subtract = new BigDecimal(sharedRatio).subtract(new BigDecimal(defaultRatio));
+            PartnerCommissionRules partner = rulesVo.getPartner();
+            String defaultRatio1 = partner.getDefaultRatio();
+            return subtract.add(new BigDecimal(defaultRatio1));
+        }
+        if (StringUtils.equals("4",grade)){
+
+            PartnerCommissionRules partner = rulesVo.getPartner();
+            String defaultRatio1 = partner.getDefaultRatio();
+            String sharedRatio = partner.getSharedRatio();
+            return new BigDecimal(sharedRatio).subtract(new BigDecimal(defaultRatio1));
+        }
+        return BigDecimal.ZERO;
+    }
+
+
+
+}

+ 1 - 0
src/main/java/com/ydtech/modules/partner/controller/NewAppPartnerController.java

@@ -151,6 +151,7 @@ public class NewAppPartnerController extends BaseController {
      */
     @GetMapping("/myPerformance")
     public HttpResult myPerformance(@RequestParam Map<String,String> map) {
+        map.put("userId",getUserId());
         return HttpResult.ok("success",partnerUserService.myPerformance(map));
     }
 

+ 6 - 0
src/main/java/com/ydtech/modules/partner/dao/PartnerUserMapper.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.partner.dao;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
@@ -12,6 +13,7 @@ import org.apache.ibatis.annotations.*;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @Mapper
 public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
@@ -73,4 +75,8 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     List<RelationalVo> selectByReferrerId(@Param("userId") String userId,@Param("grade") Integer grade);
 
     List<RelationalVo> selectQuerySuperiors(@Param("userId") String userId,@Param("grade") Integer grade);
+
+    JSONObject myPerformanceTotal(@Param("map")Map<String, String> map, @Param("list") Set<String> list);
+
+    List<JSONObject> queryDataList(@Param("map")Map<String, String> map, @Param("list") Set<String> list);
 }

+ 21 - 22
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerUserServiceImpl.java

@@ -21,6 +21,7 @@ import com.ydtech.modules.esm.model.EsmUserImage;
 import com.ydtech.modules.order.dao.InsUploadFilesMapper;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.TimeConstants;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
+import com.ydtech.modules.partner.CalculateCommissionUtils;
 import com.ydtech.modules.partner.dao.PartnerPartnerAccountMapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.*;
@@ -403,23 +404,13 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
     @Override
     public Object myPerformance(Map<String, String> map) {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("numberOrders","订单笔数");
-        jsonObject.put("totalPremium",0.00);
-        jsonObject.put("commission",0.00);
-
-        JSONObject jsonObject1 = new JSONObject();
-        jsonObject1.put("carId","京K85699");
-        jsonObject1.put("issuanceTime","2024-07-02 09:21:57");
-        jsonObject1.put("agent","代理人");
-        jsonObject1.put("premium",1);
-        jsonObject1.put("commission",0.00);
-        jsonObject1.put("ordersNo","订单号");
-        ArrayList<Object> list = new ArrayList<>();
-        list.add(jsonObject1);
+        Set<String> setList = new HashSet<>();
+        getLevelUserId(map.get("userId"),setList);
+        JSONObject totalMap = baseMapper.myPerformanceTotal(map,setList);
+        List<JSONObject> datalist = baseMapper.queryDataList(map,setList);
         HashMap<String, Object> hashMap = new HashMap<>();
-        hashMap.put("data",list);
-        hashMap.put("total",jsonObject);
+        hashMap.put("data",datalist);
+        hashMap.put("total",totalMap);
         return hashMap;
     }
 
@@ -742,8 +733,11 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         Map<String, Object> voMap = new HashMap<>();
         voMap.put("grade", grade);
         voMap.put("gradeName", rule.getOrDefault(grade, ""));
+        List<Map<String, String>> maps = new ArrayList<>(0);
+        if (CollectionUtil.isNotEmpty(currentUserIds)){
+            maps = baseMapper.userCountVo2(currentUserIds, params);
+        }
 
-        List<Map<String, String>> maps = baseMapper.userCountVo2(currentUserIds, params);
 
 //        Map<String, Integer> mergedMap = arrayList.stream()
 //                .flatMap(map -> map.entrySet().stream())
@@ -812,11 +806,16 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
         if (CollectionUtil.isEmpty(partnerUsers)){
             return HttpResult.error("用户无权益信息");
         }
-        BigDecimal totalAmountSafe = partnerUsers.stream()
-                .map(PartnerUser::getCommissionRate)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
+//        BigDecimal totalAmountSafe = partnerUsers.stream()
+//                .map(PartnerUser::getCommissionRate)
+//                .filter(Objects::nonNull)
+//                .reduce(BigDecimal.ZERO, BigDecimal::add);
 
+        BigDecimal totalAmountSafe = BigDecimal.ZERO;
+        for (PartnerUser partnerUser : partnerUsers) {
+            BigDecimal bigDecimal = CalculateCommissionUtils.calculateCommission(String.valueOf(partnerUser.getGrade()));
+            totalAmountSafe = totalAmountSafe.add(bigDecimal);
+        }
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("totalRate",totalAmountSafe);
 
@@ -827,7 +826,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
             JSONObject object = new JSONObject();
             object.put("grade",user.getGrade());
             object.put("gradeName",rule.getOrDefault(user.getGrade(),""));
-            object.put("commissionRate",user.getCommissionRate());
+            object.put("commissionRate",CalculateCommissionUtils.calculateCommission(String.valueOf(user.getGrade())));
             list.add(object);
         }
         jsonObject.put("data",list);

+ 69 - 19
src/main/resources/mapper/modules/partner/PartnerUserMapper.xml

@@ -93,7 +93,7 @@
     <select id="selectTodayOverview" resultType="com.ydtech.modules.partner.model.vo.TodayOverview">
         SELECT
         (
-            SELECT COUNT(1) FROM ins_orders WHERE orderstatus = '3' AND userid IN
+        SELECT COUNT(DISTINCT company_id) FROM partner_premium_details WHERE DATE(create_time) = CURDATE() AND user_id IN
             <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
                 #{item}
             </foreach>
@@ -103,18 +103,15 @@
 
         ) addPerNumber,
         (
-        SELECT
-        (
-        COALESCE ( SUM( jq_premium ), 0 ) + COALESCE ( SUM( sy_premium ), 0 ) + COALESCE ( SUM( no_premium ), 0 )) AS total_sum FROM ins_fee_order_new where user_id IN
-        <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
-            #{item}
-        </foreach>
+        SELECT SUM(db.sumpremium) FROM (SELECT DISTINCT company_id,sumpremium  FROM partner_premium_details
+            WHERE DATE(create_time) = CURDATE() AND  user_id IN
+            <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            ) db
         ) premium,
         (
-        SELECT SUM(extract_fee) FROM partner_premium_details where user_id IN
-        <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
-            #{item}
-        </foreach>
+        SELECT SUM(extract_fee) FROM partner_premium_details where DATE(create_time) = CURDATE() AND user_id  = #{params.userId}
         ) commission
 
     </select>
@@ -239,10 +236,7 @@ select grade,grade_name from  partner_rule
             GROUP BY issuer_id,sumpremium ) db
             ) v5,
             (
-            SELECT SUM(extract_fee) FROM partner_premium_details WHERE  to_days(create_time) = to_days(now()) AND user_id in
-            <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
-                #{item}
-            </foreach>
+            SELECT SUM(extract_fee) FROM partner_premium_details WHERE  to_days(create_time) = to_days(now()) AND user_id = #{params.userId}
             ) v6
         </if>
         <if test="grade == 3">
@@ -272,10 +266,7 @@ select grade,grade_name from  partner_rule
             GROUP BY issuer_id,sumpremium ) db
             ) v5,
             (
-            SELECT SUM(extract_fee) FROM partner_premium_details WHERE  to_days(create_time) = to_days(now()) AND user_id in
-            <foreach collection="params.relatedPerList" item="item" index="index" separator="," open="(" close=")">
-                #{item}
-            </foreach>
+            SELECT SUM(extract_fee) FROM partner_premium_details WHERE  to_days(create_time) = to_days(now()) AND user_id = #{params.userId}
             ) v6
         </if>
         <if test="grade == 4">
@@ -737,4 +728,63 @@ select grade,grade_name from  partner_rule
     </select>
 
 
+
+    <select id="myPerformanceTotal" resultType="com.alibaba.fastjson.JSONObject">
+    select
+        (select count(DISTINCT company_id) from partner_premium_details WHERE  user_id in
+            <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            <if test="map.startTime != '' and map.startTime != null">
+                and DATE(create_time) BETWEEN #{map.startTime} AND #{map.endTime}
+            </if>
+        ) numberOrders,
+       IFNULL((
+            SELECT SUM(db.sumpremium) FROM (
+            SELECT sumpremium FROM partner_premium_details WHERE  user_id in
+            <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            <if test="map.startTime != '' and map.startTime != null">
+                and DATE(create_time) BETWEEN #{map.startTime} AND #{map.endTime}
+            </if>
+            GROUP BY issuer_id,sumpremium ) db
+            ),0
+        ) totalPremium,
+        IFNULL((
+            SELECT SUM(extract_fee) FROM partner_premium_details WHERE  user_id = #{map.userId}
+            <if test="map.startTime != '' and map.startTime != null">
+                and DATE(create_time) BETWEEN #{map.startTime} AND #{map.endTime}
+            </if>
+            ),0
+        ) commission
+    </select>
+
+
+
+    <select id="queryDataList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            orderno ordersNo,
+            licenseno carId,
+            issuer_name agent,
+            sumpremium premium,
+            extract_fee commission,
+            create_time issuanceTime
+        FROM
+            partner_premium_details
+        WHERE
+            user_id = #{map.userId}
+            <if test="map.startTime != '' and map.startTime != null">
+                and DATE(create_time) BETWEEN #{map.startTime} AND #{map.endTime}
+            </if>
+        GROUP BY
+            orderno,
+            licenseno,
+            issuer_name,
+            sumpremium,
+            extract_fee,
+            create_time
+    </select>
+
+
 </mapper>