package com.yeshi.fanli.service.impl.user; import java.util.Date; import javax.annotation.Resource; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.aliyun.openservices.ons.api.Message; import com.aliyun.openservices.ons.api.Producer; import com.google.gson.Gson; import com.yeshi.fanli.dao.mybatis.user.UserInfoModifyRecordMapper; import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; import com.yeshi.fanli.dto.mq.user.body.UserAccountBindingMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg.UserInfoUpdateTypeEnum; import com.yeshi.fanli.entity.bus.user.BindingAccount; import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.money.extract.BindingAccountService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; import com.yeshi.fanli.util.rocketmq.MQTopicName; @Service public class UserInfoModifyRecordServiceImpl implements UserInfoModifyRecordService { @Resource private UserInfoModifyRecordMapper userInfoModifyRecordMapper; @Resource private IntegralGetService integralGetService; @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private BindingAccountService bindingAccountService; @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; @Resource(name = "producer") private Producer producer; @Async() @Transactional @Override public void addModifyRecord(Long uid, ModifyTypeEnum type, String value) { try { if (uid == null || StringUtil.isNullOrEmpty(value)) return; long count = countByUid(uid, type.name()); if (count == 0) { if (type == ModifyTypeEnum.bindPhone) { integralGetService.addBindPhone(uid); } else if (type == ModifyTypeEnum.bindAlipay) { integralGetService.addBindAlipay(uid); } else if (type == ModifyTypeEnum.bindTaoBao) { integralGetService.addBindTaoBao(uid); } else if (type == ModifyTypeEnum.bindWeiXin) { integralGetService.addBindWeiXin(uid); } else if (type == ModifyTypeEnum.gender) { integralGetService.addSetGender(uid); } else if (type == ModifyTypeEnum.nickName) { integralGetService.addSetNickname(uid); } else if (type == ModifyTypeEnum.portrait) { integralGetService.addSetPortrait(uid); } else if (type == ModifyTypeEnum.setWeiXinNum) { integralGetService.addSetWeiXinNum(uid); } } UserInfoModifyRecord oldRecord = userInfoModifyRecordMapper.selectLatestByUidAndType(uid, type.name()); if (oldRecord == null || !oldRecord.getValue().equalsIgnoreCase(value)) {// 不能修改重复的数据 UserInfoModifyRecord record = new UserInfoModifyRecord(); record.setUid(uid); record.setType(type); record.setValue(value); record.setCreateTime(new Date()); userInfoModifyRecordMapper.insertSelective(record); if (oldRecord == null) {// 新建 // 发送账号修改消息 UserAccountBindingMQMsg mqMsg = null; if (type == ModifyTypeEnum.bindPhone) { mqMsg = new UserAccountBindingMQMsg(uid, UserAccountBindingMQMsg.TYPE_PHONE, value, new Date()); } else if (type == ModifyTypeEnum.bindTaoBao) { mqMsg = new UserAccountBindingMQMsg(uid, UserAccountBindingMQMsg.TYPE_TAOBAO, value, new Date()); } else if (type == ModifyTypeEnum.bindWeiXin) { mqMsg = new UserAccountBindingMQMsg(uid, UserAccountBindingMQMsg.TYPE_WX, value, new Date()); } else if (type == ModifyTypeEnum.bindAlipay) { mqMsg = new UserAccountBindingMQMsg(uid, UserAccountBindingMQMsg.TYPE_ALIPAY, value, new Date()); } Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userAccountBinding, mqMsg); if (!Constant.IS_TEST) producer.send(message); } else {// 修改 UserInfoUpdateMQMsg mqMsg = null; if (type == ModifyTypeEnum.portrait) { mqMsg = new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.portrait, value, new Date()); } else if (type == ModifyTypeEnum.nickName) mqMsg = new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.nickName, value, new Date()); else if (type == ModifyTypeEnum.setWeiXinNum) mqMsg = new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.wxId, value, new Date()); if (mqMsg != null) { Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userInfoUpdate, mqMsg); producer.send(message); } } } } catch (Exception e) { e.printStackTrace(); LogHelper.errorDetailInfo(e); } } @Override public long countByUid(Long uid, String type) { return userInfoModifyRecordMapper.countByUid(uid, type); } @Override public void syncBeforeInfo(Long uid) { // 获取用户基本信息 UserInfo user = userInfoService.selectByPKey(uid); if (user == null || user.getState() != UserInfo.STATE_NORMAL) {// 用户不正常 return; } if (!StringUtil.isNullOrEmpty(user.getPhone())) { addModifyRecord(uid, ModifyTypeEnum.bindPhone, user.getPhone()); } BindingAccount account = bindingAccountService.getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY); if (account != null) { addModifyRecord(uid, ModifyTypeEnum.bindAlipay, account.getAccount()); } if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) { addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, user.getWxUnionId()); } if (user.getNickName() != null && !user.getNickName().startsWith("返利券") && !user.getNickName().startsWith(Constant.systemCommonConfig.getDefaultNickName())) { addModifyRecord(uid, ModifyTypeEnum.nickName, user.getNickName() + ""); } if (!Constant.systemCommonConfig.getDefaultPortrait().equalsIgnoreCase(user.getPortrait())) { addModifyRecord(uid, ModifyTypeEnum.portrait, user.getPortrait()); } UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra != null) { if (userInfoExtra.getSex() != null) addModifyRecord(uid, ModifyTypeEnum.gender, userInfoExtra.getSex() + ""); if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, userInfoExtra.getWeiXin()); } UserExtraTaoBaoInfo taoBaoExtra = userExtraTaoBaoInfoService.getByUid(uid); if (taoBaoExtra != null && !StringUtil.isNullOrEmpty(taoBaoExtra.getRelationId()) && !StringUtil.isNullOrEmpty(taoBaoExtra.getSpecialId()) && taoBaoExtra.getRelationValid() && taoBaoExtra.getSpecialValid()) { addModifyRecord(uid, ModifyTypeEnum.bindTaoBao, taoBaoExtra.getTaoBaoUid()); } } }