Explorar el Código

1.优化退款逻辑代码
2.修改退款恢复库存逻辑
3.websocket根据门店查询取货码
4.新增待恢复库存字段

zcb hace 4 años
padre
commit
4246b36451

+ 3 - 1
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -1043,13 +1043,15 @@ public class OrderController {
      */
     @RequestMapping("/orderRefund")
     public R orderRefund( @RequestBody Map param) {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
         Integer orderId = (Integer) param.get("orderId");
         OrderEntity orderInfo = orderService.queryObject(orderId.longValue());
 
         String sessionId = (String) param.get("sessionId");
 
         try {
-            return orderService.orderRefund(orderInfo,sessionId);
+            return orderService.orderRefund(orderInfo,sessionId,user);
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 42 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/fromccnet/ToBeRestoredInvetoryController.java

@@ -0,0 +1,42 @@
+package com.kmall.admin.controller.fromccnet;
+
+import com.kmall.admin.service.OrderService;
+import com.kmall.common.utils.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-01-15 11:48
+ */
+@RestController
+@RequestMapping("restored")
+public class ToBeRestoredInvetoryController {
+
+    @Autowired
+    private OrderService orderService;
+
+    private final Logger LOGGER = LoggerFactory.getLogger(ToBeRestoredInvetoryController.class);
+
+    @RequestMapping("/toBeRestored/{orderSn}")
+    public R toBeRestored(@PathVariable("orderSn") String orderSn) {
+
+        try {
+            LOGGER.info("开始恢复退单成功的库存,订单号为{}",orderSn);
+            orderService.toBeRestored(orderSn);
+            return R.ok("恢复成功");
+        } catch (Exception e) {
+            LOGGER.info("恢复库存异常,原因为{},订单号为{}",e.getMessage(),orderSn);
+            return R.error(e.getMessage());
+        }
+
+    }
+
+
+}

+ 12 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java

@@ -247,6 +247,10 @@ public class GoodsEntity implements Serializable {
 
     private BigDecimal legalUnit2Qty;
 
+
+    private Integer toBeRestored;
+
+
     public BigDecimal getCosmThresholdValue() {
         return cosmThresholdValue;
     }
@@ -1212,4 +1216,12 @@ public class GoodsEntity implements Serializable {
     public void setActivity(String activity) {
         this.activity = activity;
     }
+
+    public Integer getToBeRestored() {
+        return toBeRestored;
+    }
+
+    public void setToBeRestored(Integer toBeRestored) {
+        this.toBeRestored = toBeRestored;
+    }
 }

+ 11 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/OrderRefundEntity.java

@@ -96,6 +96,8 @@ public class OrderRefundEntity implements Serializable {
 
     private String wechatRefundStatusDes;
 
+    private Integer restore;
+
 
 
     /**
@@ -526,4 +528,13 @@ public class OrderRefundEntity implements Serializable {
     public void setRate(String rate) {
         this.rate = rate;
     }
+
+
+    public Integer getRestore() {
+        return restore;
+    }
+
+    public void setRestore(Integer restore) {
+        this.restore = restore;
+    }
 }

+ 11 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java

@@ -142,6 +142,9 @@ public class ProductStoreRelaEntity implements Serializable {
     // 最后销售时间
     private Date lastSaleTime;
 
+    private Integer toBeRestored;
+
+
     public Date getLastSaleTime() {
         return lastSaleTime;
     }
@@ -597,4 +600,12 @@ public class ProductStoreRelaEntity implements Serializable {
             sellVolume--;
         }
     }
+
+    public Integer getToBeRestored() {
+        return toBeRestored;
+    }
+
+    public void setToBeRestored(Integer toBeRestored) {
+        this.toBeRestored = toBeRestored;
+    }
 }

+ 8 - 2
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -153,7 +153,7 @@ public interface OrderService {
 
     OrderEntity queryObjectByOrderSn(String orderSn);
 
-    R orderRefund(OrderEntity orderInfo, String sessionId) throws Exception;
+    R orderRefund(OrderEntity orderInfo, String sessionId, SysUserEntity user) throws Exception;
 
     int queryOffilineOrderTotal(Query query);
 
@@ -189,7 +189,7 @@ public interface OrderService {
      */
     List<SystemFormatDto> queryExportSystemFormatList(Map<String, Object> params);
 
-    List<OrderEntity> queryLastDayOrder(@Param("comparedDate") String comparedDate);
+    List<OrderEntity> queryLastDayOrder( String comparedDate);
 
     /**
      * 查询CW保税+新零售销售报表第一个sheet
@@ -211,4 +211,10 @@ public interface OrderService {
      * @return
      */
     List<OrderEntity> queryAll201Order();
+
+    /**
+     * 恢复kmall退单冻结的库存
+     * @param orderSn
+     */
+    void toBeRestored(String orderSn);
 }

+ 227 - 15
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -25,6 +25,7 @@ import com.kmall.admin.entity.vip.Mall2MemberPointsEntity;
 import com.kmall.admin.entity.vip.Mall2PointsRulesEntity;
 import com.kmall.admin.fromcomm.dao.SysConfigDao;
 import com.kmall.admin.service.*;
+import com.kmall.admin.service.kmall2eccs.KtoEccsService;
 import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
 import com.kmall.admin.service.mk.store.MkStoreTicketDiscountService;
 import com.kmall.admin.utils.CalculateTax;
@@ -70,7 +71,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.InetAddress;
 import java.net.URLDecoder;
-import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -174,6 +174,11 @@ public class OrderServiceImpl implements OrderService {
     private OrderExceptionRecordService orderExceptionRecordService;
 
 
+    @Autowired
+    private KtoEccsService ktoEccsService;
+
+
+
     @Override
     public OrderEntity queryObject(Long id) {
         return orderDao.queryObject(id);
@@ -713,6 +718,37 @@ public class OrderServiceImpl implements OrderService {
         queryStorePromRealUpdateIsScan(order);
     }
 
+
+    private synchronized void restoreInventory(OrderEntity order, String changeReason) {
+        Map<String, Object> map = new HashMap();
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        map.put("orderId", order.getId());
+        List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
+        for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) {
+            ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao
+                    .queryByGoodsIdAndStoreId(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue());
+            if (null == storeRelaEntity || null == storeRelaEntity.getSellVolume()) {
+                storeRelaEntity.setSellVolume(0);
+            }
+            BigDecimal sellVolume = new BigDecimal(storeRelaEntity.getSellVolume() - orderGoodsEntity.getNumber());//销售量
+            if (sellVolume.compareTo(Constant.ZERO) < 0) {
+                sellVolume = Constant.ZERO;
+            }
+
+            Integer stockNum = 0;
+            GoodsEntity goodsEntity = goodsDao.queryObject(orderGoodsEntity.getGoodsId());
+            if (goodsEntity != null) {
+                stockNum = goodsEntity.getGoodsNumber();
+                //还原商户商品库存
+                resetGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
+            }
+            if (null != storeRelaEntity.getStockNum()) {
+                stockNum = storeRelaEntity.getStockNum();
+                resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);//还原门店库存
+            }
+        }
+    }
+
     private synchronized void updateStock(OrderEntity order, String changeReason) {
         Map<String, Object> map = new HashMap();
         SysUserEntity user = ShiroUtils.getUserEntity();
@@ -788,6 +824,9 @@ public class OrderServiceImpl implements OrderService {
         if (goodsEntity != null) {
             goodsEntity.setGoodsNumber(stockNum + orderGoodsEntity.getNumber());
 //                        goodsEntity.setSellVolume(Integer.parseInt(goodsSellVolume.toString()));
+            if("oms退单成功,恢复库存".equals(changeReason)){
+                goodsEntity.setToBeRestored(goodsEntity.getToBeRestored() - orderGoodsEntity.getNumber());
+            }
             goodsDao.update(goodsEntity);
 
 //            storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
@@ -825,6 +864,9 @@ public class OrderServiceImpl implements OrderService {
                                       OrderGoodsEntity orderGoodsEntity, BigDecimal sellVolume, String changeReason, SysUserEntity user) {
         storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString())); // 减退库存
         storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量
+        if("oms退单成功,恢复库存".equals(changeReason)){
+            storeRelaEntity.setToBeRestored(storeRelaEntity.getToBeRestored() - orderGoodsEntity.getNumber());
+        }
         productStoreRelaDao.update(storeRelaEntity);
 
         StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
@@ -2023,11 +2065,15 @@ public class OrderServiceImpl implements OrderService {
                 resultObj.put("errmsg", "订单提交失败");
                 return resultObj;
             }
+
+            List<OrderGoodsVo> orderGoodsVoList = new ArrayList<>();
+
             for (GoodsEntity goodsDto : goodsEntities) {
 
                 OrderGoodsVo orderGoodsVo = setOrderGoodsVo(order, goodsDto);
                 //新增订单详情
                 orderGoodsDao.saveOrderGoodsVo(orderGoodsVo);
+                orderGoodsVoList.add(orderGoodsVo);
             }
             //清空预订单商品临时表
             Map orderInfoMap = Maps.newHashMap();
@@ -2143,6 +2189,11 @@ public class OrderServiceImpl implements OrderService {
             WebSocketServer.sendMessage(sessionId, order.getOrder_sn(), order.getStore_id()
                     + "");
 
+            // 下单流程完成了,现在将下单的库存明细
+//            orderGoodsVoList
+
+
+
             return resultObj;
         } catch (Exception e) {
             e.printStackTrace();
@@ -2528,10 +2579,10 @@ public class OrderServiceImpl implements OrderService {
         return orderDao.queryObjectByOrderSn(orderSn);
     }
 
-    // TODO  退款的代码
+    // 收银端退款的代码
     @Override
     @Transactional
-    public synchronized R orderRefund(OrderEntity order, String sessionId) throws Exception {
+    public synchronized R orderRefund(OrderEntity order, String sessionId, SysUserEntity user) throws Exception {
         String payFlag = order.getPayFlag();
 
         if (Dict.payFlag.item_weixin.getItem().equals(payFlag)) {
@@ -2550,10 +2601,28 @@ public class OrderServiceImpl implements OrderService {
             String refundResult = "";
             if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
                 LOGGER.info("微信退款开始");
-                refundResult = wxRefund(orderInfo, totalActualPrice);
-                if (org.apache.commons.lang3.StringUtils.isNotBlank(refundResult)) {
-                    return R.error(refundResult);
+
+                WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getOrderSn().toString(), totalActualPrice,
+                        orderInfo.getActualPrice().doubleValue());
+                OrderRefundEntity orderRefund = new OrderRefundEntity();
+                orderRefund.setRefundId(result.getRefund_id());
+                orderRefund.setOutRefundNo(result.getOut_trade_no());
+                orderRefund.setRefundMoney(BigDecimal.valueOf(Long.valueOf(result.getRefund_fee())).divide(Constant.ONE_HUNDRED));
+                orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款处理中
+                orderRefund.setModTime(new Date());
+                orderRefund.setRefundTime(new Date());
+                orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
+                orderRefund.setUserId(user.getUserId().intValue());
+                orderRefund.setRefundId(order.getUserId() + "");
+                orderRefund.setCreateTime(new Date());
+                List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
+                if (list.size() > 1) {//多条订单
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_2.getItem()));//部分退款
+                } else {
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
                 }
+
+
                 order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem()));
                 order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
                 LOGGER.info("微信退款");
@@ -2563,27 +2632,49 @@ public class OrderServiceImpl implements OrderService {
                 PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
                 pickUpCodeEntity.setPickUpCodeStatus("3");
                 pickUpCodeService.update(pickUpCodeEntity);
-                updateStock(order, "收银端退款");
+
+                // 判断该订单是否进入oms系统
+                if(!arrivedOms(order.getOrderSn())){
+                    // oms无该订单,则直接退款
+                    restoreInventory(order, "收银端退款");
+                    orderRefund.setRestore(1);
+                } else{
+                    // 如果oms有订单,统一进入锁库存情况
+                    orderRefund.setRestore(0);
+                    toBeRestoreInventory(order);
+                }
+
+                orderRefundDao.save(orderRefund);//退款记录
             }
             // 支付宝的退款代码
         } else if (Dict.payFlag.item_alipay.getItem().equals(payFlag)) {
 
+            OrderEntity orderInfo = order;
+            if (null == orderInfo) {
+                return R.error("订单不存在");
+            }
+            if (orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_401.getItem()) ||
+                    orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) {
+                return R.error("订单已退款");
+            }
+
             AliPayMicropayApiResult userRefund = AliPayUtil.aliTradeRefund(order.getOrderSn(), order.getActualPrice().toString(),
                     "用户退款", order.getStoreId() + "");
 
             LOGGER.info(userRefund.getSubMsg());
-            order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem()));
-            order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
+
             OrderRefundEntity orderRefund = new OrderRefundEntity();
             orderRefund.setRefundId(userRefund.getTradeNo());
             orderRefund.setOutRefundNo(userRefund.getOutTradeNo());
-            orderRefund
-                    .setRefundMoney(new BigDecimal(userRefund.getRefundFee()));
+            orderRefund.setRefundMoney(new BigDecimal(userRefund.getRefundFee()));
+
+
             orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_2.getItem()));//退款成功
             orderRefund.setModTime(new Date());
             orderRefund.setRefundTime(new Date());
             orderRefund.setOrderId(Integer.parseInt(order.getId() + ""));
-            orderRefund.setUserId(Integer.parseInt(order.getUserId() + ""));
+            orderRefund.setUserId(user.getUserId().intValue());
+            orderRefund.setRefundId(order.getUserId() + "");
             orderRefund.setCreateTime(new Date());
             List<OrderEntity> list = orderDao.queryObjectByMerchOrderSn(order.getMerchOrderSn());
             if (list.size() > 1) {//多条订单
@@ -2591,19 +2682,114 @@ public class OrderServiceImpl implements OrderService {
             } else {
                 orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));//用户全额退款
             }
-            orderRefundDao.save(orderRefund);//退款记录
 
+
+            order.setPayStatus(Integer.parseInt(Dict.payStatus.item_5.getItem()));
+            order.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_401.getItem()));
             orderDao.update(order);//修改为退款成功
             // 修改取货码
             PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
             pickUpCodeEntity.setPickUpCodeStatus("3");
             pickUpCodeService.update(pickUpCodeEntity);
