From 744594ef1a2f530fc3e86ea9dc48b62247f79420 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 19 五月 2020 17:13:23 +0800
Subject: [PATCH] 饿了么绘图,添加口碑

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java |  467 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 267 insertions(+), 200 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
index 3b115bf..4a39ecf 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -1,5 +1,7 @@
 package com.yeshi.fanli.service.impl.user;
 
+import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -9,24 +11,36 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import javax.annotation.Resource;
 
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 import org.yeshi.utils.DateUtil;
+import org.yeshi.utils.FileUtil;
 import org.yeshi.utils.HttpUtil;
 import org.yeshi.utils.entity.FileUploadResult;
 import org.yeshi.utils.tencentcloud.COSManager;
 
+import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.Producer;
 import com.yeshi.fanli.dao.mybatis.user.UserInfoExtraMapper;
 import com.yeshi.fanli.dao.mybatis.user.UserRankRecordMapper;
+import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
+import com.yeshi.fanli.dto.mq.user.body.InviteCodeActiveMQMsg;
+import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg;
+import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg.UserInfoUpdateTypeEnum;
 import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
 import com.yeshi.fanli.entity.bus.user.UserRank;
 import com.yeshi.fanli.entity.bus.user.UserRankRecord;
 import com.yeshi.fanli.entity.bus.user.WeiXinUser;
+import com.yeshi.fanli.entity.bus.user.notify.UserActivedRecord;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.exception.user.ThreeSaleException;
 import com.yeshi.fanli.exception.user.UserInfoExtraException;
 import com.yeshi.fanli.log.LogHelper;
@@ -39,11 +53,19 @@
 import com.yeshi.fanli.service.inter.user.UserInviteRecordService;
 import com.yeshi.fanli.service.inter.user.UserRankService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.msg.UserAccountMsgNotificationService;
+import com.yeshi.fanli.service.inter.user.notify.UserActivedRecordService;
 import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.FilePathEnum;
+import com.yeshi.fanli.util.InviteCodeFilterUtil;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.account.UserUtil;
+import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
+import com.yeshi.fanli.util.rocketmq.MQTopicName;
 import com.yeshi.fanli.util.wx.WXLoginUtil;
 import com.yeshi.fanli.vo.user.UserInfoExtraVO;
+
+import net.coobird.thumbnailator.Thumbnails;
 
 @Service
 public class UserInfoExtraServiceImpl implements UserInfoExtraService {
@@ -78,6 +100,16 @@
 	@Resource
 	private UserInviteRecordService userInviteRecordService;
 
+	@Resource
+	@Lazy
+	private UserActivedRecordService userActivedRecordService;
+	
+	@Resource
+	private UserAccountMsgNotificationService userAccountMsgNotificationService;
+
+	@Resource(name = "producer")
+	private Producer producer;
+
 	@Override
 	public UserInfoExtraVO getRankInfo(Long uid) throws UserInfoExtraException, Exception {
 
@@ -87,10 +119,10 @@
 		}
 
 		// 绛夌骇瀵圭収琛�
-		String contrast = configService.get("user_rank_contrast");
+		String contrast = configService.get(ConfigKeyEnum.userRankContrast.getKey());
 		extraVO.setRankContrast(contrast);
 		// 鐗瑰埆鎻愰啋
-		String rankTip = configService.get("user_rank_tip");
+		String rankTip = configService.get(ConfigKeyEnum.userRankTip.getKey());
 		extraVO.setRankTip(rankTip);
 
 		Integer rankOrderNum = extraVO.getRankOrderNum();
@@ -159,6 +191,7 @@
 		}
 
 		boolean isupdateRank = true;
+		UserInfoExtra extra = new UserInfoExtra();
 
 		UserInfoExtra userInfoExtra = userInfoExtraMapper.getInfoExtraByUid(uid);
 		if (userInfoExtra != null && userInfoExtra.getId() != null) {
@@ -170,14 +203,91 @@
 					isupdateRank = false;
 				}
 			}
