Browse Source

达人结算

yumeng 2 years ago
parent
commit
bb9264111e

+ 2 - 2
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouRuleSettlementDataController.java

@@ -61,8 +61,8 @@ public class KuaishouRuleSettlementDataController extends BaseController {
     }
     }
 
 
     @GetMapping("/testData")
     @GetMapping("/testData")
-    public JSONObject testData(Long relateId, Long promoterId, Long ruleId, Long orderNum, Long validOrderNum, Long yesterdayOrderNum, Long yesterdayValidOrderNum) {
-        return kuaishouRuleSettlementDataService.getRuleData(relateId, promoterId, ruleId, orderNum, validOrderNum, yesterdayOrderNum, yesterdayValidOrderNum);
+    public JSONObject testData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
+        return kuaishouRuleSettlementDataService.getOrderRuleData(relateId, promoterId, ruleId, validOrderNum);
 
 
     }
     }
 
 

+ 8 - 4
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouSettlementRulesController.java

@@ -60,10 +60,14 @@ public class KuaishouSettlementRulesController extends BaseController {
             if (Check.isNull(requestJson)) {
             if (Check.isNull(requestJson)) {
                 throw new Exception("入参不能为空");
                 throw new Exception("入参不能为空");
             }
             }
-            JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
-            if (Check.isNull(ruleDetails)) {
-                throw new Exception("请输入规则详情");
-            }
+
+
+                JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
+                if (Check.isNull(ruleDetails)) {
+                    throw new Exception("请输入规则详情");
+                }
+
+
             kuaishouSettlementRulesService.addRules(requestJson);
             kuaishouSettlementRulesService.addRules(requestJson);
             returnJson.put("code", 0);
             returnJson.put("code", 0);
             returnJson.put("message", "新增成功");
             returnJson.put("message", "新增成功");

+ 10 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/entity/KuaishouRuleSettlementData.java

@@ -24,6 +24,7 @@ public class KuaishouRuleSettlementData extends BaseEntity {
      */
      */
     @Excel(name = "规则id")
     @Excel(name = "规则id")
     private Long ruleId;
     private Long ruleId;
+    private Integer ruleType;
 
 
     /**
     /**
      * 规则名称
      * 规则名称
@@ -155,6 +156,14 @@ public class KuaishouRuleSettlementData extends BaseEntity {
         this.ruleId = ruleId;
         this.ruleId = ruleId;
     }
     }
 
 
+    public Integer getRuleType() {
+        return ruleType;
+    }
+
+    public void setRuleType(Integer ruleType) {
+        this.ruleType = ruleType;
+    }
+
     public String getRuleName() {
     public String getRuleName() {
         return ruleName;
         return ruleName;
     }
     }
@@ -312,6 +321,7 @@ public class KuaishouRuleSettlementData extends BaseEntity {
         return "KuaishouRuleSettlementData{" +
         return "KuaishouRuleSettlementData{" +
                 "id=" + id +
                 "id=" + id +
                 ", ruleId=" + ruleId +
                 ", ruleId=" + ruleId +
+                ", ruleType=" + ruleType +
                 ", ruleName='" + ruleName + '\'' +
                 ", ruleName='" + ruleName + '\'' +
                 ", sonRuleId=" + sonRuleId +
                 ", sonRuleId=" + sonRuleId +
                 ", relateId=" + relateId +
                 ", relateId=" + relateId +

+ 2 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouRuleSettlementDataMapper.java

@@ -84,4 +84,6 @@ public interface KuaishouRuleSettlementDataMapper {
     void updatePromoterStatus(@Param("statDate") Long statDate, @Param("promoterId") Long promoterId, @Param("status") Integer status);
     void updatePromoterStatus(@Param("statDate") Long statDate, @Param("promoterId") Long promoterId, @Param("status") Integer status);
 
 
     List<JSONObject> getPromoterSettlementDetail(@Param("date") Long date, @Param("promoterId") Long promoterId, @Param("settlementStatus") Integer settlementStatus);
     List<JSONObject> getPromoterSettlementDetail(@Param("date") Long date, @Param("promoterId") Long promoterId, @Param("settlementStatus") Integer settlementStatus);
+
+    JSONObject getRuleJson(Long ruleId);
 }
 }

+ 3 - 1
ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouRuleSettlementDataService.java

@@ -63,7 +63,9 @@ public interface IKuaishouRuleSettlementDataService {
 
 
     void data(Long statDate, JSONArray dataArr);
     void data(Long statDate, JSONArray dataArr);
 
 
-    JSONObject getRuleData(Long relateId, Long promoterId, Long ruleId, Long orderNum, Long validOrderNum, Long yesterdayOrderNum, Long yesterdayValidOrderNum);
+    JSONObject getRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum);
+
+    JSONObject getOrderRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum);
 
 
     List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName);
     List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName);
 
 

+ 86 - 8
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouRuleSettlementDataServiceImpl.java

@@ -123,7 +123,14 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
                 }
                 }
                 Long yesterdayOrderNum = dataJson.getLong("yesterdayOrderNum");
                 Long yesterdayOrderNum = dataJson.getLong("yesterdayOrderNum");
                 Long yesterdayValidOrderNum = dataJson.getLong("yesterdayValidOrderNum");
                 Long yesterdayValidOrderNum = dataJson.getLong("yesterdayValidOrderNum");
-                JSONObject ruleData = getRuleData(relateId, promoterId, ruleId, orderNum, validOrderNum, yesterdayOrderNum, yesterdayValidOrderNum);
+                Integer rule_type = dataJson.getInteger("rule_type");
+                JSONObject ruleData = new JSONObject();
+                if (rule_type == 1) {
+                    ruleData = getRuleData(relateId, promoterId, ruleId,  validOrderNum);
+
+                } else if (rule_type == 2) {
+                    ruleData = getOrderRuleData(relateId, promoterId, ruleId, validOrderNum);
+                }
                 settlementData.setRuleId(ruleId);
                 settlementData.setRuleId(ruleId);
                 settlementData.setRuleName(ruleData.getString("ruleName"));
                 settlementData.setRuleName(ruleData.getString("ruleName"));
                 settlementData.setSonRuleId(ruleData.getLong("sonRuleId"));
                 settlementData.setSonRuleId(ruleData.getLong("sonRuleId"));
@@ -144,6 +151,7 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
                 settlementData.setReferenceAmount(ruleData.getBigDecimal("referenceAmount"));
                 settlementData.setReferenceAmount(ruleData.getBigDecimal("referenceAmount"));
                 settlementData.setSettlementStatus(ruleData.getInteger("settlementStatus"));
                 settlementData.setSettlementStatus(ruleData.getInteger("settlementStatus"));
                 settlementData.setLastSettlementOrderNum(ruleData.getLong("lastSettlementOrderNum"));
                 settlementData.setLastSettlementOrderNum(ruleData.getLong("lastSettlementOrderNum"));
+                settlementData.setRuleType(rule_type);
                 adds.add(settlementData);
                 adds.add(settlementData);
             }
             }
             if (!Check.isNull(adds)) {
             if (!Check.isNull(adds)) {
@@ -154,8 +162,10 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
         }
         }
     }
     }
 
 
+
+    // 按区间结算
     @Override
     @Override
-    public JSONObject getRuleData(Long relateId, Long promoterId, Long ruleId, Long orderNum, Long validOrderNum, Long yesterdayOrderNum, Long yesterdayValidOrderNum) {
+    public JSONObject getRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
         JSONObject returnJson = new JSONObject();
         JSONObject returnJson = new JSONObject();
         BigDecimal anchorAmount = new BigDecimal(0); // 达人激励
         BigDecimal anchorAmount = new BigDecimal(0); // 达人激励
         BigDecimal referenceAmount = new BigDecimal(0); // 推荐人激励
         BigDecimal referenceAmount = new BigDecimal(0); // 推荐人激励
@@ -329,7 +339,6 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
                         complement = 10000 - aLong;
                         complement = 10000 - aLong;
                     }
                     }
 
 
-
                 } else {
                 } else {
                     Long asLong = 10000 - lastValidOrderNum; // 补齐1000单需要的单数
                     Long asLong = 10000 - lastValidOrderNum; // 补齐1000单需要的单数
                     if (validOrderNum - lastValidOrderNum <= asLong) {  // 当前单量不够补齐10000单
                     if (validOrderNum - lastValidOrderNum <= asLong) {  // 当前单量不够补齐10000单
@@ -366,8 +375,6 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
                     } else {
                     } else {
                         complement = 10000 - lastValidOrderNum;
                         complement = 10000 - lastValidOrderNum;
                     }
                     }
-
-
                 }
                 }
                 // 查询 上次结算补齐10000需要激励的金额
                 // 查询 上次结算补齐10000需要激励的金额
                 JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, ruleMaxCount);
                 JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, ruleMaxCount);
@@ -413,9 +420,80 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
         return returnJson;
         return returnJson;
     }
     }
 
 
+
+    // 按单量结算
+    @Override
+    public JSONObject getOrderRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
+        JSONObject returnJson = new JSONObject();
+        BigDecimal anchorAmount = new BigDecimal(0); // 达人激励
+        BigDecimal referenceAmount = new BigDecimal(0); // 推荐人激励
+        KuaishouSettlementRules kuaishouSettlementRules = settlementRulesService.selectKuaishouSettlementRulesById(ruleId);
+
+        JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(relateId, promoterId, ruleId); //上次结算命中的规则
+        Long lastValidOrderNum = 0L;
+        if (!Check.isNull(lastRule)) {
+            lastValidOrderNum += lastRule.getLong("validOrderNum");
+        }
+        JSONObject ruleJson = kuaishouRuleSettlementDataMapper.getRuleJson(ruleId);
+        if (Check.isNull(ruleJson)) {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+        Integer itemCount = ruleJson.getInteger("startItemCount"); // 规则单数
+        BigDecimal ruleAnchorAmount = ruleJson.getBigDecimal("anchorAmount"); // 规则达人激励金额
+        BigDecimal ruleReferenceAmount = ruleJson.getBigDecimal("referenceAmount"); // 规则达人激励金额
+
+        if (validOrderNum < itemCount) {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+
+
+        Integer incentivizedCount = (int) Math.floor(validOrderNum / itemCount); // 需要结算的次数
+        Integer lastIncentivizedCount = kuaishouRuleSettlementDataMapper.selectIncentiveLog(relateId, promoterId); // 已结算次数
+        if (Check.isNull(lastIncentivizedCount)) {
+            lastIncentivizedCount = 0;
+        }
+        if (incentivizedCount > lastIncentivizedCount) {
+            BigDecimal count = new BigDecimal(incentivizedCount - lastIncentivizedCount);
+            BigDecimal promoterIncentiveAmount = count.multiply(ruleAnchorAmount); // 达人奖励
+            BigDecimal referenceIncentiveAmount = count.multiply(ruleReferenceAmount); // 推荐人奖励
+            anchorAmount = anchorAmount.add(promoterIncentiveAmount);
+            referenceAmount = referenceAmount.add(referenceIncentiveAmount);
+            kuaishouRuleSettlementDataMapper.replaceIncentiveLog(relateId, promoterId, ruleId, incentivizedCount, lastIncentivizedCount);
+            returnJson.put("sonRuleId", ruleJson.getLong("id"));
+            returnJson.put("ruleName", kuaishouSettlementRules.getRuleName());
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 2);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+
+        } else {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+    }
+
+
     @Override
     @Override
     public List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName) {
     public List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName) {
-        return kuaishouRuleSettlementDataMapper.getSettlementDate(statDate,promoterId,promoterName);
+        return kuaishouRuleSettlementDataMapper.getSettlementDate(statDate, promoterId, promoterName);
     }
     }
 
 
     @Override
     @Override
@@ -424,8 +502,8 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
     }
     }
 
 
     @Override
     @Override
-    public List<JSONObject> getPromoterSettlementDetail(Long date, Long promoterId,Integer settlementStatus) {
-        return kuaishouRuleSettlementDataMapper.getPromoterSettlementDetail(date,promoterId,settlementStatus);
+    public List<JSONObject> getPromoterSettlementDetail(Long date, Long promoterId, Integer settlementStatus) {
+        return kuaishouRuleSettlementDataMapper.getPromoterSettlementDetail(date, promoterId, settlementStatus);
     }
     }
 }
 }
 
 

+ 17 - 18
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouSettlementRulesServiceImpl.java

@@ -120,25 +120,24 @@ public class KuaishouSettlementRulesServiceImpl implements IKuaishouSettlementRu
         settlementRules.setUserName(userName);
         settlementRules.setUserName(userName);
         int i = kuaishouSettlementRulesMapper.insertKuaishouSettlementRules(settlementRules);
         int i = kuaishouSettlementRulesMapper.insertKuaishouSettlementRules(settlementRules);
         if (i > 0) {
         if (i > 0) {
-            JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
             List<KuaishouRuleDetail> details = new ArrayList<>();
             List<KuaishouRuleDetail> details = new ArrayList<>();
-
-            for (int j = 0; j < ruleDetails.size(); j++) {
-                JSONObject jsonObject = ruleDetails.getJSONObject(j);
-                KuaishouRuleDetail detail = new KuaishouRuleDetail();
-                detail.setRuleId(newId);
-                Integer startItemCount = jsonObject.getInteger("startItemCount");
-                Integer endItemCount = jsonObject.getInteger("endItemCount");
-                BigDecimal anchorAmount = jsonObject.getBigDecimal("anchorAmount");
-                BigDecimal referenceAmount = jsonObject.getBigDecimal("referenceAmount");
-                Integer sortCount = jsonObject.getInteger("sortCount");
-                detail.setStartItemCount(startItemCount);
-                detail.setEndItemCount(endItemCount);
-                detail.setAnchorAmount(anchorAmount);
-                detail.setReferenceAmount(referenceAmount);
-                detail.setSortCount(sortCount);
-                details.add(detail);
-            }
+                JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
+                for (int j = 0; j < ruleDetails.size(); j++) {
+                    JSONObject jsonObject = ruleDetails.getJSONObject(j);
+                    KuaishouRuleDetail detail = new KuaishouRuleDetail();
+                    detail.setRuleId(newId);
+                    Integer startItemCount = jsonObject.getInteger("startItemCount");
+                    Integer endItemCount = jsonObject.getInteger("endItemCount");
+                    BigDecimal anchorAmount = jsonObject.getBigDecimal("anchorAmount");
+                    BigDecimal referenceAmount = jsonObject.getBigDecimal("referenceAmount");
+                    Integer sortCount = jsonObject.getInteger("sortCount");
+                    detail.setStartItemCount(startItemCount);
+                    detail.setEndItemCount(endItemCount);
+                    detail.setAnchorAmount(anchorAmount);
+                    detail.setReferenceAmount(referenceAmount);
+                    detail.setSortCount(sortCount);
+                    details.add(detail);
+                }
             if (!Check.isNull(details)) {
             if (!Check.isNull(details)) {
                 kuaishouRuleDetailMapper.addAll(details);
                 kuaishouRuleDetailMapper.addAll(details);
             }
             }

+ 18 - 1
ruixuan-live/src/main/resources/mapper/isc/KuaishouRuleSettlementDataMapper.xml

@@ -7,6 +7,7 @@
     <resultMap type="com.ruixuan.isc.entity.KuaishouRuleSettlementData" id="KuaishouRuleSettlementDataResult">
     <resultMap type="com.ruixuan.isc.entity.KuaishouRuleSettlementData" id="KuaishouRuleSettlementDataResult">
         <result property="id" column="id"/>
         <result property="id" column="id"/>
         <result property="ruleId" column="rule_id"/>
         <result property="ruleId" column="rule_id"/>
+        <result property="ruleType" column="rule_type"/>
         <result property="ruleName" column="rule_name"/>
         <result property="ruleName" column="rule_name"/>
         <result property="sonRuleId" column="son_rule_id"/>
         <result property="sonRuleId" column="son_rule_id"/>
         <result property="relateId" column="relate_id"/>
         <result property="relateId" column="relate_id"/>
@@ -30,7 +31,7 @@
     </resultMap>
     </resultMap>
 
 
     <sql id="selectKuaishouRuleSettlementDataVo">
     <sql id="selectKuaishouRuleSettlementDataVo">
-        select id, rule_id, rule_name, son_rule_id, relate_id, item_ids, promoter_id, promoter_name, item_create_id, item_create_name, promoter_create_id, promoter_create_name, order_num, valid_order_num, yesterday_order_num, yesterday_valid_order_num, stat_date, anchor_amount, reference_amount, settlement_status, create_time, update_time from kuaishou_rule_settlement_data
+        select id, rule_id, rule_type,rule_name, son_rule_id, relate_id, item_ids, promoter_id, promoter_name, item_create_id, item_create_name, promoter_create_id, promoter_create_name, order_num, valid_order_num, yesterday_order_num, yesterday_valid_order_num, stat_date, anchor_amount, reference_amount, settlement_status, create_time, update_time from kuaishou_rule_settlement_data
     </sql>
     </sql>
 
 
     <select id="selectKuaishouRuleSettlementDataList" parameterType="com.ruixuan.isc.entity.KuaishouRuleSettlementData"
     <select id="selectKuaishouRuleSettlementDataList" parameterType="com.ruixuan.isc.entity.KuaishouRuleSettlementData"
@@ -77,6 +78,7 @@
         <trim prefix="(" suffix=")" suffixOverrides=",">
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id != null">id,</if>
             <if test="id != null">id,</if>
             <if test="ruleId != null">rule_id,</if>
             <if test="ruleId != null">rule_id,</if>
+            <if test="ruleType != null">rule_type,</if>
             <if test="ruleName != null">rule_name,</if>
             <if test="ruleName != null">rule_name,</if>
             <if test="sonRuleId != null">son_rule_id,</if>
             <if test="sonRuleId != null">son_rule_id,</if>
             <if test="relateId != null">relate_id,</if>
             <if test="relateId != null">relate_id,</if>
@@ -101,6 +103,7 @@
         <trim prefix="values (" suffix=")" suffixOverrides=",">
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="id != null">#{id},</if>
             <if test="ruleId != null">#{ruleId},</if>
             <if test="ruleId != null">#{ruleId},</if>
+            <if test="ruleType != null">#{ruleType},</if>
             <if test="ruleName != null">#{ruleName},</if>
             <if test="ruleName != null">#{ruleName},</if>
             <if test="sonRuleId != null">#{sonRuleId},</if>
             <if test="sonRuleId != null">#{sonRuleId},</if>
             <if test="relateId != null">#{relateId},</if>
             <if test="relateId != null">#{relateId},</if>
@@ -129,6 +132,7 @@
         update kuaishou_rule_settlement_data
         update kuaishou_rule_settlement_data
         <trim prefix="SET" suffixOverrides=",">
         <trim prefix="SET" suffixOverrides=",">
             <if test="ruleId != null">rule_id = #{ruleId},</if>
             <if test="ruleId != null">rule_id = #{ruleId},</if>
+            <if test="ruleType != null">rule_type = #{ruleType},</if>
             <if test="ruleName != null">rule_name = #{ruleName},</if>
             <if test="ruleName != null">rule_name = #{ruleName},</if>
             <if test="sonRuleId != null">son_rule_id = #{sonRuleId},</if>
             <if test="sonRuleId != null">son_rule_id = #{sonRuleId},</if>
             <if test="relateId != null">relate_id = #{relateId},</if>
             <if test="relateId != null">relate_id = #{relateId},</if>
@@ -349,10 +353,22 @@
         order by anchor_amount desc
         order by anchor_amount desc
 
 
     </select>
     </select>
+    <select id="getRuleJson" resultType="com.alibaba.fastjson.JSONObject" parameterType="java.lang.Long">
+         select
+        id as 'id',
+        rule_id as 'ruleId',
+        start_item_count as 'startItemCount',
+        anchor_amount as 'anchorAmount',
+        reference_amount as 'referenceAmount',
+        sort_count as 'sortCount'
+        from kuaishou_rule_detail where rule_id = #{ruleId}
+        order by  create_time desc limit 1
+    </select>
 
 
     <insert id="replaceDatas">
     <insert id="replaceDatas">
         replace into kuaishou_rule_settlement_data(
         replace into kuaishou_rule_settlement_data(
         rule_id,
         rule_id,
+        rule_type,
         rule_name,
         rule_name,
         son_rule_id,
         son_rule_id,
         relate_id,
         relate_id,
@@ -377,6 +393,7 @@
         <foreach collection="adds" item="add" separator=",">
         <foreach collection="adds" item="add" separator=",">
             (
             (
             #{add.ruleId},
             #{add.ruleId},
+            #{add.ruleType},
             #{add.ruleName},
             #{add.ruleName},
             #{add.sonRuleId},
             #{add.sonRuleId},
             #{add.relateId},
             #{add.relateId},