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/shop/BanLiShopOrderPayServiceImpl.java |  238 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 214 insertions(+), 24 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java
index 14fc3b4..16202d2 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java
@@ -7,18 +7,33 @@
 
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.entity.wx.WXAPPInfo;
+import org.yeshi.utils.NumberUtil;
 import org.yeshi.utils.exception.WXOrderException;
-import org.yeshi.utils.wx.WXPayUtil;
 
+import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.Producer;
+import com.aliyun.openservices.ons.api.SendResult;
+import com.google.gson.Gson;
+import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
+import com.yeshi.fanli.dto.mq.order.body.BanLiShopOrderMQMsg;
+import com.yeshi.fanli.dto.msg.MsgRedPackUseContentDTO;
+import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
+import com.yeshi.fanli.entity.common.AdminUser;
+import com.yeshi.fanli.entity.common.Config;
 import com.yeshi.fanli.entity.redpack.RedPackDetail;
 import com.yeshi.fanli.entity.shop.BanLiShopGoods;
 import com.yeshi.fanli.entity.shop.BanLiShopGoodsClass;
 import com.yeshi.fanli.entity.shop.BanLiShopGoodsSets;
 import com.yeshi.fanli.entity.shop.BanLiShopOrder;
+import com.yeshi.fanli.entity.shop.ChargeTypeEnum;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.exception.redpack.RedPackBalanceException;
 import com.yeshi.fanli.exception.redpack.RedPackDetailException;
 import com.yeshi.fanli.exception.shop.BanLiShopOrderException;
+import com.yeshi.fanli.exception.shop.FuLuChargeException;
+import com.yeshi.fanli.service.AdminUserService;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
 import com.yeshi.fanli.service.inter.redpack.RedPackDetailService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsClassService;
@@ -27,7 +42,14 @@
 import com.yeshi.fanli.service.inter.shop.BanLiShopOrderPayService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
 import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.ThreadUtil;
+import com.yeshi.fanli.util.charge.FuLuChargeApiUtil;
+import com.yeshi.fanli.util.email.MailSenderUtil;
 import com.yeshi.fanli.util.factory.RedPackDetailFactory;
+import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
+import com.yeshi.fanli.util.rocketmq.MQTopicName;
+import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil;
 
 @Service
 public class BanLiShopOrderPayServiceImpl implements BanLiShopOrderPayService {
@@ -49,7 +71,19 @@
 	@Resource
 	private RedPackDetailService redPackDetailService;
 
-	@Transactional
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+	
+	@Resource
+	private ConfigService configService;
+	
+	@Resource
+	private AdminUserService adminUserService;
+
+	@Resource(name = "producer")
+	private Producer producer;
+
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
 		BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -57,7 +91,7 @@
 			throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
 		}
 		if (order.getHongBaoPayment() == null)
-			throw new BanLiShopOrderException(2, "涓嶉渶瑕侀噰鐢ㄧ孩鍖呮敮浠�");
+			return;
 
 		if (order.getHongBaoPaymentState() != null && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
 			throw new BanLiShopOrderException(3, "閲嶅鏀粯");
@@ -88,14 +122,17 @@
 					|| order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_PAID)
 					&& (order.getMoneyPaymentState() == null
 							|| order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID))// 鍏朵粬寰呮敮浠橀」宸茬粡鏀粯
+			{
 				update.setState(BanLiShopOrder.STATE_PAID);
+				update.setStateDesc("鏀粯鎴愬姛");
+			}
 		banLiShopOrderService.udpateSelectiveByPrimaryKey(update);
 		if (update.getState() != null && update.getState() == BanLiShopOrder.STATE_PAID) {
 			paySuccess(order);
 		}
 	}
 
-	@Transactional
+	@Transactional(rollbackFor=Exception.class)
 	@Override
 	public void payOrderByMoney(Long orderId, BigDecimal money) throws BanLiShopOrderException {
 		BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -124,7 +161,10 @@
 					|| order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_PAID)
 					&& (order.getHongBaoPaymentState() == null
 							|| order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID))// 鍏朵粬寰呮敮浠橀」宸茬粡鏀粯
