Przeglądaj źródła

线上/下余额

zhijiezhao 3 lat temu
rodzic
commit
e8e6fe97e0

+ 1 - 1
src/main/java/com/caimei365/order/controller/OrderClubApi.java

@@ -299,7 +299,7 @@ public class OrderClubApi {
     @ApiOperation("分享订单,初始商品数据(旧:/order/commodityData)")
     @ApiImplicitParam(required = true, name = "orderId", value = "订单Id")
     @GetMapping("/share/product")
-    public ResponseJson<List<OrderProductVo>> getOrderShareInitProduct(Integer orderId) {
+    public ResponseJson<Map<String,Object>> getOrderShareInitProduct(Integer orderId) {
         if (null == orderId) {
             return ResponseJson.error("订单Id不能为空!", null);
         }

+ 1 - 1
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -39,7 +39,7 @@ public interface PayOrderMapper {
      * @param ableUserMoney 用户可用余额
      * @param userId 用户Id
      */
-    void updateMoneyByUserId(Double userMoney, Double ableUserMoney, Integer userId);
+    void updateMoneyByUserId(Double userMoney, Double ableUserMoney,Double onlineMoney,Integer userId);
     /**
      * 根据用户Id更新线上余额
      *

+ 1 - 1
src/main/java/com/caimei365/order/service/OrderClubService.java

@@ -117,7 +117,7 @@ public interface OrderClubService {
      * 分享订单,初始商品数据
      * @param orderId 订单Id
      */
-    ResponseJson<List<OrderProductVo>> getOrderShareInitProduct(Integer orderId);
+    ResponseJson<Map<String,Object>> getOrderShareInitProduct(Integer orderId);
     /**
      * 二手订单 确认打款供应商
      * @param orderId 订单Id

+ 10 - 2
src/main/java/com/caimei365/order/service/impl/OrderClubServiceImpl.java

@@ -837,10 +837,18 @@ public class OrderClubServiceImpl implements OrderClubService {
      * @param orderId 订单Id
      */
     @Override
-    public ResponseJson<List<OrderProductVo>> getOrderShareInitProduct(Integer orderId) {
+    public ResponseJson<Map<String,Object>> getOrderShareInitProduct(Integer orderId) {
         List<OrderProductVo> orderProductList = orderCommonMapper.getOrderProductByOrderId(orderId);
         orderProductList.forEach(orderProduct -> orderProduct.setImage(ImageUtil.getImageUrl("product", orderProduct.getImage(), domain)));
-        return ResponseJson.success(orderProductList);
+        OrderVo order = orderCommonMapper.getOrderByOrderId(orderId);
+        orderCommonService.setOrderStatus(order);
+        HashMap<String, Object> result = new HashMap<>(2);
+        orderCommonService.getDiscernReceiptAndSetOrder(order);
+        result.put("productList",orderProductList);
+        result.put("orderStatus",order.getStatus());
+        //2021.12.14 去掉paybutton判断
+//        result.put("payButton", order.isPayButton());
+        return ResponseJson.success(result);
     }
 
     /**

+ 68 - 33
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -60,6 +60,8 @@ public class SubmitServiceImpl implements SubmitService {
     private CartSellerMapper cartSellerMapper;
     @Resource
     private RemoteCallService remoteCallService;
+    @Resource
+    private PayOrderMapper payOrderMapper;
 
     /**
      * 生成订单
@@ -163,7 +165,7 @@ public class SubmitServiceImpl implements SubmitService {
         //订单应付总额
         String orderShouldPayFee = (String) payInfo.get("orderShouldPayFee");
         orderParamBo.setOrderShouldPayFee(Double.parseDouble(orderShouldPayFee));
-        // 运费标志:0包邮 -1到付 1遵循运费规则                               
+        // 运费标志:0包邮 -1到付 1遵循运费规则
         Integer postageFlag = (Integer) payInfo.get("postageFlag");
         // 运费
         String postage = (String) payInfo.get("postage");
@@ -966,42 +968,46 @@ public class SubmitServiceImpl implements SubmitService {
         boolean isPaySuccessFlag = false;
         // 余额支付标识,0不使用,1使用
         if (1 == orderParamBo.getBalancePayFlag()) {
-            // 抵扣后用户剩余可用余额
-            Double lastAbleUserMoney;
-            // 抵扣后账户余额
-            Double lastUserMoney = orderParamBo.getUserMoney();
-            // 部分抵扣
+            // 订单总额>账户余额 部分抵扣
             if (MathUtil.compare(payTotalFee.get(), orderParamBo.getAbleUserMoney()) > 0) {
                 balancePayFee.set(orderParamBo.getAbleUserMoney());
                 payableAmount.set(MathUtil.sub(payTotalFee.get(), balancePayFee.get()).doubleValue());
-                // 余额抵扣用完
-                lastAbleUserMoney = 0d;
                 if (3 != orderParamBo.getCartType()) {
                     // 部收款待发货
                     mainOrder.setStatus(21);
-                    lastUserMoney = MathUtil.sub(orderParamBo.getUserMoney(), balancePayFee.get()).doubleValue();
                 }
                 mainOrder.setReceiptStatus(2);
+                // 线上+线下只够部分抵扣,线上线下可用都置为0
+                payOrderMapper.updateMoneyByUserId(0d, 0d, 0d, orderParamBo.getUserId());
+                log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + 0 + "] ,ableUserMoney:" + 0);
             } else {
                 // 全部用余额抵扣, 直接变成支付完成
                 balancePayFee.set(payTotalFee.get());
                 payableAmount.set(0d);
-                lastAbleUserMoney = MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee.get()).doubleValue();
                 if (3 != orderParamBo.getCartType()) {
                     // 已收款待发货
                     mainOrder.setStatus(31);
-                    lastUserMoney = MathUtil.sub(orderParamBo.getUserMoney(), balancePayFee.get()).doubleValue();
                 }
                 mainOrder.setReceiptStatus(3);
                 mainOrder.setPayFlag(1);
                 isPaySuccessFlag = true;
+                // 线上余额全付
+                if (MathUtil.compare(orderParamBo.getOnlineMoney(), balancePayFee) > 0) {
+                    Double onlineMoney = MathUtil.sub(orderParamBo.getOnlineMoney(), balancePayFee).doubleValue();
+                    Double availableMoney = MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue();
+                    payOrderMapper.updateOnlineMoneyByUserId(onlineMoney, availableMoney, orderParamBo.getUserId());
+                    log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + availableMoney + "] ,ableUserMoney:" + availableMoney);
+                } else {
+                    //线上余额不够,线上全抵
+                    Double userMoney = MathUtil.sub(orderParamBo.getUserMoney(), MathUtil.sub(balancePayFee, orderParamBo.getOnlineMoney())).doubleValue();
+                    //更新线上/线下余额  线上置为0,全部抵扣
+                    payOrderMapper.updateMoneyByUserId(userMoney, MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue(), 0d, orderParamBo.getUserId());
+                }
             }
-            // 抵扣后更新用户余额
-            submitMapper.updateUserMoney(lastUserMoney, lastAbleUserMoney, orderParamBo.getUserId());
-            log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + lastUserMoney + "] ,ableUserMoney:" + lastAbleUserMoney);
             // 支付时间
             mainOrder.setPayTime(curDateStr);
         } else {
+            //不用余额的情况下真是支付金额赋值为订单总额
             payableAmount.set(payTotalFee.get());
         }
         // 余额支付金额
@@ -1274,26 +1280,57 @@ public class SubmitServiceImpl implements SubmitService {
             return ResponseJson.error("订单地址异常!", null);
         }
 
-        /*
-         *保存余额到余额收支记录
+        /**
+         * 保存余额到余额收支记录
          */
         // 余额支付标识,0不使用,1使用
         if (1 == orderParamBo.getBalancePayFlag() && MathUtil.compare(balancePayFee.get(), 0) > 0) {
-            // 余额支付标识,0不使用,1使用
-            //保存余额到余额收支记录
-            BalanceRecordPo balanceRecord = new BalanceRecordPo();
-            balanceRecord.setUserId(mainOrder.getUserId());
-            balanceRecord.setType(2);
-            balanceRecord.setBalanceType(1);
-            balanceRecord.setAddDate(new Date());
-            balanceRecord.setAmount(balancePayFee.get());
-            balanceRecord.setOrderId(mainOrder.getOrderId());
-            balanceRecord.setRemark("机构自主订单");
-            balanceRecord.setDelFlag(0);
-            // 保存 余额收支记录
-            baseMapper.insertBalanceRecord(balanceRecord);
-            log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + mainOrder.getOrderId());
-
+            Double onlineMoney = orderParamBo.getOnlineMoney();
+            if (MathUtil.compare(onlineMoney, balancePayFee) > 0) {
+                //保存余额到余额收支记录
+                BalanceRecordPo balanceRecord = new BalanceRecordPo();
+                balanceRecord.setUserId(orderParamBo.getUserId());
+                balanceRecord.setType(2);
+                balanceRecord.setBalanceType(10);
+                balanceRecord.setAddDate(new Date());
+                balanceRecord.setAmount(balancePayFee.doubleValue());
+                balanceRecord.setOrderId(mainOrder.getOrderId());
+                balanceRecord.setRemark("订单支付,余额抵扣");
+                balanceRecord.setDelFlag(0);
+                // 保存 余额收支记录
+                baseMapper.insertBalanceRecord(balanceRecord);
+                log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + mainOrder.getOrderId());
+            } else {//线上不够,线上全抵,剩余线下
+                if (onlineMoney > 0) {
+                    // 线上>0有抵扣的情况下保存线上余额到余额收支记录
+                    BalanceRecordPo balanceRecord = new BalanceRecordPo();
+                    balanceRecord.setUserId(orderParamBo.getUserId());
+                    balanceRecord.setType(2);
+                    balanceRecord.setBalanceType(10);
+                    balanceRecord.setAddDate(new Date());
+                    balanceRecord.setAmount(onlineMoney);
+                    balanceRecord.setOrderId(mainOrder.getOrderId());
+                    balanceRecord.setRemark("订单支付,余额抵扣");
+                    balanceRecord.setDelFlag(0);
+                    baseMapper.insertBalanceRecord(balanceRecord);
+                    log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + mainOrder.getOrderId());
+                }
+                if (MathUtil.sub(balancePayFee, orderParamBo.getOnlineMoney()).doubleValue() > 0) {
+                    // 保存线下余额到余额收支记录
+                    BalanceRecordPo balanceRecord1 = new BalanceRecordPo();
+                    balanceRecord1.setUserId(orderParamBo.getUserId());
+                    balanceRecord1.setType(2);
+                    balanceRecord1.setBalanceType(1);
+                    balanceRecord1.setAddDate(new Date());
+                    balanceRecord1.setAmount(MathUtil.sub(balancePayFee, orderParamBo.getOnlineMoney()).doubleValue());
+                    balanceRecord1.setOrderId(mainOrder.getOrderId());
+                    balanceRecord1.setRemark("订单支付,余额抵扣");
+                    balanceRecord1.setDelFlag(0);
+                    // 保存 余额收支记录
+                    baseMapper.insertBalanceRecord(balanceRecord1);
+                    log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + mainOrder.getOrderId());
+                }
+            }
             // 保存余额抵扣到收款记录(自主订单)
             if (3 != orderParamBo.getCartType()) {
                 Integer orderId = mainOrder.getOrderId();
@@ -1565,7 +1602,6 @@ public class SubmitServiceImpl implements SubmitService {
         mainOrder.setClauseName("无条款");
         // 是否返佣订单
         mainOrder.setRebateFlag(0);
-        mainOrder.setSpId(rechargeDto.getServiceProviderId());
         /*
          * 保存主订单数据,返回订单Id
          */
@@ -1643,7 +1679,6 @@ public class SubmitServiceImpl implements SubmitService {
         rechargeProduct.setSingleCmFee(rechargeDto.getPrice());
         rechargeProduct.setNotOutStore(0);
         rechargeProduct.setBuyAgainFlag(0);
-        rechargeProduct.setName(rechargeDto.getName());
         /*
          * 保存 订单商品
          */

+ 10 - 1
src/main/resources/mapper/PayOrderMapper.xml

@@ -26,7 +26,10 @@
         WHERE orderID = #{orderId}
     </update>
     <update id="updateMoneyByUserId">
-        UPDATE USER SET userMoney = #{userMoney}, ableUserMoney = #{ableUserMoney}
+        UPDATE USER
+        SET userMoney     = #{userMoney},
+            ableUserMoney = #{ableUserMoney},
+            onlineMoney   = #{onlineMoney}
         WHERE userID = #{userId}
     </update>
     <insert id="insertOrderPayLink" keyColumn="id" keyProperty="id"  parameterType="com.caimei365.order.model.vo.OrderPayLinkVo" useGeneratedKeys="true">
@@ -94,6 +97,12 @@
         payStatus = #{payStatus}
         WHERE orderID = #{orderId}
     </update>
+    <update id="updateOnlineMoneyByUserId">
+        UPDATE USER
+        SET onlineMoney   = #{onlineMoney},
+            ableUserMoney = #{ableUserMoney}
+        WHERE userID = #{userId}
+    </update>
     <select id="getPayOnLineSwitch" resultType="java.lang.Integer">
         SELECT STATUS FROM cm_pay_online_switch WHERE id=1
     </select>