From f4a0f2acc63d7785eab108419a4e16f5f688cb95 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 18 一月 2020 12:06:27 +0800
Subject: [PATCH] 用户注册信息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java |  467 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 354 insertions(+), 113 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java
index 221814e..4d5ac54 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java
@@ -13,32 +13,53 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.BigDecimalUtil;
+import org.yeshi.utils.DateUtil;
 
 import com.yeshi.fanli.dao.mybatis.tlj.UserTaoLiJinRecordMapper;
 import com.yeshi.fanli.dto.msg.MsgOtherTaoLiJinContentDTO;
 import com.yeshi.fanli.dto.taobao.TaoLiJinDTO;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail.TaoLiJinDetailTypeEnum;
+import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinGiveRecord;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinOrigin;
 import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
+import com.yeshi.fanli.entity.bus.user.TokenRecord;
+import com.yeshi.fanli.entity.bus.user.TokenRecord.TokenTypeEnum;
 import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
 import com.yeshi.fanli.entity.goods.CommonGoods;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
+import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
+import com.yeshi.fanli.exception.taobao.TaoKeApiException;
+import com.yeshi.fanli.exception.tlj.TaoLiJinCreateException;
 import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException;
 import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
-import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
+import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
 import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
-import com.yeshi.fanli.service.inter.tlj.GoodsTaoLiJinRateService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.taobao.ShareHotGoodsService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
+import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService;
+import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinGiveRecordService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
 import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinReportService;
-import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
+import com.yeshi.fanli.service.inter.user.TokenRecordService;
+import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.RedisManager;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TaoBaoConstant;
+import com.yeshi.fanli.util.TokenUtil;
 import com.yeshi.fanli.util.factory.CommonGoodsFactory;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
+import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
 import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
 import com.yeshi.fanli.vo.user.UserTaoLiJinRecordVO;
 
@@ -47,47 +68,67 @@
 
 	@Resource(name = "taskExecutor")
 	private TaskExecutor executor;
-	
+
 	@Resource
 	private RedisManager redisManager;
-	
+
+	@Resource
+	private ConfigService configService;
+
 	@Resource
 	private UserTaoLiJinRecordMapper userTaoLiJinRecordMapper;
-	
+
 	@Resource
 	private CommonGoodsService commonGoodsService;
-	
+
 	@Resource
 	private HongBaoManageService hongBaoManageService;
-	
+
 	@Resource
 	private UserMoneyExtraService userMoneyExtraService;
-	 
+
 	@Resource
 	private UserTaoLiJinReportService userTaoLiJinReportService;
-	
+
 	@Resource
 	private UserTaoLiJinDetailService userTaoLiJinDetailService;
-	
+
 	@Resource
 	private UserTaoLiJinOriginService userTaoLiJinOriginService;
-	
+
 	@Resource
-	private GoodsTaoLiJinRateService goodsTaoLiJinRateService;
-	
+	private ConfigTaoLiJinService configTaoLiJinService;
+
 	@Resource
 	private UserOtherMsgNotificationService userOtherMsgNotificationService;
-	
-	
-	
+
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+
+	@Resource
+	private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+
+	@Resource
+	private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
+
+	@Resource
+	private ShareHotGoodsService shareHotGoodsService;
+
+	@Resource
+	private TokenRecordService tokenRecordService;
+
+	@Resource
+	private UserTaoLiJinGiveRecordService userTaoLiJinGiveRecordService;
+
 	@Override
