Ver Fonte

1.修改品牌逻辑
2.修改分类逻辑
3.新增转移单逻辑

zcb há 4 anos atrás
pai
commit
c0427ef7fd
97 ficheiros alterados com 2126 adições e 473 exclusões
  1. 24 8
      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. 107 0
      kmall-admin/src/main/java/com/kmall/admin/controller/kmall2oms/KtoOmsController.java
  4. 61 0
      kmall-admin/src/main/java/com/kmall/admin/controller/oms2kmall/Oms2KmallController.java
  5. 2 1
      kmall-admin/src/main/java/com/kmall/admin/controller/shop/ShopErrorPriceRecordController.java
  6. 1 0
      kmall-admin/src/main/java/com/kmall/admin/dao/CategoryDao.java
  7. 4 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  8. 29 0
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDto.java
  9. 9 0
      kmall-admin/src/main/java/com/kmall/admin/dto/StoreGoodsDto.java
  10. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/BrandService.java
  11. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/CategoryService.java
  12. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  13. 53 19
      kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java
  14. 28 17
      kmall-admin/src/main/java/com/kmall/admin/service/impl/CategoryServiceImpl.java
  15. 207 59
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  16. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  17. 220 28
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  18. 58 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/oms2kmall/Oms2KmallServiceImpl.java
  19. 13 0
      kmall-admin/src/main/java/com/kmall/admin/service/kmall2oms/KtoOmsService.java
  20. 15 0
      kmall-admin/src/main/java/com/kmall/admin/service/oms2kmall/Oms2KmallService.java
  21. 69 0
      kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonStringUnicodeSerializer.java
  22. 270 0
      kmall-admin/src/main/java/com/kmall/admin/utils/jackson/JacksonUtil.java
  23. 103 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/response/TransferResponse.java
  24. 150 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/Result.java
  25. 36 0
      kmall-admin/src/main/java/com/kmall/admin/utils/oms/result/ResultCodeEnum.java
  26. 10 7
      kmall-admin/src/main/resources/XmlTemplate/GoodsDtoList.xml
  27. 4 3
      kmall-admin/src/main/resources/XmlTemplate/StoreGoodsDtoList.xml
  28. 41 41
      kmall-admin/src/main/resources/conf/fastdfs.properties
  29. 5 12
      kmall-admin/src/main/resources/mybatis/mapper/BrandDao.xml
  30. 28 24
      kmall-admin/src/main/resources/mybatis/mapper/CategoryDao.xml
  31. 17 4
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  32. 6 0
      kmall-admin/src/main/resources/mybatis/mapper/MngChangeDao.xml
  33. 32 12
      kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
  34. 30 9
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  35. 14 8
      kmall-admin/src/main/resources/mybatis/mapper/StoreMngChangeDao.xml
  36. 1 1
      kmall-admin/src/main/resources/mybatis/mapper/statistics/MonthlyCustomersDao.xml
  37. 3 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/brand.html
  38. 3 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html
  39. 43 21
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  40. 5 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/mngchange.html
  41. 6 3
      kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html
  42. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/shoperrorpricerecord.html
  43. 3 5
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storemngchange.html
  44. 6 6
      kmall-admin/src/main/webapp/WEB-INF/page/sys/main.html
  45. 2 1
      kmall-admin/src/main/webapp/WEB-INF/page/sys/role.html
  46. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/sys/user.html
  47. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2lowpricewarning.js
  48. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2orderingearlywarningreminds.js
  49. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2reminderrulesconfig.js
  50. 5 2
      kmall-admin/src/main/webapp/js/alarm/mall2shippingreminderalarm.js
  51. 5 2
      kmall-admin/src/main/webapp/js/cashier/cashierLoginRecord.js
  52. 5 2
      kmall-admin/src/main/webapp/js/cashier/cashierManager.js
  53. 5 2
      kmall-admin/src/main/webapp/js/cashier/salerecord.js
  54. 6 3
      kmall-admin/src/main/webapp/js/compared/importpayorderrecord.js
  55. 6 3
      kmall-admin/src/main/webapp/js/compared/importtaxorderrecord.js
  56. 5 2
      kmall-admin/src/main/webapp/js/compared/ordercomparederror.js
  57. 5 2
      kmall-admin/src/main/webapp/js/compared/taxcomparederror.js
  58. 5 2
      kmall-admin/src/main/webapp/js/faceid/type10ordernopay.js
  59. 5 2
      kmall-admin/src/main/webapp/js/mk/mk2goodstopicprice.js
  60. 6 3
      kmall-admin/src/main/webapp/js/mk/mkactivities.js
  61. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiescombinationprice.js
  62. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiescoupon.js
  63. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesdiscount.js
  64. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesfullgift.js
  65. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesfullreduction.js
  66. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiesgetonefreegoods.js
  67. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivitiespromotion.js
  68. 5 2
      kmall-admin/src/main/webapp/js/mk/mkactivityform.js
  69. 5 2
      kmall-admin/src/main/webapp/js/mk/mkdailyactivities.js
  70. 1 0
      kmall-admin/src/main/webapp/js/receipt/receiptCheck.js
  71. 4 3
      kmall-admin/src/main/webapp/js/sale/sale.js
  72. 5 2
      kmall-admin/src/main/webapp/js/shop/attribute.js
  73. 6 3
      kmall-admin/src/main/webapp/js/shop/attributecategory.js
  74. 17 2
      kmall-admin/src/main/webapp/js/shop/brand.js
  75. 25 23
      kmall-admin/src/main/webapp/js/shop/category.js
  76. 28 4
      kmall-admin/src/main/webapp/js/shop/goods.js
  77. 10 5
      kmall-admin/src/main/webapp/js/shop/mngchange.js
  78. 8 3
      kmall-admin/src/main/webapp/js/shop/offilineOrderList.js
  79. 5 2
      kmall-admin/src/main/webapp/js/shop/shoperrorpricerecord.js
  80. 10 9
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js
  81. 11 6
      kmall-admin/src/main/webapp/js/shop/storemngchange.js
  82. 6 3
      kmall-admin/src/main/webapp/js/shop/supplier.js
  83. 10 1
      kmall-admin/src/main/webapp/js/sys/role.js
  84. 11 2
      kmall-admin/src/main/webapp/js/sys/user.js
  85. 5 2
      kmall-admin/src/main/webapp/js/vip/mall2memberconsumptionrecords.js
  86. 5 2
      kmall-admin/src/main/webapp/js/vip/mall2memberpoints.js
  87. 5 2
      kmall-admin/src/main/webapp/js/vip/mall2pointsrules.js
  88. BIN
      kmall-admin/src/main/webapp/statics/file/goods_export_yyyy_mm_dd_v1.0.0.xls
  89. BIN
      kmall-admin/src/main/webapp/statics/file/store_goods_export_yyyy_mm_dd_v1.0.0.xls
  90. 34 0
      kmall-common/src/main/java/com/kmall/common/constant/Dict.java
  91. 1 0
      kmall-manager/src/main/java/com/kmall/manager/manager/redis/JedisUtil.java
  92. 2 2
      kmall-manager/src/main/resources/conf/common.properties
  93. 33 31
      kmall-manager/src/main/resources/conf/db.properties
  94. 1 1
      kmall-manager/src/main/resources/conf/express-kdn.properties
  95. 1 1
      kmall-manager/src/main/resources/conf/express-sf.properties
  96. 18 18
      kmall-manager/src/main/resources/conf/oms-merch.properties
  97. 1 1
      kmall-manager/src/main/resources/conf/wx-mp.properties