+			extra.setId(userInfoExtra.getId());
 		} else {
-			userInfoExtra = new UserInfoExtra();
-			userInfoExtra.setUserInfo(new UserInfo(uid));
+			extra.setUserInfo(new UserInfo(uid));
 		}
 
 		// 鏇存柊绛夌骇
 		if (isupdateRank) {
-			updateRank(userInfoExtra);
+			List<UserRank> listRank = userRankService.getAllRank();
+			if (listRank == null || listRank.size() == 0) {
+				throw new UserInfoExtraException(1, "绯荤粺绛夌骇涓嶅瓨鍦�");
+			}
+
+			int selfOrderNum = 0;
+			int sharedOrderNum = 0;
+			int inviteOrderNum = 0;
+			Map<String, Object> map = commonOrderCountService.lastMonthSettleOrderNumber(uid);
+			if (map != null) {
+				// 杩斿埄璁㈠崟
+				if (map.get("totalSelf") != null) {
+					selfOrderNum = Integer.parseInt(map.get("totalSelf").toString());
+				}
+
+				// 鍒嗕韩璁㈠崟
+				if (map.get("totalShared") != null) {
+					sharedOrderNum = Integer.parseInt(map.get("totalShared").toString());
+				}
+
+				// 閭�璇疯鍗�
+				if (map.get("totalInvite") != null) {
+					inviteOrderNum = Integer.parseInt(map.get("totalInvite").toString());
+				}
+			}
+
+			UserRank rank = null;
+			for (UserRank userRank : listRank) {
+				// 閭�璇锋弧瓒�
+				Integer inviteNum = userRank.getInviteNum();
+				if (inviteOrderNum >= inviteNum) {
+					rank = userRank;
+					extra.setRankOrderNum(inviteOrderNum);
+					extra.setRankSource(Constant.TYPE_INVITE);
+				}
+
+				// 鍒嗕韩婊¤冻
+				int shareNum = userRank.getShareNum();
+				if (sharedOrderNum >= shareNum) {
+					rank = userRank;
+					extra.setRankOrderNum(sharedOrderNum);
+					extra.setRankSource(Constant.TYPE_SHAER);
+				}
+
+				// 杩斿埄婊¤冻
+				int directNum = userRank.getRebateNum();
+				if (selfOrderNum >= directNum) {
+					rank = userRank;
+					extra.setRankOrderNum(selfOrderNum);
+					extra.setRankSource(Constant.TYPE_REBATE);
+				}
+
+				if (rank != null) {
+					extra.setUserRank(rank);
+				} else {
+					rank = userRank;
+					// 榛樿鏈�浣庣瓑绾�:闈掗摐
+					extra.setUserRank(rank);
+					extra.setRankOrderNum(selfOrderNum);
+					extra.setRankSource(Constant.TYPE_REBATE);
+					break;
+				}
+			}
+
+			// 绛夌骇鏇存柊鏃堕棿 褰撴湀1鍙�
+			Calendar calendar1 = Calendar.getInstance();
+			calendar1.set(Calendar.DAY_OF_MONTH, 1);
+			extra.setRankUpdateTime(calendar1.getTime());
+
+			// 淇濆瓨绛夌骇淇℃伅
+			saveUserInfoExtra(extra);
+
+			// 淇濆瓨绛夌骇鍙樺寲璁板綍
+			UserRankRecord userRankRecord = new UserRankRecord();
+			userRankRecord.setUid(uid);
+			userRankRecord.setRankId(rank.getId());
+			userRankRecord.setCreateTime(new Date());
+			userRankRecordMapper.insertSelective(userRankRecord);
 		}
 	}
 
@@ -195,99 +305,6 @@
 		userInfoExtra.setUpdateTime(new Date());
 		userInfoExtra.setActiveTime(new Date());
 		userInfoExtraMapper.insertSelective(userInfoExtra);