-	public UserTaoLiJinRecord  selectByPrimaryKey(Long id){
+	public UserTaoLiJinRecord selectByPrimaryKey(Long id) {
 		return userTaoLiJinRecordMapper.selectByPrimaryKey(id);
 	}
-	
-	
+
+	@Transactional(rollbackFor=Exception.class)
 	@Override
-	public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException{
+	public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, BigDecimal couplePrice, TaoBaoGoodsBrief goods)
+			throws UserTaoLiJinRecordException {
 		Date date = new Date();
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 		SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -108,15 +149,41 @@
 		} catch (ParseException e2) {
 			e2.printStackTrace();
 		}
-		BigDecimal perface = goodsTaoLiJinRateService.getGoodsSpreadMoney(goods);
-		
-		return createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, sendStartTime,
-					sendEndTime, null, useEndTime);
+
+		if (!TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {// 闈炶繑鍒╁簱鍟嗗搧
+			String relationId = null;
+			try {
+				relationId = taoBaoBuyRelationMapService.getRelationId(uid);
+			} catch (Exception e) {
+				LogHelper.errorDetailInfo(e, "uid:" + uid, null);
+			}
+
+			if (StringUtil.isNullOrEmpty(relationId)) {
+				throw new UserTaoLiJinRecordException(101, "娓犻亾鏈妗�");
+			}
+			UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name,
+					sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
+			record.setSendUrl(record.getSendUrl() + "&relationId=" + relationId);
+			UserTaoLiJinRecord updateRecoed = new UserTaoLiJinRecord();
+			updateRecoed.setId(record.getId());
+			updateRecoed.setSendUrl(record.getSendUrl());
+			userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record);
+			return record;
+		} else {// 杩斿埄搴撳晢鍝�
+			return createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name, sendStartTime, sendEndTime, null,
+					useEndTime, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
+		}
+
 	}
-	
-	
+
+	@Transactional(rollbackFor=Exception.class)
 	@Override
-	public UserTaoLiJinRecord createShareTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException{
+	public UserTaoLiJinRecord createShareTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods)
+			throws UserTaoLiJinRecordException {
+		String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
+		if (StringUtil.isNullOrEmpty(relationId))
+			throw new UserTaoLiJinRecordException(101, "娓犻亾鏈巿鏉�");
+
 		Date date = new Date();
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 		SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -137,41 +204,95 @@
 		} catch (ParseException e2) {
 			e2.printStackTrace();
 		}
-		
-		BigDecimal perface = goodsTaoLiJinRateService.getGoodsSpreadMoney(goods);
-		
-		return createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name, sendStartTime,
-					sendEndTime, null, useEndTime);
+
+		boolean isNewUser = userInfoExtraService.isNewUser(uid);
+		if (isNewUser) {
+			// 鍒ゅ畾涓鸿�佺敤鎴凤細 鏂颁汉鍙浣跨敤浜嗘柊浜虹孩鍖咃紝涔熷氨鏄偅1鍧楅挶锛岄偅涔堬紝浠栫湅鍒扮殑鍒嗕韩鐖嗘涓殑鍟嗗搧-灏卞彧鑳藉垎浜��
+			long countRecord = userTaoLiJinRecordMapper.countRecordByUid(uid);
+			if (countRecord > 0) {
+				isNewUser = false;
+			}
+		}
+
+		BigDecimal perface = null;
+		if (isNewUser) {
+			perface = new BigDecimal(1);
+		} else {
+			// 璁$畻鎺ㄥ箍绾㈠寘
+			String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date());
+			perface = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
+		}
+
+		UserTaoLiJinRecord record = createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name,
+				sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT);
+		String sendUrl = record.getSendUrl() + "&relationId=" + relationId;
+		record.setSendUrl(sendUrl);
+		UserTaoLiJinRecord updateRecoed = new UserTaoLiJinRecord();
+		updateRecoed.setId(record.getId());
+		updateRecoed.setSendUrl(sendUrl);
+		userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record);
+		return record;
 	}
-	
-	
+
 	@Override