+ 24 - 8
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");
 
         //查询列表数据
@@ -127,12 +127,17 @@ public class BrandController {
             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();
     }
@@ -154,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);
 
@@ -247,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("刷新成功!");
+    }
+
 }

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

@@ -0,0 +1,107 @@
+package com.kmall.admin.controller.kmall2oms;
+
+import com.alibaba.fastjson.JSON;
+import com.google.gson.Gson;
+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.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;
+
+
+    @RequestMapping("sendTransfer")
+    public R sendToTransferOrder(Integer transferId){
+
+        // 查询转移单记录与明细
+        // TODO queryById(transferId)
+        // TODO queryDetailByTransferId(transferId)
+        List detailList = new ArrayList<>();
+
+        Gson gson = new Gson();
+
+        Map<String, String> sParaTemp = new TreeMap<>();
+        // 构建request中的data数据
+        Map<String,String> dataParam = new HashMap<>();
+        dataParam.put("merchId","");
+        dataParam.put("merchName","");
+        dataParam.put("thirdPartyMerchCode","");
+        dataParam.put("thirdPartyMerchName","");
+        dataParam.put("merchTransDocSn","");
+        dataParam.put("rollOutShopId","");
+        dataParam.put("rollInShopId","");
+        dataParam.put("billTime","");
+        dataParam.put("item",gson.toJson(detailList));
+
+
+        sParaTemp.put("data",gson.toJson(dataParam));
+        sParaTemp.put("merchId",omsMerchProperties.getMerchSn());
+        String timestamp = String.valueOf(System.currentTimeMillis()/1000);
+        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);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return handleResult(responseString,gson);
+
+    }
+
+    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.getQueryInveResponseUrl();
+
+        return com.kmall.admin.utils.oms.OkHttpUtils.buildRequest(url, JSON.toJSONString(sParaTemp));
+    }
+
+
+}

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

@@ -0,0 +1,61 @@
+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);
     }
 

+ 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);
 }

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

@@ -87,4 +87,8 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
     void updatePriceBySku(@Param("updatePrice") String updatePrice, @Param("sku") String sku);
 
     List<ProductStoreRelaEntity> queryAllList(@Param("page") Integer page, @Param("pageSize") Integer pageSize);
+
+    void transferInGoods(@Param("shopSn") String shopSn, @Param("list") List list);
+
+    void transferOutGoods(@Param("shopSn") String shopSn, @Param("list") List list);
 }

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

+ 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();
 }

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

@@ -148,4 +148,6 @@ public interface ProductStoreRelaService {
      * @param pageSize
      */
     List<ProductStoreRelaEntity> queryAllList(Integer page, Integer pageSize);
+
+    void handleTransfer(String transferType, String wayBillResponse, List list);
 }

+ 53 - 19
kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java

@@ -11,6 +11,7 @@ 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;
@@ -61,7 +62,7 @@ public class BrandServiceImpl implements BrandService {
         String uniqueIdentifier = brand.getUniqueIdentifier();
         String regex = "(^[0-9a-zA-Z_&]{1,10}$)";
         if(!Pattern.matches(regex,uniqueIdentifier)){
-            throw new RuntimeException("请输入正确的品牌唯一简码");
+            throw new RuntimeException("请输入正确的品牌唯一简码,有问题的简码:"+uniqueIdentifier);
         }
 
         // 如果是正确的,根据唯一简码查询该简码是否存在
@@ -75,6 +76,20 @@ public class BrandServiceImpl implements BrandService {
 
     @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);
     }
 