-	}
-
-	@Override
-	public UserInfoExtra updateRank(UserInfoExtra userInfoExtra) throws UserInfoExtraException {
-		UserInfo userInfo = userInfoExtra.getUserInfo();
-		if (userInfo == null) {
-			throw new UserInfoExtraException(1, "鐢ㄦ埛涓嶅瓨鍦�");
-		}
-
-		Long uid = userInfo.getId();
-		if (uid == null) {
-			throw new UserInfoExtraException(1, "鐢ㄦ埛ID涓嶅瓨鍦�");
-		}
-
-		List<UserRank> listRank = userRankService.getAllRank();
-		if (listRank == null || listRank.size() == 0) {
-			throw new UserInfoExtraException(1, "绯荤粺绛夌骇涓嶅瓨鍦�");
-		}
-
-		int selfOrderNum = 0;
-		int sharedOrderNum = 0;
-		int inviteOrderNum = 0;
-		Map<String, Object> map = commonOrderCountService.lastMonthSettleOrderNumber(uid);
-		if (map != null) {
-			// 杩斿埄璁㈠崟
-			if (map.get("totalSelf") != null) {
-				selfOrderNum = Integer.parseInt(map.get("totalSelf").toString());
-			}
-
-			// 鍒嗕韩璁㈠崟
-			if (map.get("totalShared") != null) {
-				sharedOrderNum = Integer.parseInt(map.get("totalShared").toString());
-			}
-
-			// 閭�璇疯鍗�
-			if (map.get("totalInvite") != null) {
-				inviteOrderNum = Integer.parseInt(map.get("totalInvite").toString());
-			}
-		}
-
-		UserRank rank = null;
-		for (UserRank userRank : listRank) {
-			// 閭�璇锋弧瓒�
-			Integer inviteNum = userRank.getInviteNum();
-			if (inviteOrderNum >= inviteNum) {
-				rank = userRank;
-				userInfoExtra.setRankOrderNum(inviteOrderNum);
-				userInfoExtra.setRankSource(Constant.TYPE_INVITE);
-			}
-
-			// 鍒嗕韩婊¤冻
-			int shareNum = userRank.getShareNum();
-			if (sharedOrderNum >= shareNum) {
-				rank = userRank;
-				userInfoExtra.setRankOrderNum(sharedOrderNum);
-				userInfoExtra.setRankSource(Constant.TYPE_SHAER);
-			}
-
-			// 杩斿埄婊¤冻
-			int directNum = userRank.getRebateNum();
-			if (selfOrderNum >= directNum) {
-				rank = userRank;
-				userInfoExtra.setRankOrderNum(selfOrderNum);
-				userInfoExtra.setRankSource(Constant.TYPE_REBATE);
-			}
-
-			if (rank != null) {
-				userInfoExtra.setUserRank(rank);
-			} else {
-				rank = userRank;
-				// 榛樿鏈�浣庣瓑绾�:闈掗摐
-				userInfoExtra.setUserRank(rank);
-				userInfoExtra.setRankOrderNum(selfOrderNum);
-				userInfoExtra.setRankSource(Constant.TYPE_REBATE);
-				break;
-			}
-		}
-
-		// 绛夌骇鏇存柊鏃堕棿 褰撴湀1鍙�
-		Calendar calendar1 = Calendar.getInstance();
-		calendar1.set(Calendar.DAY_OF_MONTH, 1);
-		userInfoExtra.setRankUpdateTime(calendar1.getTime());
-
-		// 淇濆瓨淇℃伅骞惰繑鍥�
-		saveUserInfoExtra(userInfoExtra);
-
-		UserRankRecord userRankRecord = new UserRankRecord();
-		userRankRecord.setUid(uid);
-		userRankRecord.setRankId(rank.getId());
-		userRankRecord.setCreateTime(new Date());
-		userRankRecordMapper.insertSelective(userRankRecord);
-
-		return userInfoExtra;
 	}
 
 	@Override
