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/BanLiShopOrderServiceImpl.java |  222 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 205 insertions(+), 17 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java
index 8e801e0..162e62b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderServiceImpl.java
@@ -6,36 +6,52 @@
 
 import javax.annotation.Resource;
 
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.DefaultTransactionDefinition;
+import org.yeshi.utils.exception.WXOrderException;
 
 import com.aliyun.openservices.ons.api.Message;
 import com.aliyun.openservices.ons.api.Producer;
 import com.aliyun.openservices.ons.api.SendResult;
+import com.aliyun.openservices.ons.api.transaction.LocalTransactionExecuter;
+import com.aliyun.openservices.ons.api.transaction.TransactionProducer;
+import com.aliyun.openservices.ons.api.transaction.TransactionStatus;
 import com.google.gson.Gson;
+import com.yeshi.fanli.dao.mybatis.shop.BanLiShopOrderGoodsMapper;
 import com.yeshi.fanli.dao.mybatis.shop.BanLiShopOrderMapper;
 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.mq.MQUnSendInfo;
 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.BanLiShopGoodsSetsPay;
 import com.yeshi.fanli.entity.shop.BanLiShopOrder;
+import com.yeshi.fanli.entity.shop.BanLiShopOrderGoods;
 import com.yeshi.fanli.exception.mq.MQUnSendInfoException;
 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.service.inter.money.msg.UserMoneyMsgNotificationService;
 import com.yeshi.fanli.service.inter.mq.MQUnSendInfoService;
 import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
+import com.yeshi.fanli.service.inter.redpack.RedPackForbidService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsClassService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsService;
+import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsSetPayService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsSetService;
 import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
 import com.yeshi.fanli.util.Constant;
 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.shop.BanLiShopOrderUtil;