@@ -224,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);
+        }
+
+    }
 }

+ 207 - 59
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -26,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;
@@ -902,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 {
@@ -912,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) {
@@ -1016,15 +999,14 @@ public class GoodsServiceImpl implements GoodsService {
                         goodsEntity.setGoodsNumber(goods.getGoodsNumber()+Integer.parseInt(goodsDto.getGoodsNumber()));
 
                         // TODO 这里改成批量修改 GoodsEntity
-//                        updateGoodsList.add(goodsEntity);
-                        goodsDao.update(goodsEntity);
+                        updateGoodsList.add(goodsEntity);
+//                        goodsDao.update(goodsEntity);
                     }else{
                         mngChangeEntity.setOriginalNum(0);//原库存数
                         mngChangeEntity.setValidNum(Integer.parseInt(goodsDto.getGoodsNumber()));//可用数
                         mngChangeEntity.setChangeNum(Integer.parseInt(goodsDto.getGoodsNumber()));//变化数
                         mngChangeEntity.setChangeType(Dict.changeType.item_2.getItem());
 
-                        // TODO 这里改成批量插入 GoodsEntity
 
                         goodsDao.save(goodsEntity);
                         insertGoodsList.add(goodsEntity);
@@ -1082,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());
@@ -1097,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);
 //            }
@@ -1126,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 ){
 
@@ -1296,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) {

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

@@ -2149,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);

+ 220 - 28
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -11,12 +11,14 @@ 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 com.kmall.manager.manager.redis.JedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,6 +50,8 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     @Autowired
     private BrandDao brandDao;
     @Autowired
+    private BrandService brandService;
+    @Autowired
     private FreightDao freightDao;
     @Autowired
     private CategoryDao categoryDao;
@@ -859,6 +863,21 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         return productStoreRelaDao.queryAllList(page,pageSize);
     }
 
+    @Override
+    public void handleTransfer(String transferType, String shopSn, List list) {
+
+
+        // 处理逻辑
+        if(Dict.transferType.in.getItem().equals(transferType)){
+            productStoreRelaDao.transferInGoods(shopSn,list);
+        }else if (Dict.transferType.out.getItem().equals(transferType)){
+            productStoreRelaDao.transferOutGoods(shopSn,list);
+        }
+
+
+
+    }
+
 
     @Override
     @Transactional
@@ -881,39 +900,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 +1095,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) {

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

@@ -0,0 +1,58 @@
+package com.kmall.admin.service.impl.oms2kmall;
+
+import com.kmall.admin.controller.oms2kmall.Oms2KmallController;
+import com.kmall.admin.service.ProductStoreRelaService;
+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;
+
+    // TODO 注入查询转移单
+    // TODO 注入查询转移单明细
+
+    @Transactional
+    public R transGoodsNotice(TransferResponse wayBillResponse){
+
+        try {
+            // 解析数据,回去转移订单号
+            String merchTransDocSn = wayBillResponse.getMerchTransDocSn();
+
+            // TODO 查询该转移单,是否处理过
+            // TODO 查询转移订单明细,开始转移门店的库存
+            List list = new ArrayList<>();
+            // 先转出
+            productStoreRelaService.handleTransfer(Dict.transferType.in.getItem(),wayBillResponse.getRollOutShopId(),list);
+            // 再转入
+            productStoreRelaService.handleTransfer(Dict.transferType.out.getItem(),wayBillResponse.getRollInShopId(),list);
+
+            return R.ok("处理成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error(e.getMessage());
+        }
+
+    }
+
+
+}

+ 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);
+
+}

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

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

@@ -0,0 +1,103 @@
+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 String 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 String getMerchTransDocSn() {
+        return merchTransDocSn;
+    }
+
+    public void setMerchTransDocSn(String 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;
+    }
+}

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

+ 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

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

@@ -132,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}
@@ -167,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}
@@ -180,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>
@@ -303,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},'%')

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

+ 17 - 4
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},
@@ -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,7 @@
         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>
@@ -874,6 +881,8 @@
         `name`,
         `unit_code`,
         `brand`,
+        `brand_id`,
+        `category_id`,
         `goods_number`,
         `keywords`,
         `goods_brief`,
@@ -939,6 +948,8 @@
         #{item.name},
         #{item.unitCode},
         #{item.brand},
+        #{item.brandId},
+        #{item.categoryId},
         #{item.goodsNumber},
         #{item.keywords},
         #{item.goodsBrief},
@@ -1011,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>

+ 32 - 12
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>
@@ -1794,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
@@ -1816,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">
@@ -1903,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>
@@ -2101,6 +2108,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>
 
@@ -2229,8 +2239,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
@@ -2241,6 +2249,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>
 
@@ -2280,6 +2291,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>
 
@@ -2293,6 +2307,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">
@@ -2305,6 +2322,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">

+ 30 - 9
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>
@@ -810,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,
@@ -830,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
@@ -851,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 != ''">
@@ -875,4 +870,30 @@
         </if>
     </select>
 
+    <update id="transferInGoods" >
+
+        <foreach collection="list" item="item" index="index" separator=";">
+            update mall_product_store_rela
+            <set>
+                stock_num = stock_num + #{item.shopNum,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.shopNum,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>

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

@@ -191,7 +191,7 @@
 			</if>
 		</where>
 		GROUP BY
-			cg.parent_id
+			cg.id
 
 		limit 20
 	</select>