@@ -326,9 +343,9 @@
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public String activateInviteCode(Long uid, String inviteCode) throws UserInfoExtraException {
-		if (uid == null || inviteCode == null) 
+		if (uid == null || inviteCode == null)
 			throw new UserInfoExtraException(1, "婵�娲讳俊鎭笉鑳戒负绌�");
-		
+
 		// 琚個璇蜂汉淇℃伅
 		UserInfo invitee = userInfoService.selectByPKey(uid);
 		if (invitee == null)
@@ -340,40 +357,14 @@
 			throw new UserInfoExtraException(1, "宸茬粡婵�娲�, 鏃犻渶鍐嶆婵�娲�");
 
 		inviteCode = inviteCode.toUpperCase();
+	
 		// 閭�璇风爜瀵瑰簲鐢ㄦ埛淇℃伅
-		UserInfo inviter = userInfoService.getUserInfoByInviteCode(inviteCode);
-		if (inviter == null)
+		UserInfo boss = userInfoService.getUserInfoByInviteCode(inviteCode);
+		if (boss == null || boss.getState() != UserInfo.STATE_NORMAL)
 			throw new UserInfoExtraException(1, "涓婄骇閭�璇风爜涓嶅瓨鍦�");
-		
-		// 缁戝畾鍏崇郴
-		try {
-			threeSaleSerivce.bindRelationshipByInviteCode(invitee, inviter);
-		} catch (ThreeSaleException e) {
-			try {
-				LogHelper.errorDetailInfo(e);
-			} catch (Exception e1) {
-				e1.printStackTrace();
-			}
-			throw new UserInfoExtraException(1, "婵�娲诲け璐�");
-		}
 
-		// 鐢熸垚閭�璇风爜
-		String mycode = createInviteCode(uid);
-		if (StringUtil.isNullOrEmpty(mycode)) 
-			throw new UserInfoExtraException(1, "婵�娲荤爜鐢熸垚澶辫触");
-
-		UserInfoExtra userInfoExtra = new UserInfoExtra();
-		userInfoExtra.setUserInfo(invitee);
-		userInfoExtra.setInviteCode(mycode);
-		userInfoExtra.setUpdateTime(new Date());
-		if (extra != null) {
-			userInfoExtra.setId(extra.getId());
-			userInfoExtraMapper.updateByPrimaryKeySelective(userInfoExtra);
-		} else {
-			userInfoExtra.setCreateTime(new Date());
-			userInfoExtraMapper.insertSelective(userInfoExtra);
-		}
-		return mycode;
+		// 鐢熸垚閭�璇峰叧绯�
+		return inviteCodeActive(uid, boss.getId());
 	}
 
 	@Override
