Commit 7c77db91 by guanchen

添加代理商处理

parent 4630db2c
......@@ -7,12 +7,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @author houseme
*/
@SpringBootApplication
@EnableCaching
@EnableScheduling
public class PartnerApplication extends SpringBootServletInitializer {
private static Logger logger = LoggerFactory.getLogger(PartnerApplication.class);
......
package com.lanren.huhu.partner.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* @author chen
* @title: AsyncConfig
* @projectName partner
* @description: 异步任务设置
* @package com.lanren.huhu.partner.config
* @date 2019-06-29 15:48
*/
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//核心线程数
taskExecutor.setCorePoolSize(8);
//最大线程数
taskExecutor.setMaxPoolSize(16);
//队列大小
taskExecutor.setQueueCapacity(100);
taskExecutor.initialize();
return taskExecutor;
}
}
package com.lanren.huhu.partner.constants;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
* @author chen
* @title: Constants
* @projectName partner
* @description: TODO
* @package com.lanren.huhu.partner.constants
* @date 2019-06-29 17:04
*/
public class Constants {
public static final String AGENT_REWARD_QUEUE_KEY = "agent_reward_redis_city_key";
public static final int AGENT_REWARD_TYPE_YEAR_VIP = 710;
public static final int AGENT_REWARD_TYPE_HALF_YEAR_VIP = 720;
public static final int AGENT_REWARD_TYPE_SVIP = 730;
public static final int AGENT_REWARD_TYPE_ORDER_AND_REDPACK = 740;
public static Map<Integer, Map<Integer, BigDecimal>> AGENT_RATE_MAP = new HashMap<Integer, Map<Integer, BigDecimal>>();
public static final int AGENT_LEVEL_1 = 1;
public static final int AGENT_LEVEL_2 = 2;
public static final int AGENT_LEVEL_3 = 3;
public static final int AGENT_LEVEL_4 = 4;
public static final String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
static {
AGENT_RATE_MAP.put(AGENT_REWARD_TYPE_YEAR_VIP, new HashMap<Integer, BigDecimal>());
AGENT_RATE_MAP.put(AGENT_REWARD_TYPE_HALF_YEAR_VIP, new HashMap<Integer, BigDecimal>());
AGENT_RATE_MAP.put(AGENT_REWARD_TYPE_SVIP, new HashMap<Integer, BigDecimal>());
AGENT_RATE_MAP.put(AGENT_REWARD_TYPE_ORDER_AND_REDPACK, new HashMap<Integer, BigDecimal>());
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_YEAR_VIP).put(0, new BigDecimal("0.03333333"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_YEAR_VIP).put(1, new BigDecimal("0.01388889"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_YEAR_VIP).put(2, new BigDecimal("0.00833333"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_HALF_YEAR_VIP).put(0, new BigDecimal("0.03015075"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_HALF_YEAR_VIP).put(1, new BigDecimal("0.01256281"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_HALF_YEAR_VIP).put(2, new BigDecimal("0.00753769"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_SVIP).put(0, new BigDecimal("0.02500000"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_SVIP).put(1, new BigDecimal("0.01111111"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_SVIP).put(2, new BigDecimal("0.00555556"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_ORDER_AND_REDPACK).put(0, new BigDecimal("0.03"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_ORDER_AND_REDPACK).put(1, new BigDecimal("0.02"));
AGENT_RATE_MAP.get(AGENT_REWARD_TYPE_ORDER_AND_REDPACK).put(2, new BigDecimal("0.01"));
}
}
package com.lanren.huhu.partner.controller;
import com.lanren.huhu.partner.manager.UserAgentManager;
import com.lanren.huhu.partner.manager.AgentManager;
import com.lanren.huhu.partner.model.Agent;
import com.lanren.huhu.partner.model.AgentRsp;
import com.lanren.huhu.partner.model.AgentResponse;
import com.lanren.huhu.partner.result.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -22,13 +22,29 @@ public class AgentController {
private static Logger logger = LoggerFactory.getLogger(AgentController.class);
@Autowired
UserAgentManager userAgentManager;
AgentManager agentManager;
@RequestMapping(value = "/level", method = RequestMethod.POST)
public Result<AgentRsp> getAgentLevel(@RequestBody @Valid Agent agent, @RequestHeader HttpHeaders headers) {
public Result<AgentResponse> getAgentLevel(@RequestBody @Valid Agent agent, @RequestHeader HttpHeaders headers) {
if (logger.isInfoEnabled()) {
logger.info("getLevel agentId:{},header:{},time:{}", agent.getAgentId(), headers.keySet().toArray(), LocalDateTime.now());
logger.info("AgentController getLevel agentId:{},header:{},time:{}", agent.getAgentId(), headers.keySet().toArray(), LocalDateTime.now());
}
return userAgentManager.getAgentLevel(agent.getAgentId());
return agentManager.getAgentLevel(agent.getAgentId());
}
@RequestMapping(value = "/reward/divide", method = RequestMethod.POST)
public Result<String> divideReward(@RequestHeader HttpHeaders headers) {
if (logger.isInfoEnabled()) {
logger.info("AgentController divideReward, header:{},time:{}", headers.keySet().toArray(), LocalDateTime.now());
}
return agentManager.divideReward();
}
@RequestMapping(value = "/reward/push", method = RequestMethod.POST)
public Result<String> pushReward(@RequestHeader HttpHeaders headers) {
if (logger.isInfoEnabled()) {
logger.info("AgentController divideReward, header:{},time:{}", headers.keySet().toArray(), LocalDateTime.now());
}
return agentManager.pushReward();
}
}
package com.lanren.huhu.partner.controller; import com.lanren.huhu.partner.manager.PartnerAccountManager;import com.lanren.huhu.partner.model.Partner;import com.lanren.huhu.partner.model.PartnerRsp;import com.lanren.huhu.partner.result.Result;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 PartnerAccountManager partnerAccountManager; @RequestMapping(value = "/level", method = RequestMethod.POST) public Result<PartnerRsp> 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 partnerAccountManager.getPartnerLevel(partner.getUserId()); }}
\ 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 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; @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()); }}
\ No newline at end of file
......
......@@ -3,11 +3,11 @@ package com.lanren.huhu.partner.controller;
import com.lanren.huhu.partner.manager.UserManager;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.result.Result;
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.http.HttpHeaders;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
......@@ -17,24 +17,20 @@ import java.time.LocalDateTime;
* @author chen
*/
@RestController
@EnableAsync
@RequestMapping("/v1/user")
public class UserController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserManager userManager;
@Autowired
private PartnerAccountService partnerAccountService;
@RequestMapping(value = "/relation", method = RequestMethod.POST)
public Result<User> getRelation(@RequestBody @Valid User user, @RequestHeader HttpHeaders headers) {
if (logger.isInfoEnabled()) {
logger.info("getRelation userId:{ },header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now());
}
User resutrnUser = userManager.getRelationByUserId(user.getUserId());
Result<User> result = new Result<User>();
result.setData(resutrnUser);
return result;
return userManager.getRelationByUserId(user.getUserId());
}
@RequestMapping(value = "/relation/delete", method = RequestMethod.POST)
......@@ -42,13 +38,7 @@ public class UserController {
if (logger.isInfoEnabled()) {
logger.info("deletrRelation userId:{ },header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now());
}
Result<String> result = new Result<String>();
if (userManager.deleteRalationByUserId(user.getUserId())) {
result.setData("删除成功");
} else {
result.setCode(500);
}
return result;
return userManager.deleteRalationByUserId(user.getUserId());
}
@RequestMapping(value = "/relation/change", method = RequestMethod.POST)
......@@ -56,13 +46,10 @@ public class UserController {
if (logger.isInfoEnabled()) {
logger.info("changeRelation userId:{},header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now());
}
userManager.changeRelation(user.getUserId());
logger.info("============>"+Thread.currentThread().getName());
Result<String> result = new Result<String>();
int code = userManager.findPartnerChiledren(user.getUserId());
if (code == 0) {
result.setData("用户刷新成功");
} else {
result.setCode(code);
}
result.setData("异步,正在执行刷新......");
return result;
}
}
package com.lanren.huhu.partner.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lanren.huhu.partner.domain.AgentReward;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface AgentRewardMapper extends BaseMapper<AgentReward> {
int updateBatch(List<AgentReward> list);
int batchInsert(@Param("list") List<AgentReward> list);
int insertOrUpdate(AgentReward record);
int insertOrUpdateSelective(AgentReward record);
}
\ No newline at end of file
package com.lanren.huhu.partner.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;
@Data
@TableName(value = "agent_reward")
public class AgentReward implements Serializable {
/**
* ID序号
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 代理商id
*/
@TableField(value = "agent_id")
private Integer agentId;
/**
* 代理商等级
*/
@TableField(value = "agent_level")
private Integer agentLevel;
/**
* 用户id
*/
@TableField(value = "user_id")
private Integer userId;
/**
* 奖励类型 40 开卡奖励 50 充值奖励 30 购买VIP会员 20 购买超级VIP会员
*/
@TableField(value = "reward_type")
private Integer rewardType;
/**
* 描述
*/
@TableField(value = "reward_remark")
private String rewardRemark;
/**
* 状态 100正常 99 错误
*/
@TableField(value = "reward_status")
private Integer rewardStatus;
/**
* 卡面值
*/
@TableField(value = "money")
private BigDecimal money;
/**
* 奖励金额
*/
@TableField(value = "amount")
private BigDecimal amount;
/**
* 充值支付金额或许充值卡卡号
*/
@TableField(value = "cash_code")
private String cashCode;
/**
* 用户充值时间
*/
@TableField(value = "recharge_time")
private LocalDateTime rechargeTime;
/**
* 可分红总额
*/
@TableField(value = "commission_acount")
private BigDecimal commissionAcount;
/**
* 比例值
*/
@TableField(value = "commission_rate")
private BigDecimal commissionRate;
/**
* 得到分红值
*/
@TableField(value = "commission")
private BigDecimal commission;
/**
* 相关id 产品或许充值卡相关id
*/
@TableField(value = "reference_id")
private Long referenceId;
/**
* 结算状态 100在路上 200预结算 300已结算 -100在路上已失效 -200预结算已失效 -300已结算扣回
*/
@TableField(value = "settle_state")
private Integer settleState;
/**
* 来源订单 与order表的order_id 关联
*/
@TableField(value = "source_order")
private String sourceOrder;
/**
* 源用户id
*/
@TableField(value = "source_user_id")
private Integer sourceUserId;
/**
* 源用户等级
*/
@TableField(value = "source_user_level")
private Integer sourceUserLevel;
/**
* 商品id
*/
@TableField(value = "goods_id")
private String goodsId;
/**
* 标题
*/
@TableField(value = "title")
private String title;
/**
* 订单类型
*/
@TableField(value = "order_type")
private String orderType;
/**
* 订单号
*/
@TableField(value = "order_sn")
private String orderSn;
/**
* 子订单号
*/
@TableField(value = "sub_order_sn")
private String subOrderSn;
/**
* 描述信息 比如充值卡或许充值卡信息
*/
@TableField(value = "reward_extend")
private String rewardExtend;
@TableField(value = "created_at")
private Long createdAt;
@TableField(value = "updated_at")
private Long updatedAt;
@TableField(value = "deleted_at")
private Long deletedAt;
/**
* 创建时间
*/
@TableField(value = "create_time")
private LocalDateTime createTime;
private static final long serialVersionUID = 1L;
public static final String COL_AGENT_ID = "agent_id";
public static final String COL_AGENT_LEVEL = "agent_level";
public static final String COL_USER_ID = "user_id";
public static final String COL_REWARD_TYPE = "reward_type";
public static final String COL_REWARD_REMARK = "reward_remark";
public static final String COL_REWARD_STATUS = "reward_status";
public static final String COL_MONEY = "money";
public static final String COL_AMOUNT = "amount";
public static final String COL_CASH_CODE = "cash_code";
public static final String COL_RECHARGE_TIME = "recharge_time";
public static final String COL_COMMISSION_ACOUNT = "commission_acount";
public static final String COL_COMMISSION_RATE = "commission_rate";
public static final String COL_COMMISSION = "commission";
public static final String COL_REFERENCE_ID = "reference_id";
public static final String COL_SETTLE_STATE = "settle_state";
public static final String COL_SOURCE_ORDER = "source_order";
public static final String COL_SOURCE_USER_ID = "source_user_id";
public static final String COL_SOURCE_USER_LEVEL = "source_user_level";
public static final String COL_GOODS_ID = "goods_id";
public static final String COL_TITLE = "title";
public static final String COL_ORDER_TYPE = "order_type";
public static final String COL_ORDER_SN = "order_sn";
public static final String COL_SUB_ORDER_SN = "sub_order_sn";
public static final String COL_REWARD_EXTEND = "reward_extend";
public static final String COL_CREATED_AT = "created_at";
public static final String COL_UPDATED_AT = "updated_at";
public static final String COL_DELETED_AT = "deleted_at";
public static final String COL_CREATE_TIME = "create_time";
}
\ No newline at end of file
package com.lanren.huhu.partner.manager;
import com.alibaba.fastjson.JSON;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.AgentRsp;
import com.lanren.huhu.partner.model.AgentResponse;
import com.lanren.huhu.partner.model.AgentRewardMessage;
import com.lanren.huhu.partner.result.Result;
import com.lanren.huhu.partner.service.UserAgentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author chen
*/
@Component
public class UserAgentManager {
private static Logger logger = LoggerFactory.getLogger(UserAgentManager.class);
public class AgentManager {
private static Logger logger = LoggerFactory.getLogger(AgentManager.class);
@Autowired
UserAgentService userAgentService;
@Autowired
StringRedisTemplate redisTemplate;
/***
* * 获取代理商等级 1 总代, 2 大区, 3 省, 4 市
* @param agentId
* @return
*/
public Result<AgentRsp> getAgentLevel(Integer agentId) {
public Result<AgentResponse> getAgentLevel(Integer agentId) {
if (logger.isDebugEnabled()) {
logger.info("UserAgentManager getLevel agentId:{},time:{}", agentId, LocalDateTime.now());
}
Result<AgentRsp> result = new Result<>();
Result<AgentResponse> result = new Result<>();
UserAgent userAgent = userAgentService.getOneByAgentId(agentId);
if (null != userAgent) {
result.setData(new AgentRsp(userAgent.getUserId(), userAgent.getAgentLevel()));
result.setData(new AgentResponse(userAgent.getUserId(), userAgent.getAgentLevel()));
} else {
result.setCode(601);
}
return result;
}
public Result<String> divideReward() {
ListOperations<String, String> ops = redisTemplate.opsForList();
logger.info("message is: {}", ops.rightPop("agent_reward_redis_city_key"));
return new Result<>();
}
public Result<String> pushReward() {
ListOperations<String, String> ops = redisTemplate.opsForList();
AgentRewardMessage agentRewardMessage = new AgentRewardMessage();
agentRewardMessage.setRewardType(710);
agentRewardMessage.setRechargeTime("2019-06-29 01:23:45");
agentRewardMessage.setSourceUserId(2328);
agentRewardMessage.setReferenceId("9999");
agentRewardMessage.setAgentId(33);
agentRewardMessage.setAgentReward(new BigDecimal(5));
agentRewardMessage.setSettleState(-100);
agentRewardMessage.setOrderType("taobao");
agentRewardMessage.setOrderSn("507596802910534728");
agentRewardMessage.setSubOrderSn("507596802910534728");
agentRewardMessage.setOrderCommission(new BigDecimal("35.400000"));
ops.leftPush("agent_reward_redis_city_key", JSON.toJSONString(agentRewardMessage));
return new Result<>();
}
}
package com.lanren.huhu.partner.manager; import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.model.PartnerRsp;import com.lanren.huhu.partner.result.Result;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 PartnerAccountManager { private static Logger logger = LoggerFactory.getLogger(PartnerAccountManager.class); @Autowired private PartnerAccountService partnerAccountService; /*** * 获取合伙人账户信息 * @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<PartnerRsp> getPartnerLevel(Integer userId) { if (logger.isDebugEnabled()) { logger.info("PartnerAccountManager getPartnerLevel userId:{},time:{}", userId, LocalDateTime.now()); } Result<PartnerRsp> 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 PartnerRsp(partnerLevel)); } else { result.setCode(601); } 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.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; /*** * 获取合伙人账户信息 * @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; }}
\ No newline at end of file
......@@ -4,10 +4,12 @@ import com.lanren.huhu.partner.domain.PartnerAccount;
import com.lanren.huhu.partner.model.ParentPartner;
import com.lanren.huhu.partner.model.PartnerTree;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.result.Result;
import com.lanren.huhu.partner.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
......@@ -22,24 +24,35 @@ public class UserManager {
@Autowired
UserService userService;
public User getRelationByUserId(int userId) {
return userService.getRelationByUserId(userId);
public Result<User> getRelationByUserId(int userId) {
User resutrnUser = userService.getRelationByUserId(userId);
Result<User> result = new Result<User>();
result.setData(resutrnUser);
return result;
}
public boolean deleteRalationByUserId(int userId) {
return userService.deleteRalationByUserId(userId);
public Result<String> deleteRalationByUserId(int userId) {
Result<String> result = new Result<String>();
if (userService.deleteRalationByUserId(userId)) {
result.setData("删除成功");
} else {
result.setCode(500);
}
return result;
}
/**
* 根据输入的userId, 完成递归查找
* @param userId
*/
public int findPartnerChiledren(Integer userId) {
@Async
public Result<String> changeRelation(Integer userId) {
Result<String> result = new Result<String>();
try{
logger.info("start findPartnerChiledren for userId: {} ...", userId);
logger.info("start changeRelation for userId: {} ...", userId);
PartnerAccount partnerAccount = userService.getPartnerAccountByUserId(userId);
if (partnerAccount == null) {
return 413;
result.setCode(413);
}
int partnerLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel();
PartnerTree root = new PartnerTree();
......@@ -47,12 +60,13 @@ public class UserManager {
root.setLevel(partnerLevel);
root.setParentList(new ArrayList<ParentPartner>());
recursiveSet(root);
logger.info("done findPartnerChiledren for userId: {}", userId);
return 0;
logger.info("done changeRelation for userId: {}", userId);
result.setData("用户刷新成功");
} catch (Exception e) {
logger.error(e.getMessage(), e);
return 500;
result.setCode(500);
}
return result;
}
/**
......
......@@ -4,11 +4,11 @@ import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
@Data
public class AgentRsp extends BaseModel {
public class AgentResponse extends BaseModel {
int userId;
int level;
public AgentRsp(int userId, int level) {
public AgentResponse(int userId, int level) {
this.userId = userId;
this.level = level;
}
......
package com.lanren.huhu.partner.model;
import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author chen
* @title: AgentRewardMessage
* @projectName partner
* @description: 代理商奖励处理 Redis队列消息结构
* @package com.lanren.huhu.partner.model
* @date 2019-06-29 12:29
*/
@Data
public class AgentRewardMessage extends BaseModel {
int rewardType;
String rechargeTime;
int sourceUserId;
String referenceId;
int agentId;
BigDecimal agentReward;
int settleState;
String orderType;
String orderSn;
String subOrderSn;
BigDecimal orderCommission;
// public AgentRewardMessage(int rewardType, String rechargeTime, int sourceUserId, String referenceId, int agentId, BigDecimal agentReward, int settleState, String orderType, String orderSn, String subOrderSn, BigDecimal orderCommission) {
// this.rewardType = rewardType;
// this.rechargeTime = rechargeTime;
// this.sourceUserId = sourceUserId;
// this.referenceId = referenceId;
// this.agentId = agentId;
// this.agentReward = agentReward;
// this.settleState = settleState;
// this.orderType = orderType;
// this.orderSn = orderSn;
// this.subOrderSn = subOrderSn;
// this.orderCommission = orderCommission;
// }
}
......@@ -4,10 +4,10 @@ import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
@Data
public class PartnerRsp extends BaseModel {
public class PartnerResponse extends BaseModel {
int level;
public PartnerRsp(int level) {
public PartnerResponse(int level) {
this.level = level;
}
}
package com.lanren.huhu.partner.schedule;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lanren.huhu.partner.domain.AgentReward;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.AgentRewardMessage;
import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.service.AgentRewardService;
import com.lanren.huhu.partner.service.PartnerAccountService;
import com.lanren.huhu.partner.service.UserAgentService;
import com.lanren.huhu.partner.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.lanren.huhu.partner.constants.Constants.*;
/**
* @author chen
* @title: AgentRewardQueueTask
* @projectName partner
* @description: 消费 代理商奖励的消息队列, 处理代理商奖励, 写到agent_reward
* @package com.lanren.huhu.partner.schedule
* @date 2019-06-29 15:39
*/
@Component
public class AgentRewardQueueTask {
private static Logger logger = LoggerFactory.getLogger(AgentRewardQueueTask.class);
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
UserAgentService userAgentService;
@Autowired
UserService userService;
@Autowired
AgentRewardService agentRewardService;
@Autowired
PartnerAccountService partnerAccountService;
@Scheduled(fixedDelay = 1000L)
public void runScheduledTask() {
logger.info("run AgentRewardQueueTask");
runConsume();
logger.info("run AgentRewardQueueTask done");
}
public void runConsume() {
ListOperations<String, String> ops = stringRedisTemplate.opsForList();
while(null != ops && null != ops.size(AGENT_REWARD_QUEUE_KEY) && ops.size(AGENT_REWARD_QUEUE_KEY) > 0L) {
String msg = "";
try {
msg = ops.rightPop(AGENT_REWARD_QUEUE_KEY);
logger.info("msg is {}", msg);
JSONObject json = JSON.parseObject(msg);
AgentRewardMessage message = json.toJavaObject(AgentRewardMessage.class);
processReward(message);
} catch (Exception e) {
logger.error("process agent reward message failed", msg);
logger.error(e.getMessage(), e);
}
}
}
@Async
public void processReward(AgentRewardMessage message) {
ListOperations<String, String> ops = stringRedisTemplate.opsForList();
logger.info("异步处理 agent reward: {}", message);
int rewardType = message.getRewardType();
Map<Integer, BigDecimal> rateMap;
if (!AGENT_RATE_MAP.keySet().contains(rewardType)) {
logger.error("未知的奖励类型 跳过不处理: {}", message);
return;
} else {
rateMap = AGENT_RATE_MAP.get(rewardType);
}
UserAgent userAgent = userAgentService.getOneByAgentId(message.getAgentId());
if (userAgent == null) {
logger.error("代理商id: {} 不存在, 跳过不处理", message);
return;
}
if (userAgent.getAgentLevel() != AGENT_LEVEL_4) {
logger.error("代理商id: {} 不是城市代理, 跳过不处理", message);
return;
}
User user = userService.getRelationByUserId(userAgent.getUserId());
ArrayList<ParentAgent> parentList = user.getAgentList();
ArrayList<ParentAgent> level4List = new ArrayList<ParentAgent>();
if (parentList.size() > 0) {
/**
* 扫描agentlist中的平推城市代理
* 最多只需要找3个
*/
int rewardCnt = 0;
ArrayList<ParentAgent> rewardList = new ArrayList<ParentAgent>();
for (ParentAgent agent : parentList) {
/**
* 先扫描平推代理, 写到level4List
* 如果不是平推, 奖励次数还不够3, 写到rewardList
*/
if (agent.getLevel() == AGENT_LEVEL_4 && rewardCnt < 3) {
level4List.add(agent);
rewardList.add(agent);
rewardCnt++;
} else if (rewardCnt < 3){
rewardList.add(agent);
} else {
break;
}
}
/**
* 如果平推层级小于3, 又没有上级代理, 报错不处理
*/
if (level4List.size() < 3 && level4List.size() == rewardList.size()) {
logger.error("代理商关系错误, 只有平推, 没有上级. {}", message);
return;
}
/**
* 如果上面检查通过, 证明代理商关系没问题, 后面处理只看rewardList的size
* 决定比例怎么分: 1个人-拿3份; 2个人-第二个拿后2份; 3个人-各1份
*/
List<BigDecimal> rateList = new ArrayList<BigDecimal>();
if (rewardList.size() == 1) {
rateList.add(rateMap.get(0).add(rateMap.get(1)).add(rateMap.get(2)));
} else if (rewardList.size() == 2) {
rateList.add(rateMap.get(0));
rateList.add(rateMap.get(1).add(rateMap.get(2)));
} else if (rewardList.size() == 3) {
rateList.add(rateMap.get(0));
rateList.add(rateMap.get(1));
rateList.add(rateMap.get(2));
}
for (int i=0; i<rewardList.size(); i++) {
BigDecimal commissionRate = rateList.get(i);
if (doInsert(commissionRate, rewardList.get(i), message)) {
logger.info("插入代理商分成奖励,奖励比例: {}, 代理商: {}", commissionRate, rewardList.get(i));
} else {
logger.error("插入失败, 写回到队列");
// ops.leftPush(AGENT_REWARD_QUEUE_KEY, JSON.toJSONString(message));
}
}
}
}
private boolean doInsert(BigDecimal commissionRate, ParentAgent agent, AgentRewardMessage message) {
try {
int partnerLevel = partnerAccountService.getOneByUserId(agent.getUserId()).getPartnerLevel();
int sourceUserLevel = partnerAccountService.getOneByUserId(message.getSourceUserId()).getPartnerLevel();
AgentReward agentReward = new AgentReward();
agentReward.setRewardType(message.getRewardType());
agentReward.setRechargeTime(LocalDateTime.parse(message.getRechargeTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
agentReward.setSourceUserId(message.getSourceUserId());
agentReward.setReferenceId(Long.parseLong(message.getReferenceId()));
agentReward.setAgentId(agent.getAgentId());
agentReward.setCommissionAcount(message.getAgentReward().multiply(commissionRate));
agentReward.setCommissionRate(commissionRate);
agentReward.setSettleState(message.getSettleState());
agentReward.setOrderType(message.getOrderType());
agentReward.setOrderSn(message.getOrderSn());
agentReward.setSubOrderSn(message.getSubOrderSn());
agentReward.setMoney(message.getOrderCommission());
agentReward.setAgentLevel(agent.getLevel());
agentReward.setUserId(agent.getUserId());
agentReward.setRewardRemark("测试");
agentReward.setAmount(message.getAgentReward().multiply(commissionRate));
agentReward.setSourceOrder(message.getReferenceId());
agentReward.setSourceUserLevel(sourceUserLevel);
if (agentRewardService.insertOrUpdate(agentReward) > 0) {
return true;
} else {
return false;
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
return false;
}
}
}
package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.AgentReward;
import java.util.List;
/**
* @author chen
* @title: ${NAME}
* @projectName partner
* @description: TODO
* @package ${PACKAGE_NAME}
* @date 2019-06-29 18:49
*/
public interface AgentRewardService extends IService<AgentReward> {
int updateBatch(List<AgentReward> list);
int batchInsert(List<AgentReward> list);
int insertOrUpdate(AgentReward record);
int insertOrUpdateSelective(AgentReward record);
}
package com.lanren.huhu.partner.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.AgentRewardMapper;
import com.lanren.huhu.partner.domain.AgentReward;
import com.lanren.huhu.partner.service.AgentRewardService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author chen
* @title: ${NAME}
* @projectName partner
* @description: TODO
* @package ${PACKAGE_NAME}
* @date 2019-06-29 18:49
*/
@Service
public class AgentRewardServiceImpl extends ServiceImpl<AgentRewardMapper, AgentReward> implements AgentRewardService {
@Override
public int updateBatch(List<AgentReward> list) {
return baseMapper.updateBatch(list);
}
@Override
public int batchInsert(List<AgentReward> list) {
return baseMapper.batchInsert(list);
}
@Override
public int insertOrUpdate(AgentReward record) {
return baseMapper.insertOrUpdate(record);
}
@Override
public int insertOrUpdateSelective(AgentReward record) {
return baseMapper.insertOrUpdateSelective(record);
}
}
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