1
0
فهرست منبع

author:wcq
update:修复导出线下订单时状态错误的问题
修复订单管理 线下订单查看详情,商品数据总计错误的问题

wcq 3 سال پیش
والد
کامیت
c9e8e3f307

+ 61 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/order/OrderConfirmController.java

@@ -0,0 +1,61 @@
+package com.kmall.admin.controller.order;
+
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.R;
+import com.kmall.manager.manager.express.sf.ServiceException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.Map;
+
+
+/**
+ * @author wcq
+ * @email
+ * @date 2022-02-09 10:41:09
+ */
+@RestController
+@RequestMapping("order")
+public class OrderConfirmController {
+    private Log logger = LogFactory.getLog(OrderConfirmController.class);
+    @Autowired
+    private OrderService orderService;
+
+    /**
+     * 收银端支付
+     * @param param
+     * @return
+     * @throws IOException
+     */
+    @RequestMapping("/orderConfirm")
+    public R orderConfirm(@RequestBody Map param) throws IOException {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        Map resultObj = null;
+        try {
+//            throw new RuntimeException("系统异常");
+            synchronized (this){
+                resultObj = orderService.offlineRetailSubmit(param,user);
+            }
+            if(resultObj.get("errno") != null && ((Integer)resultObj.get("errno")) == 400){
+                return R.error((String) resultObj.get("errmsg"));
+            }
+            return R.ok().put("resultObj", resultObj);
+        } catch (ServiceException e) {
+            return R.error(e.getMessage());
+        } catch (Exception e) {
+            if (e.getMessage().contains("java.lang.IllegalStateException: invalid auth_code!")){
+                return R.error("付款码异常,请重新输入!");
+            }
+            return R.error(e.getMessage());
+        }
+
+    }
+}

+ 12 - 33
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java → kmall-admin/src/main/java/com/kmall/admin/controller/order/OrderController.java

@@ -1,15 +1,16 @@
-package com.kmall.admin.controller;
+package com.kmall.admin.controller.order;
 
+import com.alibaba.druid.support.json.JSONUtils;
 import com.kmall.admin.dto.OrderExpressDto;
 import com.kmall.admin.dto.SystemFormatDto;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceResponseVO;
+import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceVO;
 import com.kmall.admin.service.*;
 import com.kmall.admin.utils.CalculateTax;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ShiroUtils;
-import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceVO;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
@@ -24,7 +25,6 @@ import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
 import com.kmall.manager.manager.alipay.AliPayUtil;
 import com.kmall.manager.manager.dto.PayOriginInfoDTO;
 import com.kmall.manager.manager.express.sf.ServiceException;
-import com.kmall.manager.manager.merch.OmsMerchPropertiesBuilder;
 import com.kmall.manager.manager.pingan.PinganUtil;
 import com.kmall.manager.manager.pingan.dto.PinganResponseDto;
 import com.kmall.manager.manager.wechat.WechatGlobalUtil;
