From c9eef762a23fabf7c05a460dc1cdc5aaca22e1c7 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期二, 05 三月 2019 15:02:20 +0800
Subject: [PATCH] 抽奖规则代码优化

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  275 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 219 insertions(+), 56 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
index 65905f6..383722c 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -15,8 +15,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.DateUtil;
+import org.yeshi.utils.JsonUtil;
 
 import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
+import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
 import com.yeshi.fanli.entity.bus.user.Order;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
@@ -39,10 +41,12 @@
 import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
 import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
+import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
 import com.yeshi.fanli.service.inter.order.CommonOrderService;
 import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
 import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService;
 import com.yeshi.fanli.service.inter.order.OrderService;
+import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
 import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
@@ -117,9 +121,11 @@
 	@Resource
 	private UserOtherMsgNotificationService userOtherMsgNotificationService;
 	
-
-	// 鍒稿け鏁堝浘鐗�
-	public final static String PIC_INVALID = "http://192.168.1.200/icon/mian_invalid.png";
+	@Resource
+	private DeviceLotteryRecordService deviceLotteryRecordService;
+	
+	@Resource
+	private CommonOrderCountService commonOrderCountService;
 
 	@Override
 	public int insertSelective(UserSystemCoupon record) {
@@ -157,7 +163,8 @@
 	}
 
 	@Override
