From 788deca1b4a24f8a24e49c24f7d89975a1d74bbe Mon Sep 17 00:00:00 2001
From: admin <2780501319@qq.com>
Date: 星期日, 03 十一月 2019 23:31:25 +0800
Subject: [PATCH] 商城订单退款处理

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java |  207 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 115 insertions(+), 92 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 546be60..45baec2 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
@@ -27,9 +27,10 @@
 import com.aliyun.openservices.ons.api.transaction.TransactionStatus;
 import com.google.gson.Gson;
 import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
+import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
+import com.yeshi.fanli.dto.mq.user.body.UserSystemCouponUseMQMsg;
 import com.yeshi.fanli.dto.msg.MsgOtherCouponActivateDTO;
 import com.yeshi.fanli.dto.msg.MsgOtherGiveContentDTO;
-import com.yeshi.fanli.dto.user.coupon.UserSystemCouponUseMQMsgDTO;
 import com.yeshi.fanli.entity.accept.AcceptData;
 import com.yeshi.fanli.entity.bus.msg.MsgOtherDetail.MsgTypeOtherTypeEnum;
 import com.yeshi.fanli.entity.bus.user.HongBaoV2;
@@ -39,6 +40,7 @@
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
 import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
+import com.yeshi.fanli.entity.bus.user.UserSystemCouponActivate;
 import com.yeshi.fanli.entity.bus.user.UserSystemCouponGiveRecord;
 import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord;
 import com.yeshi.fanli.entity.common.JumpDetailV2;
@@ -47,8 +49,6 @@
 import com.yeshi.fanli.entity.system.SystemCoupon;
 import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
-import com.yeshi.fanli.exception.money.UserMoneyDetailException;
-import com.yeshi.fanli.exception.order.HongBaoException;
 import com.yeshi.fanli.exception.user.UserInfoExtraException;
 import com.yeshi.fanli.exception.user.UserSystemCouponException;
 import com.yeshi.fanli.log.LogHelper;
@@ -69,6 +69,7 @@
 import com.yeshi.fanli.service.inter.user.TokenRecordService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponActivateService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponGiveRecordService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
@@ -79,9 +80,9 @@
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.TokenUtil;
 import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
 import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
 import com.yeshi.fanli.util.factory.msg.MsgOtherSystemGiveDTOFactory;
-import com.yeshi.fanli.util.rocketmq.MQTagConstant;
 import com.yeshi.fanli.util.rocketmq.MQTopicName;
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
@@ -170,6 +171,9 @@
 
 	@Resource(name = "orderTransactionProducer")
 	private TransactionProducer orderTransactionProducer;