@@ -971,35 +971,6 @@ public class OrderController {
 
 
     /**
-     * 收银端支付
-     * @param param
-     * @return
-     * @throws IOException
-     */
-    @RequestMapping("/orderConfirm")
-    public R orderConfirm(@RequestBody Map param) throws IOException {
-
-        SysUserEntity user = ShiroUtils.getUserEntity();
-        Map resultObj = null;
-        try {
-//            throw new RuntimeException("系统异常");
-            resultObj = orderService.offlineRetailSubmit(param,user);
-            if(resultObj.get("errno") != null && ((Integer)resultObj.get("errno")) == 400){
-                return R.error((String) resultObj.get("errmsg"));
-            }
-            return R.ok().put("resultObj", resultObj);
-        } catch (ServiceException e) {
-            return R.error(e.getMessage());
-        } catch (Exception e) {
-            if (e.getMessage().contains("java.lang.IllegalStateException: invalid auth_code!")){
-                return R.error("付款码异常,请重新输入!");
-            }
-            return R.error(e.getMessage());
-        }
-
-    }
-
-    /**
      * 海控退款
      * @param param
      * @return
@@ -1379,7 +1350,15 @@ public class OrderController {
                 }else{
                     systemFormat.setTransactionType("销售");
                 }
-                orderStatus = Dict.orderStatus.valueOf("item_"+orderStatus).getItemName();
+                // 将订单状态转为文字
+                if(StringUtils.isNotEmpty(orderStatus)){
+                    orderStatus = Dict.orderStatus.valueOf("item_"+orderStatus).getItemName();
+                }else {
+                    orderStatus = "订单状态异常";
+                    logger.error("订单状态为空,订单明细信息为:" + JSONUtils.toJSONString(systemFormat) + "备查");
+                    logger.error("订单状态为空,订单明细列表为:" + JSONUtils.toJSONString(systemFormatList) + "备查");
+                }
+
                 if (Objects.nonNull(systemFormat.getPrimeCost()) && Objects.nonNull(systemFormat.getGoodsNumber())) {
                     String primeCost = systemFormat.getPrimeCost();
                     BigDecimal gp = new BigDecimal(primeCost);

+ 32 - 11
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -2138,7 +2138,7 @@ public class OrderServiceImpl implements OrderService {
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public synchronized Map offlineRetailSubmit(Map param, SysUserEntity user) {
+    public Map offlineRetailSubmit(Map param, SysUserEntity user) {
         long start = System.currentTimeMillis();
         // 解析订单数据 List
         List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList");
@@ -2176,6 +2176,9 @@ public class OrderServiceImpl implements OrderService {
             LOGGER.error("decode machine code failed! error message : ", e);
         }
         Integer storeId = user.getStoreId();
+        if(Objects.isNull(storeId)){
+            throw new ServiceException(String.format("登录用户错误,请刷新后确认!"));
+        }
         // 根据商品条码、sku、门店id查询相对应的商品信息,并组装成对象
         List<QueryGoodsVO> queryGoodsVOList = new ArrayList<>();
         Map<String, GoodsEntity> goodsEntityMap;
@@ -2426,6 +2429,7 @@ public class OrderServiceImpl implements OrderService {
                     goodsEntity.setActivity(goodsDto.getActivity());
                     goodsEntity.setStoreId(storeId);
                     goodsEntity.setListPicUrl(goodsDto.getListPicUrl());
+                    // wcq-注解: goodsEntity1 库存信息  goodsEntity 此次购买的商品信息附加一些库存属性值
                     GoodsEntity goodsEntity1 = goodsEntityMap.get(sku);
                     if (Objects.nonNull(goodsEntity1)) {
                         goodsEntity.setWarehouseSn(goodsEntity1.getWarehouseSn());
@@ -4946,7 +4950,7 @@ public class OrderServiceImpl implements OrderService {
                     String prodBarcode = goodsDetailsDto.getProdBarcode();
                     // 此字段 = 零售价 - 其他活动优惠金额
                     BigDecimal actualPaymentAmount = goodsDetailsDto.getActualPaymentAmount()
-                            .multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()));
+                            .multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()));// 商品金额乘以数量
                     // 当前商品最大支持抵扣的金额
                     BigDecimal currentSkuMaxDeductionPrice = actualPaymentAmount.multiply(scoreRatio).setScale(0, BigDecimal.ROUND_FLOOR);
                     // 其他活动优惠金额
@@ -4958,6 +4962,7 @@ public class OrderServiceImpl implements OrderService {
                     BigDecimal discountedPrice = BigDecimal.ZERO;
                     // 计算抵扣,当商品不是最后一个商品
                     if (i < index) {
+
                         shareScoreItem = actualPaymentAmount.multiply(scoreIntegerDecimal).divide(skuTotalPrice, 0, BigDecimal.ROUND_FLOOR);
                         discountedPrice = shareScoreItem.divide(BigDecimal.valueOf(scoreLimit), 2, BigDecimal.ROUND_HALF_UP);
                     }
@@ -5166,25 +5171,31 @@ public class OrderServiceImpl implements OrderService {
 
         BigDecimal goodsTotalPrice = BigDecimal.ZERO;
         BigDecimal fullCutCouponDec = Constant.ZERO;  // 非现金抵扣 = 各种优惠价格 +优惠券的价格   暂时借用这个字段去,为了不改动ccnet系统
+        BigDecimal deductionPrice = Constant.ZERO;// 积分抵扣金额
         BigDecimal couponPrice = BigDecimal.ZERO;
         BigDecimal freightPrice = Constant.ZERO;
         Integer number = 0;
         //订单价格计算:订单的总价+运费
         for (GoodsEntity goodsEntity : goodsList) {
+            // 商品总价 = 商品单价 * 购买数量  保留两位小数
             goodsTotalPrice = goodsTotalPrice
                     .add(goodsEntity.getRetailPrice().multiply(new BigDecimal(goodsEntity.getSellVolume()))).setScale(2, RoundingMode.HALF_UP);
+            // todo: 促销活动费用  这里取的是总优惠金额  不正确  但是后续把这个值传到订单的
             fullCutCouponDec = fullCutCouponDec
                     .add(goodsEntity.getDiscountedPrice()).setScale(2, RoundingMode.HALF_UP);
-            couponPrice = couponPrice.add(goodsEntity.getDiscountedPrice()).setScale(2, RoundingMode.HALF_UP);
+            // todo: 优惠券优惠金额  这里取的是总优惠金额  不正确
+            // couponPrice = couponPrice.add(goodsEntity.getDiscountedPrice()).setScale(2, RoundingMode.HALF_UP);
+            // 计算总积分抵扣金额
+            deductionPrice = deductionPrice.add(goodsEntity.getDeductionPrice()).setScale(2, RoundingMode.HALF_UP);
             number += goodsEntity.getSellVolume();
         }
 
 
         BigDecimal orderTotalPrice = goodsTotalPrice.add(new BigDecimal(0));
-        fullCutCouponDec = fullCutCouponDec.add(couponPrice).setScale(2, RoundingMode.HALF_UP);
+        // fullCutCouponDec = fullCutCouponDec.add(couponPrice).setScale(2, RoundingMode.HALF_UP);
 
         // 加上税额
-        goodsTotalPrice = goodsTotalPrice.subtract(totalTax).setScale(2, RoundingMode.HALF_UP);
+        // goodsTotalPrice = goodsTotalPrice.subtract(totalTax).setScale(2, RoundingMode.HALF_UP);
 
 //        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
 //
@@ -5235,30 +5246,40 @@ public class OrderServiceImpl implements OrderService {
         orderInfo.setStore_id(storeId);
         orderInfo.setFreight_price(freightPrice.intValue());
 
-        orderInfo.setCoupon_id(Integer.parseInt(String.valueOf(0L)));
-        orderInfo.setCoupon_price(couponPrice);
+        orderInfo.setCoupon_id(Integer.parseInt(String.valueOf(0L)));//  优惠券id
+        orderInfo.setCoupon_price(couponPrice);// 优惠券金额
         orderInfo.setCoupon_name("无");
         orderInfo.setActivity_id(0L);
 
         //使用的促销费用
-        orderInfo.setFull_cut_price(fullCutCouponDec);
-        orderInfo.setCampMinusId(0);
+        orderInfo.setFull_cut_price(fullCutCouponDec); // 促销活动费用
+        orderInfo.setCampMinusId(0);// 促销活动id
         orderInfo.setCampName("");
 
         //留言
         orderInfo.setPostscript("无");
         orderInfo.setAdd_time(new Date());
+        // 商品总价
         orderInfo.setGoods_price(actualPrice.subtract(totalTax));
-        orderInfo.setOrder_price(actualPrice);
+        // 订单总价 这里的订单总价取的是 扣减完优惠的商品总价
+        // orderInfo.setOrder_price(actualPrice);
+        // 订单总价 根据前端显示 这里应该取未扣减优惠的商品总价
+        orderInfo.setOrder_price(orderTotalPrice);
         orderInfo.setActual_price(actualPrice); // 实际支付金额
+        // 订单类型 1 普通订单 2 团购订单
         orderInfo.setOrder_type("1");
+        // 订单状态  0订单创建成功等待付款, 100订单付款中,101订单已取消,
+        // 102订单已删除,201订单已付款,等待发货,300订单已发货,
+        // 301用户确认收货,401 没有发货,退款 402 已收货,退款退货,500订单已关闭;501 支付失败
         orderInfo.setOrder_status(0);
         orderInfo.setShipping_status(0);
         orderInfo.setPay_status(0);
         orderInfo.setShipping_id(0L);
+        // 配送费用
         orderInfo.setShipping_fee(Constant.ZERO);
         orderInfo.setIntegral(0);
-        orderInfo.setIntegral_money(Constant.ZERO);
+        // 积分抵扣金额
+        orderInfo.setIntegral_money(deductionPrice);
         orderInfo.setCreateTime(new Date());
         orderInfo.setModTime(new Date());
         orderInfo.setPayMobile(loginUser.getMobile());

+ 1 - 1
kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml

@@ -2085,7 +2085,7 @@
         gs.goods_rate as taxRate,
         '专柜单品' as productCategory,
         sup.child_supplier_name as supplierName,
-        '300' as orderStatus,
+        o.order_status as orderStatus,
         g.tax_price as taxPrice,
         s.store_name as storeName,
         o.pay_flag as payFlag,

+ 8 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html

@@ -215,7 +215,7 @@
                             <p style="line-height: 30px;">SKU:{{item.sku}}</p>
                         </td>
                         <td align="center">¥{{item.number * item.marketPrice}}</td>
-                        <td align="center">¥{{item.number * item.discountedPrice}}</td>
+                        <td align="center">¥{{item.discountedPrice}}</td>
                         <td align="center">¥{{item.actualPaymentAmount}}</td>
                         <td align="center">¥{{item.actualPaymentAmount}}</td>
                         <td align="center">¥{{item.tax}}</td>
@@ -234,9 +234,16 @@
                         <td align="center">¥{{order.orderPrice}}</td>
                         <td align="center">¥{{order.fullCutPrice}}</td>
                         <td align="center">¥{{order.actualPrice}}</td>
+
                         <td align="center" v-show="order.payStatus == 0">未付款</td>
                         <td align="center" v-show="order.payStatus == 1">付款中</td>
                         <td align="center" v-show="order.payStatus == 2 || order.payStatus == 4">¥{{order.actualPrice}}</td>
+                        <td align="center" v-show="order.payStatus == 3 ">退款中</td>
+                        <td align="center" v-show="order.payStatus == 5 ">退款关闭</td>
+                        <td align="center" v-show="order.payStatus == 6 ">退款异常</td>
+                        <td align="center" v-show="order.payStatus == 7 ">订单关闭</td>
+                        <td align="center" v-show="order.payStatus == 8 ">支付失败</td>
+
                         <td align="center">¥{{order.tax}}</td>
                     </tr>
                 </table>