ソースを参照

Merge branch 'master' of zcb/kmall-pt-general into master

张创标 4 年 前
コミット
207c9ec9cb
100 ファイル変更2417 行追加538 行削除
  1. 51 34
      kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java
  2. 15 1
      kmall-admin/src/main/java/com/kmall/admin/controller/CategoryController.java
  3. 4 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  4. 4 4
      kmall-admin/src/main/java/com/kmall/admin/controller/kmall2eccs/KtoEccsController.java
  5. 137 0
      kmall-admin/src/main/java/com/kmall/admin/controller/kmall2oms/KtoOmsController.java
  6. 63 0
      kmall-admin/src/main/java/com/kmall/admin/controller/oms2kmall/Oms2KmallController.java
  7. 2 1
      kmall-admin/src/main/java/com/kmall/admin/controller/shop/ShopErrorPriceRecordController.java
  8. 43 30
      kmall-admin/src/main/java/com/kmall/admin/controller/statistics/MonthlyCustomersController.java
  9. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/BrandDao.java
  10. 1 0
      kmall-admin/src/main/java/com/kmall/admin/dao/CategoryDao.java
  11. 1 2
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  12. 6 1
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  13. 8 0
      kmall-admin/src/main/java/com/kmall/admin/dao/StoreTransferInventoryOrderDetailDao.java
  14. 2 1
      kmall-admin/src/main/java/com/kmall/admin/dao/statistics/MonthlyCustomersDao.java
  15. 29 0
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDto.java
  16. 9 0
      kmall-admin/src/main/java/com/kmall/admin/dto/StoreGoodsDto.java
  17. 43 0
      kmall-admin/src/main/java/com/kmall/admin/dto/TransferGoodsDto.java
  18. 10 0
      kmall-admin/src/main/java/com/kmall/admin/entity/BrandEntity.java
  19. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/BrandService.java
  20. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/CategoryService.java
  21. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java
  22. 6 1
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  23. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/StoreTransferInventoryOrderDetailService.java
  24. 67 18
      kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java
  25. 28 17
      kmall-admin/src/main/java/com/kmall/admin/service/impl/CategoryServiceImpl.java
  26. 218 71
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  27. 6 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  28. 222 32
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  29. 3 3
      kmall-admin/src/main/java/com/kmall/admin/service/impl/RealtimeSalesDetectionServiceImpl.java
  30. 11 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreTransferInventoryOrderDetailServiceImpl.java
  31. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/compared/OrderComparedErrorServiceImpl.java
  32. 75 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/oms2kmall/Oms2KmallServiceImpl.java
  33. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/statistics/MonthlyCustomersServiceImpl.java
  34. 13 0
      kmall-admin/src/main/java/com/kmall/admin/service/kmall2oms/KtoOmsService.java
  35. 15 0
      kmall-admin/src/main/java/com/kmall/admin/service/oms2kmall/Oms2KmallService.java
  36. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/statistics/MonthlyCustomersService.java
  37. 3 3
      kmall-admin/src/main/java/com/kmall/admin/task/SendToEccsTask.java
  38. 69 0
      kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonStringUnicodeSerializer.java
  39. 270 0
      kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonUtil.java
  40. 119 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/response/TransferResponse.java
  41. 150 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/Result.java
  42. 36 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/ResultCodeEnum.java
  43. 1 1
      kmall-admin/src/main/java/com/kmall/admin/websocket/WebSocketServer.java
  44. 5 6
      kmall-admin/src/main/resources/XmlTemplate/BrandDtoList.xml
  45. 10 7
      kmall-admin/src/main/resources/XmlTemplate/GoodsDtoList.xml
  46. 4 3
      kmall-admin/src/main/resources/XmlTemplate/StoreGoodsDtoList.xml
  47. 41 41
      kmall-admin/src/main/resources/conf/fastdfs.properties
  48. 38 12
      kmall-admin/src/main/resources/mybatis/mapper/BrandDao.xml
  49. 28 24
      kmall-admin/src/main/resources/mybatis/mapper/CategoryDao.xml
  50. 21 5
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  51. 6 0
      kmall-admin/src/main/resources/mybatis/mapper/MngChangeDao.xml
  52. 36 15
      kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
  53. 37 15
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  54. 14 8
      kmall-admin/src/main/resources/mybatis/mapper/StoreMngChangeDao.xml
  55. 32 8
      kmall-admin/src/main/resources/mybatis/mapper/StoreTransferInventoryOrderDetailDao.xml
  56. 24 8
      kmall-admin/src/main/resources/mybatis/mapper/statistics/MonthlyCustomersDao.xml
  57. 3 0
      kmall-admin/src/main/resources/spring/spring-shiro.xml
  58. 5 1
      kmall-admin/src/main/webapp/WEB-INF/page/sale/monthlyCustomers.html
  59. 13 12
      kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html
  60. 3 2
      kmall-admin/src/main/webapp/WEB-INF/page/sale/top10ForProduct.html
  61. 7 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/brand.html
  62. 3 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html
  63. 43 21
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  64. 5 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/mngchange.html
  65. 6 3
      kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html
  66. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/shoperrorpricerecord.html
  67. 3 5
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storemngchange.html
  68. 6 6
      kmall-admin/src/main/webapp/WEB-INF/page/sys/main.html
  69. 2 1
      kmall-admin/src/main/webapp/WEB-INF/page/sys/role.html
  70. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/sys/user.html
  71. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2lowpricewarning.js
  72. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2orderingearlywarningreminds.js
  73. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2reminderrulesconfig.js
  74. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2shippingreminderalarm.js
  75. 5 2
      kmall-admin/src/main/webapp/js/cashier/cashierLoginRecord.js
  76. 5 2
      kmall-admin/src/main/webapp/js/cashier/cashierManager.js
  77. 5 2
      kmall-admin/src/main/webapp/js/cashier/salerecord.js
  78. 6 3
      kmall-admin/src/main/webapp/js/compared/importpayorderrecord.js
  79. 6 3
      kmall-admin/src/main/webapp/js/compared/importtaxorderrecord.js
  80. 5 2
      kmall-admin/src/main/webapp/js/compared/ordercomparederror.js
  81. 5 2
      kmall-admin/src/main/webapp/js/compared/taxcomparederror.js
  82. 5 2
      kmall-admin/src/main/webapp/js/faceid/type10ordernopay.js
  83. 5 2
      kmall-admin/src/main/webapp/js/mk/mk2goodstopicprice.js
  84. 6 3
      kmall-admin/src/main/webapp/js/mk/mkactivities.js
  85. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiescombinationprice.js
  86. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiescoupon.js
  87. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesdiscount.js
  88. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesfullgift.js
  89. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesfullreduction.js
  90. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesgetonefreegoods.js
  91. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiespromotion.js
  92. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivityform.js
  93. 5 2
      kmall-admin/src/main/webapp/js/mk/mkdailyactivities.js
  94. 1 0
      kmall-admin/src/main/webapp/js/receipt/receiptCheck.js
  95. 71 27
      kmall-admin/src/main/webapp/js/sale/monthlyCustomers.js
  96. 1 2
      kmall-admin/src/main/webapp/js/sale/realtimeSalesDetection.js
  97. 24 6
      kmall-admin/src/main/webapp/js/sale/sale.js
  98. 34 12
      kmall-admin/src/main/webapp/js/sale/top10ForProduct.js
  99. 5 2
      kmall-admin/src/main/webapp/js/shop/attribute.js
  100. 6 3
      kmall-admin/src/main/webapp/js/shop/attributecategory.js

+ 51 - 34
kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java

@@ -50,7 +50,7 @@ public class BrandController {
     @RequestMapping("/list")
     @RequiresPermissions("brand:list")
     public R list(@RequestParam Map<String, Object> params) {
-        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+//        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
 //        ParamUtils.setName(params, "name");
 
         //查询列表数据
@@ -82,26 +82,30 @@ public class BrandController {
     @RequiresPermissions("brand:save")
     public R save(@RequestBody BrandEntity brand) {
 
-        Map<String, Object> valideDate = MapBeanUtil.fromObject(brand);
-        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
-        builder.put("merchSn", "商户");
-//        builder.put("storeId", "门店");
-        builder.put("categoryId", "分类");
-        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
-        if (Integer.valueOf(r.get("code").toString()) != 0) {
-            throw new RRException(r.get("msg").toString());
-        }
-
-        BrandEntity brandEntity = brandService.queryByCategoryIdAndBrandNameAndMerchSn(brand.getCategoryId(),brand.getName(),brand.getMerchSn());
-        if (Objects.nonNull(brandEntity)){
-            throw new RRException("该分类下已经有该品牌名称");
+//        Map<String, Object> valideDate = MapBeanUtil.fromObject(brand);
+//        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+////        builder.put("merchSn", "商户");
+////        builder.put("storeId", "门店");
+////        builder.put("categoryId", "分类");
+//        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+//        if (Integer.valueOf(r.get("code").toString()) != 0) {
+//            throw new RRException(r.get("msg").toString());
+//        }
+
+//        BrandEntity brandEntity = brandService.queryByCategoryIdAndBrandNameAndMerchSn(brand.getCategoryId(),brand.getName(),brand.getMerchSn());
+//        if (Objects.nonNull(brandEntity)){
+//            throw new RRException("该分类下已经有该品牌名称");
+//        }
+//        // 查询该分类是一级还是二级分类
+//        CategoryEntity categoryEntity = categoryService.queryObject(brand.getCategoryId());
+//        // 获取节点等级
+//        String level = categoryEntity.getLevel();
+//        brand.setCategoryLevel(level);
+        try {
+            brandService.save(brand);
+        } catch (RuntimeException e) {
+            return R.error(e.getMessage());
         }
-        // 查询该分类是一级还是二级分类
-        CategoryEntity categoryEntity = categoryService.queryObject(brand.getCategoryId());
-        // 获取节点等级
-        String level = categoryEntity.getLevel();
-        brand.setCategoryLevel(level);
-        brandService.save(brand);
 
         return R.ok();
     }
@@ -115,20 +119,25 @@ public class BrandController {
 
         Map<String, Object> valideDate = MapBeanUtil.fromObject(brand);
         ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
-        builder.put("merchSn", "商户");
+//        builder.put("merchSn", "商户");
 //        builder.put("storeId", "门店");
-        builder.put("categoryId", "分类");
+//        builder.put("categoryId", "分类");
         R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
         if (Integer.valueOf(r.get("code").toString()) != 0) {
             throw new RRException(r.get("msg").toString());
         }
 
-        // 查询该分类是一级还是二级分类
-        CategoryEntity categoryEntity = categoryService.queryObject(brand.getCategoryId());
-        // 获取节点等级
-        String level = categoryEntity.getLevel();
-        brand.setCategoryLevel(level);
-        brandService.update(brand);
+//        // 查询该分类是一级还是二级分类
+//        CategoryEntity categoryEntity = categoryService.queryObject(brand.getCategoryId());
+//        // 获取节点等级
+//        String level = categoryEntity.getLevel();
+//        brand.setCategoryLevel(level);
+        try {
+            brandService.update(brand);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
 
         return R.ok();
     }
@@ -150,7 +159,7 @@ public class BrandController {
     @RequestMapping("/queryAll")
     public R queryAll(@RequestParam Map<String, Object> params) {
 
-        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+//        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
 
         List<BrandEntity> list = brandService.queryList(params);
 
@@ -184,7 +193,7 @@ public class BrandController {
 
         ExcelExport ee = new ExcelExport("品牌制造商信息");
 
-        String[] header = new String[]{"品牌id","所属商户","所属商户id","所属分类","所属分类id","品牌名称","描述","是否显示","是否新品牌"};
+        String[] header = new String[]{"品牌id","品牌名称","品牌唯一简码","描述","是否显示","是否新品牌"};
 
 
         List<Map<String, Object>> list = new ArrayList<>();
@@ -192,11 +201,8 @@ public class BrandController {
             for (BrandEntity brandEntity : brandEntityList) {
                 LinkedHashMap<String, Object> map = new LinkedHashMap<>();
                 map.put("Id",brandEntity.getId());
-                map.put("MerchName",brandEntity.getMerchName());
-                map.put("MerchSn",brandEntity.getMerchSn());
-                map.put("CategoryName",brandEntity.getCategoryName());
-                map.put("CategoryId",brandEntity.getCategoryId());
                 map.put("BrandName",brandEntity.getName());
+                map.put("UniqueIdentifier",brandEntity.getUniqueIdentifier());
                 map.put("SimpleDesc",brandEntity.getSimpleDesc());
                 map.put("IsShow",brandEntity.getIsShow()==1?"是":"否");
                 map.put("IsNew",brandEntity.getIsNew()==1?"是":"否");
@@ -246,7 +252,18 @@ public class BrandController {
     }
 
 
+    @RequestMapping("/refreshBrandCache")
+    @ResponseBody
+    public R refreshBrandCache(){
 
+        try {
+            brandService.refreshBrandCache();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+        return R.ok("刷新成功!");
+    }
 
 
 

+ 15 - 1
kmall-admin/src/main/java/com/kmall/admin/controller/CategoryController.java

@@ -42,7 +42,7 @@ public class CategoryController {
     @RequestMapping("/list")
     @RequiresPermissions("category:list")
     public R list(@RequestParam Map<String, Object> params) {
-        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+//        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
 //        ParamUtils.setName(params, "categoryName");
         //查询列表数据
         Query query = new Query(params);
@@ -207,4 +207,18 @@ public class CategoryController {
         categoryService.saveCopyCategory(copyCategoryDto);
         return R.ok();
     }
+
+    @RequestMapping("/refreshCategoryCache")
+    @ResponseBody
+    public R refreshCategoryCache(){
+
+        try {
+            categoryService.refreshBrandCache();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+        return R.ok("刷新成功!");
+    }
+
 }

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -1075,6 +1075,10 @@ public class OrderController {
                 url = OmsMerchPropertiesBuilder.instance().getWxOrderResendUrl() + "/resendPayment/"+orderSn;
             }else if("notice".equals(resendType)){
                 url = OmsMerchPropertiesBuilder.instance().getWxOrderResendUrl() + "/notice/"+orderSn;
+            }else if("clsOrder".equals(resendType)){
+                url = OmsMerchPropertiesBuilder.instance().getWxOrderResendUrl() + "/clsOrder/"+orderSn;
+            }else if("forceSend".equals(resendType)){
+                url = OmsMerchPropertiesBuilder.instance().getWxOrderResendUrl() + "/forceSend/"+orderSn;
             }
             // 同步访问,返回结果字符串
             response = OkHttpUtils.post(map, url, "SSL");

+ 4 - 4
kmall-admin/src/main/java/com/kmall/admin/controller/kmall2eccs/KtoEccsController.java

@@ -130,10 +130,10 @@ public class KtoEccsController {
      */
     @RequestMapping("/queryAllGoodsInfo")
     @ResponseBody
-    public List<GoodsEntity> queryAllGoodsInfo(){
+    public List<GoodsEntity> queryAllGoodsInfo(@RequestParam("page") Integer page ,@RequestParam("pageSize") Integer pageSize){
 
 
-        List<GoodsEntity> goodsEntities = goodsService.queryAllList();
+        List<GoodsEntity> goodsEntities = goodsService.queryAllList(page,pageSize);
 
         return  goodsEntities;
     }
@@ -143,10 +143,10 @@ public class KtoEccsController {
      */
     @RequestMapping("/queryAllStoreProductInfo")
     @ResponseBody
-    public List<ProductStoreRelaEntity> queryAllStoreProductInfo(){
+    public List<ProductStoreRelaEntity> queryAllStoreProductInfo(@RequestParam("page") Integer page ,@RequestParam("pageSize") Integer pageSize){
 
 
-        List<ProductStoreRelaEntity> productStoreRelaEntities = productStoreRelaService.queryAllList();
+        List<ProductStoreRelaEntity> productStoreRelaEntities = productStoreRelaService.queryAllList(page,pageSize);
 
         return  productStoreRelaEntities;
     }

+ 137 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/kmall2oms/KtoOmsController.java

@@ -0,0 +1,137 @@
+package com.kmall.admin.controller.kmall2oms;
+
+import com.alibaba.fastjson.JSON;
+import com.google.gson.Gson;
+import com.kmall.admin.dto.TransferGoodsDto;
+import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
+import com.kmall.admin.entity.StoreTransferInventoryOrderEntity;
+import com.kmall.admin.service.StoreTransferInventoryOrderDetailService;
+import com.kmall.admin.service.StoreTransferInventoryOrderService;
+import com.kmall.admin.utils.data.response.ResponseMessage;
+import com.kmall.admin.utils.oms.OmsSign;
+import com.kmall.common.utils.R;
+import com.kmall.manager.manager.merch.OmsMerchProperties;
+import okhttp3.Request;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.*;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 10:15
+ * 负责处理kmall与oms接口对象
+ */
+@Controller
+@ResponseBody
+@RequestMapping("ktooms")
+public class KtoOmsController {
+
+    private static Logger LOGGER = LoggerFactory.getLogger(KtoOmsController.class);
+    @Autowired
+    private OmsMerchProperties omsMerchProperties;
+
+    @Autowired
+    private StoreTransferInventoryOrderService storeTransferInventoryOrderService ;
+
+    @Autowired
+    private StoreTransferInventoryOrderDetailService storeTransferInventoryOrderDetailService;
+
+    @RequestMapping("sendTransfer/{transferId}")
+    public R sendToTransferOrder(@PathVariable("transferId") Integer transferId){
+
+
+
+
+        // 查询转移单记录与明细
+        // queryById(transferId)
+        StoreTransferInventoryOrderEntity storeTransferInventoryOrderEntity = storeTransferInventoryOrderService.queryObject(transferId);
+        if(storeTransferInventoryOrderEntity == null){
+            return R.error("未找到该转移单");
+        }
+        Integer status = storeTransferInventoryOrderEntity.getStatus();
+        if(status != 0 && status != 2 ){
+            return R.error("该转移单不允许推送");
+        }
+
+        // queryDetailByTransferId(transferId)
+        List<Map> transferGoodsDto = storeTransferInventoryOrderDetailService.queryDtoById(transferId);
+
+        storeTransferInventoryOrderEntity.setStatus(3);
+
+        Gson gson = new Gson();
+        String timestamp = String.valueOf(System.currentTimeMillis()/1000);
+
+        Map<String, String> sParaTemp = new TreeMap<>();
+        // 构建request中的data数据
+        Map<String,Object> dataParam = new HashMap<>();
+        dataParam.put("merchId",storeTransferInventoryOrderEntity.getMerchSn());
+        dataParam.put("merchName",storeTransferInventoryOrderEntity.getMerchName());
+//        dataParam.put("thirdPartyMerchCode","");
+//        dataParam.put("thirdPartyMerchName","");
+        dataParam.put("merchTransDocSn",transferId+"");
+        dataParam.put("rollOutShopId",storeTransferInventoryOrderEntity.getOutStoreSn());
+        dataParam.put("rollInShopId",storeTransferInventoryOrderEntity.getInStoreSn());
+        dataParam.put("billTime",timestamp);
+        dataParam.put("item",transferGoodsDto);
+
+
+        sParaTemp.put("data",gson.toJson(dataParam));
+        sParaTemp.put("merchId",omsMerchProperties.getMerchSn());
+        sParaTemp.put("timestamp", timestamp);
+        // 组装oms请求报文
+        Request request = buildRequest(sParaTemp);
+
+        // 同步访问,返回结果字符串
+        String responseString = null;
+        try {
+            LOGGER.info("oms的请求报文:" + request);
+            responseString = com.kmall.admin.utils.oms.OkHttpUtils.post(request);
+            storeTransferInventoryOrderService.update(storeTransferInventoryOrderEntity);
+
+            return handleResult(responseString,gson);
+        } catch (Exception e) {
+            e.printStackTrace();
+            storeTransferInventoryOrderEntity.setStatus(2);
+            storeTransferInventoryOrderService.update(storeTransferInventoryOrderEntity);
+            return R.error(e.getMessage());
+        }
+
+
+
+    }
+
+    private R handleResult(String responseString, Gson gson) {
+        LOGGER.info("oms的响应报文"+responseString);
+        //解析响应数据
+        ResponseMessage result = gson.fromJson(responseString, ResponseMessage.class);
+        if(result == null){
+            String info = "解析响应数据Result失败";
+            LOGGER.error("--- {}", info);
+            throw new RuntimeException(info);
+        }else{
+            return R.ok(result.getMsg());
+        }
+    }
+
+
+    private Request buildRequest(Map<String, String> sParaTemp) {
+        //生成要请求给oms秘钥
+        LOGGER.info("md5混淆码参数:" + omsMerchProperties.getMd5Salt());
+        String sign = OmsSign.sign(sParaTemp,omsMerchProperties.getMd5Salt());
+        sParaTemp.put("sign", sign);
+        //构建Request
+        String  url = omsMerchProperties.getSendTransferUrl();
+        url = "http://127.0.0.1:8680/al/shop/bdd/cb/transgoods";
+        return com.kmall.admin.utils.oms.OkHttpUtils.buildRequest(url, JSON.toJSONString(sParaTemp));
+    }
+
+
+}

+ 63 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/oms2kmall/Oms2KmallController.java

@@ -0,0 +1,63 @@
+package com.kmall.admin.controller.oms2kmall;
+
+import com.kmall.admin.controller.kmall2oms.KtoOmsController;
+import com.kmall.admin.service.oms2kmall.Oms2KmallService;
+import com.kmall.admin.utils.jackson.JacksonUtil;
+import com.kmall.admin.utils.oms.response.TransferResponse;
+import com.kmall.admin.utils.oms.result.Result;
+import com.kmall.common.utils.R;
+import net.sf.json.JSONArray;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 10:45
+ */
+@Controller
+@ResponseBody
+@RequestMapping("omstokmall")
+public class Oms2KmallController {
+    private static Logger LOGGER = LoggerFactory.getLogger(Oms2KmallController.class);
+
+
+    @Autowired
+    private Oms2KmallService oms2KmallService;
+
+
+
+    @RequestMapping("/transGoods/notice")
+    public R transGoodsNotice(@RequestBody Result result){
+
+
+        Object dataResult = result.getData();
+        if(dataResult == null){
+            LOGGER.info("解析响应数据OrderResponse集合失败");
+            return null;
+        }
+        JSONArray json = JSONArray.fromObject(dataResult);
+        if(json == null && json.size() <= 0){
+            return null;
+        }
+        LOGGER.info("请求参数:"+json.toString());
+
+        TransferResponse wayBillResponse = null;
+        try {
+            wayBillResponse =  JacksonUtil.fromStringJson(json.getString(0),TransferResponse.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+
+        return oms2KmallService.transGoodsNotice(wayBillResponse);
+
+
+    }
+
+}

+ 2 - 1
kmall-admin/src/main/java/com/kmall/admin/controller/shop/ShopErrorPriceRecordController.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.controller.shop;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -97,7 +98,7 @@ public class ShopErrorPriceRecordController {
     public R queryAll(@RequestParam Map<String, Object> params) {
 
         List<ShopErrorPriceRecordEntity> list = shopErrorPriceRecordService.queryList(params);
-
+        List<String> strings = Arrays.asList(new String[]{});
         return R.ok().put("list", list);
     }
 

+ 43 - 30
kmall-admin/src/main/java/com/kmall/admin/controller/statistics/MonthlyCustomersController.java

@@ -6,9 +6,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.kmall.admin.dao.statistics.MonthlyCustomersDao;
 import com.kmall.admin.dao.statistics.WechatFollowersDao;
-import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.MonthlySalesGrowthEntity;
-import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.WechatFollowersEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.statistics.MonthlyCustomersService;
@@ -66,39 +64,54 @@ public class MonthlyCustomersController {
     private ProductStoreRelaDao productStoreRelaDao;
 
 
-    private void calculateDifferentMonth(List<String> monthList, String startMonth, String endMonth) throws ParseException {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
-        Calendar bef = Calendar.getInstance();
-        Calendar aft = Calendar.getInstance();
-        bef.setTime(sdf.parse(startMonth));
-        aft.setTime(sdf.parse(endMonth));
+    private void calculateDifferentMonth(List<String> monthList, String startMonth, String endMonth, String dateFlag) throws ParseException {
+        if("month".equals(dateFlag)){
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            Calendar bef = Calendar.getInstance();
+            Calendar aft = Calendar.getInstance();
+            bef.setTime(sdf.parse(startMonth));
+            aft.setTime(sdf.parse(endMonth));
 
-        do {
-            monthList.add(sdf.format(bef.getTime()));
-            bef.add(Calendar.MONTH, 1);
+            do {
+                monthList.add(sdf.format(bef.getTime()));
+                bef.add(Calendar.MONTH, 1);
+            }
+            while (bef.compareTo(aft) <= 0);
+        }else if("day".equals(dateFlag)){
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            Calendar bef = Calendar.getInstance();
+            Calendar aft = Calendar.getInstance();
+            bef.setTime(sdf.parse(startMonth));
+            aft.setTime(sdf.parse(endMonth));
+
+            do {
+                monthList.add(sdf.format(bef.getTime()));
+                bef.add(Calendar.DAY_OF_MONTH, 1);
+            }
+            while (bef.compareTo(aft) <= 0);
         }
-        while (bef.compareTo(aft) <= 0);
+
 
     }
 
     /**
      * 每月销售额查询
-     * @param startMonth
-     * @param endMonth
+     * @param startDate
+     * @param endDate
      * @return
      */
     @RequestMapping("/customersQuery")
-    public R queryMonthlyCustomers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
-        if (Objects.isNull(startMonth) || "".equals(startMonth)){
+    public R queryMonthlyCustomers(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("dateFlag") String dateFlag) {
+        if (Objects.isNull(startDate) || "".equals(startDate)){
             return R.error("请先选择开始时间");
         }
-        if (Objects.isNull(endMonth)  || "".equals(endMonth)){
+        if (Objects.isNull(endDate)  || "".equals(endDate)){
             return R.error("请先选择结束时间");
         }
         List<String> dateList = new ArrayList<>();
         Map<String, Object> returnMap = new HashMap<>();
         try {
-            calculateDifferentMonth(dateList, startMonth, endMonth);
+            calculateDifferentMonth(dateList, startDate, endDate,dateFlag);
         } catch (ParseException e) {
             e.printStackTrace();
         }
@@ -108,7 +121,7 @@ public class MonthlyCustomersController {
             if(!"1".equals(sysUser.getRoleType())){
                 merchSn = sysUser.getMerchSn();
             }
-            Map<String,Object> map = monthlyCustomersService.queryMonthlyCustomers(startMonth,endMonth,merchSn,dateList);
+            Map<String,Object> map = monthlyCustomersService.queryMonthlyCustomers(startDate,endDate,merchSn,dateList,dateFlag);
 
             returnMap.put("dateList", dateList);
             returnMap.putAll(map);
@@ -140,7 +153,7 @@ public class MonthlyCustomersController {
         if(!"1".equals(sysUser.getRoleType())){
             merchSn = sysUser.getMerchSn();
         }
-        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn);
+        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn, "month");
         ExcelExport ee = new ExcelExport("Monthly Sales Growth");
         String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","年-月"};
         List<Map<String, Object>> list = new ArrayList<>();
@@ -172,10 +185,10 @@ public class MonthlyCustomersController {
     @RequestMapping("/monthlySalesGrowthExport2")
     public R monthlySalesGrowthExport2(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
         ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
-        if (Objects.isNull(params.get("startMonth")) || "".equals(params.get("startMonth"))){
+        if (Objects.isNull(params.get("startDate")) || "".equals(params.get("endDate"))){
             return R.error("请先选择开始时间");
         }
-        if (Objects.isNull(params.get("endMonth"))  || "".equals(params.get("endMonth"))){
+        if (Objects.isNull(params.get("startDate"))  || "".equals(params.get("endDate"))){
             return R.error("请先选择结束时间");
         }
         String merchSn = null;
@@ -183,7 +196,7 @@ public class MonthlyCustomersController {
         if(!"1".equals(sysUser.getRoleType())){
             merchSn = sysUser.getMerchSn();
         }
-        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn);
+        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startDate"), (String) params.get("endDate"), merchSn, (String) params.get("dateFlag"));
         ExcelExport ee = new ExcelExport("Monthly Customers&Avg Basket");
         String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","客户数","客单价","年-月"};
         List<Map<String, Object>> list = new ArrayList<>();
@@ -228,12 +241,12 @@ public class MonthlyCustomersController {
             weekFlag = true;
         }
 
-        if(weekFlag && monthFlag){
-            return R.error("只能选择一个时间!");
+        if(!monthFlag && !weekFlag){
+            return R.error("请选择时间");
         }
 
-        if(!monthFlag && !monthFlag){
-            return R.error("请选择周");
+        if(weekFlag && monthFlag){
+            return R.error("只能选择一个时间!");
         }
 
         String merchSn = null;
@@ -491,7 +504,7 @@ public class MonthlyCustomersController {
         List<String> dateList = new ArrayList<>();
         Map<String, Object> returnMap = new HashMap<>();
         try {
-            calculateDifferentMonth(dateList, startMonth, endMonth);
+            calculateDifferentMonth(dateList, startMonth, endMonth, "month");
         } catch (ParseException e) {
             e.printStackTrace();
         }
@@ -624,7 +637,7 @@ public class MonthlyCustomersController {
         List<String> dateList = new ArrayList<>();
         Map<String, Object> returnMap = new HashMap<>();
         try {
-            calculateDifferentMonth(dateList, startMonth, endMonth);
+            calculateDifferentMonth(dateList, startMonth, endMonth, "month");
         } catch (ParseException e) {
             e.printStackTrace();
         }
@@ -693,7 +706,7 @@ public class MonthlyCustomersController {
         List<String> dateList = new ArrayList<>();
         Map<String, Object> returnMap = new HashMap<>();
         try {
-            calculateDifferentMonth(dateList, startMonth, endMonth);
+            calculateDifferentMonth(dateList, startMonth, endMonth, "month");
         } catch (ParseException e) {
             e.printStackTrace();
         }

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

@@ -30,4 +30,6 @@ public interface BrandDao extends BaseDao<BrandEntity> {
     BrandEntity queryByCategoryIdAndBrandNameAndMerchSn(@Param("categoryId") Integer categoryId,@Param("name") String name,@Param("merchSn") String merchSn);
 
     List<BrandEntity> queryExportList(Map<String, Object> params);
+
+    BrandEntity queryByUniqueIdentifier(@Param("uniqueIdentifier") String uniqueIdentifier);
 }

+ 1 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/CategoryDao.java

@@ -17,4 +17,5 @@ public interface CategoryDao extends BaseDao<CategoryEntity> {
     CategoryEntity queryObjectByName(@Param("categoryName") String categoryName,@Param("merchSn")String merchSn,@Param("parentId") Integer parentId);
     List<CategoryEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
 
+    CategoryEntity queryByName(@Param("categoryName") String categoryName);
 }

+ 1 - 2
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java

@@ -3,7 +3,6 @@ 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.admin.entity.TaxErrorRecordEntity;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
@@ -72,7 +71,7 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
 
     List<GoodsEntity> queryNonSyncOmsGoodsRateSkuList();
 
-    List<GoodsEntity> queryAllList();
+    List<GoodsEntity> queryAllList(@Param("page") Integer page, @Param("pageSize") Integer pageSize);
 
     GoodsEntity queryByBarcodeAndSku(@Param("prodBarcode") String prodBarcode, @Param("goodsSn") String goodsSn);
 

+ 6 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java

@@ -1,6 +1,7 @@
 package com.kmall.admin.dao;
 
 import com.kmall.admin.entity.ProductStoreRelaEntity;
+import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
 import org.apache.ibatis.annotations.Param;
 import com.kmall.manager.dao.BaseDao;
 
@@ -86,5 +87,9 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
 
     void updatePriceBySku(@Param("updatePrice") String updatePrice, @Param("sku") String sku);
 
-    List<ProductStoreRelaEntity> queryAllList();
+    List<ProductStoreRelaEntity> queryAllList(@Param("page") Integer page, @Param("pageSize") Integer pageSize);
+
+    void transferInGoods(@Param("shopSn") String shopSn, @Param("list") List<StoreTransferInventoryOrderDetailEntity> list);
+
+    void transferOutGoods(@Param("shopSn") String shopSn, @Param("list") List<StoreTransferInventoryOrderDetailEntity> list);
 }

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/StoreTransferInventoryOrderDetailDao.java

@@ -1,8 +1,13 @@
 package com.kmall.admin.dao;
 
 
+import com.kmall.admin.dto.TransferGoodsDto;
 import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
 import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 门店库存转移单详情表Dao
@@ -13,4 +18,7 @@ import com.kmall.manager.dao.BaseDao;
  */
 public interface StoreTransferInventoryOrderDetailDao extends BaseDao<StoreTransferInventoryOrderDetailEntity> {
 
+    List<StoreTransferInventoryOrderDetailEntity> queryByTransferId(@Param("transferId") Integer transferId);
+
+    List<Map> queryDtoById(@Param("transferId")Integer transferId);
 }

+ 2 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/statistics/MonthlyCustomersDao.java

@@ -12,7 +12,8 @@ import java.util.List;
  */
 public interface MonthlyCustomersDao {
 
-    List<MonthlySalesGrowthEntity> queryMonthlyCustomers(@Param("startMonth") String startMonth, @Param("endMonth") String endMonth, @Param("merchSn") String merchSn);
+    List<MonthlySalesGrowthEntity> queryMonthlyCustomers(@Param("startMonth") String startMonth, @Param("endMonth") String endMonth, @Param("merchSn") String merchSn,
+                                                         @Param("dateFlag") String dateFlag);
 
     List<MonthlySalesGrowthEntity> top10ForProduct(@Param("month") String month, @Param("week") String week, @Param("merchSn") String merchSn);
 

+ 29 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDto.java

@@ -130,6 +130,11 @@ public class GoodsDto implements Serializable {
 
     private String plu;
 
+    private String uniqueIdentifier;
+
+    private String firstLevel;
+    private String secondLevel;
+
     public String getCounterPrice() {
         return counterPrice;
     }
@@ -572,4 +577,28 @@ public class GoodsDto implements Serializable {
     public void setSellVolume(Integer sellVolume) {
         this.sellVolume = sellVolume;
     }
+
+    public String getUniqueIdentifier() {
+        return uniqueIdentifier;
+    }
+
+    public void setUniqueIdentifier(String uniqueIdentifier) {
+        this.uniqueIdentifier = uniqueIdentifier;
+    }
+
+    public String getFirstLevel() {
+        return firstLevel;
+    }
+
+    public void setFirstLevel(String firstLevel) {
+        this.firstLevel = firstLevel;
+    }
+
+    public String getSecondLevel() {
+        return secondLevel;
+    }
+
+    public void setSecondLevel(String secondLevel) {
+        this.secondLevel = secondLevel;
+    }
 }

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/StoreGoodsDto.java

@@ -25,6 +25,7 @@ public class StoreGoodsDto implements Serializable {
     private String supplierThirdCode;
     private String bottomLinePrice;//底线价
     private String batchSn;//批次编号
+    private String uniqueIdentifier;
 
     public String getBatchSn() {
         return batchSn;
@@ -137,4 +138,12 @@ public class StoreGoodsDto implements Serializable {
     public void setSupplierThirdCode(String supplierThirdCode) {
         this.supplierThirdCode = supplierThirdCode;
     }
+
+    public String getUniqueIdentifier() {
+        return uniqueIdentifier;
+    }
+
+    public void setUniqueIdentifier(String uniqueIdentifier) {
+        this.uniqueIdentifier = uniqueIdentifier;
+    }
 }

+ 43 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/TransferGoodsDto.java

@@ -0,0 +1,43 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 17:53
+ */
+public class TransferGoodsDto implements Serializable {
+    private static final long serialVersionUID = 661595212962595315L;
+
+    //SKU
+    private String sku;
+    //数量
+    private int goodsNum;
+    //仓库代码
+    private String wareCode;
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public int getGoodsNum() {
+        return goodsNum;
+    }
+
+    public void setGoodsNum(int goodsNum) {
+        this.goodsNum = goodsNum;
+    }
+
+    public String getWareCode() {
+        return wareCode;
+    }
+
+    public void setWareCode(String wareCode) {
+        this.wareCode = wareCode;
+    }
+}

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

@@ -19,6 +19,8 @@ public class BrandEntity implements Serializable {
     private Integer id;
     //品牌名称
     private String name;
+    // 品牌唯一标识符
+    private String uniqueIdentifier;
     //图片
     private String listPicUrl;
     //描述
@@ -277,4 +279,12 @@ public class BrandEntity implements Serializable {
     public void setCategoryLevel(String categoryLevel) {
         this.categoryLevel = categoryLevel;
     }
+
+    public String getUniqueIdentifier() {
+        return uniqueIdentifier;
+    }
+
+    public void setUniqueIdentifier(String uniqueIdentifier) {
+        this.uniqueIdentifier = uniqueIdentifier;
+    }
 }

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

@@ -90,4 +90,9 @@ public interface BrandService {
     List<BrandEntity> queryExportList(Map<String, Object> params);
 
     void uploadExcel(List<BrandEntity> brandEntityList);
+
+
+    BrandEntity queryByUniqueIdentifier(String uniqueIdentifier);
+
+    void refreshBrandCache();
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/CategoryService.java

@@ -75,4 +75,6 @@ public interface CategoryService {
     CopyCategoryDto checkCateStoreUpload(List<CateStoreDto> cateStoreDtoList);
 
     int saveCopyCategory(CopyCategoryDto copyCategoryDto);
+
+    void refreshBrandCache();
 }

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

@@ -208,6 +208,6 @@ public interface GoodsService {
 
     void checkGoodsPrice(SysUserEntity user);
 
-    List<GoodsEntity> queryAllList();
+    List<GoodsEntity> queryAllList(Integer page,Integer pageSize);
 
 }

+ 6 - 1
kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java

@@ -2,6 +2,7 @@ package com.kmall.admin.service;
 
 import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
+import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
 
 import java.util.List;
 import java.util.Map;
@@ -144,6 +145,10 @@ public interface ProductStoreRelaService {
     /**
      * 查询所有门店数据
      * @return
+     * @param page
+     * @param pageSize
      */
-    List<ProductStoreRelaEntity> queryAllList();
+    List<ProductStoreRelaEntity> queryAllList(Integer page, Integer pageSize);
+
+    void handleTransfer(String transferType, String wayBillResponse, List<StoreTransferInventoryOrderDetailEntity> list);
 }

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

@@ -1,6 +1,7 @@
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.TransferGoodsDto;
 import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
 
 import java.util.List;
@@ -70,4 +71,8 @@ public interface StoreTransferInventoryOrderDetailService {
      * @return 删除条数
      */
     int deleteBatch(Integer[]ids);
+
+    List<StoreTransferInventoryOrderDetailEntity> queryByTransferId(Integer transferId);
+
+    List<Map> queryDtoById(Integer transferId);
 }

+ 67 - 18
kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java

@@ -11,12 +11,14 @@ import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
 import com.kmall.common.utils.ValidatorUtil;
 import com.kmall.manager.manager.express.sf.ServiceException;
+import com.kmall.manager.manager.redis.JedisUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.regex.Pattern;
 
 /**
  * Service实现类
@@ -55,11 +57,39 @@ public class BrandServiceImpl implements BrandService {
 
     @Override
     public int save(BrandEntity brand) {
+
+        // 品牌唯一标识符正则校验
+        String uniqueIdentifier = brand.getUniqueIdentifier();
+        String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
+        if(!Pattern.matches(regex,uniqueIdentifier)){
+            throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
+        }
+
+        // 如果是正确的,根据唯一简码查询该简码是否存在
+        BrandEntity brandEntity = brandDao.queryByUniqueIdentifier(uniqueIdentifier);
+        if(brandEntity != null ){
+            throw new RuntimeException("该唯一简码已存在,请检查唯一简码,唯一简码:"+uniqueIdentifier);
+        }
+
         return brandDao.save(brand);
     }
 
     @Override
     public int update(BrandEntity brand) {
+
+        // 品牌唯一标识符正则校验
+        String uniqueIdentifier = brand.getUniqueIdentifier();
+        String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
+        if(!Pattern.matches(regex,uniqueIdentifier)){
+            throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
+        }
+
+        // 如果是正确的,根据唯一简码查询该简码是否存在
+        BrandEntity brandEntity = brandDao.queryByUniqueIdentifier(uniqueIdentifier);
+        if(brandEntity != null && brand.getId().compareTo(brandEntity.getId()) != 0){
+            throw new RuntimeException("该唯一简码已存在,请检查唯一简码,唯一简码:"+uniqueIdentifier);
+        }
+
         return brandDao.update(brand);
     }
 
@@ -209,51 +239,70 @@ public class BrandServiceImpl implements BrandService {
             for (int i = 0; i < brandEntityList.size(); i++) {
                 BrandEntity brandEntity = brandEntityList.get(i);
                 Integer brandId = brandEntity.getId();
-                String merchSn = brandEntity.getMerchSn();
-                Integer categoryId = brandEntity.getCategoryId();
                 Integer isShow = brandEntity.getIsShow();
                 Integer isNew = brandEntity.getIsNew();
-                MerchEntity merchEntity = merchDao.findByMerchSn(merchSn);
+                // 品牌唯一标识符正则校验
+                String uniqueIdentifier = brandEntity.getUniqueIdentifier();
 
                 if (isShow.intValue() != 0 && isShow.intValue() != 1 && isNew.intValue() != 0 && isNew != 1) {
                     throw new ServiceException("第" + (i + 1) + "行的是否显示或者是否新品牌只可填(0:否 1:是)");
                 }
 
-                if (Objects.isNull(merchEntity)) {
-                    throw new ServiceException("第" + (i + 1) + "行的该商户编号:【" + merchSn + "】不存在!");
-                }
-                CategoryEntity categoryEntity = categoryDao.queryObject(categoryId);
-                if (Objects.isNull(categoryEntity)) {
-                    throw new ServiceException("第" + (i + 1) + "行的所属分类id" +
-                            ":【" + categoryId + "】不存在!");
-                }
 
 
                 // 如果是0就添加数据
                 if (brandId.intValue() == 0) {
-                    BrandEntity queryBrandEntity = brandDao.queryByCategoryIdAndBrandNameAndMerchSn(categoryId, brandEntity.getName(), merchSn);
+
+
+                    String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
+                    if(!Pattern.matches(regex,uniqueIdentifier)){
+                        throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
+                    }
+
+                    // 如果是正确的,根据唯一简码查询该简码是否存在
+                    BrandEntity queryBrandEntity = brandDao.queryByUniqueIdentifier(uniqueIdentifier);
+
                     if (Objects.nonNull(queryBrandEntity)){
                         throw new ServiceException("第" + (i + 1) + "行的该品牌:【" + queryBrandEntity.getName() + "】已存在!");
                     }
                     BrandEntity insertBrandEntity = new BrandEntity();
                     insertBrandEntity.setName(brandEntity.getName());
                     insertBrandEntity.setSimpleDesc(brandEntity.getSimpleDesc());
+                    insertBrandEntity.setUniqueIdentifier(uniqueIdentifier);
                     insertBrandEntity.setIsShow(isShow);
                     insertBrandEntity.setIsNew(isNew);
-                    insertBrandEntity.setMerchSn(merchSn);
-                    insertBrandEntity.setCategoryId(categoryId);
-                    insertBrandEntity.setCategoryLevel(categoryEntity.getLevel());
-                    brandDao.save(insertBrandEntity);
+                    this.save(insertBrandEntity);
                 } else {
+                    String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
+                    if(!Pattern.matches(regex,uniqueIdentifier)){
+                        throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
+                    }
                     BrandEntity updateBrandEntity = brandDao.queryObject(brandId);
                     if (Objects.isNull(updateBrandEntity)) {
                         throw new ServiceException("第" + (i + 1) + "行的该品牌编号:【" + brandId + "】不存在!");
                     }
                     BeanUtils.copyProperties(brandEntity,updateBrandEntity);
-                    updateBrandEntity.setCategoryLevel(categoryEntity.getLevel());
-                    brandDao.update(updateBrandEntity);
+                    this.update(updateBrandEntity);
                 }
             }
         }
     }
+
+    @Override
+    public BrandEntity queryByUniqueIdentifier(String uniqueIdentifier) {
+        return brandDao.queryByUniqueIdentifier(uniqueIdentifier);
+    }
+
+    @Override
+    public void refreshBrandCache() {
+        List<BrandEntity> brandEntities = brandDao.queryList(new HashMap<>());
+
+        for (BrandEntity brandEntity : brandEntities) {
+            Map<String, String> brandCacheData = new HashMap<>();
+            brandCacheData.put("brandId", brandEntity.getId() + "");
+            brandCacheData.put("brandName", brandEntity.getName());
+            JedisUtil.setMap(brandEntity.getUniqueIdentifier(), brandCacheData, 0);
+        }
+
+    }
 }

+ 28 - 17
kmall-admin/src/main/java/com/kmall/admin/service/impl/CategoryServiceImpl.java

@@ -7,16 +7,14 @@ import com.kmall.admin.dao.ProductStoreRelaDao;
 import com.kmall.admin.dao.StoreDao;
 import com.kmall.admin.dto.CateStoreDto;
 import com.kmall.admin.dto.CopyCategoryDto;
-import com.kmall.admin.entity.CategoryEntity;
-import com.kmall.admin.entity.GoodsEntity;
-import com.kmall.admin.entity.ProductStoreRelaEntity;
-import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.*;
 import com.kmall.admin.service.CategoryService;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
 import com.kmall.common.utils.ValidatorUtil;
+import com.kmall.manager.manager.redis.JedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -67,15 +65,15 @@ public class CategoryServiceImpl implements CategoryService {
         }
 
         Map<String, Object> valideDate = MapBeanUtil.fromObject(category);
-        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
-        builder.put("merchSn", "商户");
+//        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+//        builder.put("merchSn", "商户");
 //        if("2".equals(category.getShare())){
 //            builder.put("storeId", "门店");
 //        }
-        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
-        if (Integer.valueOf(r.get("code").toString()) != 0) {
-            throw new RRException(r.get("msg").toString());
-        }
+//        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+//        if (Integer.valueOf(r.get("code").toString()) != 0) {
+//            throw new RRException(r.get("msg").toString());
+//        }
         if(category.getLevel().equalsIgnoreCase("L1")){
             category.setParentId(0);
         }
@@ -86,14 +84,14 @@ public class CategoryServiceImpl implements CategoryService {
     @Override
     public int update(CategoryEntity category) {
 
-        Map<String, Object> valideDate = MapBeanUtil.fromObject(category);
-        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
-        builder.put("merchSn", "商户");
+//        Map<String, Object> valideDate = MapBeanUtil.fromObject(category);
+//        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+//        builder.put("merchSn", "商户");
 //        builder.put("storeId", "门店");
-        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
-        if (Integer.valueOf(r.get("code").toString()) != 0) {
-            throw new RRException(r.get("msg").toString());
-        }
+//        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+//        if (Integer.valueOf(r.get("code").toString()) != 0) {
+//            throw new RRException(r.get("msg").toString());
+//        }
         if(category.getLevel().equalsIgnoreCase("L1")){
             category.setParentId(0);
         }
@@ -288,4 +286,17 @@ public class CategoryServiceImpl implements CategoryService {
         }
         return 1;
     }
+
+    @Override
+    public void refreshBrandCache() {
+        List<CategoryEntity> categoryEntities = categoryDao.queryList(new HashMap<>());
+
+        for (CategoryEntity categoryEntity : categoryEntities) {
+            Map<String,String> categoryCacheData = new HashMap<>();
+            categoryCacheData.put("level",categoryEntity.getLevel());
+            categoryCacheData.put("categoryId",categoryEntity.getId()+"");
+            JedisUtil.setMap(categoryEntity.getName(),categoryCacheData,0);
+        }
+
+    }
 }

+ 218 - 71
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.gson.Gson;
 import com.kmall.admin.dao.*;
 import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsDto;
@@ -27,6 +26,7 @@ import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.common.utils.*;
+import com.kmall.manager.manager.redis.JedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -903,9 +903,9 @@ public class GoodsServiceImpl implements GoodsService {
                         supplierEntity.setIsShow("0");
 
                         // TODO 这里改成批量插入 SupplierEntity
-                        insertSupplierList.add(supplierEntity);
+//                        insertSupplierList.add(supplierEntity);
 
-//                        supplierDao.save(supplierEntity);
+                        supplierDao.save(supplierEntity);
 //                        supplierEntity = supplierDao.queryObjectByName(goodsDto.getSupplierName(), thirdMerchantBizEntity.getMerchSn(),thirdMerchantBizEntity.getThirdPartyMerchCode());
                         goodsEntity.setSupplierId(supplierEntity.getId());
                     } else {
@@ -913,35 +913,17 @@ public class GoodsServiceImpl implements GoodsService {
                     }
                 }
                 //商品配置校验
-                /*CategoryEntity categoryEntity = categoryDao.queryObjectByName(goodsDto.getCategoryName(),goodsDto.getMerchSn());
-                if(categoryEntity==null){
-                    isFail = true;
-                    failCateGoodsSnList.add(goodsDto.getGoodsSn());
-                }else{
-                    if(categoryEntity.getLevel().equalsIgnoreCase("L2")) {
-                        goodsEntity.setCategoryId(categoryEntity.getId());
-                        goodsEntity.setAttributeCategory(categoryEntity.getParentId());
-                    }else{
-                        isFail = true;
-                        failCateL2GoodsSnList.add(goodsDto.getGoodsSn());
-                    }
-                }
-                BrandEntity brandEntity = brandDao.queryObjectByName(goodsDto.getBrandName(),goodsDto.getMerchSn());
-                if (brandEntity == null) {
-                    isFail = true;
-                    failBrandGoodsSnList.add(goodsDto.getGoodsSn());
-                } else {
-                    goodsEntity.setBrandId(brandEntity.getId());
-                }
-                //运费
-                FreightEntity freightEntity = freightDao.queryObjectByName(goodsDto.getDefaultFreight(),goodsDto.getMerchSn());
-                if(freightEntity==null){
-                    isFail = true;
-                    failFreightGoodsSnList.add(goodsDto.getGoodsSn());
-                    failFreightList.add(goodsDto.getDefaultFreight());
-                }else {
-                    goodsEntity.setFreightId(freightEntity.getId());
-                }*/
+                /*
+                 先在redis在查询该品牌是否存在,如果存在获取品牌id,如果不存在,先新增该品牌,在将品牌存入到redis中,在获取品牌id
+                 */
+                // 获取品牌唯一简码
+                checkBrand(goodsDto, goodsEntity);
+
+
+                // 获取二级分类id
+                checkCategory(goodsDto, goodsEntity);
+
+
                 if (!Dict.orderBizType.item_11.getItem().equals(goodsDto.getGoodsBizType())) {
                     SysCusUnitCodeEntity sysCusUnitCodeEntity = sysCusUnitCodeDao.queryObjectByName(goodsDto.getUnitName());
                     if (sysCusUnitCodeEntity == null) {
@@ -1025,7 +1007,6 @@ public class GoodsServiceImpl implements GoodsService {
                         mngChangeEntity.setChangeNum(Integer.parseInt(goodsDto.getGoodsNumber()));//变化数
                         mngChangeEntity.setChangeType(Dict.changeType.item_2.getItem());
 
-                        // TODO 这里改成批量插入 GoodsEntity
 
                         goodsDao.save(goodsEntity);
                         insertGoodsList.add(goodsEntity);
@@ -1083,8 +1064,8 @@ public class GoodsServiceImpl implements GoodsService {
                             product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
 
                             // TODO 这里改成批量插入 ProductEntity
-                            insertProductList.add(product);
-//                            productDao.save(product);
+//                            insertProductList.add(product);
+                            productDao.save(product);
                         }else{
                             product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
                             product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
@@ -1098,18 +1079,18 @@ public class GoodsServiceImpl implements GoodsService {
             }
 
             // 批量插入数据
-            if(insertProductList != null && insertProductList.size() > 0) {
-                // 长度限制,如果大于50,就分多次插入
-                if(insertProductList.size() > 50){
-                    List<List<ProductEntity>> partition = Lists.partition(insertProductList, 50);
-                    for (List<ProductEntity> productEntities : partition) {
-                        productDao.saveBatch(productEntities);
-                    }
-                }else{
-                    productDao.saveBatch(insertProductList);;
-
-                }
-            }
+//            if(insertProductList != null && insertProductList.size() > 0) {
+//                // 长度限制,如果大于50,就分多次插入
+//                if(insertProductList.size() > 50){
+//                    List<List<ProductEntity>> partition = Lists.partition(insertProductList, 50);
+//                    for (List<ProductEntity> productEntities : partition) {
+//                        productDao.saveBatch(productEntities);
+//                    }
+//                }else{
+//                    productDao.saveBatch(insertProductList);;
+//
+//                }
+//            }
 //            if(insertSpecificationList != null && insertSpecificationList.size() > 0) {
 //                goodsSpecificationDao.saveBatch(insertSpecificationList);
 //            }
@@ -1127,17 +1108,17 @@ public class GoodsServiceImpl implements GoodsService {
 //            if(insertGoodsList != null && insertGoodsList.size() > 0 ){
 //                goodsDao.saveBatch(insertGoodsList);
 //            }
-            if(insertSupplierList != null && insertSupplierList.size() > 0 ){
-                if(insertSupplierList.size() > 50){
-                    List<List<SupplierEntity>> partition = Lists.partition(insertSupplierList, 50);
-                    for (List<SupplierEntity> supplierEntities : partition) {
-                        supplierDao.saveBatch(supplierEntities);
-                    }
-                }else{
-                    supplierDao.saveBatch(insertSupplierList);
-
-                }
-            }
+//            if(insertSupplierList != null && insertSupplierList.size() > 0 ){
+//                if(insertSupplierList.size() > 50){
+//                    List<List<SupplierEntity>> partition = Lists.partition(insertSupplierList, 50);
+//                    for (List<SupplierEntity> supplierEntities : partition) {
+//                        supplierDao.saveBatch(supplierEntities);
+//                    }
+//                }else{
+//                    supplierDao.saveBatch(insertSupplierList);
+//
+//                }
+//            }
             // 批量更新数据
             if(updateProductList != null && updateProductList.size() > 0 ){
 
@@ -1160,16 +1141,16 @@ public class GoodsServiceImpl implements GoodsService {
                     goodsSpecificationDao.updateBatch(updateSpecificationList);
                 }
             }
-            if(updateGoodsList != null && updateGoodsList.size() > 0 ){
-                if(updateGoodsList.size() > 50){
-                    List<List<GoodsEntity>> partition = Lists.partition(updateGoodsList, 50);
-                    for (List<GoodsEntity> goodsEntities : partition) {
-                        goodsDao.updateBatch(goodsEntities);
-                    }
-                }else{
-                    goodsDao.updateBatch(updateGoodsList);
-                }
-            }
+//            if(updateGoodsList != null && updateGoodsList.size() > 0 ){
+//                if(updateGoodsList.size() > 50){
+//                    List<List<GoodsEntity>> partition = Lists.partition(updateGoodsList, 50);
+//                    for (List<GoodsEntity> goodsEntities : partition) {
+//                        goodsDao.updateBatch(goodsEntities);
+//                    }
+//                }else{
+//                    goodsDao.updateBatch(updateGoodsList);
+//                }
+//            }
 
 
 
@@ -1297,6 +1278,172 @@ public class GoodsServiceImpl implements GoodsService {
         return 1;
     }
 
+    private void checkCategory(GoodsDto goodsDto, GoodsEntity goodsEntity) {
+        String secondLevel = goodsDto.getSecondLevel(); // 二级分类名称
+        Map<String, String> categoryCache = JedisUtil.getMap(secondLevel);
+        if(categoryCache != null){
+            String categoryId = categoryCache.get("categoryId");
+            String level = categoryCache.get("level");
+            if(categoryId == null){
+                CategoryEntity category = categoryDao.queryByName(secondLevel);
+                if (category == null) {
+
+                    // 将该id存入带缓存中
+                    Map<String,String> categoryCacheData = new HashMap<>();
+                    categoryCacheData.put("level",Dict.Level.item_L2.getItem());
+
+                    // 查询数据库中是否有一级分类
+                    String firstLevel = goodsDto.getFirstLevel();
+                    CategoryEntity firstCategory = categoryDao.queryByName(firstLevel);
+                    if(firstCategory == null){
+                        // 一级分类不存在
+                        // 新增一级分类
+                        CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
+                        categoryDao.save(firstCategoryEntity);
+                        // 新增二级分类
+                        CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                        categoryDao.save(secondCategoryEntity);
+                        categoryId = secondCategoryEntity.getId()+"";
+                    }else{
+                        // 新增二级分类
+                        CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
+                        categoryDao.save(saveCategoryEntity);
+                        categoryId = saveCategoryEntity.getId()+"";
+
+                    }
+                    categoryCacheData.put("categoryId",categoryId);
+                    JedisUtil.setMap(secondLevel,categoryCacheData,0);
+                    goodsEntity.setCategoryId(Integer.parseInt(categoryId));
+
+                }else if(category != null && Dict.Level.item_L2.getItem().equals(category.getLevel())){
+                    // 缓存中没有,数据库中有,直接存入数据库中查询到的数据
+                    goodsEntity.setCategoryId(category.getId());
+                    // 将该id存入带缓存中
+                    Map<String,String> categoryCacheData = new HashMap<>();
+                    categoryCacheData.put("level",Dict.Level.item_L2.getItem());
+                    categoryCacheData.put("categoryId",category.getId()+"");
+                    JedisUtil.setMap(secondLevel,categoryCacheData,0);
+
+                }else{
+                    throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ goodsDto.getSku()+",分类名称为:"+ goodsDto.getSecondLevel());
+                }
+            }else if(Dict.Level.item_L2.getItem().equals(level)){
+                // 二级分类id在缓存中有,直接存入商品
+                goodsEntity.setCategoryId(Integer.parseInt(categoryId));
+            }else {
+                throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ goodsDto.getSku()+",分类名称为:"+ goodsDto.getSecondLevel());
+            }
+        }else {
+            String categoryId = "";
+            CategoryEntity category = categoryDao.queryByName(secondLevel);
+            if (category == null) {
+                // 将该id存入带缓存中
+                Map<String,String> categoryCacheData = new HashMap<>();
+                categoryCacheData.put("level",Dict.Level.item_L2.getItem());
+
+                // 查询数据库中是否有一级分类
+                String firstLevel = goodsDto.getFirstLevel();
+                CategoryEntity firstCategory = categoryDao.queryByName(firstLevel);
+                if(firstCategory == null){
+                    // 一级分类不存在
+                    // 新增一级分类
+                    CategoryEntity firstCategoryEntity = initCategory(firstLevel, 0, Dict.Level.item_L1);
+                    categoryDao.save(firstCategoryEntity);
+                    // 新增二级分类
+                    CategoryEntity secondCategoryEntity = initCategory(secondLevel, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                    categoryDao.save(secondCategoryEntity);
+                    categoryId = secondCategoryEntity.getId()+"";
+                }else{
+                    // 新增二级分类
+                    CategoryEntity saveCategoryEntity = initCategory(secondLevel, firstCategory.getId(), Dict.Level.item_L2);
+                    categoryDao.save(saveCategoryEntity);
+                    categoryId = saveCategoryEntity.getId()+"";
+
+                }
+                categoryCacheData.put("categoryId",categoryId);
+                JedisUtil.setMap(secondLevel,categoryCacheData,0);
+                goodsEntity.setCategoryId(Integer.parseInt(categoryId));
+
+            }else if(category != null && Dict.Level.item_L2.getItem().equals(category.getLevel())){
+                // 缓存中没有,数据库中有,直接存入数据库中查询到的数据
+                goodsEntity.setCategoryId(category.getId());
+                // 将该id存入带缓存中
+                Map<String,String> categoryCacheData = new HashMap<>();
+                categoryCacheData.put("level",Dict.Level.item_L2.getItem());
+                categoryCacheData.put("categoryId",category.getId()+"");
+                JedisUtil.setMap(secondLevel,categoryCacheData,0);
+
+            }else{
+                throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ goodsDto.getSku()+",分类名称为:"+ goodsDto.getSecondLevel());
+            }
+        }
+    }
+
+    private void checkBrand(GoodsDto goodsDto, GoodsEntity goodsEntity) {
+        String uniqueIdentifier = goodsDto.getUniqueIdentifier();
+        String brandName = goodsDto.getBrand();
+        Map<String, String> brandCache = JedisUtil.getMap(uniqueIdentifier);
+        if(brandCache != null) {
+            String brandId = brandCache.get("brandId");
+            if (brandId == null) {
+                Map<String, String> brandCacheData = new HashMap<>();
+                // 数据库里面查询
+                BrandEntity queryBrand = brandService.queryByUniqueIdentifier(uniqueIdentifier);
+                if (queryBrand == null) {
+                    BrandEntity brandEntity = new BrandEntity();
+                    brandEntity.setName(brandName);
+                    brandEntity.setUniqueIdentifier(uniqueIdentifier);
+                    brandEntity.setSimpleDesc(brandName);
+                    brandEntity.setIsShow(1);
+                    brandEntity.setIsNew(0);
+                    brandService.save(brandEntity);
+                    brandCacheData.put("brandId", brandEntity.getId() + "");
+                    brandCacheData.put("brandName", brandName);
+                    goodsEntity.setBrandId(brandEntity.getId());
+                } else {
+                    brandCacheData.put("brandId", queryBrand.getId() + "");
+                    brandCacheData.put("brandName", queryBrand.getName());
+                    goodsEntity.setBrandId(queryBrand.getId());
+                }
+                JedisUtil.setMap(uniqueIdentifier, brandCacheData, 0);
+            } else {
+                goodsEntity.setBrandId(Integer.parseInt(brandId));
+            }
+        }else{
+            Map<String, String> brandCacheData = new HashMap<>();
+            // 数据库里面查询
+            BrandEntity queryBrand = brandService.queryByUniqueIdentifier(uniqueIdentifier);
+            if (queryBrand == null) {
+                BrandEntity brandEntity = new BrandEntity();
+                brandEntity.setName(brandName);
+                brandEntity.setUniqueIdentifier(uniqueIdentifier);
+                brandEntity.setSimpleDesc(brandName);
+                brandEntity.setIsShow(1);
+                brandEntity.setIsNew(0);
+                brandService.save(brandEntity);
+                brandCacheData.put("brandId", brandEntity.getId() + "");
+                brandCacheData.put("brandName", brandName);
+                goodsEntity.setBrandId(brandEntity.getId());
+            } else {
+                brandCacheData.put("brandId", queryBrand.getId() + "");
+                brandCacheData.put("brandName", queryBrand.getName());
+                goodsEntity.setBrandId(queryBrand.getId());
+            }
+            JedisUtil.setMap(uniqueIdentifier, brandCacheData, 0);
+        }
+    }
+
+    private CategoryEntity initCategory(String firstLevel, int parentId, Dict.Level item) {
+        CategoryEntity firstCategoryEntity = new CategoryEntity();
+        firstCategoryEntity.setName(firstLevel);
+        firstCategoryEntity.setParentId(parentId);
+        firstCategoryEntity.setIsShow(1);
+        firstCategoryEntity.setFrontDesc(firstLevel);
+        firstCategoryEntity.setType(0);
+        firstCategoryEntity.setLevel(item.getItem());
+        return firstCategoryEntity;
+    }
+
     @Override
     @Transactional
     public int uploadExcelByCover(List<GoodsDto> goodsEntityList, int exportDataType) {
@@ -2027,7 +2174,7 @@ public class GoodsServiceImpl implements GoodsService {
     public void syncGoodsRate() {
         String storeId = "163"; // 市场部说所有门店价格一致,并且活动一致,可直接取其中一个门店价格进行计算税率
         // 查询出所有商品
-        List<GoodsEntity> allGoodsList = goodsDao.queryAllList();
+        List<GoodsEntity> allGoodsList = goodsDao.queryAllList(null,null);
         for (GoodsEntity goodsEntity : allGoodsList) {
             // 同步过海关商品编码才可以算税率
             if ("1".equals(goodsEntity.getIsSyncHsCode())) {
@@ -2091,8 +2238,8 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
     @Override
-    public List<GoodsEntity> queryAllList() {
-        return goodsDao.queryAllList();
+    public List<GoodsEntity> queryAllList(Integer page,Integer pageSize) {
+        return goodsDao.queryAllList(page,pageSize);
     }
 
     private void calculeatePromotion(SysUserEntity user, GoodsEntity goods, List<Map<String, String>> errorPriceSkuList, List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities) {

+ 6 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -758,7 +758,11 @@ public class OrderServiceImpl implements OrderService {
             ktoEccsEntity.setRequestData(JSON.toJSONString(orderGoodsEntity));
             ktoEccsEntity.setRequestType("04");
             ktoEccsEntity.setSendStatus("00");
-            ktoEccsEntity.setCreaterSn(user.getUserId()+"");
+            if(user != null){
+                ktoEccsEntity.setCreaterSn(user.getUserId()+"");
+            }else{
+                ktoEccsEntity.setCreaterSn("9999");
+            }
             ktoEccsEntity.setCreateTime(new Date());
             ktoEccsEntities.add(ktoEccsEntity);
         }
@@ -2145,7 +2149,7 @@ public class OrderServiceImpl implements OrderService {
             }
 
 //            OrderEntity orderEntity = queryObject(order.getId());
-//             TODO 到时候要注释掉,测试用而已
+////             TODO 到时候要注释掉,测试用而已
 //            orderEntity.setOrderStatus(Integer.parseInt(Dict.orderStatus.item_201.getItem()));
 //            orderEntity.setPayStatus(Integer.parseInt(Dict.payStatus.item_2.getItem()));
 //            orderDao.update(orderEntity);

+ 222 - 32
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -11,19 +11,19 @@ import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.kmall2eccs.KtoEccsEntity;
 import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.BrandService;
 import com.kmall.admin.service.ProductStoreRelaService;
 import com.kmall.admin.service.kmall2eccs.KtoEccsService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.api.util.StockUtil;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.*;
-import org.apache.commons.lang.StringUtils;
+import com.kmall.manager.manager.redis.JedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -50,6 +50,8 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     @Autowired
     private BrandDao brandDao;
     @Autowired
+    private BrandService brandService;
+    @Autowired
     private FreightDao freightDao;
     @Autowired
     private CategoryDao categoryDao;
@@ -853,10 +855,25 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
      * 查询所有门店数据
      *
      * @return
+     * @param page
+     * @param pageSize
      */
     @Override
-    public List<ProductStoreRelaEntity> queryAllList() {
-        return productStoreRelaDao.queryAllList();
+    public List<ProductStoreRelaEntity> queryAllList(Integer page, Integer pageSize) {
+        return productStoreRelaDao.queryAllList(page,pageSize);
+    }
+
+    @Override
+    public void handleTransfer(String transferType, String shopSn, List<StoreTransferInventoryOrderDetailEntity> list) {
+
+
+        // 处理逻辑
+        if(Dict.transferType.in.getItem().equals(transferType)){
+            productStoreRelaDao.transferInGoods(shopSn,list);
+        }else if (Dict.transferType.out.getItem().equals(transferType)){
+            productStoreRelaDao.transferOutGoods(shopSn,list);
+        }
+
     }
 
 
@@ -881,39 +898,140 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
                 }else{
                     throw new RRException("商品[" + storeGoodsDto.getGoodsSn() + "]未录入系统");
                 }
-                CategoryEntity parentCategoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getCategoryName(), store.getMerchSn(),0);
-                CategoryEntity categoryEntity;//二级分类
-                if (parentCategoryEntity != null) {
-                    categoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getAttributeCategory(), store.getMerchSn(),parentCategoryEntity.getId());
-                    if (categoryEntity == null) {
-                        categoryEntity = initSaveCategoryEntity(storeGoodsDto.getAttributeCategory(), store.getMerchSn(), parentCategoryEntity.getId());
-                        categoryDao.save(categoryEntity);
-                        categoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getAttributeCategory(), store.getMerchSn(),parentCategoryEntity.getId());
+
+                // 获取分类id
+                String firstLevelName = storeGoodsDto.getCategoryName();
+                String secondLevelName = storeGoodsDto.getAttributeCategory();
+                Map<String, String> categoryCache = JedisUtil.getMap(secondLevelName);
+                if(categoryCache != null){
+                    String categoryId = categoryCache.get("categoryId");
+                    String level = categoryCache.get("level");
+
+                    String firstLevelCategoryId = "";
+                    String secondLevelCategoryId = "";
+
+                    if(categoryId == null){
+                        CategoryEntity category = categoryDao.queryByName(secondLevelName);
+                        if (category == null) {
+
+                            // 查询数据库中是否有一级分类
+                            CategoryEntity firstCategory = categoryDao.queryByName(firstLevelName);
+                            if(firstCategory == null){
+                                // 一级分类不存在
+                                // 新增一级分类
+                                CategoryEntity firstCategoryEntity = initCategory(firstLevelName, 0, Dict.Level.item_L1);
+                                categoryDao.save(firstCategoryEntity);
+                                // 新增二级分类
+                                CategoryEntity secondCategoryEntity = initCategory(secondLevelName, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                                categoryDao.save(secondCategoryEntity);
+                                categoryId = secondCategoryEntity.getId()+"";
+
+                                firstLevelCategoryId = firstCategoryEntity.getId() + "";
+                                secondLevelCategoryId = secondCategoryEntity.getId()+"";
+                            }else{
+                                // 新增二级分类
+                                CategoryEntity saveCategoryEntity = initCategory(secondLevelName, firstCategory.getId(), Dict.Level.item_L2);
+                                categoryDao.save(saveCategoryEntity);
+                                firstLevelCategoryId = firstCategory.getId() + "";
+                                secondLevelCategoryId = saveCategoryEntity.getId()+"";
+
+                            }
+                            // 存储一级分类
+                            set2Redis(firstLevelName, firstLevelCategoryId, Dict.Level.item_L1);
+                            // 存储二级分类
+                            set2Redis(secondLevelName, secondLevelCategoryId, Dict.Level.item_L2);
+
+                            // 设置一级、二级分类id
+
+                            storeRelaEntity.setAttributeCategory(Integer.parseInt(firstLevelCategoryId));
+                            storeRelaEntity.setCategoryId(Integer.parseInt(secondLevelCategoryId));
+
+                        }else if(category != null && Dict.Level.item_L2.getItem().equals(category.getLevel())){
+                            // 缓存中没有,数据库中有,直接存入数据库中查询到的数据
+                            storeRelaEntity.setCategoryId(category.getId());
+                            // 将该id存入带缓存中
+                            CategoryEntity firstCategory = categoryDao.queryByName(firstLevelName);
+                            // 存储一级分类
+                            set2Redis(firstLevelName, firstCategory.getId()+"", Dict.Level.item_L1);
+                            // 存储二级分类
+                            set2Redis(secondLevelName, category.getId() + "", Dict.Level.item_L2);
+
+                            // 设置一级、二级分类id
+                            storeRelaEntity.setAttributeCategory(firstCategory.getId());
+                            storeRelaEntity.setCategoryId(category.getId());
+
+                        }else{
+                            throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ storeGoodsDto.getGoodsSn()+",分类名称为:"+ storeGoodsDto.getAttributeCategory());
+                        }
+                    }else if(Dict.Level.item_L2.getItem().equals(level)){
+                        // 二级分类id在缓存中有,直接存入商品
+                        Map<String, String> firstCategoryCache = JedisUtil.getMap(firstLevelName);
+                        storeRelaEntity.setAttributeCategory(Integer.parseInt(firstCategoryCache.get("categoryId")));
+                        storeRelaEntity.setCategoryId(Integer.parseInt(categoryId));
+                    }else {
+                        throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ storeGoodsDto.getGoodsSn()+",分类名称为:"+ storeGoodsDto.getAttributeCategory());
+                    }
+                }else {
+                    String firstLevelCategoryId = "";
+                    String secondLevelCategoryId = "";
+                    CategoryEntity category = categoryDao.queryByName(secondLevelName);
+                    if (category == null) {
+
+
+                        // 查询数据库中是否有一级分类
+                        CategoryEntity firstCategory = categoryDao.queryByName(firstLevelName);
+                        if(firstCategory == null){
+                            // 一级分类不存在
+                            // 新增一级分类
+                            CategoryEntity firstCategoryEntity = initCategory(firstLevelName, 0, Dict.Level.item_L1);
+                            categoryDao.save(firstCategoryEntity);
+                            // 新增二级分类
+                            CategoryEntity secondCategoryEntity = initCategory(secondLevelName, firstCategoryEntity.getId(), Dict.Level.item_L2);
+                            categoryDao.save(secondCategoryEntity);
+                            firstLevelCategoryId = firstCategoryEntity.getId() + "";
+                            secondLevelCategoryId = secondCategoryEntity.getId()+"";
+                        }else{
+                            // 新增二级分类
+                            CategoryEntity saveCategoryEntity = initCategory(secondLevelName, firstCategory.getId(), Dict.Level.item_L2);
+                            categoryDao.save(saveCategoryEntity);
+                            firstLevelCategoryId = firstCategory.getId() + "";
+                            secondLevelCategoryId = saveCategoryEntity.getId()+"";
+
+                        }
+                        // 存储一级分类
+                        set2Redis(firstLevelName, firstLevelCategoryId, Dict.Level.item_L1);
+                        // 存储二级分类
+                        set2Redis(secondLevelName, secondLevelCategoryId, Dict.Level.item_L2);
+
+                        // 设置一级、二级分类id
+                        storeRelaEntity.setAttributeCategory(Integer.parseInt(firstLevelCategoryId));
+                        storeRelaEntity.setCategoryId(Integer.parseInt(secondLevelCategoryId));
+
+                    }else if(category != null && Dict.Level.item_L2.getItem().equals(category.getLevel())){
+                        // 缓存中没有,数据库中有,直接存入数据库中查询到的数据
+                        // 将该id存入带缓存中
+                        CategoryEntity firstCategory = categoryDao.queryByName(firstLevelName);
+                        // 存储一级分类
+                        set2Redis(firstLevelName, firstCategory.getId()+"", Dict.Level.item_L1);
+                        // 存储二级分类
+                        set2Redis(secondLevelName, category.getId() + "", Dict.Level.item_L2);
+
+                        // 设置一级、二级分类id
+                        storeRelaEntity.setAttributeCategory(firstCategory.getId());
+                        storeRelaEntity.setCategoryId(category.getId());
+
+
+                    }else{
+                        throw new RuntimeException("该分类不是二级分类,请检查,对应sku是:"+ storeGoodsDto.getGoodsSn()+",分类名称为:"+ storeGoodsDto.getAttributeCategory());
                     }
-                }else{
-//                    throw new RRException("商品[" + storeGoodsDto.getGoodsSn() + "]的一级类别输入有误");
-                    // 如果没有一级分类就自动创建一二级分类
-                    parentCategoryEntity = initSaveCategoryEntity(storeGoodsDto.getCategoryName(), store.getMerchSn(),0);
-                    categoryDao.save(parentCategoryEntity);
-                    // 保存后再查出来
-                    parentCategoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getCategoryName(), store.getMerchSn(),0);
-                    categoryEntity = initSaveCategoryEntity(storeGoodsDto.getAttributeCategory(),store.getMerchSn(),parentCategoryEntity.getId());
-                    categoryDao.save(categoryEntity);
-                    categoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getAttributeCategory(), store.getMerchSn(),parentCategoryEntity.getId());
                 }
 
-                storeRelaEntity.setCategoryId(parentCategoryEntity.getId());
-                storeRelaEntity.setAttributeCategory(categoryEntity.getId());
 
-                BrandEntity brandEntity = brandDao.queryObjectByName(storeGoodsDto.getBrandName(), store.getMerchSn(),storeRelaEntity.getAttributeCategory());
-                if (brandEntity == null) {
-                    // throw new RRException("商品[" + storeGoodsDto.getGoodsSn() + "]的品牌输入有误");
-                    brandEntity = initSaveBrandEntity(storeGoodsDto.getBrandName(), store.getMerchSn(),storeRelaEntity.getAttributeCategory());
-                    brandDao.save(brandEntity);
-                    brandEntity = brandDao.queryObjectByName(storeGoodsDto.getBrandName(), store.getMerchSn(),storeRelaEntity.getAttributeCategory());
-                }
 
-                storeRelaEntity.setBrandId(brandEntity.getId());
+
+                checkBrand(storeGoodsDto, storeRelaEntity);
+
+
                 /*FreightEntity freightEntity = freightDao.queryFreightByFreightNameAndStoreId(storeGoodsDto.getFreightName(), store.getId());
                 if (freightEntity != null) {
                     storeRelaEntity.setFreightId(freightEntity.getId());
@@ -975,6 +1093,78 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         return 1;
     }
 
+    private void set2Redis(String secondLevelName, String firstLevelCategoryId, Dict.Level item) {
+        Map<String, String> firstCategoryCacheData = new HashMap<>();
+        firstCategoryCacheData.put("level", item.getItem());
+        firstCategoryCacheData.put("categoryId", firstLevelCategoryId);
+        JedisUtil.setMap(secondLevelName, firstCategoryCacheData, 0);
+    }
+
+    private CategoryEntity initCategory(String firstLevel, int parentId, Dict.Level item) {
+        CategoryEntity firstCategoryEntity = new CategoryEntity();
+        firstCategoryEntity.setName(firstLevel);
+        firstCategoryEntity.setParentId(parentId);
+        firstCategoryEntity.setIsShow(1);
+        firstCategoryEntity.setFrontDesc(firstLevel);
+        firstCategoryEntity.setType(0);
+        firstCategoryEntity.setLevel(item.getItem());
+        return firstCategoryEntity;
+    }
+
+    private void checkBrand(StoreGoodsDto storeGoodsDto, ProductStoreRelaEntity storeRelaEntity) {
+        String uniqueIdentifier = storeGoodsDto.getUniqueIdentifier();
+        String brandName = storeGoodsDto.getBrandName();
+        Map<String, String> brandCache = JedisUtil.getMap(uniqueIdentifier);
+        if(brandCache != null) {
+            String brandId = brandCache.get("brandId");
+            if (brandId == null) {
+                Map<String, String> brandCacheData = new HashMap<>();
+                // 数据库里面查询
+                BrandEntity queryBrand = brandService.queryByUniqueIdentifier(uniqueIdentifier);
+                if (queryBrand == null) {
+                    BrandEntity brandEntity = new BrandEntity();
+                    brandEntity.setName(brandName);
+                    brandEntity.setUniqueIdentifier(uniqueIdentifier);
+                    brandEntity.setSimpleDesc(brandName);
+                    brandEntity.setIsShow(1);
+                    brandEntity.setIsNew(0);
+                    brandService.save(brandEntity);
+                    brandCacheData.put("brandId", brandEntity.getId() + "");
+                    brandCacheData.put("brandName", brandName);
+                    storeRelaEntity.setBrandId(brandEntity.getId());
+                } else {
+                    brandCacheData.put("brandId", queryBrand.getId() + "");
+                    brandCacheData.put("brandName", queryBrand.getName());
+                    storeRelaEntity.setBrandId(queryBrand.getId());
+                }
+                JedisUtil.setMap(uniqueIdentifier, brandCacheData, 0);
+            } else {
+                storeRelaEntity.setBrandId(Integer.parseInt(brandId));
+            }
+        }else{
+            Map<String, String> brandCacheData = new HashMap<>();
+            // 数据库里面查询
+            BrandEntity queryBrand = brandService.queryByUniqueIdentifier(uniqueIdentifier);
+            if (queryBrand == null) {
+                BrandEntity brandEntity = new BrandEntity();
+                brandEntity.setName(brandName);
+                brandEntity.setUniqueIdentifier(uniqueIdentifier);
+                brandEntity.setSimpleDesc(brandName);
+                brandEntity.setIsShow(1);
+                brandEntity.setIsNew(0);
+                brandService.save(brandEntity);
+                brandCacheData.put("brandId", brandEntity.getId() + "");
+                brandCacheData.put("brandName", brandName);
+                storeRelaEntity.setBrandId(brandEntity.getId());
+            } else {
+                brandCacheData.put("brandId", queryBrand.getId() + "");
+                brandCacheData.put("brandName", queryBrand.getName());
+                storeRelaEntity.setBrandId(queryBrand.getId());
+            }
+            JedisUtil.setMap(uniqueIdentifier, brandCacheData, 0);
+        }
+    }
+
     @Override
     @Transactional
     public int uploadExcelByCover(List<StoreGoodsDto> storeGoodsDtoList) {

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

@@ -25,15 +25,15 @@ public class RealtimeSalesDetectionServiceImpl implements RealtimeSalesDetection
         RealtimeSalesDetection r = orderDao.queryRealtimeSales(realtimeSalesDetection);
         if(r!=null && r.getGuestNumber()>0){
             //计算优惠损失 销售额-实际销售额
-            r.setPreferentialLoss(r.getTotalSales().subtract(r.getActualSales()));
+//            r.setPreferentialLoss(r.getTotalSales().subtract(r.getActualSales()));
             if(null !=r.getTotalCost() && (new BigDecimal(0)!=r.getTotalCost()) && null !=r.getActualSales()){
                 //计算毛利 实际销售额-总成本
                 r.setGrossProfit(r.getActualSales().subtract(r.getTotalCost()));
                 //计算毛利率 总成本/实际销售额
-                r.setGrossProfitRatio(r.getTotalCost().divide(r.getActualSales()));
+                r.setGrossProfitRatio(r.getGrossProfit().divide(r.getActualSales(), 2, BigDecimal.ROUND_HALF_UP));
             }
             //计算客单价
-            r.setGuestUnitPrice(r.getActualSales().divide(new BigDecimal(r.getGuestNumber()),2));
+            r.setGuestUnitPrice(r.getActualSales().divide(new BigDecimal(r.getGuestNumber()),2).setScale(2,BigDecimal.ROUND_HALF_UP));
 
             //时区-13小时
             Date lastSalesTime = r.getLastSalesTime();

+ 11 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreTransferInventoryOrderDetailServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kmall.admin.service.impl;
 
 import com.kmall.admin.dao.StoreTransferInventoryOrderDetailDao;
+import com.kmall.admin.dto.TransferGoodsDto;
 import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
 import com.kmall.admin.service.StoreTransferInventoryOrderDetailService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,4 +57,14 @@ public class StoreTransferInventoryOrderDetailServiceImpl implements StoreTransf
     public int deleteBatch(Integer[]ids) {
         return storeTransferInventoryOrderDetailDao.deleteBatch(ids);
     }
+
+    @Override
+    public List<StoreTransferInventoryOrderDetailEntity> queryByTransferId(Integer transferId) {
+        return storeTransferInventoryOrderDetailDao.queryByTransferId(transferId);
+    }
+
+    @Override
+    public List<Map> queryDtoById(Integer transferId) {
+        return storeTransferInventoryOrderDetailDao.queryDtoById(transferId);
+    }
 }

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/compared/OrderComparedErrorServiceImpl.java

@@ -109,10 +109,10 @@ public class OrderComparedErrorServiceImpl implements OrderComparedErrorService
                 return "暂无需要对比的订单";
             }
 
-            // 对比中网的订单数据
-            comparedKmallOrder(payOrderInfoEntities,comparedDate);
             // 对比oms的订单数据
             comparedOmsOrder(payOrderInfoEntities,comparedDate);
+            // 对比中网的订单数据
+            comparedKmallOrder(payOrderInfoEntities,comparedDate);
 
             // 批量修改支付单对比状态跟对比时间
             payOrderInfoService.updateBatch(payOrderInfoEntities);

+ 75 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/oms2kmall/Oms2KmallServiceImpl.java

@@ -0,0 +1,75 @@
+package com.kmall.admin.service.impl.oms2kmall;
+
+import com.kmall.admin.controller.oms2kmall.Oms2KmallController;
+import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
+import com.kmall.admin.entity.StoreTransferInventoryOrderEntity;
+import com.kmall.admin.service.ProductStoreRelaService;
+import com.kmall.admin.service.StoreTransferInventoryOrderDetailService;
+import com.kmall.admin.service.StoreTransferInventoryOrderService;
+import com.kmall.admin.service.oms2kmall.Oms2KmallService;
+import com.kmall.admin.utils.oms.response.TransferResponse;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 14:30
+ */
+@Service("oms2KmallService")
+public class Oms2KmallServiceImpl implements Oms2KmallService {
+
+    private static Logger LOGGER = LoggerFactory.getLogger(Oms2KmallServiceImpl.class);
+
+    @Autowired
+    private ProductStoreRelaService productStoreRelaService;
+
+    // 注入查询转移单
+    @Autowired
+    private StoreTransferInventoryOrderService storeTransferInventoryOrderService ;
+
+    // 注入查询转移单明细
+    @Autowired
+    private StoreTransferInventoryOrderDetailService storeTransferInventoryOrderDetailService;
+
+    @Transactional
+    public R transGoodsNotice(TransferResponse wayBillResponse){
+        LOGGER.info("转移单审核通过:"+wayBillResponse);
+        try {
+            // 解析数据,回去转移订单号
+            Integer merchTransDocSn = wayBillResponse.getMerchTransDocSn();
+
+            // 查询该转移单,是否处理过
+            StoreTransferInventoryOrderEntity storeTransferInventoryOrder = storeTransferInventoryOrderService.queryObject(merchTransDocSn);
+            if(1 == storeTransferInventoryOrder.getStatus()){
+                LOGGER.error("该转移单已经处理过,转移单编号:"+merchTransDocSn);
+                return R.error("该转移单已经处理过,转移单编号:"+merchTransDocSn);
+            }
+            // 查询转移订单明细,开始转移门店的库存
+            List<StoreTransferInventoryOrderDetailEntity> list = storeTransferInventoryOrderDetailService.queryByTransferId(merchTransDocSn);
+            // 先转出
+            productStoreRelaService.handleTransfer(Dict.transferType.in.getItem(),wayBillResponse.getRollOutShopId(),list);
+            // 再转入
+            productStoreRelaService.handleTransfer(Dict.transferType.out.getItem(),wayBillResponse.getRollInShopId(),list);
+
+            storeTransferInventoryOrder.setStatus(1);
+            storeTransferInventoryOrderService.update(storeTransferInventoryOrder);
+
+            return R.ok("处理成功,转移单编号:"+merchTransDocSn);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+
+    }
+
+
+}

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/statistics/MonthlyCustomersServiceImpl.java

@@ -28,8 +28,8 @@ public class MonthlyCustomersServiceImpl implements MonthlyCustomersService {
     private WechatFollowersDao wechatFollowersDao;
 
     @Override
-    public Map<String, Object> queryMonthlyCustomers(String startMonth, String endMonth, String merchSn, List<String> dateList) {
-        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers(startMonth, endMonth, merchSn);
+    public Map<String, Object> queryMonthlyCustomers(String startMonth, String endMonth, String merchSn, List<String> dateList, String dateFlag) {
+        List<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers(startMonth, endMonth, merchSn,dateFlag);
 
         Map<String, Object> map = new HashMap<>();
         // 查询销售件数

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/service/kmall2oms/KtoOmsService.java

@@ -0,0 +1,13 @@
+package com.kmall.admin.service.kmall2oms;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 10:12
+ */
+public interface KtoOmsService {
+
+
+    
+
+}

+ 15 - 0
kmall-admin/src/main/java/com/kmall/admin/service/oms2kmall/Oms2KmallService.java

@@ -0,0 +1,15 @@
+package com.kmall.admin.service.oms2kmall;
+
+import com.kmall.admin.utils.oms.response.TransferResponse;
+import com.kmall.common.utils.R;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 14:29
+ */
+public interface Oms2KmallService {
+
+    R transGoodsNotice(TransferResponse wayBillResponse);
+
+}

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/service/statistics/MonthlyCustomersService.java

@@ -13,7 +13,7 @@ import java.util.Map;
  */
 public interface MonthlyCustomersService {
 
-    Map<String, Object> queryMonthlyCustomers(String startMonth, String endMonth, String merchSn,List<String> dateList);
+    Map<String, Object> queryMonthlyCustomers(String startMonth, String endMonth, String merchSn, List<String> dateList, String dateFlag);
 
     Map<String, Object> top10ForProduct(String month, String week, String merchSn);
 

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/task/SendToEccsTask.java

@@ -18,9 +18,9 @@ import org.springframework.stereotype.Component;
  */
 
 
-@Component("sendToEccsTask")
-@EnableScheduling
-@EnableAsync
+//@Component("sendToEccsTask")
+//@EnableScheduling
+//@EnableAsync
 public class SendToEccsTask {
 
 

+ 69 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonStringUnicodeSerializer.java

@@ -0,0 +1,69 @@
+package com.kmall.admin.utils.jackson;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.io.CharTypes;
+import com.fasterxml.jackson.core.json.JsonWriteContext;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+
+/**
+ * jackson处理以unicode方式编码中文
+ */
+public class JacksonStringUnicodeSerializer extends JsonSerializer<String> {
+
+	private final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
+	private final int[] ESCAPE_CODES = CharTypes.get7BitOutputEscapes();
+
+	private void writeUnicodeEscape(JsonGenerator gen, char c) throws IOException {
+		gen.writeRaw('\\');
+		gen.writeRaw('u');
+		gen.writeRaw(HEX_CHARS[(c >> 12) & 0xF]);
+		gen.writeRaw(HEX_CHARS[(c >> 8) & 0xF]);
+		gen.writeRaw(HEX_CHARS[(c >> 4) & 0xF]);
+		gen.writeRaw(HEX_CHARS[c & 0xF]);
+	}
+
+	private void writeShortEscape(JsonGenerator gen, char c) throws IOException {
+		gen.writeRaw('\\');
+		gen.writeRaw(c);
+	}
+
+	@Override
+	public void serialize(String str, JsonGenerator gen,
+			SerializerProvider provider) throws IOException,
+            JsonProcessingException {
+		int status = ((JsonWriteContext) gen.getOutputContext()).writeValue();
+	    switch (status) {
+	      case JsonWriteContext.STATUS_OK_AFTER_COLON:
+	        gen.writeRaw(':');
+	        break;
+	      case JsonWriteContext.STATUS_OK_AFTER_COMMA:
+	        gen.writeRaw(',');
+	        break;
+	      case JsonWriteContext.STATUS_EXPECT_NAME:
+	        throw new JsonParseException(null, "Can not write string value here");
+	    }
+	    gen.writeRaw('"');//写入JSON中字符串的开头引号
+	    for (char c : str.toCharArray()) {
+	      if (c >= 0x80){
+	    	  writeUnicodeEscape(gen, c); // 为所有非ASCII字符生成转义的unicode字符
+	      }else {
+	        // 为ASCII字符中前128个字符使用转义的unicode字符
+	        int code = (c < ESCAPE_CODES.length ? ESCAPE_CODES[c] : 0);
+	        if (code == 0){
+	        	gen.writeRaw(c); // 此处不用转义
+	        }else if (code < 0){
+	        	writeUnicodeEscape(gen, (char) (-code - 1)); // 通用转义字符
+	        }else {
+	        	writeShortEscape(gen, (char) code); // 短转义字符 (\n \t ...)
+	        }
+	      }
+	    }
+	    gen.writeRaw('"');//写入JSON中字符串的结束引号
+	}
+
+}

+ 270 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonUtil.java

@@ -0,0 +1,270 @@
+package com.kmall.admin.utils.jackson;
+
+import com.fasterxml.jackson.annotation.JsonFilter;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
+import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * @author Scott Chen
+ * @version 1.0
+ * 2017-09-18 18:42
+ */
+public class JacksonUtil {
+
+    private static final Logger logger = LoggerFactory.getLogger(JacksonUtil.class);
+
+    private static ObjectMapper objectMapper;
+
+    private static final String DYNC_INCLUDE = "DYNC_INCLUDE";//包含的标识
+    private static final String DYNC_EXCLUDE = "DYNC_EXCLUDE";//过滤的标识
+
+    @JsonFilter(DYNC_EXCLUDE)
+    interface DynamicExclude{
+
+    }
+
+    @JsonFilter(DYNC_INCLUDE)
+    interface DynamicInclude{
+
+    }
+    /**
+     * 禁止调用无参构造
+     *
+     * @throws IllegalAccessException
+     */
+    private JacksonUtil() throws IllegalAccessException {
+        throw new IllegalAccessException("Can't create an instance!");
+    }
+
+    /**
+     * 懒惰单例模式得到ObjectMapper实例
+     * 此对象为Jackson的核心
+     */
+    private static final ObjectMapper objectMapper() {
+        if (objectMapper== null){
+            objectMapper= new ObjectMapper();
+
+            // 格式化国家环境指定
+            objectMapper.setLocale(Locale.SIMPLIFIED_CHINESE);
+
+            //序列化时,如果没有为类型找到访问者,则会抛出异常以将其指定为非可序列化类型; 如果禁用,它们将被序列化为空对象
+            objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+            //反序列化时,遇到未知属性是否抛JsonMappingException异常.默认JsonMappingException
+            objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+            //设置null值不参与序列化(字段不被显示)
+            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+
+            //序列化Unicode编码非ASCII字符
+            //objectMapper.registerModule(unicodeSerModule());
+
+        }
+        return objectMapper;
+    }
+
+
+
+
+    /**
+     * ObjectMapper 实例
+     * @return
+     */
+    public static ObjectMapper getObjectMapper() {
+        return objectMapper();
+    }
+
+    /**
+     * 创建Json处理器的静态方法
+     * 用于序列化
+     * @param content Json字符串
+     * @return
+     */
+    private static JsonParser getParser(String content){
+        try{
+            return objectMapper().getFactory().createParser(content);
+        }catch (IOException ioe){
+            return null;
+        }
+    }
+
+    /**
+     * 创建Byte Json处理器的静态方法
+     * 用于序列化
+     * @param data byte array
+     * @return
+     */
+    private static JsonParser getByteParser(byte[] data){
+        try{
+            return objectMapper().getFactory().createParser(data);
+        }catch (IOException ioe){
+            return null;
+        }
+    }
+
+    /**
+     * 创建Reader Json处理器的静态方法
+     * 用于序列化
+     * @param r Reader
+     * @return
+     */
+    private static JsonParser getReaderParser(Reader r){
+        try{
+            return objectMapper().getFactory().createParser(r);
+        }catch (IOException ioe){
+            return null;
+        }
+    }
+
+    /**
+     * 创建InputStream Json处理器的静态方法
+     * 用于序列化
+     * @param in InputStream
+     * @return
+     */
+    private static JsonParser getReaderParser(InputStream in){
+        try{
+            return objectMapper().getFactory().createParser(in);
+        }catch (IOException ioe){
+            return null;
+        }
+    }
+
+
+    /**
+     * 创建Json生成器的静态方法, 使用标准输出
+     * 用于反序列化
+     * @return
+     */
+    private static JsonGenerator getGenerator(StringWriter sw){
+        try{
+            return objectMapper().getFactory().createGenerator(sw);
+        }catch (IOException e) {
+            return null;
+        }
+    }
+
+    /**
+     * Json对象序列化
+     */
+    public static String toJson(Object obj){
+        StringWriter sw= new StringWriter();
+        JsonGenerator jsonGen= getGenerator(sw);
+        if (jsonGen== null){
+            try {
+                sw.close();
+            } catch (IOException e) {
+            }
+            return null;
+        }
+        try {
+            //由于在getGenerator方法中指定了OutputStream为sw
+            //因此调用writeObject会将数据输出到sw
+            jsonGen.writeObject(obj);
+            //由于采用流式输出 在输出完毕后务必清空缓冲区并关闭输出流
+            jsonGen.flush();
+            jsonGen.close();
+            return sw.toString();
+        } catch (JsonGenerationException jge) {
+            logger.error("toJSON序列化失败, 异常类型【JsonGenerationException】,错误原因:{}", jge.getMessage());
+        } catch (IOException ioe) {
+            logger.error("toJSON序列化失败, 异常类型【IOException】, 错误原因:{}", ioe.getMessage());
+            ioe.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 将Json Byte反序列化成对象
+     *
+     * @param data
+     * @param clazz
+     * @return
+     */
+    public static <T> T fromByteJson(byte[] data, Class<T> clazz) {
+        try {
+            JsonParser jp= getByteParser(data);
+            return jp.readValueAs(clazz);
+        } catch (JsonParseException e){
+            logger.error(String.format("fromByteJson反序列化失败, 异常类型【JsonParseException】, 错误原因:{}", e.getMessage()));
+        } catch (JsonMappingException e){
+            logger.error(String.format("fromByteJson反序列化失败, 异常类型【JsonMappingException】, 错误原因:{}", e.getMessage()));
+        } catch (IOException e){
+            logger.error(String.format("fromByteJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+        }
+        return null;
+    }
+
+    /**
+     * 将Json String反序列化成对象
+     *
+     * @param json
+     * @param clazz
+     * @return
+     */
+    public static <T> T fromStringJson(String json, Class<T> clazz) {
+        try {
+            JsonParser jp= getParser(json);
+            return (T) jp.readValueAs(clazz);
+        } catch (JsonParseException e) {
+            logger.error(String.format("fromStringJson反序列化失败, 异常类型【JsonParseException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        } catch (JsonMappingException e) {
+            logger.error(String.format("fromStringJson反序列化失败, 异常类型【JsonMappingException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        } catch (IOException e) {
+            logger.error(String.format("fromStringJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        }
+        return null;
+    }
+
+    /**
+     * 将Json Array或List反序列化为对象
+     *
+     * @param json
+     * @return
+     */
+    public static <T> T fromListJson(String json, TypeReference<?> typeReference) {
+        try {
+            //写成List.class是不行的
+            JsonParser jp= getParser(json);
+            return (T) jp.readValueAs(typeReference);
+        } catch (JsonParseException e) {
+            logger.error(String.format("fromListJson反序列化失败, 异常类型【JsonParseException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        } catch (JsonMappingException e) {
+            logger.error(String.format("fromListJson反序列化失败, 异常类型【JsonMappingException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        } catch (IOException e) {
+            logger.error(String.format("fromListJson反序列化失败, 异常类型【IOException】, 错误原因:{}", e.getMessage()));
+            logger.error("decode(String, Class<T>)", e);
+        }
+        return null;
+    }
+
+}

+ 119 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/oms/response/TransferResponse.java

@@ -0,0 +1,119 @@
+package com.kmall.admin.utils.oms.response;
+
+import java.io.Serializable;
+
+/**
+ * @author zhangchuangbiao
+ * @version 1.0
+ * 2021-03-08 11:10
+ */
+public class TransferResponse implements Serializable {
+
+    private String shopNotiId;
+    private String merchId;
+    private String thirdPartyMerchCode;
+    private String shopNotiTime;
+    private String shopNotiType;
+    private String shopNotiStatus;
+    private String shopNotiInfo;
+    private Integer merchTransDocSn;
+    private String rollOutShopId;
+    private String rollInShopId;
+
+
+    public String getShopNotiId() {
+        return shopNotiId;
+    }
+
+    public void setShopNotiId(String shopNotiId) {
+        this.shopNotiId = shopNotiId;
+    }
+
+    public String getMerchId() {
+        return merchId;
+    }
+
+    public void setMerchId(String merchId) {
+        this.merchId = merchId;
+    }
+
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+
+    public String getShopNotiTime() {
+        return shopNotiTime;
+    }
+
+    public void setShopNotiTime(String shopNotiTime) {
+        this.shopNotiTime = shopNotiTime;
+    }
+
+    public String getShopNotiType() {
+        return shopNotiType;
+    }
+
+    public void setShopNotiType(String shopNotiType) {
+        this.shopNotiType = shopNotiType;
+    }
+
+    public String getShopNotiStatus() {
+        return shopNotiStatus;
+    }
+
+    public void setShopNotiStatus(String shopNotiStatus) {
+        this.shopNotiStatus = shopNotiStatus;
+    }
+
+    public String getShopNotiInfo() {
+        return shopNotiInfo;
+    }
+
+    public void setShopNotiInfo(String shopNotiInfo) {
+        this.shopNotiInfo = shopNotiInfo;
+    }
+
+    public Integer getMerchTransDocSn() {
+        return merchTransDocSn;
+    }
+
+    public void setMerchTransDocSn(Integer merchTransDocSn) {
+        this.merchTransDocSn = merchTransDocSn;
+    }
+
+    public String getRollOutShopId() {
+        return rollOutShopId;
+    }
+
+    public void setRollOutShopId(String rollOutShopId) {
+        this.rollOutShopId = rollOutShopId;
+    }
+
+    public String getRollInShopId() {
+        return rollInShopId;
+    }
+
+    public void setRollInShopId(String rollInShopId) {
+        this.rollInShopId = rollInShopId;
+    }
+
+    @Override
+    public String toString() {
+        return "TransferResponse{" +
+                "shopNotiId='" + shopNotiId + '\'' +
+                ", merchId='" + merchId + '\'' +
+                ", thirdPartyMerchCode='" + thirdPartyMerchCode + '\'' +
+                ", shopNotiTime='" + shopNotiTime + '\'' +
+                ", shopNotiType='" + shopNotiType + '\'' +
+                ", shopNotiStatus='" + shopNotiStatus + '\'' +
+                ", shopNotiInfo='" + shopNotiInfo + '\'' +
+                ", merchTransDocSn=" + merchTransDocSn +
+                ", rollOutShopId='" + rollOutShopId + '\'' +
+                ", rollInShopId='" + rollInShopId + '\'' +
+                '}';
+    }
+}

+ 150 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/Result.java

@@ -0,0 +1,150 @@
+package com.kmall.admin.utils.oms.result;
+
+import com.google.common.base.Strings;
+
+
+public class Result {
+    /**
+     * 状态码, 正常0, 失败1, 未登录2, 个位数是保留状态码, 其他业务相关状态码10以上
+     */
+    private String code = ResultCodeEnum.SUCCESS.getCode();
+
+    /**
+     * 消息
+     */
+    private String msg;
+
+    /**
+     * 业务数据
+     */
+    private Object data;
+
+    private String sign;
+
+    private Result() {
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+
+    public String getMsg() {
+        return msg;
+    }
+
+
+    public Object getData() {
+        return data;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    public static Builder builder(String code, String msg) {
+        return new Builder(code, msg);
+    }
+
+    public static Builder builder(String code, String msg, Object data) {
+        return new Builder(code, msg, data);
+    }
+
+    public static Builder builder(String code, String msg, String sign, Object data) {
+        return new Builder(code, msg, sign, data);
+    }
+
+    //---------- 直接返回结果 ----------
+
+    public static Result success(Object object) {
+        return new Builder(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMsg(), object).build();
+    }
+
+    public static Result success(String code, String msg, Object object) {
+        return new Builder(code, msg, object).build();
+    }
+
+    public static Result success(String msg) {
+        return new Builder(ResultCodeEnum.SUCCESS.getCode(), msg).build();
+    }
+
+    public static Result error(String code, String msg) {
+        return new Builder(code, msg).build();
+    }
+
+    public static Result error(String msg) {
+        return new Builder(ResultCodeEnum.FAILURE.getCode(), msg).build();
+    }
+
+    public static Result error(String code, String msg, Object object) {
+        return new Builder(code, msg, object).build();
+    }
+
+    /**
+     * 消息构建器类
+     */
+    public static class Builder {
+        private String code;
+        private String msg;
+        private Object data;
+        private String sign;
+
+        public Builder() {
+            this.code = ResultCodeEnum.SUCCESS.getCode();
+            this.msg = ResultCodeEnum.SUCCESS.getMsg();
+            this.data = null;
+        }
+
+        public Builder(String code, String msg) {
+            this.code = Strings.isNullOrEmpty(code) ? ResultCodeEnum.SUCCESS.getCode() : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? ResultCodeEnum.SUCCESS.getMsg() : msg;
+        }
+
+        public Builder(String code, String msg, Object extend) {
+            this.code = Strings.isNullOrEmpty(code) ? ResultCodeEnum.SUCCESS.getCode() : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? ResultCodeEnum.SUCCESS.getMsg() : msg;
+            this.data = extend;
+        }
+
+        public Builder(String code, String msg, String sign, Object extend) {
+            this.code = Strings.isNullOrEmpty(code) ? ResultCodeEnum.SUCCESS.getCode() : code;
+            this.msg = Strings.isNullOrEmpty(msg) ? ResultCodeEnum.SUCCESS.getMsg() : msg;
+            this.sign = sign;
+            this.data = extend;
+        }
+
+        public Result build() {
+            Result message = new Result();
+            message.code = this.code;
+            message.msg = this.msg;
+            message.data = this.data;
+            message.sign = this.sign;
+            return message;
+        }
+
+        public Builder setCode(String code) {
+            this.code = code;
+            return this;
+        }
+
+        public Builder setMsg(String msg) {
+            this.msg = msg;
+            return this;
+        }
+
+        public Builder setData(Object data) {
+            this.data = data;
+            return this;
+        }
+    }
+
+}

+ 36 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/ResultCodeEnum.java

@@ -0,0 +1,36 @@
+package com.kmall.admin.utils.oms.result;
+
+public enum ResultCodeEnum {
+	/** 成功 */
+	SUCCESS("0", "成功"),
+	/** 失败 */
+	FAILURE("-1", "失败");
+
+	/** 状态码 */
+	private String code;
+
+	/** 信息 */
+	private String msg;
+
+	private ResultCodeEnum(String code, String msg){
+        this.code = code;
+        this.msg = msg;
+    }
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+}

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

@@ -139,7 +139,7 @@ public class WebSocketServer {
     public static void sendMessage(Session session, String message,String picNo) {
         try {
 //            List<PickUpCodeEntity> pickUpCodeEntities = new ArrayList<>();
-            logger.info(picNo);
+//            logger.info(picNo);
 //            if(picNo != null){
 //                pickUpCodeEntities = pickUpCodeMap.get(picNo);
 //            }

+ 5 - 6
kmall-admin/src/main/resources/XmlTemplate/BrandDtoList.xml

@@ -6,12 +6,11 @@
               varType="com.kmall.admin.entity.BrandEntity">
             <section startRow="1" endRow="1">
                 <mapping row="1" col="0">BrandEntity.id</mapping>
-                <mapping row="1" col="1">BrandEntity.merchSn</mapping>
-                <mapping row="1" col="2">BrandEntity.categoryId</mapping>
-                <mapping row="1" col="3">BrandEntity.name</mapping>
-                <mapping row="1" col="4">BrandEntity.simpleDesc</mapping>
-                <mapping row="1" col="5">BrandEntity.isShow</mapping>
-                <mapping row="1" col="6">BrandEntity.isNew</mapping>
+                <mapping row="1" col="1">BrandEntity.name</mapping>
+                <mapping row="1" col="2">BrandEntity.uniqueIdentifier</mapping>
+                <mapping row="1" col="3">BrandEntity.simpleDesc</mapping>
+                <mapping row="1" col="4">BrandEntity.isShow</mapping>
+                <mapping row="1" col="5">BrandEntity.isNew</mapping>
             </section>
             <loopbreakcondition>
                 <rowcheck offset="0">

+ 10 - 7
kmall-admin/src/main/resources/XmlTemplate/GoodsDtoList.xml

@@ -25,13 +25,16 @@
                 <!--<mapping row="1" col="16">GoodsDto.marketPrice</mapping>-->
                 <!--<mapping row="1" col="14">GoodsDto.retailPrice</mapping>-->
                 <mapping row="1" col="14">GoodsDto.brand</mapping>
-                <mapping row="1" col="15">GoodsDto.unitName</mapping>
-                <mapping row="1" col="16">GoodsDto.oriCntName</mapping>
-                <mapping row="1" col="17">GoodsDto.cusDeclEle</mapping>
-                <mapping row="1" col="18">GoodsDto.cusRecCode</mapping>
-                <mapping row="1" col="19">GoodsDto.goodsNumber</mapping>
-                <mapping row="1" col="20">GoodsDto.plu</mapping>
-                <mapping row="1" col="21">GoodsDto.mychemId</mapping>
+                <mapping row="1" col="15">GoodsDto.uniqueIdentifier</mapping>
+                <mapping row="1" col="16">GoodsDto.unitName</mapping>
+                <mapping row="1" col="17">GoodsDto.oriCntName</mapping>
+                <mapping row="1" col="18">GoodsDto.cusDeclEle</mapping>
+                <mapping row="1" col="19">GoodsDto.cusRecCode</mapping>
+                <mapping row="1" col="20">GoodsDto.goodsNumber</mapping>
+                <mapping row="1" col="21">GoodsDto.plu</mapping>
+                <mapping row="1" col="22">GoodsDto.mychemId</mapping>
+                <mapping row="1" col="23">GoodsDto.firstLevel</mapping>
+                <mapping row="1" col="24">GoodsDto.secondLevel</mapping>
             </section>
             <loopbreakcondition>
                 <rowcheck offset="0">

+ 4 - 3
kmall-admin/src/main/resources/XmlTemplate/StoreGoodsDtoList.xml

@@ -11,10 +11,11 @@
                 <mapping row="1" col="3">StoreGoodsDto.categoryName</mapping>
                 <mapping row="1" col="4">StoreGoodsDto.attributeCategory</mapping>
                 <mapping row="1" col="5">StoreGoodsDto.brandName</mapping>
+                <mapping row="1" col="6">StoreGoodsDto.uniqueIdentifier</mapping>
 <!--                <mapping row="1" col="6">StoreGoodsDto.freightName</mapping>-->
-                <mapping row="1" col="6">StoreGoodsDto.retailPrice</mapping>
-                <mapping row="1" col="7">StoreGoodsDto.marketPrice</mapping>
-                <mapping row="1" col="8">StoreGoodsDto.bottomLinePrice</mapping>
+                <mapping row="1" col="7">StoreGoodsDto.retailPrice</mapping>
+                <mapping row="1" col="8">StoreGoodsDto.marketPrice</mapping>
+                <mapping row="1" col="9">StoreGoodsDto.bottomLinePrice</mapping>
 <!--                <mapping row="1" col="9">StoreGoodsDto.batchSn</mapping>-->
             </section>
             <loopbreakcondition>

+ 41 - 41
kmall-admin/src/main/resources/conf/fastdfs.properties

@@ -1,43 +1,7 @@
-#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
-connect_timeout=30
-
-#\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
-network_timeout=60
-
-#\u6587\u4EF6\u8DEF\u5F84
-base_path=/data/files/
-
-#tracker server\u662FFastDFS\u6587\u4EF6\u7CFB\u7EDF\u7684\u534F\u8C03\u8005,\u5176\u4E3B\u8981\u4F5C\u7528\u662F\u8D1F\u8F7D\u5747\u8861\u548C\u8C03\u5EA6\u3002
-#Tracker server\u5728\u5185\u5B58\u4E2D\u8BB0\u5F55\u5206\u7EC4\u548CStorage server\u7684\u72B6\u6001\u7B49\u4FE1\u606F\uFF0C\u4E0D\u8BB0\u5F55\u6587\u4EF6\u7D22\u5F15\u4FE1\u606F
-tracker_server=192.168.1.251:22122
-
-log_level=info
-
-use_connection_pool = false
-
-connection_pool_max_idle_time = 3600
-
-load_fdfs_parameters_from_tracker=false
-
-use_storage_id = false
-
-storage_ids_filename = storage_ids.conf
-
-#HTTP \u670D\u52A1\u5668\u5730\u5740
-http.tracket_nginx_addr=192.168.1.251
-
-#HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
-http.tracker_server_port=80
-
-#\u6587\u4EF6\u4F5C\u8005
-file.author=kmall-pt
-
-#
-##############\u751F\u4EA7\u73AF\u5883################
-###\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
+##\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
 #connect_timeout=30
-##
-###\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
+#
+##\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
 #network_timeout=60
 #
 ##\u6587\u4EF6\u8DEF\u5F84
@@ -45,7 +9,7 @@ file.author=kmall-pt
 #
 ##tracker server\u662FFastDFS\u6587\u4EF6\u7CFB\u7EDF\u7684\u534F\u8C03\u8005,\u5176\u4E3B\u8981\u4F5C\u7528\u662F\u8D1F\u8F7D\u5747\u8861\u548C\u8C03\u5EA6\u3002
 ##Tracker server\u5728\u5185\u5B58\u4E2D\u8BB0\u5F55\u5206\u7EC4\u548CStorage server\u7684\u72B6\u6001\u7B49\u4FE1\u606F\uFF0C\u4E0D\u8BB0\u5F55\u6587\u4EF6\u7D22\u5F15\u4FE1\u606F
-#tracker_server=120.76.26.84:22122
+#tracker_server=192.168.1.251:22122
 #
 #log_level=info
 #
@@ -60,10 +24,46 @@ file.author=kmall-pt
 #storage_ids_filename = storage_ids.conf
 #
 ##HTTP \u670D\u52A1\u5668\u5730\u5740
-#http.tracket_nginx_addr=120.76.26.84
+#http.tracket_nginx_addr=192.168.1.251
 #
 ##HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
 #http.tracker_server_port=80
 #
 ##\u6587\u4EF6\u4F5C\u8005
 #file.author=kmall-pt
+
+#
+##############\u751F\u4EA7\u73AF\u5883################
+##\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
+connect_timeout=30
+#
+##\u7F51\u7EDC\u8D85\u65F6\u65F6\u95F4
+network_timeout=60
+
+#\u6587\u4EF6\u8DEF\u5F84
+base_path=/data/files/
+
+#tracker server\u662FFastDFS\u6587\u4EF6\u7CFB\u7EDF\u7684\u534F\u8C03\u8005,\u5176\u4E3B\u8981\u4F5C\u7528\u662F\u8D1F\u8F7D\u5747\u8861\u548C\u8C03\u5EA6\u3002
+#Tracker server\u5728\u5185\u5B58\u4E2D\u8BB0\u5F55\u5206\u7EC4\u548CStorage server\u7684\u72B6\u6001\u7B49\u4FE1\u606F\uFF0C\u4E0D\u8BB0\u5F55\u6587\u4EF6\u7D22\u5F15\u4FE1\u606F
+tracker_server=120.76.26.84:22122
+
+log_level=info
+
+use_connection_pool = false
+
+connection_pool_max_idle_time = 3600
+
+load_fdfs_parameters_from_tracker=false
+
+use_storage_id = false
+
+storage_ids_filename = storage_ids.conf
+
+#HTTP \u670D\u52A1\u5668\u5730\u5740
+http.tracket_nginx_addr=120.76.26.84
+
+#HTTP \u670D\u52A1\u5668\u7AEF\u53E3\u53F7
+http.tracker_server_port=80
+
+#\u6587\u4EF6\u4F5C\u8005
+file.author=kmall-pt

+ 38 - 12
kmall-admin/src/main/resources/mybatis/mapper/BrandDao.xml

@@ -6,6 +6,7 @@
     <resultMap type="com.kmall.admin.entity.BrandEntity" id="brandMap">
         <result property="id" column="id"/>
         <result property="name" column="name"/>
+        <result property="uniqueIdentifier" column="unique_identifier"/>
         <result property="storeId" column="store_id"/>
         <result property="merchSn" column="merch_sn"/>
         <result property="listPicUrl" column="list_pic_url"/>
@@ -29,6 +30,7 @@
 		select
 			`id`,
 			`name`,
+			`unique_identifier`,
 			`store_id`,
 			`merch_sn`,
 			`list_pic_url`,
@@ -51,6 +53,7 @@
         select
         b.`id`,
         b.`name`,
+        b.`unique_identifier`,
         b.`store_id`,
 		b.`merch_sn`,
         b.`list_pic_url`,
@@ -81,6 +84,7 @@
         select
         `id`,
         `name`,
+        `unique_identifier`,
         `store_id`,
         `merch_sn`,
         `list_pic_url`,
@@ -115,6 +119,7 @@
         select
         b.id,
         b.name,
+        b.unique_identifier,
         b.store_id,
         b.merch_sn,
         `list_pic_url`,
@@ -127,13 +132,10 @@
         b.is_new,
         `new_pic_url`,
         b.new_sort_order,
-        m.merch_name merchName,
-        cg.name categoryName,
         b.category_id,
         b.category_level
         from mall_brand b
-        left join mall_merch m on b.merch_sn = m.merch_sn
-        LEFT JOIN mall_category cg ON b.category_id = cg.id
+
         WHERE 1=1
         <if test="categoryId != null and categoryId != ''">
             AND b.category_id = #{categoryId}
@@ -162,9 +164,7 @@
 
     <select id="queryTotal" resultType="int">
         select count(*) from mall_brand b
-        left join mall_store s on b.store_id = s.id
-        left join mall_merch m on b.merch_sn = m.merch_sn
-        LEFT JOIN mall_category cg ON b.category_id = cg.id
+
         WHERE 1=1
         <if test="categoryId != null and categoryId != ''">
             AND b.category_id = #{categoryId}
@@ -175,9 +175,7 @@
         <if test="merchSn != null and merchSn.trim() != ''">
             AND b.merch_sn = #{merchSn}
         </if>
-        <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-            AND s.third_party_merch_code = #{thirdPartyMerchCode}
-        </if>
+
         <if test="name != null and name.trim() != ''">
             AND b.name LIKE concat('%',#{name},'%')
         </if>
@@ -186,6 +184,7 @@
     <insert id="save" parameterType="com.kmall.admin.entity.BrandEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_brand(
 			`name`,
+			`unique_identifier`,
 			`store_id`,
 			`merch_sn`,
 			`list_pic_url`,
@@ -203,6 +202,7 @@
             )
 		values(
 			#{name},
+			#{uniqueIdentifier},
 			#{storeId},
 			#{merchSn},
 			#{listPicUrl},
@@ -224,6 +224,7 @@
         update mall_brand
         <set>
             <if test="name != null">`name` = #{name},</if>
+            <if test="uniqueIdentifier != null">`unique_identifier` = #{uniqueIdentifier},</if>
             <if test="storeId != null">`store_id` = #{storeId}, </if>
             <if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
             <if test="listPicUrl != null">`list_pic_url` = #{listPicUrl},</if>
@@ -281,6 +282,7 @@
         select
         b.id,
         b.name,
+        b.unique_identifier,
         b.store_id,
         b.merch_sn,
         `list_pic_url`,
@@ -294,12 +296,12 @@
         `new_pic_url`,
         b.new_sort_order,
         m.merch_name merchName,
-        cg.name categoryName,
+
         b.category_id,
         b.category_level
         from mall_brand b
         left join mall_merch m on b.merch_sn = m.merch_sn
-        LEFT JOIN mall_category cg ON b.category_id = cg.id
+
         WHERE 1=1
         <if test="name != null and name.trim() != ''">
             AND b.name LIKE concat('%',#{name},'%')
@@ -308,4 +310,28 @@
 
     </select>
 
+
+    <select id="queryByUniqueIdentifier" resultType="com.kmall.admin.entity.BrandEntity">
+        select
+			`id`,
+			`name`,
+			`unique_identifier`,
+			`store_id`,
+			`merch_sn`,
+			`list_pic_url`,
+			`simple_desc`,
+			`pic_url`,
+			`sort_order`,
+			`is_show`,
+			`floor_price`,
+			`app_list_pic_url`,
+			`is_new`,
+			`new_pic_url`,
+			`new_sort_order`,
+			category_id,
+			category_level
+		from mall_brand
+		where unique_identifier = #{uniqueIdentifier}
+    </select>
+
 </mapper>

+ 28 - 24
kmall-admin/src/main/resources/mybatis/mapper/CategoryDao.xml

@@ -100,22 +100,10 @@
     		`level`,
     		`type`,
     		`front_name`,
-			b.is_show as `show`,
-		s.store_name storeName,
-		m.merch_name merchName
+			b.is_show as `show`
 		from mall_category b
-		left join mall_store s on b.store_id = s.id
-		left join mall_merch m on b.merch_sn = m.merch_sn
 		WHERE 1=1
-		<if test="storeId != null and storeId != ''">
-			AND b.store_id = #{storeId}
-		</if>
-		<if test="merchSn != null and merchSn.trim() != ''">
-			AND b.merch_sn = #{merchSn}
-		</if>
-		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-			AND s.third_party_merch_code = #{thirdPartyMerchCode}
-		</if>
+
 		<if test="categoryName != null and categoryName.trim() != ''">
 			AND b.name LIKE concat('%',#{categoryName},'%')
 		</if>
@@ -146,17 +134,7 @@
 
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_category b
-		left join mall_store s on b.store_id = s.id
 		WHERE 1=1
-		<if test="storeId != null and storeId != ''">
-			AND b.store_id = #{storeId}
-		</if>
-		<if test="merchSn != null and merchSn.trim() != ''">
-			AND b.merch_sn = #{merchSn}
-		</if>
-		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-			AND s.third_party_merch_code = #{thirdPartyMerchCode}
-		</if>
 		<if test="categoryName != null and categoryName.trim() != ''">
 			AND b.name LIKE concat('%',#{categoryName},'%')
 		</if>
@@ -247,4 +225,30 @@
 		</foreach>
 	</delete>
 
+
+	<select id="queryByName" resultType="com.kmall.admin.entity.CategoryEntity">
+		select
+		`id`,
+		`name`,
+		`store_id`,
+		`merch_sn`,
+		`keywords`,
+		`front_desc`,
+		`parent_id`,
+		`sort_order`,
+		`show_index`,
+		`is_show`,
+		`banner_url`,
+		`icon_url`,
+		`img_url`,
+		`wap_banner_url`,
+		`level`,
+		`type`,
+		`front_name`,
+		`is_show` as `show`
+		from mall_category
+		where name = #{categoryName}
+		and is_show = 1
+	</select>
+
 </mapper>

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

@@ -6,10 +6,10 @@
     <resultMap type="com.kmall.admin.entity.GoodsEntity" id="goodsMap">
         <result property="id" column="id"/>
         <result property="merchSn" column="merch_sn"/>
-        <!--<result property="categoryId" column="category_id"/>-->
+        <result property="categoryId" column="category_id"/>
         <result property="goodsSn" column="goods_sn"/>
         <result property="name" column="name"/>
-        <!--<result property="brandId" column="brand_id"/>-->
+        <result property="brandId" column="brand_id"/>
         <!--<result property="freightId" column="freight_id"/>-->
         <result property="brand" column="brand"/>
         <result property="goodsNumber" column="goods_number"/>
@@ -280,7 +280,8 @@
         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,
+        m.merch_name merchName,
+        mb.is_stock_share isStockShare,
         catagory.keywords as categoryName
         from mall_goods
         left join mall_merch m on mall_goods.merch_sn = m.merch_sn
@@ -483,6 +484,8 @@
 			`name`,
 			`unit_code`,
 			`brand`,
+			`brand_id`,
+			`category_id`,
 			`goods_number`,
 			`keywords`,
 			`goods_brief`,
@@ -546,6 +549,8 @@
 			#{name},
 			#{unitCode},
 			#{brand},
+			#{brandId},
+			#{categoryId},
 			#{goodsNumber},
 			#{keywords},
 			#{goodsBrief},
@@ -592,7 +597,7 @@
 			#{legalUnit1Qty},
 			#{legalUnit2Qty},
 			#{cosmThresholdValue},
-			#{toBeRestored},
+			0,
 			#{tstm})
     </insert>
 
@@ -613,6 +618,8 @@
             <if test="name != null">`name` = #{name},</if>
             <if test="unitCode != null">`unit_code` = #{unitCode},</if>
             <if test="brand != null">`brand` = #{brand},</if>
+            <if test="brandId != null">`brand_id` = #{brandId},</if>
+            <if test="categoryId != null">`category_id` = #{categoryId},</if>
             <if test="goodsNumber != null">`goods_number` = #{goodsNumber},</if>
             <if test="keywords != null">`keywords` = #{keywords},</if>
             <if test="goodsBrief != null">`goods_brief` = #{goodsBrief},</if>
@@ -828,7 +835,10 @@
         where is_sync_goods_rate = '0'
     </select>
     <select id="queryAllList" resultType="com.kmall.admin.entity.GoodsEntity">
-        select * from mall_goods
+        select * from mall_goods where is_delete = 0
+        <if test="page != null and pageSize != null">
+            limit #{page}, #{pageSize}
+        </if>
     </select>
 
     <select id="queryByBarcodeAndSku" resultType="com.kmall.admin.entity.GoodsEntity">
@@ -871,6 +881,8 @@
         `name`,
         `unit_code`,
         `brand`,
+        `brand_id`,
+        `category_id`,
         `goods_number`,
         `keywords`,
         `goods_brief`,
@@ -936,6 +948,8 @@
         #{item.name},
         #{item.unitCode},
         #{item.brand},
+        #{item.brandId},
+        #{item.categoryId},
         #{item.goodsNumber},
         #{item.keywords},
         #{item.goodsBrief},
@@ -1008,6 +1022,8 @@
                 <if test="item.name != null">`name` = #{item.name},</if>
                 <if test="item.unitCode != null">`unit_code` = #{item.unitCode},</if>
                 <if test="item.brand != null">`brand` = #{item.brand},</if>
+                <if test="item.brandId != null">`brand_id` = #{item.brandId},</if>
+                <if test="item.categoryId != null">`category_id` = #{item.categoryId},</if>
                 <if test="item.goodsNumber != null">`goods_number` = #{item.goodsNumber},</if>
                 <if test="item.keywords != null">`keywords` = #{item.keywords},</if>
                 <if test="item.goodsBrief != null">`goods_brief` = #{item.goodsBrief},</if>

+ 6 - 0
kmall-admin/src/main/resources/mybatis/mapper/MngChangeDao.xml

@@ -89,6 +89,9 @@
 		<if test="goodsId != null and goodsId != ''">
 			AND c.goods_id = #{goodsId}
 		</if>
+		<if test="goodsName != null and goodsName != ''">
+			AND g.name = #{goodsName}
+		</if>
 		<if test="storeId != null and storeId != ''">
 			AND c.store_id = #{storeId}
 		</if>
@@ -120,6 +123,9 @@
 		<if test="goodsId != null and goodsId != ''">
 			AND c.goods_id = #{goodsId}
 		</if>
+		<if test="goodsName != null and goodsName != ''">
+			AND g.name = #{goodsName}
+		</if>
 		<if test="storeId != null and storeId != ''">
 			AND c.store_id = #{storeId}
 		</if>

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

@@ -399,8 +399,8 @@
         SELECT distinct
         o.id,
         o.order_sn,
-        u.username as userName,
-        c.pick_up_code_sn,
+        s.store_name,
+
         o.pay_name,
         o.mobile,
         o.is_onffline_order,
@@ -414,14 +414,16 @@
         o.pay_time,
         o.pay_flag
         from mall_order o
+        LEFT JOIN mall_store s on o.store_id = s.id
         LEFT JOIN mall_order_goods g ON o.id = g.order_id
-        LEFT JOIN mall_sale_record record ON record.order_sn = o.order_sn
-        LEFT JOIN sys_user u ON record.saller_id = u.user_id
-        LEFT JOIN mall_pick_up_code c ON o.order_sn = c.order_sn
+
         WHERE 1=1
         <if test="storeId != null and storeId != ''">
             AND o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
         <if test="merchSn != null and merchSn.trim() != ''">
             AND o.merch_sn = #{merchSn}
         </if>
@@ -483,15 +485,15 @@
     <select id="queryOffilineOrderTotal" resultType="int">
         select count(DISTINCT o.id) FROM
         mall_order o
-
+        LEFT JOIN mall_store s on o.store_id = s.id
         LEFT JOIN mall_order_goods g ON o.id = g.order_id
-        LEFT JOIN mall_sale_record record ON record.order_sn = o.order_sn
-        LEFT JOIN sys_user u ON record.saller_id = u.user_id
-        LEFT JOIN mall_pick_up_code c ON o.order_sn = c.order_sn
         WHERE 1=1
         <if test="storeId != null and storeId != ''">
             AND o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
         <if test="merchSn != null and merchSn.trim() != ''">
             AND o.merch_sn = #{merchSn}
         </if>
@@ -1656,11 +1658,12 @@
             o.merch_sn AS merchSn,
             m.merch_name AS merchName,
             count( distinct o.order_sn ) AS guestNumber,
-            sum(  og.actual_payment_amount/ (1+og.goods_rate) ) + sum(og.discounted_price)AS totalSales,
-            sum(  og.actual_payment_amount/ (1+og.goods_rate) ) + sum(og.discounted_price) AS actualSales,
+            sum( og.actual_payment_amount) + sum(og.discounted_price)AS totalSales,
+            sum( og.actual_payment_amount) - sum(og.tax_price) + sum(og.discounted_price) AS actualSales,
+            sum(sr.retail_price * og.number - og.actual_payment_amount) as preferentialLoss,
             s.store_name AS storeName,
             max( o.add_time ) AS lastSalesTime ,
-            sum( g.cost_price) AS totalCost
+            sum( sr.bottom_line_price) AS totalCost
         FROM
             mall_order o
             LEFT JOIN mall_store s ON o.store_id = s.id
@@ -1793,7 +1796,6 @@
         g.number
         FROM
         mall_order o
-
         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
@@ -1815,6 +1817,9 @@
         <if test="endTime != null and endTime != ''">
             AND o.add_time <![CDATA[ <  ]]> #{endTime}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
 
     </select>
     <select id="queryMasterExportOffilineOrderList" resultType="com.kmall.admin.entity.OrderEntity">
@@ -1902,6 +1907,9 @@
         <if test="storeId != null and storeId != ''">
             AND o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
         order by o.order_status
 
     </select>
@@ -2103,6 +2111,9 @@
         <if test="endTime != null and endTime != ''">
             AND o.add_time <![CDATA[ <  ]]> #{endTime}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
 
     </select>
 
@@ -2231,8 +2242,6 @@
         s.store_name storeName
         FROM
         mall_order o
-
-
         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
@@ -2243,6 +2252,9 @@
         <if test="storeId != ''">
             and o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
         order by o.order_status
     </select>
 
@@ -2282,6 +2294,9 @@
         <if test="storeId != ''">
             and o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
         order by o.order_status
     </select>
 
@@ -2295,6 +2310,9 @@
         <if test="storeId != ''">
             and o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
     </select>
 
     <select id="queryRefundPreviousTaxDetailList" resultType="com.kmall.admin.dto.TaxDetailDto">
@@ -2307,6 +2325,9 @@
         <if test="storeId != ''">
             and o.store_id = #{storeId}
         </if>
+        <if test="storeName != null and storeName != ''">
+            AND s.store_name LIKE concat('%',#{storeName},'%')
+        </if>
     </select>
 
     <select id="queryAll201Order" resultType="com.kmall.admin.entity.OrderEntity">

+ 37 - 15
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -179,7 +179,6 @@
             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,
@@ -198,7 +197,6 @@
             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
             WHERE 1=1 and b.is_delete = 0
@@ -233,11 +231,9 @@
                 AND b.name LIKE concat('%',#{goodsName},'%')
             </if>
             <if test="goodsSn != null and goodsSn != '' ">
-                AND b.goods_sn = #{goodsSn}
-            </if>
-            <if test="productSn != null and productSn != '' ">
-                AND c.goods_sn = #{productSn}
+                AND a.sku = #{goodsSn}
             </if>
+
             <if test="productId != null">
                 AND a.product_id = #{productId}
             </if>
@@ -444,9 +440,7 @@
         <if test="bottomLinePrice != null" >
             bottom_line_price,
         </if>
-        <if test="toBeRestored != null">
             to_be_restored
-        </if>
         )
 		values(
             #{storeId},
@@ -505,9 +499,7 @@
         <if test="bottomLinePrice != null" >
             #{bottomLinePrice,jdbcType=VARCHAR},
         </if>
-        <if test="toBeRestored != null" >
-            #{toBeRestored,jdbcType=VARCHAR}
-        </if>
+        0
         )
 	</insert>
 
@@ -573,7 +565,9 @@
             <if test="lastSaleTime != null" >
                 last_sale_time = #{lastSaleTime,jdbcType=TIMESTAMP},
             </if>
-            0
+            <if test="toBeRestored != null" >
+                to_be_restored = #{toBeRestored,jdbcType=VARCHAR}
+            </if>
         </set>
         where id = #{id}
     </update>
@@ -812,7 +806,7 @@
         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.goods_sn productSn,
         b.name goodsName,
         cg.name categoryName,
         s.store_name storeName,
@@ -832,7 +826,6 @@
         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
@@ -853,7 +846,7 @@
             AND b.name LIKE concat('%',#{goodsName},'%')
         </if>
         <if test="goodsSn != null and goodsSn != '' ">
-            AND b.goods_sn = #{goodsSn}
+            AND a.sku = #{goodsSn}
         </if>
 
         <if test="goodsBizType != null and goodsBizType != ''">
@@ -872,6 +865,35 @@
 
     <select id="queryAllList" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
         select * from mall_product_store_rela
+        <if test="page != null and pageSize != null">
+            limit #{page} , #{pageSize}
+        </if>
     </select>
 
+    <update id="transferInGoods" >
+
+        <foreach collection="list" item="item" index="index" separator=";">
+            update mall_product_store_rela
+            <set>
+                stock_num = stock_num + #{item.num,jdbcType=INTEGER}
+            </set>
+            where
+            shop_sn = #{shopSn,jdbcType=VARCHAR}
+            and sku = #{item.sku,jdbcType=VARCHAR}
+
+        </foreach>
+    </update>
+
+    <update id="transferOutGoods" >
+        <foreach collection="list" item="item" index="index" separator=";">
+            update mall_product_store_rela
+            <set>
+                stock_num = stock_num - #{item.num,jdbcType=INTEGER}
+            </set>
+            where
+            shop_sn = #{shopSn,jdbcType=VARCHAR}
+            and sku = #{item.sku,jdbcType=VARCHAR}
+        </foreach>
+    </update>
+
 </mapper>

+ 14 - 8
kmall-admin/src/main/resources/mybatis/mapper/StoreMngChangeDao.xml

@@ -89,6 +89,9 @@
 		<if test="goodsId != null and goodsId != ''">
 			AND c.goods_id = #{goodsId}
 		</if>
+		<if test="goodsName != null and goodsName != ''">
+			AND g.name = #{goodsName}
+		</if>
 		<if test="storeId != null and storeId != ''">
 			AND c.store_id = #{storeId}
 		</if>
@@ -110,7 +113,7 @@
 			limit #{offset}, #{limit}
 		</if>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_store_mng_change c left join mall_merch m on c.merch_sn = m.merch_sn
 		left join mall_store s on s.id = c.store_id
@@ -119,6 +122,9 @@
 		<if test="goodsId != null and goodsId != ''">
 			AND c.goods_id = #{goodsId}
 		</if>
+		<if test="goodsName != null and goodsName != ''">
+			AND g.name = #{goodsName}
+		</if>
 		<if test="storeId != null and storeId != ''">
 			AND c.store_id = #{storeId}
 		</if>
@@ -129,7 +135,7 @@
 			AND s.third_party_merch_code = #{thirdPartyMerchCode}
 		</if>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.admin.entity.StoreMngChangeEntity">
 		insert into mall_store_mng_change(
 			`store_change_num`,
@@ -162,9 +168,9 @@
 			#{modTime},
 			#{tstm})
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.StoreMngChangeEntity">
-		update mall_store_mng_change 
+		update mall_store_mng_change
 		<set>
 			<if test="storeChangeNum != null">`store_change_num` = #{storeChangeNum}, </if>
 			<if test="storeOriginalNum != null">`store_original_num` = #{storeOriginalNum}, </if>
@@ -183,16 +189,16 @@
 		</set>
 		where id = #{id}
 	</update>
-	
+
 	<delete id="delete">
 		delete from mall_store_mng_change where id = #{value}
 	</delete>
-	
+
 	<delete id="deleteBatch">
-		delete from mall_store_mng_change where id in 
+		delete from mall_store_mng_change where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 			#{id}
 		</foreach>
 	</delete>
 
-</mapper>
+</mapper>

+ 32 - 8
kmall-admin/src/main/resources/mybatis/mapper/StoreTransferInventoryOrderDetailDao.xml

@@ -55,7 +55,7 @@
 			limit #{offset}, #{limit}
 		</if>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_store_transfer_inventory_order_detail
 		WHERE 1=1
@@ -63,7 +63,7 @@
             AND name LIKE concat('%',#{name},'%')
         </if>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_store_transfer_inventory_order_detail(
 			`order_id`,
@@ -82,9 +82,9 @@
 			#{modifyTime},
 			#{modifySn})
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity">
-		update mall_store_transfer_inventory_order_detail 
+		update mall_store_transfer_inventory_order_detail
 		<set>
 			<if test="orderId != null">`order_id` = #{orderId}, </if>
 			<if test="sku != null">`sku` = #{sku}, </if>
@@ -96,16 +96,40 @@
 		</set>
 		where id = #{id}
 	</update>
-	
+
 	<delete id="delete">
 		delete from mall_store_transfer_inventory_order_detail where id = #{value}
 	</delete>
-	
+
 	<delete id="deleteBatch">
-		delete from mall_store_transfer_inventory_order_detail where id in 
+		delete from mall_store_transfer_inventory_order_detail where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 			#{id}
 		</foreach>
 	</delete>
 
-</mapper>
+	<select id="queryByTransferId" resultType="com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity">
+		select
+    		`id`,
+    		`order_id`,
+    		`sku`,
+    		`num`,
+    		`remark`,
+    		`create_sn`,
+    		`modify_time`,
+    		`modify_sn`
+		from mall_store_transfer_inventory_order_detail
+		where order_id = #{transferId}
+	</select>
+
+	<select id="queryDtoById" resultType="java.util.HashMap">
+		select
+
+    		sku,
+    		num as goodsNum
+		from mall_store_transfer_inventory_order_detail
+		where order_id = #{transferId}
+	</select>
+
+
+</mapper>

+ 24 - 8
kmall-admin/src/main/resources/mybatis/mapper/statistics/MonthlyCustomersDao.xml

@@ -10,7 +10,12 @@
 		sum(  og.actual_payment_amount ) + sum(og.discounted_price)AS totalSales,
 		sum( og.number) as totalNumber,
 		count(DISTINCT o.pay_mobile) as totalCustomers,
-		DATE_FORMAT(o.pay_time,'%Y-%m') as yearAndMonth
+		<if test='dateFlag == "month"'>
+			DATE_FORMAT(o.pay_time,'%Y-%m') as yearAndMonth
+		</if>
+		<if test='dateFlag == "day"'>
+			DATE_FORMAT(o.pay_time,'%Y-%m-%d') as yearAndMonth
+		</if>
 		FROM
 		mall_order o
 		LEFT JOIN mall_merch m ON o.merch_sn = m.merch_sn
@@ -20,13 +25,24 @@
 			AND o.order_biz_type = '10'
 			AND o.pay_status = '2'
 			and o.order_status = '300'
-			AND DATE_FORMAT(o.pay_time,'%Y-%m')  &gt;= #{startMonth}
-			AND DATE_FORMAT(o.pay_time,'%Y-%m') &lt;= #{endMonth}
+			<if test='dateFlag == "month"'>
+				AND DATE_FORMAT(o.pay_time,'%Y-%m')  &gt;= #{startMonth}
+				AND DATE_FORMAT(o.pay_time,'%Y-%m') &lt;= #{endMonth}
+			</if>
+			<if test='dateFlag == "day"'>
+				AND DATE_FORMAT(o.pay_time,'%Y-%m-%d')  &gt;= #{startMonth}
+				AND DATE_FORMAT(o.pay_time,'%Y-%m-%d') &lt;= #{endMonth}
+			</if>
 			<if test="merchSn != null">
 				and m.merch_sn = #{merchSn}
 			</if>
 		</where>
-		group by DATE_FORMAT(o.pay_time,'%Y-%m')
+		<if test='dateFlag == "month"'>
+			group by DATE_FORMAT(o.pay_time,'%Y-%m')
+		</if>
+		<if test='dateFlag == "day"'>
+			group by DATE_FORMAT(o.pay_time,'%Y-%m-%d')
+		</if>
 
 	</select>
 	<select id="queryWeeklyCustomers" resultType="com.kmall.admin.entity.MonthlySalesGrowthEntity">
@@ -82,7 +98,7 @@
 			og.sku
 		ORDER BY
 			sales desc
-			LIMIT 10
+			LIMIT 50
 	</select>
 
 	<select id="top10ByBrand" resultType="com.kmall.admin.entity.MonthlySalesGrowthEntity" >
@@ -134,10 +150,10 @@
 			AND o.order_biz_type = '10'
 			AND o.pay_status = '2'
 			<if test="startDate != null and startDate.trim() != ''">
-				and DATE_FORMAT(o.pay_time,'%Y-%m')  &gt;= #{startDate}
+				and DATE_FORMAT(o.pay_time,'%Y-%m-%d')  &gt;= #{startDate}
 			</if>
 			<if test="endDate != null and endDate.trim() != ''">
-				and DATE_FORMAT(o.pay_time,'%Y-%m') &lt;= #{endDate}
+				and DATE_FORMAT(o.pay_time,'%Y-%m-%d') &lt;= #{endDate}
 			</if>
 			<if test="merchSn != null">
 				and m.merch_sn = #{merchSn}
@@ -175,7 +191,7 @@
 			</if>
 		</where>
 		GROUP BY
-			cg.parent_id
+			cg.id
 
 		limit 20
 	</select>

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

@@ -78,6 +78,9 @@
                 /captcha.jpg=anon
                 /low-mp-ver.html=anon
                 /pcd/hbk6zzez.html=anon
+                /ktoeccs/queryAllGoodsInfo=anon
+                /ktoeccs/queryAllStoreProductInfo=anon
+                /ktoeccs/sendToEccs=anon
                 /ws/server/**=anon
                 /restored/toBeRestored/**=anon
                 /**=authc

+ 5 - 1
kmall-admin/src/main/webapp/WEB-INF/page/sale/monthlyCustomers.html

@@ -37,9 +37,13 @@
     <header class="main-header">
         <div class="container-fluid  coldiv">
             <div class="row" style="border:0;margin-bottom:10px">
-            <span>日期:</span>
+            <input type="radio" name="date" value="month" checked="checked">日期-月:
             <input type="month" name="startMonth" id="startMonth"/>&nbsp;
             <input type="month" name="endMonth" id="endMonth" />&nbsp;
+            <input type="radio" name="date" value="day" >日期-日:
+            <input type="date" name="startDay" id="startDay"/>&nbsp;
+            <input type="date" name="endDay" id="endDay" />&nbsp;
+
                 <input type="button" name="queryButton" value="查询" onclick="queryMonthly()" />
                 <input type="button" name="exportButton" value="导出" onclick="exportMonthly()" />
             </div>

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

@@ -199,15 +199,15 @@
                                         <form>
                                             <div class="form-group">
                                                 <label for="customPhone" class="control-label">手机号:</label>
-                                                <input type="text" class="form-control" ref="customPhone" id="customPhone" @blur="customPhoneBlur" />
+                                                <input autocomplete="off" type="text" class="form-control" ref="customPhone" id="customPhone" @blur="customPhoneBlur" />
                                             </div>
                                             <div class="form-group">
                                                 <label for="customName" class="control-label">姓名:</label>
-                                                <input type="text" class="form-control"  ref="customName"  id="customName" />
+                                                <input autocomplete="off" type="text" class="form-control"  ref="customName"  id="customName" />
                                             </div>
                                             <div class="form-group">
                                                 <label for="customIDCard" class="control-label">身份证:</label>
-                                                <input type="text" class="form-control"  ref="customIDCard"  id="customIDCard" />
+                                                <input autocomplete="off" type="text" class="form-control"  ref="customIDCard"  id="customIDCard" />
                                             </div>
                                             <div v-if="coupons.size > 0" class="form-group">
                                                 <label for="couponSn" class="control-label">优惠券码:</label>
@@ -253,7 +253,7 @@
 
             </div>
             <div class="col-md-3">
-                <h2 class="text-center" style="border: white;background-color: #F5DCB3;padding: 8px" >取货码 <span v-show="delayResponse"> 卡回执!!!!!</span></h2><br/>
+                <h2 class="text-center" style="border: white;background-color: #F5DCB3;padding: 8px" >取货码 <span v-show="delayResponse"> 海关卡回执导致单量堆积</span></h2><br/>
                 <div class="row" style="border: white;background-color: #f0f0f0;overflow:auto;height: 700px;">
                     <div class="col-xs-4 col-sm-4" v-for="(item,i) in pickUpCodeList" style="margin-bottom: 8px;">
                         <i-button data-toggle="modal" data-target="#orderDetail" style="width: 110px;font-family: 微软雅黑" @click="queryOrderDetail(item.orderSn,item.pickUpCodeSn)" v-if="item.pickUpCodeStatus == 0"  >&nbsp;{{item.pickUpCodeSn}}</i-button>
@@ -347,16 +347,17 @@
                                 </tr>
                             </table>
 
-                        </div>e y
+                        </div>
                         <div class="modal-footer">
                             <button v-if="canRefund" type="button" style="margin:0 30px 0 20px;font-size: 20px;float: left" class="btn ivu-btn-error" @click="refundOrder()" id="refundOrder" data-dismiss="modal">退款</button>
-                            <button v-else disabled type="button" style="margin:0 30px 0 20px;font-size: 20px;float: left" class="btn ivu-btn-error" @click="refundOrder()"  data-dismiss="modal">退款</button>
-                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-warning" @click="confirmDelivery" id="confirmDelivery" data-dismiss="modal">确定提货</button>
-                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendNotice" id="resendNotice" data-dismiss="modal">重发通知</button>
-                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendWaybill" id="resendWaybill" data-dismiss="modal">重发运单</button>
-                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="resendPayment" id="resendPayment" data-dismiss="modal">重发支付单</button>
-                            <button type="button" style="margin:0 30px 0 20px;font-size: 30px;" class="btn btn-primary" @click="verification" id="verification" data-dismiss="modal">核销</button>
-                            <!--<button type="button" class="btn btn-primary" @click="retrySendOrder" id="retrySendOrder" data-dismiss="modal">订单重推</button>-->
+                            <button v-else disabled type="button" style="margin:0 30px 0 25px;font-size: 20px;float: left" class="btn ivu-btn-error" @click="refundOrder()"  data-dismiss="modal">退款</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-warning" @click="confirmDelivery" id="confirmDelivery" data-dismiss="modal">确定提货</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendNotice" id="resendNotice" data-dismiss="modal">重发通知</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendWaybill" id="resendWaybill" data-dismiss="modal">重发运单</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendPayment" id="resendPayment" data-dismiss="modal">重发支付单</button>
+<!--                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="resendOrder" id="resendOrder" data-dismiss="modal">重发订单</button>-->
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="forceSendToOms" id="forceSendToOms" data-dismiss="modal">强推清关</button>
+                            <button type="button" style="margin:0 30px 0 20px;font-size: 25px;" class="btn btn-primary" @click="verification" id="verification" data-dismiss="modal">核销</button>
                         </div>
                     </div>
                 </div><!-- /.modal -->

+ 3 - 2
kmall-admin/src/main/webapp/WEB-INF/page/sale/top10ForProduct.html

@@ -40,13 +40,14 @@
             <span>日期:</span>
             <input type="month" name="month" id="month"/>&nbsp;
             <input type="week" name="week" id="week" />&nbsp;
-                <input type="button" name="queryButton" value="查询" onclick="queryMonthly()" />
+            <input type="button" name="queryButton" value="查询" onclick="queryMonthly()" />
+            <input type="button" name="queryButton" value="重置" onclick="clearDate()" />
             </div>
         </div>
     </header>
     <div class="row">
         <div class="col-md-12  col-sm-12  col-xs-12 charts6">
-            <div id="main3" style="height: 500px;"></div>
+            <div id="main3" style="height: 1800px;"></div>
         </div>
     </div>
     <script src="${rc.contextPath}/js/sale/echarts.js"></script>

+ 7 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/brand.html

@@ -20,6 +20,7 @@
 <!--                    </i-select>-->
 <!--                </i-col>-->
                 <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
             </div>
             <div class="buttons-group">
 
@@ -33,6 +34,7 @@
                     </Upload>
                 </i-col>
                 <i-button type="primary" @click="exportBrand"><i class="fa fa-cloud-download"></i>&nbsp;导出</i-button>
+                <i-button type="primary" @click="refreshCache"><i class="fa fa-cloud-download"></i>&nbsp;刷新缓存</i-button>
                 #if($shiro.hasPermission("brand:save"))
                 <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
                 #end
@@ -51,7 +53,7 @@
     <Card v-show="!showList">
         <p slot="title">{{title}}</p>
         <i-form ref="formValidate" :model="brand" :rules="ruleValidate" :label-width="100">
-            <Form-item label="商户" prop="merchSn">
+            <!--<Form-item label="商户" prop="merchSn">
                 <i-select v-model="brand.merchSn" filterable placeholder="商户" @on-change="getCategorysByMerch" label-in-value>
                     <i-option v-for="merch in merchList" :value="merch.merchSn" :key="merch.merchSn">{{merch.merchName}}</i-option>
                 </i-select>
@@ -61,11 +63,14 @@
                 <div style="overflow-y: auto; max-height: 250px; border: 1px solid #cccccc;">
                     <ul id="categoryTree" class="ztree"></ul>
                 </div>
-            </Form-item>
+            </Form-item>-->
 
             <Form-item label="品牌名称" prop="name">
                 <i-input v-model="brand.name" placeholder="品牌名称"/>
             </Form-item>
+            <Form-item label="品牌唯一简码" prop="uniqueIdentifier">
+                <i-input v-model="brand.uniqueIdentifier" placeholder="品牌唯一简码,限制只能为字母数字下划线,长度不能超过10位"/>
+            </Form-item>
             <Row>
                 <i-col span="16">
                     <Form-item label="图片" prop="listPicUrl">

+ 3 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html

@@ -24,6 +24,7 @@
             </div>
             <div class="buttons-group">
                 <!--<i-button type="ghost" @click="reload"><i class="fa fa-refresh"></i>&nbsp;刷新</i-button>-->
+                <i-button type="primary" @click="refreshCache"><i class="fa fa-cloud-download"></i>&nbsp;刷新缓存</i-button>
                 #if($shiro.hasPermission("category:save"))
                 <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
                 #end
@@ -42,11 +43,11 @@
     <Card v-show="!showList">
         <p slot="title">{{title}}</p>
         <i-form ref="formValidate" :model="category" :rules="ruleValidate" :label-width="100">
-            <Form-item label="商户" prop="merchSn">
+            <!--<Form-item label="商户" prop="merchSn">
                 <i-select v-model="category.merchSn" placeholder="商户" @on-change="getStoresByMerch" label-in-value>
                     <i-option v-for="merch in merchList" :value="merch.merchSn" :key="merch.merchSn">{{merch.merchName}}</i-option>
                 </i-select>
-            </Form-item>
+            </Form-item>-->
 
             <Form-item label="分类名称" prop="name">
                 <i-input v-model="category.name" placeholder="分类名称"/>

+ 43 - 21
kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html

@@ -156,23 +156,23 @@
                     </Upload>
                 </i-col>
                 #end
-                <i-col style="display: inline-grid;">
-                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
-                            :on-progress="uploadExcelProgress"
-                            :format="['xls','xlsx']"
-                            action="../goods/uploadByCover">
-                        <i-button type="ghost" icon="ios-cloud-upload-outline">商品导入(修改库存)</i-button>
-                    </Upload>
-                </i-col>
-                #if($shiro.hasPermission("goods:generalGoodsUpload"))
-                <i-col style="display: inline-grid;">
-                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
-                            :on-progress="uploadExcelProgress"
-                            :format="['xls','xlsx','zip']"
-                            action="../goods/generalGoodsUpload">
-                        <i-button type="ghost" icon="ios-cloud-upload-outline">普货商品导入</i-button>
-                    </Upload>
-                </i-col>
+<!--                <i-col style="display: inline-grid;">-->
+<!--                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"-->
+<!--                            :on-progress="uploadExcelProgress"-->
+<!--                            :format="['xls','xlsx']"-->
+<!--                            action="../goods/uploadByCover">-->
+<!--                        <i-button type="ghost" icon="ios-cloud-upload-outline">商品导入(修改库存)</i-button>-->
+<!--                    </Upload>-->
+<!--                </i-col>-->
+<!--                #if($shiro.hasPermission("goods:generalGoodsUpload"))-->
+<!--                <i-col style="display: inline-grid;">-->
+<!--                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"-->
+<!--                            :on-progress="uploadExcelProgress"-->
+<!--                            :format="['xls','xlsx','zip']"-->
+<!--                            action="../goods/generalGoodsUpload">-->
+<!--                        <i-button type="ghost" icon="ios-cloud-upload-outline">普货商品导入</i-button>-->
+<!--                    </Upload>-->
+<!--                </i-col>-->
                 <i-col style="display: inline-grid;">
                     <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
                             :on-progress="uploadExcelProgress"
@@ -193,7 +193,7 @@
                 #if($shiro.hasPermission("goods:down"))
                 &nbsp;&nbsp;&nbsp;&nbsp;
                 <a href="../statics/file/goods_export_yyyy_mm_dd_v1.0.0.xls">商品模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
-                <a href="../statics/file/general_goods_export_yyyy_mm_dd_v1.0.0.xls">普货商品模板下载</a>
+<!--                <a href="../statics/file/general_goods_export_yyyy_mm_dd_v1.0.0.xls">普货商品模板下载</a>-->
                 #end
             </div>
         </Row>
@@ -236,6 +236,21 @@
                         </i-option>
                     </i-select>
                 </Form-item>
+                <Form-item  label="商品类型" prop="categoryId" style="height: 30px;">
+                    <!--<i-input v-model="goods.categoryName" @on-click="categoryTree" icon="eye" readonly="readonly" placeholder="商品类型"/>-->
+                    <i-select v-model="goods.attributeCategory" placeholder="商品分类" @on-change="changeCategories"
+                              label-in-value style="width: 268px;height: 30px;">
+                        <i-option v-for="category in categories" :value="category.id"
+                                  :key="category.id">{{category.name}}
+                        </i-option>
+                    </i-select>
+                    <i-select v-model="goods.categoryId" placeholder="商品二级分类"
+                              label-in-value style="width: 268px;height: 30px;">
+                        <i-option v-for="category in categoriesTwo" :value="category.id"
+                                  :key="category.id">{{category.name}}
+                        </i-option>
+                    </i-select>
+                </Form-item>
                     <Form-item label="商品编码" prop="goodsSn">
                         <i-input v-model="goods.goodsSn" placeholder="商品编码"/>
                     </Form-item>
@@ -386,9 +401,16 @@
             </Tab-Pane>
             <Tab-Pane label="海关信息" name="name2">
                 <!--<i-form ref="formValidate" :model="goods" :rules="ruleValidate" :label-width="80">-->
-                    <Form-item label="产品品牌" prop="brand">
-                        <i-input v-model="goods.brand" placeholder="产品品牌"/>
-                    </Form-item>
+<!--                    <Form-item label="产品品牌" prop="brand">-->
+<!--                        <i-input v-model="goods.brand" placeholder="产品品牌"/>-->
+<!--                    </Form-item>-->
+                <Form-item  label="品牌" prop="brandId">
+                    <i-select v-model="goods.brandId" placeholder="品牌"
+                              label-in-value style="width: 268px;">
+                        <i-option v-for="brand in brands" :value="brand.id" :key="brand.id">{{brand.name}}
+                        </i-option>
+                    </i-select>
+                </Form-item>
                     <Form-item label="海关备案编号" prop="cusRecCode">
                         <i-input v-model="goods.cusRecCode" placeholder="海关备案编号"/>
                     </Form-item>

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

@@ -9,10 +9,13 @@
 	<div v-show="showList">
         <Row :gutter="16">
             <div class="search-group">
-                <i-col span="4">
+                <!--<i-col span="4">
                     <i-select v-model="q.goodsId" filterable placeholder="商品" label-in-value>
                         <i-option v-for="goods in goodss" :value="goods.id" :key="goods.id">{{goods.name}}</i-option>
                     </i-select>
+                </i-col>-->
+                <i-col span="3">
+                    <i-input v-model="q.goodsName" @on-enter="query" placeholder="商品名称"/>
                 </i-col>
                 <i-col span="4">
                     <i-select v-model="q.changeType" placeholder="库存变动类型"
@@ -96,4 +99,4 @@
 
 <script src="${rc.contextPath}/js/shop/mngchange.js?_${date.systemTime}"></script>
 </body>
-</html>
+</html>

+ 6 - 3
kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html

@@ -9,13 +9,16 @@
     <div v-show="showDiv == 1">
         <Row :gutter="16">
             <div class="search-group">
-                <i-col span="4">
+                <i-col span="3">
                     <i-input v-model="q.orderSn" @on-enter="query" placeholder="订单号"/>
                 </i-col>
-                <i-col span="4">
+                <i-col span="3">
                     <i-input v-model="q.goodsSn" @on-enter="query" placeholder="sku"/>
                 </i-col>
-                <i-col span="4">
+                <i-col span="3">
+                    <i-input v-model="q.storeName" @on-enter="query" placeholder="门店名称"/>
+                </i-col>
+                <i-col span="3">
                     <i-select v-model="q.orderStatus" placeholder="订单状态">
                         <i-option value="0">待付款</i-option>
                         <i-option value="101">订单已取消</i-option>

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

@@ -1,3 +1,4 @@
+
 <!DOCTYPE html>
 <html>
 <head>

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

@@ -16,10 +16,8 @@
                         </i-option>
                     </i-select>
                 </i-col>
-                <i-col span="4">
-                    <i-select v-model="q.goodsId" filterable placeholder="商品" label-in-value>
-                        <i-option v-for="goods in goodss" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}</i-option>
-                    </i-select>
+                <i-col span="3">
+                    <i-input v-model="q.goodsName" @on-enter="query" placeholder="商品名称"/>
                 </i-col>
                 <i-col span="4">
                     <i-select v-model="q.changeType" placeholder="库存变动类型"
@@ -103,4 +101,4 @@
 
 <script src="${rc.contextPath}/js/shop/storemngchange.js?_${date.systemTime}"></script>
 </body>
-</html>
+</html>

+ 6 - 6
kmall-admin/src/main/webapp/WEB-INF/page/sys/main.html

@@ -145,11 +145,11 @@
             <td>{{mhygws}}</td>
         </tr>
     </table>
-    <table class="table table-hover table-responsive table-bordered">
-        <tr>
-            <th>总点击数:{{hitCount}}; 每千点击订单数:{{average1000}}; 每千点击购物额:{{averageSales1000}}</th>
-        </tr>
-    </table>
+<!--    <table class="table table-hover table-responsive table-bordered">-->
+<!--        <tr>-->
+<!--            <th>总点击数:{{hitCount}}; 每千点击订单数:{{average1000}}; 每千点击购物额:{{averageSales1000}}</th>-->
+<!--        </tr>-->
+<!--    </table>-->
 </div>
 
 <script type="text/javascript">
@@ -374,4 +374,4 @@
     });
 </script>
 </body>
-</html>
+</html>

+ 2 - 1
kmall-admin/src/main/webapp/WEB-INF/page/sys/role.html

@@ -13,6 +13,7 @@
                     <i-input v-model="q.roleName" @on-enter="query" placeholder="角色名称"/>
                 </i-col>
                 <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
             </div>
             <div class="buttons-group">
                 #if($shiro.hasPermission("sys:role:save"))
@@ -69,4 +70,4 @@
 
 <script src="${rc.contextPath}/js/sys/role.js?_${date.systemTime}"></script>
 </body>
-</html>
+</html>

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sys/user.html

@@ -13,6 +13,7 @@
                     <i-input v-model="q.username" @on-enter="query" placeholder="用户名"/>
                 </i-col>
                 <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
             </div>
             <div class="buttons-group">
                 #if($shiro.hasPermission("sys:user:save"))

+ 5 - 2
kmall-admin/src/main/webapp/js/alarm/mall2lowpricewarning.js

@@ -63,7 +63,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -135,7 +135,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/alarm/mall2orderingearlywarningreminds.js

@@ -61,7 +61,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -133,7 +133,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/alarm/mall2reminderrulesconfig.js

@@ -79,7 +79,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -151,7 +151,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/alarm/mall2shippingreminderalarm.js

@@ -68,7 +68,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -140,7 +140,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/cashier/cashierLoginRecord.js

@@ -56,7 +56,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -128,7 +128,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/cashier/cashierManager.js

@@ -89,7 +89,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -166,7 +166,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'machineCode': vm.q.machineCode},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/cashier/salerecord.js

@@ -67,7 +67,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -139,7 +139,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 6 - 3
kmall-admin/src/main/webapp/js/compared/importpayorderrecord.js

@@ -54,7 +54,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -126,7 +126,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page
@@ -142,4 +145,4 @@ let vm = new Vue({
             handleResetForm(this, name);
         }
 	}
-});
+});

+ 6 - 3
kmall-admin/src/main/webapp/js/compared/importtaxorderrecord.js

@@ -54,7 +54,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -126,7 +126,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page
@@ -142,4 +145,4 @@ let vm = new Vue({
             handleResetForm(this, name);
         }
 	}
-});
+});

+ 5 - 2
kmall-admin/src/main/webapp/js/compared/ordercomparederror.js

@@ -51,7 +51,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		reduce:function(){
 
@@ -127,7 +127,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name,'createTime':vm.q.createTime},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/compared/taxcomparederror.js

@@ -53,7 +53,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -135,7 +135,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name , 'createTime':vm.q.createTime},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/faceid/type10ordernopay.js

@@ -218,7 +218,7 @@ var vm = new Vue({
     },
     methods: {
         query: function () {
-            vm.reload();
+            vm.reload(1);
         },
         sendWxTemp: function(rowId,thirdIsFaceCheck){
             if(thirdIsFaceCheck==1){
@@ -529,7 +529,10 @@ var vm = new Vue({
                 vm.mediaStream.stop();
             }
             vm.showList = 0;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {'orderSn': vm.q.orderSn},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mk2goodstopicprice.js

@@ -65,7 +65,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -137,7 +137,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'topicName': vm.q.topicName},
                 page: page

+ 6 - 3
kmall-admin/src/main/webapp/js/mk/mkactivities.js

@@ -58,7 +58,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -130,7 +130,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page
@@ -146,4 +149,4 @@ let vm = new Vue({
             handleResetForm(this, name);
         }
 	}
-});
+});

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiescombinationprice.js

@@ -80,7 +80,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -156,7 +156,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiescoupon.js

@@ -80,7 +80,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -157,7 +157,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiesdiscount.js

@@ -81,7 +81,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -158,7 +158,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiesfullgift.js

@@ -80,7 +80,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -157,7 +157,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiesfullreduction.js

@@ -84,7 +84,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -161,7 +161,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiesgetonefreegoods.js

@@ -88,7 +88,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -165,7 +165,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivitiespromotion.js

@@ -82,7 +82,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -159,7 +159,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkactivityform.js

@@ -212,7 +212,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
             vm.showViewList = false;
@@ -288,7 +288,10 @@ let vm = new Vue({
             vm.showList = true;
             vm.showViewList = true;
             vm.showMkactivitiesViewList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/mk/mkdailyactivities.js

@@ -81,7 +81,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -158,7 +158,10 @@ let vm = new Vue({
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page

+ 1 - 0
kmall-admin/src/main/webapp/js/receipt/receiptCheck.js

@@ -167,6 +167,7 @@ let vm = new Vue({
                 orderStatus: '',
                 orderType: ''
             };
+            vm.reload(1);
         },
         lookDetail: function (rowId) { //第三步:定义编辑操作
             vm.showDiv = 2;

+ 71 - 27
kmall-admin/src/main/webapp/js/sale/monthlyCustomers.js

@@ -152,7 +152,7 @@ function dFun(dateList, totalNumberList, totalSalesList,taotalCustomersList,avgB
         },
             {
             //折线
-            name: 'Average Basket Sale',
+            name: 'sales/customers',
             type: 'line',
             symbol: 'circle', // 折线点设置为实心点
             symbolSize: 6, // 折线点的大小
@@ -173,17 +173,43 @@ function dFun(dateList, totalNumberList, totalSalesList,taotalCustomersList,avgB
 }
 
 function queryMonthly(){
-    var startMonth = document.getElementById("startMonth").value;
-    var endMonth = document.getElementById("endMonth").value;
-    var startMonthDate = new Date(startMonth);
-    var endMonthDate = new Date(endMonth);
-    if(startMonthDate.getTime() > endMonthDate.getTime()){
-        alert("开始时间不能大于结束时间");
-        return;
+
+    var date = $('input[name="date"]:checked').val();
+
+    var startDate = "";
+    var endDate = "";
+    var dateFlag = "";
+
+    if(date == "month"){
+        var startMonth = document.getElementById("startMonth").value;
+        var endMonth = document.getElementById("endMonth").value;
+        var startMonthDate = new Date(startMonth);
+        var endMonthDate = new Date(endMonth);
+        if(startMonthDate.getTime() > endMonthDate.getTime()){
+            alert("开始时间不能大于结束时间");
+            return;
+        }
+        startDate = startMonth;
+        endDate = endMonth;
+        dateFlag = "month";
+    }else if (date == "day"){
+        var startDay = document.getElementById("startDay").value;
+        var endDay = document.getElementById("endDay").value;
+        var startDayDate = new Date(startDay);
+        var endDayDate = new Date(endDay);
+        if(startDayDate.getTime() > endDayDate.getTime()){
+            alert("开始时间不能大于结束时间");
+            return;
+        }
+        startDate = startDay;
+        endDate = endDay;
+        dateFlag = "day";
     }
+
     var param = {
-        startMonth:startMonth,
-        endMonth:endMonth
+        startDate:startDate,
+        endDate:endDate,
+        dateFlag:dateFlag
     };
     console.log(param);
     // 折线图
@@ -206,26 +232,44 @@ function queryMonthly(){
 }
 
 function exportMonthly(){
-    var startMonth = document.getElementById("startMonth").value;
-    var endMonth = document.getElementById("endMonth").value;
-    var startMonthDate = new Date(startMonth);
-    var endMonthDate = new Date(endMonth);
-    if(startMonthDate.getTime() > endMonthDate.getTime()){
-        alert("开始时间不能大于结束时间");
-        return;
+    var date = $('input[name="date"]:checked').val();
+
+    var startDate = "";
+    var endDate = "";
+    var dateFlag = "";
+
+    if(date == "month"){
+        var startMonth = document.getElementById("startMonth").value;
+        var endMonth = document.getElementById("endMonth").value;
+        var startMonthDate = new Date(startMonth);
+        var endMonthDate = new Date(endMonth);
+        if(startMonthDate.getTime() > endMonthDate.getTime()){
+            alert("开始时间不能大于结束时间");
+            return;
+        }
+        startDate = startMonth;
+        endDate = endMonth;
+        dateFlag = "month";
+    }else if (date == "day"){
+        var startDay = document.getElementById("startDay").value;
+        var endDay = document.getElementById("endDay").value;
+        var startDayDate = new Date(startDay);
+        var endDayDate = new Date(endDay);
+        if(startDayDate.getTime() > endDayDate.getTime()){
+            alert("开始时间不能大于结束时间");
+            return;
+        }
+        startDate = startDay;
+        endDate = endDay;
+        dateFlag = "day";
     }
+
     var params = {
-        startMonth:startMonth,
-        endMonth:endMonth
+        startDate:startDate,
+        endDate:endDate,
+        dateFlag:dateFlag
     };
-    if (startMonth==null || startMonth==undefined || startMonth==''){
-        alert("请输入开始时间");
-        return;
-    }
-    if (endMonth==null || endMonth==undefined || endMonth==''){
-        alert("请输入开始时间");
-        return;
-    }
+
     console.log(params);
     exportFile('#rrapp', '../monthly/monthlySalesGrowthExport2', params);
 

+ 1 - 2
kmall-admin/src/main/webapp/js/sale/realtimeSalesDetection.js

@@ -29,7 +29,6 @@ $(function () {
             {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},
@@ -58,7 +57,7 @@ $(function () {
         autowidth: true,
         shrinkToFit: false,
         autoScroll: true,   //开启水平滚动条
-        width: 1500,
+        width: 1800,
         multiselect: true,
         pager: "#jqGridPager",
         jsonReader: {

+ 24 - 6
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -796,8 +796,11 @@ let vm = new Vue({
 
         },
         clearGoodsList:function(){
-            this.goodsList = [];
-            vm.customClearData();
+            confirm('确认清空吗?', function () {
+                vm.goodsList = [];
+                vm.customClearData();
+                alert("清空成功");
+            })
 
         },
         pendingOrder:function(){
@@ -821,7 +824,8 @@ let vm = new Vue({
             vm.pendingOrderKeys.push(vm.pendingIndex);
             var newIndex = ++vm.pendingIndex;
             vm.pendingIndex = newIndex > 3?1: newIndex;
-            vm.clearGoodsList();
+            vm.goodsList = [];
+            vm.customClearData();
         },
         toResumePending:function(){
             if(vm.pendingOrderMap.size == 0){
@@ -1054,6 +1058,20 @@ let vm = new Vue({
                 });
             })
         },
+        resendOrder:function(){
+            confirm('确认重发电子订单吗?', function () {
+                $.get("../order/resendOrderToCCNET/"+vm.orderEntity.orderSn+"/clsOrder", function (r) {
+                    alert(r.msg);
+                });
+            })
+        },
+        forceSendToOms:function(){
+            confirm('确认强制推送清关吗?', function () {
+                $.get("../order/resendOrderToCCNET/"+vm.orderEntity.orderSn+"/forceSend", function (r) {
+                    alert(r.msg);
+                });
+            })
+        },
         verification:function(){
 
             if(vm.orderProcessRecord.isCustomsSend != 1){
@@ -1236,8 +1254,8 @@ function openWebSocket() {
         //注意ws、wss使用不同的端口。我使用自签名的证书测试,
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
-        // webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
-        webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
+        webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
+        // webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
         // webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+163);
         // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
@@ -1262,7 +1280,7 @@ function openWebSocket() {
             vm.pickUpCodeList = [];
             if(data.pickUpCodeList.length > 0){
                 for(var i = 0 ; i < data.pickUpCodeList.length ; i++){
-                    console.log(data.pickUpCodeList[i].storeId);
+                    // console.log(data.pickUpCodeList[i].storeId);
                     if(data.pickUpCodeList[i].storeId === storeId){
                         vm.pickUpCodeList.push(data.pickUpCodeList[i]);
                     }

+ 34 - 12
kmall-admin/src/main/webapp/js/sale/top10ForProduct.js

@@ -6,6 +6,7 @@ var myChart;
 // 基于准备好的dom,初始化echarts实例
 var dChart = echarts.init(document.getElementById('main3'));
 // 指定图表的配置项和数据
+
 function dFun(productNameList,salesList) {
     dChart.setOption({
         title: {
@@ -26,21 +27,39 @@ function dFun(productNameList,salesList) {
             bottom: '3%',
             containLabel: true
         },
+        dataZoom: [                   //Y轴滑动条
+            {
+                type: 'slider', //滑动条
+                show: true,      //开启
+                yAxisIndex: [0],
+                left: '93%',  //滑动条位置
+                start: 1,    //初始化时,滑动条宽度开始标度
+                end: 50      //初始化时,滑动条宽度结束标度<br>
+            },
+            {
+                type: 'inside',  //内置滑动,随鼠标滚轮展示
+                yAxisIndex: [0],
+                start: 1,//初始化时,滑动条宽度开始标度<br>
+                end: 50  //初始化时,滑动条宽度结束标度
+            }
+        ],
         xAxis: {
             type: 'value',
             name: '数量',
         },
         yAxis: {
             type: 'category',
-            data: productNameList
+            data: productNameList,
+
         },
+
         series: [
             {
-                name: '2011年',
+                name: productNameList,
                 type: 'bar',
                 data: salesList,
-                label:seriesLabel,
-                barWidth:30,
+                // label:seriesLabel,
+                barWidth:20,
             }]
 
     });
@@ -49,19 +68,22 @@ var seriesLabel = {
     normal: {
         show: true,
         textBorderColor: '#333',
-        textBorderWidth: 2
+        textBorderWidth: 1
     }
 }
-
+function clearDate(){
+    $("#month").val("");
+    $("#week").val("");
+}
 function queryMonthly(){
     var month = document.getElementById("month").value;
     var week = document.getElementById("week").value;
-    var startMonthDate = new Date(month);
-    var endWeekDate = new Date(week);
-    if(startMonthDate.getTime() > endWeekDate.getTime()){
-        alert("开始时间不能大于结束时间");
-        return;
-    }
+    // var startMonthDate = new Date(month);
+    // var endWeekDate = new Date(week);
+    // if(startMonthDate.getTime() > endWeekDate.getTime()){
+    //     alert("开始时间不能大于结束时间");
+    //     return;
+    // }
     var param = {
         month:month,
         week:week

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

@@ -88,7 +88,7 @@ var vm = new Vue({
     },
     methods: {
         query: function () {
-            vm.reload();
+            vm.reload(1);
         },
         add: function () {
             vm.showList = false;
@@ -180,7 +180,10 @@ var vm = new Vue({
         },
         reload: function (event) {
             vm.showList = true;
-            var page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name, 'categoryName': vm.q.categoryName},
                 page: page

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

@@ -59,7 +59,7 @@ var vm = new Vue({
     },
     methods: {
         query: function () {
-            vm.reload();
+            vm.reload(1);
         },
         add: function () {
             vm.showList = false;
@@ -136,7 +136,10 @@ var vm = new Vue({
         },
         reload: function (event) {
             vm.showList = true;
-            var page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 page: page
@@ -159,4 +162,4 @@ var vm = new Vue({
             handleResetForm(this, name);
         }
     }
-});
+});

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません