Kaynağa Gözat

1.发短信内容修改
2.小票打印模板
3.登录取消验证码校验
4.收银端页面优化

zcb 4 yıl önce
ebeveyn
işleme
ba8431ff9e

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/OrderEntity.java

@@ -163,6 +163,8 @@ public class OrderEntity implements Serializable {
      * 国检规格型号
      */
     private String ciqProdModel;
+
+    private String pickUpCodeSn;
     /**
      * 原产国代码,海关编码
      */
@@ -1117,4 +1119,12 @@ public class OrderEntity implements Serializable {
     public void setTax(BigDecimal tax) {
         this.tax = tax;
     }
+
+    public String getPickUpCodeSn() {
+        return pickUpCodeSn;
+    }
+
+    public void setPickUpCodeSn(String pickUpCodeSn) {
+        this.pickUpCodeSn = pickUpCodeSn;
+    }
 }

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysLoginController.java

@@ -84,9 +84,9 @@ public class SysLoginController {
         LOGGER.info("获取验证码:"+kaptcha);
         System.out.println(kaptcha);
         JedisUtil.del(Constants.KAPTCHA_SESSION_KEY);
-        if (!captcha.equalsIgnoreCase(kaptcha)) {
-            return R.error("验证码不正确");
-        }
+//        if (!captcha.equalsIgnoreCase(kaptcha)) {
+//            return R.error("验证码不正确");
+//        }
 
         try {
             Subject subject = ShiroUtils.getSubject();

+ 19 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderProcessRecordServiceImpl.java

@@ -1,12 +1,16 @@
 package com.kmall.admin.service.impl;
 
 import com.kmall.admin.dao.OrderProcessRecordDao;
+import com.kmall.admin.dao.PickUpCodeDao;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
+import com.kmall.admin.entity.PickUpCodeEntity;
 import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.admin.service.PickUpCodeService;
 import com.kmall.api.util.SendMsgUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -25,6 +29,9 @@ import java.util.concurrent.Executors;
 public class OrderProcessRecordServiceImpl implements OrderProcessRecordService {
     @Autowired
     private OrderProcessRecordDao orderProcessRecordDao;
+    @Autowired
+    private PickUpCodeService pickUpCodeService;
+
 
     @Override
     public OrderProcessRecordEntity queryObject(Integer id) {
@@ -68,6 +75,9 @@ public class OrderProcessRecordServiceImpl implements OrderProcessRecordService
 
     @Override
     public void sendCustomsSuccessSms() {
+
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-ss");
+
         // 找到清关成功没发短信的订单
         List <OrderProcessRecordEntity> recordList = orderProcessRecordDao.queryListBySendSmsStatus("0");
         if (Objects.nonNull(recordList) && recordList.size()>0){
@@ -76,10 +86,17 @@ public class OrderProcessRecordServiceImpl implements OrderProcessRecordService
                 orderProcessRecordDao.update(orderProcessRecordEntity);
             }
             for (OrderProcessRecordEntity orderProcessRecordEntity : recordList) {
-                String sendTemplate = "【CW惠州门店】惠州港惠店 尊敬的CW会员,您购买的订单"
-                        +orderProcessRecordEntity.getOrderSn()+",已清关成功,感谢您的耐心等待。";
+                String orderSn = orderProcessRecordEntity.getOrderSn();
+                // 查询
+
                 new Thread(()->{
                     try {
+
+
+                        PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(orderSn);
+                        String sendTemplate = "【CW惠州门店】惠州港惠店 尊敬的CW会员,您在"+format.format(format.parse(pickUpCodeEntity.getPickUpCodeCreatetime()))+"购买的订单"
+                                + orderSn +",取货码"+pickUpCodeEntity.getPickUpCodeSn()+",已清关成功,感谢您的耐心等待。";
+
                         SendMsgUtil.sendMsg(orderProcessRecordEntity.getPayMobile(), sendTemplate);
                         orderProcessRecordEntity.setCustomsSendSmsStatus("1");//如果发送失败更新表
                         orderProcessRecordDao.update(orderProcessRecordEntity);

+ 90 - 46
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -322,17 +322,24 @@ public class OrderServiceImpl implements OrderService {
         List<Goods> goodsList = new ArrayList<>();
         for (OrderGoodsEntity orderGoods : orderGoodsEntityList) {
             goodsTotal += orderGoods.getNumber();
-            total = total.add(orderGoods.getMarketPrice().multiply(new BigDecimal(orderGoods.getNumber())))
+            total = total.add(orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber())))
                          .setScale(2, BigDecimal.ROUND_HALF_UP);
-            taxTotal = taxTotal.add(orderGoods.getGoodsRate().multiply(orderGoods.getMarketPrice()).setScale(2, BigDecimal.ROUND_HALF_UP));
-            Goods goods = new Goods(orderGoods.getGoodsName(), orderGoods.getMarketPrice().toString(),
-                                    orderGoods.getGoodsRate().multiply(orderGoods.getMarketPrice()).setScale(2, BigDecimal.ROUND_HALF_UP).toString(),
+
+            BigDecimal currentTax = orderGoods.getGoodsRate().multiply(orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber())))
+                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            taxTotal = taxTotal.add(currentTax);
+
+            Goods goods = new Goods(orderGoods.getGoodsName(),
+                                    orderGoods.getRetailPrice().toString(),
+                                    currentTax.toString(),
                                     orderGoods.getNumber().toString(),
-                                    orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber()))
-                                              .setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+                                    new BigDecimal(orderGoods.getNumber()).multiply(orderGoods.getRetailPrice()).setScale(2,RoundingMode.HALF_UP).toString());
             goodsList.add(goods);
+            LOGGER.info(goods.toString());
         }
 
+
+
         // 收银信息
         CashInfo cashInfo = new CashInfo();
         cashInfo.setGoodsTotal(goodsTotal.toString());
@@ -387,21 +394,31 @@ public class OrderServiceImpl implements OrderService {
         BigDecimal total = Constant.ZERO; // 商品总计
         BigDecimal taxTotal = Constant.ZERO; //税费总计
         List<Goods> goodsList = new ArrayList<>();
+        BigDecimal discountedPrice = Constant.ZERO; // 优惠金额
         for (OrderGoodsEntity orderGoods : orderGoodsEntityList) {
             goodsTotal += orderGoods.getNumber();
-            BigDecimal totalPirce = orderGoods.getMarketPrice().add(orderGoods.getDiscountedPrice()).setScale(2,BigDecimal.ROUND_HALF_DOWN);
-            total = total.add(totalPirce);
-//            total = total.add(orderGoods.getMarketPrice().multiply(new BigDecimal(orderGoods.getNumber())))
-//                    .setScale(2, BigDecimal.ROUND_HALF_UP);
-            BigDecimal uprice = totalPirce.divide(new BigDecimal(orderGoods.getNumber()), 2, 5); // 单价
-            taxTotal = taxTotal.add((uprice.divide((new BigDecimal(1)).add(orderGoods.getGoodsRate()), 2, 5)).multiply(orderGoods.getGoodsRate())
-                    .setScale(2,BigDecimal.ROUND_HALF_DOWN));
-
-            Goods goods = new Goods(orderGoods.getGoodsName(), uprice.toString(),
-                                    orderGoods.getGoodsRate().multiply(orderGoods.getMarketPrice()).setScale(2, BigDecimal.ROUND_HALF_UP).toString(),
-                                    orderGoods.getNumber().toString(),
-                                    orderGoods.getActualPaymentAmount().toString());
+            total = total.add(orderGoods.getRetailPrice().multiply(new BigDecimal(orderGoods.getNumber())))
+                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            discountedPrice = discountedPrice.add(orderGoods.getDiscountedPrice());
+
+            // 税前价
+            BigDecimal beforeTaxPrice = orderGoods.getRetailPrice().divide(new BigDecimal(1).add(orderGoods.getGoodsRate()), 2, RoundingMode.HALF_UP);
+
+            BigDecimal currentTax = orderGoods.getGoodsRate() // 税率
+                    .multiply(beforeTaxPrice // 税前价
+                            .multiply(new BigDecimal(orderGoods.getNumber()))) // 数量
+                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+            taxTotal = taxTotal.add(currentTax);
+
+            Goods goods = new Goods(orderGoods.getGoodsName(),
+                    orderGoods.getRetailPrice().toString(), // 含税价
+//                    beforeTaxPrice.toString(),// 税前价
+                    currentTax.toString(),
+                    orderGoods.getNumber().toString(),
+                    new BigDecimal(orderGoods.getNumber()).multiply(orderGoods.getRetailPrice()).setScale(2,RoundingMode.HALF_UP).toString(),
+                    orderGoods.getDiscountedPrice().toString());
             goodsList.add(goods);
+            LOGGER.info(goods.toString());
         }
 
         // 收银信息
@@ -410,12 +427,15 @@ public class OrderServiceImpl implements OrderService {
         cashInfo.setTotal(total.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
         cashInfo.setTaxTotal(taxTotal.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
         cashInfo.setReceipts(orderEntity.getActualPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
-        cashInfo.setOddChange("0.00");
+        cashInfo.setOddChange(discountedPrice.toString());
         cashInfo.setCoupon(orderEntity.getCouponPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
         cashInfo.setFreight(
                 new BigDecimal(orderEntity.getFreightPrice()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
-        cashInfo.setPaymentMode("支付宝支付");
-
+        if("alipay".equals(orderEntity.getPayFlag())){
+            cashInfo.setPaymentMode("支付宝支付");
+        }else {
+            cashInfo.setPaymentMode("微信支付");
+        }
         // 海关清单
         CusListing cusListing = new CusListing();
         cusListing.setOrderId(orderEntity.getOrderSn());
@@ -1878,6 +1898,11 @@ public class OrderServiceImpl implements OrderService {
                 merchUserEntity.setCreateTime(new Date());
                 merchUserEntity.setIsLoadGoods("0");
                 merchUserDao.save(merchUserEntity);
+            }else{
+                userEntity.setUsername((String) userInfo.get("customName"));
+                userEntity.setIdNo((String) userInfo.get("customIDCard"));
+                userEntity.setMobile((String) userInfo.get("customPhone"));
+                userDao.update(userEntity);
             }
 
             // TODO 查询使用的优惠券,并减扣金额
@@ -1962,13 +1987,19 @@ public class OrderServiceImpl implements OrderService {
             // 判断是微信的支付码还是支付宝的支付码
             if (parCode.startsWith("28")) {
                 // 支付宝支付
-                AliPay(user, parCode , order, processRecordEntity, orderWXPayRecordCurrent, store);
+                try {
+                    AliPay(user, parCode , order, processRecordEntity, orderWXPayRecordCurrent, store);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    throw e;
+                }
 
             }else{
             // 微信支付
                 try {
                     wxPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
                 } catch (Exception e) {
+                    e.printStackTrace();
                     throw e;
                 }
 
@@ -2159,10 +2190,20 @@ public class OrderServiceImpl implements OrderService {
     private void AliPay(SysUserEntity user, String parCode,  OrderVo order, OrderProcessRecordEntity processRecordEntity, OrderWXPayRecordEntity orderWXPayRecordCurrent, StoreEntity store) throws Exception {
 
         AliPayRequestParams params = new AliPayRequestParams();
+
+        String orderBizTypeZn = "普通货物";
+        if ("00".equals(order.getOrderBizType())) {
+            orderBizTypeZn = "保税备货";
+        } else if ("02".equals(order.getOrderBizType())) {
+            orderBizTypeZn = "保税展示补货";
+        } else if ("10".equals(order.getOrderBizType())) {
+            orderBizTypeZn = "保税展示跨境";
+        }
+
         params.setAuthCode(parCode);
         params.setBody(order.getApprovalRemark());
         params.setOutTradeNo(order.getOrder_sn());
-        params.setSubject("CW下单");
+        params.setSubject(store.getMerchName() + "-" + store.getStoreName() + "-" + orderBizTypeZn);
         params.setStoreId(store.getId()+"");
         params.setTotalAmount(order.getActual_price().setScale(2,BigDecimal.ROUND_HALF_UP)+"");
         LOGGER.info("调用阿里支付接口的请求参数:"+JacksonUtils.toJson(params));
@@ -2282,28 +2323,28 @@ public class OrderServiceImpl implements OrderService {
             //查询当前订单所有的支付记录
             List<OrderWXPayRecordEntity> orderWXPayRecordEntitys =
                     orderWXPayRecordService.getRecordsByOutTradeNo(order.getOrder_sn());
-            for (OrderWXPayRecordEntity orderWXPayRecordTemp : orderWXPayRecordEntitys) {
-                //查询出来的记录排除当前已支付成功的记录,对其他记录交易状态为未撤销,未关闭的订单,调用撤销订单
-                if (orderWXPayRecordTemp.getId() != orderWXPayRecordCurrent.getId() &&
-                        (!WechatUtil.WXTradeState.REVOKED.getCode().equals(orderWXPayRecordTemp.getTradeState()) ||
-                                !WechatUtil.WXTradeState.CLOSED.getCode().equals(orderWXPayRecordTemp.getTradeState()))) {
-                    WechatReverseApiResult wechatReverseApiResult =
-                            WechatUtil.wxReverse(orderWXPayRecordTemp.getOutTradeNoWX());
-                    //撤销订单成功
-                    if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getReturn_code()) &&
-                            WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getResult_code())) {
-                        //调用订单查询接口
-                        WechatRefundApiResult wechatRefundApiResult =
-                                WechatUtil.wxOrderQuery(orderWXPayRecordTemp.getOutTradeNoWX());
-                        if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getReturn_code()) &&
-                                WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getResult_code())) {
-                            // 修改订单支付记录
-                            orderWXPayRecordService
-                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
-                        }
-                    }
-                }
-            }
+//            for (OrderWXPayRecordEntity orderWXPayRecordTemp : orderWXPayRecordEntitys) {
+//                //查询出来的记录排除当前已支付成功的记录,对其他记录交易状态为未撤销,未关闭的订单,调用撤销订单
+//                if (orderWXPayRecordTemp.getId() != orderWXPayRecordCurrent.getId() &&
+//                        (!WechatUtil.WXTradeState.REVOKED.getCode().equals(orderWXPayRecordTemp.getTradeState()) ||
+//                                !WechatUtil.WXTradeState.CLOSED.getCode().equals(orderWXPayRecordTemp.getTradeState()))) {
+//                    WechatReverseApiResult wechatReverseApiResult =
+//                            WechatUtil.wxReverse(orderWXPayRecordTemp.getOutTradeNoWX());
+//                    //撤销订单成功
+//                    if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getReturn_code()) &&
+//                            WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getResult_code())) {
+//                        //调用订单查询接口
+//                        WechatRefundApiResult wechatRefundApiResult =
+//                                WechatUtil.wxOrderQuery(orderWXPayRecordTemp.getOutTradeNoWX());
+//                        if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getReturn_code()) &&
+//                                WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getResult_code())) {
+//                            // 修改订单支付记录
+//                            orderWXPayRecordService
+//                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
+//                        }
+//                    }
+//                }
+//            }
             LOGGER.info("wechatMicropayApiResult.getTransaction_id()"+wechatMicropayApiResult.getTransaction_id());
 
             Map orderRaram = Maps.newHashMap();
@@ -2361,7 +2402,7 @@ public class OrderServiceImpl implements OrderService {
             } else {
                 r = R.error(wechatReverseApiResult.getErr_code_des());
             }
-
+            throw new RuntimeException("订单支付失败");
         }
         }
 
@@ -2389,6 +2430,9 @@ public class OrderServiceImpl implements OrderService {
                     processParam.put("orderSn", orderSn);
                     orderDao.updateOrderProcessRecord(processParam);
 
+//                    orderWXPayRecordService
+//                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
+
 
                     // 设置支付单完成时间
                     processRecordEntity.setPaymentSuccTimeStr(result.getTime_end());

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

@@ -72,6 +72,7 @@
         <result property="fullCutPrice" column="full_cut_price"/>
         <result property="campMinusId" column="camp_minus_id"/>
         <result property="campName" column="camp_name"/>
+        <result property="pickUpCodeSn" column="pick_up_code_sn"/>
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.OrderEntity">
@@ -395,7 +396,8 @@
         p.is_payment_send,
         p.is_ele_order_send,
         p.is_customs_send,
-        s.store_name storeName
+        s.store_name storeName,
+        c.pick_up_code_sn
         FROM
         mall_order o
 
@@ -405,6 +407,7 @@
         LEFT JOIN mall_goods gs ON g.goods_id = gs.id
         left join mall_sale_record record on record.order_sn = o.order_sn
         LEFT JOIN sys_user u ON record.saller_id = u.user_id
+        LEFT JOIN mall_pick_up_code c on o.order_sn = c.order_sn
         WHERE 1=1
         <if test="storeId != null and storeId != ''">
             AND o.store_id = #{storeId}
@@ -1632,8 +1635,8 @@
             o.merch_sn AS merchSn,
             m.merch_name AS merchName,
             count( 0 ) AS guestNumber,
-            sum( o.order_price ) AS totalSales,
-            sum( o.actual_price ) AS actualSales,
+            sum(  og.actual_payment_amount ) + sum(og.discounted_price) AS totalSales,
+            sum(  og.actual_payment_amount ) + sum(og.discounted_price) AS actualSales,
             s.store_name AS storeName,
             max( o.add_time ) AS lastSalesTime ,
             sum( g.cost_price) AS totalCost

+ 7 - 7
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -208,12 +208,12 @@
             </div>
             <div class="col-md-3">
                 <h2 class="text-center" style="border: white;background-color: #F5DCB3;padding: 8px" >取货码</h2><br/>
-                <div class="row" style="border: white;background-color: #f0f0f0">
+                <div class="row" style="border: white;background-color: #f0f0f0;overflow:auto;height: 700px;">
                     <div class="col-xs-4 col-sm-4" v-for="(item,i) in pickUpCodeList" style="margin-bottom: 8px;">
-                        <i-button data-toggle="modal" data-target="#orderDetail" style="width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn)" v-if="item.pickUpCodeStatus == 0"  >&nbsp;{{item.pickUpCodeSn}}</i-button>
-                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#83e7b4;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn)" v-if="item.pickUpCodeStatus == 1" >{{item.pickUpCodeSn}}</i-button>
-                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#808080;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn)" v-if="item.pickUpCodeStatus == 2" >{{item.pickUpCodeSn}}</i-button>
-                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#FF0000;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn)" v-if="item.pickUpCodeStatus == 4" >{{item.pickUpCodeSn}}</i-button>
+                        <i-button data-toggle="modal" data-target="#orderDetail" style="width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 0"  >&nbsp;{{item.pickUpCodeSn}}</i-button>
+                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#83e7b4;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 1" >{{item.pickUpCodeSn}}</i-button>
+                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#808080;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 2" >{{item.pickUpCodeSn}}</i-button>
+                        <i-button data-toggle="modal" data-target="#orderDetail" style="background-color:#FF0000;width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 4" >{{item.pickUpCodeSn}}</i-button>
                     </div>
                 </div>
             </div>
@@ -298,8 +298,8 @@
 
                         </div>
                         <div class="modal-footer">
-                            <button type="button" class="btn btn-primary" @click="verification" id="verification" data-dismiss="modal">核销</button>
-                            <button type="button" class="btn btn-primary" @click="refundOrder()" id="refundOrder" data-dismiss="modal">退款</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 20px;float: left" class="btn ivu-btn-error" @click="refundOrder()" id="refundOrder" data-dismiss="modal">退款</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="verification" id="verification" data-dismiss="modal">核销</button>
                             <!--<button type="button" class="btn btn-primary" @click="retrySendOrder" id="retrySendOrder" data-dismiss="modal">订单重推</button>-->
                         </div>
                     </div>

+ 89 - 45
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -2,12 +2,29 @@ $(function () {
 
     openWebSocket();
     queryAssistantInfo();
+
+
 });
 
 window.onbeforeunload = function(){
     closeWebSocket();
 }
 
+
+
+function debounce(fn,delay){
+    console.log("进来了");
+    var timer=null
+    return function(){
+        console.log(timer);
+        if(timer){
+            clearTimeout(timer)
+        }
+        timer = setTimeout(fn,delay)
+    }
+}
+
+
 function calculateGoodsPrice(r){
 
     var rMap = r.map;
@@ -492,6 +509,7 @@ let vm = new Vue({
         orderProcessRecord:{},
         tax:0,
         currentOrderNo:null,
+        pickUpCode:null,
         customname:'',
         customidcard:'',
         machineCode:'',
@@ -545,9 +563,22 @@ let vm = new Vue({
         // 存储商品信息
         goodsMap:new Map(),
         response: "",
+
+        parCode : "",
     },
     methods: {
+
+        myDebounce:debounce(function(){
+
+
+            toPayOrder();
+        },2000),
+
         query: function () {
+
+
+
+
             vm.storeId = sessionStorage.getItem("storeId");;
             var thisGoods = {};
             $.get("../goods/details/"+vm.prodBarcode+"/"+vm.storeId, function (r) {
@@ -743,41 +774,10 @@ let vm = new Vue({
             this.userInfo.couponSn = "";
         },
         submitOrder:function(){
-            $('#payCode').unbind('keydown').keydown(function(event){});
-            vm.machineCode = sessionStorage.getItem("machineCode");
-            console.log(vm.machineCode);
-            var param = {'userInfo':vm.userInfo,'payCode':this.$refs.payCode.currentValue,'goodsList':vm.goodsList,'sessionId':vm.sessionId,'machineCode':vm.machineCode};
-            console.log(JSON.stringify(param));
-            this.$refs.payCode.currentValue = '';
-            $.ajax({
-                type: "POST",
-                url: "../order/orderConfirm",
-                contentType: "application/json",
-                data: JSON.stringify(param),
-                success: function (r) {
-                    console.log(r);
-                    if (r.code == 0) {
-                        if (r.resultObj != null) {
-                            $(".form-group input[type=text]").each(function(){
-                                this.value = '';
-                            })
-                            // 打印取货码小票
-                            var content = getPrintContent(r.resultObj);
-                            console.log(content);
-                            printArea2(content);
-                            vm.goodsList = [];
-                            vm.customname = '' ;
-                            vm.customidcard = '';
-                            vm.customClearData();
+            vm.parCode = this.$refs.payCode.currentValue
+            vm.myDebounce();
+
 
-                        }else{
-                            // alert("打印小票失败");
-                        }
-                    } else {
-                        alert(r.msg);
-                    }
-                }
-            });
 
 
 
@@ -920,7 +920,7 @@ let vm = new Vue({
 
 
         },
-        queryOrderDetail:function(orderSn){
+        queryOrderDetail:function(orderSn,pickUpCode){
             var storeId = sessionStorage.getItem("storeId");;
             $.get("../order/orderDetail/"+orderSn, function (r) {
                 if (r.code == 0) {
@@ -928,6 +928,7 @@ let vm = new Vue({
                     vm.orderEntity = r.resultObj.orderEntity;
                     vm.goodsDetailList = r.resultObj.goodsList;
                     vm.currentOrderNo = r.resultObj.orderEntity.id;
+                    vm.pickUpCode = pickUpCode;
                     vm.tax = r.resultObj.tax;
                     vm.response = r.resultObj.response;
                     if(vm.orderProcessRecord.eleOrderStartTime){
@@ -1088,14 +1089,14 @@ function printArea(content) {
     });
     document.body.appendChild(iframe);
     var doc = iframe.contentWindow.document;
-    doc.open();
+    // doc.open();
     doc.write('<div class="">' + content
         + '</div>');
     doc.close();
     var frameWindow = iframe.contentWindow;
     if(!vm.firstPrint){
         setTimeout(function() {
-            frameWindow.close();
+            // frameWindow.close();
             frameWindow.focus();
             frameWindow.print();
             frameWindow.print();
@@ -1103,7 +1104,7 @@ function printArea(content) {
         },250);
         vm.firstPrint = true;
     }else{
-        frameWindow.close();
+        // frameWindow.close();
         frameWindow.focus();
         frameWindow.print();
         frameWindow.print();
@@ -1153,8 +1154,8 @@ function openWebSocket() {
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
         // webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
-        // webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+storeId);
-        webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
+        webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+storeId);
+        // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
             console.log('1.连接正在打开......');
         }
@@ -1249,6 +1250,9 @@ function getPrintContentOrder(ticket) {
     /*content += "<div style=\"width: 100%;\">";
     content += "会员:" + ticket.ticketHead.memberId;
     content += "</div>";*/
+    content += "<div style=\"width: 100%;font-size: 25px;\">";
+    content += "取货码:" + vm.pickUpCode;
+    content += "</div>";
     content += "<div style=\"width: 100%;\">";
     content += "订单号:" + ticket.ticketHead.orderId;
     content += "</div>";
@@ -1261,6 +1265,7 @@ function getPrintContentOrder(ticket) {
     content += "<tr>";
     content += "<td style=\"width: 40%;text-align: left;font-size: 10px;font-weight: bold;\">商品名称</td>";
     content += "<td style=\"width: 17%;text-align: right;font-size: 10px;font-weight: bold;\">单价</td>";
+    content += "<td style=\"width: 17%;text-align: right;font-size: 10px;font-weight: bold;\">优惠</td>";
     // content += "<td style=\"width: 16%;text-align: right;font-size: 10px;font-weight: bold;\">税费</td>";
     content += "<td style=\"width: 15%;text-align: right;font-size: 10px;font-weight: bold;\">数量</td>";
     content += "<td style=\"width: 18%;text-align: right;font-size: 10px;font-weight: bold;\">小计</td>";
@@ -1279,8 +1284,9 @@ function getPrintContentOrder(ticket) {
         content += "</table>";
         content += "</td>";
         content += "<td style=\"width: 17%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].uprice + "</td>";
+        content += "<td style=\"width: 17%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].discountPrice + "</td>";
         // content += "<td style=\"width: 17%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].taxation + "</td>";
-        content += "<td style=\"width: 15%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].num + "</td>";
+        content += "<td style=\"width: 15%;text-align: center;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].num + "</td>";
         content += "<td style=\"width: 18%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].subtotal + "</td>";
         content += "</tr>";
 
@@ -1299,13 +1305,13 @@ function getPrintContentOrder(ticket) {
     content += "<span style=\"float: right;width: 33%;text-align: right;\">" + ticket.cashInfo.taxTotal + "元</span>";
     content += "</div>";
     content += "<div style=\"width: 100%;\">";
+    content += "<span style=\"float: left;width: 50%;text-align: left;\">优惠合计:</span>";
+    content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.oddChange + "元</span>";
+    content += "</div>";
+    content += "<div style=\"width: 100%;\">";
     content += "<span style=\"float: left;width: 50%;text-align: left;\">实收:</span>";
     content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.receipts + "元</span>";
     content += "</div>";
-    // content += "<div style=\"width: 100%;\">";
-    // content += "<span style=\"float: left;width: 50%;text-align: left;\">找零:</span>";
-    // content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.oddChange + "元</span>";
-    // content += "</div>";
     content += "<div style=\"width: 100%;\">";
     content += "<span style=\"float: left;width: 50%;text-align: left;\">优惠券:</span>";
     content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.coupon + "元</span>";
@@ -1539,4 +1545,42 @@ function handle(goodsDetails,operatorType){
     vm.showReduceMoney =  Math.round(vm.showReduceMoney * 100) / 100;
 }
 
+function toPayOrder(payCode){
+    $('#payCode').unbind('keydown').keydown(function(event){});
+    vm.machineCode = sessionStorage.getItem("machineCode");
+    console.log(vm.machineCode);
+    var param = {'userInfo':vm.userInfo,'payCode':vm.parCode,'goodsList':vm.goodsList,'sessionId':vm.sessionId,'machineCode':vm.machineCode};
+    console.log(JSON.stringify(param));
+    vm.parCode = "";
+    $.ajax({
+        type: "POST",
+        url: "../order/orderConfirm",
+        contentType: "application/json",
+        data: JSON.stringify(param),
+        success: function (r) {
+            console.log(r);
+            if (r.code == 0) {
+                if (r.resultObj != null) {
+                    $(".form-group input[type=text]").each(function(){
+                        this.value = '';
+                    })
+                    // 打印取货码小票
+                    var content = getPrintContent(r.resultObj);
+                    console.log(content);
+                    printArea2(content);
+                    vm.goodsList = [];
+                    vm.customname = '' ;
+                    vm.customidcard = '';
+                    vm.customClearData();
+
+                }else{
+                    // alert("打印小票失败");
+                }
+            } else {
+                alert(r.msg);
+            }
+        }
+    });
+}
+
 

+ 3 - 0
kmall-admin/src/main/webapp/js/shop/offilineOrderList.js

@@ -23,6 +23,9 @@ $(function () {
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
             {label: '订单号', name: 'orderSn', index: 'order_sn', align: 'center',width: 120},
             {label: '操作店员', name: 'userName', index: 'user_name', align: 'center',width: 80},
+            {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
+            {label: '购买人姓名', name: 'payName', index: 'payName', align: 'center',width: 150},
+            {label: '购买人电话', name: 'mobile', index: 'mobile', align: 'center',width: 200},
             {
                 label: '购买类型', name: 'isOnfflineOrder', index: 'is_onffline_order', align: 'center',width: 80,
                 formatter: function (value) {

+ 32 - 0
kmall-common/src/main/java/com/kmall/common/utils/print/ticket/item/Goods.java

@@ -23,6 +23,9 @@ public class Goods implements Serializable {
     private String num;
     // 小计
     private String subtotal;
+    // 优惠金额
+    private String discountPrice;
+
 
     public Goods(String gname, String uprice, String taxation, String num, String subtotal) {
         this.gname = gname;
@@ -32,6 +35,16 @@ public class Goods implements Serializable {
         this.subtotal = subtotal;
     }
 
+    public Goods(String gname, String uprice, String taxation, String num, String subtotal,String discountPrice) {
+        this.gname = gname;
+        this.uprice = uprice;
+        this.taxation = taxation;
+        this.num = num;
+        this.subtotal = subtotal;
+        this.discountPrice = discountPrice;
+    }
+
+
     public String getGname() {
         return gname;
     }
@@ -71,4 +84,23 @@ public class Goods implements Serializable {
     public void setSubtotal(String subtotal) {
         this.subtotal = subtotal;
     }
+
+    public String getDiscountPrice() {
+        return discountPrice;
+    }
+
+    public void setDiscountPrice(String discountPrice) {
+        this.discountPrice = discountPrice;
+    }
+
+    @Override
+    public String toString() {
+        return "Goods{" +
+                "gname='" + gname + '\'' +
+                ", uprice='" + uprice + '\'' +
+                ", taxation='" + taxation + '\'' +
+                ", num='" + num + '\'' +
+                ", subtotal='" + subtotal + '\'' +
+                '}';
+    }
 }