-	@Transactional
-	public UserTaoLiJinRecord createUserTaoLiJin(int origin, Long uid, Long auctionId, BigDecimal perface, int totalNum, String name,
-			Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime) throws UserTaoLiJinRecordException{
-		
+	@Transactional(rollbackFor=Exception.class)
+	public UserTaoLiJinRecord createUserTaoLiJin(int origin, Long uid, Long auctionId, BigDecimal perface, int totalNum,
+			String name, Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, String pid)
+			throws UserTaoLiJinRecordException {
+
 		// 鐢ㄦ埛鍓╀綑鍙互娣樼ぜ閲戦獙璇�
 		UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
 		if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) {
 			throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻");
 		}
-		
-		// 杩囨湡
-		userTaoLiJinOriginService.overdueHongBao(uid);
-				
-		BigDecimal tlj = userMoneyExtra.getTlj();
+
+		// 杩囨湡 -鍙栨秷鏀跺洖
+		// userTaoLiJinOriginService.overdueHongBao(uid);
+
+		// 鎬绘帹骞跨孩鍖�
 		BigDecimal totalMoney = MoneyBigDecimalUtil.mul(perface, new BigDecimal(totalNum));
-		if (totalMoney.compareTo(tlj) > 0) {
-			throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻");
+
+		// 鑷喘鏃剁殑绾㈠寘浣欓
+		if (origin == 1) {
+			BigDecimal tljSelf = userMoneyExtra.getTljSelf();
+			if (tljSelf == null || tljSelf.compareTo(totalMoney) < 0) {
+				throw new UserTaoLiJinRecordException(101, "鑷喘绾㈠寘浣欓涓嶈冻");
+			}
 		}
-		
+
+		// 鍒嗕韩鏃剁殑绾㈠寘浣欓
+		BigDecimal tlj = userMoneyExtra.getTlj();
+		if (tlj == null || tlj.compareTo(totalMoney) < 0) {
+			throw new UserTaoLiJinRecordException(101, "鍒嗕韩绾㈠寘浣欓涓嶈冻");
+		}
+
 		// 鍒涘缓娣樼ぜ閲戠孩鍖�
-		TaoLiJinDTO taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime, useStartTime, useEndTime);
-		if (taoLiJinDTO == null) {
-			throw new UserTaoLiJinRecordException(101, "绾㈠寘鍒涘缓澶辫触");
+		TaoLiJinDTO taoLiJinDTO = null;
+		try {
+			taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime,
+					useStartTime, useEndTime,
+					new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET, pid));
+		} catch (TaoLiJinCreateException e) {
+			LogHelper.errorDetailInfo(e);
+			executor.execute(new Runnable() {
+				@Override
+				public void run() {
+					if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_FORBIDDEN) {
+						// 璇ュ晢鍝佷笉鏀寔鍒涘缓娣樼ぜ閲戠孩鍖�
+						shareHotGoodsService.deleteByGoodsId(auctionId);
+					} else if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_NO_MONEY) {
+						// 瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻 TODO
+					}
+				}
+			});
+		} catch (TaoKeApiException e1) {
 		}