+			{
 				update.setState(BanLiShopOrder.STATE_PAID);
+				update.setStateDesc("鏀粯鎴愬姛");
+			}
 		banLiShopOrderService.udpateSelectiveByPrimaryKey(update);
 		if (update.getState() != null && update.getState() == BanLiShopOrder.STATE_PAID) {
 			paySuccess(order);
@@ -135,21 +175,27 @@
 	 * 鏀粯鎴愬姛
 	 */
 	private void paySuccess(BanLiShopOrder order) {
-		// 灏嗙孩鍖呮槑缁嗗鏄�
-		RedPackDetail detail = null;
-		try {
-			detail = RedPackDetailFactory.createUseByShopOrder(order.getId(), order.getUid(), "", "",
-					order.getHongBaoPayment());
-		} catch (RedPackDetailException e) {
-			e.printStackTrace();
-		}
-
-		if (detail != null) {
-			redPackDetailService.changeDisplayByIdentifyCode(detail.getIdentifyCode(), true);
-		}
+		ThreadUtil.run(new Runnable() {
+			
+			@Override
+			public void run() {
+				long[] targetUids = new long[] { 3L, 4L };
+				Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey());
+				String[] sts = config.getValue().split(",");
+				String account = sts[0];
+				String pwd = sts[1];
+				for (long adminId : targetUids) {
+					AdminUser adminUser = adminUserService.selectByPrimaryKey(adminId);
+					String msg = "鏈夋柊鐨勭孩鍖呭晢鍩庤鍗�";
+					boolean isS = MailSenderUtil.sendEmail(adminUser.getEmail(), account, pwd, "鏈夋柊鐨勭孩鍖呭晢鍩庤鍗�", msg);
+				}
+			}
+		});
+		
+		
 	}
 
-	@Transactional
+	@Transactional(rollbackFor=Exception.class)
 	@Override
 	public void refund(Long orderId) throws BanLiShopOrderException {
 		// 璁㈠崟閫�娆�
@@ -157,7 +203,8 @@
 		BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
 		if (order == null)
 			throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
-		if (order.getState() != BanLiShopOrder.STATE_REJECT)
+		if (order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_FAIL
+				|| order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS)
 			throw new BanLiShopOrderException(2, "璁㈠崟鏈鎷掔粷/璁㈠崟宸查��娆�");
 
 		BanLiShopOrder update = new BanLiShopOrder();
@@ -184,22 +231,165 @@
 				throw new BanLiShopOrderException(5, "绾㈠寘閫�娆惧け璐�");
 			}
 			update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+			order.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
 		}
 
-		// TODO 寰俊鏀粯閫�娆�
 		if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
 			try {
-				boolean success = WXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment(), order.getMoneyPayment(),
-						null, new WXAPPInfo(), null, null);
+				boolean success = BanLiShopWXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment());
 				if (success) {
-					update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+					update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUNDING);
+					order.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUNDING);
+					// 鍙戦�侀��娆炬秷鎭�
+					BanLiShopOrderMQMsg msg = new BanLiShopOrderMQMsg(order.getId(), order.getUid());
+					Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER,
+							OrderTopicTagEnum.banLiShopOrderRefund, msg);
+					message.setStartDeliverTime(System.currentTimeMillis() + 1000 * 60 * 5L);// 寤舵椂24灏忔椂閫氱煡妫�娴嬪井淇¢��娆剧姸鎬�
+					SendResult result = producer.send(message);
+					if (result == null) {
+						throw new BanLiShopOrderException(8, "娑堟伅鍙戦�佸け璐�");
+					}
 				} else
 					throw new BanLiShopOrderException(6, "寰俊鏀粯閫�娆惧け璐�");
-
 			} catch (WXOrderException e) {
 				throw new BanLiShopOrderException(6, "寰俊鏀粯閫�娆惧け璐�");
 			}
 		}
