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