-            updateStock(order, "收银端退款");
+            // 判断该订单是否进入oms系统
+            if(!arrivedOms(order.getOrderSn())){
+                // oms无该订单,则直接退款
+                restoreInventory(order, "收银端退款");
+                orderRefund.setRestore(1);
+            } else{
+                // 如果oms有订单,统一进入锁库存情况
+                orderRefund.setRestore(0);
+                toBeRestoreInventory(order);
+            }
+
+            orderRefundDao.save(orderRefund);//退款记录
         }
 
         return R.ok("退款成功");
     }
 
+    @Transactional
+    public void toBeRestoreInventory(OrderEntity order) {
+
+        Map<String, Object> map = new HashMap();
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        map.put("orderId", order.getId());
+        List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
+        for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) {
+            Integer restoreNumber = orderGoodsEntity.getNumber();
+            ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao
+                    .queryByGoodsIdAndStoreId(order.getStoreId().longValue(), orderGoodsEntity.getGoodsId().longValue());
+            Integer toBeRestored = storeRelaEntity.getToBeRestored();
+            if(toBeRestored == null){
+                toBeRestored = 0;
+            }
+            // 修改待退款的数量
+            storeRelaEntity.setToBeRestored(toBeRestored +restoreNumber);
+
+            GoodsEntity goodsEntity = goodsDao.queryObject(orderGoodsEntity.getGoodsId());
+
+            toBeRestored = goodsEntity.getToBeRestored();
+            if(toBeRestored == null){
+                toBeRestored = 0;
+            }
+            goodsEntity.setToBeRestored(toBeRestored+restoreNumber);
+
+
+            productStoreRelaDao.update(storeRelaEntity);
+            goodsDao.update(goodsEntity);
+        }
+
+    }
+
+    /**
+     * 查询oms系统是否有该订单
+     * @param orderSn
+     * @return
+     */
+    private boolean arrivedOms(String orderSn) {
+
+        Map<String, String> sParaTemp = new TreeMap<String, String>();
+        sParaTemp.put("data","ZWCW2020122749351849");
+//        sParaTemp.put("data",orderSn);
+        sParaTemp.put("merchId",omsMerchProperties.getMerchSn());
+        String timestamp = String.valueOf(System.currentTimeMillis()/1000);
+        sParaTemp.put("timestamp", timestamp);
+        //生成要请求给oms秘钥
+//        String sign = OmsSign.sign(sParaTemp,cus.getWaybill().get("secret-key"));
+        LOGGER.info("md5混淆码参数:" + omsMerchProperties.getMd5Salt());
+        String sign = OmsSign.sign(sParaTemp,omsMerchProperties.getMd5Salt());
+        sParaTemp.put("sign", sign);
+        //构建Request
+        String  url = omsMerchProperties.getQueryInveResponseUrl();
+        Request request = com.kmall.admin.utils.oms.OkHttpUtils.buildRequest(url, JSON.toJSONString(sParaTemp));
+        LOGGER.info("oms的请求报文:" + request);
+        // 同步访问,返回结果字符串
+        String responseString = null;
+        try {
+
+            responseString = com.kmall.admin.utils.oms.OkHttpUtils.post(request);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        LOGGER.info("oms的响应报文"+responseString);
+        //解析响应数据
+        Gson gson = new Gson();
+        ResponseMessage result = gson.fromJson(responseString, ResponseMessage.class);
+        if(result == null){
+            String info = "解析响应数据Result失败";
+            LOGGER.error("--- {}", info);
+            throw new RuntimeException(info);
+        }
+        if("oms无该订单".equals(result.getMsg())){
+            return false;
+        }
+
+        return true;
+
+    }
+
 
     private String wxRefund(OrderEntity orderInfo, Double totalActualPrice) {
         WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getOrderSn().toString(), totalActualPrice,
@@ -2871,7 +3057,6 @@ public class OrderServiceImpl implements OrderService {
         sParaTemp.put("sign", sign);
         //构建Request
         String  url = omsMerchProperties.getQueryInveResponseUrl();
-//        url = "http://127.0.0.1:8680/al/queryInveResponse";
         Request request = com.kmall.admin.utils.oms.OkHttpUtils.buildRequest(url, JSON.toJSONString(sParaTemp));
         LOGGER.info("oms的请求报文:" + request);
         // 同步访问,返回结果字符串
@@ -2924,6 +3109,33 @@ public class OrderServiceImpl implements OrderService {
 
     }
 
+    /**
+     * 恢复kmall退单冻结的库存
+     *
+     * @param orderSn
+     */
+    @Override
+    @Transactional
+    public void toBeRestored(String orderSn) {
+
+        // 查询该订单在库存是否已经释放过,避免重复恢复库存
+        OrderEntity orderInfo = orderDao.queryObjectByOrderSn(orderSn);
+        OrderRefundEntity orderRefundEntity = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+        if(orderRefundEntity == null){
+            LOGGER.error("该订单无退款记录,订单号{}",orderSn);
+            throw new RuntimeException("该订单无退款记录,订单号:"+orderSn);
+        }
+        Integer restore = orderRefundEntity.getRestore();
+        if(restore == 1){
+            LOGGER.error("该订单库存记录已恢复过,订单号{}",orderSn);
+            throw new RuntimeException("该订单库存记录已恢复过,订单号:"+orderSn);
+        }
+        restoreInventory(orderInfo,"oms退单成功,恢复库存");
+        orderRefundEntity.setRestore(1);
+        orderRefundService.update(orderRefundEntity);
+
+    }
+
 
     /**
      * 设置订单数据

+ 4 - 2
kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java

@@ -290,6 +290,7 @@ public class CalculateTax {
                                 // 如果用23.06去计算,还是大于阈值,那就是用23.06去计税
                                 return getTax(retailPrice, consumerGoodsRate);
                             }else{
+                                // TODO 这块需要报错
                                 BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
                                 return tax;
                             }
@@ -305,6 +306,8 @@ public class CalculateTax {
                             // 如果不是,重新用0.091计算一次
                             gramOrMlUnitPrice = getUnitPrice(retailPrice, noConsumerGoodsRate, cusGoodsName, qty1, qty2);
                             if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
+//                                throw new RuntimeException("商品价格有误!");
+                                // TODO 这块需要报错
                                 BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
                                 return tax;
 
@@ -362,8 +365,7 @@ public class CalculateTax {
         BigDecimal noConsumerTaxPrice = retailPrice.divide(BigDecimal.ONE.add(noConsumerGoodsRate),10,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP);
         BigDecimal tax1 = noConsumerTaxPrice.multiply(consumerGoodsRate).setScale(10,RoundingMode.HALF_UP);
         BigDecimal finalPrice1 = tax1.add(noConsumerTaxPrice);
-// 394.78
-// 310.29
+
 
         BigDecimal consumerTaxPrice = retailPrice.divide(BigDecimal.ONE.add(consumerGoodsRate),10,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP);
         BigDecimal tax2 = consumerTaxPrice.multiply(noConsumerGoodsRate).setScale(10,RoundingMode.HALF_UP);

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/websocket/WebSocketServer.java

@@ -80,7 +80,7 @@ public class WebSocketServer {
             // 查询所有的取货码
         Map<String,Object> dataParam = new HashMap<>();
         dataParam.put("pickUpCodeCreatetime",new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
-//        dataParam.put("pickUpCodeStatus","0");
+        dataParam.put("storeId",param);
         pickUpList = pickUpCodeService.queryList(dataParam);
         pickUpCodeMap.put(param,pickUpList);
 //        }

+ 11 - 5
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -81,6 +81,7 @@
         <result column="legal_unit1_qty" property="legalUnit1Qty"/>
         <result column="legal_unit2_qty" property="legalUnit2Qty"/>
         <result column="cosm_threshold_value" property="cosmThresholdValue"/>
+        <result column="to_be_restored" property="toBeRestored" />
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.GoodsEntity">
@@ -130,6 +131,7 @@
         a.is_limited,
         a.is_hot,
         a.merch_sn,
+        a.to_be_restored,
         m.merch_name,
         psr1.store_id,
         psr1.market_price,
@@ -183,6 +185,7 @@
         a.is_limited,
         a.is_hot,
         a.merch_sn,
+        a.to_be_restored,
         m.merch_name,
         psr1.store_id,
         psr1.market_price,
@@ -206,7 +209,7 @@
     <select id="queryObjectByProdBarcodeAndBizType" resultType="com.kmall.admin.entity.GoodsEntity">
         SELECT
             a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',
-            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -218,7 +221,7 @@
     <select id="queryObjectByProdBarcodeAndStore" resultType="com.kmall.admin.entity.GoodsEntity">
          SELECT
             a.id,a.sku,a.goods_number,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',a.goods_rate as goodsRate,
-            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -231,7 +234,7 @@
     <select id="queryObjectByProdBarcode" resultType="com.kmall.admin.entity.GoodsEntity">
         SELECT
         a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',
-        a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
+        a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
         FROM
         mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -248,7 +251,7 @@
     <select id="queryGoodsDetailsByProdBarcode" resultType="com.kmall.admin.dto.GoodsDetailsDto">
         SELECT distinct
         a.goods_sn as GoodsSn,m.retail_price as retailPrice,a.prod_barcode as prodBarcode,a.name,a.brand,a.goods_desc as goodsDesc,a.goods_unit as goodsUnit,a.goods_rate as goodsRate,a.primary_pic_url ,m.stock_num as stockNum,r.value as specification
-        ,a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
+        ,a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
         FROM
             mall_goods a
         LEFT JOIN mall_goods_specification r ON r.goods_id = a.id
@@ -524,6 +527,7 @@
 			`legal_unit1_qty`,
 			`legal_unit2_qty`,
 			`cosm_threshold_value`,
+			`to_be_restored`,
 			`tstm`)
 		values(
 			#{merchSn},
@@ -586,6 +590,7 @@
 			#{legalUnit1Qty},
 			#{legalUnit2Qty},
 			#{cosmThresholdValue},
+			#{toBeRestored},
 			#{tstm})
     </insert>
 
@@ -654,6 +659,7 @@
             <if test="legalUnit1Qty != null">`legal_unit1_qty` = #{legalUnit1Qty},</if>
             <if test="legalUnit2Qty != null">`legal_unit2_qty` = #{legalUnit2Qty},</if>
             <if test="cosmThresholdValue != null">`cosm_threshold_value` = #{cosmThresholdValue}</if>
+            <if test="toBeRestored != null">`to_be_restored` = #{toBeRestored}</if>
         </set>
         where id = #{id}
     </update>
@@ -780,7 +786,7 @@
     <select id="queryListByBarcode" resultType="com.kmall.admin.entity.GoodsEntity">
          SELECT
             a.id,a.sku,a.goods_number,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',a.goods_rate as goodsRate,
-            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id

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

@@ -39,6 +39,7 @@
         <result property="cashRefundFeeType" column="cash_refund_fee_type"/>
         <result property="rate" column="rate"/>
         <result property="thirdPartyMerchCode" column="thirdPartyMerchCode"/>
+        <result property="restore" column="restore"/>
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.OrderRefundEntity">
@@ -67,6 +68,7 @@
         r.approval_time,
         r.approval_remark,
         r.create_time,
+        r.restore,
         o.order_sn,
         o.order_status,
         o.actual_price,
@@ -227,6 +229,7 @@
 			`approval_time`,
 			`approval_remark`,
 			create_time,
+			restore,
 			`out_refund_no`)
 		values(
 			#{orderId},
@@ -249,6 +252,7 @@
 			#{approvalTime},
 			#{approvalRemark},
 			#{createTime},
+			#{restore},
 			#{outRefundNo})
 	</insert>
 
@@ -276,6 +280,7 @@
             <if test="approvalRemark != null">`approval_remark` = #{approvalRemark},</if>
             <if test="outRefundNo != null">`out_refund_no` = #{outRefundNo},</if>
             <if test="modTime != null">`mod_time` = #{modTime},</if>
+            <if test="restore != null">`restore` = #{restore},</if>
         </set>
         where id = #{id}
     </update>
@@ -295,4 +300,4 @@
         select * from mall_order_refund
         where order_id = #{orderId}
     </select>
-</mapper>
+</mapper>

+ 3 - 0
kmall-admin/src/main/resources/mybatis/mapper/PickUpCodeDao.xml

@@ -66,6 +66,9 @@
 		<if test="pickUpCodeStatus != null and pickUpCodeStatus.trim() != ''">
 			AND `pick_up_code_status` = #{pickUpCodeStatus}
 		</if>
+		<if test="storeId != null and storeId.trim() != ''">
+			AND `store_id` = #{storeId}
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}

+ 17 - 5
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -49,6 +49,7 @@
         <result column="bottom_line_price" property="bottomLinePrice" />
         <result column="park_stock" property="parkStock" />
         <result column="last_sale_time" property="lastSaleTime" jdbcType="TIMESTAMP"/>
+        <result column="to_be_restored" property="toBeRestored" />
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
@@ -74,6 +75,7 @@
             a.`bottom_line_price`,
             a.`park_stock`,
             a.tstm,
+            a.to_be_restored,
             b.goods_sn goodsSn,
             c.goods_sn productSn,
             b.NAME goodsName,
@@ -107,7 +109,7 @@
             a.`market_price`,
             a.`stock_price`,
             a.`sell_volume`,
-            a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,
+            a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,a.to_be_restored,
             b.goods_sn goodsSn,
             c.goods_sn productSn,
             b.name goodsName,
@@ -142,7 +144,7 @@
             a.`market_price`,
             a.`stock_price`,
             a.`sell_volume`,
-            a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,
+            a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,a.to_be_restored,
             a.category_id,
             a.attribute_category,
             a.brand_id,
@@ -169,6 +171,7 @@
             a.`batch_expire_date`,
             a.`bottom_line_price`,
             a.last_sale_time,
+            a.to_be_restored,
             b.goods_number as parkStock,
             b.is_hot 'isHot',
             b.is_on_sale 'isOnSale',
@@ -273,7 +276,7 @@
         a.`market_price`,
         a.`stock_price`,
         a.`sell_volume`,
-        a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,
+        a.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,a.to_be_restored,
         b.goods_sn goodsSn,
         c.goods_sn productSn,
         b.name goodsName,
@@ -439,7 +442,10 @@
             park_stock,
         </if>
         <if test="bottomLinePrice != null" >
-            bottom_line_price
+            bottom_line_price,
+        </if>
+        <if test="toBeRestored != null">
+            to_be_restored
         </if>
         )
 		values(
@@ -497,7 +503,10 @@
             #{parkStock,jdbcType=VARCHAR},
         </if>
         <if test="bottomLinePrice != null" >
-            #{bottomLinePrice,jdbcType=VARCHAR}
+            #{bottomLinePrice,jdbcType=VARCHAR},
+        </if>
+        <if test="toBeRestored != null" >
+            #{toBeRestored,jdbcType=VARCHAR}
         </if>
         )
 	</insert>
@@ -564,6 +573,9 @@
             <if test="lastSaleTime != null" >
                 last_sale_time = #{lastSaleTime,jdbcType=TIMESTAMP}
             </if>
+            <if test="toBeRestored != null" >
+                to_be_restored = #{toBeRestored,jdbcType=VARCHAR}
+            </if>
         </set>
         where id = #{id}
     </update>

+ 1 - 0
kmall-admin/src/main/resources/spring/spring-shiro.xml

@@ -79,6 +79,7 @@
                 /low-mp-ver.html=anon
                 /pcd/hbk6zzez.html=anon
                 /ws/server/**=anon
+                /restored/toBeRestored/**=anon
                 /**=authc
             </value>
         </property>

+ 4 - 3
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -616,7 +616,8 @@ let vm = new Vue({
         },2000),
         debounceRefund:debounce(function(){
             toRefund();
-        },5000),
+            // alert(123113131);
+        },2000),
         queryGoods: function(){
             vm.storeId = sessionStorage.getItem("storeId");
             $.get("../goods/queryGoodsName?storeId="+vm.storeId+"&goodsName=", function (r) {
@@ -1273,9 +1274,9 @@ function openWebSocket() {
         //注意ws、wss使用不同的端口。我使用自签名的证书测试,
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
-        webSocket = new WebSocket("ws://183.3.221.143:8080/ws/server/"+storeId);
+        // webSocket = new WebSocket("ws://183.3.221.143:8080/ws/server/"+storeId);
         // webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
-        // webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+storeId);
+        webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+163);
         // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
             console.log('1.连接正在打开......');

+ 3 - 2
kmall-admin/src/main/webapp/js/shop/goods.js

@@ -6,8 +6,9 @@ $(function () {
             // {label: 'ID', name: 'id', index: 'id', width: 60, key: true},
             {label: '商户名称', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 160, align: 'center'},
-            {label: '商品编码', name: 'goodsSn', index: 'goods_Sn', width: 180, align: 'center'},
-            {label: 'SKU', name: 'sku', index: 'sku', width: 180, align: 'center'},
+            {label: '海关商品编码', name: 'hsCode', index: 'hs_code', width: 180, align: 'center'},
+            {label: '料件号', name: 'sku', index: 'sku', width: 180, align: 'center'},
+            {label: 'sku', name: 'sku', index: 'sku', width: 180, align: 'center'},
             {label: 'PLU', name: 'plu', index: 'plu', width: 180, align: 'center'},
             {label: 'mychemId', name: 'mychemId', index: 'mychemId', width: 180, align: 'center'},
             {label: '英文名称', name: 'englishName', index: 'englishName', width: 180, align: 'center'},