| @@ -15,7 +15,7 @@ DROP COLUMN `credit_locked`; | |||
| --type=2 积分规则,追加老带新规则 缓存--缓存--缓存 | |||
| update wx_score_rules set rules = JSON_ARRAY_APPEND(rules, '$',CAST('{"id": 25, "desc": "会员推广奖励", "step": 1, "limit": 0, "score": 0}' AS JSON)) | |||
| where type = 2; | |||
| update wx_score_rules set rules = JSON_ARRAY_APPEND(rules, '$',CAST('{"id": 26, "desc": "推广会员加积分奖励", "step": 1, "limit": 0, "score": 0}' AS JSON)) | |||
| update wx_score_rules set rules = JSON_ARRAY_APPEND(rules, '$',CAST('{"id": 26, "desc": "推广会员消费奖励", "step": 1, "limit": 0, "score": 0}' AS JSON)) | |||
| where type = 2; | |||
| @@ -34,7 +34,7 @@ public enum EnumScoreType { | |||
| POINT_CHANGE(24, "其他积分变动"),// | |||
| OLD_WITH_NEW(25, "会员推广奖励"), | |||
| OLD_WITH_NEW_CONSUME(26, "推广会员加积分奖励"), | |||
| OLD_WITH_NEW_CONSUME(26, "推广会员消费奖励"), | |||
| ; | |||
| public static EnumScoreType getEnum(Integer code) { | |||
| @@ -172,7 +172,7 @@ public interface WxCUserBasicInfoService { | |||
| WxCUserBasicInfo registerByPhone(TenantEntity tenantEntity, String phone, String nickName,String name, Integer sex, String avatarUrl); | |||
| int addCredit(Long userId,Long fromUserId, TenantEntity tenantInfo, EnumScoreType scoreType); | |||
| int addCredit(Long userId,TenantEntity tenantInfo, EnumScoreType scoreType); | |||
| void registerJinmao(TenantEntity tenantInfo,WxCUserBasicInfo basicInfo); | |||
| @@ -32,5 +32,5 @@ public interface WxCUserFromService { | |||
| WxCUserBasicInfo selectOldByNew(TenantEntity tenantEntity, Long basicUserId, EnumAppPlat plat); | |||
| void oldAddCredit(TenantEntity tenantEntity, Long basicUserId, EnumAppPlat wx); | |||
| void oldAddCreditWithNew(TenantEntity tenantEntity, WxCUserBasicInfo basicInfo, EnumAppPlat wx); | |||
| } | |||
| @@ -2,10 +2,12 @@ package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.WxCUserBasicInfo; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.po.WxCreditHistory; | |||
| import com.iformall.domain.vo.MerchantCreditRankingVo; | |||
| import com.iformall.domain.vo.WxCreditHistoryVo; | |||
| import com.iformall.enums.EnumAppPlat; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| @@ -92,4 +94,15 @@ public interface WxCreditHistoryService { | |||
| PageInfo<WxCreditHistoryVo> findListMorePage(WxCreditHistory wxCreditHistory,Integer pageIndex, Integer pageSize); | |||
| /** | |||
| * 积分变更后消息 | |||
| * creditHistoryId为空时为初始化积分数据 | |||
| * @param tenantEntity | |||
| * @param cuserId | |||
| * @param baseUserId | |||
| * @param creditHistoryId | |||
| */ | |||
| void sendAfterUpdateCreditMsg(TenantEntity tenantEntity, Long cuserId, Long baseUserId, Long creditHistoryId); | |||
| void oldAddCreditWithNewConsume(TenantEntity tenantEntity, WxCreditHistory wxCreditHistory, WxCUserBasicInfo basicInfo, EnumAppPlat plat); | |||
| } | |||
| @@ -45,6 +45,4 @@ public interface WxMemberCardService { | |||
| ResultData syncMemberCardBonus(TenantEntity tenantEntity,String card_id,String code,String markid, | |||
| int before_bonus_value,int bonus_value,Boolean need_inform_bonus); | |||
| void sendsyncMemberCardBonusMsg(TenantEntity tenantEntity,Long cuserId,Long baseUserId,Long creditHistoryId); | |||
| } | |||
| @@ -711,7 +711,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc | |||
| } | |||
| @Override | |||
| public int addCredit(Long userId,Long fromUserId,TenantEntity tenantInfo, EnumScoreType scoreType) { | |||
| public int addCredit(Long userId,TenantEntity tenantInfo, EnumScoreType scoreType) { | |||
| if(userId == null){ | |||
| return 0; | |||
| } | |||
| @@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.stereotype.Service; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| @@ -41,6 +42,10 @@ public class WxCUserFromServiceImpl implements WxCUserFromService, IExcelExportS | |||
| @Autowired | |||
| WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||
| @Lazy | |||
| @Autowired | |||
| WxCreditHistoryService wxCreditHistoryService; | |||
| @Autowired | |||
| WxMerchantMapper wxMerchantMapper; | |||
| @@ -130,14 +135,23 @@ public class WxCUserFromServiceImpl implements WxCUserFromService, IExcelExportS | |||
| } | |||
| @Override | |||
| public void oldAddCredit(TenantEntity tenantEntity, Long basicUserId, EnumAppPlat plat) { | |||
| public void oldAddCreditWithNew(TenantEntity tenantEntity, WxCUserBasicInfo basicInfo, EnumAppPlat plat) { | |||
| try{ | |||
| //查询推荐人 | |||
| WxCUserBasicInfo basicInfo = selectOldByNew(tenantEntity, basicUserId, plat); | |||
| WxCUserBasicInfo oldBasicInfo = selectOldByNew(tenantEntity, basicInfo.getId(), plat); | |||
| if(basicInfo == null){ | |||
| return; | |||
| } | |||
| wxCUserBasicInfoService.addCredit(basicInfo.getId(),basicUserId,tenantEntity, EnumScoreType.OLD_WITH_NEW); | |||
| WxCreditHistory oldAddCredit = new WxCreditHistory(); | |||
| oldAddCredit.setCUserId(oldBasicInfo.getId()); | |||
| oldAddCredit.setTenantId(oldBasicInfo.getFinalTenantId()); | |||
| oldAddCredit.setFinalTenantId(oldBasicInfo.getFinalTenantId()); | |||
| oldAddCredit.setCreateDate(new Date()); | |||
| oldAddCredit.setCreditType(EnumScoreType.OLD_WITH_NEW.getCode()); | |||
| oldAddCredit.setChangePurpose("推广会员["+basicInfo.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")+"]授权手机号"); | |||
| oldAddCredit.setOperatorType(EnumUserType.CUSERBASIC.getCode()); | |||
| oldAddCredit.setOperatorId(basicInfo.getId()); | |||
| WxCreditHistory record = wxCreditHistoryService.saveOrUpdate(oldAddCredit,tenantEntity); | |||
| }catch(Exception e){ | |||
| @@ -10,12 +10,14 @@ import com.iformall.common.IdWorker; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.po.msg.AfterAddCreditMsg; | |||
| import com.iformall.domain.po.msg.WxMsg; | |||
| import com.iformall.domain.vo.MerchantCreditRankingVo; | |||
| import com.iformall.domain.vo.WxCreditHistoryVo; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.mq.MqBaseProducer; | |||
| import com.iformall.service.*; | |||
| import com.iformall.utils.Constant; | |||
| import com.iformall.utils.CreditUtil; | |||
| @@ -101,7 +103,11 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||
| private WxTemplateMsgService wxTemplateMsgService; | |||
| @Autowired | |||
| private WxMemberCardService wxMemberCardService; | |||
| private MqBaseProducer mqBaseProducer; | |||
| @Lazy | |||
| @Autowired | |||
| private WxCUserFromService wxCUserFromService; | |||
| @Override | |||
| public void clearCreditByYear() { | |||
| @@ -136,7 +142,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||
| creditHistoryQ.setStartTime(date); | |||
| List<WxCreditHistory> list = wxCreditHistoryMapper.getIsMemberCarAndClearCredit(creditHistoryQ); | |||
| for (WxCreditHistory history:list) { | |||
| wxMemberCardService.sendsyncMemberCardBonusMsg(tenantInfo,null,history.getCUserId(),history.getId()); | |||
| this.sendAfterUpdateCreditMsg(tenantInfo,null,history.getCUserId(),history.getId()); | |||
| } | |||
| } | |||
| @@ -634,7 +640,7 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||
| //发消息 | |||
| sendCreditUpdRemind(wxCUserBasicInfo,record,tenantEntity); | |||
| wxMemberCardService.sendsyncMemberCardBonusMsg(tenantEntity,null,wxCUserBasicInfo.getId(),record.getId()); | |||
| this.sendAfterUpdateCreditMsg(tenantEntity,null,wxCUserBasicInfo.getId(),record.getId()); | |||
| } else { | |||
| //wxCreditHistoryMapper.updateById(record); | |||
| @@ -752,6 +758,53 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||
| return creditMap; | |||
| } | |||
| @Override | |||
| public void sendAfterUpdateCreditMsg(TenantEntity tenantEntity, Long cuserId, Long baseUserId, Long creditHistoryId) { | |||
| AfterAddCreditMsg msg = new AfterAddCreditMsg(); | |||
| msg.updateTenantInfo(tenantEntity); | |||
| msg.setMsgType(EnumMsgRecordType.AFTER_ADD_CREDIT.getCode()); | |||
| if(cuserId != null){ | |||
| msg.setCuserId(cuserId); | |||
| }else if(baseUserId != null){ | |||
| msg.setBasicUserId(baseUserId); | |||
| }else { | |||
| return; | |||
| } | |||
| msg.setCreditHistoryId(creditHistoryId); | |||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| @Override | |||
| public void oldAddCreditWithNewConsume(TenantEntity tenantEntity, WxCreditHistory wxCreditHistory, WxCUserBasicInfo basicInfo,EnumAppPlat plat) { | |||
| if(!EnumScoreType.SPEND_CREDIT.getCode().equals(wxCreditHistory.getCreditType()) | |||
| && !EnumScoreType.CONSUMPTION.getCode().equals(wxCreditHistory.getCreditType())){ | |||
| return; | |||
| } | |||
| try{ | |||
| WxCUserBasicInfo oldBasicInfo = wxCUserFromService.selectOldByNew(tenantEntity, wxCreditHistory.getCUserId(), plat); | |||
| if(basicInfo == null){ | |||
| return; | |||
| } | |||
| WxCreditHistory oldAddCredit = new WxCreditHistory(); | |||
| oldAddCredit.setCUserId(oldBasicInfo.getId()); | |||
| oldAddCredit.setTenantId(oldBasicInfo.getFinalTenantId()); | |||
| oldAddCredit.setFinalTenantId(oldBasicInfo.getFinalTenantId()); | |||
| oldAddCredit.setCreateDate(new Date()); | |||
| oldAddCredit.setSpend(wxCreditHistory.getSpend()); | |||
| oldAddCredit.setCreditType(EnumScoreType.OLD_WITH_NEW_CONSUME.getCode()); | |||
| oldAddCredit.setChangePurpose("推广会员["+basicInfo.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")+"]消费["+wxCreditHistory.getSpendStr()+"元]"); | |||
| oldAddCredit.setOperatorType(EnumUserType.CUSERBASIC.getCode()); | |||
| oldAddCredit.setOperatorId(basicInfo.getId()); | |||
| WxCreditHistory record = this.saveOrUpdate(oldAddCredit,tenantEntity); | |||
| }catch(Exception e){ | |||
| } | |||
| } | |||
| //根据积分类型计算"增加积分" | |||
| private int creditIncrement(WxCreditHistory record,TenantEntity tenantEntity,WxCUserBasicInfo wxCUserBasicInfo,boolean hasBirthDateCredit) { | |||
| @@ -50,6 +50,9 @@ public class WxMemberCardServiceImpl implements WxMemberCardService { | |||
| @Autowired | |||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||
| @Autowired | |||
| WxCreditHistoryService wxCreditHistoryService; | |||
| @Autowired | |||
| private MqBaseProducer mqBaseProducer; | |||
| @@ -95,7 +98,7 @@ public class WxMemberCardServiceImpl implements WxMemberCardService { | |||
| TenantEntity tenantEntity = new TenantEntity(); | |||
| tenantEntity.setTenantId(record.getTenantId()); | |||
| tenantEntity.setParentTenantId(record.getParentTenantId()); | |||
| this.sendsyncMemberCardBonusMsg(tenantEntity,record.getCuserId(),null,null); | |||
| wxCreditHistoryService.sendAfterUpdateCreditMsg(tenantEntity,record.getCuserId(),null,null); | |||
| } | |||
| }else{ | |||
| record.setId(id); | |||
| @@ -298,20 +301,4 @@ public class WxMemberCardServiceImpl implements WxMemberCardService { | |||
| } | |||
| } | |||
| @Override | |||
| public void sendsyncMemberCardBonusMsg(TenantEntity tenantEntity, Long cuserId, Long baseUserId, Long creditHistoryId) { | |||
| AfterAddCreditMsg msg = new AfterAddCreditMsg(); | |||
| msg.updateTenantInfo(tenantEntity); | |||
| msg.setMsgType(EnumMsgRecordType.AFTER_ADD_CREDIT.getCode()); | |||
| if(cuserId != null){ | |||
| msg.setCuserId(cuserId); | |||
| }else if(baseUserId != null){ | |||
| msg.setBasicUserId(baseUserId); | |||
| }else { | |||
| logger.error("商圈会员积分同步消息发送失败"); | |||
| } | |||
| msg.setCreditHistoryId(creditHistoryId); | |||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | |||
| } | |||
| } | |||
| @@ -11,10 +11,7 @@ import com.iformall.enums.EnumAppPlat; | |||
| import com.iformall.enums.EnumBusinessType; | |||
| import com.iformall.enums.EnumMemberCardStatus; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.WxAppinfoService; | |||
| import com.iformall.service.WxCUserService; | |||
| import com.iformall.service.WxMemberCardService; | |||
| import com.iformall.service.WxPayAccountService; | |||
| import com.iformall.service.*; | |||
| import com.iformall.service.msg.MsgSendService; | |||
| import com.iformall.service.wechat.FmOpenService; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| @@ -55,6 +52,12 @@ public class AfterAddCreditMsgServiceImpl implements MsgSendService { | |||
| @Autowired | |||
| private WxCreditHistoryMapper wxCreditHistoryMapper; | |||
| @Autowired | |||
| private WxCreditHistoryService wxCreditHistoryService; | |||
| @Autowired | |||
| private WxCUserFromService wxCUserFromService; | |||
| @Override | |||
| public void send(BaseMsg baseMsg) throws Exception{ | |||
| @@ -84,6 +87,13 @@ public class AfterAddCreditMsgServiceImpl implements MsgSendService { | |||
| afterAddCreditMsg.setCuserId(cuserId); | |||
| } | |||
| if(afterAddCreditMsg.getBasicUserId() == null){ | |||
| WxCUser wxCUser = wxCUserMapper.selectById(afterAddCreditMsg.getCuserId(),afterAddCreditMsg.getTenantId()); | |||
| afterAddCreditMsg.setBasicUserId(wxCUser.getUserId()); | |||
| } | |||
| WxCUserBasicInfo basicInfo = wxCUserBasicInfoMapper.selectById(afterAddCreditMsg.getBasicUserId(), tenantEntity.getFinalTenantId()); | |||
| WxMemberCard memberCardQ = new WxMemberCard(); | |||
| memberCardQ.updateFinalTenantId(tenantEntity); | |||
| memberCardQ.setCuserId(afterAddCreditMsg.getCuserId()); | |||
| @@ -95,18 +105,13 @@ public class AfterAddCreditMsgServiceImpl implements MsgSendService { | |||
| } | |||
| String markid = null; | |||
| Integer before_bonus_value = 0,bonus_value = 0; | |||
| WxCreditHistory wxCreditHistory = null; | |||
| if(afterAddCreditMsg.getCreditHistoryId() == null){ | |||
| if(afterAddCreditMsg.getBasicUserId() == null){ | |||
| WxCUser wxCUser = wxCUserMapper.selectById(afterAddCreditMsg.getCuserId(),afterAddCreditMsg.getTenantId()); | |||
| afterAddCreditMsg.setBasicUserId(wxCUser.getUserId()); | |||
| } | |||
| WxCUserBasicInfo basicInfo = wxCUserBasicInfoMapper.selectById(afterAddCreditMsg.getBasicUserId(), tenantEntity.getFinalTenantId()); | |||
| markid = basicInfo.getId().toString(); | |||
| bonus_value = basicInfo.getCredit(); | |||
| }else{ | |||
| WxCreditHistory wxCreditHistory = wxCreditHistoryMapper.selectById(afterAddCreditMsg.getCreditHistoryId(), tenantEntity.getFinalTenantId()); | |||
| wxCreditHistory = wxCreditHistoryMapper.selectById(afterAddCreditMsg.getCreditHistoryId(), tenantEntity.getFinalTenantId()); | |||
| markid = wxCreditHistory.getId().toString(); | |||
| before_bonus_value = wxCreditHistory.getCreditAmount()-wxCreditHistory.getCreditNum(); | |||
| bonus_value = wxCreditHistory.getCreditAmount(); | |||
| @@ -120,5 +125,11 @@ public class AfterAddCreditMsgServiceImpl implements MsgSendService { | |||
| logger.info(tenantEntity.getTenantId()+"--"+memberCard.getId()+"--微信商圈同步会员积分{}"+resultData.message); | |||
| } | |||
| if(wxCreditHistory != null){ | |||
| //老带新积分奖励 todo 先处理微信的逻辑 | |||
| wxCreditHistoryService.oldAddCreditWithNewConsume(tenantEntity,wxCreditHistory,basicInfo,EnumAppPlat.WX); | |||
| } | |||
| } | |||
| } | |||
| @@ -61,9 +61,9 @@ public class FmInsideBasicUserPhoneFirstMsgServiceImpl implements MsgSendService | |||
| // 成长值 | |||
| wxScoreRulesService.addScore(tenantEntity, EnumScoreType.WECHAT_PHONE, basicInfo); | |||
| // 增加积分 | |||
| wxCUserBasicInfoService.addCredit(basicInfo.getId(),basicInfo.getId(),tenantEntity,EnumScoreType.WECHAT_PHONE); | |||
| wxCUserBasicInfoService.addCredit(basicInfo.getId(),tenantEntity,EnumScoreType.WECHAT_PHONE); | |||
| //老带新增加积分 todo 先处理微信的业务 | |||
| wxCUserFromService.oldAddCredit(tenantEntity,basicInfo.getId(),EnumAppPlat.WX); | |||
| wxCUserFromService.oldAddCreditWithNew(tenantEntity,basicInfo,EnumAppPlat.WX); | |||
| // 外部注券 | |||
| memCouponFromDspService.couponOrderFromDsp(tenantEntity, basicInfo.getPhone()); | |||