+import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil;
 
 @Service
 public class BanLiShopOrderServiceImpl implements BanLiShopOrderService {
@@ -45,6 +61,9 @@
 
 	@Resource
 	private BanLiShopGoodsSetService banLiShopGoodsSetService;
+
+	@Resource
+	private BanLiShopGoodsSetPayService banLiShopGoodsSetPayService;
 
 	@Resource
 	private BanLiShopGoodsService banLiShopGoodsService;
@@ -61,7 +80,23 @@
 	@Resource
 	private MQUnSendInfoService mqUnSendInfoService;
 
-	@Transactional
+	@Resource
+	private BanLiShopOrderGoodsMapper banLiShopOrderGoodsMapper;
+
+	@Resource(name = "orderTransactionProducer")
+	private TransactionProducer orderTransactionProducer;
+
+	@Resource(name = "transactionManager")
+	private DataSourceTransactionManager transactionManager;
+
+	@Resource
+	private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+	
+	@Resource
+	private RedPackForbidService redPackForbidService;
+	
+
+	@Transactional(rollbackFor=Exception.class)
 	@Override
 	public void addOrder(BanLiShopOrder order) throws BanLiShopOrderException {
 		// 鏌ヨ蹇呰鐨勫弬鏁版槸鍚︽坊鍔�
@@ -72,7 +107,7 @@
 		if (order.getUid() == null)
 			throw new BanLiShopOrderException(1, "缂哄皯鐢ㄦ埛ID");
 
-		if (order.getHongBaoPayment() == null || order.getBalancePayment() == null || order.getMoneyPayment() == null) {
+		if (order.getHongBaoPayment() == null && order.getBalancePayment() == null && order.getMoneyPayment() == null) {
 			throw new BanLiShopOrderException(1, "鏈�夋嫨鏀粯鏂瑰紡");
 		}
 
@@ -103,6 +138,9 @@
 		if (goods.getCreateTime() == null)
 			goods.setCreateTime(new Date());
 
+		// 鎻掑叆鍟嗗搧
+		BanLiShopOrderGoods orderGoods = getOrderGoods(goods, set);
+		order.setOrderGoods(orderGoods);
 		banLiShopOrderMapper.insertSelective(order);
 
 		// 娣诲姞璁㈠崟鍙�
@@ -111,16 +149,35 @@
 		BanLiShopOrder update = new BanLiShopOrder();
 		update.setId(order.getId());
 		update.setOrderNo(orderNo);
+		order.setOrderNo(orderNo);
 		banLiShopOrderMapper.updateByPrimaryKeySelective(update);
+
+		// 澧炲姞閿�閲�
+		banLiShopGoodsSetService.addSalesCount(order.getGoodsSet().getId(), 1);
+		banLiShopGoodsService.addSalesCount(order.getGoods().getId(), 1);
 
 		// 璁㈠崟娣诲姞鎴愬姛 ,寤舵椂閫氱煡鍚庣画
 		sendPlaceOrderMsg(order.getId(), order.getUid());
 	}
 
+	private BanLiShopOrderGoods getOrderGoods(BanLiShopGoods goods, BanLiShopGoodsSets set) {
+		BanLiShopOrderGoods orderGoods = new BanLiShopOrderGoods();
+		orderGoods.setCreateTime(new Date());
+		orderGoods.setGoodsId(goods.getId());
+		orderGoods.setGoodsName(goods.getTitle());
+		orderGoods.setGoodsSetId(set.getId());
+		orderGoods.setSetName(set.getName());
+		orderGoods.setState(set.getState());
+		orderGoods.setZkPrice(set.getZkPrice());
+		orderGoods.setPicture(goods.getSquarePicture());
+		banLiShopOrderGoodsMapper.insertSelective(orderGoods);
+		return orderGoods;
+	}
+
 	private void sendPlaceOrderMsg(Long orderId, Long uid) {
 
-		Message msg = new Message(MQTopicName.TOPIC_ORDER.name(), OrderTopicTagEnum.banLiShopOrderDelay.name(),
-				new Gson().toJson(new BanLiShopOrderMQMsg(orderId, uid)).getBytes());
+		Message msg = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.banLiShopOrderDelay,
+				new BanLiShopOrderMQMsg(orderId, uid));
 		msg.setKey(orderId + "");
 		long delayTime = System.currentTimeMillis() + (Constant.IS_TEST ? 1000 * 30L : 1000 * 60 * 10);// 10鍒嗛挓鍚庨�氱煡
 		msg.setStartDeliverTime(delayTime);
@@ -144,25 +201,30 @@
 
 	@Override
 	public List<BanLiShopOrder> listByUid(Long uid, int page, int pageSize) {
-		return null;
+
+		return banLiShopOrderMapper.listByUidAndState(null, uid, (page - 1) * pageSize, pageSize);
 	}
 
 	@Override
 	public long countByUid(Long uid) {
-		return 0;
+		return banLiShopOrderMapper.countByUidAndState(null, uid);
 	}
 
 	@Override
 	public BanLiShopOrder selectByPrimaryKey(Long id) {
-		return null;
+		return banLiShopOrderMapper.selectByPrimaryKey(id);
 	}
 
 	@Override
 	public void udpateSelectiveByPrimaryKey(BanLiShopOrder order) {
-
+		if (order == null || order.getId() == null)
+			return;
+		if (order.getUpdateTime() == null)
+			order.setUpdateTime(new Date());
+		banLiShopOrderMapper.updateByPrimaryKeySelective(order);
 	}
 
-	@Transactional
+	@Transactional(rollbackFor=Exception.class)
 	@Override
 	public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
 		BanLiShopOrder order = banLiShopOrderMapper.selectByPrimaryKeyForUpdate(orderId);
@@ -253,6 +315,7 @@
 
 		// 鏀粯鎴愬姛
 		BanLiShopOrder update = new BanLiShopOrder();
+		update.setId(orderId);
 		update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_PAID);
 		// 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
 		update.setUpdateTime(new Date());
@@ -275,6 +338,28 @@
 
 		// 鍒ゆ柇鏄惁澶勪簬鏈粯娆�
 		if (order.getState() == BanLiShopOrder.STATE_NO_PAY) {
+			/**
+			 * 鏌ヨ鏄惁宸茬粡寰俊鏀粯
+			 */
+			if (order.getMoneyPayment() != null) {
+				try {
+					boolean isS = BanLiShopWXPayUtil.isPaySuccess(order.getOrderNo());
+					if (isS)// 鏀粯鎴愬姛锛岄噸鏂板彂閫佹敮浠樻垚鍔熸秷鎭�
+					{
+						BanLiShopOrderMQMsg msg = new BanLiShopOrderMQMsg(order.getId(), order.getUid());
+						Message message =MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER,
+								OrderTopicTagEnum.banLiShopOrderPaid,msg);
+						producer.send(message);
+						return;
+					}
+
+				} catch (WXOrderException e) {
+					e.printStackTrace();
+				} catch (Exception e) {
+
+				}
+			}
+
 			BanLiShopOrder update = new BanLiShopOrder();
 			update.setId(id);
 			update.setStateDesc(desc);
@@ -284,23 +369,126 @@
 		}
 	}
 
