From ba3c255cbfc3fd6ff0708dca96c9e256c690e370 Mon Sep 17 00:00:00 2001
From: jyy <935090232@qq.com>
Date: Tue, 13 Apr 2021 13:28:36 +0800
Subject: [PATCH] 修改订单物流查询信息

---
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java |  197 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 153 insertions(+), 44 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
index d1ad6a3..02099a7 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
@@ -1,30 +1,43 @@
 package com.matrix.system.shopXcx.api.action;
 
-import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
-import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
+import com.matrix.config.RabbitMqConfig;
 import com.matrix.core.constance.SystemErrorCode;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.hive.bean.MoneyCardUse;
+import com.matrix.system.hive.bean.MoneyCardUseFlow;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.MoneyCardUseDao;
+import com.matrix.system.hive.dao.MoneyCardUseFlowDao;
 import com.matrix.system.hive.dao.ShoppingGoodsDao;
 import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.score.dao.ScoreVipDetailDao;
 import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
 import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
 import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
 import com.matrix.system.shopXcx.api.service.ShoppingCartService;
 import com.matrix.system.shopXcx.api.service.WXShopOrderService;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
-import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
-import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
+import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoin;
+import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoinUser;
 import com.matrix.system.shopXcx.bean.ShopOrder;
+import com.matrix.system.shopXcx.bean.ShopPayLog;
 import com.matrix.system.shopXcx.dao.*;
+import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
+import java.util.*;
 
 
 /**
@@ -42,16 +55,10 @@
     @Autowired
     WxShopCouponService wxShopCouponService;
 
-    @Autowired
-    private ShopReceiveAddressDao shopReceiveAddressDao;
 
     @Autowired
     ShoppingCartService shoppingCartService;
 
-    @Autowired
-    private ShopCouponDao shopCouponDao;
-    @Autowired
-    private WxShopCouponUtil wxShopCouponUtil;
 
     @Autowired
     private RedisUserLoginUtils redisUserLoginUtils;
@@ -64,20 +71,39 @@
 
     @Autowired
     ShopProductDao shopProductDao;
-    @Autowired
-    private WxShopOrderUtil wxShopOrderUtil;
-
-    @Autowired
-    private ShopOrderDetailsDao shopOrderDetailsDao;
 
     @Autowired
     OrderCouponGroupService orderCouponGroupService;
+
+    @Autowired
+    private ShopPayLogDao shopPayLogDao;
 
     @Autowired
     ShopOrderDao shopOrderDao;
 
     @Autowired
     SysVipInfoDao sysVipInfoDao;
+
+    @Autowired
+    private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao;
+
+    @Autowired
+    private ShopActivitiesGroupJoinDao shopActivitiesGroupJoinDao;
+
+    @Autowired
+    private RabiitMqTemplate rabiitMqTemplate;
+
+    @Autowired
+    ShoppingGoodsDao shoppingGoodsDao;
+
+    @Autowired
+    MoneyCardUseFlowDao moneyCardUseFlowDao;
+
+    @Autowired
+    MoneyCardUseDao moneyCardUseDao;
+
+    @Value("${evn}")
+    private String evn;
 
     /**
      * 计算购物车订单价格
@@ -90,17 +116,15 @@
     public
     @ResponseBody
     AjaxResult calculationCartOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
-
-
         return shopOrderService.buildDiscountExplain(shopOrderDto);
     }
 
 
     @Autowired
-    ShoppingGoodsDao shoppingGoodsDao;
+    private ScoreVipDetailDao scoreVipDetailDao;
 
     /**
-     * 新增订单
+     * 新增微信支付订单
      *
      * @param shopOrderDto
      * @return
@@ -108,43 +132,128 @@
     @PostMapping(value = "/addShopOrder")
     public
     @ResponseBody
-    AjaxResult addShopOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
-        return shopOrderService.createShopOrder(shopOrderDto);
+    AjaxResult addShopOrder(@RequestBody @Validated ShopOrderDto shopOrderDto) throws Exception {
+
+        ShopOrder shopOrder = shopOrderService.createShopOrder(shopOrderDto);
+        AjaxResult result = AjaxResult.buildSuccessInstance("订单创建成功");
+        result.putInMap("orderId", shopOrder.getId());
+        if (shopOrderDto.getPayMethod().equals(ShopOrder.SHOP_ORDER_PAY_METHOD_WX)) {
+            BrandWCPayRequestData payData = shopOrderService.startPayment(shopOrder);
+            result.setRows(Arrays.asList(payData));
+        }
+        return result;
     }
 
 
 
-    @Value("${wx_pay_debug_onoff}")
-    private boolean isDebug;
-    @Autowired
-    private WeixinServiceUtil weixinServiceUtil;
-
     /**
-     * 开始付款
+     * 余额支付确认
      *
-     * @param shopOrder
+     * @param orderId
      * @return
      * @throws Exception
      */
