Procházet zdrojové kódy

Merge branch 'master' of http://git.ds-bay.com/project/kmall-pt-general

 Conflicts:
	kmall-admin/src/main/java/com/kmall/admin/entity/OrderEntity.java
	kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
lsp před 4 roky
rodič
revize
1b63755f12

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

@@ -165,6 +165,7 @@ public class OrderEntity implements Serializable {
      * 国检规格型号
      */
     private String ciqProdModel;
+
     /**
      * 原产国代码,海关编码
      */

+ 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

@@ -321,17 +321,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());
@@ -386,21 +393,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());
         }
 
         // 收银信息
@@ -409,12 +426,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());
@@ -1882,6 +1902,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 查询使用的优惠券,并减扣金额
@@ -1966,13 +1991,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;
                 }
 
@@ -2163,10 +2194,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));
@@ -2286,28 +2327,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();
@@ -2365,7 +2406,7 @@ public class OrderServiceImpl implements OrderService {
             } else {
                 r = R.error(wechatReverseApiResult.getErr_code_des());
             }
-
+            throw new RuntimeException("订单支付失败");
         }
         }
 
@@ -2393,6 +2434,9 @@ public class OrderServiceImpl implements OrderService {
                     processParam.put("orderSn", orderSn);
                     orderDao.updateOrderProcessRecord(processParam);
 
+//                    orderWXPayRecordService
+//                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
+
 
                     // 设置支付单完成时间
                     processRecordEntity.setPaymentSuccTimeStr(result.getTime_end());

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

@@ -75,6 +75,7 @@
         <result property="campName" column="camp_name"/>
         <result property="pickUpCodeSn" column="pick_up_code_sn"/>
         <result property="pickUpCodeStatus" column="pick_up_code_status"/>
+        <result property="pickUpCodeSn" column="pick_up_code_sn"/>
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.OrderEntity">
@@ -393,27 +394,21 @@
 
     <select id="queryOffilineOrderList" resultType="com.kmall.admin.entity.OrderEntity">
         SELECT distinct
-        o.id,
-        o.order_sn,
-        u.username as userName,
-        c.pick_up_code_sn,
-        o.pay_name,
-        o.mobile,
-        o.is_onffline_order,
-        o.order_biz_type,
-        o.order_status,
-        o.pay_status,
-        o.coupon_name,
-        o.coupon_price,
-        o.actual_price,
-        o.order_price,
-        o.pay_time,
-        o.pay_flag
-        from mall_order o
+        o.*,
+        u.username AS userName,
+        p.is_payment_send,
+        p.is_ele_order_send,
+        p.is_customs_send,
+        s.store_name storeName
+        FROM
+        mall_order o
+
+        LEFT JOIN mall_order_process_record p ON o.order_sn = p.order_sn
         LEFT JOIN mall_order_goods g ON o.id = g.order_id
-        LEFT JOIN mall_sale_record record ON record.order_sn = o.order_sn
+        left join mall_store s on o.store_id = s.id
+        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}
@@ -421,6 +416,18 @@
         <if test="merchSn != null and merchSn.trim() != ''">
             AND o.merch_sn = #{merchSn}
         </if>
+        <if test="goodsSn != null and goodsSn.trim() != ''">
+            AND gs.goods_sn = #{goodsSn}
+        </if>
+        <if test="sku != null and sku.trim() != ''">
+            AND gs.sku = #{sku}
+        </if>
+        <if test="prodBarcode != null and prodBarcode.trim() != ''">
+            AND gs.prod_barcode = #{prodBarcode}
+        </if>
+        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+            AND s.third_party_merch_code = #{thirdPartyMerchCode}
+        </if>
         <if test="orderSn != null and orderSn.trim() != ''">
             AND o.order_sn LIKE concat('%',#{orderSn},'%')
         </if>
@@ -1934,37 +1941,6 @@
         </if>
     </select>
 
-    <select id="queryPickUpCodeList" resultType="com.kmall.admin.entity.OrderEntity">
-        SELECT distinct
-        o.*,
-        c.pick_up_code_sn,
-        c.pick_up_code_status
-        FROM mall_order o
-        LEFT JOIN mall_pick_up_code c ON c.order_sn = o.order_sn
-        WHERE 1=1
-        <if test="storeId != null and storeId != ''">
-            AND o.store_id = #{storeId}
-        </if>
-        <if test="isOnfiilineOrder != null">
-            AND o.is_onffline_order = #{isOnfiilineOrder}
-        </if>
-        <if test="orderSn != null and orderSn.trim() != ''">
-            AND o.order_sn LIKE concat('%',#{orderSn},'%')
-        </if>
-        <if test="payName != null and payName.trim() != ''">
-            AND o.pay_name = LIKE concat('%',#{payName},'%')
-        </if>
-        <if test="payMobile != null and payMobile.trim() != ''">
-            AND o.pay_mobile LIKE concat('%',#{pay_mobile},'%')
-        </if>
-        <if test="startTime != null and startTime.trim() != ''">
-            AND o.add_time &gt;= #{startTime}
-        </if>
-        <if test="endTime != null and endTime.trim() != ''">
-            AND o.add_time &lt; #{endTime}
-        </if>
-        order by o.id desc
-    </select>
 
 
     <update id="updateOrderInfo" parameterType="map">

+ 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>

+ 88 - 44
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();
@@ -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>";
@@ -1347,7 +1353,7 @@ function getPrintContentOrder(ticket) {
     content += "购买跨境商品须知:"
     content += "</div>";
     content += "<div style=\"width: 100%;\">";
-    content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单经海关放行后方可提货; <br> 4、凭小票领取您的订单商品。"
+    content += "1、凡购买跨境商品均不提供发票;<br> 2、单笔限购5000元,年交易限额2.6万元; <br> 3、所有订单经海关放行后方可提货; <br> 4、凭小票领取您的订单商品; <br> 5、非产品质量问题,跨境商品不支持无理由退换货,请及时检查 "
     content += "</div>";
     content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
     content += "<div style=\"width: 100%;\">";
@@ -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

@@ -24,6 +24,9 @@ $(function () {
             {label: '订单号', name: 'orderSn', index: 'order_sn', align: 'center',width: 120},
             {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
             {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 + '\'' +
+                '}';
+    }
 }