yumeng 2 years ago
parent
commit
128d0cbd34

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

@@ -45,6 +45,7 @@ public class KuaishouRuleSettlementDataController extends BaseController {
         if (Check.isNull(data)) {
             return;
         }
+        kuaishouRuleSettlementDataService.data(statDate, data);
         executorService.submit(new Runnable() {
             @Override
             public void run() {

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

@@ -164,11 +164,9 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
         returnJson.put("ruleName", kuaishouSettlementRules.getRuleName());
         List<JSONObject> ruleList = kuaishouRuleSettlementDataMapper.getRuleList(ruleId);
         JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(relateId, promoterId, ruleId); //上次结算命中的规则
-        Long lastValidOrderNum;
-        if (Check.isNull(lastRule)) {
-            lastValidOrderNum = 0L;
-        } else {
-            lastValidOrderNum = lastRule.getLong("lastRule");
+        Long lastValidOrderNum = 0L;
+        if (!Check.isNull(lastRule)) {
+            lastValidOrderNum += lastRule.getLong("validOrderNum");
         }
 
         JSONObject ruleJson = new JSONObject();
@@ -296,11 +294,82 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
                     String lastValidOrderNumStr = String.valueOf(lastValidOrderNum);
                     String substring = lastValidOrderNumStr.substring(lastValidOrderNumStr.length() - 4);
                     Long aLong = Long.valueOf(substring);
-                    complement = 10000 - aLong;
+                    Long curComplement = 10000 - aLong;
+                    if (validOrderNum - lastValidOrderNum <= curComplement) { // 当前单量不够补齐10000单
+                        Long ruleOrder = aLong + (validOrderNum - lastValidOrderNum); //  当前单数补齐上一次结算的最终单数
+                        for (int i = 0; i < ruleList.size(); i++) {
+                            JSONObject rule = ruleList.get(i);
+                            Long startItemCount = rule.getLong("startItemCount");
+                            Long endItemCount = rule.getLong("endItemCount");
+                            if (ruleOrder >= startItemCount && ruleOrder <= endItemCount) {
+                                ruleJson = rule;
+                                break;
+                            }
+                        }
+                        if (Check.isNull(ruleJson) || ruleJson.size() == 0) { // 剩余单量未命中结算规则 直接跳出此次结算计算
+                            returnJson.put("sonRuleId", 0);
+                            returnJson.put("anchorAmount", anchorAmount);
+                            returnJson.put("referenceAmount", referenceAmount);
+                            returnJson.put("settlementStatus", 2);
+                            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+                            return returnJson;
+                        } else {
+                            Integer currentSortCount = ruleJson.getInteger("sortCount"); // 当前结算命中的规则序号
+                            JSONObject amount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, currentSortCount); // 新的规则 序号从0开始
+                            returnJson.put("sonRuleId", ruleJson.getLong("id"));
+                            anchorAmount = anchorAmount.add(amount.getBigDecimal("anchorAmount"));
+                            referenceAmount = referenceAmount.add(amount.getBigDecimal("referenceAmount"));
+                            returnJson.put("anchorAmount", anchorAmount);
+                            returnJson.put("referenceAmount", referenceAmount);
+                            returnJson.put("settlementStatus", 2);
+                            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+                            return returnJson;
+                        }
+                    } else {
+                        complement = 10000 - aLong;
+                    }
+
+
                 } else {
-                    complement = 10000 - lastValidOrderNum;
+                    Long asLong = 10000 - lastValidOrderNum; // 补齐1000单需要的单数
+                    if (validOrderNum - lastValidOrderNum <= asLong) {  // 当前单量不够补齐10000单
+                        Long ruleOrder = lastValidOrderNum + (validOrderNum - lastValidOrderNum); //  当前单数补齐上一次结算的最终单数
+                        for (int i = 0; i < ruleList.size(); i++) {
+                            JSONObject rule = ruleList.get(i);
+                            Long startItemCount = rule.getLong("startItemCount");
+                            Long endItemCount = rule.getLong("endItemCount");
+                            if (ruleOrder >= startItemCount && ruleOrder <= endItemCount) {
+                                ruleJson = rule;
+                                break;
+                            }
+                        }
+                        if (Check.isNull(ruleJson) || ruleJson.size() == 0) { // 剩余单量未命中结算规则 直接跳出此次结算计算
+                            returnJson.put("sonRuleId", 0);
+                            returnJson.put("anchorAmount", anchorAmount);
+                            returnJson.put("referenceAmount", referenceAmount);
+                            returnJson.put("settlementStatus", 2);
+                            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+                            return returnJson;
+                        } else {
+                            Integer currentSortCount = ruleJson.getInteger("sortCount"); // 当前结算命中的规则序号
+                            JSONObject amount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, currentSortCount); // 新的规则 序号从0开始
+                            returnJson.put("sonRuleId", ruleJson.getLong("id"));
+                            anchorAmount = anchorAmount.add(amount.getBigDecimal("anchorAmount"));
+                            referenceAmount = referenceAmount.add(amount.getBigDecimal("referenceAmount"));
+                            returnJson.put("anchorAmount", anchorAmount);
+                            returnJson.put("referenceAmount", referenceAmount);
+                            returnJson.put("settlementStatus", 2);
+                            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+                            return returnJson;
+                        }
+
+                    } else {
+                        complement = 10000 - lastValidOrderNum;
+                    }
+
+
                 }
-                // 查询 上次结算补齐10000w需要激励的金额
+                // 查询 上次结算补齐10000需要激励的金额
                 JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, ruleMaxCount);
                 anchorAmount = anchorAmount.add(totalAmount.getBigDecimal("anchorAmount"));
                 referenceAmount = referenceAmount.add(totalAmount.getBigDecimal("referenceAmount"));