Commit cfc9a1c7 by guanchen

更新 代理商 和 合伙人 结算逻辑

parent 07c1474a
......@@ -69,7 +69,7 @@ public class Constants {
*/
public static final int REWARD_STATUS_UNSETTLE = 100;
public static final int REWARD_STATUS_SETTLE = 120;
public static final int REWARD_STATUS_FAILED = 99;
// public static final int REWARD_STATUS_FAILED = 99;
/**
* 最小奖励金额 小于此不写入
*/
......
package com.lanren.huhu.partner.controller; import com.lanren.huhu.partner.manager.PartnerManager;import com.lanren.huhu.partner.model.Partner;import com.lanren.huhu.partner.model.PartnerResponse;import com.lanren.huhu.partner.result.Result;import com.lanren.huhu.partner.schedule.PartnerSettleTask;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpHeaders;import org.springframework.web.bind.annotation.*; import javax.validation.Valid;import java.time.LocalDateTime; /** * @Author houseme * @Date 2019-06-26 11:00 * @Project partner * @Package com.lanren.huhu.partner.controller * @File: PartnerController */@RestController@RequestMapping("/v1/partner")public class PartnerController { private static Logger logger = LoggerFactory.getLogger(PartnerController.class); @Autowired private PartnerManager partnerManager; @Autowired private PartnerSettleTask partnerSettleTask; @RequestMapping(value = "/level", method = RequestMethod.POST) public Result<PartnerResponse> getPartnerLevel(@RequestBody @Valid Partner partner, @RequestHeader HttpHeaders headers) { if (logger.isInfoEnabled()) { logger.info("getPartnerLevel userId:{},header:{},time:{}", partner.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); } return partnerManager.getPartnerLevel(partner.getUserId()); } /** * 测试使用 结算单个用户 */ @RequestMapping(value = "/finance", method = RequestMethod.POST) public Result<String> doFinanceSettle(@RequestBody @Valid Partner partner, @RequestHeader HttpHeaders headers) { if (logger.isInfoEnabled()) { logger.info("doFinanceSettle userId:{},header:{},time:{}", partner.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); } return partnerManager.doFinanceSettle(partner.getUserId()); } /** * 结算全部用户 */ @RequestMapping(value = "/finance", method = RequestMethod.GET) public Result<String> doFinanceSettle(@RequestHeader HttpHeaders headers) { partnerSettleTask.runSettle(); logger.info("============>" + Thread.currentThread().getName()); Result<String> result = new Result<String>(); result.setData("异步,正在执行刷新......"); return result; } /** * 汇总合伙人已结算数据 */ @RequestMapping(value = "/summary/{dateStr}/{uid}", method = RequestMethod.GET) public Result<String> doSummarySettled(@PathVariable("dateStr") String dateStr, @PathVariable("uid") int uid, @RequestHeader HttpHeaders headers) { return partnerManager.runSummary(dateStr, uid); }}
\ No newline at end of file
package com.lanren.huhu.partner.controller; import com.lanren.huhu.partner.manager.PartnerManager;import com.lanren.huhu.partner.model.Partner;import com.lanren.huhu.partner.model.PartnerResponse;import com.lanren.huhu.partner.result.Result;import com.lanren.huhu.partner.schedule.PartnerSettleTask;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpHeaders;import org.springframework.web.bind.annotation.*; import javax.validation.Valid;import java.time.LocalDateTime; /** * @Author houseme * @Date 2019-06-26 11:00 * @Project partner * @Package com.lanren.huhu.partner.controller * @File: PartnerController */@RestController@RequestMapping("/v1/partner")public class PartnerController { private static Logger logger = LoggerFactory.getLogger(PartnerController.class); @Autowired private PartnerManager partnerManager; @Autowired private PartnerSettleTask partnerSettleTask; @RequestMapping(value = "/level", method = RequestMethod.POST) public Result<PartnerResponse> getPartnerLevel(@RequestBody @Valid Partner partner, @RequestHeader HttpHeaders headers) { if (logger.isInfoEnabled()) { logger.info("getPartnerLevel userId:{},header:{},time:{}", partner.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); } return partnerManager.getPartnerLevel(partner.getUserId()); } /** * 测试使用 结算单个用户 */ @RequestMapping(value = "/finance", method = RequestMethod.POST) public Result<String> doFinanceSettle(@RequestBody @Valid Partner partner, @RequestHeader HttpHeaders headers) { if (logger.isInfoEnabled()) { logger.info("doFinanceSettle userId:{},header:{},time:{}", partner.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); } return partnerManager.doFinanceSettle(partner.getUserId()); } /** * 结算全部用户 */ @RequestMapping(value = "/finance", method = RequestMethod.GET) public Result<String> doFinanceSettle(@RequestHeader HttpHeaders headers) { partnerSettleTask.runSettle(); logger.info("============>" + Thread.currentThread().getName()); Result<String> result = new Result<String>(); result.setData("异步,正在执行刷新......"); return result; }// /** // * 汇总合伙人已结算数据 // */ // @RequestMapping(value = "/summary/{dateStr}/{uid}", method = RequestMethod.GET) // public Result<String> doSummarySettled(@PathVariable("dateStr") String dateStr, @PathVariable("uid") int uid, @RequestHeader HttpHeaders headers) { // return partnerManager.runSummary(dateStr, uid); // } }
\ No newline at end of file
......
......@@ -2,10 +2,11 @@ package com.lanren.huhu.partner.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lanren.huhu.partner.domain.AgentExpandDaily;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.UpdateProvider;
import com.lanren.huhu.partner.service.AgentExpandDailyService;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface AgentExpandDailyMapper extends BaseMapper<AgentExpandDaily> {
......@@ -19,4 +20,6 @@ public interface AgentExpandDailyMapper extends BaseMapper<AgentExpandDaily> {
@UpdateProvider(type = AgentExpandDailySqlProvider.class, method = "updateByDatByDetail")
int updateByDatByDetail(String datStr);
Integer getMonthCntByAgent(int agentId, long beginTs, long endTs);
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanren.huhu.partner.domain.PartnerReward;
import com.lanren.huhu.partner.model.PartnerSettle;
import com.lanren.huhu.partner.model.PartnerSummaryContent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -31,5 +30,5 @@ public interface PartnerRewardMapper extends BaseMapper<PartnerReward> {
int updateRewardStatusByUidAndTs(Integer userId, Long beginTs, Long endTs);
PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs);
// PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs);
}
\ No newline at end of file
......@@ -8,7 +8,6 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@Data
......@@ -78,25 +77,25 @@ public class AgentSalary implements Serializable {
private BigDecimal upgradeSuperBalance;
/**
* 缴税金额
*/
@TableField(value = "tax_balance")
private BigDecimal taxBalance;
/**
* 分享赚奖励
*/
@TableField(value = "share_balance")
private BigDecimal shareBalance;
/**
* 自购省奖励
* 缴税金额
*/
@TableField(value = "tax_balance")
private BigDecimal taxBalance;
/**
* 自购省奖励金额
*/
@TableField(value = "zigousheng_balance")
private BigDecimal zigoushengBalance;
/**
* 推荐分成奖励
* 来自城市代理商的平推奖励
*/
@TableField(value = "pingtui_balance")
private BigDecimal pingtuiBalance;
......@@ -108,6 +107,18 @@ public class AgentSalary implements Serializable {
private BigDecimal techCharge;
/**
* 红包技术服务费
*/
@TableField(value = "tech_charge_redpack")
private BigDecimal techChargeRedpack;
/**
* 佣金技术服务费
*/
@TableField(value = "tech_charge_order")
private BigDecimal techChargeOrder;
/**
* 姓名或许公司名称
*/
@TableField(value = "bank_account")
......@@ -153,7 +164,7 @@ public class AgentSalary implements Serializable {
* 提现时间
*/
@TableField(value = "modify_time")
private LocalDateTime modifyTime;
private Date modifyTime;
@TableField(value = "created_at")
private Long createdAt;
......@@ -186,16 +197,20 @@ public class AgentSalary implements Serializable {
public static final String COL_UPGRADE_SUPER_BALANCE = "upgrade_super_balance";
public static final String COL_TAX_BALANCE = "tax_balance";
public static final String COL_SHARE_BALANCE = "share_balance";
public static final String COL_TAX_BALANCE = "tax_balance";
public static final String COL_ZIGOUSHENG_BALANCE = "zigousheng_balance";
public static final String COL_PINGTUI_BALANCE = "pingtui_balance";
public static final String COL_TECH_CHARGE = "tech_charge";
public static final String COL_TECH_CHARGE_REDPACK = "tech_charge_redpack";
public static final String COL_TECH_CHARGE_ORDER = "tech_charge_order";
public static final String COL_BANK_ACCOUNT = "bank_account";
public static final String COL_BANK_CARD_NUMBER = "bank_card_number";
......
package com.lanren.huhu.partner.manager; import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.model.PartnerResponse;import com.lanren.huhu.partner.result.Result;import com.lanren.huhu.partner.schedule.PartnerSettleTask;import com.lanren.huhu.partner.service.PartnerAccountService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; import java.time.LocalDateTime; /** * @author houseme * @date 2019-06-26 10:56 * @Project partner * @Package com.lanren.huhu.partner.manager * @File: PartnerAccountManager */@Componentpublic class PartnerManager { private static Logger logger = LoggerFactory.getLogger(PartnerManager.class); @Autowired private PartnerAccountService partnerAccountService; @Autowired private PartnerSettleTask partnerSettleTask; /*** * 获取合伙人账户信息 * @param userId * @return */ public Result<PartnerAccount> findByUserId(Integer userId) { Result<PartnerAccount> result = new Result<>(); if (logger.isDebugEnabled()) { logger.info("PartnerAccountManager findByUserId userId:{},time:{}", userId, LocalDateTime.now()); } PartnerAccount partnerAccount = partnerAccountService.getOneByUserId(userId); result.setData(partnerAccount); return result; } /*** * 获取合伙人等级 10 普通, 20 高级, 30 超级 * @param userId * @return */ public Result<PartnerResponse> getPartnerLevel(Integer userId) { if (logger.isDebugEnabled()) { logger.info("PartnerAccountManager getPartnerLevel userId:{},time:{}", userId, LocalDateTime.now()); } Result<PartnerResponse> result = new Result<>(); PartnerAccount partnerAccount = partnerAccountService.getOneByUserId(userId); if (null != partnerAccount) { int partnerLevel; if (partnerAccount.getIsSuperPartner() == 1) { partnerLevel = 30; } else { partnerLevel = partnerAccount.getPartnerLevel(); } result.setData(new PartnerResponse(partnerLevel)); } else { result.setCode(601); } return result; } public Result<String> doFinanceSettle(int userId) { Result<String> result = new Result<>(); if (partnerSettleTask.doOneUserSettle(userId)) { result.setCode(0); } else { result.setCode(500); } return result; } public Result<String> runSummary(String dateStr, int userId) { Result<String> result = new Result<>(); if (partnerSettleTask.runSummary(dateStr, userId)) { result.setCode(0); } else { result.setCode(500); } return result; }}
\ No newline at end of file
package com.lanren.huhu.partner.manager; import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.model.PartnerResponse;import com.lanren.huhu.partner.result.Result;import com.lanren.huhu.partner.schedule.PartnerSettleTask;import com.lanren.huhu.partner.service.PartnerAccountService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component; import java.time.LocalDateTime; /** * @author houseme * @date 2019-06-26 10:56 * @Project partner * @Package com.lanren.huhu.partner.manager * @File: PartnerAccountManager */@Componentpublic class PartnerManager { private static Logger logger = LoggerFactory.getLogger(PartnerManager.class); @Autowired private PartnerAccountService partnerAccountService; @Autowired private PartnerSettleTask partnerSettleTask; /*** * 获取合伙人账户信息 * @param userId * @return */ public Result<PartnerAccount> findByUserId(Integer userId) { Result<PartnerAccount> result = new Result<>(); if (logger.isDebugEnabled()) { logger.info("PartnerAccountManager findByUserId userId:{},time:{}", userId, LocalDateTime.now()); } PartnerAccount partnerAccount = partnerAccountService.getOneByUserId(userId); result.setData(partnerAccount); return result; } /*** * 获取合伙人等级 10 普通, 20 高级, 30 超级 * @param userId * @return */ public Result<PartnerResponse> getPartnerLevel(Integer userId) { if (logger.isDebugEnabled()) { logger.info("PartnerAccountManager getPartnerLevel userId:{},time:{}", userId, LocalDateTime.now()); } Result<PartnerResponse> result = new Result<>(); PartnerAccount partnerAccount = partnerAccountService.getOneByUserId(userId); if (null != partnerAccount) { int partnerLevel; if (partnerAccount.getIsSuperPartner() == 1) { partnerLevel = 30; } else { partnerLevel = partnerAccount.getPartnerLevel(); } result.setData(new PartnerResponse(partnerLevel)); } else { result.setCode(601); } return result; } public Result<String> doFinanceSettle(int userId) { Result<String> result = new Result<>(); if (partnerSettleTask.doOneUserSettle(userId)) { result.setCode(0); } else { result.setCode(500); } return result; } // public Result<String> runSummary(String dateStr, int userId) { // Result<String> result = new Result<>(); // if (partnerSettleTask.runSummary(dateStr, userId)) { // result.setCode(0); // } else { // result.setCode(500); // } // return result; // } }
\ No newline at end of file
......
......@@ -19,6 +19,8 @@ public class AgentSettle extends BaseModel {
private int agentLevel;
private BigDecimal balance;
private BigDecimal techCharge;
private BigDecimal techChargeRedpack;
private BigDecimal techChargeOrder;
private BigDecimal opencardBalance;
private BigDecimal rechargeBalance;
private BigDecimal upgradeBalance;
......@@ -26,4 +28,17 @@ public class AgentSettle extends BaseModel {
private BigDecimal shareBalance;
private BigDecimal zigoushengBalance;
private BigDecimal pingtuiBalance;
private BigDecimal tax;
private BigDecimal cashPlace;
private int numPlace;
private BigDecimal cashRecharge;
private int numRecharge;
private BigDecimal cashOpenCard;
private int numOpenCard;
private BigDecimal cashUpgradePartner;
private int numUpgradePartner;
private BigDecimal marketPerformance;
private BigDecimal cashUpgradeMarket;
private BigDecimal cashRechargeMarket;
}
package com.lanren.huhu.partner.model;
import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author chen
* @title: AgentSummaryContent
* @projectName partner
* @description: TODO
* @package com.lanren.huhu.partner.model
* @date 2019-08-21 16:26
*/
@Data
public class AgentSummaryContent extends BaseModel {
private BigDecimal cashPlace;
private int numPlace;
private BigDecimal cashRecharge;
private int numRecharge;
private BigDecimal cashOpenCard;
private int numOpenCard;
private BigDecimal cashUpgradePartner;
private int numUpgradePartner;
private BigDecimal marketPerformance;
private BigDecimal cashUpgradeMarket;
private BigDecimal cashRechargeMarket;
private int expandUsers;
}
package com.lanren.huhu.partner.model;
import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
/**
* @author chen
* @title: OrderParam
* @projectName partner
* @package com.lanren.huhu.partner.model
* @date 2019-08-20 19:50
*/
@Data
public class OrderParam extends BaseModel {
private String orderType;
private String orderSn;
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
if(this==obj) {
return true;
}
if(obj instanceof OrderParam){
OrderParam orderParam = (OrderParam) obj;
if(orderParam.orderType.equals(this.orderType) &&
orderParam.orderSn.equals(this.orderSn)) {
return true;
} else {
return false;
}
}
return false;
}
}
......@@ -16,12 +16,51 @@ import java.math.BigDecimal;
@Data
public class PartnerSettle extends BaseModel {
private int userId;
/**
* 扣除技术服务费后的购物奖励 包含 平台额外奖励部分
*/
private BigDecimal sumOrderCommission;
/**
* 扣除技术服务费后的在线充值奖励 包含 平台额外奖励部分
*/
private BigDecimal sumRedpack;
/**
* 其他全部奖励
*/
private BigDecimal sumOthers;
private BigDecimal techCharge;
private BigDecimal techChargeRedpack;
private BigDecimal techChargeOrder;
private BigDecimal wxIncome;
private BigDecimal wxTax;
private BigDecimal bankIncome;
private BigDecimal bankTax;
/**
* 在线充值
*/
private BigDecimal cash;
private int num;
/**
* 升级奖励
*/
private BigDecimal upCash;
private int upNum;
/**
* 邀请奖励
*/
private BigDecimal icash;
private int inum;
/**
* 下单奖励
*/
private BigDecimal pcash;
private int pnum;
/**
* 购物奖励: 淘宝客/京东联盟 佣金
*/
private BigDecimal scash;
private int snum;
/**
* 平台额外奖励
*/
private BigDecimal rcash;
}
......@@ -26,4 +26,15 @@ public class PartnerSummaryContent extends BaseModel {
private BigDecimal scash;
private int snum;
private BigDecimal rcash;
private BigDecimal techChargeRedpack;
private BigDecimal techChargeOrder;
private BigDecimal sumOrderCommission;
private BigDecimal sumRedpack;
private BigDecimal sumOthers;
private BigDecimal wxIncome;
private BigDecimal wxTax;
private BigDecimal wxFreeBalance;
private BigDecimal bankIncome;
private BigDecimal bankTax;
private BigDecimal bankFreeBalance;
}
package com.lanren.huhu.partner.model;
import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
/**
* @author chen
* @title: SubSubOrderParam
* @projectName partner
* @package com.lanren.huhu.partner.model
* @date 2019-08-20 19:51
*/
@Data
public class SubOrderParam extends BaseModel {
private String orderType;
private String orderSn;
private String subOrderSn;
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
if(this==obj) {
return true;
}
if(obj instanceof SubOrderParam){
SubOrderParam orderParam = (SubOrderParam) obj;
if(orderParam.orderType.equals(this.orderType) &&
orderParam.orderSn.equals(this.orderSn) &&
orderParam.subOrderSn.equals(this.subOrderSn)) {
return true;
} else {
return false;
}
}
return false;
}
}
......@@ -63,11 +63,19 @@ public class AgentDailyExpandTask {
Date dat = DateUtils.parse(datStr, DateUtils.FORMAT_SHORT);
int now = (int)(System.currentTimeMillis() / 1000L);
int pageNo = 1;
int total = 0;
int totalPage = 0;
int cnt = 0;
long beginTs = DateUtils.parse(datStr, DateUtils.FORMAT_SHORT).getTime() / 1000L;
long endTs = beginTs + 24 * 60 * 60L - 1L;
while (true) {
Page<PartnerInviteRelation> page = new Page<PartnerInviteRelation>(pageNo, PAGE_SIZE);
IPage<PartnerInviteRelation> ipage = partnerInviteRelationService.selectPageByTs(page, beginTs, endTs);
if (total == 0) {
total = (int) ipage.getTotal();
totalPage = total % PAGE_SIZE == 0 ? total / PAGE_SIZE : total / PAGE_SIZE + 1;
logger.info("totalPage is {} ", totalPage);
}
List<PartnerInviteRelation> partnerInviteRelationList = ipage.getRecords();
if (partnerInviteRelationList != null && partnerInviteRelationList.size() > 0) {
for (PartnerInviteRelation partnerInviteRelation : partnerInviteRelationList) {
......@@ -83,15 +91,18 @@ public class AgentDailyExpandTask {
detail.setUpdatedAt(now);
agentExpandDetailService.insertOrUpdate(detail);
}
cnt++;
}
if (partnerInviteRelationList.size() > 0) {
agentExpandDailyService.updateByDatByDetail(datStr);
}
pageNo++;
} else {
}
if (pageNo >= totalPage) {
break;
}
pageNo++;
}
logger.info("cnt is {}", cnt);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
......
package com.lanren.huhu.partner.schedule;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanren.huhu.partner.constants.Constants;
import com.lanren.huhu.partner.domain.*;
import com.lanren.huhu.partner.model.AgentSettle;
import com.lanren.huhu.partner.model.AgentSnapshot;
import com.lanren.huhu.partner.model.*;
import com.lanren.huhu.partner.service.*;
import com.lanren.huhu.partner.util.DateUtils;
import org.slf4j.Logger;
......@@ -18,8 +18,8 @@ import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.math.RoundingMode;
import java.util.*;
import static org.springframework.util.StringUtils.isEmpty;
......@@ -59,6 +59,8 @@ public class AgentSettleTask {
AgentBankCardService agentBankCardService;
@Autowired
AgentSalaryService agentSalaryService;
@Autowired
AgentExpandDailyService agentExpandDailyService;
@Async
public void runScheduledTask() {
......@@ -82,8 +84,9 @@ public class AgentSettleTask {
private void doSettle(long beginTs, long endTs) {
AgentSettle errAgentSettle = null;
try {
int pageNo = 1;
int cnt = 0;
while (true) {
int pageNo = 1;
Page<AgentSettle> page = new Page<AgentSettle>(pageNo, PAGE_SIZE);
page.setOptimizeCountSql(false);
page.setSearchCount(false);
......@@ -91,23 +94,43 @@ public class AgentSettleTask {
List<AgentSettle> agentSettleList = ipage.getRecords();
if (agentSettleList != null && agentSettleList.size() > 0) {
for (AgentSettle agentSettle : agentSettleList) {
errAgentSettle = agentSettle;
if (agentSettle != null) {
if (!doDbUpdate(agentSettle, beginTs, endTs)) {
logger.error("doDbUpdate failed for agent {}", agentSettle.getAgentId());
try {
updateTax(agentSettle);
errAgentSettle = agentSettle;
if (agentSettle != null) {
if (!doDbUpdate(agentSettle, beginTs, endTs)) {
logger.error("doDbUpdate failed for agent {}", agentSettle.getAgentId());
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
cnt++;
}
pageNo++;
} else {
break;
}
}
logger.info("cnt is {}", cnt);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("errAgentSettle is {}", errAgentSettle);
}
}
private void updateTax(AgentSettle agentSettle) {
BigDecimal tax = agentSettle.getBalance()
.subtract(agentSettle.getZigoushengBalance())
.subtract(agentSettle.getShareBalance())
.subtract(agentSettle.getTechChargeRedpack())
.subtract(BigDecimal.valueOf(800L))
.multiply(BigDecimal.valueOf(0.1d));
if (tax.compareTo(BigDecimal.ZERO) <= 0) {
tax = BigDecimal.ZERO;
}
agentSettle.setTax(tax);
}
/**
* 自购省和分享赚的奖励金额 需要根据最终的实际原始佣金 重新计算
* @param beginTs
......@@ -117,169 +140,277 @@ public class AgentSettleTask {
AgentReward errAgentReward = null;
try {
int pageNo = 1;
int total = 0;
int totalPage = 0;
int cnt = 0;
while (true) {
Page<AgentReward> page = new Page<AgentReward>(pageNo, PAGE_SIZE);
page.setOptimizeCountSql(false);
page.setSearchCount(false);
IPage<AgentReward> ipage;
if (runType == 0) {
ipage = agentRewardService.selectOrderRewardPageByTs(page, beginTs, endTs);
} else {
ipage = agentRewardService.selectOrderRewardPageByTsAndAgentId(page, beginTs, endTs, agentId);
}
if (total == 0) {
total = (int) ipage.getTotal();
totalPage = total % PAGE_SIZE == 0 ? total / PAGE_SIZE : total / PAGE_SIZE + 1;
logger.info("totalPage is {} ", totalPage);
}
List<AgentReward> agentRewardList = ipage.getRecords();
List<AgentReward> updateCommisionList = new ArrayList<AgentReward>();
List<AgentReward> update2FailedList = new ArrayList<AgentReward>();
if (agentRewardList != null && agentRewardList.size() > 0) {
/**
* 加载ordersActiveMap orderMap subOrderMap
*/
Set<OrderParam> orderParamsSet = generateOrderParamsSet(agentRewardList);
Set<SubOrderParam> subOrderParamsSet = generateSubOrderParamsSet(agentRewardList);
Map<OrderParam, OrdersActive> ordersActiveMap = generateOrdersActiveMap(orderParamsSet);
Map<OrderParam, OrderTaobaoJdCommission> orderMap = generateOrderMap(orderParamsSet);
Map<SubOrderParam, OrderTaobaoJdGoodsCommission> subOrderMap = generateSubOrderMap(subOrderParamsSet);
/**
* 循环处理每条奖励
*/
for (AgentReward agentReward : agentRewardList) {
errAgentReward = agentReward;
/**
* 自购省奖励: reward_type: 300 或 750, settle_state > 0 且 != 300
* 需要根据订单号查找最终的真实的原始佣金 并 按比例快照重新计算奖励金额,
* 更新字段: all_money_ori cash commission_account
* 如果订单失效: 更新settle_state, all_money_ori/cash/commission_account 抹平, 跳过处理, 循环到下一条
*/
if ( (agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_PURCHASE || agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SELF_ORDER)
&& agentReward.getSettleState() > 0
&& agentReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(agentReward.getOrderType()) || isEmpty(agentReward.getOrderSn()) || isEmpty(agentReward.getRatioAll())) {
/**
* 历史数据: 没有记录订单号 或者 没有记录比例 不更新奖励金额
*/
} else {
/**
* 有订单号 和 比例快照 可以更新金额
*/
OrdersActive ordersActive = ordersActiveService.getOneByOrderSn(agentReward.getOrderType(), agentReward.getOrderSn());
OrderTaobaoJdCommission order = orderTaobaoJdCommissionService.getOneByOrderSn(agentReward.getOrderType(), agentReward.getOrderSn());
if (null == ordersActive || null == order) {
try {
errAgentReward = agentReward;
/**
* 自购省奖励: reward_type: 300 或 750, settle_state > 0 且 != 300
* 需要根据订单号查找最终的真实的原始佣金 并 按比例快照重新计算奖励金额,
* 更新字段: all_money_ori cash commission_account
* 如果订单失效: 更新settle_state, all_money_ori/cash/commission_account 抹平, 跳过处理, 循环到下一条
*/
if ( (agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_PURCHASE || agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SELF_ORDER)
&& agentReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(agentReward.getOrderType()) || isEmpty(agentReward.getOrderSn()) || isEmpty(agentReward.getRatioAll())) {
/**
* 如果没有找到active 或者 没有找到commission
* 不更新奖励金额
* 历史数据: 没有记录订单号 或者 没有记录比例 不更新奖励金额
*/
} else if (agentReward.getSettleState() < 0) {
add2UpdateReward2Failed(agentReward, update2FailedList);
} else {
/**
* 订单状态只有三种: -3, 1, 3
* 有订单号 和 比例快照 可以更新金额
*/
if (order.getStatus() == Constants.ORDER_STATE_FAILED) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
updateReward2Failed(agentReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_PAID) {
OrderParam orderParam = new OrderParam();
orderParam.setOrderType(agentReward.getOrderType());
orderParam.setOrderSn(agentReward.getOrderSn());
OrdersActive ordersActive = ordersActiveMap.get(orderParam);
OrderTaobaoJdCommission order = orderMap.get(orderParam);
if (null == ordersActive || null == order) {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
* 如果没有找到active 或者 没有找到commission
* 不更新奖励金额
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(agentReward.getRechargeTime().getTime());
agentReward.setRechargeTime(new Date(newRechargeTime));
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_SETTLED) {
} else {
/**
* 订单结算 更新金额
* 订单状态只有三种: -3, 1, 3
*/
if (ordersActive.getIsForNew() == 1) {
if (order.getStatus() == Constants.ORDER_STATE_FAILED) {
/**
* 新人专享订单 不给合伙人奖励 跳过
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
updateReward2Failed(agentReward);
add2UpdateReward2Failed(agentReward, update2FailedList);
continue;
} else {
} else if (order.getStatus() == Constants.ORDER_STATE_PAID) {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
* 订单还是付款状态 更新奖励时间 下个月再处理
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(agentReward.getRechargeTime().getTime());
agentReward.setRechargeTime(new Date(newRechargeTime));
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_SETTLED) {
/**
* 订单结算 更新金额
*/
updateRewardCommission(agentReward, order.getAllMoney());
if (ordersActive.getIsForNew() == 1) {
/**
* 新人专享订单 不给合伙人奖励 跳过
*/
add2UpdateReward2Failed(agentReward, update2FailedList);
continue;
} else {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
*/
add2UpdateRewardCommission(agentReward, order.getAllMoney(), updateCommisionList);
}
}
}
}
}
}
/**
* 分享赚订单: 按子订单号更新奖励金额 60 或 760
*/
if ( (agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SHARE || agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SHARE_ORDER)
&& agentReward.getSettleState() > 0
&& agentReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(agentReward.getOrderType()) || isEmpty(agentReward.getOrderSn()) || isEmpty(agentReward.getSubOrderSn())
|| isEmpty(agentReward.getRatioAll())) {
/**
* 历史数据: 没有记录子订单号 或者 没有记录比例 不更新奖励金额
*/
} else {
/**
* 有订单号 和 比例快照 可以更新金额
*/
OrderTaobaoJdGoodsCommission subOrder = orderTaobaoJdGoodsCommissionService.getOneByOrderSn(agentReward.getOrderType(), agentReward.getOrderSn(), agentReward.getSubOrderSn());
if (null == subOrder) {
/**
* 分享赚订单: 按子订单号更新奖励金额 60 或 760
*/
if ( (agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SHARE || agentReward.getRewardType() == Constants.AGENT_REWARD_TYPE_SHARE_ORDER)
&& agentReward.getSettleState() > 0
&& agentReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(agentReward.getOrderType()) || isEmpty(agentReward.getOrderSn()) || isEmpty(agentReward.getSubOrderSn())
|| isEmpty(agentReward.getRatioAll())) {
/**
* 如果没有找到子订单
* 不更新奖励金额
* 历史数据: 没有记录子订单号 或者 没有记录比例 不更新奖励金额
*/
} else if (agentReward.getSettleState() < 0) {
add2UpdateReward2Failed(agentReward, update2FailedList);
} else {
/**
* 订单状态只有三种: -3, 1, 3
* 有订单号 和 比例快照 可以更新金额
*/
if (subOrder.getOrderState() == Constants.ORDER_STATE_FAILED) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
updateReward2Failed(agentReward);
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_PAID) {
SubOrderParam subOrderParam = new SubOrderParam();
subOrderParam.setOrderType(agentReward.getOrderType());
subOrderParam.setOrderSn(agentReward.getOrderSn());
subOrderParam.setSubOrderSn(agentReward.getSubOrderSn());
OrderTaobaoJdGoodsCommission subOrder = subOrderMap.get(subOrderParam);
if (null == subOrder) {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
* 如果没有找到子订单
* 不更新奖励金额
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(agentReward.getRechargeTime().getTime());
agentReward.setRechargeTime(new Date(newRechargeTime));
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
continue;
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_SETTLED) {
} else {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
* 订单状态只有三种: -3, 1, 3
*/
updateRewardCommission(agentReward, subOrder.getAllMoney());
if (subOrder.getOrderState() == Constants.ORDER_STATE_FAILED) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
add2UpdateReward2Failed(agentReward, update2FailedList);
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_PAID) {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(agentReward.getRechargeTime().getTime());
agentReward.setRechargeTime(new Date(newRechargeTime));
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
continue;
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_SETTLED) {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
*/
add2UpdateRewardCommission(agentReward, subOrder.getAllMoney(), updateCommisionList);
}
}
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
cnt++;
}
pageNo++;
} else {
}
if (updateCommisionList.size() > 0) {
agentRewardService.updateBatch(updateCommisionList);
}
if (update2FailedList.size() > 0) {
agentRewardService.updateBatch(update2FailedList);
}
if (pageNo >= totalPage) {
break;
}
pageNo++;
}
logger.info("cnt is {}", cnt);
} catch (Exception e) {
logger.error(e.getMessage(),e);
logger.error("errAgentReward is {}", errAgentReward);
}
}
private void updateRewardCommission(AgentReward agentReward, BigDecimal allMoney) {
agentReward.setAllMoneyOri(allMoney);
String ratioAllStr = agentReward.getRatioAll().replaceAll("[\\[\\],\"]", "");
String[] strs = ratioAllStr.split(",");
BigDecimal cash = allMoney;
for (String s : strs) {
BigDecimal ratio = new BigDecimal(s);
cash = cash.multiply(ratio);
private Map<SubOrderParam, OrderTaobaoJdGoodsCommission> generateSubOrderMap(Set<SubOrderParam> subOrderParamsSet) {
Map<SubOrderParam, OrderTaobaoJdGoodsCommission> map = new HashMap<SubOrderParam, OrderTaobaoJdGoodsCommission>();
List<OrderTaobaoJdGoodsCommission> list = orderTaobaoJdGoodsCommissionService.selectListBySubOrderParamsSet(subOrderParamsSet);
for (OrderTaobaoJdGoodsCommission subOrder : list) {
SubOrderParam key = new SubOrderParam();
key.setOrderType(subOrder.getType());
key.setOrderSn(subOrder.getOrderSn());
key.setSubOrderSn(subOrder.getSubOrderSn());
map.put(key, subOrder);
}
return map;
}
private Map<OrderParam, OrderTaobaoJdCommission> generateOrderMap(Set<OrderParam> orderParamsSet) {
Map<OrderParam, OrderTaobaoJdCommission> map = new HashMap<OrderParam, OrderTaobaoJdCommission>();
List<OrderTaobaoJdCommission> list = orderTaobaoJdCommissionService.selectListByOrderParamSet(orderParamsSet);
for (OrderTaobaoJdCommission order : list) {
OrderParam key = new OrderParam();
key.setOrderType(order.getType());
key.setOrderSn(order.getOrderSn());
map.put(key, order);
}
return map;
}
private Map<OrderParam, OrdersActive> generateOrdersActiveMap(Set<OrderParam> orderParamSet) {
Map<OrderParam, OrdersActive> map = new HashMap<OrderParam, OrdersActive>();
List<OrdersActive> list = ordersActiveService.selectListByOrderParamSet(orderParamSet);
for (OrdersActive order : list) {
OrderParam key = new OrderParam();
key.setOrderType(order.getType());
key.setOrderSn(order.getOrderSn());
map.put(key, order);
}
return map;
}
private Set<SubOrderParam> generateSubOrderParamsSet(List<AgentReward> agentRewardList) {
Set<SubOrderParam> set = new HashSet<SubOrderParam>();
for (AgentReward reward : agentRewardList) {
SubOrderParam orderParam = new SubOrderParam();
orderParam.setOrderType(reward.getOrderType());
orderParam.setOrderSn(reward.getOrderSn());
orderParam.setSubOrderSn(reward.getSubOrderSn());
set.add(orderParam);
}
return set;
}
private Set<OrderParam> generateOrderParamsSet(List<AgentReward> agentRewardList) {
Set<OrderParam> set = new HashSet<OrderParam>();
for (AgentReward reward : agentRewardList) {
OrderParam orderParam = new OrderParam();
orderParam.setOrderType(reward.getOrderType());
orderParam.setOrderSn(reward.getOrderSn());
set.add(orderParam);
}
return set;
}
private void add2UpdateRewardCommission(AgentReward agentReward, BigDecimal allMoney, List<AgentReward> updateCommisionList) {
try {
agentReward.setAllMoneyOri(allMoney);
String ratioAllStr = agentReward.getRatioAll().replaceAll("[\\[\\]\"]", "");
if (!isEmpty(ratioAllStr)) {
String[] strs = ratioAllStr.split(",");
if (strs.length > 0) {
BigDecimal cash = allMoney;
for (String s : strs) {
BigDecimal ratio = new BigDecimal(s);
cash = cash.multiply(ratio);
}
agentReward.setMoney(cash);
agentReward.setCommissionAcount(cash);
BigDecimal commission = cash.multiply(agentReward.getCommissionRate());
agentReward.setAmount(commission);
agentReward.setCommission(commission);
agentReward.setSettleState(Constants.SETTLE_STATE_DONE);
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
updateCommisionList.add(agentReward);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
agentReward.setMoney(cash);
agentReward.setCommissionAcount(cash);
BigDecimal commission = cash.multiply(agentReward.getCommissionRate());
agentReward.setAmount(commission);
agentReward.setCommission(commission);
agentReward.setSettleState(Constants.SETTLE_STATE_DONE);
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
}
/**
......@@ -289,16 +420,16 @@ public class AgentSettleTask {
* commission 奖励金额
* cash_code 支付金额
*/
private void updateReward2Failed(AgentReward agentReward) {
private void add2UpdateReward2Failed(AgentReward agentReward, List<AgentReward> update2FailedList) {
agentReward.setAllMoneyOri(ZERO);
agentReward.setMoney(ZERO);
agentReward.setCommissionAcount(ZERO);
agentReward.setAmount(ZERO);
agentReward.setCommission(ZERO);
agentReward.setCashCode("0");
agentReward.setSettleState(Constants.SETTLE_STATE_FAILED);
agentReward.setRewardStatus(Constants.REWARD_STATUS_FAILED);
agentReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
agentRewardService.updateById(agentReward);
update2FailedList.add(agentReward);
}
public boolean doOneAgentSettle(Integer agentId) {
......@@ -309,8 +440,12 @@ public class AgentSettleTask {
try {
updateOrderCommission(beginTs, endTs, 1, agentId);
AgentSettle agentSettle = agentRewardService.selectAgentSettleByTsAndAgentId(beginTs, endTs, agentId);
/**
* 更新税
*/
errAgentSettle = agentSettle;
if (agentSettle != null) {
updateTax(agentSettle);
return doDbUpdate(agentSettle, beginTs, endTs);
} else {
logger.info("没有待奖励记录 跳过不处理, 代理商{}", agentId);
......@@ -343,7 +478,7 @@ public class AgentSettleTask {
insertIntoAgentAccountLog(agentSettle, agentAccount, agentSalary, beginTs);
updateAgentAccount(agentSettle, agentAccount);
updateAgentRewardStatus(agentSettle.getAgentId(), beginTs, endTs);
insertAgentIncomeSummary(agentSettle, beginTs);
insertAgentIncomeSummary(agentSettle, beginTs, endTs);
/**
* 提交事务
*/
......@@ -379,11 +514,13 @@ public class AgentSettleTask {
agentSalary.setRechargeBalance(agentSettle.getRechargeBalance());
agentSalary.setUpgradeBalance(agentSettle.getUpgradeBalance());
agentSalary.setUpgradeSuperBalance(agentSettle.getUpgradeSuperBalance());
agentSalary.setTaxBalance(ZERO);
agentSalary.setTaxBalance(agentSettle.getTax());
agentSalary.setShareBalance(agentSettle.getShareBalance());
agentSalary.setZigoushengBalance(agentSettle.getZigoushengBalance());
agentSalary.setPingtuiBalance(agentSettle.getPingtuiBalance());
agentSalary.setTechCharge(agentSettle.getTechCharge());
agentSalary.setTechChargeRedpack(agentSettle.getTechChargeRedpack());
agentSalary.setTechChargeOrder(agentSettle.getTechChargeOrder());
agentSalary.setBankAccount(agentBankCard == null ? "" : agentBankCard.getBankAccount());
agentSalary.setBankCardNumber(agentBankCard == null ? "" : agentBankCard.getBankCardNumber());
agentSalary.setBankName(agentBankCard == null ? "" : agentBankCard.getBankName());
......@@ -398,28 +535,61 @@ public class AgentSettleTask {
return agentSalary;
}
private void insertAgentIncomeSummary(AgentSettle agentSettle, long beginTs) {
private void insertAgentIncomeSummary(AgentSettle agentSettle, long beginTs, long endTs) {
Date dat = new Date(beginTs * 1000L);
int now = (int) (System.currentTimeMillis() / 1000L);
int yeartime = Integer.parseInt(DateUtils.getYear(dat));
int monthtime = Integer.parseInt(DateUtils.getMonth(dat));
AgentIncomeSummary agentIncomeSummary = agentIncomeSummaryService.getOneByAgentidYearMonth(agentSettle.getAgentId(), yeartime, monthtime);
/**
* 生成content字段
*/
AgentSummaryContent agentSummaryContent = new AgentSummaryContent();
agentSummaryContent.setCashPlace(agentSettle.getCashPlace().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setNumPlace(agentSettle.getNumPlace());
agentSummaryContent.setCashRecharge(agentSettle.getCashRecharge().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setNumRecharge(agentSettle.getNumRecharge());
agentSummaryContent.setCashOpenCard(agentSettle.getCashOpenCard().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setNumOpenCard(agentSettle.getNumOpenCard());
agentSummaryContent.setCashUpgradePartner(agentSettle.getCashUpgradePartner().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setNumUpgradePartner(agentSettle.getNumUpgradePartner());
agentSummaryContent.setMarketPerformance(agentSettle.getMarketPerformance().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setCashUpgradeMarket(agentSettle.getCashUpgradeMarket().setScale(2, RoundingMode.HALF_UP));
agentSummaryContent.setCashRechargeMarket(agentSettle.getCashRechargeMarket().setScale(2, RoundingMode.HALF_UP));
Integer expandUsers = agentExpandDailyService.getMonthCntByAgent(agentSettle.getAgentId(), beginTs, endTs);
expandUsers = expandUsers == null ? 0 : expandUsers;
agentSummaryContent.setExpandUsers(expandUsers);
/**
* 生成income字段
*/
BigDecimal sum1 = agentSettle.getBalance();
BigDecimal sum2 = agentSettle.getCashPlace()
.add(agentSettle.getCashRecharge())
.add(agentSettle.getCashOpenCard())
.add(agentSettle.getCashUpgradePartner());
if (sum1.compareTo(sum2) != 0) {
logger.error("代理商奖励结算-对账异常: 求和1:{}, 求和2:{}, 奖励字段:{}", sum1, sum2, agentSettle);
throw new RuntimeException();
}
if (null == agentIncomeSummary) {
agentIncomeSummary = new AgentIncomeSummary();
agentIncomeSummary.setUserId(agentSettle.getUserId());
agentIncomeSummary.setAgentId(agentSettle.getAgentId());
agentIncomeSummary.setYeartime(yeartime);
agentIncomeSummary.setMonthtime(monthtime);
agentIncomeSummary.setIncome(ZERO);
agentIncomeSummary.setContent("");
agentIncomeSummary.setState(15);
agentIncomeSummary.setState(20);
agentIncomeSummary.setCreatedAt(now);
agentIncomeSummary.setUpdatedAt(now);
agentIncomeSummary.setSettleTime(now);
agentIncomeSummary.setContent(JSON.toJSONString(agentSummaryContent));
agentIncomeSummary.setIncome(sum2);
agentIncomeSummaryService.save(agentIncomeSummary);
} else {
agentIncomeSummary.setState(15);
agentIncomeSummary.setState(20);
agentIncomeSummary.setSettleTime(now);
agentIncomeSummary.setUpdatedAt(now);
agentIncomeSummary.setContent(JSON.toJSONString(agentSummaryContent));
agentIncomeSummary.setIncome(sum2);
agentIncomeSummaryService.updateById(agentIncomeSummary);
}
}
......@@ -434,7 +604,9 @@ public class AgentSettleTask {
*/
agentAccount.setBalance(agentAccount.getBalance()
.add(agentSettle.getBalance())
.subtract(agentSettle.getTechCharge()));
.subtract(agentSettle.getTechCharge())
.subtract(agentSettle.getTax())
);
agentAccountService.updateById(agentAccount);
}
......@@ -471,6 +643,21 @@ public class AgentSettleTask {
agentSalary.getId());
agentAccountLogService.save(log);
}
/**
* 个人所得税
*/
changeNum = agentSettle.getTax().negate();
if (changeNum.compareTo(ZERO) < 0) {
changedAmount = changedAmount.add(changeNum);
log = createNewAgentAccountLog(agentSettle,
Constants.PARTNER_ACCOUNT_LOG_TYPE_TAX,
changeNum,
changedAmount,
DateUtils.format(dat, "yyyy-MM") + Constants.PARTNER_ACCOUNT_LOG_TYPE_TAX_REMARK,
"",
agentSalary.getId());
agentAccountLogService.save(log);
}
}
private AgentAccountLog createNewAgentAccountLog(AgentSettle agentSettle, int type, BigDecimal changeNum, BigDecimal changedAmount, String payRemark, String snapshot, long agentSalaryId) {
......
......@@ -5,9 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanren.huhu.partner.constants.Constants;
import com.lanren.huhu.partner.domain.*;
import com.lanren.huhu.partner.model.PartnerSettle;
import com.lanren.huhu.partner.model.PartnerSnapshot;
import com.lanren.huhu.partner.model.PartnerSummaryContent;
import com.lanren.huhu.partner.model.*;
import com.lanren.huhu.partner.service.*;
import com.lanren.huhu.partner.util.DateUtils;
import org.slf4j.Logger;
......@@ -21,8 +19,7 @@ import org.springframework.transaction.TransactionStatus;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.*;
import static org.springframework.util.StringUtils.isEmpty;
......@@ -101,11 +98,18 @@ public class PartnerSettleTask {
}
}
/**
* 使用mybatisplus分页插件时需要注意:
* !!! 如果取出每一页的数据后, 在处理时更改了分页查询的一些字段, 那么后面翻页的时候 查出来的数据就会错乱了
* !!! 要么就是 在循环的时候不更新用于查询的字段
* !!! 要么就是 永远都只取第一页, 直到取不到数据
*/
private void doSettle(long beginTs, long endTs) {
PartnerSettle errPartnerSettle = null;
try {
int pageNo = 1;
int cnt = 0;
while (true) {
int pageNo = 1;
Page<PartnerSettle> page = new Page<PartnerSettle>(pageNo, PAGE_SIZE);
page.setOptimizeCountSql(false);
page.setSearchCount(false);
......@@ -113,18 +117,23 @@ public class PartnerSettleTask {
List<PartnerSettle> partnerSettleList = ipage.getRecords();
if (partnerSettleList != null && partnerSettleList.size() > 0) {
for (PartnerSettle partnerSettle : partnerSettleList) {
errPartnerSettle = partnerSettle;
if (partnerSettle != null && setIncomeAndTax(partnerSettle)) {
if (!doDbUpdate(partnerSettle, beginTs, endTs)) {
logger.error("doDbUpdate failed for user {}", partnerSettle.getUserId());
try {
errPartnerSettle = partnerSettle;
if (partnerSettle != null && setIncomeAndTax(partnerSettle)) {
if (!doDbUpdate(partnerSettle, beginTs, endTs)) {
logger.error("doDbUpdate failed for user {}", partnerSettle.getUserId());
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
cnt++;
}
pageNo++;
} else {
break;
}
}
logger.info("cnt is {}", cnt);
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("errPartnerSettle is {}", errPartnerSettle);
......@@ -150,7 +159,7 @@ public class PartnerSettleTask {
insertIntoPartnerAccountLog(partnerSettle, partnerAccount, beginTs);
updatePartnerAccount(partnerSettle, partnerAccount);
updatePartnerRewardStatus(partnerSettle.getUserId(), beginTs, endTs);
insertPartnerIncomeSummary(partnerSettle.getUserId(), beginTs);
insertPartnerIncomeSummary(partnerSettle, partnerAccount, beginTs);
/**
* 提交事务
*/
......@@ -170,27 +179,70 @@ public class PartnerSettleTask {
}
}
private void insertPartnerIncomeSummary(int userId, long beginTs) {
private void insertPartnerIncomeSummary(PartnerSettle partnerSettle,PartnerAccount partnerAccount, long beginTs) {
Date dat = new Date(beginTs * 1000L);
int now = (int) (System.currentTimeMillis() / 1000L);
int yeartime = Integer.parseInt(DateUtils.getYear(dat));
int monthtime = Integer.parseInt(DateUtils.getMonth(dat));
PartnerIncomeSummary partnerIncomeSummary = partnerIncomeSummaryService.getOneByUidYearMonth(userId, yeartime, monthtime);
PartnerIncomeSummary partnerIncomeSummary = partnerIncomeSummaryService.getOneByUidYearMonth(partnerSettle.getUserId(), yeartime, monthtime);
/**
* 生成content字段
*/
PartnerSummaryContent partnerSummaryContent = new PartnerSummaryContent();
partnerSummaryContent.setCash(partnerSettle.getCash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setUpCash(partnerSettle.getUpCash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setIcash(partnerSettle.getIcash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setPcash(partnerSettle.getPcash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setScash(partnerSettle.getScash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setRcash(partnerSettle.getRcash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setTechChargeOrder(partnerSettle.getTechChargeOrder());
partnerSummaryContent.setTechChargeRedpack(partnerSettle.getTechChargeRedpack());
partnerSummaryContent.setWxIncome(partnerSettle.getWxIncome());
partnerSummaryContent.setWxTax(partnerSettle.getWxTax());
partnerSummaryContent.setBankIncome(partnerSettle.getBankIncome());
partnerSummaryContent.setBankTax(partnerSettle.getBankTax());
partnerSummaryContent.setWxFreeBalance(partnerAccount.getWxFreeBalance());
partnerSummaryContent.setBankFreeBalance(partnerAccount.getBankFreeBalance());
partnerSummaryContent.setSumOrderCommission(partnerSettle.getSumOrderCommission());
partnerSummaryContent.setSumRedpack(partnerSettle.getSumRedpack());
partnerSummaryContent.setSumOthers(partnerSettle.getSumOthers());
/**
* 生成income字段
*/
BigDecimal sum1 = partnerSettle.getCash()
.add(partnerSettle.getUpCash())
.add(partnerSettle.getIcash())
.add(partnerSettle.getPcash())
.add(partnerSettle.getScash())
.add(partnerSettle.getRcash());
BigDecimal sum2 = partnerSettle.getSumOrderCommission()
.add(partnerSettle.getSumRedpack())
.add(partnerSettle.getSumOthers())
.add(partnerSettle.getTechChargeOrder())
.add(partnerSettle.getTechChargeRedpack());
if (sum1.compareTo(sum2) != 0) {
logger.error("合伙人奖励结算-对账异常: 求和1:{}, 求和2:{}, 奖励字段:{}", sum1, sum2, partnerSettle);
}
if (null == partnerIncomeSummary) {
partnerIncomeSummary = new PartnerIncomeSummary();
partnerIncomeSummary.setUserId(userId);
partnerIncomeSummary.setUserId(partnerSettle.getUserId());
partnerIncomeSummary.setYeartime(yeartime);
partnerIncomeSummary.setMonthtime(monthtime);
partnerIncomeSummary.setIncome(ZERO);
partnerIncomeSummary.setState(15);
partnerIncomeSummary.setState(20);
partnerIncomeSummary.setCreatedAt(now);
partnerIncomeSummary.setUpdatedAt(now);
partnerIncomeSummary.setSettleTime(now);
partnerIncomeSummary.setContent("");
partnerIncomeSummary.setContent(JSON.toJSONString(partnerSummaryContent));
partnerIncomeSummary.setIncome(sum2);
partnerIncomeSummaryService.save(partnerIncomeSummary);
} else {
partnerIncomeSummary.setState(15);
partnerIncomeSummary.setState(20);
partnerIncomeSummary.setUpdatedAt(now);
partnerIncomeSummary.setSettleTime(now);
partnerIncomeSummary.setContent(JSON.toJSONString(partnerSummaryContent));
partnerIncomeSummary.setIncome(sum2);
partnerIncomeSummaryService.updateById(partnerIncomeSummary);
}
}
......@@ -217,7 +269,11 @@ public class PartnerSettleTask {
/**
* 月结发钱
*/
BigDecimal changeNum = partnerSettle.getSumOrderCommission().add(partnerSettle.getSumRedpack()).add(partnerSettle.getSumOthers()).add(partnerSettle.getTechCharge());
BigDecimal changeNum = partnerSettle.getSumOrderCommission()
.add(partnerSettle.getSumRedpack())
.add(partnerSettle.getSumOthers())
.add(partnerSettle.getTechChargeRedpack())
.add(partnerSettle.getTechChargeOrder());
BigDecimal changedAmount = partnerAccount.getWxFreeBalance().add(partnerAccount.getBankFreeBalance()).add(changeNum);
PartnerSnapshot snapshot = new PartnerSnapshot();
snapshot.setUserId(partnerAccount.getUserId());
......@@ -233,7 +289,9 @@ public class PartnerSettleTask {
/**
* 平台技术服务费
*/
changeNum = partnerSettle.getTechCharge().negate();
changeNum = partnerSettle.getTechChargeRedpack()
.add(partnerSettle.getTechChargeOrder())
.negate();
changedAmount = changedAmount.add(changeNum);
if (changeNum.compareTo(ZERO) < 0) {
log = createNewPartnerAccountLog(partnerSettle.getUserId(),
......@@ -285,35 +343,45 @@ public class PartnerSettleTask {
return log;
}
private void updateRewardCommission(PartnerReward partnerReward, BigDecimal allMoney) {
partnerReward.setAllMoneyOri(allMoney);
String ratioAllStr = partnerReward.getRatioAll().replaceAll("[\\[\\],\"]", "");
String[] strs = ratioAllStr.split(",");
BigDecimal cash = allMoney;
for (String s : strs) {
BigDecimal ratio = new BigDecimal(s);
cash = cash.multiply(ratio);
private void add2UpdateRewardCommission(PartnerReward partnerReward, BigDecimal allMoney, List<PartnerReward> updateCommisionList) {
try {
partnerReward.setAllMoneyOri(allMoney);
String ratioAllStr = partnerReward.getRatioAll().replaceAll("[\\[\\]\"]", "");
if (! isEmpty(ratioAllStr)) {
String[] strs = ratioAllStr.split(",");
if (strs.length > 0) {
BigDecimal cash = allMoney;
for (String s : strs) {
BigDecimal ratio = new BigDecimal(s);
cash = cash.multiply(ratio);
}
partnerReward.setCash(cash);
BigDecimal commission = cash.multiply(partnerReward.getCommissionRate());
partnerReward.setCommissionAcount(commission);
partnerReward.setSettleState(Constants.SETTLE_STATE_DONE);
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
// partnerRewardService.updateById(partnerReward);
updateCommisionList.add(partnerReward);
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("partnerReward id is {}", partnerReward.getId());
}
partnerReward.setCash(cash);
BigDecimal commission = cash.multiply(partnerReward.getCommissionRate());
partnerReward.setCommissionAcount(commission);
partnerReward.setSettleState(Constants.SETTLE_STATE_DONE);
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
}
/**
* 更新至 失效, 结算完成
* 不再参与后续结算计算
* @param partnerReward
*/
private void updateReward2Failed(PartnerReward partnerReward) {
private void add2UpdateReward2Failed(PartnerReward partnerReward, List<PartnerReward> update2FailedList) {
partnerReward.setAllMoneyOri(ZERO);
partnerReward.setCash(ZERO);
partnerReward.setCommissionAcount(ZERO);
partnerReward.setSettleState(Constants.SETTLE_STATE_FAILED);
partnerReward.setRewardStatus(Constants.REWARD_STATUS_FAILED);
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
// partnerRewardService.updateById(partnerReward);
update2FailedList.add(partnerReward);
}
/**
......@@ -325,150 +393,255 @@ public class PartnerSettleTask {
PartnerReward errPartnerReward = null;
try {
int pageNo = 1;
int total = 0;
int totalPage = 0;
int cnt = 0;
while (true) {
Page<PartnerReward> page = new Page<PartnerReward>(pageNo, PAGE_SIZE);
page.setOptimizeCountSql(false);
page.setSearchCount(false);
IPage<PartnerReward> ipage;
if (runType == 0) {
ipage = partnerRewardService.selectOrderRewardPageByTs(page, beginTs, endTs);
} else {
ipage = partnerRewardService.selectOrderRewardPageByTsAndUid(page, beginTs, endTs, userId);
}
if (total == 0) {
total = (int) ipage.getTotal();
totalPage = total % PAGE_SIZE == 0 ? total / PAGE_SIZE : total / PAGE_SIZE + 1;
logger.info("totalPage is {} ", totalPage);
}
List<PartnerReward> partnerRewardList = ipage.getRecords();
List<PartnerReward> updateCommisionList = new ArrayList<PartnerReward>();
List<PartnerReward> update2FailedList = new ArrayList<PartnerReward>();
if (partnerRewardList != null && partnerRewardList.size() > 0) {
/**
* 加载ordersActiveMap orderMap subOrderMap
*/
Set<OrderParam> orderParamsList = generateOrderParamsSet(partnerRewardList);
Set<SubOrderParam> subOrderParamsList = generateSubOrderParamsSet(partnerRewardList);
Map<OrderParam, OrdersActive> ordersActiveMap = generateOrdersActiveMap(orderParamsList);
Map<OrderParam, OrderTaobaoJdCommission> orderMap = generateOrderMap(orderParamsList);
Map<SubOrderParam, OrderTaobaoJdGoodsCommission> subOrderMap = generateSubOrderMap(subOrderParamsList);
/**
* 循环处理每条奖励
*/
for (PartnerReward partnerReward : partnerRewardList) {
errPartnerReward = partnerReward;
/**
* 购物奖励: reward_type: 110, settle_state > 0 且 != 300
* 需要根据订单号查找最终的真实的原始佣金 并 按比例快照重新计算奖励金额,
* 更新字段: all_money_ori cash commission_account
* 如果订单失效: 更新settle_state, all_money_ori/cash/commission_account 抹平, 跳过处理, 循环到下一条
*/
if (partnerReward.getRewardType() == Constants.PARTNER_REWARD_TYPE_PURCHASE && partnerReward.getSettleState() > 0
&& partnerReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(partnerReward.getOrderType()) || isEmpty(partnerReward.getOrderSn()) || isEmpty(partnerReward.getRatioAll())) {
/**
* 历史数据: 没有记录订单号 或者 没有记录比例 不更新奖励金额
*/
} else {
/**
* 有订单号 和 比例快照 可以更新金额
*/
OrdersActive ordersActive = ordersActiveService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn());
OrderTaobaoJdCommission order = orderTaobaoJdCommissionService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn());
if (null == ordersActive || null == order) {
try {
errPartnerReward = partnerReward;
/**
* 购物奖励: reward_type: 110, settle_state > 0 且 != 300
* 需要根据订单号查找最终的真实的原始佣金 并 按比例快照重新计算奖励金额,
* 更新字段: all_money_ori cash commission_account
* 如果订单失效: 更新settle_state, all_money_ori/cash/commission_account 抹平, 跳过处理, 循环到下一条
*/
if (partnerReward.getRewardType() == Constants.PARTNER_REWARD_TYPE_PURCHASE && partnerReward.getSettleState() > 0
&& partnerReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(partnerReward.getOrderType()) || isEmpty(partnerReward.getOrderSn()) || isEmpty(partnerReward.getRatioAll())) {
/**
* 如果没有找到active 或者 没有找到commission
* 不更新奖励金额
* 历史数据: 没有记录订单号 或者 没有记录比例 不更新奖励金额
*/
} else if (partnerReward.getSettleState() < 0) {
add2UpdateReward2Failed(partnerReward, update2FailedList);
} else {
/**
* 订单状态只有三种: -3, 1, 3
* 有订单号 和 比例快照 可以更新金额
*/
if (order.getStatus() == Constants.ORDER_STATE_FAILED) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
updateReward2Failed(partnerReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_PAID) {
// OrdersActive ordersActive = ordersActiveService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn());
// OrderTaobaoJdCommission order = orderTaobaoJdCommissionService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn());
OrderParam orderParam = new OrderParam();
orderParam.setOrderType(partnerReward.getOrderType());
orderParam.setOrderSn(partnerReward.getOrderSn());
OrdersActive ordersActive = ordersActiveMap.get(orderParam);
OrderTaobaoJdCommission order = orderMap.get(orderParam);
if (null == ordersActive || null == order) {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
* 如果没有找到active 或者 没有找到commission
* 不更新奖励金额
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(partnerReward.getRechargeTime().getTime());
partnerReward.setRechargeTime(new Date(newRechargeTime));
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_SETTLED) {
} else {
/**
* 订单结算 更新金额
* 订单状态只有三种: -3, 1, 3
*/
if (ordersActive.getIsForNew() == 1) {
if (order.getStatus() == Constants.ORDER_STATE_FAILED) {
/**
* 新人专享订单 不给合伙人奖励 跳过
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
updateReward2Failed(partnerReward);
add2UpdateReward2Failed(partnerReward, update2FailedList);
continue;
} else {
} else if (order.getStatus() == Constants.ORDER_STATE_PAID) {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
* 订单还是付款状态 更新奖励时间 下个月再处理
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(partnerReward.getRechargeTime().getTime());
partnerReward.setRechargeTime(new Date(newRechargeTime));
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
continue;
} else if (order.getStatus() == Constants.ORDER_STATE_SETTLED) {
/**
* 订单结算 更新金额
*/
updateRewardCommission(partnerReward, order.getAllMoney());
if (ordersActive.getIsForNew() == 1) {
/**
* 新人专享订单 不给合伙人奖励 跳过
*/
add2UpdateReward2Failed(partnerReward, update2FailedList);
continue;
} else {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
*/
add2UpdateRewardCommission(partnerReward, order.getAllMoney(), updateCommisionList);
}
}
}
}
}
}
/**
* 分享赚订单: 按子订单号更新奖励金额
*/
if (partnerReward.getRewardType() == Constants.PARTNER_REWARD_TYPE_SHARE && partnerReward.getSettleState() > 0
&& partnerReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(partnerReward.getOrderType()) || isEmpty(partnerReward.getOrderSn()) || isEmpty(partnerReward.getSubOrderSn())
|| isEmpty(partnerReward.getRatioAll())) {
/**
* 历史数据: 没有记录子订单号 或者 没有记录比例 不更新奖励金额
*/
} else {
/**
* 有订单号 和 比例快照 可以更新金额
*/
OrderTaobaoJdGoodsCommission subOrder = orderTaobaoJdGoodsCommissionService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn(), partnerReward.getSubOrderSn());
if (null == subOrder) {
/**
* 分享赚订单: 按子订单号更新奖励金额
*/
if (partnerReward.getRewardType() == Constants.PARTNER_REWARD_TYPE_SHARE && partnerReward.getSettleState() > 0
&& partnerReward.getSettleState() != Constants.SETTLE_STATE_DONE) {
if (isEmpty(partnerReward.getOrderType()) || isEmpty(partnerReward.getOrderSn()) || isEmpty(partnerReward.getSubOrderSn())
|| isEmpty(partnerReward.getRatioAll())) {
/**
* 如果没有找到子订单
* 不更新奖励金额
* 历史数据: 没有记录子订单号 或者 没有记录比例 不更新奖励金额
*/
} else if (partnerReward.getSettleState() < 0) {
add2UpdateReward2Failed(partnerReward, update2FailedList);
} else {
/**
* 订单状态只有三种: -3, 1, 3
* 有订单号 和 比例快照 可以更新金额
*/
if (subOrder.getOrderState() == Constants.ORDER_STATE_FAILED) {
// OrderTaobaoJdGoodsCommission subOrder = orderTaobaoJdGoodsCommissionService.getOneByOrderSn(partnerReward.getOrderType(), partnerReward.getOrderSn(), partnerReward.getSubOrderSn());
SubOrderParam subOrderParam = new SubOrderParam();
subOrderParam.setOrderType(partnerReward.getOrderType());
subOrderParam.setOrderSn(partnerReward.getOrderSn());
subOrderParam.setSubOrderSn(partnerReward.getSubOrderSn());
OrderTaobaoJdGoodsCommission subOrder = subOrderMap.get(subOrderParam);
if (null == subOrder) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
* 如果没有找到子订单
* 不更新奖励金额
*/
updateReward2Failed(partnerReward);
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_PAID) {
} else {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
* 订单状态只有三种: -3, 1, 3
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(partnerReward.getRechargeTime().getTime());
partnerReward.setRechargeTime(new Date(newRechargeTime));
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
continue;
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_SETTLED) {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
*/
updateRewardCommission(partnerReward, subOrder.getAllMoney());
if (subOrder.getOrderState() == Constants.ORDER_STATE_FAILED) {
/**
* 订单失效 订单付款 跳过, 处理下一条奖励
*/
add2UpdateReward2Failed(partnerReward, update2FailedList);
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_PAID) {
/**
* 订单还是付款状态 更新奖励时间 下个月再处理
*/
long newRechargeTime = DateUtils.getNextMonth1stTimestamp(partnerReward.getRechargeTime().getTime());
partnerReward.setRechargeTime(new Date(newRechargeTime));
partnerReward.setUpdatedAt(System.currentTimeMillis() / 1000L);
partnerRewardService.updateById(partnerReward);
continue;
} else if (subOrder.getOrderState() == Constants.ORDER_STATE_SETTLED) {
/**
* 正常订单 更新原始佣金
* all_money_ori: 原始佣金
* cash: all_money_ori 乘以 ratio_all中的每个比例
* commission_account: cash 乘以 commission_rate
*/
add2UpdateRewardCommission(partnerReward, subOrder.getAllMoney(), updateCommisionList);
}
}
}
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
cnt++;
}
pageNo++;
} else {
}
if (updateCommisionList.size() > 0) {
partnerRewardService.updateBatch(updateCommisionList);
}
if (update2FailedList.size() > 0) {
partnerRewardService.updateBatch(update2FailedList);
}
if (pageNo >= totalPage) {
break;
}
pageNo++;
}
logger.info("cnt is {}", cnt);
} catch (Exception e) {
logger.error(e.getMessage(),e);
logger.error("errPartnerReward is {}", errPartnerReward);
}
}
private Set<OrderParam> generateOrderParamsSet(List<PartnerReward> partnerRewardList) {
Set<OrderParam> set = new HashSet<OrderParam>();
for (PartnerReward reward : partnerRewardList) {
OrderParam orderParam = new OrderParam();
orderParam.setOrderType(reward.getOrderType());
orderParam.setOrderSn(reward.getOrderSn());
set.add(orderParam);
}
return set;
}
private Set<SubOrderParam> generateSubOrderParamsSet(List<PartnerReward> partnerRewardList) {
Set<SubOrderParam> set = new HashSet<SubOrderParam>();
for (PartnerReward reward : partnerRewardList) {
SubOrderParam orderParam = new SubOrderParam();
orderParam.setOrderType(reward.getOrderType());
orderParam.setOrderSn(reward.getOrderSn());
orderParam.setSubOrderSn(reward.getSubOrderSn());
set.add(orderParam);
}
return set;
}
private Map<SubOrderParam, OrderTaobaoJdGoodsCommission> generateSubOrderMap(Set<SubOrderParam> subOrderParamsSet) {
Map<SubOrderParam, OrderTaobaoJdGoodsCommission> map = new HashMap<SubOrderParam, OrderTaobaoJdGoodsCommission>();
List<OrderTaobaoJdGoodsCommission> list = orderTaobaoJdGoodsCommissionService.selectListBySubOrderParamsSet(subOrderParamsSet);
for (OrderTaobaoJdGoodsCommission subOrder : list) {
SubOrderParam key = new SubOrderParam();
key.setOrderType(subOrder.getType());
key.setOrderSn(subOrder.getOrderSn());
key.setSubOrderSn(subOrder.getSubOrderSn());
map.put(key, subOrder);
}
return map;
}
private Map<OrderParam, OrderTaobaoJdCommission> generateOrderMap(Set<OrderParam> orderParamSet) {
Map<OrderParam, OrderTaobaoJdCommission> map = new HashMap<OrderParam, OrderTaobaoJdCommission>();
List<OrderTaobaoJdCommission> list = orderTaobaoJdCommissionService.selectListByOrderParamSet(orderParamSet);
for (OrderTaobaoJdCommission order : list) {
OrderParam key = new OrderParam();
key.setOrderType(order.getType());
key.setOrderSn(order.getOrderSn());
map.put(key, order);
}
return map;
}
private Map<OrderParam, OrdersActive> generateOrdersActiveMap(Set<OrderParam> orderParamSet) {
Map<OrderParam, OrdersActive> map = new HashMap<OrderParam, OrdersActive>();
List<OrdersActive> list = ordersActiveService.selectListByOrderParamSet(orderParamSet);
for (OrdersActive order : list) {
OrderParam key = new OrderParam();
key.setOrderType(order.getType());
key.setOrderSn(order.getOrderSn());
map.put(key, order);
}
return map;
}
private static boolean setIncomeAndTax(PartnerSettle partnerSettle) {
try {
BigDecimal base = partnerSettle.getSumRedpack().add(partnerSettle.getSumOthers());
......@@ -520,60 +693,60 @@ public class PartnerSettleTask {
}
}
public boolean runSummary(String dateStr, int userId) {
try {
/**
* partner_account_log 跑结算日期
*/
Date dat = DateUtils.parse(dateStr, "yyyy-MM-dd");
int yeartime = Integer.parseInt(DateUtils.getYear(dat));
int monthtime = Integer.parseInt(DateUtils.getMonth(dat));
int daytime = Integer.parseInt(DateUtils.format(dat, "dd"));
PartnerAccountLog partnerAccountLog = partnerAccountLogService.getOneByUidAndDay(userId, yeartime, monthtime, daytime);
/**
* partner_income_summary 结算的数据月份 比dat早一个月
*/
long beginTs = DateUtils.getLastMonth1stTimestamp(dat.getTime()) / 1000L;
long endTs = DateUtils.getMonthLastTimestamp(dat.getTime()) / 1000L;
Date dat2 = new Date(beginTs * 1000L);
int yeartime2 = Integer.parseInt(DateUtils.getYear(dat2));
int monthtime2 = Integer.parseInt(DateUtils.getMonth(dat2));
PartnerIncomeSummary partnerIncomeSummary = partnerIncomeSummaryService.getOneByUidYearMonth(userId, yeartime2, monthtime2);
/**
* 获取显示的汇总数据
*/
PartnerSummaryContent partnerSummaryContent = partnerRewardService.getPartnerSummaryContentByUidAndTime(userId, beginTs, endTs);
/**
* 补差额
*/
BigDecimal sum = partnerSummaryContent.getCash()
.add(partnerSummaryContent.getUpCash())
.add(partnerSummaryContent.getIcash())
.add(partnerSummaryContent.getPcash())
.add(partnerSummaryContent.getScash())
.add(partnerSummaryContent.getRcash());
BigDecimal delta = partnerAccountLog.getChangeNum().subtract(sum);
partnerSummaryContent.setRcash(partnerSummaryContent.getRcash().add(delta));
/**
* 显示精度
*/
partnerSummaryContent.setCash(partnerSummaryContent.getCash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setUpCash(partnerSummaryContent.getUpCash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setIcash(partnerSummaryContent.getIcash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setPcash(partnerSummaryContent.getPcash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setScash(partnerSummaryContent.getScash().setScale(2, RoundingMode.HALF_UP));
partnerSummaryContent.setRcash(partnerSummaryContent.getRcash().setScale(2, RoundingMode.HALF_UP));
/**
* 更新数据
*/
partnerIncomeSummary.setContent(JSON.toJSONString(partnerSummaryContent));
partnerIncomeSummary.setIncome(partnerAccountLog.getChangeNum());
partnerIncomeSummaryService.updateById(partnerIncomeSummary);
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return false;
}
}
// public boolean runSummary(String dateStr, int userId) {
// try {
// /**
// * partner_account_log 跑结算日期
// */
// Date dat = DateUtils.parse(dateStr, "yyyy-MM-dd");
// int yeartime = Integer.parseInt(DateUtils.getYear(dat));
// int monthtime = Integer.parseInt(DateUtils.getMonth(dat));
// int daytime = Integer.parseInt(DateUtils.format(dat, "dd"));
// PartnerAccountLog partnerAccountLog = partnerAccountLogService.getOneByUidAndDay(userId, yeartime, monthtime, daytime);
// /**
// * partner_income_summary 结算的数据月份 比dat早一个月
// */
// long beginTs = DateUtils.getLastMonth1stTimestamp(dat.getTime()) / 1000L;
// long endTs = DateUtils.getMonthLastTimestamp(dat.getTime()) / 1000L;
// Date dat2 = new Date(beginTs * 1000L);
// int yeartime2 = Integer.parseInt(DateUtils.getYear(dat2));
// int monthtime2 = Integer.parseInt(DateUtils.getMonth(dat2));
// PartnerIncomeSummary partnerIncomeSummary = partnerIncomeSummaryService.getOneByUidYearMonth(userId, yeartime2, monthtime2);
//
// /**
// * 获取显示的汇总数据
// */
// PartnerSummaryContent partnerSummaryContent = partnerRewardService.getPartnerSummaryContentByUidAndTime(userId, beginTs, endTs);
// /**
// * 补差额
// */
// BigDecimal sum = partnerSummaryContent.getCash()
// .add(partnerSummaryContent.getUpCash())
// .add(partnerSummaryContent.getIcash())
// .add(partnerSummaryContent.getPcash())
// .add(partnerSummaryContent.getScash())
// .add(partnerSummaryContent.getRcash());
// BigDecimal delta = partnerAccountLog.getChangeNum().subtract(sum);
// partnerSummaryContent.setRcash(partnerSummaryContent.getRcash().add(delta));
// /**
// * 显示精度
// */
// partnerSummaryContent.setCash(partnerSummaryContent.getCash().setScale(2, RoundingMode.HALF_UP));
// partnerSummaryContent.setUpCash(partnerSummaryContent.getUpCash().setScale(2, RoundingMode.HALF_UP));
// partnerSummaryContent.setIcash(partnerSummaryContent.getIcash().setScale(2, RoundingMode.HALF_UP));
// partnerSummaryContent.setPcash(partnerSummaryContent.getPcash().setScale(2, RoundingMode.HALF_UP));
// partnerSummaryContent.setScash(partnerSummaryContent.getScash().setScale(2, RoundingMode.HALF_UP));
// partnerSummaryContent.setRcash(partnerSummaryContent.getRcash().setScale(2, RoundingMode.HALF_UP));
// /**
// * 更新数据
// */
// partnerIncomeSummary.setContent(JSON.toJSONString(partnerSummaryContent));
// partnerIncomeSummary.setIncome(partnerAccountLog.getChangeNum());
// partnerIncomeSummaryService.updateById(partnerIncomeSummary);
// return true;
// } catch (Exception e) {
// logger.error(e.getMessage(), e);
// return false;
// }
// }
}
......@@ -7,11 +7,15 @@ import com.lanren.huhu.partner.service.AgentRewardService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import static com.lanren.huhu.partner.constants.Constants.*;
......@@ -32,6 +36,10 @@ public class RevokeAgentRewardTask {
AgentRevokeRecordsService agentRevokeRecordsService;
@Autowired
AgentRewardService agentRewardService;
@Autowired
DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
@Scheduled(fixedDelay = 5000L)
public void runScheduledTask() {
......@@ -62,46 +70,67 @@ public class RevokeAgentRewardTask {
}
}
public void process(AgentRevokeRecords revokeRecord) {
int revokeType = revokeRecord.getRevokeType();
if (!AGENT_REVOKE_TYPE_MAP.keySet().contains(revokeType)) {
logger.info("未知的奖励类型 跳过不处理: {}", revokeRecord);
return;
}
AgentReward agentReward = null;
if (revokeType == AGENT_REVOKE_TYPE_ACTIVATION || revokeType == AGENT_REVOKE_TYPE_SELF_ORDER) {
agentReward = agentRewardService.getOneByRefId(revokeRecord.getRefId());
} else if (revokeType == AGENT_REVOKE_TYPE_SHARE_ORDER) {
agentReward = agentRewardService.getOneBySubOrderSn(revokeRecord.getOrderType(), revokeRecord.getOrderSn(), revokeRecord.getSubOrderSn());
} else {
revokeRecord.setState(REVOKE_STATE_DO_NOTHING);
}
/**
* 已结算状态 插负, 未结算状态 抹平
*/
if (null != agentReward) {
if (agentReward.getSettleState() == SETTLE_STATE_DONE) {
agentReward.setAmount(agentReward.getAmount().negate());
agentReward.setCommission(agentReward.getCommission().negate());
if (agentRewardService.insertOne(agentReward) > 0) {
revokeRecord.setState(REVOKE_STATE_DONE);
} else {
revokeRecord.setState(REVOKE_STATE_FAILED);
private void process(AgentRevokeRecords revokeRecord) {
TransactionStatus transactionStatus = null;
try {
int revokeType = revokeRecord.getRevokeType();
if (!AGENT_REVOKE_TYPE_MAP.keySet().contains(revokeType)) {
logger.info("未知的奖励类型 跳过不处理: {}", revokeRecord);
return;
}
/**
* 开启事务
*/
transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
List<AgentReward> agentRewardList = null;
List<AgentReward> insertList = new ArrayList<AgentReward>();
List<AgentReward> updateList = new ArrayList<AgentReward>();
if (revokeType == AGENT_REVOKE_TYPE_ACTIVATION || revokeType == AGENT_REVOKE_TYPE_SELF_ORDER) {
agentRewardList = agentRewardService.getListByRefId(revokeRecord.getRefId());
} else if (revokeType == AGENT_REVOKE_TYPE_SHARE_ORDER) {
agentRewardList = agentRewardService.getListBySubOrderSn(revokeRecord.getOrderType(), revokeRecord.getOrderSn(), revokeRecord.getSubOrderSn());
} else {
revokeRecord.setState(REVOKE_STATE_DO_NOTHING);
}
/**
* 已结算状态 插负, 未结算状态 抹平
*/
if (null != agentRewardList && agentRewardList.size() > 0) {
for (AgentReward agentReward : agentRewardList) {
if (agentReward.getSettleState() == SETTLE_STATE_DONE) {
agentReward.setAmount(agentReward.getAmount().negate());
agentReward.setCommission(agentReward.getCommission().negate());
insertList.add(agentReward);
} else if (agentReward.getSettleState() == SETTLE_STATE_ON_THE_WAY || agentReward.getSettleState() == SETTLE_STATE_PRE) {
agentReward.setAmount(new BigDecimal(0));
agentReward.setCommission(new BigDecimal(0));
updateList.add(agentReward);
}
}
if (updateList.size() > 0) {
agentRewardService.updateBatch(updateList);
}
} else if (agentReward.getSettleState() == SETTLE_STATE_ON_THE_WAY || agentReward.getSettleState() == SETTLE_STATE_PRE) {
agentReward.setAmount(new BigDecimal(0));
agentReward.setCommission(new BigDecimal(0));
if (agentRewardService.updateById(agentReward)) {
revokeRecord.setState(REVOKE_STATE_DONE);
} else {
revokeRecord.setState(REVOKE_STATE_FAILED);
if (insertList.size() > 0) {
agentRewardService.batchInsert(insertList);
}
revokeRecord.setState(REVOKE_STATE_DONE);
} else {
revokeRecord.setState(REVOKE_STATE_DO_NOTHING);
}
} else {
revokeRecord.setState(REVOKE_STATE_DO_NOTHING);
agentRevokeRecordsService.updateById(revokeRecord);
/**
* 提交事务
*/
dataSourceTransactionManager.commit(transactionStatus);
} catch (Exception e) {
/**
* 回滚事务
*/
dataSourceTransactionManager.rollback(transactionStatus);
logger.error(e.getMessage(), e);
revokeRecord.setState(REVOKE_STATE_FAILED);
agentRevokeRecordsService.updateById(revokeRecord);
}
agentRevokeRecordsService.updateById(revokeRecord);
}
}
package com.lanren.huhu.partner.service;
import java.util.List;
import com.lanren.huhu.partner.domain.AgentExpandDaily;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.AgentExpandDaily;
import java.util.List;
/**
* @author chen
......@@ -24,6 +25,8 @@ public interface AgentExpandDailyService extends IService<AgentExpandDaily> {
int insertOrUpdateSelective(AgentExpandDaily record);
int updateByDatByDetail(String datStr);
Integer getMonthCntByAgent(int agentId, long beginTs, long endTs);
}
......@@ -27,9 +27,9 @@ public interface AgentRewardService extends IService<AgentReward> {
int insertOrUpdateSelective(AgentReward record);
AgentReward getOneByRefId(String refId);
List<AgentReward> getListByRefId(String refId);
AgentReward getOneBySubOrderSn(String orderType, String orderSn, String subOrderSn);
List<AgentReward> getListBySubOrderSn(String orderType, String orderSn, String subOrderSn);
int insertOne(AgentReward record);
......
......@@ -27,3 +27,4 @@ public interface AgentSalaryService extends IService<AgentSalary> {
int insert(AgentSalary agentSalary);
}
......@@ -2,8 +2,10 @@ package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.OrderTaobaoJdCommission;
import com.lanren.huhu.partner.model.OrderParam;
import java.util.List;
import java.util.Set;
/**
* @author houseme
......@@ -23,6 +25,6 @@ public interface OrderTaobaoJdCommissionService extends IService<OrderTaobaoJdCo
int insertOrUpdateSelective(OrderTaobaoJdCommission record);
OrderTaobaoJdCommission getOneByOrderSn(String orderType, String orderSn);
List<OrderTaobaoJdCommission> selectListByOrderParamSet(Set<OrderParam> orderParamSet);
}
......@@ -2,9 +2,12 @@ package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.OrderTaobaoJdGoodsCommission;
import com.lanren.huhu.partner.model.SubOrderParam;
import java.util.List;
/**
import java.util.Set;
/**
* @title: ${NAME}
* @projectName partner
* @description: TODO
......@@ -23,5 +26,5 @@ public interface OrderTaobaoJdGoodsCommissionService extends IService<OrderTaoba
int insertOrUpdateSelective(OrderTaobaoJdGoodsCommission record);
OrderTaobaoJdGoodsCommission getOneByOrderSn(String orderType, String orderSn, String subOrderSn);
List<OrderTaobaoJdGoodsCommission> selectListBySubOrderParamsSet(Set<SubOrderParam> subOrderParamsSet);
}
......@@ -2,9 +2,12 @@ package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.OrdersActive;
import com.lanren.huhu.partner.model.OrderParam;
import java.util.List;
/**
import java.util.Set;
/**
* @title: ${NAME}
* @projectName partner
* @description: TODO
......@@ -23,5 +26,5 @@ public interface OrdersActiveService extends IService<OrdersActive>{
int insertOrUpdateSelective(OrdersActive record);
OrdersActive getOneByOrderSn(String type, String orderSn);
List<OrdersActive> selectListByOrderParamSet(Set<OrderParam> orderParamSet);
}
......@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.PartnerReward;
import com.lanren.huhu.partner.model.PartnerSettle;
import com.lanren.huhu.partner.model.PartnerSummaryContent;
import java.util.List;
......@@ -48,6 +47,6 @@ public interface PartnerRewardService extends IService<PartnerReward> {
*/
int updateRewardStatusByUidAndTs(Integer userId, Long beginTs, Long endTs);
PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs);
// PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs);
}
package com.lanren.huhu.partner.service.impl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.AgentExpandDailyMapper;
import java.util.List;
import com.lanren.huhu.partner.domain.AgentExpandDaily;
import com.lanren.huhu.partner.service.AgentExpandDailyService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author chen
......@@ -44,6 +43,11 @@ public class AgentExpandDailyServiceImpl extends ServiceImpl<AgentExpandDailyMap
public int updateByDatByDetail(String datStr) {
return baseMapper.updateByDatByDetail(datStr);
}
@Override
public Integer getMonthCntByAgent(int agentId, long beginTs, long endTs) {
return baseMapper.getMonthCntByAgent(agentId, beginTs, endTs);
}
}
package com.lanren.huhu.partner.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -44,15 +45,18 @@ public class AgentRewardServiceImpl extends ServiceImpl<AgentRewardMapper, Agent
}
@Override
public AgentReward getOneByRefId(String refId) {
return null;
public List<AgentReward> getListByRefId(String refId) {
QueryWrapper<AgentReward> wrapper = new QueryWrapper<AgentReward>();
wrapper.eq("reference_id", refId).gt("settle_state", 0);
return baseMapper.selectList(wrapper);
}
@Override
public AgentReward getOneBySubOrderSn(String orderType, String orderSn, String subOrderSn) {
return null;
public List<AgentReward> getListBySubOrderSn(String orderType, String orderSn, String subOrderSn) {
QueryWrapper<AgentReward> wrapper = new QueryWrapper<AgentReward>();
wrapper.eq("order_type", orderType).eq("order_sn", orderSn).eq("sub_order_sn", subOrderSn)
.gt("settle_state", 0);
return baseMapper.selectList(wrapper);
}
@Override
public int insertOne(AgentReward record) {
List<AgentReward> list = new ArrayList<AgentReward>();
......
......@@ -39,6 +39,7 @@ public class AgentSalaryServiceImpl extends ServiceImpl<AgentSalaryMapper, Agent
public int insertOrUpdateSelective(AgentSalary record) {
return baseMapper.insertOrUpdateSelective(record);
}
@Override
@Options(useGeneratedKeys = true, keyProperty = "agentSalary", keyColumn = "id")
public int insert(AgentSalary agentSalary) {
......@@ -46,3 +47,4 @@ public class AgentSalaryServiceImpl extends ServiceImpl<AgentSalaryMapper, Agent
}
}
......@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.OrderTaobaoJdCommissionMapper;
import com.lanren.huhu.partner.domain.OrderTaobaoJdCommission;
import com.lanren.huhu.partner.model.OrderParam;
import com.lanren.huhu.partner.service.OrderTaobaoJdCommissionService;
import org.springframework.stereotype.Service;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* @author houseme
......@@ -40,10 +43,18 @@ public class OrderTaobaoJdCommissionServiceImpl extends ServiceImpl<OrderTaobaoJ
}
@Override
public OrderTaobaoJdCommission getOneByOrderSn(String orderType, String orderSn) {
public List<OrderTaobaoJdCommission> selectListByOrderParamSet(Set<OrderParam> orderParamSet) {
QueryWrapper<OrderTaobaoJdCommission> wrapper = new QueryWrapper<OrderTaobaoJdCommission>();
wrapper.eq("type", orderType).eq("order_sn", orderSn);
return baseMapper.selectOne(wrapper);
Iterator<OrderParam> iterator = orderParamSet.iterator();
for (int idx = 0; idx < orderParamSet.size(); idx++) {
OrderParam order = iterator.next();
wrapper.nested(i -> i.eq("type", order.getOrderType())
.eq("order_sn", order.getOrderSn()));
if (idx < orderParamSet.size() - 1) {
wrapper.or();
}
}
return baseMapper.selectList(wrapper);
}
}
......@@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.OrderTaobaoJdGoodsCommissionMapper;
import com.lanren.huhu.partner.domain.OrderTaobaoJdGoodsCommission;
import com.lanren.huhu.partner.model.SubOrderParam;
import com.lanren.huhu.partner.service.OrderTaobaoJdGoodsCommissionService;
import org.springframework.stereotype.Service;
import java.util.Iterator;
import java.util.List;
/**
import java.util.Set;
/**
* @title: ${NAME}
* @projectName partner
* @description: TODO
......@@ -36,9 +40,18 @@ public class OrderTaobaoJdGoodsCommissionServiceImpl extends ServiceImpl<OrderTa
return baseMapper.insertOrUpdateSelective(record);
}
@Override
public OrderTaobaoJdGoodsCommission getOneByOrderSn(String orderType, String orderSn, String subOrderSn) {
public List<OrderTaobaoJdGoodsCommission> selectListBySubOrderParamsSet(Set<SubOrderParam> subOrderParamsSet) {
QueryWrapper<OrderTaobaoJdGoodsCommission> wrapper = new QueryWrapper<OrderTaobaoJdGoodsCommission>();
wrapper.eq("type", orderType).eq("order_sn", orderSn).eq("sub_order_sn", subOrderSn);
return baseMapper.selectOne(wrapper);
Iterator<SubOrderParam> iterator = subOrderParamsSet.iterator();
for (int idx = 0; idx < subOrderParamsSet.size(); idx++) {
SubOrderParam order = iterator.next();
wrapper.nested(i -> i.eq("type", order.getOrderType())
.eq("order_sn", order.getOrderSn())
.eq("sub_order_sn", order.getSubOrderSn()));
if (idx < subOrderParamsSet.size() - 1) {
wrapper.or();
}
}
return baseMapper.selectList(wrapper);
}
}
package com.lanren.huhu.partner.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.OrdersActiveMapper;
import com.lanren.huhu.partner.domain.OrdersActive;
import com.lanren.huhu.partner.model.OrderParam;
import com.lanren.huhu.partner.service.OrdersActiveService;
import org.springframework.stereotype.Service;
import java.util.Iterator;
import java.util.List;
/**
import java.util.Set;
/**
* @title: ${NAME}
* @projectName partner
* @description: TODO
......@@ -36,7 +41,17 @@ public class OrdersActiveServiceImpl extends ServiceImpl<OrdersActiveMapper, Ord
}
@Override
public OrdersActive getOneByOrderSn(String type, String orderSn) {
return baseMapper.selectOneByOrderSn(type, orderSn);
public List<OrdersActive> selectListByOrderParamSet(Set<OrderParam> orderParamSet) {
QueryWrapper<OrdersActive> wrapper = new QueryWrapper<OrdersActive>();
Iterator<OrderParam> iterator = orderParamSet.iterator();
for (int idx = 0; idx < orderParamSet.size(); idx++) {
OrderParam order = iterator.next();
wrapper.nested(i -> i.eq("type", order.getOrderType())
.eq("order_sn", order.getOrderSn()));
if (idx < orderParamSet.size() - 1) {
wrapper.or();
}
}
return baseMapper.selectList(wrapper);
}
}
......@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.PartnerRewardMapper;
import com.lanren.huhu.partner.domain.PartnerReward;
import com.lanren.huhu.partner.model.PartnerSettle;
import com.lanren.huhu.partner.model.PartnerSummaryContent;
import com.lanren.huhu.partner.service.PartnerRewardService;
import org.springframework.stereotype.Service;
......@@ -68,9 +67,9 @@ public class PartnerRewardServiceImpl extends ServiceImpl<PartnerRewardMapper, P
return baseMapper.updateRewardStatusByUidAndTs(userId, beginTs, endTs);
}
@Override
public PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs) {
return baseMapper.getPartnerSummaryContentByUidAndTime(userId, beginTs, endTs);
}
// @Override
// public PartnerSummaryContent getPartnerSummaryContentByUidAndTime(int userId, long beginTs, long endTs) {
// return baseMapper.getPartnerSummaryContentByUidAndTime(userId, beginTs, endTs);
// }
}
......@@ -179,4 +179,10 @@
</if>
</trim>
</insert>
<select id="getMonthCntByAgent" resultType="int">
SELECT SUM(cnt_expand) cnt
FROM agent_expand_daily
WHERE agent_id=#{agentId}
AND dat BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
</select>
</mapper>
\ No newline at end of file
......@@ -668,31 +668,57 @@
b.agent_level,
a.balance,
a.techCharge,
a.techChargeRedpack,
a.techChargeOrder,
a.opencardBalance,
a.rechargeBalance,
a.upgradeBalance,
a.upgradeSuperBalance,
a.shareBalance,
a.zigoushengBalance,
a.pingtuiBalance
a.pingtuiBalance,
0 tax,
a.cash_place,
a.num_place,
a.cash_recharge,
a.num_recharge,
a.cash_open_card,
a.num_open_card,
a.cash_upgrade_partner,
a.num_upgrade_partner,
a.marketPerformance,
a.cash_upgrade_market,
a.cash_recharge_market
FROM (
SELECT
agent_id,
SUM(amount) balance,
SUM(case when agent_level=4 and reward_type in (50,740,60,760,300,750) AND settle_state>=0 then amount * 0.06 else 0 end) techCharge,
SUM(case when agent_level=4 and reward_type in (50,740,60,760,300,750) then amount * 0.06 else 0 end) techCharge,
SUM(case when agent_level=4 and reward_type in (50,740) then amount * 0.06 else 0 end) techChargeRedpack,
SUM(case when agent_level=4 and reward_type in (60,760,300,750) then amount * 0.06 else 0 end) techChargeOrder,
SUM(case when reward_type in (40) then amount else 0 end) opencardBalance,
SUM(case when reward_type in (50,740) then amount else 0 end) rechargeBalance,
SUM(case when reward_type in (30,710,720) then amount else 0 end) upgradeBalance,
SUM(case when reward_type in (20,730) then amount else 0 end) upgradeSuperBalance,
SUM(case when reward_type in (60,760) then amount else 0 end) shareBalance,
SUM(case when reward_type in (300,750) then amount else 0 end) zigoushengBalance,
SUM(0) pingtuiBalance
SUM(0) pingtuiBalance,
SUM(if(reward_type IN (60, 750, 300, 760),amount, 0)) AS cash_place,
COUNT(reward_type IN (60, 750, 300, 760) OR NULL) AS num_place,
SUM(if(reward_type IN (50, 740),amount, 0)) AS cash_recharge,
COUNT(reward_type IN (50, 740) OR NULL) AS num_recharge,
SUM(if(reward_type=40, amount, 0)) AS cash_open_card,
COUNT(reward_type=40 OR NULL) AS num_open_card,
SUM(if(reward_type IN (30, 20, 710, 720, 730),amount, 0)) AS cash_upgrade_partner,
COUNT(reward_type IN (30, 20, 710, 720, 730) OR NULL) AS num_upgrade_partner,
SUM(if(reward_type IN (50, 30, 20),cash_code, 0)) AS marketPerformance,
SUM(if(reward_type IN (30, 20),cash_code, 0)) AS cash_upgrade_market,
SUM(if(reward_type=50, cash_code, 0)) AS cash_recharge_market
FROM agent_reward
WHERE recharge_time
BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
AND reward_status=100
GROUP BY 1
ORDER BY 1
) a
JOIN user_agent b ON a.agent_id=b.agent_id
ORDER BY 1,2,3
......@@ -704,32 +730,58 @@
b.agent_level,
a.balance,
a.techCharge,
a.techChargeRedpack,
a.techChargeOrder,
a.opencardBalance,
a.rechargeBalance,
a.upgradeBalance,
a.upgradeSuperBalance,
a.shareBalance,
a.zigoushengBalance,
a.pingtuiBalance
a.pingtuiBalance,
0 tax,
a.cash_place,
a.num_place,
a.cash_recharge,
a.num_recharge,
a.cash_open_card,
a.num_open_card,
a.cash_upgrade_partner,
a.num_upgrade_partner,
a.marketPerformance,
a.cash_upgrade_market,
a.cash_recharge_market
FROM (
SELECT
agent_id,
SUM(amount) balance,
SUM(case when agent_level=4 and reward_type in (50,740,60,760,300,750) AND settle_state>=0 then amount * 0.06 else 0 end) techCharge,
SUM(case when agent_level=4 and reward_type in (50,740,60,760,300,750) then amount * 0.06 else 0 end) techCharge,
SUM(case when agent_level=4 and reward_type in (50,740) then amount * 0.06 else 0 end) techChargeRedpack,
SUM(case when agent_level=4 and reward_type in (60,760,300,750) then amount * 0.06 else 0 end) techChargeOrder,
SUM(case when reward_type in (40) then amount else 0 end) opencardBalance,
SUM(case when reward_type in (50,740) then amount else 0 end) rechargeBalance,
SUM(case when reward_type in (30,710,720) then amount else 0 end) upgradeBalance,
SUM(case when reward_type in (20,730) then amount else 0 end) upgradeSuperBalance,
SUM(case when reward_type in (60,760) then amount else 0 end) shareBalance,
SUM(case when reward_type in (300,750) then amount else 0 end) zigoushengBalance,
SUM(0) pingtuiBalance
SUM(0) pingtuiBalance,
SUM(if(reward_type IN (60, 750, 300, 760),amount, 0)) AS cash_place,
COUNT(reward_type IN (60, 750, 300, 760) OR NULL) AS num_place,
SUM(if(reward_type IN (50, 740),amount, 0)) AS cash_recharge,
COUNT(reward_type IN (50, 740) OR NULL) AS num_recharge,
SUM(if(reward_type=40, amount, 0)) AS cash_open_card,
COUNT(reward_type=40 OR NULL) AS num_open_card,
SUM(if(reward_type IN (30, 20, 710, 720, 730),amount, 0)) AS cash_upgrade_partner,
COUNT(reward_type IN (30, 20, 710, 720, 730) OR NULL) AS num_upgrade_partner,
SUM(if(reward_type IN (50, 30, 20),cash_code, 0)) AS marketPerformance,
SUM(if(reward_type IN (30, 20),cash_code, 0)) AS cash_upgrade_market,
SUM(if(reward_type=50, cash_code, 0)) AS cash_recharge_market
FROM agent_reward
WHERE recharge_time
BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
AND reward_status = 100
AND agent_id = #{agentId}
GROUP BY 1
ORDER BY 1
) a
JOIN user_agent b ON a.agent_id = b.agent_id
ORDER BY 1,2,3
......
......@@ -14,11 +14,13 @@
<result column="recharge_balance" property="rechargeBalance" />
<result column="upgrade_balance" property="upgradeBalance" />
<result column="upgrade_super_balance" property="upgradeSuperBalance" />
<result column="tax_balance" property="taxBalance" />
<result column="share_balance" property="shareBalance" />
<result column="tax_balance" property="taxBalance" />
<result column="zigousheng_balance" property="zigoushengBalance" />
<result column="pingtui_balance" property="pingtuiBalance" />
<result column="tech_charge" property="techCharge" />
<result column="tech_charge_redpack" property="techChargeRedpack" />
<result column="tech_charge_order" property="techChargeOrder" />
<result column="bank_account" property="bankAccount" />
<result column="bank_card_number" property="bankCardNumber" />
<result column="bank_name" property="bankName" />
......@@ -34,9 +36,10 @@
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, user_id, agent_id, yeartime, monthtime, `month`, balance, opencard_balance, recharge_balance,
upgrade_balance, upgrade_super_balance, tax_balance, share_balance, zigousheng_balance,
pingtui_balance, tech_charge, bank_account, bank_card_number, bank_name, branch_name,
reference_id, `status`, create_time, modify_time, created_at, updated_at, deleted_at
upgrade_balance, upgrade_super_balance, share_balance, tax_balance, zigousheng_balance,
pingtui_balance, tech_charge, tech_charge_redpack, tech_charge_order, bank_account,
bank_card_number, bank_name, branch_name, reference_id, `status`, create_time, modify_time,
created_at, updated_at, deleted_at
</sql>
<update id="updateBatch" parameterType="java.util.List">
<!--@mbg.generated-->
......@@ -92,14 +95,14 @@
when id = #{item.id} then #{item.upgradeSuperBalance}
</foreach>
</trim>
<trim prefix="tax_balance = case" suffix="end,">
<trim prefix="share_balance = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id} then #{item.taxBalance}
when id = #{item.id} then #{item.shareBalance}
</foreach>
</trim>
<trim prefix="share_balance = case" suffix="end,">
<trim prefix="tax_balance = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id} then #{item.shareBalance}
when id = #{item.id} then #{item.taxBalance}
</foreach>
</trim>
<trim prefix="zigousheng_balance = case" suffix="end,">
......@@ -117,6 +120,16 @@
when id = #{item.id} then #{item.techCharge}
</foreach>
</trim>
<trim prefix="tech_charge_redpack = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id} then #{item.techChargeRedpack}
</foreach>
</trim>
<trim prefix="tech_charge_order = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id} then #{item.techChargeOrder}
</foreach>
</trim>
<trim prefix="bank_account = case" suffix="end,">
<foreach collection="list" index="index" item="item">
when id = #{item.id} then #{item.bankAccount}
......@@ -182,18 +195,19 @@
<!--@mbg.generated-->
insert into agent_salary
(user_id, agent_id, yeartime, monthtime, `month`, balance, opencard_balance, recharge_balance,
upgrade_balance, upgrade_super_balance, tax_balance, share_balance, zigousheng_balance,
pingtui_balance, tech_charge, bank_account, bank_card_number, bank_name, branch_name,
reference_id, `status`, create_time, modify_time, created_at, updated_at, deleted_at
)
upgrade_balance, upgrade_super_balance, share_balance, tax_balance, zigousheng_balance,
pingtui_balance, tech_charge, tech_charge_redpack, tech_charge_order, bank_account,
bank_card_number, bank_name, branch_name, reference_id, `status`, create_time,
modify_time, created_at, updated_at, deleted_at)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.agentId}, #{item.yeartime}, #{item.monthtime}, #{item.month},
#{item.balance}, #{item.opencardBalance}, #{item.rechargeBalance}, #{item.upgradeBalance},
#{item.upgradeSuperBalance}, #{item.taxBalance}, #{item.shareBalance}, #{item.zigoushengBalance},
#{item.pingtuiBalance}, #{item.techCharge}, #{item.bankAccount}, #{item.bankCardNumber},
#{item.bankName}, #{item.branchName}, #{item.referenceId}, #{item.status}, #{item.createTime},
#{item.modifyTime}, #{item.createdAt}, #{item.updatedAt}, #{item.deletedAt})
#{item.upgradeSuperBalance}, #{item.shareBalance}, #{item.taxBalance}, #{item.zigoushengBalance},
#{item.pingtuiBalance}, #{item.techCharge}, #{item.techChargeRedpack}, #{item.techChargeOrder},
#{item.bankAccount}, #{item.bankCardNumber}, #{item.bankName}, #{item.branchName},
#{item.referenceId}, #{item.status}, #{item.createTime}, #{item.modifyTime}, #{item.createdAt},
#{item.updatedAt}, #{item.deletedAt})
</foreach>
</insert>
<insert id="insertOrUpdate" keyColumn="id" keyProperty="id" parameterType="com.lanren.huhu.partner.domain.AgentSalary" useGeneratedKeys="true">
......@@ -213,11 +227,13 @@
recharge_balance,
upgrade_balance,
upgrade_super_balance,
tax_balance,
share_balance,
tax_balance,
zigousheng_balance,
pingtui_balance,
tech_charge,
tech_charge_redpack,
tech_charge_order,
bank_account,
bank_card_number,
bank_name,
......@@ -245,11 +261,13 @@
#{rechargeBalance},
#{upgradeBalance},
#{upgradeSuperBalance},
#{taxBalance},
#{shareBalance},
#{taxBalance},
#{zigoushengBalance},
#{pingtuiBalance},
#{techCharge},
#{techChargeRedpack},
#{techChargeOrder},
#{bankAccount},
#{bankCardNumber},
#{bankName},
......@@ -277,11 +295,13 @@
recharge_balance = #{rechargeBalance},
upgrade_balance = #{upgradeBalance},
upgrade_super_balance = #{upgradeSuperBalance},
tax_balance = #{taxBalance},
share_balance = #{shareBalance},
tax_balance = #{taxBalance},
zigousheng_balance = #{zigoushengBalance},
pingtui_balance = #{pingtuiBalance},
tech_charge = #{techCharge},
tech_charge_redpack = #{techChargeRedpack},
tech_charge_order = #{techChargeOrder},
bank_account = #{bankAccount},
bank_card_number = #{bankCardNumber},
bank_name = #{bankName},
......@@ -332,12 +352,12 @@
<if test="upgradeSuperBalance != null">
upgrade_super_balance,
</if>
<if test="taxBalance != null">
tax_balance,
</if>
<if test="shareBalance != null">
share_balance,
</if>
<if test="taxBalance != null">
tax_balance,
</if>
<if test="zigoushengBalance != null">
zigousheng_balance,
</if>
......@@ -347,6 +367,12 @@
<if test="techCharge != null">
tech_charge,
</if>
<if test="techChargeRedpack != null">
tech_charge_redpack,
</if>
<if test="techChargeOrder != null">
tech_charge_order,
</if>
<if test="bankAccount != null">
bank_account,
</if>
......@@ -416,12 +442,12 @@
<if test="upgradeSuperBalance != null">
#{upgradeSuperBalance},
</if>
<if test="taxBalance != null">
#{taxBalance},
</if>
<if test="shareBalance != null">
#{shareBalance},
</if>
<if test="taxBalance != null">
#{taxBalance},
</if>
<if test="zigoushengBalance != null">
#{zigoushengBalance},
</if>
......@@ -431,6 +457,12 @@
<if test="techCharge != null">
#{techCharge},
</if>
<if test="techChargeRedpack != null">
#{techChargeRedpack},
</if>
<if test="techChargeOrder != null">
#{techChargeOrder},
</if>
<if test="bankAccount != null">
#{bankAccount},
</if>
......@@ -500,12 +532,12 @@
<if test="upgradeSuperBalance != null">
upgrade_super_balance = #{upgradeSuperBalance},
</if>
<if test="taxBalance != null">
tax_balance = #{taxBalance},
</if>
<if test="shareBalance != null">
share_balance = #{shareBalance},
</if>
<if test="taxBalance != null">
tax_balance = #{taxBalance},
</if>
<if test="zigoushengBalance != null">
zigousheng_balance = #{zigoushengBalance},
</if>
......@@ -515,6 +547,12 @@
<if test="techCharge != null">
tech_charge = #{techCharge},
</if>
<if test="techChargeRedpack != null">
tech_charge_redpack = #{techChargeRedpack},
</if>
<if test="techChargeOrder != null">
tech_charge_order = #{techChargeOrder},
</if>
<if test="bankAccount != null">
bank_account = #{bankAccount},
</if>
......
......@@ -714,12 +714,25 @@
SUM(CASE WHEN reward_type=60 THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.97 WHEN user_partner_level=20 THEN 0.94 ELSE 1 END
ELSE 0 END) sum_redpack,
SUM(CASE WHEN reward_type NOT IN (60,110,120) THEN commission_acount ELSE 0 END) sum_others,
SUM(CASE WHEN reward_type IN (60, 110, 120) AND settle_state>0 THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
ELSE 0 END) tech_charge,
SUM(CASE WHEN reward_type IN (60) THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
ELSE 0 END) tech_charge_redpack,
SUM(CASE WHEN reward_type IN (110, 120) THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
ELSE 0 END) tech_charge_order,
0 wx_income,
0 wx_tax,
0 bank_income,
0 bank_tax
0 bank_tax,
SUM(if(reward_type=60 AND is_show_on_client=1, commission_acount, 0)) AS cash,
COUNT(reward_type=60 OR NULL) AS num,
SUM(if(reward_type IN (70, 100) AND is_show_on_client=1,commission_acount, 0)) AS upCash,
COUNT(reward_type IN (70, 100)OR NULL) AS upNum,
SUM(if(reward_type=80 AND is_show_on_client=1, commission_acount, 0)) AS icash,
COUNT(reward_type=80 OR NULL) AS inum,
SUM(if(reward_type=90 AND is_show_on_client=1, commission_acount, 0)) AS pcash,
COUNT(reward_type=90 OR NULL) AS pnum,
SUM(if(reward_type IN(110, 120) AND is_show_on_client=1,commission_acount, 0)) AS scash,
COUNT(reward_type IN(110, 120) OR NULL) AS snum,
SUM(if(is_show_on_client=0, commission_acount, 0)) AS rcash
FROM partner_reward
WHERE recharge_time
BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
......@@ -736,13 +749,27 @@
SUM(CASE WHEN reward_type=60 THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.97 WHEN user_partner_level=20 THEN 0.94 ELSE 1 END
ELSE 0 END) sum_redpack,
SUM(CASE WHEN reward_type NOT IN (60,110,120) THEN commission_acount ELSE 0 END) sum_others,
SUM(CASE WHEN reward_type IN (60, 110, 120) AND settle_state>=0 THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
SUM(CASE WHEN reward_type IN (60) THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
ELSE 0 END
) tech_charge,
) tech_charge_redpack,
SUM(CASE WHEN reward_type IN (110, 120) THEN commission_acount * CASE WHEN user_is_super=1 THEN 0.03 WHEN user_partner_level=20 THEN 0.06 ELSE 0 END
ELSE 0 END
) tech_charge_order,
0 wx_income,
0 wx_tax,
0 bank_income,
0 bank_tax
0 bank_tax,
SUM(if(reward_type=60 AND is_show_on_client=1, commission_acount, 0)) AS cash,
COUNT(reward_type=60 OR NULL) AS num,
SUM(if(reward_type IN (70, 100) AND is_show_on_client=1,commission_acount, 0)) AS upCash,
COUNT(reward_type IN (70, 100)OR NULL) AS upNum,
SUM(if(reward_type=80 AND is_show_on_client=1, commission_acount, 0)) AS icash,
COUNT(reward_type=80 OR NULL) AS inum,
SUM(if(reward_type=90 AND is_show_on_client=1, commission_acount, 0)) AS pcash,
COUNT(reward_type=90 OR NULL) AS pnum,
SUM(if(reward_type IN(110, 120) AND is_show_on_client=1,commission_acount, 0)) AS scash,
COUNT(reward_type IN(110, 120) OR NULL) AS snum,
SUM(if(is_show_on_client=0, commission_acount, 0)) AS rcash
FROM partner_reward
WHERE recharge_time
BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
......@@ -760,22 +787,23 @@
AND reward_status=100
AND reward_type != 130
</update>
<select id="getPartnerSummaryContentByUidAndTime" resultType="com.lanren.huhu.partner.model.PartnerSummaryContent">
SELECT
SUM(if(reward_type=60 AND is_show_on_client=1, commission_acount, 0)) AS cash,
COUNT(reward_type=60 OR NULL) AS num,
SUM(if(reward_type IN (70, 100) AND is_show_on_client=1,commission_acount, 0)) AS upCash,
COUNT(reward_type IN (70, 100)OR NULL) AS upNum,
SUM(if(reward_type=80 AND is_show_on_client=1, commission_acount, 0)) AS icash,
COUNT(reward_type=80 OR NULL) AS inum,
SUM(if(reward_type=90 AND is_show_on_client=1, commission_acount, 0)) AS pcash,
COUNT(reward_type=90 OR NULL) AS pnum,
SUM(if(reward_type IN(110, 120) AND is_show_on_client=1,commission_acount, 0)) AS scash,
COUNT(reward_type IN(110, 120) OR NULL) AS snum,
SUM(if(is_show_on_client=0, commission_acount, 0)) AS rcash
FROM partner_reward
WHERE recharge_time BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})
AND reward_status=120
AND user_id=#{userId}
</select>
<!--<select id="getPartnerSummaryContentByUidAndTime" resultType="com.lanren.huhu.partner.model.PartnerSummaryContent">-->
<!--SELECT-->
<!--SUM(if(reward_type=60 AND is_show_on_client=1, commission_acount, 0)) AS cash,-->
<!--COUNT(reward_type=60 OR NULL) AS num,-->
<!--SUM(if(reward_type IN (70, 100) AND is_show_on_client=1,commission_acount, 0)) AS upCash,-->
<!--COUNT(reward_type IN (70, 100)OR NULL) AS upNum,-->
<!--SUM(if(reward_type=80 AND is_show_on_client=1, commission_acount, 0)) AS icash,-->
<!--COUNT(reward_type=80 OR NULL) AS inum,-->
<!--SUM(if(reward_type=90 AND is_show_on_client=1, commission_acount, 0)) AS pcash,-->
<!--COUNT(reward_type=90 OR NULL) AS pnum,-->
<!--SUM(if(reward_type IN(110, 120) AND is_show_on_client=1,commission_acount, 0)) AS scash,-->
<!--COUNT(reward_type IN(110, 120) OR NULL) AS snum,-->
<!--SUM(if(is_show_on_client=0, commission_acount, 0)) AS rcash-->
<!--FROM partner_reward-->
<!--WHERE recharge_time BETWEEN FROM_UNIXTIME(#{beginTs}) AND FROM_UNIXTIME(#{endTs})-->
<!--AND reward_status=120-->
<!--AND reward_type != 130-->
<!--AND user_id=#{userId}-->
<!--</select>-->
</mapper>
\ No newline at end of file
......@@ -79,4 +79,132 @@ set self_rate=0.864
where type in (10,30) and self_role=30;
ALTER TABLE `huhu`.`partner_reward`
ADD COLUMN `tech_fee_rate` decimal(11, 6) NOT NULL DEFAULT 0 COMMENT '技术服务费扣除比例' AFTER `ratio_all`;
\ No newline at end of file
ADD COLUMN `tech_fee_rate` decimal(11, 6) NOT NULL DEFAULT 0 COMMENT '技术服务费扣除比例' AFTER `ratio_all`;
ALTER TABLE `huhu`.`agent_salary`
MODIFY COLUMN `pingtui_balance` decimal(20, 6) NOT NULL DEFAULT 0 COMMENT '来自城市代理商的平推奖励' AFTER `zigousheng_balance`,
MODIFY COLUMN `tech_charge` decimal(20, 6) NOT NULL DEFAULT 0 COMMENT '技术服务费' AFTER `pingtui_balance`,
ADD COLUMN `tech_charge_redpack` decimal(20, 6) NOT NULL DEFAULT 0 COMMENT '红包技术服务费' AFTER `tech_charge`,
ADD COLUMN `tech_charge_order` decimal(20, 6) NOT NULL DEFAULT 0 COMMENT '佣金技术服务费' AFTER `tech_charge_redpack`;
ALTER TABLE `huhu`.`agent_income_summary`
MODIFY COLUMN `income` decimal(20, 6) NOT NULL DEFAULT 0.0000 COMMENT '结算金额' AFTER `monthtime`;
结算后核对SQL:
代理商:
1. agent_account_log
select
a.agent_id,
a.结算前余额,
a.月结发钱,
a.平台技术服务费,
a.代扣个人所得税,
a.结算前余额+a.月结发钱+a.平台技术服务费+a.代扣个人所得税 '预估结算后余额',
b.changed_amount '显示结算后余额'
from
(select
agent_id,
max(case when pay_remark='2019-07月结发钱' then REPLACE(substr(`snapshot`,INSTR(`snapshot`,'balance=')+8),')','') else '0' end) '结算前余额',
sum(case when pay_remark='2019-07月结发钱' then change_num else 0 end) '月结发钱',
sum(case when pay_remark='2019-07平台技术服务费' then change_num else 0 end) '平台技术服务费',
sum(case when pay_remark='2019-07代扣个人所得税' then change_num else 0 end) '代扣个人所得税',
max(id) m_id
from agent_account_log a
where yeartime=2019 and monthtime=8 and daytime=21
group by 1
) a
join agent_account_log b on a.m_id=b.id
where round(a.结算前余额+a.月结发钱+a.平台技术服务费+a.代扣个人所得税,2)
<>
round(b.changed_amount ,2);
2. agent_income_summary
select
income,
JSON_EXTRACT(content, '$.cashPlace')+
JSON_EXTRACT(content, '$.cashOpenCard')+
JSON_EXTRACT(content, '$.cashRecharge')+
JSON_EXTRACT(content, '$.cashUpgradePartner') 'income2',
content
from agent_income_summary
where yeartime=2019 and monthtime=7
and round(income,1)
<>
round(JSON_EXTRACT(content, '$.cashPlace')+JSON_EXTRACT(content, '$.cashOpenCard')+JSON_EXTRACT(content, '$.cashRecharge')+JSON_EXTRACT(content, '$.cashUpgradePartner'),1)
3. agent_salary
select
agent_id,
balance,
recharge_balance 'redpack_balance',
zigousheng_balance+share_balance 'order_balance',
opencard_balance+upgrade_balance+upgrade_super_balance+pingtui_balance 'others',
balance-zigousheng_balance-share_balance-tech_charge_redpack 'tax_base',
case when (balance-zigousheng_balance-share_balance-tech_charge_redpack-800)*0.1 > 0 then (balance-zigousheng_balance-share_balance-tech_charge_redpack-800)*0.1 else 0 end 'tax',
tax_balance
from agent_salary
where yeartime=2019 and monthtime=7
and case when (balance-zigousheng_balance-share_balance-tech_charge_redpack-800)*0.1 > 0 then (balance-zigousheng_balance-share_balance-tech_charge_redpack-800)*0.1 else 0 end
<>
tax_balance
4. agent_account
select
agent_id,
balance
from agent_account
合伙人:
select
a.user_id,
c.wx_free_balance 结算前余额,
a.月结发钱,
a.平台技术服务费,
a.代扣个人所得税,
c.wx_free_balance+a.月结发钱+a.平台技术服务费+a.代扣个人所得税 '预估结算后余额',
b.changed_amount '显示结算后余额'
from
(select
user_id,
max(REPLACE(substr(`snapshot`,INSTR(`snapshot`,'wxFreeBalance=')+14),')','')),
sum(case when pay_remark='2019-07月结发钱' then change_num else 0 end) '月结发钱',
sum(case when pay_remark='2019-07平台技术服务费' then change_num else 0 end) '平台技术服务费',
sum(case when pay_remark='2019-07代扣个人所得税' then change_num else 0 end) '代扣个人所得税',
max(id) m_id
from partner_account_log a
where yeartime=2019 and monthtime=8 and daytime=21
group by 1
) a
join partner_account_log b on a.m_id=b.id
join partner_account_copy1 c on a.user_id=c.user_id
where round(c.wx_free_balance+a.月结发钱+a.平台技术服务费+a.代扣个人所得税,2)
=
round(b.changed_amount ,2);
select
income,
JSON_EXTRACT(content, '$.cash')+
JSON_EXTRACT(content, '$.upCash')+
JSON_EXTRACT(content, '$.icash')+
JSON_EXTRACT(content, '$.pcash')+
JSON_EXTRACT(content, '$.scash')+
JSON_EXTRACT(content, '$.rcash')
'income2'
from partner_income_summary
where yeartime=2019 and monthtime=7
and round(income,1)
<>
round(JSON_EXTRACT(content, '$.cash')+JSON_EXTRACT(content, '$.upCash')+JSON_EXTRACT(content, '$.icash')+JSON_EXTRACT(content, '$.pcash')+JSON_EXTRACT(content, '$.scash')+JSON_EXTRACT(content, '$.rcash'),1)
select
user_id,
wx_free_balance
from partner_account
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment