Parcourir la source

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

zcb il y a 4 ans
Parent
commit
1c6402c72d
42 fichiers modifiés avec 1483 ajouts et 351 suppressions
  1. 78 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java
  2. 1 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsTransportInfoDetailController.java
  3. 155 25
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  4. 79 4
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  5. 3 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  6. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsTransportInfoDetailDao.java
  7. 24 0
      kmall-admin/src/main/java/com/kmall/admin/dao/OrderDao.java
  8. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/OrderGoodsDao.java
  9. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  10. 6 32
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsTransportInfoDetailExcelDto.java
  11. 14 0
      kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java
  12. 11 0
      kmall-admin/src/main/java/com/kmall/admin/entity/OrderEntity.java
  13. 10 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java
  14. 7 1
      kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java
  15. 26 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java
  16. 7 0
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  17. 7 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  18. 41 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsTransportInfoDetailServiceImpl.java
  19. 26 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  20. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  21. 6 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/RealtimeSalesDetectionServiceImpl.java
  22. 42 0
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  23. 4 1
      kmall-admin/src/main/resources/mybatis/mapper/GoodsTransportInfoDetailDao.xml
  24. 212 46
      kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
  25. 69 0
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  26. 53 36
      kmall-admin/src/main/webapp/WEB-INF/page/sale/realtimeSalesDetection.html
  27. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  28. 3 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goodstransportinfodetail.html
  29. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html
  30. 5 5
      kmall-admin/src/main/webapp/WEB-INF/page/shop/order.html
  31. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html
  32. 498 184
      kmall-admin/src/main/webapp/js/sale/realtimeSalesDetection.js
  33. 22 3
      kmall-admin/src/main/webapp/js/shop/goods.js
  34. 9 0
      kmall-admin/src/main/webapp/js/shop/goodsbatch.js
  35. 4 2
      kmall-admin/src/main/webapp/js/shop/goodstransportinfodetail.js
  36. 3 3
      kmall-admin/src/main/webapp/js/shop/mngchange.js
  37. 6 0
      kmall-admin/src/main/webapp/js/shop/offilineOrderList.js
  38. 9 3
      kmall-admin/src/main/webapp/js/shop/order.js
  39. 20 1
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js
  40. 2 2
      kmall-admin/src/main/webapp/js/shop/storemngchange.js
  41. BIN
      kmall-admin/src/main/webapp/statics/file/goods_transport_info_detail_import_yyyymmdd.v1.0.0.xls
  42. 2 1
      kmall-common/src/main/java/com/kmall/common/constant/Dict.java

+ 78 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java

@@ -15,12 +15,17 @@ import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelExport;
 import com.kmall.common.utils.excel.ExcelUtil;
+import com.kmall.common.utils.print.ticket.item.Goods;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
 /**
@@ -338,4 +343,77 @@ public class GoodsController {
     }
 
 
+    /**
+     * 所有商品模块导出
+     * @param params 查询参数
+     * @param response
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "export")
+    public R export(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params.put("isDelete", 0);
+        // 根据条件查询出列表
+        List<GoodsEntity> goodsList = goodsService.queryExportList(params);
+
+        ExcelExport ee = new ExcelExport("所有商品信息");
+
+        String[] header = new String[]{"商户名称","第三方商户编号","商品编码","SKU","PLU","商品名称","商品英文名称","产品条码","货品业务类型","库存是否共享",
+                "商品库存","日常价","成本价","是否上架","是否热销","录入日期","商品单位","商品税率","产品品牌","海关备案编号","计量单位","海关商品编码","国检规格型号",
+                "原产国","海关申报要素","毛重(kg)","净重(kg)"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (goodsList !=null && goodsList.size()>0){
+            for (GoodsEntity goodsEntity : goodsList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+
+                map.put("MerchName",goodsEntity.getMerchName());
+                map.put("ThirdPartyMerchCode",goodsEntity.getThirdPartyMerchCode());
+                map.put("GoodsSn",goodsEntity.getGoodsSn());
+                map.put("Sku",goodsEntity.getSku());
+                map.put("Plu",goodsEntity.getPlu());
+                map.put("Name",goodsEntity.getName());
+                map.put("EnglishName",goodsEntity.getEnglishName());
+
+                String goodsBizType = goodsEntity.getGoodsBizType();
+                Integer isStockShare = 0;
+                if (goodsEntity.getIsStockShare()!=null){
+                    isStockShare = Integer.parseInt(goodsEntity.getIsStockShare());
+                }
+                map.put("ProdBarcode",goodsEntity.getProdBarcode());
+                map.put("GoodsBizType",StringUtils.isEmpty(goodsBizType)?"":Dict.orderBizType.valueOf("item_"+goodsBizType).getItemName());
+                map.put("IsStockShare",isStockShare==0?"否":"是");
+                map.put("GoodsNumber",goodsEntity.getGoodsNumber());
+                map.put("DailyPrice",goodsEntity.getDailyPrice());
+                map.put("CostPrice",goodsEntity.getCostPrice());
+                map.put("IsOnSale",goodsEntity.getIsOnSale()==0?"否":"是");
+
+                map.put("IsHot",goodsEntity.getIsHot()==0?"否":"是");
+                map.put("AddTime",goodsEntity.getAddTime());
+                map.put("GoodsUnit",goodsEntity.getGoodsUnit());
+                map.put("GoodsRate",goodsEntity.getGoodsRate());
+                map.put("Brand",goodsEntity.getBrand());
+                map.put("CusRecCode",goodsEntity.getCusRecCode());
+                map.put("UnitCode",goodsEntity.getUnitCode());
+
+                map.put("CusGoodsCode",goodsEntity.getCusGoodsCode());
+                map.put("CiqProdModel",goodsEntity.getCiqProdModel());
+                map.put("OriCntName",goodsEntity.getOriCntName());
+                map.put("CusDeclEle",goodsEntity.getCusDeclEle());
+                map.put("GrossWeight",goodsEntity.getGrossWeight());
+                map.put("NetWeight",goodsEntity.getNetWeight());
+
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("所有商品信息", list, header);
+        ee.export(response);
+
+        return R.ok();
+    }
+
+
+
 }

+ 1 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsTransportInfoDetailController.java

@@ -9,6 +9,7 @@ import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.R;
+import com.kmall.common.utils.RRException;
 import com.kmall.common.utils.excel.ExcelUtil;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;

+ 155 - 25
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -2,47 +2,40 @@ package com.kmall.admin.controller;
 
 import com.kmall.admin.dto.OrderExpressDto;
 import com.kmall.admin.entity.*;
-import com.kmall.admin.websocket.WebSocketServer;
-import com.kmall.common.constant.JxlsXmlTemplateName;
-import com.kmall.common.utils.excel.ExcelUtil;
-import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
-import com.kmall.manager.manager.alipay.AliPayUtil;
-import com.kmall.manager.manager.wechat.WechatUtil;
-import com.kmall.manager.manager.wechat.WechatGlobalUtil;
-import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.*;
-import com.kmall.admin.service.OrderExceptionRecordService;
-import com.kmall.admin.service.OrderProcessRecordService;
-import com.kmall.admin.service.OrderService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
-import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.excel.ExcelExport;
-import com.kmall.manager.manager.pingan.PinganUtil;
-import com.kmall.manager.manager.pingan.dto.PinganResponseDto;
+import com.kmall.common.utils.excel.ExcelUtil;
 import com.kmall.common.utils.print.ticket.item.Ticket;
 import com.kmall.common.utils.wechat.WechatMicropayApiResult;
 import com.kmall.common.utils.wechat.WechatRefundApiResult;
 import com.kmall.common.utils.wechat.WechatReverseApiResult;
+import com.kmall.manager.manager.alipay.AliPayMicropayApiResult;
+import com.kmall.manager.manager.alipay.AliPayUtil;
+import com.kmall.manager.manager.pingan.PinganUtil;
+import com.kmall.manager.manager.pingan.dto.PinganResponseDto;
+import com.kmall.manager.manager.wechat.WechatGlobalUtil;
+import com.kmall.manager.manager.wechat.WechatUtil;
+import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import net.sf.json.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.apache.shiro.web.session.HttpServletSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.websocket.server.PathParam;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Matcher;
@@ -771,7 +764,7 @@ public class OrderController {
         return r;
     }
     /**
-     * 订单导出请求
+     * 线上订单导出请求
      */
     @RequiresPermissions(value = {"order:export"})
     @RequestMapping(value = "export")
@@ -780,12 +773,14 @@ public class OrderController {
         params = ParamUtils.setTimeMap(params);
         //查询列表数据
         params.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_0.getItem());
-        List<OrderEntity> orderList = orderService.queryExportList(params);
+        ExcelExport ee = new ExcelExport("线上订单信息");
 
