From 2a85af1814fc3a86caa56e88abd64e81057284e7 Mon Sep 17 00:00:00 2001
From: Administrator <Administrator@MS-20170306HGUF>
Date: 星期日, 23 二月 2020 13:07: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..f4ba043 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,22 @@
@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 +106,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 +137,9 @@
if (goods.getCreateTime() == null)
goods.setCreateTime(new Date());
+ // 鎻掑叆鍟嗗搧
+ BanLiShopOrderGoods orderGoods = getOrderGoods(goods, set);
+ order.setOrderGoods(orderGoods);
banLiShopOrderMapper.insertSelective(order);
// 娣诲姞璁㈠崟鍙�
@@ -111,16 +148,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 +200,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 +314,7 @@
// 鏀粯鎴愬姛
BanLiShopOrder update = new BanLiShopOrder();
+ update.setId(orderId);
update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_PAID);
// 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
update.setUpdateTime(new Date());
@@ -266,6 +328,7 @@
return banLiShopOrderMapper.selectByPrimaryKeyForUpdate(id);
}
+ @Transactional(rollbackFor = Exception.class)
@Override
public void invalidOrderByOrderId(Long id, String desc) {
// 鍒ゆ柇璁㈠崟鏄惁瀛樺湪
@@ -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