123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 |
- package com.ruixuan.isc.service.impl;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.ruixuan.common.utils.Check;
- import com.ruixuan.common.utils.DateUtils;
- import com.ruixuan.isc.entity.KuaishouRuleSettlementData;
- import com.ruixuan.isc.entity.KuaishouSettlementRules;
- import com.ruixuan.isc.mapper.KuaishouRuleSettlementDataMapper;
- import com.ruixuan.isc.service.IKuaishouRuleSettlementDataService;
- import com.ruixuan.isc.service.IKuaishouSettlementRulesService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 【请填写功能名称】Service业务层处理
- *
- * @author ruoyi
- * @date 2023-05-16
- */
- @Service
- @Slf4j
- public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettlementDataService {
- @Autowired
- private KuaishouRuleSettlementDataMapper kuaishouRuleSettlementDataMapper;
- @Autowired
- private IKuaishouSettlementRulesService settlementRulesService;
- /**
- * 查询【请填写功能名称】
- *
- * @param id 【请填写功能名称】主键
- * @return 【请填写功能名称】
- */
- @Override
- public KuaishouRuleSettlementData selectKuaishouRuleSettlementDataById(Long id) {
- return kuaishouRuleSettlementDataMapper.selectKuaishouRuleSettlementDataById(id);
- }
- /**
- * 查询【请填写功能名称】列表
- *
- * @param kuaishouRuleSettlementData 【请填写功能名称】
- * @return 【请填写功能名称】
- */
- @Override
- public List<KuaishouRuleSettlementData> selectKuaishouRuleSettlementDataList(KuaishouRuleSettlementData kuaishouRuleSettlementData) {
- return kuaishouRuleSettlementDataMapper.selectKuaishouRuleSettlementDataList(kuaishouRuleSettlementData);
- }
- /**
- * 新增【请填写功能名称】
- *
- * @param kuaishouRuleSettlementData 【请填写功能名称】
- * @return 结果
- */
- @Override
- public int insertKuaishouRuleSettlementData(KuaishouRuleSettlementData kuaishouRuleSettlementData) {
- kuaishouRuleSettlementData.setCreateTime(DateUtils.getNowDate());
- return kuaishouRuleSettlementDataMapper.insertKuaishouRuleSettlementData(kuaishouRuleSettlementData);
- }
- /**
- * 修改【请填写功能名称】
- *
- * @param kuaishouRuleSettlementData 【请填写功能名称】
- * @return 结果
- */
- @Override
- public int updateKuaishouRuleSettlementData(KuaishouRuleSettlementData kuaishouRuleSettlementData) {
- kuaishouRuleSettlementData.setUpdateTime(DateUtils.getNowDate());
- return kuaishouRuleSettlementDataMapper.updateKuaishouRuleSettlementData(kuaishouRuleSettlementData);
- }
- /**
- * 批量删除【请填写功能名称】
- *
- * @param ids 需要删除的【请填写功能名称】主键
- * @return 结果
- */
- @Override
- public int deleteKuaishouRuleSettlementDataByIds(Long[] ids) {
- return kuaishouRuleSettlementDataMapper.deleteKuaishouRuleSettlementDataByIds(ids);
- }
- /**
- * 删除【请填写功能名称】信息
- *
- * @param id 【请填写功能名称】主键
- * @return 结果
- */
- @Override
- public int deleteKuaishouRuleSettlementDataById(Long id) {
- return kuaishouRuleSettlementDataMapper.deleteKuaishouRuleSettlementDataById(id);
- }
- @Override
- public void data(Long statDate, JSONArray dataArr) {
- if (!Check.isNull(dataArr)) {
- List<KuaishouRuleSettlementData> adds = new ArrayList<>();
- for (int i = 0; i < dataArr.size(); i++) {
- JSONObject dataJson = dataArr.getJSONObject(i);
- KuaishouRuleSettlementData settlementData = new KuaishouRuleSettlementData();
- Long relateId = dataJson.getLong("relateId");
- Long ruleId = dataJson.getLong("ruleId");
- String itemIds = dataJson.getString("itemIds");
- Long promoterId = dataJson.getLong("promoterId");
- String promoterName = dataJson.getString("promoterName");
- Long itemCreateId = dataJson.getLong("itemCreateId");
- String itemCreateName = dataJson.getString("itemCreateName");
- Long promoterCreateId = dataJson.getLong("promoterCreateId");
- String promoterCreateName = dataJson.getString("promoterCreateName");
- Long orderNum = dataJson.getLong("orderNum");
- Long validOrderNum = dataJson.getLong("validOrderNum");
- if (validOrderNum == 0 || Check.isNull(validOrderNum)) {
- continue;
- }
- Long yesterdayOrderNum = dataJson.getLong("yesterdayOrderNum");
- Long yesterdayValidOrderNum = dataJson.getLong("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.setRuleName(ruleData.getString("ruleName"));
- settlementData.setSonRuleId(ruleData.getLong("sonRuleId"));
- settlementData.setRelateId(relateId);
- settlementData.setItemIds(itemIds);
- settlementData.setPromoterId(promoterId);
- settlementData.setPromoterName(promoterName);
- settlementData.setItemCreateId(itemCreateId);
- settlementData.setItemCreateName(itemCreateName);
- settlementData.setPromoterCreateId(promoterCreateId);
- settlementData.setPromoterCreateName(promoterCreateName);
- settlementData.setOrderNum(orderNum);
- settlementData.setValidOrderNum(validOrderNum);
- settlementData.setYesterdayOrderNum(yesterdayOrderNum);
- settlementData.setYesterdayValidOrderNum(yesterdayValidOrderNum);
- settlementData.setStatDate(statDate);
- settlementData.setAnchorAmount(ruleData.getBigDecimal("anchorAmount"));
- settlementData.setReferenceAmount(ruleData.getBigDecimal("referenceAmount"));
- settlementData.setSettlementStatus(ruleData.getInteger("settlementStatus"));
- settlementData.setLastSettlementOrderNum(ruleData.getLong("lastSettlementOrderNum"));
- settlementData.setRuleType(rule_type);
- adds.add(settlementData);
- }
- if (!Check.isNull(adds)) {
- kuaishouRuleSettlementDataMapper.replaceDatas(adds);
- log.info("结算信息入库完成,时间:{},数据量:{}", statDate, adds.size());
- }
- }
- }
- @Override
- public void promoterData(Long statDate, JSONArray dataArr) {
- if (!Check.isNull(dataArr)) {
- List<KuaishouRuleSettlementData> adds = new ArrayList<>();
- for (int i = 0; i < dataArr.size(); i++) {
- JSONObject dataJson = dataArr.getJSONObject(i);
- KuaishouRuleSettlementData settlementData = new KuaishouRuleSettlementData();
- Long relateId = dataJson.getLong("relateId");
- Long ruleId = dataJson.getLong("ruleId");
- Long promoterId = dataJson.getLong("promoterId");
- String promoterName = dataJson.getString("promoterName");
- Long orderNum = dataJson.getLong("orderNum");
- Long validOrderNum = dataJson.getLong("validOrderNum");
- if (validOrderNum == 0 || Check.isNull(validOrderNum)) {
- continue;
- }
- Long yesterdayOrderNum = dataJson.getLong("yesterdayOrderNum");
- Long yesterdayValidOrderNum = dataJson.getLong("yesterdayValidOrderNum");
- Integer rule_type = dataJson.getInteger("rule_type");
- JSONObject ruleData = new JSONObject();
- if (rule_type == 3) {
- ruleData = getPromoterRuleData(relateId, promoterId, ruleId, validOrderNum);
- } else {
- continue;
- }
- settlementData.setRuleId(ruleId);
- settlementData.setRuleName(ruleData.getString("ruleName"));
- settlementData.setSonRuleId(ruleData.getLong("sonRuleId"));
- settlementData.setPromoterId(promoterId);
- settlementData.setPromoterName(promoterName);
- settlementData.setOrderNum(orderNum);
- settlementData.setValidOrderNum(validOrderNum);
- settlementData.setYesterdayOrderNum(yesterdayOrderNum);
- settlementData.setYesterdayValidOrderNum(yesterdayValidOrderNum);
- settlementData.setStatDate(statDate);
- settlementData.setAnchorAmount(ruleData.getBigDecimal("anchorAmount"));
- settlementData.setReferenceAmount(ruleData.getBigDecimal("referenceAmount"));
- settlementData.setSettlementStatus(ruleData.getInteger("settlementStatus"));
- settlementData.setLastSettlementOrderNum(ruleData.getLong("lastSettlementOrderNum"));
- settlementData.setRuleType(rule_type);
- adds.add(settlementData);
- }
- if (!Check.isNull(adds)) {
- kuaishouRuleSettlementDataMapper.replaceDatas(adds);
- log.info("结算信息入库完成,时间:{},数据量:{}", statDate, adds.size());
- }
- }
- }
- @Override
- public List<JSONObject> getSettlementDataV2(Long date, Long promoterId, String promoterName) {
- return kuaishouRuleSettlementDataMapper.getSettlementDataV2(date, promoterId, promoterName);
- }
- // 按区间结算
- @Override
- public JSONObject getRuleData(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);
- returnJson.put("ruleId", ruleId);
- returnJson.put("ruleName", kuaishouSettlementRules.getRuleName());
- List<JSONObject> ruleList = kuaishouRuleSettlementDataMapper.getRuleList(ruleId);
- JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(relateId, promoterId, ruleId); //上次结算命中的规则
- Long lastValidOrderNum = 0L;
- if (!Check.isNull(lastRule)) {
- lastValidOrderNum += lastRule.getLong("validOrderNum");
- }
- JSONObject ruleJson = new JSONObject();
- if (validOrderNum <= lastValidOrderNum) { // 有效订单数据小于等于昨天 不做结算
- returnJson.put("ruleId", ruleId);
- 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;
- } else if (validOrderNum < 10000) { // 单量 小于等于1w 在第一个结算周期内
- for (int i = 0; i < ruleList.size(); i++) {
- JSONObject rule = ruleList.get(i);
- Long startItemCount = rule.getLong("startItemCount");
- Long endItemCount = rule.getLong("endItemCount");
- if (validOrderNum >= startItemCount && validOrderNum <= 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", 1);
- returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
- return returnJson;
- }
- Integer lastSortCount = null;
- if (Check.isNull(lastRule)) {
- lastSortCount = 0;
- }
- if (!Check.isNull(lastRule)) {
- Integer sortCount = lastRule.getInteger("sortCount"); // 上次结算命中的规则序号
- if (Check.isNull(sortCount)) {
- lastSortCount = 0;
- } else {
- lastSortCount = sortCount;
- }
- }
- Integer currentSortCount = ruleJson.getInteger("sortCount"); // 当前结算命中的规则序号
- if (currentSortCount <= lastSortCount) {
- returnJson.put("sonRuleId", 0);
- returnJson.put("anchorAmount", anchorAmount);
- returnJson.put("referenceAmount", referenceAmount);
- returnJson.put("settlementStatus", 1);
- returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
- return returnJson;
- } else {
- JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, currentSortCount);
- returnJson.put("sonRuleId", ruleJson.getLong("id"));
- returnJson.put("anchorAmount", totalAmount.getBigDecimal("anchorAmount"));
- returnJson.put("referenceAmount", totalAmount.getBigDecimal("referenceAmount"));
- returnJson.put("settlementStatus", 2);
- returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
- return returnJson;
- }
- } else if (validOrderNum >= 10000) {
- System.err.println(validOrderNum);
- Integer incentivizedCount = (int) Math.floor(validOrderNum / 10000); // 需要 1w单结算次数
- Integer lastIncentivizedCount = kuaishouRuleSettlementDataMapper.selectIncentiveLog(relateId, promoterId); // 一万单已结算次数
- if (Check.isNull(lastIncentivizedCount)) {
- lastIncentivizedCount = 0;
- }
- if (incentivizedCount > lastIncentivizedCount) {
- BigDecimal count = new BigDecimal(incentivizedCount - lastIncentivizedCount);
- BigDecimal promoterRide = new BigDecimal(700); // 达人破万奖励金额
- BigDecimal referenceRide = new BigDecimal(100); // 推荐人破万奖励金额
- BigDecimal promoterIncentiveAmount = count.multiply(promoterRide); // 达人破万单奖励
- BigDecimal referenceIncentiveAmount = count.multiply(referenceRide); // 推荐人破万单奖励
- anchorAmount = anchorAmount.add(promoterIncentiveAmount);
- referenceAmount = referenceAmount.add(referenceIncentiveAmount);
- kuaishouRuleSettlementDataMapper.replaceIncentiveLog(relateId, promoterId, ruleId, incentivizedCount, lastIncentivizedCount);
- }
- if (Check.isNull(lastRule)) { //查询到上次命中的结算规则 则代表为新结算用户
- JSONObject getTotalByCountAndRuleId = kuaishouRuleSettlementDataMapper.getTotalByCountAndRuleId(incentivizedCount, ruleId);
- if (!Check.isNull(getTotalByCountAndRuleId)) {
- anchorAmount = anchorAmount.add(getTotalByCountAndRuleId.getBigDecimal("anchorAmount"));
- referenceAmount = referenceAmount.add(getTotalByCountAndRuleId.getBigDecimal("referenceAmount"));
- }
- BigDecimal decValidOrderNum = new BigDecimal(validOrderNum);
- Long residueNum = decValidOrderNum.subtract(new BigDecimal(incentivizedCount).multiply(new BigDecimal(10000))).longValue(); // 新用户 剩余不到1w单的结算
- for (int i = 0; i < ruleList.size(); i++) {
- JSONObject rule = ruleList.get(i);
- Long startItemCount = rule.getLong("startItemCount");
- Long endItemCount = rule.getLong("endItemCount");
- if (residueNum >= startItemCount && residueNum <= 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;
- }
- Integer currentSortCount = ruleJson.getInteger("sortCount"); // 当前结算命中的规则序号
- JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, 0, currentSortCount); // 新的规则 序号从0开始
- returnJson.put("sonRuleId", ruleJson.getLong("id"));
- anchorAmount = anchorAmount.add(totalAmount.getBigDecimal("anchorAmount"));
- referenceAmount = referenceAmount.add(totalAmount.getBigDecimal("referenceAmount"));
- returnJson.put("anchorAmount", anchorAmount);
- returnJson.put("referenceAmount", referenceAmount);
- returnJson.put("settlementStatus", 2);
- returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
- return returnJson;
- } else { // 非新结算达人
- if (validOrderNum <= lastValidOrderNum) { // 当前结算有效订单 小于等于上次结算有效订单数 则不参与接下来的结算
- returnJson.put("sonRuleId", 0);
- returnJson.put("anchorAmount", 0);
- returnJson.put("referenceAmount", 0);
- returnJson.put("settlementStatus", 1);
- returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
- return returnJson;
- }
- Integer lastSortCount = lastRule.getInteger("sortCount"); // 上次结算命中的规则序号
- Integer ruleMaxCount = kuaishouRuleSettlementDataMapper.getMaxRuleCountByRuleId(ruleId); // 当前规则下最大的序号
- Long complement = null;
- if (lastValidOrderNum > 10000) {
- String lastValidOrderNumStr = String.valueOf(lastValidOrderNum);
- String substring = lastValidOrderNumStr.substring(lastValidOrderNumStr.length() - 4);
- Long aLong = Long.valueOf(substring);
- 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 {
- 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;
- }
- }
- // 查询 上次结算补齐10000需要激励的金额
- JSONObject totalAmount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, lastSortCount, ruleMaxCount);
- anchorAmount = anchorAmount.add(totalAmount.getBigDecimal("anchorAmount"));
- referenceAmount = referenceAmount.add(totalAmount.getBigDecimal("referenceAmount"));
- Long newValidOrderNum = validOrderNum - complement - lastValidOrderNum;
- if (newValidOrderNum > 10000) { // 如果剩余单量大于一万单 计算完成1w周期内的结算金额
- Integer newSettlementCount = (int) Math.floor(newValidOrderNum / 10000); // 补齐上次结算10000单后需要结算的完整次数
- JSONObject totalByCountAndRuleId = kuaishouRuleSettlementDataMapper.getTotalByCountAndRuleId(newSettlementCount, ruleId);
- anchorAmount = anchorAmount.add(totalByCountAndRuleId.getBigDecimal("anchorAmount"));
- referenceAmount = referenceAmount.add(totalByCountAndRuleId.getBigDecimal("referenceAmount"));
- newValidOrderNum = newValidOrderNum - (newSettlementCount * 10000);
- }
- for (int i = 0; i < ruleList.size(); i++) {
- JSONObject rule = ruleList.get(i);
- Long startItemCount = rule.getLong("startItemCount");
- Long endItemCount = rule.getLong("endItemCount");
- if (newValidOrderNum >= startItemCount && newValidOrderNum <= 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;
- }
- Integer currentSortCount = ruleJson.getInteger("sortCount"); // 当前结算命中的规则序号
- JSONObject amount = kuaishouRuleSettlementDataMapper.getTotalAmount(ruleId, 0, 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;
- }
- }
- 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);
- returnJson.put("ruleId", 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"); // 规则达人激励金额
- if (Check.isNull(ruleAnchorAmount)) {
- ruleAnchorAmount = new BigDecimal(0);
- }
- BigDecimal ruleReferenceAmount = ruleJson.getBigDecimal("referenceAmount"); // 规则达人激励金额
- if (Check.isNull(ruleReferenceAmount)) {
- ruleReferenceAmount = new BigDecimal(0);
- }
- 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
- public JSONObject getPromoterRuleData(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);
- returnJson.put("ruleId", ruleId);
- JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(null, 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"); // 规则达人激励金额
- if (Check.isNull(ruleAnchorAmount)) {
- ruleAnchorAmount = new BigDecimal(0);
- }
- BigDecimal ruleReferenceAmount = ruleJson.getBigDecimal("referenceAmount"); // 规则达人激励金额
- if (Check.isNull(ruleReferenceAmount)) {
- ruleReferenceAmount = new BigDecimal(0);
- }
- 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.selectPromoterIncentiveLog(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.replacePromoterIncentiveLog(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
- public List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName) {
- return kuaishouRuleSettlementDataMapper.getSettlementDate(statDate, promoterId, promoterName);
- }
- @Override
- public void updatePromoterStatus(Long statDate, Long promoterId, Integer status) {
- kuaishouRuleSettlementDataMapper.updatePromoterStatus(statDate, promoterId, status);
- }
- @Override
- public List<JSONObject> getPromoterSettlementDetail(Long date, Long promoterId, Integer settlementStatus,Long itemId) {
- return kuaishouRuleSettlementDataMapper.getPromoterSettlementDetail(date, promoterId, settlementStatus,itemId);
- }
- @Override
- public JSONObject getData() {
- return kuaishouRuleSettlementDataMapper.getData();
- }
- }
|