-        ExcelExport ee = new ExcelExport("订单信息");
-
-        String[] header = new String[]{"订单编号","商户订单编号", "所属门店", "供应商", "供应商第三方商户代码", "订单状态", "SKU", "商品名称", "数量", "销售价", "实际支付金额", "保税模式", "快递公司名称", "快递单编号", "海关清单编号", "收货人姓名", "收件人手机", "收件人省份", "收件人城市", "收件人区县", "收件人地址", "下单时间", "支付流水号","身份证号"
-                ,"原产国","规格型号","品牌","单位","毛重(kg)","净重"};
+        // =================================================线上订单明细导出开始=====================================
+        List<OrderEntity> orderList = orderService.queryExportList(params);
+        String[] header = new String[]{"订单编号", "商户订单编号", "所属门店", "供应商", "供应商第三方商户代码", "订单状态", "SKU", "商品名称", "数量",
+                "销售价", "促销价", "实际支付金额", "保税模式", "快递公司", "配送单号", "快递费用", "发货状态", "修改人",
+                "海关清单编号", "收货人姓名", "收件人手机", "收件人省份", "收件人城市", "收件人区县", "收件人地址", "下单时间", "支付流水号", "身份证号"
+                , "原产国", "规格型号", "品牌", "单位", "毛重(kg)", "净重"};
 
         List<Map<String, Object>> list = new ArrayList<>();
         if (orderList != null && orderList.size() != 0) {
@@ -793,6 +788,7 @@ public class OrderController {
                 LinkedHashMap<String, Object> map = new LinkedHashMap<>();
                 Integer orderStatus = orderEntity.getOrderStatus();
                 String orderBizType = orderEntity.getOrderBizType();
+                Integer shippingStatus = orderEntity.getShippingStatus();
 
                 map.put("OrderSn", orderEntity.getOrderSn());
                 map.put("MerchOrderSn", orderEntity.getMerchOrderSn());
@@ -804,11 +800,15 @@ public class OrderController {
                 map.put("GoodsName", orderEntity.getGoodsName());
                 map.put("Number", orderEntity.getNumber());
                 map.put("RetailPrice", orderEntity.getRetailPrice());
+                map.put("TopicPrice", orderEntity.getTopicPrice());
                 map.put("ActualPrice", orderEntity.getActualPrice());
 
                 map.put("OrderBizType", StringUtils.isEmpty(orderBizType)? "":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
                 map.put("ShippingName", orderEntity.getShippingName());
                 map.put("ShippingNo", orderEntity.getShippingNo());
+                map.put("ShippingFee", orderEntity.getShippingFee());
+                map.put("ShippingStatus", Dict.shippingStatus.valueOf("item_"+shippingStatus).getItemName());
+                map.put("ModerSn", orderEntity.getModerSn());
                 map.put("InvtNo", orderEntity.getOrderProcessRecord()==null?"":orderEntity.getOrderProcessRecord().getInvtNo());
                 map.put("Consignee", orderEntity.getConsignee());
                 map.put("Mobile", orderEntity.getMobile());
@@ -827,12 +827,52 @@ public class OrderController {
                 map.put("GrossWeight", orderEntity.getGrossWeight());
                 map.put("NetWeight", orderEntity.getNetWeight());
 
+                // 零售价\促销价\成交价
+//                map.put("SellPrice",orderEntity.getRetailPrice());
+//
+//                map.put("FinalPrice",orderEntity.getActualPrice());
+
                 list.add(map);
             }
         }
-
-        ee.addSheetByMap("订单信息", list, header);
+        // =================================================线上订单明细导出开始=====================================
+        // =================================================线上订单导出开始=====================================
+        List<OrderEntity> masterOrderList = orderService.queryMasterExportList(params);
+        String[] headerMatser = new String[]{"所属门店", "订单号", "会员", "支付类型", "商户订单号", "订单业务类型", "订单状态", "订付人核验", "付款状态",
+                "实际支付", "订单总价", "下单时间", "快递公司", "配送单号", "快递费用", "发货状态", "修改人",};
+        List<Map<String, Object>> listMaster = new ArrayList<>();
+        if (masterOrderList != null && masterOrderList.size() > 0) {
+            for (OrderEntity orderEntity : masterOrderList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                String orderBizType = orderEntity.getOrderBizType();
+                Integer orderStatus = orderEntity.getOrderStatus();
+                String isMergePay = orderEntity.getIsMergePay();
+                String buyerPayCheck = orderEntity.getBuyerPayCheck();
+                map.put("StoreName",orderEntity.getStoreName());
+                map.put("OrderSn",orderEntity.getOrderSn());
+                map.put("UserName",orderEntity.getUserName());
+                map.put("IsMergePay",StringUtils.isEmpty(isMergePay)?"-":Dict.isMergePay.valueOf("item_"+isMergePay).getItemName());
+                map.put("MerchOrderSn",orderEntity.getMerchOrderSn());
+                map.put("OrderBizType",StringUtils.isEmpty(orderBizType)? "":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
+                map.put("OrderStatus",Dict.orderStatus.valueOf("item_"+ orderStatus).getItemName());
+                map.put("BuyerPayCheck",StringUtils.isEmpty(buyerPayCheck)?"":Dict.merchReturnSubjectChecked.valueOf("item_"+buyerPayCheck).getItemName());
+                map.put("PayStatus",Dict.payStatus.valueOf("item_"+orderEntity.getPayStatus()).getItemName());
+                map.put("ActualPrice",orderEntity.getActualPrice());
+                map.put("OrderPrice",orderEntity.getOrderPrice());
+                map.put("AddTime",orderEntity.getAddTime());
+                map.put("ShippingName",orderEntity.getShippingName());
+                map.put("ShippingNo",orderEntity.getShippingNo());
+                map.put("ShippingFee",orderEntity.getShippingFee());
+                map.put("ShippingStatus",Dict.shippingStatus.valueOf("item_"+orderEntity.getShippingStatus()).getItemName());
+                map.put("ModerSn",orderEntity.getModerSn());
+                listMaster.add(map);
+            }
+        }
+        // =================================================线上订单导出结束=====================================
+        ee.addSheetByMap("线上订单信息", listMaster, headerMatser);
+        ee.addSheetByMap("线上订单明细信息", list, header);
         ee.export(response);
+
         return R.ok();
     }
 
@@ -1018,5 +1058,95 @@ public class OrderController {
     }
 
 
+    /**
+     * 线上订单导出请求
+     */
+    @RequestMapping(value = "exportOffilineOrder")
+    public R exportOffilineOrder(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = ParamUtils.setTimeMap(params);
+        params.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_1.getItem());
+        ExcelExport ee = new ExcelExport("线下订单信息");
+        //查询列表数据
+        // =================================================线下订单明细导出开始=====================================
+        List<OrderEntity> orderEntityList = orderService.queryExportOffilineOrderList(params);
+        String[] header = new String[]{"订单号", "操作店员", "购买类型", "订单业务类型", "订单状态",
+                "付款状态", "sku", "商品名称", "数量", "实际支付", "订单总价", "下单时间", "付款时间", "零售价", "促销价", "成交价"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (orderEntityList != null && orderEntityList.size() > 0) {
+            for (OrderEntity orderEntity : orderEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+
+                // 订单业务类型
+                String orderBizType = orderEntity.getOrderBizType();
+                // 订单状态
+                Integer orderStatus = orderEntity.getOrderStatus();
+                // 付款状态
+                Integer payStatus = orderEntity.getPayStatus();
+                map.put("OrderSn", orderEntity.getOrderSn());
+                map.put("UserName", orderEntity.getUserName());
+                map.put("IsOnfflineOrder", Dict.isOnfflineOrder.item_1.getItem().equals(orderEntity.getIsOnfflineOrder()) ? "线下购买" : "线上购买");
+                map.put("OrderBizType", StringUtils.isEmpty(orderBizType)?"":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
+                map.put("OrderStatus", Dict.orderStatus.valueOf("item_"+orderStatus).getItemName());
+                map.put("PayStatus", Dict.payStatus.valueOf("item_"+payStatus).getItemName());
+                map.put("Sku", orderEntity.getSku());
+                map.put("GoodsName", orderEntity.getGoodsName());
+                map.put("Number", orderEntity.getNumber());
+
+                map.put("ActualPrice", orderEntity.getActualPrice());
+                map.put("OrderPrice", orderEntity.getOrderPrice());
+                map.put("AddTime", orderEntity.getAddTime());
+
+                map.put("PayTime", orderEntity.getPayTime());
+                map.put("SellPrice", orderEntity.getRetailPrice());
+                map.put("TopicPrice", orderEntity.getTopicPrice());
+                map.put("FinalPrice", orderEntity.getActualPrice());
+
+                list.add(map);
+            }
+        }
+
+        // =================================================线下订单明细导出结束=====================================
+
+        // =================================================线下订单导出开始=====================================
+        List<OrderEntity> masterOrderEntityList = orderService.queryMasterExportOffilineOrderList(params);
+        String[] headerMaster = new String[]{"订单号", "操作店员", "购买类型", "订单业务类型", "订单状态",
+                "付款状态", "实际支付", "订单总价", "下单时间", "付款时间"};
+        List<Map<String, Object>> listMaster = new ArrayList<>();
+        if (masterOrderEntityList != null && masterOrderEntityList.size() > 0) {
+            for (OrderEntity orderEntity : masterOrderEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                // 订单业务类型
+                String orderBizType = orderEntity.getOrderBizType();
+                // 订单状态
+                Integer orderStatus = orderEntity.getOrderStatus();
+                // 付款状态
+                Integer payStatus = orderEntity.getPayStatus();
+
+                map.put("OrderSn", orderEntity.getOrderSn());
+                map.put("UserName", orderEntity.getUserName());
+                map.put("IsOnfflineOrder", Dict.isOnfflineOrder.item_1.getItem().equals(orderEntity.getIsOnfflineOrder()) ? "线下购买" : "线上购买");
+                map.put("OrderBizType", StringUtils.isEmpty(orderBizType)?"":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
+                map.put("OrderStatus", Dict.orderStatus.valueOf("item_"+orderStatus).getItemName());
+                map.put("PayStatus", Dict.payStatus.valueOf("item_"+payStatus).getItemName());
+                map.put("ActualPrice", orderEntity.getActualPrice());
+                map.put("OrderPrice", orderEntity.getOrderPrice());
+                map.put("AddTime", orderEntity.getAddTime());
+                map.put("PayTime", orderEntity.getPayTime());
+
+                listMaster.add(map);
+            }
+        }
+        // =================================================线下订单导出结束=====================================
+
+        ee.addSheetByMap("线下订单信息", listMaster, headerMaster);
+        ee.addSheetByMap("线下订单明细信息", list, header);
+        ee.export(response);
+
+
+        return R.ok();
+    }
+
 
 }

+ 79 - 4
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -10,21 +10,22 @@ import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelExport;
 import com.kmall.common.utils.excel.ExcelUtil;
 import com.kmall.common.utils.file.FileUploadUtil;
 import com.kmall.common.utils.wechat.AccessToken;
 import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
 import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 
 /**
  * Controller
@@ -283,4 +284,78 @@ public class ProductStoreRelaController {
         //上传文件
         return R.ok("导入成功!");
     }
+
+
+    @RequestMapping(value = "export")
+    public R export(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params.put("isDelete", 0);
+        // 根据条件查询出列表
+        List<ProductStoreRelaEntity> productStoreRelaEntityList = productStoreRelaService.queryExportList(params);
+        for (ProductStoreRelaEntity pro: productStoreRelaEntityList) {
+            if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
+                    if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+                        if (pro.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                            pro.setStockNum(pro.getGoodsNumber());
+                        }
+                    }
+                }
+            }
+        }
+        ExcelExport ee = new ExcelExport("门店商品信息");
+
+        String[] header = new String[]{"所属商户","所属门店","商品类型","货品业务类型","商品编码","商品名称","产品编码",
+                "sku","plu","品牌","批次编号","批次到期日期","是否上架","是否热销","库存是否共享","门店库存","园区库存","零售价",
+                "市场价","底线价","销售量"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (productStoreRelaEntityList!=null && productStoreRelaEntityList.size()>0){
+            for (ProductStoreRelaEntity productStoreRelaEntity : productStoreRelaEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+
+                String goodsBizType = productStoreRelaEntity.getGoodsBizType();
+                Integer isStockShare = 0;
+                if (productStoreRelaEntity.getIsStockShare()!=null){
+                    isStockShare = Integer.parseInt(productStoreRelaEntity.getIsStockShare());
+                }
+
+                map.put("MerchName",productStoreRelaEntity.getMerchName());
+                map.put("StoreName",productStoreRelaEntity.getStoreName());
+                map.put("CategoryName",productStoreRelaEntity.getCategoryName());
+                map.put("GoodsBizType", StringUtils.isEmpty(goodsBizType)?"":Dict.orderBizType.valueOf("item_"+goodsBizType).getItemName());
+                map.put("GoodsSn",productStoreRelaEntity.getGoodsSn());
+                map.put("GoodsName",productStoreRelaEntity.getGoodsName());
+                map.put("ProductSn",productStoreRelaEntity.getProductSn());
+
+                map.put("Sku",productStoreRelaEntity.getSku());
+                map.put("Plu",productStoreRelaEntity.getPlu());
+                map.put("BrandName",productStoreRelaEntity.getBrandName()); // 品牌
+                map.put("BatchSn",productStoreRelaEntity.getBatchSn());
+                map.put("BatchExpireDate",productStoreRelaEntity.getBatchExpireDate());
+                map.put("IsOnSale",Integer.parseInt(productStoreRelaEntity.getIsOnSale())==0?"否":"是");
+                map.put("IsHot",Integer.parseInt(productStoreRelaEntity.getIsHot())==0?"否":"是");
+
+                map.put("IsStockShare",isStockShare==0?"否":"是");
+                map.put("StockNum",productStoreRelaEntity.getStockNum());
+                map.put("ParkStock",productStoreRelaEntity.getParkStock());
+                map.put("RetailPrice",productStoreRelaEntity.getRetailPrice());
+                map.put("MarketPrice",productStoreRelaEntity.getMarketPrice());
+                map.put("BottomLinePrice",productStoreRelaEntity.getBottomLinePrice());
+                map.put("SellVolume",productStoreRelaEntity.getSellVolume());
+
+                list.add(map);
+            }
+        }
+
+
+
+        ee.addSheetByMap("门店商品信息", list, header);
+        ee.export(response);
+
+        return R.ok();
+    }
+
+
+
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java

@@ -3,6 +3,7 @@ package com.kmall.admin.dao;
 import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.common.utils.print.ticket.item.Goods;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,4 +37,6 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
     GoodsEntity queryGoodsByGoodsSnAndStoreId(@Param("goodsSn") String goodsSn, @Param("storeId") Long storeId);
 
     GoodsPanoramaDto searchGoodsPanoramaDtoByKeyword(@Param("keyword") String keyword);
+
+    List<GoodsEntity> queryExportList(Map<String, Object> params);
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsTransportInfoDetailDao.java

@@ -20,4 +20,6 @@ public interface GoodsTransportInfoDetailDao extends BaseDao<GoodsTransportInfoD
     List<GoodsTransportInfoDetailEntity> searchListByStatusAndSku(@Param("query") Query query, @Param("wayStatus") Integer wayStatus, @Param("sku")String sku);
 
     int queryTotalByStatusAndSku(@Param("query") Query query, @Param("wayStatus") Integer wayStatus, @Param("sku")String sku);
+
+    Integer existGoodsBySkuAndsupplierId(@Param("sku") String sku,@Param("supplierId") Integer supplierId);
 }

+ 24 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderDao.java

@@ -10,6 +10,7 @@ import com.kmall.common.utils.Query;
 import org.apache.ibatis.annotations.Param;
 import com.kmall.manager.dao.BaseDao;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -116,4 +117,27 @@ public interface OrderDao extends BaseDao<OrderEntity> {
     List<PurchaseSalesInStockDetail> purchaseSalesInStockDetailList(Query query);
 
     int purchaseSalesInStockDetailTotal(Query query);
+
+    BigDecimal queryTopicPriceByOrderSnAndSku(@Param("orderSn") String orderSn,@Param("sku") String sku);
+
+    /**
+     * 线下订单导出
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryExportOffilineOrderList(Map<String, Object> params);
+
+    /**
+     * 线下订单明细导出
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryMasterExportOffilineOrderList(Map<String, Object> params);
+
+    /**
+     * 线上订单导出
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryMasterExportList(Map<String, Object> params);
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/OrderGoodsDao.java

@@ -6,6 +6,7 @@ import com.kmall.api.entity.OrderVo;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -29,4 +30,5 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsEntity> {
     List<OrderGoodsEntity> queryHistoryPrice(Map map);
 
     Integer queryHistoryPriceTotal(Map<String, Object> map);
+
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java

@@ -76,4 +76,11 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
      * @return
      */
     List<ProductStoreRelaEntity> queryByStoreId(Long id);
+
+    /**
+     * 根据条件参数查询导出列表
+     * @param params 条件参数
+     * @return
+     */
+    List<ProductStoreRelaEntity> queryExportList(Map<String, Object> params);
 }

+ 6 - 32
kmall-admin/src/main/java/com/kmall/admin/dto/GoodsTransportInfoDetailExcelDto.java

@@ -15,7 +15,7 @@ public class GoodsTransportInfoDetailExcelDto implements Serializable {
     /**
      * 供应商id
      */
-    private String supplierId;
+    private Integer supplierId;
     /**
      * 原产地
      */
@@ -23,7 +23,7 @@ public class GoodsTransportInfoDetailExcelDto implements Serializable {
     /**
      * 数量
      */
-    private String num;
+    private Integer num;
     /**
      * 创建人编号
      */
@@ -49,11 +49,11 @@ public class GoodsTransportInfoDetailExcelDto implements Serializable {
         this.sku = sku;
     }
 
-    public String getSupplierId() {
+    public Integer getSupplierId() {
         return supplierId;
     }
 
-    public void setSupplierId(String supplierId) {
+    public void setSupplierId(Integer supplierId) {
         this.supplierId = supplierId;
     }
 
@@ -65,11 +65,11 @@ public class GoodsTransportInfoDetailExcelDto implements Serializable {
         this.originCountry = originCountry;
     }
 
-    public String getNum() {
+    public Integer getNum() {
         return num;
     }
 
-    public void setNum(String num) {
+    public void setNum(Integer num) {
         this.num = num;
     }
 
@@ -88,30 +88,4 @@ public class GoodsTransportInfoDetailExcelDto implements Serializable {
     public void setModerSn(String moderSn) {
         this.moderSn = moderSn;
     }
-
-    @Override
-    public String toString() {
-        return "GoodsTransportInfoDetailExcelDto{" +
-                "wayStatus='" + wayStatus + '\'' +
-                ", sku='" + sku + '\'' +
-                ", supplierId='" + supplierId + '\'' +
-                ", originCountry='" + originCountry + '\'' +
-                ", num='" + num + '\'' +
-                ", createrSn='" + createrSn + '\'' +
-                ", moderSn='" + moderSn + '\'' +
-                '}';
-    }
-
-    public GoodsTransportInfoDetailExcelDto() {
-    }
-
-    public GoodsTransportInfoDetailExcelDto(String wayStatus, String sku, String supplierId, String originCountry, String num, String createrSn, String moderSn) {
-        this.wayStatus = wayStatus;
-        this.sku = sku;
-        this.supplierId = supplierId;
-        this.originCountry = originCountry;
-        this.num = num;
-        this.createrSn = createrSn;
-        this.moderSn = moderSn;
-    }
 }

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

@@ -113,6 +113,11 @@ public class GoodsEntity implements Serializable {
      */
     private String oriCntCode;
     /**
+     * 原产国名称
+     */
+    private String oriCntName;
+
+    /**
      * 海关申报要素,报统一版
      */
     private String cusDeclEle;
@@ -215,6 +220,15 @@ public class GoodsEntity implements Serializable {
     // 日常价
     private BigDecimal dailyPrice;
 
+
+    public String getOriCntName() {
+        return oriCntName;
+    }
+
+    public void setOriCntName(String oriCntName) {
+        this.oriCntName = oriCntName;
+    }
+
     public BigDecimal getCostPrice() {
         return costPrice;
     }

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

@@ -194,12 +194,23 @@ public class OrderEntity implements Serializable {
 
     private String campName;
 
+    // 活动价
+    private BigDecimal topicPrice;
+
     //供应商第三方商户
     private String supplierThirdPartyMerchName;
 
     //供应商第三方商户
     private String supplierThirdPartyMerchCode;
 
+    public BigDecimal getTopicPrice() {
+        return topicPrice;
+    }
+
+    public void setTopicPrice(BigDecimal topicPrice) {
+        this.topicPrice = topicPrice;
+    }
+
     public String getSupplierThirdPartyMerchCode() {
         return supplierThirdPartyMerchCode;
     }

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

@@ -94,6 +94,8 @@ public class ProductStoreRelaEntity implements Serializable {
 
     private Integer brandId;
 
+    private String brandName;
+
     private Integer freightId;
 
     //属性类别
@@ -138,6 +140,14 @@ public class ProductStoreRelaEntity implements Serializable {
     //园区库存  park_stock
     private String parkStock;
 
+    public String getBrandName() {
+        return brandName;
+    }
+
+    public void setBrandName(String brandName) {
+        this.brandName = brandName;
+    }
+
     public String getBottomLinePrice() {
         return bottomLinePrice;
     }

+ 7 - 1
kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java

@@ -4,6 +4,7 @@ import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.common.utils.print.ticket.item.Goods;
 
 import java.util.List;
 import java.util.Map;
@@ -135,5 +136,10 @@ public interface GoodsService {
 
     GoodsPanoramaDto searchGoodsPanoramaDtoByKeyword(String keyword);
 
-
+    /**
+     * 查询出要导出的列表
+     * @param params 查询参数
+     * @return
+     */
+    List<GoodsEntity> queryExportList(Map<String, Object> params);
 }

+ 26 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -104,6 +104,11 @@ public interface OrderService {
 
     int confirmPay(Long id, String payFlag,String orderSnWx);
 
+    /**
+     * 线上订单导出查询列表
+     * @param map
+     * @return
+     */
     List<OrderEntity> queryExportList(Map<String, Object> map);
     /**
      * 导入订单快递信息
@@ -151,4 +156,25 @@ public interface OrderService {
     List<PurchaseSalesInStockDetail> purchaseSalesInStockDetailList(Query query);
 
     int purchaseSalesInStockDetailTotal(Query query);
+
+    /**
+     * 线下订单明细导出查询列表
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryExportOffilineOrderList(Map<String, Object> params);
+
+    /**
+     * 线下订单导出
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryMasterExportOffilineOrderList(Map<String, Object> params);
+
+    /**
+     * 线上订单导出
+     * @param params
+     * @return
+     */
+    List<OrderEntity> queryMasterExportList(Map<String, Object> params);
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java

@@ -117,4 +117,11 @@ public interface ProductStoreRelaService {
      * @return
      */
     int uploadExcel(List<StoreGoodsDto> storeGoodsDtoList);
+
+    /**
+     * 根据条件参数查询出要导出的列表
+     * @param params 条件参数
+     * @return
+     */
+    List<ProductStoreRelaEntity> queryExportList(Map<String, Object> params);
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -12,6 +12,7 @@ import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.print.ticket.item.Goods;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -1033,6 +1034,12 @@ public class GoodsServiceImpl implements GoodsService {
     public GoodsPanoramaDto searchGoodsPanoramaDtoByKeyword(String keyword) {
         return goodsDao.searchGoodsPanoramaDtoByKeyword(keyword);
     }
+
+    @Override
+    public List<GoodsEntity> queryExportList(Map<String, Object> params) {
+
+        return goodsDao.queryExportList(params);
+    }
 /*  @Override
     @Transactional
     public int uploadExcel(MultipartFile file) {

+ 41 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsTransportInfoDetailServiceImpl.java

@@ -7,6 +7,7 @@ import com.kmall.admin.service.GoodsTransportInfoDetailService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.RRException;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,11 +45,27 @@ public class GoodsTransportInfoDetailServiceImpl implements GoodsTransportInfoDe
 
     @Override
     public int save(GoodsTransportInfoDetailEntity goodsTransportInfoDetail) {
+        // 判断sku和供应商id是否存在
+        Integer exist = goodsTransportInfoDetailDao.existGoodsBySkuAndsupplierId(goodsTransportInfoDetail.getSku(), goodsTransportInfoDetail.getSupplierId());
+        if (exist==null){
+            throw new RRException("sku和供应商id不匹配");
+        }
+        if (goodsTransportInfoDetail.getNum()<=0){
+            throw new RRException("数量应该大于0");
+        }
         return goodsTransportInfoDetailDao.save(goodsTransportInfoDetail);
     }
 
     @Override
     public int update(GoodsTransportInfoDetailEntity goodsTransportInfoDetail) {
+        // 判断sku和供应商id是否存在
+        Integer exist = goodsTransportInfoDetailDao.existGoodsBySkuAndsupplierId(goodsTransportInfoDetail.getSku(), goodsTransportInfoDetail.getSupplierId());
+        if (exist==null){
+            throw new RRException("sku和供应商id不匹配");
+        }
+        if (goodsTransportInfoDetail.getNum()<=0){
+            throw new RRException("数量应该大于0");
+        }
         return goodsTransportInfoDetailDao.update(goodsTransportInfoDetail);
     }
 
@@ -79,6 +96,10 @@ public class GoodsTransportInfoDetailServiceImpl implements GoodsTransportInfoDe
     @Override
     @Transactional
     public void saveExcelDtoList(List<GoodsTransportInfoDetailExcelDto> goodsTransportInfoDetailExcelDtoList) {
+        if (goodsTransportInfoDetailExcelDtoList==null || goodsTransportInfoDetailExcelDtoList.size()==0){
+            throw new RRException("请填写至少一行数据");
+        }
+
         goodsTransportInfoDetailExcelDtoList.forEach(goodsTransportInfoDetailExcelDto -> {
             GoodsTransportInfoDetailEntity goodsTransportInfoDetailEntity = new GoodsTransportInfoDetailEntity();
             if (goodsTransportInfoDetailExcelDto.getWayStatus()==null ||
@@ -86,11 +107,29 @@ public class GoodsTransportInfoDetailServiceImpl implements GoodsTransportInfoDe
                             && Integer.parseInt(goodsTransportInfoDetailExcelDto.getWayStatus()) != 1)){
                 throw new RRException("是否在途必填,且只能填0或1");
             }
+            if (goodsTransportInfoDetailExcelDto.getSupplierId()==null){
+                throw new RRException("供应商id必填");
+            }
+            if (StringUtils.isEmpty(goodsTransportInfoDetailExcelDto.getSku())){
+                throw new RRException("sku必填");
+            }
+
+            // 判断sku和供应商id是否存在
+            Integer exist = goodsTransportInfoDetailDao.existGoodsBySkuAndsupplierId(goodsTransportInfoDetailExcelDto.getSku(), goodsTransportInfoDetailExcelDto.getSupplierId());
+            if (exist==null){
+                throw new RRException("sku和供应商id不匹配");
+            }
+            if (goodsTransportInfoDetailExcelDto.getNum()==null){
+                throw new RRException("数量必填");
+            }
+            if (goodsTransportInfoDetailExcelDto.getNum()<=0){
+                throw new RRException("数量要大于0");
+            }
             goodsTransportInfoDetailEntity.setWayStatus(Integer.parseInt(goodsTransportInfoDetailExcelDto.getWayStatus()));
             goodsTransportInfoDetailEntity.setSku(goodsTransportInfoDetailExcelDto.getSku());
-            goodsTransportInfoDetailEntity.setSupplierId(Integer.parseInt(goodsTransportInfoDetailExcelDto.getSupplierId()));
+            goodsTransportInfoDetailEntity.setSupplierId(goodsTransportInfoDetailExcelDto.getSupplierId());
             goodsTransportInfoDetailEntity.setOriginCountry(goodsTransportInfoDetailExcelDto.getOriginCountry());
-            goodsTransportInfoDetailEntity.setNum(Integer.parseInt(goodsTransportInfoDetailExcelDto.getNum()));
+            goodsTransportInfoDetailEntity.setNum(goodsTransportInfoDetailExcelDto.getNum());
             goodsTransportInfoDetailEntity.setCreaterSn(ShiroUtils.getUserId().toString());
             goodsTransportInfoDetailEntity.setModerSn(ShiroUtils.getUserId().toString());
             goodsTransportInfoDetailEntity.setTstm(new Date());

+ 26 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -1412,6 +1412,9 @@ public class OrderServiceImpl implements OrderService {
         for (OrderEntity order : list) {
             OrderProcessRecordEntity orderProcessRecord = orderProcessRecordDao.queryObjectByOrderSn(order.getOrderSn());
             order.setOrderProcessRecord(orderProcessRecord);
+            // 查询活动价
+            BigDecimal topicPrice = orderDao.queryTopicPriceByOrderSnAndSku(order.getOrderSn(),order.getSku());
+            order.setTopicPrice(topicPrice);
         }
         return list;
     }
@@ -2273,6 +2276,29 @@ public class OrderServiceImpl implements OrderService {
         return orderDao.purchaseSalesInStockDetailTotal(query);
     }
 
+    @Override
+    public List<OrderEntity> queryExportOffilineOrderList(Map<String, Object> params) {
+        List<OrderEntity> orderEntityList = orderDao.queryExportOffilineOrderList(params);
+        if (orderEntityList!=null && orderEntityList.size()>0){
+            for (OrderEntity orderEntity : orderEntityList) {
+                // 查询活动价
+                BigDecimal topicPrice = orderDao.queryTopicPriceByOrderSnAndSku(orderEntity.getOrderSn(),orderEntity.getSku());
+                orderEntity.setTopicPrice(topicPrice);
+            }
+        }
+        return orderEntityList;
+    }
+
+    @Override
+    public List<OrderEntity> queryMasterExportOffilineOrderList(Map<String, Object> params) {
+        return orderDao.queryMasterExportOffilineOrderList(params);
+    }
+
+    @Override
+    public List<OrderEntity> queryMasterExportList(Map<String, Object> params) {
+        return orderDao.queryMasterExportList(params);
+    }
+
 
     /**
      * 设置订单数据

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -817,4 +817,9 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         throw new RRException("导入成功!");
 //        return 1;
     }
+
+    @Override
+    public List<ProductStoreRelaEntity> queryExportList(Map<String, Object> params) {
+        return productStoreRelaDao.queryExportList(params);
+    }
 }

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/RealtimeSalesDetectionServiceImpl.java

@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.Map;
 
 /**
@@ -33,6 +34,11 @@ public class RealtimeSalesDetectionServiceImpl implements RealtimeSalesDetection
             }
             //计算客单价
             r.setGuestUnitPrice(r.getActualSales().divide(new BigDecimal(r.getGuestNumber()),2));
+
+            //时区-13小时
+            Date lastSalesTime = r.getLastSalesTime();
+            lastSalesTime.setTime(r.getLastSalesTime().getTime() - 13*60*60*1000);
+            r.setLastSalesTime(lastSalesTime);
         }
         return r;
     }

+ 42 - 0
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -630,4 +630,46 @@
             and g.supplier_id = s.id
             AND (g.goods_sn=#{keyword} OR g.prod_barcode=#{keyword})
     </select>
+    <select id="queryExportList" resultType="com.kmall.admin.entity.GoodsEntity">
+        select
+        mall_goods.*,
+        case when mall_goods_group.id > 0 then 2 else 0 end as goodsType,
+        m.merch_name merchName, mb.is_stock_share isStockShare,
+        catagory.keywords as categoryName,
+        scnc.`name` as oriCntName
+        from mall_goods
+        left join mall_merch m on mall_goods.merch_sn = m.merch_sn
+        left join mall_goods_group on mall_goods_group.goods_id = mall_goods.id and mall_goods_group.open_status != 3
+        left join third_merchant_biz mb on mb.third_party_merch_code = mall_goods.third_party_merch_code and
+        mb.merch_sn=mall_goods.merch_sn
+        left join mall_category catagory on catagory.id = mall_goods.category_id
+        left join sys_cus_nation_code scnc on  mall_goods.ori_cnt_code = scnc.code
+        WHERE 1=1
+        <!--  数据过滤  -->
+        ${filterSql}
+        <if test="merchSn != null and merchSn.trim() != ''">
+            AND mall_goods.merch_sn = #{merchSn}
+        </if>
+        <if test="prodBarcode != null and prodBarcode.trim() != ''">
+            AND mall_goods.prod_barcode = #{prodBarcode}
+        </if>
+        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+            AND mall_goods.third_party_merch_code = #{thirdPartyMerchCode}
+        </if>
+        <if test="goodsSn != null and goodsSn != ''">
+            AND mall_goods.goods_sn like concat('%',#{goodsSn},'%')
+        </if>
+        <if test="name != null and name != ''">
+            AND mall_goods.name LIKE concat('%',#{name},'%')
+        </if>
+        <if test="englishName != null and englishName != ''">
+            AND mall_goods.english_name LIKE concat('%',#{englishName},'%')
+        </if>
+        <if test="goodsBizType != null and goodsBizType != ''">
+            AND mall_goods.goods_biz_type = #{goodsBizType}
+        </if>
+        <if test="isDelete != null">
+            AND mall_goods.is_Delete = #{isDelete}
+        </if>
+    </select>
 </mapper>

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

@@ -102,8 +102,11 @@
 			AND sku LIKE CONCAT('%',#{sku},'%')
 		</if>
 	</select>
+    <select id="existGoodsBySkuAndsupplierId" resultType="java.lang.Integer">
+		select 1 from mall_goods where sku=#{sku} and supplier_id=#{supplierId} limit 1
+	</select>
 
-	<insert id="save" parameterType="com.kmall.admin.entity.GoodsTransportInfoDetailEntity" useGeneratedKeys="true" keyProperty="transItemId">
+    <insert id="save" parameterType="com.kmall.admin.entity.GoodsTransportInfoDetailEntity" useGeneratedKeys="true" keyProperty="transItemId">
 		insert into mall_goods_transport_info_detail(
 			`way_status`,
 			`sku`,

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

@@ -239,6 +239,9 @@
         o.address,
         o.add_time,
         o.pay_id,
+        o.shipping_status,
+        o.shipping_fee,
+        o.moder_sn,
         o.pay_transaction_id,
         u.id_no 'idNo',
         u.username AS username,
@@ -273,6 +276,15 @@
         LEFT JOIN third_merchant_biz t2 ON t2.third_merch_sn = r.supplier_third_id
         WHERE
         1 =1
+        <if test="storeId != null and storeId != ''">
+            AND o.store_id = #{storeId}
+        </if>
+        <if test="orderStatus != null and orderStatus.trim() != ''">
+            AND o.order_status = #{orderStatus}
+        </if>
+        <if test="sku != null and sku.trim() != ''">
+            AND g.sku = #{sku}
+        </if>
         <if test="startTime != null and startTime != ''">
             AND o.add_time <![CDATA[ >  ]]> #{startTime}
         </if>
@@ -285,12 +297,6 @@
         <if test="orderBizType != null and orderBizType != ''">
             AND o.order_biz_type = #{orderBizType}
         </if>
-        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-            AND s.third_party_merch_code = #{thirdPartyMerchCode}
-        </if>
-        <if test="sku != null and sku.trim() != ''">
-            AND good.sku = #{sku}
-        </if>
         <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
             AND o.merch_order_sn = #{merchOrderSn}
         </if>
@@ -300,44 +306,15 @@
         <if test="supplierThirdId != null and supplierThirdId != ''">
             AND r.supplier_third_id = #{supplierThirdId}
         </if>
-        <if test="merchSn != null and merchSn.trim() != ''">
-            AND o.merch_sn = #{merchSn}
-        </if>
         <if test="orderSn != null and orderSn.trim() != ''">
             AND o.order_sn LIKE concat('%',#{orderSn},'%')
         </if>
-        <if test="shippingStatus != null and shippingStatus.trim() != ''">
-            AND o.shipping_status = #{shippingStatus}
-        </if>
         <if test="payStatus != null and payStatus.trim() != ''">
             AND o.pay_status = #{payStatus}
         </if>
-        <if test="orderStatus != null and orderStatus.trim() != ''">
-            AND o.order_status = #{orderStatus}
-        </if>
-        <if test="shippingId != null and shippingId != 0">
-            AND o.shipping_id = #{shippingId}
-        </if>
-        <if test="orderType != null and orderType.trim() != ''">
-            AND o.order_type = #{orderType}
-        </if>
         <if test="isOnfiilineOrder != null">
             AND o.is_onffline_order = #{isOnfiilineOrder}
         </if>
-        <if test="ids != null and ids.trim() != ''">
-            AND o.id in (${ids})
-        </if>
-        <choose>
-            <when test="sidx != null and sidx.trim() != ''">
-                order by ${sidx} ${order}
-            </when>
-            <otherwise>
-                order by o.id desc
-            </otherwise>
-        </choose>
-        <if test="offset != null and limit != null">
-            limit #{offset}, #{limit}
-        </if>
     </select>
 
     <select id="queryTotal" resultType="int">
@@ -536,17 +513,6 @@
         <if test="ids != null and ids.trim() != ''">
             AND o.id in (${ids})
         </if>
-        <choose>
-            <when test="sidx != null and sidx.trim() != ''">
-                order by ${sidx} ${order}
-            </when>
-            <otherwise>
-                order by o.id desc
-            </otherwise>
-        </choose>
-        <if test="offset != null and limit != null">
-            limit #{offset}, #{limit}
-        </if>
     </select>
 
     <insert id="save" parameterType="com.kmall.api.entity.OrderVo" useGeneratedKeys="true" keyProperty="id">
@@ -1770,5 +1736,205 @@
         group by substr(msmc.create_time,1,10)
         ) b
     </select>
+    <select id="queryTopicPriceByOrderSnAndSku" resultType="java.math.BigDecimal">
+        SELECT mst.topic_price FROM mall_order mo
+		inner JOIN mall_order_goods mog ON mo.id = mog.order_id
+		inner JOIN mall_store_topic mst ON mog.store_topic_id=mst.id
+		WHERE mo.order_sn=#{orderSn} AND mog.sku=#{sku};
+    </select>
+    <select id="queryExportOffilineOrderList" resultType="com.kmall.admin.entity.OrderEntity">
+        SELECT distinct
+        o.*,
+        u.username AS userName,
+        p.is_payment_send,
+        p.is_ele_order_send,
+        p.is_customs_send,
+        s.store_name storeName,
+        g.sku,
+        g.goods_name as goodsName,
+        gs.retail_price,
+        g.number
+        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_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
+        WHERE 1=1
+        <if test="orderSn != null and orderSn.trim() != ''">
+            AND o.order_sn LIKE concat('%',#{orderSn},'%')
+        </if>
+        <if test="orderStatus != null and orderStatus.trim() != ''">
+            AND o.order_status = #{orderStatus}
+        </if>
+        <if test="isOnfiilineOrder != null">
+            AND o.is_onffline_order = #{isOnfiilineOrder}
+        </if>
+    </select>
+    <select id="queryMasterExportOffilineOrderList" resultType="com.kmall.admin.entity.OrderEntity">
+        SELECT distinct
+        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_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
+        WHERE 1=1
+        <if test="storeId != null and storeId != ''">
+            AND o.store_id = #{storeId}
+        </if>
+        <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>
+        <if test="shippingStatus != null and shippingStatus.trim() != ''">
+            AND o.shipping_status = #{shippingStatus}
+        </if>
+        <if test="payStatus != null and payStatus.trim() != ''">
+            AND o.pay_status = #{payStatus}
+        </if>
+        <if test="orderStatus != null and orderStatus.trim() != ''">
+            AND o.order_status = #{orderStatus}
+        </if>
+        <if test="shippingId != null and shippingId != 0">
+            AND o.shipping_id = #{shippingId}
+        </if>
+        <if test="orderType != null and orderType.trim() != ''">
+            AND o.order_type = #{orderType}
+        </if>
+        <if test="isOnfiilineOrder != null">
+            AND o.is_onffline_order = #{isOnfiilineOrder}
+        </if>
+        <if test="ids != null and ids.trim() != ''">
+            AND o.id in (${ids})
+        </if>
+    </select>
+    <select id="queryMasterExportList" resultType="com.kmall.admin.entity.OrderEntity">
+        SELECT DISTINCT
+        o.order_sn,
+        o.merch_order_sn,
+        o.order_status,
+        o.actual_price,
+        o.order_biz_type,
+        o.shipping_no,
+        o.shipping_name,
+        o.shipping_code,
+        o.consignee,
+        o.mobile,
+        o.province,
+        o.city,
+        o.district,
+        o.address,
+        o.add_time,
+        o.pay_id,
+        o.pay_status,
+        o.shipping_status,
+        o.is_merge_pay,
+        o.buyer_pay_check,
+        o.order_price,
+        o.moder_sn,
+        o.id,
+        u.username AS username,
+        p.is_payment_send,
+        p.is_ele_order_send,
+        p.is_customs_send,
+        s.store_name,
+        o.full_cut_price,
+        o.camp_minus_id,
+        o.camp_name
+        FROM
+        mall_order o
+        LEFT JOIN mall_user u ON o.user_id = u.id
+        LEFT JOIN mall_order_process_record p ON o.order_sn = p.order_sn
+        left join mall_store s on o.store_id = s.id
+        LEFT JOIN third_merchant_biz t ON t.third_party_merch_code = s.third_party_merch_code
+        LEFT JOIN mall_order_goods g ON o.id = g.order_id
+        LEFT JOIN mall_product_store_rela r ON o.store_id = r.store_id
+        AND r.goods_id = g.goods_id
+        LEFT JOIN mall_goods gs ON g.goods_id = gs.id
+        WHERE 1=1
+        <if test="startTime != null and startTime != ''">
+            AND o.add_time <![CDATA[ >  ]]> #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND o.add_time <![CDATA[ <  ]]> #{endTime}
+        </if>
+        <if test="storeId != null and storeId != ''">
+            AND o.store_id = #{storeId}
+        </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="thirdMerchSn != null and thirdMerchSn != ''">
+            AND t.third_merch_sn = #{thirdMerchSn}
+        </if>
+        <if test="supplierThirdId != null and supplierThirdId != ''">
+            AND r.supplier_third_id = #{supplierThirdId}
+        </if>
+        <if test="orderBizType != null and orderBizType != ''">
+            AND o.order_biz_type = #{orderBizType}
+        </if>
+        <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
+            AND o.merch_order_sn = #{merchOrderSn}
+        </if>
+        <if test="merchSn != null and merchSn.trim() != ''">
+            AND o.merch_sn = #{merchSn}
+        </if>
+        <if test="orderSn != null and orderSn.trim() != ''">
+            AND o.order_sn LIKE concat('%',#{orderSn},'%')
+        </if>
+        <if test="shippingStatus != null and shippingStatus.trim() != ''">
+            AND o.shipping_status = #{shippingStatus}
+        </if>
+        <if test="payStatus != null and payStatus.trim() != ''">
+            AND o.pay_status = #{payStatus}
+        </if>
+        <if test="orderStatus != null and orderStatus.trim() != ''">
+            AND o.order_status = #{orderStatus}
+        </if>
+        <if test="shippingId != null and shippingId != 0">
+            AND o.shipping_id = #{shippingId}
+        </if>
+        <if test="orderType != null and orderType.trim() != ''">
+            AND o.order_type = #{orderType}
+        </if>
+        <if test="isOnfiilineOrder != null">
+            AND o.is_onffline_order = #{isOnfiilineOrder}
+        </if>
+        <if test="ids != null and ids.trim() != ''">
+            AND o.id in (${ids})
+        </if>
+    </select>
 
 </mapper>

+ 69 - 0
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -766,5 +766,74 @@
         where a.store_id = #{storeId}
 
     </select>
+    <select id="queryExportList" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
+        select
+        a.`id`,
+        a.`store_id`,
+        a.`merch_sn`,
+        a.`product_id`,
+        a.`stock_num`,
+        a.`goods_id`,
+        a.`retail_price`,
+        a.`market_price`,
+        a.`stock_price`,
+        a.`sell_volume`,
+        a.`batch_sn`,
+        a.`batch_expire_date`,
+        a.`bottom_line_price`,
+        b.goods_number as parkStock,
+        b.is_hot `isHot`,
+        b.is_on_sale `isOnSale`,
+        b.sell_volume `goodsSellVolume`,
+        b.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,
+        b.goods_sn goodsSn,
+        b.list_pic_url,
+        c.goods_sn productSn,
+        b.name goodsName,
+        cg.name categoryName,
+        s.store_name storeName,
+        m.merch_name,
+        b.merch_sn goods_merch_sn,
+        a.category_id,
+        a.attribute_category,
+        a.brand_id,
+        mall_brand.name as brandName,
+        a.freight_id,
+        b.goods_number goodsNumber,
+        b.third_party_merch_code thirdPartyMerchCode,
+        mb.is_stock_share isStockShare,
+        b.list_pic_url,supplier_third_id, a.hot_sort_num
+        from mall_product_store_rela a
+        left join mall_goods b on a.goods_id = b.id
+        left join third_merchant_biz mb on mb.third_party_merch_code = b.third_party_merch_code and mb.merch_sn=b.merch_sn
+        left join mall_merch m on a.merch_sn = m.merch_sn
+        left join mall_product c on a.product_id = c.id
+        LEFT JOIN mall_category cg ON a.category_id = cg.id
+        left join mall_store s on a.store_id = s.id AND s.third_party_merch_code = b.third_party_merch_code
+        left join mall_brand on a.brand_id=mall_brand.id
+        WHERE 1=1 and b.is_delete = 0
+        <if test="category != null and category != ''">
+            AND a.category_id IN (select id from mall_category where parent_id = #{category})
+        </if>
+        <if test="categoryTwo != null and categoryTwo != ''">
+            AND a.category_id = #{categoryTwo}
+        </if>
+        <if test="storeId != null and storeId != '' ">
+            AND a.store_id = #{storeId}
+        </if>
+        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+            AND b.third_party_merch_code = #{thirdPartyMerchCode}
+        </if>
+        <if test="goodsName != null and goodsName != '' ">
+            AND b.name LIKE concat('%',#{goodsName},'%')
+        </if>
+        <if test="goodsSn != null and goodsSn != '' ">
+            AND b.goods_sn = #{goodsSn}
+        </if>
+
+        <if test="goodsBizType != null and goodsBizType != ''">
+            AND b.goods_biz_type = #{goodsBizType}
+        </if>
+    </select>
 
 </mapper>

+ 53 - 36
kmall-admin/src/main/webapp/WEB-INF/page/sale/realtimeSalesDetection.html

@@ -13,10 +13,10 @@
             color: #515a6e;
         }
 
-        span, button, select, input {
-            font-size: 18px;
-            font-family: 微软雅黑;
-        }
+        /*span, button, select, input {*/
+            /*font-size: 18px;*/
+            /*font-family: 微软雅黑;*/
+        /*}*/
 
         #refreshTime, #storeId, #categoryId {
             width: 100px;
@@ -41,14 +41,37 @@
 <div id="rrapp" v-cloak>
     <header class="main-header">
         <div class="container-fluid  coldiv">
+
+
+            <div class="row" style="border:0;margin-bottom:10px">
+                <div class="col-md-12 ">
+                    <span>门店编号:</span><input v-model="storeId" id="storeId"/>
+                    <span style="color: red;margin: 10px">{{storeName}}</span>
+                    <span>品类编号:</span><input v-model="categoryId" id="categoryId"/>
+                    <span style="color: red;margin: 10px">{{categoryName}}</span>
+                <!--</div>-->
+                <!--</div>-->
+                <!--<div class="row" style="border:0;margin-bottom:10px">-->
+                <!--<div class="col-md-12 ">-->
+                    <span>部门编号:</span><input v-model="merchSn" id="merchSn"/>
+                    <span style="color: red;margin: 10px">{{merchName}}</span> &nbsp;&nbsp;
+                    <span>业态:</span>
+                    <!--业态下拉框-->
+                    <select name="formatsSelect" v-model="formatsSelect" disabled>
+                        <option :value="formats.id" v-for="formats in formatsList">{{formats.name}}</option>
+                    </select>&nbsp;
+                </div>
+            </div>
+
+
             <div class="row" style="border:0;margin-bottom:10px">
                 <div class="col-md-12">
 
                     <span>日期:</span>
                     <input type="date" name="salesDate" id="salesDate" v-model="salesDate"/>&nbsp;
                     <span>刷新间隔:</span>
-                    <input type="number" name="refreshTime" v-model="refreshTime" id="refreshTime"
-                           oninput="if(value > 1000 || value < 1 ){alert('非法输入!');value = ''}"/>
+                    <input type="number" name="refreshTime" v-model="refreshTime" id="refreshTime" min="10" max="100000"
+                           oninput="if(value > 1000 || value < 0 ){alert('非法输入!');value = '10'}"/>
                     <span>秒</span>&nbsp;
 
 
@@ -68,41 +91,35 @@
                     <select name="rateSelect" v-model="rateSelect" disabled>
                         <option :value="rate.id" v-for="rate in rateList">{{rate.name}}</option>
                     </select>
-                </div>
-            </div>
 
-            <div class="row" style="border:0;margin-bottom:10px">
-                <div class="col-md-12 ">
-                    <span>门店编号:</span><input v-model="storeId" id="storeId"/>
-                    <span style="color: red;margin: 10px">{{storeName}}</span>
-                    <span>品类编号:</span><input v-model="categoryId" id="categoryId"/>
-                    <span style="color: red;margin: 10px">{{categoryName}}</span>
-                </div>
-            </div>
-            <div class="row" style="border:0;margin-bottom:10px">
-                <div class="col-md-12 ">
-                    <span>部门编号:</span><input v-model="merchSn" id="merchSn"/>
-                    <span style="color: red;margin: 10px">{{merchName}}</span> &nbsp;&nbsp;
-                    <span>业态:</span>
-                    <!--业态下拉框-->
-                    <select name="formatsSelect" v-model="formatsSelect" disabled>
-                        <option :value="formats.id" v-for="formats in formatsList">{{formats.name}}</option>
-                    </select>&nbsp;
-                </div>
-            </div>
-            <div class="row" style="border:0;margin-bottom:10px">
-                <div class="col-md-12 ">
-                    <i-button style="margin-right: 10px" type="primary" icon="refresh" size="24px" v-on:click="refresh"
-                              id="refresh">刷新
-                    </i-button>
-                    <i-button style="margin-right: 10px" type="info" icon="arrow-down-c" v-on:click="saveFlushTime"
-                              id="saveFlushTime">保存条件
+                    <i-button type="warning"v-on:click="clearFlushTime" id="clearFlushTime">停止刷新
                     </i-button>
-                    <i-button type="warning" icon="close" v-on:click="clearFlushTime" id="clearFlushTime">清除条件
+                    <i-button style="margin-right: 10px" type="primary" v-on:click="refreshButton"
+                              id="refresh">启动刷新
                     </i-button>
+                    <span v-show="refreshCount>0">自动刷新<span style="color: red">{{refreshCount}}</span>次</span>
+                    (日期为<span style="color: red">当天日期</span>会根据<span style="color: red">刷新间隔</span>自动刷新)
+
+
+                    <!--<i-button style="margin-right: 10px" type="primary" v-on:click="refresh"-->
+                              <!--id="refresh">启动刷新-->
+                    <!--</i-button>-->
                 </div>
             </div>
 
+            <!--<div class="row" style="border:0;margin-bottom:10px">-->
+                <!--<div class="col-md-12 ">-->
+                    <!--<i-button style="margin-right: 10px" type="primary" icon="refresh" size="24px" v-on:click="refresh"-->
+                              <!--id="refresh">刷新-->
+                    <!--</i-button>-->
+                    <!--<i-button style="margin-right: 10px" type="info" icon="arrow-down-c" v-on:click="saveFlushTime"-->
+                              <!--id="saveFlushTime">保存条件-->
+                    <!--</i-button>-->
+                    <!--<i-button type="warning" icon="close" v-on:click="clearFlushTime" id="clearFlushTime">清除条件-->
+                    <!--</i-button>-->
+                <!--</div>-->
+            <!--</div>-->
+
             <div class="row" style="border:0;margin-bottom:10px">
                 <div class="col-md-12 ">
                     <span>项目:</span>
@@ -112,7 +129,7 @@
                     </select>&nbsp;
                     <span>比较日期:</span>
                     <input type="date" name="compareDate" id="compareDate" v-model="compareDate"/> &nbsp;
-                    <i-button style="margin-right: 10px" type="primary" shape="circle" icon="arrow-swap"
+                    <i-button style="margin-right: 10px" type="info" shape="circle"
                               v-on:click="compare" id="clearFlushTime">比较
                     </i-button>
 

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html

@@ -117,6 +117,7 @@
                 <i-button @click="reloadSearch">重置</i-button>
             </div>
             <div class="buttons-group" style="width: 100%;margin-top: 8px; padding-left: 10px;">
+                <i-button type="primary" @click="exportGoods"><i class="fa fa-cloud-download"></i>&nbsp;导出</i-button>
                 #if($shiro.hasPermission("goods:save"))
                 <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
                 #end

+ 3 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/goodstransportinfodetail.html

@@ -19,6 +19,9 @@
                 <i-button @click="reloadSearch">重置</i-button>
             </div>
             <div class="buttons-group">
+                <a href="../statics/file/goods_transport_info_detail_import_yyyymmdd.v1.0.0.xls">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">在途商品明细模板下载</i-button>
+                </a>&nbsp;&nbsp;&nbsp;
                 <i-col style="display: inline-grid;">
                     <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
                             :format="['xls','xlsx']"

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

@@ -32,6 +32,7 @@
                 </i-col>-->
                 <i-button @click="query">查询</i-button>
                 <i-button @click="reloadSearch">重置</i-button>
+                <i-button type="primary" @click="exportOffilineOrder"><i class="fa fa-cloud-download"></i>&nbsp;导出</i-button>
             </div>
            <!-- TODO req_hidden_20200610 #if($shiro.hasPermission("order:wxMicropayPay"))
             <div class="buttons-group">

+ 5 - 5
kmall-admin/src/main/webapp/WEB-INF/page/shop/order.html

@@ -81,14 +81,14 @@
                     #if($shiro.hasPermission("order:getLogistics"))
                     <i-button type="warning" @click="getLogistics">查看快递信息</i-button>
                     #end
-                    #if($shiro.hasPermission("order:confirm"))
-                    <i-button type="error" @click="confirm">确认收货</i-button>
+                    #if($shiro.hasPermission("order:updateExpressInfo"))
+                    <i-button type="warning" @click="getExpressInfo">修改快递信息</i-button>
                     #end
                     #if($shiro.hasPermission("shop:comment"))
-                    <i-button type="info" @click="openComment">评价</i-button>
+                    <i-button type="warning" @click="openComment">评价</i-button>
                     #end
-                    #if($shiro.hasPermission("order:updateExpressInfo"))
-                    <i-button type="info" @click="getExpressInfo">修改快递信息</i-button>
+                    #if($shiro.hasPermission("order:confirm"))
+                    <i-button type="error" @click="confirm">确认收货</i-button>
                     #end
                     #if($shiro.hasPermission("order:expressUpload"))
                     <i-col style="display: inline-grid;">

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html

@@ -107,6 +107,7 @@
                     </Upload>
                 </i-col>
                 #end-->
+                <i-button type="primary" @click="exportStoreProductStock"><i class="fa fa-cloud-download"></i>&nbsp;导出</i-button>
                 #if($shiro.hasPermission("productstorerela:save"))
                 <i-button type="info" @click="add" v-show="!isSupplierShowByThirdSn||roleType"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
                 #end

+ 498 - 184
kmall-admin/src/main/webapp/js/sale/realtimeSalesDetection.js

@@ -1,60 +1,83 @@
 $(function () {
 
-vm.showEcharts();
-console.log(1);
-
-$("#jqGrid").jqGrid({
-    url:'../realtimeSalesDetection/query',
-    datatype: "json",
-    colModel: [
-        {label: '门店编码', name: 'storeId', index: 'storeId', width: 80},
-        {label: '门店名称', name: 'storeName', index: 'storeName', width: 120},
-        {label: '商户编码', name: 'merchSn', index: 'storeId', width: 220},
-        {label: '商户名称', name: 'merchName', index: 'storeName', width: 120},
-        {label: '售价总额', name: 'totalSales', index: 'totalSales',align: 'right',width: 80},
-        {label: '实际销售额', name: 'actualSales', index: 'actualSales',align: 'right',width: 80},
-        {label: '占比 %', name: 'proportion', index: 'proportion',align: 'right',width: 60},
-        {label: '优惠损失', name: 'preferentialLoss', index: 'preferentialLoss',align: 'right',width: 80},
-        {label: '成本总额', name: 'totalCost', index: 'totalCost',align: 'right',width: 80},
-        {label: '毛利', name: 'grossProfit', index: 'grossProfit',align: 'right',width: 80},
-        {label: '毛利率', name: 'grossProfitRatio', index: 'grossProfitRatio',align: 'right',width: 60},
-        {label: '来客数', name: 'guestNumber', index: 'guestNumber',align: 'right',width: 100},
-        {label: '客单价', name: 'guestUnitPrice', index: 'guestUnitPrice',align: 'right',width: 80},
-
-        {label: '最后销售时间', name: 'lastSalesTime', index: 'lastSalesTime', align: 'center',width: 180,formatter: function (value) {
-                return transDate(value,'yyyy-MM-dd hh:mm:ss');
-            }}
-        // {label: '说明', name: 'guestUnitPrice', index: 'guestUnitPrice',align: 'right',width: 80}
-    ],
-    viewrecords: true,
-    height: 200,
-    rowNum: 10,
-    rowList: [10, 30, 50],
-    rownumbers: true,
-    rownumWidth: 25,
-    autowidth: true,
-    shrinkToFit: false,
-    autoScroll: true,   //开启水平滚动条
-    width: 1500,
-    multiselect: true,
-    pager: "#jqGridPager",
-    jsonReader: {
-        root: "page.list",
-        page: "page.currPage",
-        total: "page.totalPage",
-        records: "page.totalCount"
-    },
-    prmNames: {
-        page: "page",
-        rows: "limit",
-        order: "order"
-    },
-    gridComplete: function () {
-        $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "scroll"});
-    }
-});
+    vm.showEcharts();
+    var date = new Date();
+    var year = date.getFullYear();
+    var month = ('0'+ (date.getMonth() + 1)).slice(-2);
+    var day = ('0' + date.getDate()).slice(-2);
+    var time = year +'-'+ month +'-'+ day;
+    console.log('time');
+    console.log(time);
+    // document.getElementById('salesDate').value = time;
+    //限制不能选择今天之后的日期(加du上属性max)
+    document.getElementById('salesDate').setAttribute('max', time);
+
+    var dateTime = date.setDate(date.getDate()-1);
+    date=new Date(dateTime);
+    day = ('0' + date.getDate()).slice(-2);
+    var time3 = year +'-'+ month +'-'+ day;
+    document.getElementById('compareDate').setAttribute('max', time3);
+
+
+    $("#jqGrid").jqGrid({
+        url: '../realtimeSalesDetection/query',
+        datatype: "json",
+        colModel: [
+            {label: '门店编码', name: 'storeId', index: 'storeId', width: 80},
+            {label: '门店名称', name: 'storeName', index: 'storeName', width: 120},
+            {label: '商户编码', name: 'merchSn', index: 'storeId', width: 220},
+            {label: '商户名称', name: 'merchName', index: 'storeName', width: 120},
+            {label: '销售总额', name: 'totalSales', index: 'totalSales', align: 'right', width: 80},
+            {label: '实际销售额', name: 'actualSales', index: 'actualSales', align: 'right', width: 80},
+            {label: '占比 %', name: 'proportion', index: 'proportion', align: 'right', width: 60},
+            {label: '优惠损失', name: 'preferentialLoss', index: 'preferentialLoss', align: 'right', width: 80},
+            {label: '成本总额', name: 'totalCost', index: 'totalCost', align: 'right', width: 80},
+            {label: '毛利', name: 'grossProfit', index: 'grossProfit', align: 'right', width: 80},
+            {label: '毛利率', name: 'grossProfitRatio', index: 'grossProfitRatio', align: 'right', width: 60},
+            {label: '来客数', name: 'guestNumber', index: 'guestNumber', align: 'right', width: 100},
+            {label: '客单价', name: 'guestUnitPrice', index: 'guestUnitPrice', align: 'right', width: 80},
+
+            {
+                label: '最后销售时间',
+                name: 'lastSalesTime',
+                index: 'lastSalesTime',
+                align: 'center',
+                width: 180,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }
+            }
+            // {label: '说明', name: 'guestUnitPrice', index: 'guestUnitPrice',align: 'right',width: 80}
+        ],
+        viewrecords: true,
+        height: 200,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        shrinkToFit: false,
+        autoScroll: true,   //开启水平滚动条
+        width: 1500,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "scroll"});
+        }
+    });
 });
-var myChart ;
+var myChart;
 
 let vm = new Vue({
     el: '#rrapp',
@@ -62,6 +85,7 @@ let vm = new Vue({
         date: '',
         refreshTime: 10,
         type: 'store',
+        refreshCount:0,
 
         storeId: '',
         merchSn: '',
@@ -81,7 +105,7 @@ let vm = new Vue({
         categoryId: '',
         categoryName: '',
 
-        showList:false ,
+        showList: false,
         compareDate: '',//比较日期
         storeId2: '',
         merchSn2: '',
@@ -98,7 +122,21 @@ let vm = new Vue({
         guestNumber2: '',
         guestUnitPrice2: '',
         lastSalesTime2: '',
-        intervalId:0,
+        intervalId: 0,
+        isCompare: false,
+        compare2: '',
+
+
+        temp: {
+            date: '',
+            refreshTime: 10,
+            type: '',
+            storeId: '',
+            merchSn: '',
+            salesDate: '',
+            categoryId: ''
+        },
+
 
         rateList: [
             {
@@ -114,7 +152,7 @@ let vm = new Vue({
         projectList: [
             {
                 id: '0',
-                name: '售总额'
+                name: '售总额'
             },
             {
                 id: '1',
@@ -157,18 +195,38 @@ let vm = new Vue({
             }
         ],
         dept: {
-            deptId:'',
-            deptName:''
+            deptId: '',
+            deptName: ''
         },
         category: {
-            categoryId:'',
+            categoryId: '',
             categoryName: ''
         },
-        seriesList:[], //保存饼图数据
-        seriesList2:[],
-        xAxisList:[],
+        seriesList: [], //保存饼图数据
+        seriesList2: [],
+        xAxisList: {    //主要用于保存 启动刷新时的条件和数据
+            storeId: '',
+            storeName: '',
+            merchSn: '',
+            merchName: '',
+            totalSales: '',
+            actualSales: '',
+            preferentialLoss: '',
+            totalCost: '',
+            grossProfit: '',
+            grossProfitRatio: '',
+            proportion: '',
+            guestNumber: '',
+            guestUnitPrice: '',
+            lastSalesTime: '',
+
+            salesDate: '0',
+            projectSelect: '0',
+            type:''
+        },
         dataList: [],
-        tooltip:{}
+        tooltip: {},
+        today:''
     },
     created() {
         this.rateSelect = this.rateList[0].id;
@@ -177,47 +235,51 @@ let vm = new Vue({
         this.formatsSelect = this.formatsList[0].id;
     },
     methods: {
-        addParam:function(postParam,dateType){ //添加请求参数, dateType: 0刷新,1比较
+        addParam: function (postParam, dateType) { //添加请求参数, dateType: 0刷新,1比较
             // var currentDate = new Date();
             // currentDate = currentDate.getFullYear()+'-'+(currentDate.getMonth()+1)+'-'+currentDate.getDate();
-            postParam={};
-            if(vm.type=="store"){
+            postParam = {};
+            if (!(Math.floor(vm.refreshTime) == vm.refreshTime && vm.refreshTime % 1 === 0 && vm.refreshTime >= 10)) {
+                alert("刷新间隔请输入10秒以上的整数!");
+                return false;
+            }
+            if (vm.type == "store") {
                 // vm.storeId = '10'; //测试
-                if(vm.storeId==''||vm.storeId==null){
+                if (vm.storeId == '' || vm.storeId == null) {
                     alert("请在输入框中输入门店编号!");
                     return false;
                 }
                 postParam.storeId = vm.storeId;
-            }else if(vm.type=="dept"){
-                if(vm.merchSn==''||vm.merchSn==null){
+            } else if (vm.type == "dept") {
+                if (vm.merchSn == '' || vm.merchSn == null) {
                     alert("请在输入框中输入部门编号!");
                     return false;
                 }
                 postParam.merchSn = vm.merchSn;
-            }else if(vm.type=="category"){
-                if(vm.storeId==''||vm.storeId==null){
+            } else if (vm.type == "category") {
+                if (vm.storeId == '' || vm.storeId == null) {
                     alert("请在输入框中输入门店编号和品类编号!");
                     return false;
                 }
-                if(vm.categoryId==''||vm.categoryId==null){
+                if (vm.categoryId == '' || vm.categoryId == null) {
                     alert("请在输入框中输入品类编号!");
                     return false;
                 }
                 postParam.storeId = vm.storeId;
                 postParam.categoryId = vm.categoryId;
-            }else{
-                alert("请选中查询条件(门店、部门、品类,选中一个)"+vm.type);
+            } else {
+                alert("请选中查询条件(门店、部门、品类,选中一个)" + vm.type);
                 return false;
             }
             //判断是刷新还是比较
-            if(dateType==0){
-                var sDate=vm.salesDate.replace(/(^\s+|\s+$)/g,'');//去两边空格;
-                if(sDate!=''){
+            if (dateType == 0) {
+                var sDate = vm.salesDate.replace(/(^\s+|\s+$)/g, '');//去两边空格;
+                if (sDate != '') {
                     postParam.salesDate = vm.salesDate;
                 }
-            }else if(dateType==1){
-                var sDate=vm.compareDate.replace(/(^\s+|\s+$)/g,'');//去两边空格;
-                if(sDate!=''){
+            } else if (dateType == 1) {
+                var sDate = vm.compareDate.replace(/(^\s+|\s+$)/g, '');//去两边空格;
+                if (sDate != '') {
                     postParam.compareDate = vm.compareDate;
                 }
             }
@@ -225,31 +287,101 @@ let vm = new Vue({
             // console.log(postParam);
             return postParam;
         },
-        refresh: function () {
-            var postParam={};
-            postParam =  vm.addParam(postParam,0);
-            if(!postParam){
+        refreshButton: function () {
+            //启动刷新 设置数据标识,程序自动刷新不会设置
+            vm.xAxisList.salesDate='';
+            var postParam = {};
+            postParam = vm.addParam(postParam, 0);
+            var start = vm.refresh(postParam);
+            console.log("start" + start);
+            if (!start) {
                 return;
+            //当天日期开启定时器刷新
+            }
+            var currentDate = new Date();
+            var month = currentDate.getMonth() + 1;
+            var day = currentDate.getDate();
+            if ((day + '').length == 1 && day < 10) {
+                day = "0" + day;
+            }
+            currentDate = currentDate.getFullYear() + '-' + (month > 10 ? month : "0" + month) + '-' + day;
+            vm.today = currentDate;
+            console.log(vm.salesDate);
+            console.log(currentDate);
+
+            if (vm.salesDate == currentDate) {
+                if(vm.intervalId == 0){
+                    alert("启动定时器刷新");
+                }
+                // vm.xAxisList.salesDate = currentDate;
+
+                vm.temp = postParam;
+                console.log(vm.temp);
+
+                vm.saveFlushTime();
+            } else {
+                console.log("关闭定时器刷新");
+                vm.clearFlushTime();
+            }
+        },
+        refresh: function (postParam) {
+            console.log('postParam')
+            console.log(postParam)
+            // postParam = vm.addParam(postParam, 0);
+            if (!postParam) {
+                return false;
             }
             vm.showList = true;
             $.ajax({
-                url:'../realtimeSalesDetection/query',
-                type:"POST",
-                data:postParam,
-                dataType:'json',
-                success:function(r){
+                url: '../realtimeSalesDetection/query',
+                type: "POST",
+                data: postParam,
+                dataType: 'json',
+                success: function (r) {
                     //查询显示表格数据
                     vm.showTable(postParam);
                     r = r.page.list[0];
                     console.log(r);
 
-                    if(r.lastSalesTime == null){
-                        if(vm.type == 'dept'){
-                            alert("该部门"+vm.salesDate+"无销售记录");
-                            return;
+                    if(vm.intervalId > 0){
+                        vm.refreshCount += 1;   //增加刷新次数
+                    }
+
+                    if (r.lastSalesTime == null) {
+                        //设置第一个系列数据为''
+                        if (vm.seriesList2.length > 0) {
+                            //统计图有数据删除清空第一条
+                            vm.seriesList2[0] = '';
+
+                            if (vm.dataList.length > 0) {
+                                vm.dataList[0] = '[]/销售总额:元()';
+                                console.log(vm.dataList);
+
+                            }
+                            myChart.setOption({
+                                xAxis: {
+                                    data: vm.dataList
+                                },
+                                series: [{
+                                    type: vm.seriesTypeSelect,
+                                    color: ['#dd6b66', '#759aa0'],
+                                    data: vm.seriesList2
+                                }]
+                            });
                         }
-                        alert("该门店"+vm.salesDate+"无销售记录");
-                        return;
+                        //自动刷新不是第一次不显示提示框
+                        if(vm.xAxisList.salesDate != ''&& vm.xAxisList.salesDate == vm.today && vm.intervalId > 0){
+                            return false;
+                        }
+                        if(vm.today == vm.salesDate){
+                            vm.xAxisList.salesDate = vm.salesDate;
+                        }
+                        if (vm.type == 'dept') {
+                            alert("该部门" + vm.salesDate + "无销售记录");
+                            return false;
+                        }
+                        alert("该门店" + vm.salesDate + "无销售记录");
+                        return false;
                     }
 
                     vm.storeId = r.storeId;
@@ -268,40 +400,191 @@ let vm = new Vue({
                     vm.lastSalesTime = r.lastSalesTime;
 
 
-                    vm.seriesList=[];
-                    vm.seriesList2 =[]; //清空 系列 数据
+                    vm.xAxisList.totalSales = r.totalSales;
+                    vm.xAxisList.actualSales = r.actualSales;
+                    vm.xAxisList.preferentialLoss = r.preferentialLoss;
+                    vm.xAxisList.totalCost = r.totalCost;
+                    vm.xAxisList.grossProfit = r.grossProfit;
+                    vm.xAxisList.grossProfitRatio = r.grossProfitRatio;
+                    vm.xAxisList.proportion = r.proportion;
+                    vm.xAxisList.guestNumber = r.guestNumber;
+                    vm.xAxisList.guestUnitPrice = r.guestUnitPrice;
+                    vm.xAxisList.lastSalesTime = r.lastSalesTime;
+
+                    if(vm.xAxisList.salesDate == ''){ //手动刷新会重置vm.xAxisList.salesDate为 ''
+
+                        vm.xAxisList.storeId = r.storeId;
+                        vm.xAxisList.storeName = r.storeName;
+                        vm.xAxisList.merchSn = r.merchSn;
+                        vm.xAxisList.merchName = r.merchName;
+
+                        vm.xAxisList.totalSales = r.totalSales;
+                        vm.xAxisList.actualSales = r.actualSales;
+                        vm.xAxisList.preferentialLoss = r.preferentialLoss;
+                        vm.xAxisList.totalCost = r.totalCost;
+                        vm.xAxisList.grossProfit = r.grossProfit;
+                        vm.xAxisList.grossProfitRatio = r.grossProfitRatio;
+                        vm.xAxisList.proportion = r.proportion;
+                        vm.xAxisList.guestNumber = r.guestNumber;
+                        vm.xAxisList.guestUnitPrice = r.guestUnitPrice;
+                        vm.xAxisList.lastSalesTime = r.lastSalesTime;
+
+                        vm.xAxisList.salesDate = vm.salesDate;
+                        vm.xAxisList.projectSelect = vm.projectSelect;
+                        vm.xAxisList.type = vm.type;
+                    }
+
+                    vm.seriesList = [];
+                    vm.seriesList2 = []; //清空 系列 数据
 
                     vm.showEcharts();
+
+                    if(vm.isCompare){ //有比较记录再调用刷新一次数据渲染至画布上
+                        vm.compare('1');
+                    }
                 }
 
             });
+            return true;
         },
-        compare: function () {
-            if(vm.seriesList2.length <1){
-                alert("请先刷新一条数据再比较!");
+        compare: function (c) {
+            if(c == '1'){ //程序调用
+                if(vm.compare2 == ''){
+                    return;
+                }
+                vm.compareDate = vm.compare2;
+
+                console.log("compare")
+                if (vm.seriesList2.length > 1) {
+
+                    //删除并替换
+                    if (vm.projectSelect == '0') {
+                        vm.seriesList2.splice(1, 1, vm.totalSales2);
+                        if (vm.xAxisList.type == 'dept') {
+                            vm.dataList.splice(1, 1, '[' + vm.merchSn + ']' + vm.merchName2 + '/销售总额:' + vm.totalSales2 + '元(' + vm.salesDate2 + ')');
+                        } else {
+                            vm.dataList.splice(1, 1, '[' + vm.storeId + ']' + vm.storeName2 + '/销售总额:' + vm.totalSales2 + '元(' + vm.salesDate2 + ')');
+                        }
+                        // pie 设置
+                        vm.seriesList.splice(1, 1, {value: vm.totalSales2, name: vm.dataList[1]});
+                    } else if (vm.projectSelect == '1') {
+                        vm.seriesList2.splice(1, 1, vm.guestUnitPrice);
+                        if (vm.xAxisList.type == 'dept') {
+                            vm.dataList.splice(1, 1, '[' + vm.merchSn + ']' + vm.merchName2 + '/客单价:' + vm.guestUnitPrice2 + '元(' + vm.salesDate2 + ')');
+                        } else {
+                            vm.dataList.splice(1, 1, '[' + vm.storeId + ']' + vm.storeName2 + '/客单价:' + vm.guestUnitPrice2 + '元(' + vm.salesDate2 + ')');
+                        }
+                        // pie 设置
+                        vm.seriesList.splice(1, 1, {value: vm.guestUnitPrice2, name: vm.dataList[1]});
+                    }
+
+                    console.log("compare seriesList")
+                    console.log(vm.seriesList)
+
+                }
+                else {
+
+                    if (vm.projectSelect == '0') {
+                        vm.seriesList2.push(vm.totalSales2);
+                        if (vm.xAxisList.type == 'dept') {
+                            vm.dataList.push('[' + vm.merchSn + ']' + vm.merchName2 + '/销售总额:' + vm.totalSales2 + '元(' + vm.salesDate2 + ')');
+                        } else {
+                            vm.dataList.push('[' + vm.storeId + ']' + vm.storeName2 + '/销售总额:' + vm.totalSales2 + '元(' + vm.salesDate2 + ')');
+                        }
+                        // pie 设置
+                        vm.seriesList.push({value: vm.totalSales2, name: vm.dataList[1]});
+
+                    } else if (vm.projectSelect == '1') {
+                        vm.seriesList2.push(vm.guestUnitPrice2);
+                        if (vm.xAxisList.type== 'dept') {
+                            vm.dataList.push('[' + vm.merchSn + ']' + vm.merchName2 + '/客单价:' + vm.guestUnitPrice2 + '元(' + vm.salesDate2 + ')');
+                        } else {
+                            vm.dataList.push('[' + vm.storeId + ']' + vm.storeName2 + '/客单价:' + vm.guestUnitPrice2 + '元(' + vm.salesDate2 + ')');
+                        }
+
+                        // pie 设置
+                        vm.seriesList.push({value: vm.guestUnitPrice2, name: vm.dataList[1]});
+                    }
+                }
+
+                if (vm.seriesTypeSelect == "pie") {
+                    vm.seriesList2 = vm.seriesList.concat();
+                    console.log("compare pie")
+                    console.log(vm.seriesList2)
+
+                }
+
+                myChart.setOption({
+                    xAxis: {
+                        data: vm.dataList
+                    },
+                    series: [{
+                        type: vm.seriesTypeSelect,
+                        color: ['#dd6b66', '#759aa0'],
+                        data: vm.seriesList2
+                    }]
+                });
+
+
+
                 return;
+            }else{ //手动比较
+                vm.refreshButton();
+                vm.isCompare = true;
+                vm.compare2 = vm.compareDate;
             }
-            vm.switchProjectView();
-            var postParam={};
-            postParam =  vm.addParam(postParam,1);
-            if(!postParam){
+            // vm.switchProjectView();
+            var postParam = {};
+            postParam = vm.addParam(postParam, 1);
+            if (!postParam) {
                 return;
             }
+
             $.ajax({
-                url:'../realtimeSalesDetection/query',
-                type:"POST",
-                data:postParam,
-                dataType:'json',
-                success:function(r){
+                url: '../realtimeSalesDetection/query',
+                type: "POST",
+                data: postParam,
+                dataType: 'json',
+                success: function (r) {
                     console.log(r);
                     r = r.page.list[0];
                     console.log(r);
-                    if(r.lastSalesTime == null){
-                        if(vm.type == 'dept'){
-                            alert("该部门"+vm.compareDate+"无销售记录");
+                    if (r.lastSalesTime == null) {
+                        vm.compare2 = '';
+
+                        console.log(vm.seriesList2.length)
+                        console.log('vm.seriesList2.length')
+                        console.log(vm.seriesList2)
+
+                        if (vm.seriesList2.length > 1) {
+                            //统计图有两条数据删除一条
+                            vm.seriesList2.pop();
+                            console.log(vm.seriesList2)
+
+                            if (vm.dataList.length > 1) {
+                                vm.dataList.pop();
+                                console.log('vm.dataList')
+                                console.log(vm.dataList)
+
+                            }
+                            myChart.setOption({
+                                xAxis: {
+                                    data: vm.dataList
+                                },
+                                series: [{
+                                    type: vm.seriesTypeSelect,
+                                    color: ['#dd6b66', '#759aa0'],
+                                    data: vm.seriesList2
+                                }]
+                            });
+                        }
+                        if (vm.type == 'dept') {
+
+                            alert("该部门" + vm.compareDate + "无销售记录");
                             return;
                         }
-                        alert("该门店"+vm.compareDate+"无销售记录");
+
+                        alert("该门店" + vm.compareDate + "无销售记录");
                         return;
                     }
 
@@ -321,64 +604,67 @@ let vm = new Vue({
                     vm.guestUnitPrice2 = r.guestUnitPrice;
                     vm.lastSalesTime2 = r.lastSalesTime;
 
-                    if(vm.seriesList2.length > 1){
+                    if (vm.seriesList2.length > 1) {
 
                         //删除并替换
-                        if(vm.projectSelect=='0'){
-                            vm.seriesList2.splice(1,1,vm.totalSales2);
-                            if(vm.type == 'dept'){
-                                vm.dataList.splice(1,1,'['+vm.merchSn+']'+vm.merchName2+'/售总额:'+vm.totalSales2+'('+vm.salesDate2+')');
-                            }else{
-                                vm.dataList.splice(1,1,'['+vm.storeId+']'+vm.storeName2+'/售总额:'+vm.totalSales2+'('+vm.salesDate2+')');
+                        if (vm.projectSelect == '0') {
+                            vm.seriesList2.splice(1, 1, vm.totalSales2);
+                            if (vm.xAxisList.type== 'dept') {
+                                vm.dataList.splice(1, 1, '[' + vm.merchSn + ']' + vm.merchName2 + '/售总额:' + vm.totalSales2 + '(' + vm.salesDate2 + ')');
+                            } else {
+                                vm.dataList.splice(1, 1, '[' + vm.storeId + ']' + vm.storeName2 + '/售总额:' + vm.totalSales2 + '(' + vm.salesDate2 + ')');
                             }
                             // pie 设置
-                            vm.seriesList.splice(1,1,{value:vm.totalSales2,name:vm.dataList[1]});
-                        }else if(vm.projectSelect=='1'){
-                            vm.seriesList2.splice(1,1,vm.guestUnitPrice);
-                            if(vm.type == 'dept'){
-                                vm.dataList.splice(1,1,'['+vm.merchSn+']'+vm.merchName2+'/客单价:'+vm.guestUnitPrice2+'('+vm.salesDate2+')');
-                            }else{
-                                vm.dataList.splice(1,1,'['+vm.storeId+']'+vm.storeName2+'/客单价:'+vm.guestUnitPrice2+'('+vm.salesDate2+')');
+                            vm.seriesList.splice(1, 1, {value: vm.totalSales2, name: vm.dataList[1]});
+                        } else if (vm.projectSelect == '1') {
+                            vm.seriesList2.splice(1, 1, vm.guestUnitPrice);
+                            if (vm.xAxisList.type== 'dept') {
+                                vm.dataList.splice(1, 1, '[' + vm.merchSn + ']' + vm.merchName2 + '/客单价:' + vm.guestUnitPrice2 + '(' + vm.salesDate2 + ')');
+                            } else {
+                                vm.dataList.splice(1, 1, '[' + vm.storeId + ']' + vm.storeName2 + '/客单价:' + vm.guestUnitPrice2 + '(' + vm.salesDate2 + ')');
                             }
                             // pie 设置
-                            vm.seriesList.splice(1,1,{value:vm.guestUnitPrice2,name:vm.dataList[1]});
+                            vm.seriesList.splice(1, 1, {value: vm.guestUnitPrice2, name: vm.dataList[1]});
                         }
 
-                    }else{
+                    } else {
 
-                        if(vm.projectSelect=='0'){
+                        if (vm.projectSelect == '0') {
                             vm.seriesList2.push(vm.totalSales2);
-                            if(vm.type == 'dept'){
-                                vm.dataList.push('['+vm.merchSn+']'+vm.merchName2+'/售总额:'+vm.totalSales2+'('+vm.salesDate2+')');
-                            }else{
-                                vm.dataList.push('['+vm.storeId+']'+vm.storeName2+'/售总额:'+vm.totalSales2+'('+vm.salesDate2+')');
+                            if (vm.xAxisList.type== 'dept') {
+                                vm.dataList.push('[' + vm.merchSn + ']' + vm.merchName2 + '/售总额:' + vm.totalSales2 + '(' + vm.salesDate2 + ')');
+                            } else {
+                                vm.dataList.push('[' + vm.storeId + ']' + vm.storeName2 + '/售总额:' + vm.totalSales2 + '(' + vm.salesDate2 + ')');
                             }
                             // pie 设置
-                            vm.seriesList.push({value:vm.totalSales2,name:vm.dataList[1]});
+                            vm.seriesList.push({value: vm.totalSales2, name: vm.dataList[1]});
 
-                        }else if(vm.projectSelect=='1'){
+                        } else if (vm.projectSelect == '1') {
                             vm.seriesList2.push(vm.guestUnitPrice2);
-                            if(vm.type == 'dept'){
-                                vm.dataList.push('['+vm.merchSn+']'+vm.merchName2+'/客单价:'+vm.guestUnitPrice2+'('+vm.salesDate2+')');
-                            }else{
-                                vm.dataList.push('['+vm.storeId+']'+vm.storeName2+'/客单价:'+vm.guestUnitPrice2+'('+vm.salesDate2+')');
+                            if (vm.xAxisList.type== 'dept') {
+                                vm.dataList.push('[' + vm.merchSn + ']' + vm.merchName2 + '/客单价:' + vm.guestUnitPrice2 + '(' + vm.salesDate2 + ')');
+                            } else {
+                                vm.dataList.push('[' + vm.storeId + ']' + vm.storeName2 + '/客单价:' + vm.guestUnitPrice2 + '(' + vm.salesDate2 + ')');
                             }
 
                             // pie 设置
-                            vm.seriesList.push({value:vm.guestUnitPrice2,name:vm.dataList[1]});
+                            vm.seriesList.push({value: vm.guestUnitPrice2, name: vm.dataList[1]});
                         }
                     }
-                    if(vm.seriesTypeSelect == "pie"){
+                    if (vm.seriesTypeSelect == "pie") {
                         vm.seriesList2 = vm.seriesList.concat();
+                        // console.log("ppp")
                     }
+                    // console.log("seriesList2")
+                    // console.log(vm.seriesList2)
 
                     myChart.setOption({
                         xAxis: {
                             data: vm.dataList
                         },
-                        series:[{
+                        series: [{
                             type: vm.seriesTypeSelect,
-                            color: ['#dd6b66','#759aa0'],
+                            color: ['#dd6b66', '#759aa0'],
                             data: vm.seriesList2
                         }]
                     });
@@ -387,15 +673,23 @@ let vm = new Vue({
             });
 
         },
-        saveFlushTime:function(){
+        saveFlushTime: function (postParam) {
+            console.log('typeof vm.refreshTime');
             console.log(typeof vm.refreshTime);
-            vm.intervalId = window.setInterval('vm.refresh()',vm.refreshTime*1000)
+            console.log(vm.temp);
+
+            window.clearInterval(vm.intervalId);
+            vm.intervalId = window.setInterval('vm.refresh(vm.temp)', vm.refreshTime * 1000)
         },
-        clearFlushTime:function(){
+        clearFlushTime: function () {
             window.clearInterval(vm.intervalId);
+            if(vm.intervalId > 0){
+                alert("停止刷新");
+            }
             vm.intervalId = 0;
+            vm.refreshCount=0;
         },
-        seriesTypeSwitch: function(){
+        seriesTypeSwitch: function () {
             console.log(vm.seriesTypeSelect);
         },
         showEcharts: function () {
@@ -406,30 +700,50 @@ let vm = new Vue({
             myChart.showLoading();
 
 
-            //项目下拉框判断       6-19,饼图设置
-            var temp ='';
-            if(vm.projectSelect=='0'){
-                if(vm.type == 'dept'){
-                    temp = '['+vm.merchSn+']'+vm.merchName+'/售总额:'+vm.totalSales+'('+vm.salesDate+')';
-                }else{
-                    temp = '['+vm.storeId+']'+vm.storeName+'/售总额:'+vm.totalSales+'('+vm.salesDate+')';
+            //项目下拉框判断       6-19,饼图设置 vm.xAxisList
+            var temp = '';
+            if (vm.xAxisList.projectSelect == '0') {
+                if (vm.xAxisList.type == 'dept') {
+                    temp = '[' + vm.xAxisList.merchSn + ']' + vm.xAxisList.merchName + '/售总额:' + vm.xAxisList.totalSales + '(' + vm.xAxisList.salesDate + ')';
+                } else {
+                    temp = '[' + vm.xAxisList.storeId + ']' + vm.xAxisList.storeName + '/售总额:' + vm.xAxisList.totalSales + '(' + vm.xAxisList.salesDate + ')';
                 }
-                vm.seriesList2.push(vm.totalSales);
-                vm.seriesList.push({value:vm.totalSales,name:temp});
-
-            }else if(vm.projectSelect=='1'){
-                if(vm.type == 'dept'){
-                    temp = '['+vm.merchSn+']'+vm.merchName+'/客单价:'+vm.guestUnitPrice+'('+vm.salesDate+')';
-                }else{
-                    temp = '['+vm.storeId+']'+vm.storeName+'/客单价:'+vm.guestUnitPrice+'('+vm.salesDate+')';
+                vm.seriesList2.push(vm.xAxisList.totalSales);
+                vm.seriesList.push({value: vm.xAxisList.totalSales, name: temp});
+
+            } else if (vm.xAxisList.projectSelect == '1') {
+                if (vm.xAxisList.type == 'dept') {
+                    temp = '[' + vm.xAxisList.merchSn + ']' + vm.xAxisList.merchName + '/客单价:' + vm.xAxisList.guestUnitPrice + '(' + vm.xAxisList.salesDate + ')';
+                } else {
+                    temp = '[' + vm.xAxisList.storeId + ']' + vm.xAxisList.storeName + '/客单价:' + vm.xAxisList.guestUnitPrice + '(' + vm.xAxisList.salesDate + ')';
                 }
-                vm.seriesList2.push(vm.guestUnitPrice);
-                vm.seriesList.push({value:vm.guestUnitPrice,name:temp});
+                vm.seriesList2.push(vm.xAxisList.guestUnitPrice);
+                vm.seriesList.push({value: vm.xAxisList.guestUnitPrice, name: temp});
 
             }
+
+            // if (vm.projectSelect == '0') {
+            //     if (vm.xAxisList.type== 'dept') {
+            //         temp = '[' + vm.merchSn + ']' + vm.merchName + '/销售总额:' + vm.totalSales + '元(' + vm.salesDate + ')';
+            //     } else {
+            //         temp = '[' + vm.storeId + ']' + vm.storeName + '/销售总额:' + vm.totalSales + '元(' + vm.salesDate + ')';
+            //     }
+            //     vm.seriesList2.push(vm.totalSales);
+            //     vm.seriesList.push({value: vm.totalSales, name: temp});
+            //
+            // } else if (vm.projectSelect == '1') {
+            //     if (vm.xAxisList.type== 'dept') {
+            //         temp = '[' + vm.merchSn + ']' + vm.merchName + '/客单价:' + vm.guestUnitPrice + '元(' + vm.salesDate + ')';
+            //     } else {
+            //         temp = '[' + vm.storeId + ']' + vm.storeName + '/客单价:' + vm.guestUnitPrice + '元(' + vm.salesDate + ')';
+            //     }
+            //     vm.seriesList2.push(vm.guestUnitPrice);
+            //     vm.seriesList.push({value: vm.guestUnitPrice, name: temp});
+            //
+            // }
             vm.dataList = [temp];
 
-            if(vm.seriesTypeSelect == "pie"){
+            if (vm.seriesTypeSelect == "pie") {
                 vm.seriesList2 = vm.seriesList.concat();
             }
 
@@ -442,18 +756,18 @@ let vm = new Vue({
                 title: {
                     // textAlign: 'right',
                     text: '实时销售统计图',
-                    x:'center',
-                    textStyle:{
+                    x: 'center',
+                    textStyle: {
                         //文字颜色
-                        color:'#17233d',
+                        color: '#17233d',
                         //字体风格,'normal','italic','oblique'
-                        fontStyle:'normal',
+                        fontStyle: 'normal',
                         //字体粗细 'normal','bold','bolder','lighter',100 | 200 | 300 | 400...
-                        fontWeight:'bold',
+                        fontWeight: 'bold',
                         //字体系列
-                        fontFamily:'sans-serif',
+                        fontFamily: 'sans-serif',
                         //字体大小
-                        fontSize:28
+                        fontSize: 28
                     }
                 },
                 tooltip: {
@@ -462,22 +776,22 @@ let vm = new Vue({
                     }
                 },
                 legend: {
-                    data:['/售总额']
+                    data: ['/售总额']
                 },
                 xAxis: {
                     data: vm.dataList,
                     axisLabel: {
-                        interval:0
+                        interval: 0
                     }
                 },
                 yAxis: {},
-                series:[{
-                    barMaxWidth: '20%' ,
-                    barWidth: '50%' ,
+                series: [{
+                    barMaxWidth: '20%',
+                    barWidth: '50%',
                     radius: '55%',
                     roseType: 'angle',
                     type: vm.seriesTypeSelect,
-                    color: ['#dd6b66','#759aa0'],
+                    color: ['#dd6b66', '#759aa0'],
                     data: vm.seriesList2
                 }]
             };
@@ -488,11 +802,11 @@ let vm = new Vue({
             myChart.setOption(option);
 
         },
-        tooltipFormatter: function(){
-            if(vm.type=='dept'){
-                return '['+vm.merchSn+']'+vm.merchName+'/售总额:'+vm.totalSales+'('+vm.salesDate+')';
+        tooltipFormatter: function () {
+            if (vm.type == 'dept') {
+                return '[' + vm.merchSn + ']' + vm.merchName + '/售总额:' + vm.totalSales + '(' + vm.salesDate + ')';
             }
-            return '['+vm.storeId+']'+vm.storeName+'/售总额:'+vm.totalSales+'('+vm.salesDate+')';
+            return '[' + vm.storeId + ']' + vm.storeName + '/售总额:' + vm.totalSales + '(' + vm.salesDate + ')';
         },
         showTable: function (postParam) {
 

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

@@ -78,7 +78,7 @@ $(function () {
         shrinkToFit: false,
         autoScroll: true,   //开启水平滚动条
         width: 1600,
-        multiselect: true,
+        multiselect: true, //是否可以多选
         pager: "#jqGridPager",
         jsonReader: {
             root: "page.list",
@@ -91,6 +91,15 @@ $(function () {
             rows: "limit",
             order: "order"
         },
+        multiboxonly:true, //只能单选
+        beforeSelectRow:function beforeSelectRow() //只能单选
+        {
+            var s;
+            s = $("#table_name").jqGrid('getGridParam', 'selrow'); //获取最后选择行的id
+            $("#table_name").jqGrid('setSelection', s);
+            $("#table_name").jqGrid('resetSelection');
+            return(true);
+        },
         gridComplete: function () {
             $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "scroll"});
         }
@@ -142,7 +151,7 @@ var vm = new Vue({
                 {required: true, message: '名称不能为空', trigger: 'blur'}
             ]*/
         },
-        q: {name: '', goodsSn: '', prodBarcode: '',goodsBizType:'', merchSn: '',thirdPartyMerchCode:''},
+        q: {name: '', goodsSn: '', prodBarcode: '',goodsBizType:'', merchSn: '',thirdPartyMerchCode:'',englishName:''},
         attributes: [],
         attributeEntityList: [{'id': '', 'goodsId': '', 'attributeId': '', 'value': '', 'isDelete': 0}],
         productEntityList: [{'id': '', 'goodsId': '', 'goodsSpecificationIds': '', 'goodsSpecificationNameValue': '', 'goodsSn': '', 'goodsNumber': '', 'isDelete': 0, 'goodsDefault': 0}],
@@ -205,7 +214,8 @@ var vm = new Vue({
                 prodBarcode: '',
                 goodsBizType: '',
                 merchSn: '',
-                thirdPartyMerchCode:''
+                thirdPartyMerchCode:'',
+                englishName:''
             }
         },
         query: function () {
@@ -698,6 +708,15 @@ var vm = new Vue({
         //         vm.categories = r.list;
         //     });
         // }
+        exportGoods :function () {
+            var params = {};
+            params.name = vm.q.name, params.englishName = vm.q.englishName, params.plu = vm.q.plu,
+                params.goodsSn = vm.q.goodsSn, params.prodBarcode = vm.q.prodBarcode,
+                params.goodsBizType = vm.q.goodsBizType,params.merchSn = vm.q.merchSn,
+                params.thirdPartyMerchCode = vm.q.thirdPartyMerchCode;
+            exportFile('#rrapp', '../goods/export', params);
+
+        }
     },
     mounted() {
         // this.uploadList = this.$refs.upload.fileList;

+ 9 - 0
kmall-admin/src/main/webapp/js/shop/goodsbatch.js

@@ -26,6 +26,15 @@ $(function () {
         autoScroll: true,   //开启水平滚动条
         width: 1500,
         multiselect: true,
+        multiboxonly:true, //只能单选
+        beforeSelectRow:function beforeSelectRow() //只能单选
+        {
+            var s;
+            s = $("#table_name").jqGrid('getGridParam', 'selrow'); //获取最后选择行的id
+            $("#table_name").jqGrid('setSelection', s);
+            $("#table_name").jqGrid('resetSelection');
+            return(true);
+        },
         pager: "#jqGridPager",
         jsonReader: {
             root: "page.list",

+ 4 - 2
kmall-admin/src/main/webapp/js/shop/goodstransportinfodetail.js

@@ -60,8 +60,10 @@ let vm = new Vue({
         title: null,
 		goodsTransportInfoDetail: {},
         ruleValidate: {
-            sku:{required: true, message: 'sku不能为空', trigger: 'blur'}
-            // wayStatus:{required: true, message: '是否在途不能为空', trigger: 'blur'}
+            sku:{required: true, message: 'sku不能为空', trigger: 'blur'},
+            supplierId:{required: true, message: '供应商id不能为空', trigger: 'blur'},
+            originCountry:{required: true, message: '原产地不能为空', trigger: 'blur'},
+            num:{required: true, message: '数量不能为空', trigger: 'blur'}
         },
 		q: {
             wayStatus: null,

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

@@ -4,7 +4,7 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-            {label: '变动类型', name: 'changeType', index: 'change_type', width: 80, align: 'center',
+            {label: '变动类型', name: 'changeType', index: 'change_type', width: 120, align: 'center',
                 formatter: function (value) {
                     if (value == '0') {
                         return '还原';
@@ -27,7 +27,7 @@ $(function () {
 			{label: '所属商户', name: 'merchName', index: 'merchName', width: 80, align: 'center'},
 			{label: '第三方商户代码', name: 'thirdPartyMerchCode', index: 'third_party_merch_code', width: 140, align: 'center'},
             {label: '第三方商户名称', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 140, align: 'center'},
-            {label: '所属商品', name: 'goodsName', index: 'goodsName', width: 180},
+            {label: '所属商品', name: 'goodsName', index: 'goodsName', width: 220},
             // {label: '是否有效', name: 'isValid', index: 'is_valid', width: 50, align: 'center',
             //     formatter: function (value) {
             //         if (value == '0') {
@@ -56,7 +56,7 @@ $(function () {
         shrinkToFit: false,
         autoScroll: true,   //开启水平滚动条
         width: 1500,
-        multiselect: true,
+        // multiselect: true,
         pager: "#jqGridPager",
         jsonReader: {
             root: "page.list",

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

@@ -447,6 +447,12 @@ let vm = new Vue({
                     }
                 });
             });
+        },
+        exportOffilineOrder : function () {
+            var params = {};
+            params.orderSn=vm.q.orderSn,
+                params.orderStatus=vm.q.orderStatus;
+            exportFile('#rrapp', '../order/exportOffilineOrder', params);
         }
     },
     created: function () {

+ 9 - 3
kmall-admin/src/main/webapp/js/shop/order.js

@@ -542,9 +542,15 @@ let vm = new Vue({
         },
         exportOrder: function() {
             var params = {};
-            params.orderSn = vm.q.orderSn, params.orderStatus = vm.q.orderStatus, params.merchOrderSn = vm.q.merchOrderSn
-                , params.startTime = vm.q.startTime, params.endTime = vm.q.endTime, params.storeId = vm.q.storeId,params.payStatus = vm.q.payStatus,
-                params.orderBizType = vm.q.orderBizType,params.sku = vm.q.sku,
+            params.orderSn = vm.q.orderSn,
+                params.orderStatus = vm.q.orderStatus,
+                params.merchOrderSn = vm.q.merchOrderSn,
+                params.startTime = vm.q.startTime,
+                params.endTime = vm.q.endTime,
+                params.storeId = vm.q.storeId,
+                params.payStatus = vm.q.payStatus,
+                params.orderBizType = vm.q.orderBizType,
+                params.sku = vm.q.sku,
                 params.thirdMerchSn=vm.q.thirdMerchSn,
                 params.supplierThirdId=vm.q.supplierThirdId;
 

+ 20 - 1
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -113,6 +113,15 @@ $(function () {
             rows: "limit",
             order: "order"
         },
+        multiboxonly:true, //只能单选
+        beforeSelectRow:function beforeSelectRow() //只能单选
+        {
+            var s;
+            s = $("#table_name").jqGrid('getGridParam', 'selrow'); //获取最后选择行的id
+            $("#table_name").jqGrid('setSelection', s);
+            $("#table_name").jqGrid('resetSelection');
+            return(true);
+        },
         gridComplete: function () {
             $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "scroll"});
         }
@@ -169,7 +178,10 @@ var vm = new Vue({
             storeId: '',
             goodsName: '',
             productSn: '',
-            goodsSn: '', category: '', categoryTwo: '', goodsBizType:'',
+            goodsSn: '',
+            category: '',
+            categoryTwo: '',
+            goodsBizType:'',
             thirdPartyMerchCode:''
         },
         stores: [],
@@ -758,6 +770,13 @@ var vm = new Vue({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
+        },
+        exportStoreProductStock :function () {
+            var params = {};
+            params.storeId = vm.q.storeId, params.goodsName = vm.q.goodsName, params.goodsSn = vm.q.goodsSn,
+                params.category = vm.q.category, params.categoryTwo = vm.q.categoryTwo,
+                params.goodsBizType = vm.q.goodsBizType,params.thirdPartyMerchCode = vm.q.thirdPartyMerchCode;
+            exportFile('#rrapp', '../productstorerela/export', params);
         }
     },
     mounted() {

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

@@ -4,7 +4,7 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-            {label: '变动类型', name: 'changeType', index: 'change_type', width: 160,
+            {label: '变动类型', name: 'changeType', index: 'change_type', width: 160, align: 'center',
                 formatter: function (value) {
                     if (value == '0') {
                         return '还原';
@@ -55,7 +55,7 @@ $(function () {
         shrinkToFit: false,
         autoScroll: true,   //开启水平滚动条
         width: 1500,
-        multiselect: true,
+        // multiselect: true,
         pager: "#jqGridPager",
         jsonReader: {
             root: "page.list",

BIN
kmall-admin/src/main/webapp/statics/file/goods_transport_info_detail_import_yyyymmdd.v1.0.0.xls


+ 2 - 1
kmall-common/src/main/java/com/kmall/common/constant/Dict.java

@@ -561,7 +561,8 @@ public class Dict {
      */
     public enum isMergePay {
         item_0("0", "单笔支付"),
-        item_1("1", "合并支付");
+        item_1("1", "合并支付"),
+        item_2("2", "合并支付");
 
         private String item;
         private String itemName;