-	@Transactional
 	@Override
 	public void rejectOrder(Long id, String msg) throws BanLiShopOrderException {
 		// 鍒ゆ柇璁㈠崟鏄惁澶勪簬浠樻鐘舵��
-		BanLiShopOrder order = banLiShopOrderMapper.selectByPrimaryKeyForUpdate(id);
+		BanLiShopOrder order = banLiShopOrderMapper.selectByPrimaryKey(id);
 		if (order == null)
 			throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
 
 		if (order.getState() != BanLiShopOrder.STATE_PAID)
 			throw new BanLiShopOrderException(1, "璁㈠崟鏈浜庡緟瀹℃牳鐘舵��");
 
-		// TODO 璁㈠崟閫�娆�
-		BanLiShopOrder update = new BanLiShopOrder();
-		update.setState(BanLiShopOrder.STATE_REJECT);
-		update.setStateDesc(msg);
-		update.setUpdateTime(new Date());
-		banLiShopOrderMapper.updateByPrimaryKeySelective(update);
+		Message message =MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER, OrderTopicTagEnum.banLiShopOrderRefund,
+			new BanLiShopOrderMQMsg(order.getId(), order.getUid()));
+		try {
+			orderTransactionProducer.send(message, new LocalTransactionExecuter() {
+				@Override
+				public TransactionStatus execute(Message arg0, Object arg1) {
+					rejectOrderLocal(id, msg);
+					return TransactionStatus.CommitTransaction;
+				}
+			}, null);
+		} catch (Exception e) {// 娑堟伅鍙戦�佸け璐�
+			throw new BanLiShopOrderException(2, "MQ鍙戦�佸け璐�");
+		}
+	}
+
+	private void rejectOrderLocal(Long id, String msg) {
+		// 鎵嬪姩寮�鍚簨鍔�
+		org.springframework.transaction.TransactionStatus transactionStatus = transactionManager
+				.getTransaction(new DefaultTransactionDefinition());
+		try {
+			BanLiShopOrder order = banLiShopOrderMapper.selectByPrimaryKeyForUpdate(id);
+			BanLiShopOrder update = new BanLiShopOrder();
+			update.setId(order.getId());
+			update.setState(BanLiShopOrder.STATE_REJECT);
+			update.setStateDesc(msg);
+			update.setUpdateTime(new Date());
+			update.setRejectTime(new Date());
+			banLiShopOrderMapper.updateByPrimaryKeySelective(update);
+			// 娑堟伅鍙戦��
+			MsgRedPackUseContentDTO dto = new MsgRedPackUseContentDTO();
+			dto.setGoodsSetName(order.getOrderGoods().getSetName());
+			dto.setHongBao(order.getHongBaoPayment());
+			dto.setMoney(order.getMoneyPayment());
+			dto.setReason(msg);
+			dto.setTime(new Date());
+			userMoneyMsgNotificationService.redPackMsg(order.getUid(), MsgTypeMoneyTypeEnum.redPackUseFail,
+					new Gson().toJson(dto), null);
+			transactionManager.commit(transactionStatus);
+		} catch (Exception e) {
+			transactionManager.rollback(transactionStatus);
+		}
+	}
+
+	@Override
+	public BanLiShopOrder createOrder(Long goodsSetPayId, String chargeAccount, Long uid)
+			throws BanLiShopOrderException {
+		BanLiShopGoodsSetsPay pay = banLiShopGoodsSetPayService.selectByPrimaryKey(goodsSetPayId);
+		if (pay == null || pay.getGoodsSet() == null) {
+			throw new BanLiShopOrderException(21, "鏀粯鏂瑰紡宸蹭笅绾�");
+		}
+
+		BanLiShopGoodsSets set = banLiShopGoodsSetService.selectByPrimaryKey(pay.getGoodsSet().getId());
+		if (set == null || set.getState() == BanLiShopGoodsSets.STATE_OFFLINE) {
+			throw new BanLiShopOrderException(21, "鍟嗗搧宸蹭笅绾�");
+		}
+
+		BanLiShopGoods goods = banLiShopGoodsService.selectByPrimaryKey(set.getGoods().getId());
+		if (goods == null || goods.getState() == BanLiShopGoods.STATE_OFFLINE) {
+			throw new BanLiShopOrderException(22, "鍟嗗搧宸蹭笅绾�");
+		}
+
+		if(redPackForbidService.verifyForbid(uid))
+			throw new BanLiShopOrderException(25, "绾㈠寘鍔熻兘宸茶灏佺");
+		
+		if (pay.getHongBaoPrice() != null && pay.getHongBaoPrice().compareTo(new BigDecimal(0)) > 0) {
+			BigDecimal money = redPackBalanceService.getBalance(uid);
+			if (money.compareTo(pay.getHongBaoPrice()) < 0) {
+				throw new BanLiShopOrderException(24, "绾㈠寘浣欓涓嶈冻");
+			}
+		}
+
+		if (set.getStock() <= 0)
+			throw new BanLiShopOrderException(23, "鍟嗗搧搴撳瓨涓嶈冻");
+
+		BanLiShopOrder order = new BanLiShopOrder();
+		order.setChargeAccount(chargeAccount);
+		order.setChargeAccountType(goods.getChargeType());
+		order.setCreateTime(new Date());
+		order.setGoods(goods);
+		order.setGoodsSet(set);
+		if (pay.getHongBaoPrice() != null && pay.getHongBaoPrice().compareTo(new BigDecimal(0)) > 0) {
+			order.setHongBaoPayment(pay.getHongBaoPrice());
+			order.setHongBaoPaymentState(BanLiShopOrder.STATE_NO_PAY);
+		}
+
+		if (pay.getMoneyPrice() != null && pay.getMoneyPrice().compareTo(new BigDecimal(0)) > 0) {
+			order.setMoneyPayment(pay.getMoneyPrice());
+			order.setMoneyPaymentState(BanLiShopOrder.STATE_NO_PAY);
+		}
+
+		order.setState(BanLiShopOrder.STATE_NO_PAY);
+		order.setStateDesc("鏈粯娆�");
+		order.setUid(uid);
+
+		return order;
+	}
+
+	@Override
+	public BanLiShopOrder selectByOrderNo(String orderNo) {
+		return banLiShopOrderMapper.selectByOrderNo(orderNo);
+	}
+
+	@Override
+	public List<BanLiShopOrder> listByUidAndState(Long uid, List<Integer> stateList, int page, int pageSize) {
+		return banLiShopOrderMapper.listByUidAndState(stateList, uid, (page - 1) * pageSize, pageSize);
+	}
+
+	@Override
+	public long countByUidAndState(Long uid, List<Integer> stateList) {
+		return banLiShopOrderMapper.countByUidAndState(stateList, uid);
 	}
 
 }

--
Gitblit v1.8.0