@@ -381,7 +372,7 @@
 	public void activationInviteWX(WXAccountInfoDTO wxAccount, Long uid, String code) throws UserInfoExtraException {
 		if (uid == null || code == null)
 			throw new UserInfoExtraException(1, "婵�娲讳俊鎭笉瀹屾暣");
-		 
+
 		UserInfo invitee = userInfoService.selectByPKey(uid);
 		if (invitee == null)
 			throw new UserInfoExtraException(1, "鐢ㄦ埛涓嶅瓨鍦�");
@@ -435,8 +426,9 @@
 				if (asInputStream == null) {
 					LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
 				} else {
-					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(
-							"/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+							String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+									System.currentTimeMillis() + ""));
 					if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
 						headimgurl = result.getUrl();
 					} else {
@@ -456,35 +448,14 @@
 		Long inviterId = userInviteRecordService.getNewestInviterId(wxUnionId);
 		if (inviterId == null)
 			throw new UserInfoExtraException(1, "娌℃湁瀵瑰簲鐨勯個璇峰叧绯�");
-
-		// 缁戝畾鍏崇郴
-		try {
-			threeSaleSerivce.bindRelationshipByWX(invitee, inviterId);
-		} catch (ThreeSaleException e) {
-			try {
-				LogHelper.errorDetailInfo(e);
-			} catch (Exception e1) {
-				e1.printStackTrace();
-			}
-			throw new UserInfoExtraException(1, "鍏崇郴缁戝畾鏃跺け璐�");
-		}
-
-		// 鐢熸垚閭�璇风爜
-		String inviteCode = createInviteCode(uid);
-		if (StringUtil.isNullOrEmpty(inviteCode)) 
-			throw new UserInfoExtraException(1, "婵�娲荤爜鐢熸垚澶辫触");
 		
-		UserInfoExtra userInfoExtra = new UserInfoExtra();
-		userInfoExtra.setUserInfo(invitee);
-		userInfoExtra.setInviteCode(inviteCode);
-		userInfoExtra.setUpdateTime(new Date());
-		if (extra != null) {
-			userInfoExtra.setId(extra.getId());
-			userInfoExtraMapper.updateByPrimaryKeySelective(userInfoExtra);
-		} else {
-			userInfoExtra.setCreateTime(new Date());
-			userInfoExtraMapper.insertSelective(userInfoExtra);
+		UserInfo boss = userInfoService.selectByPKey(inviterId);
+		if (boss == null || boss.getState() != UserInfo.STATE_NORMAL) {
+			throw new UserInfoExtraException(1, "娌℃湁瀵瑰簲鐨勯個璇峰叧绯�");
 		}
+
+		// 閭�璇风爜婵�娲�
+		inviteCodeActive(uid, boss.getId());
 	}
 
 	@Override
@@ -498,15 +469,6 @@
 		UserInfo invitee = userInfoService.selectByPKey(uid);
 		if (invitee == null) {
 			throw new UserInfoExtraException(1, "鐢ㄦ埛涓嶅瓨鍦�");
-		}
-
-		// 鐢ㄦ埛棰濆淇℃伅
-		UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
-		if (extra != null) {
-			String inviteCodeHas = extra.getInviteCode();
-			if (inviteCodeHas != null && inviteCodeHas.trim().length() > 0) {
-				throw new UserInfoExtraException(1, "宸茬粡婵�娲�, 鏃犻渶鍐嶆婵�娲�");
-			}
 		}
 
 		String wxUnionId = weiXinUser.getUnionid();
@@ -548,8 +510,9 @@
 				if (asInputStream == null) {
 					LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
 				} else {
-					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(
-							"/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+							String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+									System.currentTimeMillis() + ""));
 					if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
 						headimgurl = result.getUrl();
 					} else {
@@ -570,10 +533,33 @@
 		if (inviterId == null) {
 			throw new UserInfoExtraException(1, "娌℃湁瀵瑰簲鐨勯個璇峰叧绯�");
 		}
-
+		
+		UserInfo boss = userInfoService.selectByPKey(inviterId);
+		if (boss == null || boss.getState() != UserInfo.STATE_NORMAL) {
+			throw new UserInfoExtraException(1, "娌℃湁瀵瑰簲鐨勯個璇峰叧绯�");
+		}
+		
+		// 閭�璇风爜婵�娲�
+		inviteCodeActive(uid, boss.getId());
+	}
+	
+	
+	/**
+	 * 閭�璇峰叧绯荤敓鎴愭縺娲荤爜
+	 * @param uid
+	 * @param bossId
+	 * @return
+	 * @throws UserInfoExtraException
+	 */
+	private String inviteCodeActive(Long uid, Long bossId) throws UserInfoExtraException{
+		UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
+		if (extra != null && !StringUtil.isNullOrEmpty(extra.getInviteCode())) {
+			throw new UserInfoExtraException(1, "宸茬粡婵�娲�, 鏃犻渶鍐嶆婵�娲�");
+		}
+		
 		// 缁戝畾鍏崇郴
 		try {
-			threeSaleSerivce.bindRelationshipByWX(invitee, inviterId);
+			threeSaleSerivce.bindInviteRelationship(uid, bossId);
 		} catch (ThreeSaleException e) {
 			try {
 				LogHelper.errorDetailInfo(e);
@@ -584,12 +570,12 @@
 		}
 
 		// 鐢熸垚閭�璇风爜
-		String inviteCode = createInviteCode(uid);;
-		if (StringUtil.isNullOrEmpty(inviteCode)) 
+		String inviteCode = createInviteCode(uid);
+		if (StringUtil.isNullOrEmpty(inviteCode))
 			throw new UserInfoExtraException(1, "婵�娲荤爜鐢熸垚澶辫触");
-		
+
 		UserInfoExtra userInfoExtra = new UserInfoExtra();
-		userInfoExtra.setUserInfo(invitee);
+		userInfoExtra.setUserInfo(new UserInfo(uid));
 		userInfoExtra.setInviteCode(inviteCode);
 		userInfoExtra.setUpdateTime(new Date());
 		if (extra != null) {
@@ -599,7 +585,19 @@
 			userInfoExtra.setCreateTime(new Date());
 			userInfoExtraMapper.insertSelective(userInfoExtra);
 		}
+		
+		userActivedRecordService.add(new UserActivedRecord(uid));
+
+		if (!Constant.IS_TEST) { // 鍙戦�佹縺娲绘垚鍔熸秷鎭�
+			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
+					new InviteCodeActiveMQMsg(uid, new Date()));
+			producer.send(message);
+		}
+		
+		return inviteCode;
 	}
+	
+	
 
 	@Override
 	public void updateActiveTime(Long uid, Date date) {
@@ -620,13 +618,25 @@
 	}
 
 	@Override
+	@Transactional
 	public UserInfoExtra getByUidForUpdate(Long uid) {
 		return userInfoExtraMapper.getByUidForUpdate(uid);
 	}
 
 	@Override
+	@Transactional
 	public void updateGoldCoin(Long id, Integer goldCoin) {
 		userInfoExtraMapper.updateGoldCoin(id, goldCoin);
+	}
+
+	@Override
+	public void addGoldCoinByUid(Long uid, Integer goldCoin) {
+		userInfoExtraMapper.addGoldCoinByUid(uid, goldCoin);
+	}
+
+	@Override
+	public void updateByPrimaryKeySelective(UserInfoExtra record) {
+		userInfoExtraMapper.updateByPrimaryKeySelective(record);
 	}
 
 	@Override
@@ -641,21 +651,20 @@
 			// vip閭�璇风爜浼樺厛
 			if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip()))
 				return userInfoExtra.getInviteCodeVip();
-			
+
 			if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode()))
 				return userInfoExtra.getInviteCode();