+
+	@Resource
+	private UserSystemCouponActivateService userSystemCouponActivateService;
 
 	@Override
 	public int insertSelective(UserSystemCoupon record) {
@@ -880,10 +884,10 @@
 			// 鎻愭垚閲戦
 			BigDecimal money = MoneyBigDecimalUtil.mul(hongBao, percent);
 
-			UserSystemCouponUseMQMsgDTO mqMsg = new UserSystemCouponUseMQMsgDTO(userSystemCoupon.getId(),
-					order.getOrderId(), sourceType);
+			UserSystemCouponUseMQMsg mqMsg = new UserSystemCouponUseMQMsg(userSystemCoupon.getId(), order.getOrderId(),
+					sourceType, systemCoupon.getType().name());
 			// 浜嬪姟娑堟伅
-			Message msg = new Message(MQTopicName.TOPIC_SYSTEM_COUPON_USE.name(), systemCoupon.getType().name(),
+			Message msg = new Message(MQTopicName.TOPIC_USER.name(), UserTopicTagEnum.useSystemCoupon.name(),
 					new Gson().toJson(mqMsg).getBytes());
 			try {
 				SendResult result = orderTransactionProducer.send(msg, new LocalTransactionExecuter() {
@@ -1721,7 +1725,7 @@
 
 	@Transactional
 	@Override
-	public List<UserSystemCouponVO> getCouponList(long start, int count, Long uid)
+	public List<UserSystemCouponVO> getCouponList(AcceptData acceptData, long start, int count, Long uid)
 			throws UserSystemCouponException, Exception {
 
 		// 杩囨湡鍒�
@@ -1816,15 +1820,13 @@
 						listTip.add("婊¤冻鏉′欢鍚庯紝绯荤粺灏嗚嚜鍔ㄦ縺娲伙紝骞跺湪娑堟伅-鍏跺畠娑堟伅涓彁閱掋��");
 						userCouponVO.setTips(listTip);
 						userCouponVO.setPopup(true);
-
-						// 楠岃瘉鏄惁宸茬疮璁�3鍗�
-						executor.execute(new Runnable() {
-							@Override
-							public void run() {
-								freeCouponActivate(userCouponVO.getId(), uid, userCouponVO.getCreateTime());
-							}
-						});
-
+						// 缁熻寰呮縺娲绘暟閲�
+						if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
+							int activateCount = userSystemCouponActivateService.getActivateCount(userCouponVO.getId());
+							String activateNum = configService.get("free_coupon_activate_num");
+							userCouponVO.setCouponEffect(
+									"(" + activateCount + "/" + Integer.parseInt(activateNum) + ")寰呮縺娲�");
+						}
 					} else if (CouponTypeEnum.welfareFreeCoupon == type) {
 						jumpBtn = new HashMap<String, Object>();
 						if (inviteCode != null && inviteCode.trim().length() > 0) {
@@ -2097,81 +2099,6 @@
 		userCouponVO.setRemainDays(remainDays);
 
 		return userCouponVO;
-	}
-
-	/**
-	 * 鍏嶅崟鍒告縺娲�
-	 * 
-	 * @param uid
-	 */
-	public void freeCouponActivate(Long id, Long uid, Date date) {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		long count = commonOrderCountService.countValidOrderByDate(uid, sdf.format(date));
-
-		String activateNum = configService.get("free_coupon_activate_num");
-		int num = Integer.parseInt(activateNum);
-
-		if (count >= num) {
-			UserSystemCoupon coupon = userSystemCouponMapper.selectByPrimaryKey(id);
-			if (coupon == null || coupon.getState() != UserSystemCoupon.STATE_CAN_USE
-					|| coupon.getStateActivated() != 0)
-				return;
-
-			Date nowDate = new Date();
-			Date endTime2 = coupon.getEndTime();
-			if (endTime2 != null && endTime2.getTime() <= nowDate.getTime())
-				return;
-
-			SystemCoupon systemCoupon = coupon.getSystemCoupon();
-			if (systemCoupon == null)
-				return;
-
-			systemCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
-			if (systemCoupon == null || systemCoupon.getType() != CouponTypeEnum.freeCoupon)
-				return;
-
-			try {
-				Integer expiryDay = systemCoupon.getExpiryDay();
-				String endDay = DateUtil.plusDay(expiryDay - 1, nowDate);
-				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-				if (endDay != null && endDay.trim().length() > 0) {
-					endDay += " 23:59:59";
-				}
-				Date endTime = format.parse(endDay);
-
-				UserSystemCoupon userCoupon = new UserSystemCoupon();
-				userCoupon.setId(coupon.getId());
-				userCoupon.setStateActivated(1);
-				userCoupon.setEndTime(endTime);
-				userCoupon.setStartTime(nowDate);
-				userCoupon.setUpdateTime(new Date());
-				userSystemCouponMapper.updateByPrimaryKeySelective(userCoupon);
-
-				// 璧犻�佽褰�
-				UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService.getByReceiveId(id);
-				if (giveRecord == null)
-					return;
-
-				Long giveUid = giveRecord.getGiveUid();
-				UserInfo userInfo = userInfoService.selectByPKey(giveUid);
-				if (userInfo == null)
-					return;
-
-				String beiZhu = "璇峰埌鎴戠殑-绂忓埄涓績涓煡鐪�";
-				SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
-				MsgOtherCouponActivateDTO msgOther = new MsgOtherCouponActivateDTO();
-				msgOther.setTitle("鍏嶅崟鍒告縺娲�");
-				msgOther.setType("鍏嶅崟鍒哥郴缁熷凡鑷姩婵�娲�");
-				msgOther.setExplain("婊¤冻" + systemCoupon.getActivateDay() + "澶╁唴浜х敓" + num + "绗斿凡鍒拌处杩斿埄璁㈠崟");
-				msgOther.setGiveUser("鏄电О锛�" + userInfo.getNickName() + " ID锛�" + giveUid);
-				msgOther.setReceiveTime(sd.format(giveRecord.getReceiveTime()));
-				msgOther.setValidityTime(expiryDay + "澶�");
-				userOtherMsgNotificationService.giveCouponActivateMsg(uid, beiZhu, msgOther);
-			} catch (Exception e) {
-				e.printStackTrace();
-				LogHelper.errorDetailInfo(e);
-			}
-		}
 	}
 
 	@Transactional
@@ -2516,4 +2443,100 @@
 		return userSystemCouponMapper.getFreeCouponByType(uid, type);
 	}
 
+	@RequestSerializableByKeyService(key = "#uid")
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void triggerFreeCouponActivate(Long uid) {
+		UserSystemCoupon coupon = userSystemCouponMapper.getNeedActivateCouponByType(uid,
+				CouponTypeEnum.freeCoupon.name());
+		if (coupon == null)
+			return;
+
+		Long id = coupon.getId();
+		UserSystemCouponActivate couponActivate = userSystemCouponActivateService.selectForUpdate(id);
+
+		// 婵�娲绘暟閲�
+		boolean result = false;
+		int limitNum = Integer.parseInt(configService.get("free_coupon_activate_num"));
+
+		Integer state = couponActivate.getState();
+		int count = couponActivate.getCount();
+		count++;
+		if (count >= limitNum) {
+			result = true;
+			state = UserSystemCouponActivate.STATE_END;
+		}
+
+		UserSystemCouponActivate updateActivate = new UserSystemCouponActivate();
+		updateActivate.setId(id);
+		updateActivate.setState(state);
+		updateActivate.setCount(count);
+		updateActivate.setUpdateTime(new Date());
+		userSystemCouponActivateService.updateByPrimaryKeySelective(updateActivate);
+
+		// 婵�娲诲鍔卞埜
+		if (result) {
+			activateFreeCoupon(coupon, limitNum);
+		}
+	}
+
+	/**
+	 * 婵�娲诲埜
+	 * 
+	 * @param coupon
+	 * @param activateNum
+	 */
+	@Transactional
+	private void activateFreeCoupon(UserSystemCoupon coupon, int limitNum) {
+		try {
+			Date nowDate = new Date();
+			SystemCoupon systemCoupon = coupon.getSystemCoupon();
+
+			Integer expiryDay = systemCoupon.getExpiryDay();
+			String endDay = DateUtil.plusDay(expiryDay - 1, nowDate);
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			if (endDay != null && endDay.trim().length() > 0) {
+				endDay += " 23:59:59";
+			}
+			Date endTime = format.parse(endDay);
+
+			UserSystemCoupon userCoupon = new UserSystemCoupon();
+			userCoupon.setId(coupon.getId());
+			userCoupon.setStateActivated(1);
+			userCoupon.setEndTime(endTime);
+			userCoupon.setStartTime(nowDate);
+			userCoupon.setUpdateTime(new Date());
+			userSystemCouponMapper.updateByPrimaryKeySelective(userCoupon);
+
+			// 娑堟伅
+			executor.execute(new Runnable() {
+				@Override
+				public void run() {
+					UserSystemCouponGiveRecord giveRecord = userSystemCouponGiveRecordService
+							.getByReceiveId(coupon.getId());
+					if (giveRecord == null)
+						return;
+
+					Long giveUid = giveRecord.getGiveUid();
+					UserInfo userInfo = userInfoService.selectByPKey(giveUid);
+					if (userInfo == null)
+						return;
+
+					String beiZhu = "璇峰埌鎴戠殑-绂忓埄涓績涓煡鐪�";
+					SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+					MsgOtherCouponActivateDTO msgOther = new MsgOtherCouponActivateDTO();
+					msgOther.setTitle("鍏嶅崟鍒告縺娲�");
+					msgOther.setType("鍏嶅崟鍒哥郴缁熷凡鑷姩婵�娲�");
+					msgOther.setExplain("婊¤冻" + systemCoupon.getActivateDay() + "澶╁唴浜х敓" + limitNum + "绗斿凡鍒拌处杩斿埄璁㈠崟");
+					msgOther.setGiveUser("鏄电О锛�" + userInfo.getNickName() + " ID锛�" + giveUid);
+					msgOther.setReceiveTime(sd.format(giveRecord.getReceiveTime()));
+					msgOther.setValidityTime(expiryDay + "澶�");
+					userOtherMsgNotificationService.giveCouponActivateMsg(coupon.getUid(), beiZhu, msgOther);
+				}
+			});
+		} catch (Exception e) {
+			e.printStackTrace();
+			LogHelper.errorDetailInfo(e);
+		}
+	}
 }

--
Gitblit v1.8.0