-	public void insertUserCoupon(Long uid, String couponType,String source)throws UserSystemCouponException,Exception{
+	@Transactional
+	public void insertUserCoupon(Long uid, String couponType, String source)throws UserSystemCouponException,Exception{
 		
 		if (couponType == null || uid == null) {
 			throw new UserSystemCouponException(1, "鍙傛暟涓嶆纭�");
@@ -202,7 +209,13 @@
 				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
 				// 娣诲姞涓�鏉℃秷鎭�
 				if (userInfoExtra != null) {
-					userInfoExtra.setCouponNews(userInfoExtra.getCouponNews() + 1);
+					if (userInfoExtra.getCouponNews() == null) {
+						userInfoExtra.setCouponNews(1);
+					} else {
+						userInfoExtra.setCouponNews(userInfoExtra.getCouponNews() + 1);
+					}
+					
+					
 					try {
 						userInfoExtraService.saveUserInfoExtra(userInfoExtra);
 					} catch (UserInfoExtraException e) {
@@ -215,11 +228,11 @@
 		
 		// 娑堟伅鎺ㄩ��
 		try {
-			if (coupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
+			if (coupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
 				userOtherMsgNotificationService.welfareCouponGet(userCoupon);
-			} else if (coupon.getType() != CouponTypeEnum.freeCoupon) {
+			} else if (coupon.getType() == CouponTypeEnum.freeCoupon) {
 				userOtherMsgNotificationService.freeSheetCouponGet(userCoupon);
-			} else if (coupon.getType() != CouponTypeEnum.rebatePercentCoupon) {
+			} else if (coupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
 				userOtherMsgNotificationService.rewardCouponGet(userCoupon,coupon.getPercent().intValue());
 			}
 			
@@ -283,10 +296,14 @@
 			userCouponVO.setCouponPicture(systemCoupon.getPicture());
 			userCouponVO.setCouponEffect(systemCoupon.getEffect());
 			userCouponVO.setCouponRule(systemCoupon.getRule());
+			userCouponVO.setCouponPictureInvalid(systemCoupon.getPictureInvalid());
 
 			// 浣跨敤鐘舵��
 			Integer state = userCouponVO.getState();
-
+			
+			// 鍒哥被鍨�
+			CouponTypeEnum type = systemCoupon.getType();
+			
 			// 鎸夐挳璺宠浆
 			Map<String, Object> jumpBtn = null;
 			
@@ -303,22 +320,21 @@
 				}
 
 				jumpBtn = new HashMap<String, Object>();
-				Map<String, Object> jumpLink = new HashMap<String, Object>();
 				
-				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
 				
 				// 閭�璇烽槦鍛樼晫闈�
-				if (userInfoExtra != null && userInfoExtra.getInviteCode() != null
-						&& userInfoExtra.getInviteCode().trim().length() > 0) {
-					// 閭�璇锋縺娲绘垚鍔熺晫闈�
-					jumpLink.put("url", configService.get("invite_activation_success_url") + "?alert=true");
-				} else {
-					// 婵�娲婚個璇风爜鐣岄潰
-					jumpLink.put("url", configService.get("invite_activation_url"));
-				}
+				/*
+				 * Map<String, Object> jumpLink = new HashMap<String, Object>();
+				 *UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				 * if (userInfoExtra != null && userInfoExtra.getInviteCode() != null &&
+				 * userInfoExtra.getInviteCode().trim().length() > 0) { // 閭�璇锋縺娲绘垚鍔熺晫闈�
+				 * jumpLink.put("url", configService.get("invite_activation_success_url") +
+				 * "?alert=true"); } else { // 婵�娲婚個璇风爜鐣岄潰 jumpLink.put("url",
+				 * configService.get("invite_activation_url")); }
+				 *	jumpBtn.put("params", jumpLink);
+				 */
 				
-				jumpBtn.put("params", jumpLink);
-				jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite_web"));
+				jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite"));
 
 			} else if (stateActivated == 1) {
 				// 鏄剧ず瑙勫垯
@@ -327,7 +343,6 @@
 				if (UserSystemCoupon.STATE_CAN_USE == state) {
 					Map<String, Object> jumpLink = new HashMap<String, Object>();
 
-					CouponTypeEnum type = systemCoupon.getType();
 					if (CouponTypeEnum.freeCoupon == type || CouponTypeEnum.welfareFreeCoupon == type) {
 						// 鍏嶅崟鍒搞�� 绂忓埄鍏嶅崟鍒�
 						
@@ -356,8 +371,8 @@
 			
 			// 鍒稿け鏁堝浘鐗囨浛鎹�
 			if (UserSystemCoupon.STATE_END_USE == state || UserSystemCoupon.STATE_OVERDUE == state) {
-				userCouponVO.setCouponPicture(PIC_INVALID);
-			}
+				userCouponVO.setCouponPicture(systemCoupon.getPictureInvalid());
+			} 
 			
 			userCouponVO.setJumpBtn(jumpBtn);
 
@@ -423,15 +438,8 @@
 			userCouponVO.setCouponName(systemCoupon.getName());
 			userCouponVO.setCouponEffect(systemCoupon.getEffect());
 			userCouponVO.setCouponRule(systemCoupon.getRule());
+			userCouponVO.setCouponPictureInvalid(systemCoupon.getPictureInvalid());
 
-			Integer stateActivated = userCouponVO.getStateActivated();
-			if (stateActivated == null || stateActivated == 0) {
-				userCouponVO.setState(0);
-				userCouponVO.setCouponEffect("寰呮縺娲�");
-				userCouponVO.setCouponPicture(PIC_INVALID); // 鏈縺娲诲浘鐗�
-			} else {
-				userCouponVO.setCouponPicture(systemCoupon.getPicture());
-			}
 
 			int differentDays = 0;
 			String couponTerm = "鏈夋晥鏈燂細";
@@ -453,7 +461,23 @@
 			// 鍓╀綑澶╂暟
 			Map<String, Object> remainDays = new HashMap<String, Object>();
 			remainDays.put("content", "杩樺墿" + differentDays + "澶╄繃鏈�");
-			remainDays.put("fontColor", "#F14242");
+			String  remainDaysFontColor = "";
+			
+			Integer stateActivated = userCouponVO.getStateActivated();
+			if (stateActivated == null || stateActivated == 0) {
+				userCouponVO.setState(0);
+				userCouponVO.setCouponEffect("寰呮縺娲�");
+				userCouponVO.setCouponPicture(systemCoupon.getPictureInvalid());
+				
+				remainDaysFontColor = "#CCCCCC";
+				
+			} else {
+				userCouponVO.setCouponPicture(systemCoupon.getPicture());
+				
+				remainDaysFontColor = "#F14242";
+			}
+			
+			remainDays.put("fontColor", remainDaysFontColor);
 			userCouponVO.setRemainDays(remainDays);
 		}
 
@@ -541,7 +565,14 @@
 					for (UserSystemCouponVO userCouponVO: list) {
 						// 鏄剧ず涓嶈兘浣跨敤
 						userCouponVO.setState(0);
-						userCouponVO.setCouponPicture(PIC_INVALID);
+						userCouponVO.setCouponPicture(userCouponVO.getCouponPictureInvalid());
+						
+						Map<String, Object> map = userCouponVO.getRemainDays();
+						if (map != null) {
+							map.put("fontColor", "#CCCCCC");
+						}
+						userCouponVO.setRemainDays(map);
+						
 					}
 				}
 			}
@@ -603,10 +634,10 @@
 		
 		// 娑堟伅鎺ㄩ��
 		try {
-			if (baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
-//				userOtherMsgNotificationService.welfareCouponUsing(userSystemCoupon,order);
-			} else if (baseCoupon.getType() != CouponTypeEnum.freeCoupon) {
-//				userOtherMsgNotificationService.freeSheetCouponUsing(userSystemCoupon);
+			if (baseCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
+				//userOtherMsgNotificationService.welfareCouponUsing(userSystemCoupon,order.get);
+			} else if (baseCoupon.getType() == CouponTypeEnum.freeCoupon) {
+				//userOtherMsgNotificationService.freeSheetCouponUsing(userSystemCoupon);
 			}
 			
 		} catch(Exception e) {
@@ -1023,6 +1054,9 @@
 			return;
 		}
 		
+		// 楠岃瘉鏄惁澶辨晥
+		updateCounponInvalid(uid);
+		
 		// 寰呮椿绂忓埄鍏嶅崟鍒�
 		List<UserSystemCoupon> list = userSystemCouponMapper.getCouponByTypeAndNotActivated(uid, systemCoupon.getId());
 		if (list == null || list.size() == 0) {
@@ -1031,13 +1065,22 @@
 		
 		for (UserSystemCoupon userSystemCoupon: list) {
 			// 婵�娲�
-			userSystemCoupon.setStateActivated(1);
-			userSystemCoupon.setUpdateTime(new Date());
-			userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
+			UserSystemCoupon update=new UserSystemCoupon();
+			update.setId(userSystemCoupon.getId());
+			update.setStateActivated(1);
+			update.setUpdateTime(new Date());
+			userSystemCouponMapper.updateByPrimaryKeySelective(update);
+			
+			Integer state = userSystemCoupon.getState();
+			if (UserSystemCoupon.STATE_OVERDUE == state) {
+				continue; // 宸插け鏁堜笉鍋氭秷鎭帹閫�
+			}
 			
 			// 娑堟伅鎺ㄩ��
 			try {
-				userOtherMsgNotificationService.welfareCouponGet(userSystemCoupon);
+				UserInfo userInfo = userInfoService.selectByPKey(uid);
+				
+				userOtherMsgNotificationService.welfareCouponActive(userSystemCoupon, userInfo);
 			} catch(Exception e) {
 				try {
 					LogHelper.errorDetailInfo(e);
@@ -1067,7 +1110,7 @@
 		userSystemCouponRecordService.updateByPrimaryKeySelective(record);
 		
 		// 鍒搁��鍥�
-		sendBackCoupon(record.getUserSystemCoupon());
+		sendBackCoupon(record.getUserSystemCoupon(), record);
 	}
 	
 	@Transactional
@@ -1087,6 +1130,13 @@
 		record.setUpdateTime(new Date());
 		record.setState(UserSystemCouponRecord.STATE_SUCCESS);
 		userSystemCouponRecordService.updateByPrimaryKeySelective(record);
+		
+		// 娑堟伅鎺ㄩ��
+		if (CouponTypeEnum.welfareFreeCoupon.name().equals(record.getCouponType())) {
+			userOtherMsgNotificationService.welfareCouponUsed(record.getUserSystemCoupon(), orderNo);
+		} else if (CouponTypeEnum.freeCoupon.name().equals(record.getCouponType())) {
+			userOtherMsgNotificationService.freeSheetCouponUsed(record.getUserSystemCoupon(), orderNo);
+		} 
 	}
 
 	@Transactional
@@ -1114,11 +1164,11 @@
 			
 			// 娑堟伅鎺ㄩ��
 			try {
-				if (baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
+				if (baseCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
 					userOtherMsgNotificationService.welfareCouponAlreadyOutOfDate(userSystemCoupon);
-				} else if (baseCoupon.getType() != CouponTypeEnum.freeCoupon) {
+				} else if (baseCoupon.getType() == CouponTypeEnum.freeCoupon) {
 					userOtherMsgNotificationService.freeSheetCouponAlreadyOutOfDate(userSystemCoupon);
-				} else if (baseCoupon.getType() != CouponTypeEnum.rebatePercentCoupon) {
+				} else if (baseCoupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
 					userOtherMsgNotificationService.rewardCouponAlreadyOutOfDate(userSystemCoupon);
 				}
 				
@@ -1223,7 +1273,7 @@
 				userSystemCouponRecordService.updateByPrimaryKeySelective(record);
 				
 				// 閫�鍥炲埜
-				sendBackCoupon(userSystemCoupon);
+				sendBackCoupon(userSystemCoupon, record);
 				
 			} else {
 				// 鍏嶅崟鍖归厤鎴愬姛
@@ -1238,16 +1288,15 @@
 				userSystemCoupon.setUpdateTime(new Date());
 				userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
 				
-				SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
+				String couponType = record.getCouponType();
+				if (couponType == null || couponType.trim().length() == 0) {
+					throw new Exception("鍒哥被鍨嬫湭琚褰�");
+				}
 				
-				SystemCoupon baseCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
-				if (baseCoupon == null) {
-					// 鍒稿凡浣跨敤
-					userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon, orderNo);
-				} else 	if (baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
+			 	if (CouponTypeEnum.welfareFreeCoupon.name().equals(couponType)) {
 					userOtherMsgNotificationService.welfareCouponUsing(userSystemCoupon,orderNo,payment);
-				} else if (baseCoupon.getType() != CouponTypeEnum.freeCoupon) {
-					userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon,orderNo);
+				} else if (CouponTypeEnum.freeCoupon.name().equals(couponType)) {
+					userOtherMsgNotificationService.freeSheetCouponUsing(userSystemCoupon, orderNo, payment);
 				} 
 			}
 		}
@@ -1259,7 +1308,7 @@
 	 * 閫�鍥炲埜 鍒濆鏁版嵁
 	 * @param userSystemCoupon
 	 */
-	public void sendBackCoupon(UserSystemCoupon userSystemCoupon) throws Exception{
+	public void sendBackCoupon(UserSystemCoupon userSystemCoupon, UserSystemCouponRecord record) throws Exception{
 
 		int expiryDay = 15;
 
@@ -1288,8 +1337,122 @@
 		userSystemCoupon.setUpdateTime(new Date());
 		
 		userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
+		
+		
+		if (CouponTypeEnum.welfareFreeCoupon.name().equals(record.getCouponType())) {
+			userOtherMsgNotificationService.welfareCouponDrawBack(userSystemCoupon, record.getOrderNo());
+		} else if (CouponTypeEnum.freeCoupon.name().equals(record.getCouponType())) {
+			userOtherMsgNotificationService.freeSheetCouponDrawBack(userSystemCoupon, record.getOrderNo());
+		} 
 	}
 	
 	
+	@Override
+	@Transactional
+	public void copyLotteryPrize(Long uid, int platform, String device) throws Exception {
+		
+		if (uid == null || device == null) {
+			return;
+		}
+		
+		// 鏈櫥闄嗕箣鍓嶆娊濂栬褰�
+		List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platform, device);
+		if (list == null || list.size() == 0) {
+			return;
+		}
+		
+		// 鑾峰彇棰濆淇℃伅
+		UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+		if (userInfoExtra != null && userInfoExtra.getLotteryNewbies() != null) {
+			return;
+		}
+		
+		// 鏄惁鏈夎繃璁㈠崟锛氳繑鍒┿�佸垎浜鍗�
+		boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
+		if (hasOrder) {
+			return;
+		}
+		
+		int coupon = 0;
+		
+		for (DeviceLotteryRecord reviceLotteryRecord: list) {
+			
+			// 鍒犻櫎璁板綍
+			deviceLotteryRecordService.deleteByPrimaryKey(reviceLotteryRecord.getId());
+			
+			Long systemCouponId = reviceLotteryRecord.getSystemCouponId();
+			if (systemCouponId == null) {
+				continue;
+			}
+			SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(systemCouponId);
+			if (systemCoupon == null) {
+				continue;
+			}
+			
+			int stateActivated = 1;
+			if (systemCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
+				// 绂忓埄鍒哥姸鎬�
+				long countSuccess = threeSaleSerivce.countSuccessFirstTeam(uid);
+				// 娌℃湁涓嬬骇闃熷憳 --寰呮縺娲�
+				if (countSuccess == 0) {
+					stateActivated = 0;
+				}
+			}
+			
+			// 缁撴潫鏃ユ湡
+			String endDay = DateUtil.plusDay(systemCoupon.getExpiryDay(), new Date());
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+			Date endTime = format.parse(endDay);
+			
+			UserSystemCoupon userCoupon = new UserSystemCoupon();
+			userCoupon.setUid(uid);
+			userCoupon.setSource(UserSystemCoupon.SOURCE_CHOUJIANG);
+			userCoupon.setSystemCoupon(systemCoupon);
+			userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
+			userCoupon.setStateActivated(stateActivated);
+			userCoupon.setStartTime(new Date());
+			userCoupon.setEndTime(endTime);
+			userCoupon.setCreateTime(new Date());
+			userCoupon.setUpdateTime(new Date());
+			// 鎻掑叆鏁版嵁搴�
+			insertSelective(userCoupon);
+			
+			// 鍒告暟閲�
+			coupon ++;
+			
+			// 娑堟伅鎺ㄩ��
+			try {
+				if (systemCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
+					userOtherMsgNotificationService.welfareCouponGet(userCoupon);
+				} else if (systemCoupon.getType() == CouponTypeEnum.freeCoupon) {
+					userOtherMsgNotificationService.freeSheetCouponGet(userCoupon);
+				} else if (systemCoupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
+					userOtherMsgNotificationService.rewardCouponGet(userCoupon,systemCoupon.getPercent().intValue());
+				}
+				
+			} catch(Exception e) {
+				try {
+					LogHelper.errorDetailInfo(e);
+				} catch (Exception e1) {
+					e1.printStackTrace();
+				}
+			}
+		}
+		
+		if(userInfoExtra == null) {
+			userInfoExtra = new UserInfoExtra();
+			userInfoExtra.setUserInfo(new UserInfo(uid));
+		}
+		
+		userInfoExtra.setLotteryNewbies(Constant.MAX_COUNT_LOTTERY_NEWBIES-list.size());
+		Integer couponNews = userInfoExtra.getCouponNews();
+		if (couponNews == null) {
+			userInfoExtra.setCouponNews(coupon);
+		} else {
+			userInfoExtra.setCouponNews(couponNews + coupon);
+		}
+		userInfoExtraService.saveUserInfoExtra(userInfoExtra);
 	
+	}
 }
+	

--
Gitblit v1.8.0