-			
+
 			// 鏄惁婊¤冻鐢熶骇閭�璇风爜
 			int relationshipNum = threeSaleSerivce.getSuccessRelationshipNum(uid);
 			if (relationshipNum > 0) {
 				try {
 					String inviteCode = createInviteCode(uid);
 					if (!StringUtil.isNullOrEmpty(inviteCode)) {
-						userInfoExtra.setUserInfo(new UserInfo(uid));
-						userInfoExtra.setInviteCode(inviteCode);
-						
-						saveUserInfoExtra(userInfoExtra);
-						
+						UserInfoExtra extra = new UserInfoExtra();
+						extra.setId(userInfoExtra.getId());
+						extra.setInviteCode(inviteCode);
+						userInfoExtraMapper.updateByPrimaryKeySelective(extra);
 						return inviteCode;
 					}
 				} catch (Exception e) {
@@ -668,12 +677,13 @@
 
 	/**
 	 * 鐢熶骇閭�璇风爜
+	 * 
 	 * @param uid
 	 * @return
 	 */
 	private String createInviteCode(Long uid) {
 		String inviteCode = null;
-		for (int i = 1; i <= 5; i ++) {
+		for (int i = 1; i <= 5; i++) {
 			inviteCode = UserUtil.getInviteCode(i, uid);
 			long countCode = userInfoExtraMapper.countByInviteCode(inviteCode);
 			if (countCode <= 0)
@@ -681,8 +691,7 @@
 		}
 		return inviteCode;
 	}
-	
-	
+
 	@Override
 	public long countByRankId(Long rankId) {
 		return userInfoExtraMapper.countByRankId(rankId);
@@ -726,11 +735,15 @@
 	public UserInfo getUserByInviteCode(String inviteCode) throws UserInfoExtraException {
 		if (StringUtil.isNullOrEmpty(inviteCode))
 			throw new UserInfoExtraException(1, "閭�璇风爜涓嶈兘涓虹┖");
-		 
+
 		UserInfo inviter = userInfoService.getUserInfoByInviteCode(inviteCode);
 		if (inviter == null)
 			throw new UserInfoExtraException(1, "涓婄骇閭�璇风爜涓嶅瓨鍦�");
 		
+		if (inviter.getState() != UserInfo.STATE_NORMAL) {
+			throw new UserInfoExtraException(1, "涓婄骇閭�璇风爜涓嶅瓨鍦�");
+		}
+
 		return inviter;
 	}
 
@@ -776,44 +789,98 @@
 		if (inviter == null) {
 			throw new UserInfoExtraException(1, "瀵瑰簲鐨勯個璇峰叧绯讳笉瀛樺湪");
 		}
+		
+		if (inviter.getState() != UserInfo.STATE_NORMAL) {
+			throw new UserInfoExtraException(1, "瀵瑰簲鐨勯個璇峰叧绯讳笉瀛樺湪");
+		}
+		
 		return inviter;
 	}
 
-	@Override
-	public void updateAutoExtract(Integer days) {
-		userInfoExtraMapper.updateAutoExtract(days);
-	}
 
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void updateInviteCodeVip(String inviteCodeVip, Long uid) throws UserInfoExtraException {
 		if (inviteCodeVip == null || inviteCodeVip.length() < 4 || inviteCodeVip.length() > 12)
 			throw new UserInfoExtraException(1, "閭�璇风爜蹇呴』涓�4鍒�12浣�");
-		
+
 		UserInfoExtra extra = getUserInfoExtra(uid);
 		if (extra == null)
 			throw new UserInfoExtraException(2, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
 
 		if (StringUtil.isNullOrEmpty(extra.getInviteCode()))
 			throw new UserInfoExtraException(3, "閭�璇风爜灏氭湭婵�娲�");
-		
+
 		if (!StringUtil.isNullOrEmpty(extra.getInviteCodeVip()))
 			throw new UserInfoExtraException(4, "鍙兘淇敼涓�娆�");
-		
+
 		// 杞崲鎴愬ぇ鍐�
 		inviteCodeVip = inviteCodeVip.toUpperCase();
-		
+
+		// 楠岃瘉鐗规畩鐮�
+		if (InviteCodeFilterUtil.isSpecialCode(inviteCodeVip))
+			throw new UserInfoExtraException(5, "閭�璇风爜宸插瓨鍦�");
+
 		if (inviteCodeVip.equalsIgnoreCase(extra.getInviteCode()))
 			throw new UserInfoExtraException(5, "涓嶈兘涓哄師閭�璇风爜");
-		
+
 		long count = userInfoExtraMapper.countByInviteCode(inviteCodeVip);
 		if (count > 0)
 			throw new UserInfoExtraException(6, "閭�璇风爜宸插瓨鍦�");
-		
+
 		UserInfoExtra update = new UserInfoExtra();
 		update.setId(extra.getId());
 		update.setInviteCodeVip(inviteCodeVip);
 		update.setUpdateTime(new Date());
 		userInfoExtraMapper.updateByPrimaryKeySelective(update);
+
+		if (!Constant.IS_TEST) { // 鍙戦�侀個璇风爜鏇存敼鎴愬姛鐨勬秷鎭�
+			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userInfoUpdate,
+					new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.inviteCode, inviteCodeVip,
+							new Date()));
+			producer.send(message);
+		}
+		
+		// 娑堟伅
+		userAccountMsgNotificationService.createChangeInviteCode(uid, extra.getInviteCode(), inviteCodeVip);
 	}
+
+	@Override
+	public void uploadERCode(MultipartFile file, Long uid) {
+		UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
+		if (extra == null)
+			return;
+
+		// 鍘嬬缉
+		String targetPath = FileUtil.getCacheDir() + "/erCode_" + uid + "_" + System.currentTimeMillis() + ".jpg";
+		try {
+			Thumbnails.of(file.getInputStream()).size(200, 200).toFile(targetPath);
+		} catch (IOException e) {
+			LogHelper.errorDetailInfo(e);
+			return;
+		}
+
+		// 鎵ц涓婁紶
+		String filePath = FilePathEnum.userERcode.getPath() + UUID.randomUUID().toString().replace("-", "") + ".jpg";
+		String fileLink = COSManager.getInstance().uploadFile(new File(targetPath), filePath).getUrl();
+
+		// 鍒犻櫎鏈湴鍥剧墖
+		if (new File(targetPath).exists()) {
+			new File(targetPath).delete();
+		}
+
+		// 鍘熶簩缁寸爜
+		String erCode = extra.getErCode();
+
+		UserInfoExtra update = new UserInfoExtra();
+		update.setId(extra.getId());
+		update.setErCode(fileLink);
+		userInfoExtraMapper.updateByPrimaryKeySelective(update);
+
+		// 鍘熶簩缁寸爜
+		if (!StringUtil.isNullOrEmpty(erCode)) {
+			COSManager.getInstance().deleteFile(erCode);
+		}
+	}
+
 }

--
Gitblit v1.8.0