+		// 妫�鏌� 鏄惁閫�娆炬垚鍔�
+		if (order.getMoneyPaymentState() != null
+				&& order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_REFUNDING) {
+			try {
+				boolean isS = BanLiShopWXPayUtil.isRefundSuccess(order.getOrderNo());
+				if (isS) {
+					update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+					order.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+				}
+			} catch (WXOrderException e) {
+				throw new BanLiShopOrderException(7, "寰俊鏀粯閫�娆炬煡璇㈠け璐�");
+			}
+		}
+
+		if (update.getHongBaoPaymentState() != null || update.getMoneyPaymentState() != null) {
+			// 鑾峰彇鏁翠釜璁㈠崟鐨勯��娆剧姸鎬�
+			int state = getRefundState(order);
+			update.setState(state);
+			update.setUpdateTime(new Date());
+			banLiShopOrderService.udpateSelectiveByPrimaryKey(update);
+		}
+	}
+
+	/**
+	 * 鑾峰彇鏁翠釜閫�娆剧姸鎬�
+	 * 
+	 * @param order
+	 * @return
+	 */
+	private int getRefundState(BanLiShopOrder order) {
+		int refundCount = 0;
+		int refundSuccessCount = 0;
+
+		if (order.getHongBaoPayment() != null) {
+			refundCount++;
+			if (order.getHongBaoPaymentState() != null
+					&& order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_REFUND)
+				refundSuccessCount++;
+		}
+
+		if (order.getBalancePayment() != null) {
+			refundCount++;
+			if (order.getBalancePaymentState() != null
+					&& order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_REFUND)
+				refundSuccessCount++;
+		}
+
+		if (order.getMoneyPayment() != null) {
+			refundCount++;
+			if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_REFUND)
+				refundSuccessCount++;
+		}
+
+		if (refundCount == refundSuccessCount)
+			return BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS;// 閫�娆炬垚鍔�
+		else {
+			if (refundSuccessCount == 0)
+				return BanLiShopOrder.STATE_REJECT;// 閫�娆句腑
+			else
+				return BanLiShopOrder.STATE_REJECT_REFUND_PART_SUCCESS;// 閮ㄥ垎閫�娆炬垚鍔�
+		}
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	@Override
+	public void charge(Long orderId) throws BanLiShopOrderException {
+		BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKey(orderId);
+		if (order == null)
+			throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
+		if (order.getState() != BanLiShopOrder.STATE_PAID) {
+			throw new BanLiShopOrderException(100, "璁㈠崟涓嶆槸澶勪簬浠樻鐘舵��");
+		}
+		if (order.getChargeAccountType() == ChargeTypeEnum.phone) {
+			if (!StringUtil.isMobile(order.getChargeAccount())) {
+				throw new BanLiShopOrderException(101, "鐢佃瘽鍙风爜鏍煎紡涓嶆纭�");
+			}
+		} else if (order.getChargeAccountType() == ChargeTypeEnum.qq) {
+			if (!NumberUtil.isNumeric(order.getChargeAccount())) {
+				throw new BanLiShopOrderException(101, "QQ鍙锋牸寮忛敊璇�");
+			}
+		} else {
+			throw new BanLiShopOrderException(102, "闈炲厖鍊煎晢鍝�");
+		}
+		// 鑾峰彇绂忕鐨勫椁�
+		BanLiShopGoodsSets set = banLiShopGoodsSetService.selectByPrimaryKey(order.getGoodsSet().getId());
+		if (set == null) {
+			throw new BanLiShopOrderException(104, "鍟嗗搧濂楅宸蹭笅绾�");
+		}
+
+		if (StringUtil.isNullOrEmpty(set.getChargeFuLuNum())) {
+			throw new BanLiShopOrderException(105, "绂忕鍏呭�糏D涓虹┖");
+		}
+
+		// 鏀瑰彉鐘舵�佷负鎴愬姛
+		BanLiShopOrder update = new BanLiShopOrder(order.getId());
+		update.setState(BanLiShopOrder.STATE_SUCCESS);
+		update.setStateDesc("鍏呭�兼垚鍔�");
+		update.setUpdateTime(new Date());
+		update.setSuccessTime(new Date());
+		banLiShopOrderService.udpateSelectiveByPrimaryKey(update);
+
+		if (order.getHongBaoPayment() != null && order.getHongBaoPayment().compareTo(new BigDecimal(0)) > 0) {
+			// 灏嗙孩鍖呮槑缁嗗鏄�
+			RedPackDetail detail = null;
+			try {
+				detail = RedPackDetailFactory.createUseByShopOrder(order.getId(), order.getUid(), "", "",
+						order.getHongBaoPayment());
+			} catch (RedPackDetailException e) {
+				e.printStackTrace();
+			}
+
+			if (detail != null) {
+				redPackDetailService.changeDisplayByIdentifyCode(detail.getIdentifyCode(), true);
+			}
+		}
+
+		// 娑堟伅鍙戦��
+		MsgRedPackUseContentDTO dto = new MsgRedPackUseContentDTO();
+		dto.setGoodsSetName(order.getOrderGoods().getSetName());
+		dto.setHongBao(order.getHongBaoPayment());
+		dto.setMoney(order.getMoneyPayment());
+		dto.setTime(new Date());
+		userMoneyMsgNotificationService.redPackMsg(order.getUid(), MsgTypeMoneyTypeEnum.redPackUseSuccess,
+				new Gson().toJson(dto), null);
+
+		try {
+			if (Constant.IS_TEST) {
+				FuLuChargeApiUtil.shaXiangCharge(set.getChargeFuLuNum(), "banlishop" + order.getOrderNo(),
+						order.getChargeAccount());
+			} else
+				FuLuChargeApiUtil.charge(set.getChargeFuLuNum(), "banlishop" + order.getOrderNo(),
+						order.getChargeAccount());
+		} catch (FuLuChargeException e) {
+			throw new BanLiShopOrderException(e.getCode(), e.getMsg());
+		}
 	}
 
 }

--
Gitblit v1.8.0