+ 3 - 1
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
@@ -67,7 +69,7 @@
                 <i-input v-model="brand.name" placeholder="品牌名称"/>
             </Form-item>
             <Form-item label="品牌唯一简码" prop="uniqueIdentifier">
-                <i-input v-model="brand.uniqueIdentifier" placeholder="品牌唯一简码,限制只能为字母数字下划线"/>
+                <i-input v-model="brand.uniqueIdentifier" placeholder="品牌唯一简码,限制只能为字母数字下划线,长度不能超过10位"/>
             </Form-item>
             <Row>
                 <i-col span="16">

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

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

@@ -824,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){
@@ -1253,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) {

+ 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);
         }
     }
-});
+});

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

@@ -248,9 +248,16 @@ var vm = new Vue({
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
         },
-        query: function () {
+        reloadSearch: function () {
+            vm.q = {
+                name: '',
+                storeId: ''
+            }
             vm.reload();
         },
+        query: function () {
+            vm.reload(1);
+        },
         add: function () {
             vm.showList = false;
             vm.showCopyList = true;
@@ -362,7 +369,10 @@ var vm = new Vue({
             vm.showViewList = false;
             vm.showList = true;
             vm.showCopyList = 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, 'storeId': vm.q.storeId},
                 page: page
@@ -451,6 +461,11 @@ var vm = new Vue({
             exportFile('#rrapp', '../brand/export', params);
             setTimeout(msg, 1000);
         },
+        refreshCache:function(){
+            $.get("../brand/refreshBrandCache", function (r) {
+                return r.msg;
+            });
+        },
         uploadExcelSuccess: function (data) {
             // console.log(data);
             if (data.code == 0) {

+ 25 - 23
kmall-admin/src/main/webapp/js/shop/category.js

@@ -45,7 +45,7 @@ TreeGrid.initColumn = function () {
             return '-';
         }},
         {title: '分类名称', field: 'name', align: 'center', valign: 'middle', width: '60px'},
-        {title: '所属商户', field: 'merchName',  width: '100px', align: 'center'},
+        // {title: '所属商户', field: 'merchName',  width: '100px', align: 'center'},
         // {title: '所属门店', field: 'storeName', width: '80px', align: 'center'},
         {title: '描述', field: 'frontDesc', align: 'center', valign: 'middle', width: '150px'},
         {title: '首页排序', field: 'sortOrder', align: 'center', valign: 'middle', width: '50px'},
@@ -59,16 +59,17 @@ TreeGrid.initColumn = function () {
                 return transIsNot(item.show)
             }
         },
-        {title: '操作', width: '90px', align: 'center', valign: 'middle',
-            formatter: function (item, index) {
-                if(hasPermission('category:saveCopyCategory')) {
-                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
-                        "onclick='vm.copyCategory(" + item.id + ",\"" + item.level + "\")'>复制分类</button>";
-                }else {
-                    return '-'
-                }
-            }
-        }]
+        // {title: '操作', width: '90px', align: 'center', valign: 'middle',
+        //     formatter: function (item, index) {
+        //         if(hasPermission('category:saveCopyCategory')) {
+        //             return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+        //                 "onclick='vm.copyCategory(" + item.id + ",\"" + item.level + "\")'>复制分类</button>";
+        //         }else {
+        //             return '-'
+        //         }
+        //     }
+        // }
+        ]
     return columns;
 };
 
@@ -209,7 +210,8 @@ var vm = new Vue({
             // this.getParentCategory(vm.category.storeId);
             vm.storeList = [];
             vm.merchList = [];
-            vm.getMerchList();
+            // vm.getMerchList();
+            vm.getParentCategory(null,null);
         },
         update: function (event) {
             var id = TreeGrid.table.getSelectedRow();
@@ -225,8 +227,9 @@ var vm = new Vue({
             vm.storeList = [];
             vm.merchList = [];
             vm.getInfo(id[0].id);
-            vm.getMerchList();
-            vm.getStoresByMerch();
+            // vm.getMerchList();
+            // vm.getStoresByMerch();
+            vm.getParentCategory(null,null);
         },
         saveOrUpdate: function (event) {
             var url = vm.category.id == null ? "../category/save" : "../category/update";
@@ -273,6 +276,11 @@ var vm = new Vue({
                 });
             });
         },
+        refreshCache:function(){
+            $.get("../category/refreshCategoryCache", function (r) {
+                return r.msg;
+            });
+        },
         getInfo: function (id) {
             $.get("../category/info/" + id, function (r) {
                 vm.category = r.category;
@@ -296,15 +304,9 @@ var vm = new Vue({
             });
         },
         getParentCategory: function (storeId,merchSn) {
-            if(storeId){
-                $.get("../category/getCategorySelect?storeId="+storeId, function (r) {
-                    vm.categoryList = r.list;
-                });
-            }else{
-                $.get("../category/getCategorySelect?merchSn="+merchSn+"&parentId=0", function (r) {
-                    vm.categoryList = r.list;
-                });
-            }
+            $.get("../category/getCategorySelect?parentId=0", function (r) {
+                vm.categoryList = r.list;
+            });
 
         },
         getCategory: function (opt) {

+ 28 - 4
kmall-admin/src/main/webapp/js/shop/goods.js

@@ -168,12 +168,12 @@ var vm = new Vue({
         /*queryCategories: [],//一级分类
         queryCategoriesTwo: [],*/
         queryMerch: [],
-        /*categories: [],//一级分类
-        categoriesTwo: [],*/
+        categories: [],//一级分类
+        categoriesTwo: [],
         macros: [],//商品单位
         // attributeCategories: [],//属性类别
         specifications: [],
-        // brands: [],
+        brands: [],
         // freights: [],
         showInput: true,
         // categoryId: '',
@@ -242,6 +242,7 @@ var vm = new Vue({
                 isHot: 0, categoryName: '', retailPrice: '', marketPrice: '', goodsRate: '', sortOrder: '',goodsNumber: '' };
             $('#goodsDesc').editable('setHTML', '');
             vm.getCategory();
+            vm.getBrand();
             vm.macros = [];
             vm.brands = [];
             // vm.freights = [];
@@ -252,6 +253,7 @@ var vm = new Vue({
             vm.getCusUnitCodeList();
             vm.getCusNationCode();
             vm.getMerchList();
+            vm.getCategories();
             vm.showInput = true;
         },
         update: function (event) {
@@ -270,7 +272,8 @@ var vm = new Vue({
             opt.value = vm.goods.categoryId;
             opt.flag = 1;
             vm.getAttributes(opt);*/
-
+            vm.getCategories();
+            vm.getBrand();
             vm.thirdMerchantBizList = [];
             vm.getMacro();
             vm.getCusUnitCodeList();
@@ -293,6 +296,27 @@ var vm = new Vue({
                 vm.brands = r.list;
             });
         },*/
+        changeCategories: function (opt) {
+            var value = opt.value;
+            vm.brands = [];
+            if(value){
+                vm.getBrand(value);
+                $.get("../category/getCategorySelectByParent?isShow=1&parentId=" + value, function (r) {
+                    vm.categoriesTwo = r.list;
+                });
+            }
+        },
+        getCategories: function (storeId) {
+
+            $.get("../category/getCategorySelect?isShow=1&parentId=0", function (r) {
+                vm.categories = r.list;
+            });
+        },
+        getBrand: function () {
+            $.get("../brand/queryAll" , function (r) {
+                vm.brands = r.list;
+            });
+        },
         getSuppliers: function (thirdMerchantCode) {
             $.get("../supplier/queryAll?thirdPartyMerchCode=" + thirdMerchantCode, function (r) {
                 vm.suppliers = r.list;

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

@@ -88,6 +88,7 @@ let vm = new Vue({
 		},
 		q: {
             goodsId: '',
+            goodsName: '',
             changeType: ''
 		},
         goodss: [],
@@ -95,7 +96,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -162,15 +163,19 @@ let vm = new Vue({
         reloadSearch: function() {
             vm.q = {
                 goodsId: '',
-                changeType: ''
+                changeType: '',
+                goodsName:''
             }
             vm.reload();
 		},
 		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: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType},
+                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeTyp,'goodsName':vm.q.goodsName},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -198,4 +203,4 @@ let vm = new Vue({
         });
 
     }
-});
+});

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

@@ -22,9 +22,10 @@ $(function () {
         colModel: [
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
             {label: '订单号', name: 'orderSn', index: 'order_sn', align: 'center',width: 120},
-            {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
-            {label: '操作店员', name: 'userName', index: 'user_name', align: 'center',width: 80},
-            {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
+            {label: '门店名称', name: 'storeName', index: 'store_name', align: 'center',width: 120},
+            // {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
+            // {label: '操作店员', name: 'userName', index: 'user_name', align: 'center',width: 80},
+            // {label: '取货码', name: 'pickUpCodeSn', index: 'pick_up_code_sn', align: 'center',width: 80},
             {label: '购买人姓名', name: 'payName', index: 'payName', align: 'center',width: 150},
             {label: '购买人电话', name: 'mobile', index: 'mobile', align: 'center',width: 200},
             {
@@ -196,6 +197,7 @@ let vm = new Vue({
             endTime: '',
             goodsSn:'',
             billDate:'',
+            storeName:'',
         },
         refundMoney: 0,
         shipping: {},
@@ -254,6 +256,7 @@ let vm = new Vue({
                     'endTime': vm.q.endTime,
                     'goodsSn':vm.q.goodsSn,
                     'billDate':vm.q.billDate,
+                    'storeName':vm.q.storeName,
                 },
                 page: page
             }).trigger("reloadGrid");
@@ -491,6 +494,7 @@ let vm = new Vue({
             params.orderStatus=vm.q.orderStatus;
             params.startTime=vm.q.startTime;
             params.endTime=vm.q.endTime;
+            params.storeName=vm.q.storeName;
 
             /*if(!params.orderStatus){
                 alert("请选择订单状态");
@@ -528,6 +532,7 @@ let vm = new Vue({
             params.orderStatus=vm.q.orderStatus;
             params.startTime=vm.q.startTime;
             params.endTime=vm.q.endTime;
+            params.storeName=vm.q.storeName;
 
             if(!params.startTime || !params.endTime){
                 alert("请选择创建订单时间");

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

@@ -81,7 +81,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -214,7 +214,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

+ 10 - 9
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -24,7 +24,7 @@ $(function () {
             },
             {label: '商品编码', name: 'goodsSn', index: 'goodsSn', width: 180, align: 'center'},
             {label: '名称', name: 'goodsName', index: 'goodsName', width: 500, align: 'left'},
-            {label: '产品编码', name: 'productSn', index: 'productSn', width: 140, align: 'center'},
+            // {label: '产品编码', name: 'productSn', index: 'productSn', width: 140, align: 'center'},
             // {label: '批次编号', name: 'batchSn', index: 'batchSn', width: 220, align: 'center'},
             // {label: '批次到期日期', name: 'batchExpireDate', index: 'batchExpireDate', width: 160, align: 'center',formatter: function (value) {
             //         return transDate(value,'yyyy-MM-dd hh:mm:ss');
@@ -310,7 +310,7 @@ var vm = new Vue({
             vm.reload();
         },
         query: function () {
-            vm.reload();
+            vm.reload(1);
         },
         getThirdMerchantBizList: function() {
             $.get("../thirdmerchantbiz/queryAlls", function (r) {
@@ -564,6 +564,7 @@ var vm = new Vue({
                 vm.categories = [];
                 vm.categoriesTwo = [];
                 vm.getCategories(storeId);
+                vm.getBrand();
                 vm.getFreights(storeId);
             }
         },
@@ -579,15 +580,12 @@ var vm = new Vue({
         },
         getCategories: function (storeId) {
 
-            $.get("../category/getCategorySelect?isShow=1&parentId=0&merchSn=" + vm.merchSn, function (r) {
+            $.get("../category/getCategorySelect?isShow=1&parentId=0", function (r) {
                 vm.categories = r.list;
             });
-            // $.get("../category/getCategorySelect?isShow=1&storeId=" + storeId, function (r) {
-            //     vm.categories = r.list;
-            // });
         },
-        getBrand: function (categoryId) {
-            $.get("../brand/queryAll?categoryId=" + categoryId, function (r) {
+        getBrand: function () {
+            $.get("../brand/queryAll", function (r) {
                 vm.brands = r.list;
             });
         },
@@ -672,7 +670,10 @@ var vm = new Vue({
             vm.showList = false;
             vm.showViewList = true;
             vm.showSaveSupplierGoods = true;
-            var page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            let page = event;
+            if (event != 1) {
+                page = $("#jqGrid").jqGrid('getGridParam', 'page');
+            }
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {
                     storeId: vm.q.storeId,

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

@@ -88,7 +88,8 @@ let vm = new Vue({
 		q: {
             goodsId: '',
             changeType: '',
-            storeId: ''
+            storeId: '',
+            goodsName:''
 		},
         goodss: [],
         stores: [],
@@ -96,7 +97,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -172,15 +173,19 @@ let vm = new Vue({
             vm.q = {
                 goodsId: '',
                 changeType: '',
-                storeId: ''
+                storeId: '',
+                goodsName:''
             }
             vm.reload();
 		},
 		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: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType,'storeId':vm.q.storeId},
+                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType,'storeId':vm.q.storeId,'goodsName':vm.q.goodsName},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -208,4 +213,4 @@ let vm = new Vue({
         });
 
     }
-});
+});

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

@@ -66,7 +66,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
@@ -173,4 +176,4 @@ let vm = new Vue({
             handleResetForm(this, name);
         }
 	}
-});
+});

+ 10 - 1
kmall-admin/src/main/webapp/js/sys/role.js

@@ -268,7 +268,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: {'roleName': vm.q.roleName},
                 page: page
@@ -282,6 +285,12 @@ var vm = new Vue({
         },
         handleReset: function (name) {
             handleResetForm(this, name);
+        },
+        reloadSearch:function(){
+            vm.q = {
+                roleName: null
+            }
+            vm.reload(1);
         }
     }
 });

+ 11 - 2
kmall-admin/src/main/webapp/js/sys/user.js

@@ -143,7 +143,7 @@ var vm = new Vue({
     },
     methods: {
         query: function () {
-            vm.reload();
+            vm.reload(1);
         },
         add: function () {
             vm.showList = false;
@@ -312,7 +312,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: {'username': vm.q.username},
                 page: page
@@ -366,6 +369,12 @@ var vm = new Vue({
                 title: '文件格式不正确',
                 desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
             });
+        },
+        reloadSearch:function(){
+            vm.q = {
+                username: null
+            }
+            vm.reload(1);
         }
     }
 });

+ 5 - 2
kmall-admin/src/main/webapp/js/vip/mall2memberconsumptionrecords.js

@@ -68,7 +68,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -141,7 +141,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: {'userId': vm.q.userId,'orderSn':vm.q.orderSn},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/vip/mall2memberpoints.js

@@ -57,7 +57,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -129,7 +129,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: {'userId': vm.q.userId},
                 page: page

+ 5 - 2
kmall-admin/src/main/webapp/js/vip/mall2pointsrules.js

@@ -52,7 +52,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -124,7 +124,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

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


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


+ 34 - 0
kmall-common/src/main/java/com/kmall/common/constant/Dict.java

@@ -1693,4 +1693,38 @@ public class Dict {
             this.itemName = itemName;
         }
     }
+
+    /**
+     * 转移类型
+     */
+    public enum transferType {
+        in("in", "转入"),
+        out("out", "转出");
+
+        private String item;
+        private String itemName;
+
+        transferType(String item, String itemName) {
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+
+
 }

+ 1 - 0
kmall-manager/src/main/java/com/kmall/manager/manager/redis/JedisUtil.java

@@ -117,6 +117,7 @@ public class JedisUtil implements Serializable {
         try {
             jedis = getResource();
             result = jedis.set(key, value);
+
             if (cacheSeconds != 0) {
                 jedis.expire(key, cacheSeconds);
             }

+ 2 - 2
kmall-manager/src/main/resources/conf/common.properties

@@ -2,11 +2,11 @@
 
 
 #\u4E2D\u7F51cw apikey
-yunpian.sms.apikey=1dd75986321871d706334e60b89c4021
+#yunpian.sms.apikey=1dd75986321871d706334e60b89c4021
 #\u524D\u6D77\u7535\u5546apikey
 #yunpian.sms.apikey=3084e52ffff6adb96a67995b43edfb93
 #\u751F\u4EA7apikey
-#yunpian.sms.apikey=6968bd2d54ceaba25d6211301831059f
+yunpian.sms.apikey=6968bd2d54ceaba25d6211301831059f
 
 #url
 yunpian.sms.url=https://sms.yunpian.com/v2/sms/single_send.json

+ 33 - 31
kmall-manager/src/main/resources/conf/db.properties

@@ -1,35 +1,9 @@
 ########## \u6570\u636E\u5E93\u914D\u7F6E ##########
 
 #========== \u5F00\u53D1\u73AF\u5883 ==========
-jdbc.url=jdbc:mysql://120.76.84.45:3306/kmall_pt_general?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
-jdbc.username=tuser
-jdbc.password=Qq!123
-#jdbc.url=jdbc:mysql://127.0.0.1:3306/kmall_pt?serverTimezone=GMT%2B8&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
-#jdbc.username=root
-#jdbc.password=root
-
-jdbc.initialSize=5
-jdbc.maxActive=30
-
-jdbc.minPoolSize=2+
-jdbc.maxIdleTime=30000
-jdbc.idleConnectionTestPeriod=100
-
-#---------- for hikari
-jdbc.driver=com.mysql.jdbc.Driver
-#jdbc.driver=org.mariadb.jdbc.Driver
-jdbc.idleTimeout=400000
-jdbc.maxLifetime=500000
-jdbc.connectionTimeout=5000
-jdbc.maximumPoolSize=5
-jdbc.validationTimeout=4000
-
-
-
-####========== \u751F\u4EA7\u73AF\u5883 ==========
-#\u963F\u91CC\u4E91\u5185\u7F51\u5730\u5740
-##jdbc.url=jdbc:mysql://rm-wz9rps8173a1nx63g819.mysql.rds.aliyuncs.com:3306/kmall_pt?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
-#\u963F\u91CC\u4E91\u5916\u7F51\u5730\u5740
+#jdbc.url=jdbc:mysql://120.76.84.45:3306/kmall_pt_general?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
+#jdbc.username=tuser
+#jdbc.password=Qq!123
 #jdbc.url=jdbc:mysql://out-rm-wz9rps8173a1nx63gio.mysql.rds.aliyuncs.com:3306/kmall_cw?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
 #jdbc.username=kmall_cw
 #jdbc.password=eb6zHJg%x3
@@ -37,12 +11,13 @@ jdbc.validationTimeout=4000
 #jdbc.initialSize=5
 #jdbc.maxActive=30
 #
-#jdbc.minPoolSize=2
+#jdbc.minPoolSize=2+
 #jdbc.maxIdleTime=30000
 #jdbc.idleConnectionTestPeriod=100
 #
 ##---------- for hikari
-#jdbc.driver=org.mariadb.jdbc.Driver
+#jdbc.driver=com.mysql.jdbc.Driver
+##jdbc.driver=org.mariadb.jdbc.Driver
 #jdbc.idleTimeout=400000
 #jdbc.maxLifetime=500000
 #jdbc.connectionTimeout=5000
@@ -50,6 +25,33 @@ jdbc.validationTimeout=4000
 #jdbc.validationTimeout=4000
 
 
+
+####========== \u751F\u4EA7\u73AF\u5883 ==========
+#\u963F\u91CC\u4E91\u5185\u7F51\u5730\u5740
+##jdbc.url=jdbc:mysql://rm-wz9rps8173a1nx63g819.mysql.rds.aliyuncs.com:3306/kmall_pt?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
+##\u963F\u91CC\u4E91\u5916\u7F51\u5730\u5740
+jdbc.url=jdbc:mysql://out-rm-wz9rps8173a1nx63gio.mysql.rds.aliyuncs.com:3306/kmall_cw?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
+# \u65B0\u963F\u91CC\u4E91\u5916\u7F51\u5730\u5740
+#jdbc.url=jdbc:mysql://out-rm-wz92efl25x02n44xego.mysql.rds.aliyuncs.com:3306/kmall_cw?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
+jdbc.username=kmall_cw
+jdbc.password=eb6zHJg%x3
+
+jdbc.initialSize=5
+jdbc.maxActive=30
+
+jdbc.minPoolSize=2
+jdbc.maxIdleTime=30000
+jdbc.idleConnectionTestPeriod=100
+
+#---------- for hikari
+jdbc.driver=org.mariadb.jdbc.Driver
+jdbc.idleTimeout=400000
+jdbc.maxLifetime=500000
+jdbc.connectionTimeout=5000
+jdbc.maximumPoolSize=5
+jdbc.validationTimeout=4000
+
+
 ###========== \u4E2D\u7F51\u56FD\u9645\u6570\u636E\u5E93\u5F00\u53D1\u73AF\u5883 ==========
 #jdbc.url=jdbc:mysql://120.76.84.45:3306/kmall_pt_global?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
 #jdbc.username=tuser

+ 1 - 1
kmall-manager/src/main/resources/conf/express-kdn.properties

@@ -1,7 +1,7 @@
 ########## \u5FEB\u9012-\u5FEB\u9012\u9E1F\u914D\u7F6E ##########
 
 # [dev, prod]
-express.kdn.env=dev
+express.kdn.env=prod
 
 #========== \u5F00\u53D1\u73AF\u5883 ==========
 #\u7535\u5546ID

+ 1 - 1
kmall-manager/src/main/resources/conf/express-sf.properties

@@ -1,7 +1,7 @@
 ########## \u5FEB\u9012-sf\u914D\u7F6E ##########
 
 # [dev, prod]
-express.sf.env=dev
+express.sf.env=prod
 
 #========== \u5F00\u53D1\u73AF\u5883 ==========
 #\u8D26\u53F7

+ 18 - 18
kmall-manager/src/main/resources/conf/oms-merch.properties

@@ -11,30 +11,30 @@ merch.thirdSn=CW001
 #\u67E5\u8BE2\u8BA2\u5355\u5730\u5740
 merch.queryOrderUrl=http://ws.ds-bay.com/al/shop/order/query
 merch.queryInveResponseUrl=http://ws.ds-bay.com/al/queryInveResponse
+#ccnet\u751F\u4EA7\u73AF\u5883\u67E5\u8BE2\u652F\u4ED8\u5355\u3001\u7535\u5B50\u8BA2\u5355\u3001\u8FD0\u5355\u5931\u8D25\u8BA2\u5355\u63A5\u53E3
+merch.wxOrderResendUrl=http://8.135.102.238:8680/wx/wxOrderResendQueryAll
 
 
 
-
-#ccnet\u751F\u4EA7\u73AF\u5883\u67E5\u8BE2\u652F\u4ED8\u5355\u3001\u7535\u5B50\u8BA2\u5355\u3001\u8FD0\u5355\u5931\u8D25\u8BA2\u5355\u63A5\u53E3
-merch.wxOrderResendUrl=http://8.135.102.238:8680/wx/wxOrderResendQueryAll
-oms\u6D4B\u8BD5\u73AF\u5883\u5BC6\u94A5
-merch.md5Salt=IxyIvP0sJqlUZinx
-#oms\u6D4B\u8BD5\u73AF\u5883\u6D3B\u4F53\u4EBA\u8138\u6838\u8EAB\u63A5\u53E3
-merch.livenessRecognitionUrl=http://127.0.0.1:8680/al/faceid/livenessRecognition
-#oms\u6D4B\u8BD5\u73AF\u5883\u8DE8\u5883\u989D\u5EA6\u67E5\u8BE2\u63A5\u53E3
-merch.quotaInquiryUrl=http://127.0.0.1:8680/al/cus/yearLimit
-\u7533\u8BF7\u4EA7\u54C1\u5907\u6848\u63A5\u53E3(\u672C\u5730\u6D4B\u8BD5)
-merch.addPdProductListUrl=http://127.0.0.1:8680/al/product/addPdProductList
+#oms\u6D4B\u8BD5\u73AF\u5883\u5BC6\u94A5
+#merch.md5Salt=IxyIvP0sJqlUZinx
+##oms\u6D4B\u8BD5\u73AF\u5883\u6D3B\u4F53\u4EBA\u8138\u6838\u8EAB\u63A5\u53E3
+#merch.livenessRecognitionUrl=http://127.0.0.1:8680/al/faceid/livenessRecognition
+##oms\u6D4B\u8BD5\u73AF\u5883\u8DE8\u5883\u989D\u5EA6\u67E5\u8BE2\u63A5\u53E3
+#merch.quotaInquiryUrl=http://127.0.0.1:8680/al/cus/yearLimit
+#\u7533\u8BF7\u4EA7\u54C1\u5907\u6848\u63A5\u53E3(\u672C\u5730\u6D4B\u8BD5)
+#merch.addPdProductListUrl=http://127.0.0.1:8680/al/product/addPdProductList
 
 
 ####oms\u751F\u4EA7\u73AF\u5883\u5BC6\u94A5
-#merch.md5Salt=IxyIvP0sJqlUZinx
-###oms\u751F\u4EA7\u73AF\u5883\u6D3B\u4F53\u4EBA\u8138\u6838\u8EAB\u63A5\u53E3
-#merch.livenessRecognitionUrl=http://ws.ds-bay.com/al/faceid/livenessRecognition
-###oms\u6D4B\u8BD5\u73AF\u5883\u8DE8\u5883\u989D\u5EA6\u67E5\u8BE2\u63A5\u53E3
-#merch.quotaInquiryUrl=http://ws.ds-bay.com/al/cus/yearLimit
-##\u7533\u8BF7\u4EA7\u54C1\u5907\u6848\u63A5\u53E3
-#merch.addPdProductListUrl=http://ws.ds-bay.com/al/product/addPdProductList
+merch.md5Salt=IxyIvP0sJqlUZinx
+##oms\u751F\u4EA7\u73AF\u5883\u6D3B\u4F53\u4EBA\u8138\u6838\u8EAB\u63A5\u53E3
+merch.livenessRecognitionUrl=http://ws.ds-bay.com/al/faceid/livenessRecognition
+##oms\u6D4B\u8BD5\u73AF\u5883\u8DE8\u5883\u989D\u5EA6\u67E5\u8BE2\u63A5\u53E3
+merch.quotaInquiryUrl=http://ws.ds-bay.com/al/cus/yearLimit
+#\u7533\u8BF7\u4EA7\u54C1\u5907\u6848\u63A5\u53E3
+merch.addPdProductListUrl=http://ws.ds-bay.com/al/product/addPdProductList
+
 
 
 

+ 1 - 1
kmall-manager/src/main/resources/conf/wx-mp.properties

@@ -1,7 +1,7 @@
 ########## \u5FAE\u4FE1\u5C0F\u7A0B\u5E8F\u914D\u7F6E ##########
 
 # [dev, prod]
-pay.wx.env=dev
+pay.wx.env=prod
 
 
 #========== \u5F00\u53D1\u73AF\u5883 ==========