-    public BrandWCPayRequestData startPayment(ShopOrder shopOrder) throws Exception {
-        BigDecimal unit = new BigDecimal("100");
-        BigDecimal money = new BigDecimal(shopOrder.getOrderMoney().toString());
-        BrandWCPayRequestData payData;
-        String productNames = wxShopOrderUtil.getProductNames(shopOrder.getUserId(), shopOrder.getId());
-        SysVipInfo vipInfo = sysVipInfoDao.selectById(shopOrder.getUserId());
+    @PostMapping(value = "/moneyCardPay/{orderId}")
+    @ResponseBody
+    @Transactional
+    public   AjaxResult moneyCardPay(@PathVariable Integer orderId) throws Exception {
 
-        if (isDebug) {
-            payData = weixinServiceUtil.createOrder("[测试]" + productNames, shopOrder.getOrderNo(),
-                    1, vipInfo.getOpenId(), String.valueOf(shopOrder.getId()));
+        ShopOrder order = shopOrderDao.selectById(orderId);
+        if (order != null
+                && ShopOrder.SHOP_ORDER_PAY_METHOD_VIPCARD == order.getPayMethod()
+                && ShopOrder.ORDER_PAY_STATUS_WAIT == order.getPayStatus()) {
+
+            MoneyCardUse moneyCardUse = moneyCardUseDao.selectVipCard(order.getUserId());
+            Double balance=moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney();
+            if(balance>=order.getOrderMoney().doubleValue()){
+                //扣减会员卡余额
+                if(moneyCardUse.getRealMoney()>=order.getOrderMoney().doubleValue()){
+                    moneyCardUse.setRealMoney(moneyCardUse.getRealMoney()-order.getOrderMoney().doubleValue());
+                }else{
+                    moneyCardUse.setGiftMoney(moneyCardUse.getGiftMoney()-(order.getOrderMoney().doubleValue()- moneyCardUse.getRealMoney() ));
+                    moneyCardUse.setRealMoney(0D);
+                }
+                moneyCardUseDao.update(moneyCardUse);
+                //插入扣减记录
+                MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow();
+                moneyCardUseFlow.setTotal(order.getOrderMoney().doubleValue());
+                moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
+                moneyCardUseFlow.setVipId(order.getUserId());
+                moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
+                moneyCardUseFlow.setOrderNo(order.getOrderNo());
+                moneyCardUseFlow.setCreateTime(new Date());
+                moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney());
+                moneyCardUseFlow.setCardName(moneyCardUse.getCardName());
+                moneyCardUseFlowDao.insert(moneyCardUseFlow);
+
+                //构建需要修改订单信息Map
+                Map<String, Object> modifyMap = new HashMap<>();
+                modifyMap.put("id", order.getId());
+                //设置微信支付状态为已支付
+                modifyMap.put("payResult", ShopOrder.ORDER_WX_STATUS_PAY_SUCCESS);
+                //设置支付状态为支付成功
+                modifyMap.put("payStatus", ShopOrder.ORDER_PAY_STATUS_SUCCESS);
+                //如果是商品订单则进入待发货
+                modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_SEND);
+                shopOrderDao.updateByMap(modifyMap);
+
+                // 判断该订单是否为拼团产生的订单
+                ShopActivitiesGroupJoinUser joinUser = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByOrderId(order.getId().longValue());
+                if (joinUser != null) {
+                    joinUser.setIsHasPay(ShopActivitiesGroupJoinUser.IS_HAS_PAY_Y);
+                    shopActivitiesGroupJoinUserDao.updateByModel(joinUser);
+
+                    ShopActivitiesGroupJoin groupJoin = shopActivitiesGroupJoinDao.selectGroupAndPriceById(joinUser.getGjId());
+                    List<ShopActivitiesGroupJoinUser> joinUserList = shopActivitiesGroupJoinUserDao.selectGroupJoinUserListByGjId(joinUser.getGjId());
+                    LogUtil.info("#当前已支付完成:{}#", joinUserList.size());
+                    // 若拼团中已支付的数量等于几人团预设值,则更新拼团状态为拼团成功
+                    if (groupJoin.getGroupPrice().getGpCount() == joinUserList.size()) {
+                        groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_SUCCESS);
+                    } else {
+                        if (joinUser.getUserId().equals(groupJoin.getGjHeadId())) {
+                            groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_ING);
+                        }
+                    }
+                    shopActivitiesGroupJoinDao.updateByModel(groupJoin);
+
+                    SysVipInfo sysVipInfo = sysVipInfoDao.selectByPhone(order.getUserTel());
+                    if (sysVipInfo != null) {
+                        sysVipInfo.setIsDeal(SysVipInfo.DEAL_VIP);
+                        sysVipInfoDao.update(sysVipInfo);
+                    }
+                }
+
+                // 根据订单类型创建不同的处理任务
+                rabiitMqTemplate.sendTopicMsg(RabbitMqConfig.MQ_EXCHANGE_TOPIC + evn, MQTaskRouting.CREATE_ORDER + evn, orderId + "");
+                //支付记录
+                recordPayLog(Integer.valueOf(orderId), 1, order.getOrderNo(), order.getOrderMoney(), "会员卡余额支付成功", ShopOrder.ORDER_PAY_STATUS_SUCCESS);
+
+                return AjaxResult.buildSuccessInstance("支付成功");
+
+            }else{
+                return AjaxResult.buildFailInstance("会员卡余额不足");
+            }
+
         } else {
-            payData = weixinServiceUtil.createOrder(productNames, shopOrder.getOrderNo(),
-                    unit.multiply(money).intValue(), vipInfo.getOpenId(), String.valueOf(shopOrder.getId()));
+            LogUtil.info("订单状态不为待付款,order status=", order.getOrderStatus());
+            return AjaxResult.buildFailInstance("订单不支持本次结算");
         }
-        ShopOrder updateParam = new ShopOrder();
-        updateParam.setId(shopOrder.getId());
-        updateParam.setWxOrderNo(payData.getPrepay_id());
-        shopOrderDao.updateByModel(updateParam);
-        return payData;
+
+    }
+
+
+    private void recordPayLog(Integer orderId, Integer type, String orderNo, BigDecimal payMoney, String payRemark, int payStatus) {
+        //设置支付类型为收款
+        ShopPayLog payLog = new ShopPayLog();
+        payLog.setPayType(type);
+        payLog.setJoinId(orderId);
+        payLog.setPayMoney(payMoney);
+        payLog.setPayOrderNo(orderNo);
+        payLog.setPayRemark(payRemark);
+        payLog.setPayStatus(payStatus);
+        payLog.setCreateBy(AppConstance.SYSTEM_USER);
+        payLog.setUpdateBy(AppConstance.SYSTEM_USER);
+        shopPayLogDao.insert(payLog);
     }
 
 

--
Gitblit v1.9.1