-		
-		//  淇濆瓨璁板綍
+
+		if (taoLiJinDTO == null) {
+			throw new UserTaoLiJinRecordException(101, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+		}
+
+		// 淇濆瓨璁板綍
 		UserTaoLiJinRecord record = new UserTaoLiJinRecord();
 		record.setUid(uid);
 		record.setGoodsId(auctionId);
@@ -185,18 +306,27 @@
 		record.setRightsId(taoLiJinDTO.getRightsId());
 		record.setSendUrl(taoLiJinDTO.getSendUrl());
 		record.setCreateTime(new Date());
+		if (origin == 1) { // 鑷喘
+			record.setUseType(1);
+		} else { // 鍒嗕韩
+			record.setUseType(2);
+		}
+
 		userTaoLiJinRecordMapper.insertSelective(record);
-		
-		// 鍓╀綑娣樼ぜ閲�
+
 		BigDecimal surplusTlj = MoneyBigDecimalUtil.sub(tlj, totalMoney);
+
 		UserMoneyExtra updateExtra = new UserMoneyExtra();
 		updateExtra.setUid(uid);
+		if (origin == 1) { // 鍓╀綑娣樼ぜ閲�-- 鑷喘
+			updateExtra.setTljSelf(MoneyBigDecimalUtil.sub(userMoneyExtra.getTljSelf(), totalMoney));
+		}
 		updateExtra.setTlj(surplusTlj);
 		updateExtra.setUpdateTime(new Date());
 		userMoneyExtraService.updateByPrimaryKeySelective(updateExtra);
-		
+
 		record.setSurplusMoney(surplusTlj);
-		
+
 		// 寮傛
 		String rightsId = taoLiJinDTO.getRightsId();
 		executor.execute(new Runnable() {
@@ -214,30 +344,29 @@
 				} catch (Exception e) {
 					LogHelper.errorDetailInfo(e);
 				}
-				
-				
+
 				// 鎴愬姛浣跨敤绾㈠寘
 				try {
 					BigDecimal total = totalMoney;
 					BigDecimal lastMoney = null;
 					BigDecimal zero = new BigDecimal(0);
-					
+
 					// 淇敼浣欓
 					List<UserTaoLiJinOrigin> list = userTaoLiJinOriginService.getSurplusLiJin(uid);
 					if (list != null && list.size() > 0) {
-						for (UserTaoLiJinOrigin taoLiJinOrigin: list) {
-							if (total.compareTo(zero) < 1 ) {
+						for (UserTaoLiJinOrigin taoLiJinOrigin : list) {
+							if (total.compareTo(zero) < 1) {
 								break;
 							}
 							BigDecimal moneySurplus = taoLiJinOrigin.getMoneySurplus();
 							lastMoney = total;
 							total = MoneyBigDecimalUtil.sub(total, moneySurplus);
-							if (total.compareTo(zero) >= 0 ) {
+							if (total.compareTo(zero) >= 0) {
 								moneySurplus = zero;
 							} else {
 								moneySurplus = MoneyBigDecimalUtil.sub(moneySurplus, lastMoney);
 							}
-							
+
 							UserTaoLiJinOrigin usertlj = new UserTaoLiJinOrigin();
 							usertlj.setId(taoLiJinOrigin.getId());
 							usertlj.setMoneySurplus(moneySurplus);
@@ -248,35 +377,37 @@
 				} catch (Exception e) {
 					LogHelper.errorDetailInfo(e);
 				}
-				
-				
-				
-				// 浣跨敤鎴愬姛娑堟伅
-				try {
-					String beizhu = "鏈棰嗗彇/浣跨敤鐨勯儴鍒嗗皢浼氶��鍥�";
-					
-					SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd hh.mm");
-					String time = sd.format(new Date());
-					MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
-					content.setState("绾㈠寘鎵i櫎");
-					content.setSource(time + " 鍒涘缓鐨勫垎浜褰�");
-					content.setMoney(totalMoney);
-					
-					userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
-				} catch (Exception e) {
-					LogHelper.errorDetailInfo(e);
-				}
-				
+
 				// 鍒涘缓鎶ュ憡
 				try {
 					userTaoLiJinReportService.insertDefault(rightsId);
 				} catch (Exception e) {
 					LogHelper.errorDetailInfo(e);
 				}
-				
+
+				if (origin == 1) {
+					return; // 鑷喘涓嶆帹閫佹秷鎭�
+				}
+
+				// 浣跨敤鎴愬姛娑堟伅
+				try {
+					String beizhu = "鏈棰嗗彇鎴栭鍙栧悗鏈娇鐢ㄩ儴鍒嗛��鍥�";
+					SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+					String time = sd.format(new Date());
+					MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
+					content.setState("绾㈠寘鎵i櫎");
+					content.setSource(time + " 鍒涘缓鐨勫垎浜褰�");
+					content.setMoney(totalMoney);
+
+					userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+
 				// 妫�娴嬪晢鍝佹槸鍚﹀瓨鍦�
 				try {
-					CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId, CommonGoods.GOODS_TYPE_TB);
+					CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId,
+							CommonGoods.GOODS_TYPE_TB);
 					if (commonGoods == null) {
 						TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
 						if (taoBaoGoodsBrief != null) {
@@ -288,71 +419,66 @@
 				}
 			}
 		});
-		
+
 		return record;
 	}
 
-	
 	@Override
-	public List<UserTaoLiJinRecordVO> getRecordByUid(long start, int count, Long uid){
+	public List<UserTaoLiJinRecordVO> getRecordByUid(long start, int count, Long uid) {
 		List<UserTaoLiJinRecordVO> list = userTaoLiJinRecordMapper.getRecordByUid(start, count, uid);
 		if (list == null || list.size() == 0) {
 			return list;
 		}
-		
-		
+
 		List<Long> listGoodsId = new ArrayList<Long>();
-		for (UserTaoLiJinRecordVO userTaoLiJinRecordVO: list) {
+		for (UserTaoLiJinRecordVO userTaoLiJinRecordVO : list) {
 			listGoodsId.add(userTaoLiJinRecordVO.getAuctionId());
 		}
-		
+
 		if (listGoodsId.size() == 0) {
 			return null;
 		}
-		
-		List<CommonGoods> listGoods = commonGoodsService.getByListGoodsId(listGoodsId);
+
+		List<CommonGoods> listGoods = commonGoodsService.getByListGoodsId(listGoodsId, Constant.SOURCE_TYPE_TAOBAO);
 		if (listGoods == null || listGoods.size() == 0) {
 			return null;
 		}
-		
-		
+
 		// 缁勭粐鐩稿叧鏁版嵁
-		for (UserTaoLiJinRecordVO userTaoLiJinRecordVO: list) {
+		for (UserTaoLiJinRecordVO userTaoLiJinRecordVO : list) {
 			long auctionId = userTaoLiJinRecordVO.getAuctionId().longValue();
-			
+
 			// 鍟嗗搧淇℃伅
-			for (int i = 0; i< listGoods.size(); i++) {
+			for (int i = 0; i < listGoods.size(); i++) {
 				CommonGoods commonGoods = listGoods.get(i);
 				long goodsId = commonGoods.getGoodsId().longValue();
 				if (auctionId == goodsId) {
 					userTaoLiJinRecordVO.setTitle(commonGoods.getTitle());
 					userTaoLiJinRecordVO.setPictUrl(commonGoods.getPicture());
-					if(CommonGoods.SHOP_TYPE_TB == commonGoods.getShopType()) {
+					if (CommonGoods.SHOP_TYPE_TB == commonGoods.getShopType()) {
 						userTaoLiJinRecordVO.setUserType(0);
 					} else {
 						userTaoLiJinRecordVO.setUserType(1);
 					}
-					
-					listGoods.remove(i);
 					break;
 				}
 			}
-			
+
 			// 璁$畻鍓╀綑鏈鍙栨暟閲�
 			int winNum = userTaoLiJinRecordVO.getWinNum();
 			int totalNum = userTaoLiJinRecordVO.getTotalNum();
 			userTaoLiJinRecordVO.setSurplusNum(totalNum - winNum);
-			
-			
+
 			// 璁$畻鍒嗕韩濂栭噾
 			BigDecimal shareMoney = new BigDecimal(0);
 			BigDecimal commission = userTaoLiJinRecordVO.getCommission();
-			if (commission != null && commission.compareTo(shareMoney) > 1) {
+			if (commission != null && commission.compareTo(shareMoney) > 0) {
 				BigDecimal shareRate = hongBaoManageService.getShareRate();
-				shareMoney = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(commission, new BigDecimal("0.01")), MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
+				shareMoney = MoneyBigDecimalUtil.mul(commission,
+						MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
 				shareMoney = BigDecimalUtil.getWithNoZera(shareMoney);
 			}
-			
+
 			ClientTextStyleVO desc = new ClientTextStyleVO();
 			desc.setColor("#FFFFFF");
 			desc.setContent("棰勪及鍒嗕韩濂栭噾锛氾骏" + shareMoney);
@@ -361,26 +487,141 @@
 		}
 		return list;
 	}
-	
+
 	@Override
 	public long countRecordByUid(Long uid) {
 		return userTaoLiJinRecordMapper.countRecordByUid(uid);
 	}
-	
+
+	@Override
+	public long countShareRecordByUid(Long uid) {
+		return userTaoLiJinRecordMapper.countShareRecordByUid(uid);
+	}
+
 	@Override
 	public long countTodayNum(Long uid) {
 		return userTaoLiJinRecordMapper.countTodayNum(uid);
 	}
-	
-	
+
 	@Override
 	public BigDecimal getShareHongBaoByUidAndGoodsId(Long uid, Long goodsId) {
 		return userTaoLiJinRecordMapper.getShareHongBaoByUidAndGoodsId(uid, goodsId);
 	}
-	
+
 	@Override
 	public UserTaoLiJinRecord getByRightsId(String rightsId) {
 		return userTaoLiJinRecordMapper.getByRightsId(rightsId);
 	}
-	
+
+	@Override
+	public String giveTaolijin(Long uid, BigDecimal amount) throws UserTaoLiJinRecordException {
+		if (uid == null || amount == null)
+			throw new UserTaoLiJinRecordException(1, "鍙傛暟涓嶆纭�");
+
+		String giveMin = configTaoLiJinService.getValueByKey("give_min_amount");
+		if (amount.compareTo(new BigDecimal(giveMin)) < 0)
+			throw new UserTaoLiJinRecordException(1, "璧犻�佹帹骞跨孩鍖呴噾棰濊嚦灏�" + giveMin + "鍏�");
+
+		// 鐢ㄦ埛鍓╀綑鍙互娣樼ぜ閲戦獙璇�
+		UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
+		if (userMoneyExtra == null || userMoneyExtra.getTlj() == null)
+			throw new UserTaoLiJinRecordException(1, "绾㈠寘浣欓涓嶈冻");
+
+		BigDecimal tlj = userMoneyExtra.getTlj();
+		if (amount.compareTo(tlj) > 0)
+			throw new UserTaoLiJinRecordException(1, "绾㈠寘浣欓涓嶈冻");
+
+		Date nowDate = new Date();
+		// 璧犻�佽褰�
+		UserTaoLiJinGiveRecord giveRecord = new UserTaoLiJinGiveRecord();
+		giveRecord.setAmount(amount);
+		giveRecord.setGiveUid(uid);
+		giveRecord.setState(UserTaoLiJinGiveRecord.STATE_INIT);
+		giveRecord.setGiveTime(nowDate);
+		giveRecord.setEndTime(DateUtil.plusDayDate(Constant.GIVE_DAYS, new Date()));
+		userTaoLiJinGiveRecordService.insertSelective(giveRecord);
+
+		// 鍙d护璁板綍
+		TokenRecord tokenRecord = new TokenRecord();
+		tokenRecord.setUid(uid);
+		tokenRecord.setIdentify(giveRecord.getId() + "");
+		tokenRecord.setType(TokenTypeEnum.taoLiJin);
+		tokenRecord.setStartTime(nowDate);
+		tokenRecord.setEndTime(DateUtil.plusDayDate(Constant.TOKEN_DAYS, new Date()));
+		tokenRecord.setState(0);
+		tokenRecordService.insertSelective(tokenRecord);
+
+		// 鍒涘缓鍙d护
+		String token = TokenUtil.createToken(tokenRecord.getId());
+		tokenRecord.setToken(token);
+		tokenRecordService.updateByPrimaryKeySelective(tokenRecord);
+
+		// 鏇存柊浣欓
+		UserMoneyExtra updateExtra = new UserMoneyExtra();
+		updateExtra.setUid(uid);
+		updateExtra.setTlj(MoneyBigDecimalUtil.sub(tlj, amount));
+		updateExtra.setUpdateTime(new Date());
+		userMoneyExtraService.updateByPrimaryKeySelective(updateExtra);
+
+		String tips = configTaoLiJinService.getValueByKey("give_taolijin_tips");
+		String projectChineseName = Constant.systemCommonConfig.getProjectChineseName();
+		while (tips.contains("{APP鍚嶇О}")) {
+			tips = tips.replace("{APP鍚嶇О}", projectChineseName);
+		}
+		tips = tips.replace("{鍙d护}", token).replace("{涓嬭浇閾炬帴}", configService.get(ConfigKeyEnum.appDownLink.getKey())).replace("{闈㈤}",
+				amount.setScale(0).toString());
+
+		executor.execute(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					// 鎻掑叆鏄庣粏
+					UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
+					detail.setUid(uid);
+					detail.setMoney(new BigDecimal("-" + amount));
+					detail.setTitle(TaoLiJinDetailTypeEnum.give.getDesc());
+					detail.setType(TaoLiJinDetailTypeEnum.give);
+					detail.setCreateTime(new Date());
+					userTaoLiJinDetailService.insertSelective(detail);
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+
+				// 鎴愬姛浣跨敤绾㈠寘
+				try {
+					BigDecimal total = amount;
+					BigDecimal lastMoney = null;
+					BigDecimal zero = new BigDecimal(0);
+					// 淇敼浣欓
+					List<UserTaoLiJinOrigin> list = userTaoLiJinOriginService.getSurplusLiJin(uid);
+					if (list != null && list.size() > 0) {
+						for (UserTaoLiJinOrigin taoLiJinOrigin : list) {
+							if (total.compareTo(zero) < 1) {
+								break;
+							}
+							BigDecimal moneySurplus = taoLiJinOrigin.getMoneySurplus();
+							lastMoney = total;
+							total = MoneyBigDecimalUtil.sub(total, moneySurplus);
+							if (total.compareTo(zero) >= 0) {
+								moneySurplus = zero;
+							} else {
+								moneySurplus = MoneyBigDecimalUtil.sub(moneySurplus, lastMoney);
+							}
+
+							UserTaoLiJinOrigin usertlj = new UserTaoLiJinOrigin();
+							usertlj.setId(taoLiJinOrigin.getId());
+							usertlj.setMoneySurplus(moneySurplus);
+							usertlj.setUpdateTime(new Date());
+							userTaoLiJinOriginService.updateByPrimaryKeySelective(usertlj);
+						}
+					}
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+			}
+		});
+
+		return tips;
+	}
+
 }

--
Gitblit v1.8.0