src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
@@ -122,4 +122,40 @@ return BindingBuilder.bind(orderReturnMoneyQueue()).to(orderReturnMoneyExchange()).with(RabbitQueueEnum.ORDER_RETURN_MONEY.getRoute()); } /** 新用户注册 start**/ @Bean public DirectExchange memberSubExchange() { return new DirectExchange(RabbitQueueEnum.YWG_MEMBER_SUB.getExchange()); } @Bean public Queue memberSubQueue() { return new Queue(RabbitQueueEnum.YWG_MEMBER_SUB.getQueue()); } @Bean public Binding memberSubBind() { return BindingBuilder.bind(memberSubQueue()).to(memberSubExchange()).with(RabbitQueueEnum.YWG_MEMBER_SUB.getRoute()); } /** 新用户注册 end**/ /** 新用户注册 start**/ @Bean public DirectExchange memberSubScanExchange() { return new DirectExchange(RabbitQueueEnum.YWG_MEMBER_SUB_SCAN.getExchange()); } @Bean public Queue memberSubScanQueue() { return new Queue(RabbitQueueEnum.YWG_MEMBER_SUB_SCAN.getQueue()); } @Bean public Binding memberSubScanBind() { return BindingBuilder.bind(memberSubScanQueue()).to(memberSubScanExchange()).with(RabbitQueueEnum.YWG_MEMBER_SUB_SCAN.getRoute()); } /** 新用户注册 end**/ } src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
@@ -86,6 +86,13 @@ public static final Integer ACCOUNT_STATUS_DISABLED = 2; /** * 是否关注;1-关注 2-未关注 */ private Integer subStatus; public static final Integer SUB_STATUS_ENABLE = 1; public static final Integer SUB_STATUS_DISABLED = 2; /** * 账号类型 */ private Integer accountType; src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -7,4 +7,8 @@ void returnMoneyToAgent(Long orderId); void rankReturnMoney(Long orderId); void addMember(String memberOpenId); void addMemberScan(String str); } src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -1,23 +1,26 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.mall.entity.AgentInfo; import cc.mrbird.febs.mall.entity.DataDictionaryCustom; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallAchieveService; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSONObject; import jdk.nashorn.internal.ir.IfNode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +42,7 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallMemberMapper memberMapper; private final MallMemberWalletMapper mallMemberWalletMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -136,7 +140,6 @@ /** * 团队业绩是否达标 * * @param mallMember * @param agentInfo * @return */ @@ -161,4 +164,121 @@ public void rankReturnMoney(Long orderId) { } @Override public void addMember(String memberOpenId) { MallMember mallMember = memberMapper.selectMemberByOpenId(memberOpenId); //根据OPENID,查询用户信息,如果存在,直接返回 if (ObjectUtil.isNotEmpty(mallMember)) { mallMember.setSubStatus(MallMember.SUB_STATUS_ENABLE); memberMapper.updateById(mallMember); return; } mallMember = new MallMember(); mallMember.setPassword(SecureUtil.md5("a123456")); mallMember.setName("微信用户"); mallMember.setSubStatus(MallMember.SUB_STATUS_ENABLE); mallMember.setReferrerId(null); mallMember.setPhone(null); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); mallMember.setSex("男"); mallMember.setBindPhone(null); memberMapper.insert(mallMember); //生成邀请码 String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); mallMember.setInviteId(inviteId); //推荐人和推荐人链 boolean flag = false; String parentId = mallMember.getReferrerId(); if (StrUtil.isBlank(parentId)) { flag = true; } String ids = ""; while (!flag) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); } MallMember parentMember = memberMapper.selectInfoByInviteId(parentId); if (parentMember == null) { break; } parentId = parentMember.getReferrerId(); if (StrUtil.isBlank(parentMember.getReferrerId())) { flag = true; } } if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); } memberMapper.updateById(mallMember); //初始化钱包信息 MallMemberWallet wallet = new MallMemberWallet(); wallet.setBalance(BigDecimal.ZERO); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); return; } @Override public void addMemberScan(String str) { String[] split = StrUtil.split(str, "-"); String referrerId = split[0]; String openId = split[1]; MallMember mallMember = memberMapper.selectMemberByOpenId(openId); if (ObjectUtil.isNotEmpty(mallMember)) { return; } mallMember = new MallMember(); mallMember.setPassword(SecureUtil.md5("a123456")); mallMember.setName("微信用户"); mallMember.setSubStatus(MallMember.SUB_STATUS_DISABLED); mallMember.setReferrerId(referrerId); mallMember.setPhone(null); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); mallMember.setSex("男"); mallMember.setBindPhone(null); memberMapper.insert(mallMember); //生成邀请码 String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); mallMember.setInviteId(inviteId); //推荐人和推荐人链 boolean flag = false; String parentId = mallMember.getReferrerId(); if (StrUtil.isBlank(parentId)) { flag = true; } String ids = ""; while (!flag) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); } MallMember parentMember = memberMapper.selectInfoByInviteId(parentId); if (parentMember == null) { break; } parentId = parentMember.getReferrerId(); if (StrUtil.isBlank(parentMember.getReferrerId())) { flag = true; } } if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); } memberMapper.updateById(mallMember); //初始化钱包信息 MallMemberWallet wallet = new MallMemberWallet(); wallet.setBalance(BigDecimal.ZERO); wallet.setMemberId(mallMember.getId()); mallMemberWalletMapper.insert(wallet); return; } } src/main/java/cc/mrbird/febs/pay/controller/AutoReplyController.java
@@ -3,7 +3,9 @@ import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.SpringContextHolder; import cc.mrbird.febs.pay.util.WechatEventUtil; import cc.mrbird.febs.pay.util.WeixinServiceUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -24,6 +26,10 @@ private final String wechatToken = "ywgpzfwh"; @Autowired WechatEventUtil wechatEventUtil; /** * 服务器校验 * @param req 请求 @@ -31,7 +37,7 @@ */ @GetMapping("/event") public String verification(HttpServletRequest req) { return WechatEventUtil.verification(req, wechatToken); return wechatEventUtil.verification(req, wechatToken); } /** @@ -46,7 +52,7 @@ String message = "success"; PrintWriter out = resp.getWriter(); try { String messageEvent = WechatEventUtil.messageEvent(req); String messageEvent = wechatEventUtil.messageEvent(req); if(messageEvent != null) { message = messageEvent; } src/main/java/cc/mrbird/febs/pay/util/WechatEventUtil.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.pay.util; import cc.mrbird.febs.rabbit.producter.AgentProducer; import org.dom4j.io.SAXReader; import javax.servlet.http.HttpServletRequest; @@ -11,6 +12,9 @@ import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.InputStream; import java.util.*; @@ -21,7 +25,12 @@ * * @author shenshao */ @Service(value="wechatEventUtil") public class WechatEventUtil { @Autowired private AgentProducer agentProducer; private static Logger log = LoggerFactory.getLogger(WechatEventUtil.class); @@ -31,7 +40,7 @@ * @param req 请求 * @return 校验结果 */ public static String verification(HttpServletRequest req, String wechatToken) { public String verification(HttpServletRequest req, String wechatToken) { // 接收微信服务器发送请求时传递过来的参数 String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); @@ -57,7 +66,7 @@ * @param req * @return */ public static String messageEvent(HttpServletRequest req) { public String messageEvent(HttpServletRequest req) { String result = null; Map<String, String> map = xmlToMap(req); String fromUserName = map.get("FromUserName"); @@ -68,8 +77,23 @@ log.info("事件处理:event:{}、msgType:{}、toUserName:{}、fromUserName:{}", eventType, msgType, toUserName, fromUserName); if ("event".equals(msgType)) { if ("subscribe".equals(eventType)) { result = imgTextMsg(toUserName, fromUserName, "新用户注册", "仅限上海地区手机号用户", "图片地址", "点击后跳转的路径"); result = imgTextMsg(toUserName, fromUserName, "新用户注册", "欢迎光临【药王谷铺子】,点击总下角【药王谷铺子】-【商城】。", "图片地址", "点击后跳转的路径"); log.info("新增关注事件:toUserName{}、fromUserName{}", toUserName, fromUserName); StringBuffer stringBuffer = new StringBuffer(); if(map.containsKey("EventKey")){ /** * 扫带参数二维码 */ String eventKey = map.get("EventKey"); stringBuffer.append(eventKey); stringBuffer.append("-"); stringBuffer.append(fromUserName); agentProducer.sendMemberSubScanMsg(stringBuffer.toString()); } /** * 普通关注事件 */ agentProducer.sendMemberSubMsg(fromUserName); } else if ("unsubscribe".equals(eventType)) { log.info("取消关注事件:toUserName{}、fromUserName{}", toUserName, fromUserName); } src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -10,4 +10,9 @@ public static final String AGENT_AUTO_LEVEL_UP = "queue_agent_auto_level_up_qay"; public static final String AGENT_RETURN_MONEY = "queue_agent_return_money_qay"; public static final String ORDER_RETURN_MONEY = "queue_order_return_money_qay"; /** * 新增关注-即用户注册 */ public static final String YWG_MEMBER_SUB = "queue_ywg_member_sub"; public static final String YWG_MEMBER_SUB_SCAN = "queue_ywg_member_sub_scan"; } src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -72,4 +72,24 @@ log.error("订单返利异常:", e); } } @RabbitListener(queues = QueueConstants.YWG_MEMBER_SUB) public void getMemberSubMsg(String memberOpenId) { log.info("收到新增用户关注:{}", memberOpenId); try { agentService.addMember(memberOpenId); } catch (Exception e) { log.error("新增用户关注异常:", e); } } @RabbitListener(queues = QueueConstants.YWG_MEMBER_SUB_SCAN) public void getMemberSubScanMsg(String str) { log.info("收到新增用户扫码:{}", str); try { agentService.addMemberScan(str); } catch (Exception e) { log.error("收到新增用户扫码:", e); } } } src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -1,10 +1,14 @@ package cc.mrbird.febs.rabbit.enumerates; import cc.mrbird.febs.rabbit.constants.QueueConstants; import lombok.Getter; @Getter public enum RabbitQueueEnum { YWG_MEMBER_SUB_SCAN("exchange_ywg_member_sub_scan", "route_key_ywg_member_sub_scan",QueueConstants.YWG_MEMBER_SUB_SCAN), YWG_MEMBER_SUB("exchange_ywg_member_sub", "route_key_ywg_member_sub",QueueConstants.YWG_MEMBER_SUB), DEFAULT("exchange_default_qay", "route_key_default_qay", "queue_default_qay"), ORDER_CANCEL_DELAY_TTL("exchange_order_delay_ttl_qay", "route_key_order_delay_ttl_qay", "queue_order_delay_ttl_qay"), src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -76,4 +76,14 @@ log.info("发送返利消息:{}", orderId); rabbitTemplate.convertAndSend(RabbitQueueEnum.AGENT_REUTRN_MONEY.getExchange(), RabbitQueueEnum.AGENT_REUTRN_MONEY.getRoute(), orderId); } public void sendMemberSubMsg(String memberOpenId) { log.info("新增用户关注:{}", memberOpenId); rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_MEMBER_SUB.getExchange(), RabbitQueueEnum.YWG_MEMBER_SUB.getRoute(), memberOpenId); } public void sendMemberSubScanMsg(String str) { log.info("新增用户扫码:{}", str); rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_MEMBER_SUB_SCAN.getExchange(), RabbitQueueEnum.YWG_MEMBER_SUB_SCAN.getRoute(), str); } }