瀏覽代碼

新增门店、管理员、门店商品批量上传,分类、品牌、广告、运费复制功能,以及推单失败的订单查询。以及小程序前端修改不强制登录代码逻辑,以及后台代码相关修改

hyq 5 年之前
父節點
當前提交
347f961ca9
共有 100 個文件被更改,包括 4285 次插入225 次删除
  1. 0 1
      README.md
  2. 10 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AdController.java
  3. 13 1
      kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java
  4. 18 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CategoryController.java
  5. 11 0
      kmall-admin/src/main/java/com/kmall/admin/controller/FreightController.java
  6. 2 2
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java
  7. 16 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  8. 2 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductController.java
  9. 30 5
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  10. 69 19
      kmall-admin/src/main/java/com/kmall/admin/controller/StoreController.java
  11. 1 0
      kmall-admin/src/main/java/com/kmall/admin/dao/BrandDao.java
  12. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/FreightDao.java
  13. 1 0
      kmall-admin/src/main/java/com/kmall/admin/dao/FreightItemDao.java
  14. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  15. 4 1
      kmall-admin/src/main/java/com/kmall/admin/dao/StoreDao.java
  16. 30 0
      kmall-admin/src/main/java/com/kmall/admin/dto/CateStoreDto.java
  17. 30 0
      kmall-admin/src/main/java/com/kmall/admin/dto/CopyAdDto.java
  18. 39 0
      kmall-admin/src/main/java/com/kmall/admin/dto/CopyBrandDto.java
  19. 39 0
      kmall-admin/src/main/java/com/kmall/admin/dto/CopyCategoryDto.java
  20. 30 0
      kmall-admin/src/main/java/com/kmall/admin/dto/CopyFreightDto.java
  21. 113 0
      kmall-admin/src/main/java/com/kmall/admin/dto/StoreDto.java
  22. 122 0
      kmall-admin/src/main/java/com/kmall/admin/dto/StoreGoodsDto.java
  23. 21 0
      kmall-admin/src/main/java/com/kmall/admin/dto/StoreIdDto.java
  24. 83 0
      kmall-admin/src/main/java/com/kmall/admin/dto/SysUserDto.java
  25. 20 0
      kmall-admin/src/main/java/com/kmall/admin/entity/AdEntity.java
  26. 10 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java
  27. 735 0
      kmall-admin/src/main/java/com/kmall/admin/entity/WxOrderEntity.java
  28. 33 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysUserController.java
  29. 111 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/UploadStoreIdController.java
  30. 3 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/dao/SysRoleDao.java
  31. 2 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/dao/SysSmsLogDao.java
  32. 2 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/SysRoleService.java
  33. 9 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/SysUserService.java
  34. 5 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/impl/SysRoleServiceImpl.java
  35. 5 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/impl/SysSmsLogServiceImpl.java
  36. 183 4
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/impl/SysUserServiceImpl.java
  37. 3 0
      kmall-admin/src/main/java/com/kmall/admin/service/AdService.java
  38. 7 0
      kmall-admin/src/main/java/com/kmall/admin/service/BrandService.java
  39. 6 0
      kmall-admin/src/main/java/com/kmall/admin/service/CategoryService.java
  40. 3 0
      kmall-admin/src/main/java/com/kmall/admin/service/FreightService.java
  41. 3 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java
  42. 9 0
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  43. 14 0
      kmall-admin/src/main/java/com/kmall/admin/service/StoreService.java
  44. 40 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/AdServiceImpl.java
  45. 111 7
      kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java
  46. 148 1
      kmall-admin/src/main/java/com/kmall/admin/service/impl/CategoryServiceImpl.java
  47. 64 16
      kmall-admin/src/main/java/com/kmall/admin/service/impl/FreightServiceImpl.java
  48. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  49. 15 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  50. 302 16
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  51. 155 5
      kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreServiceImpl.java
  52. 38 0
      kmall-admin/src/main/java/com/kmall/admin/utils/ResponseData.java
  53. 20 0
      kmall-admin/src/main/java/com/kmall/admin/utils/ResponseDataRows.java
  54. 18 0
      kmall-admin/src/main/resources/XmlTemplate/CateStoreDtoList.xml
  55. 27 0
      kmall-admin/src/main/resources/XmlTemplate/StoreDtoList.xml
  56. 27 0
      kmall-admin/src/main/resources/XmlTemplate/StoreGoodsDtoList.xml
  57. 17 0
      kmall-admin/src/main/resources/XmlTemplate/StoreIdDtoList.xml
  58. 24 0
      kmall-admin/src/main/resources/XmlTemplate/SysUserDtoList.xml
  59. 4 2
      kmall-admin/src/main/resources/mybatis/mapper/AdDao.xml
  60. 29 2
      kmall-admin/src/main/resources/mybatis/mapper/BrandDao.xml
  61. 7 7
      kmall-admin/src/main/resources/mybatis/mapper/CategoryDao.xml
  62. 28 8
      kmall-admin/src/main/resources/mybatis/mapper/FreightDao.xml
  63. 21 8
      kmall-admin/src/main/resources/mybatis/mapper/FreightItemDao.xml
  64. 60 8
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  65. 16 6
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  66. 46 6
      kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml
  67. 23 19
      kmall-admin/src/main/resources/mybatis/mapper/SysRoleDao.xml
  68. 26 1
      kmall-admin/src/main/resources/mybatis/mapper/SysSmsLogDao.xml
  69. 26 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/ad.html
  70. 36 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/brand.html
  71. 37 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html
  72. 26 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/freight.html
  73. 26 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/orderresend.html
  74. 3 3
      kmall-admin/src/main/webapp/WEB-INF/page/shop/product.html
  75. 16 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/store.html
  76. 23 3
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html
  77. 13 1
      kmall-admin/src/main/webapp/WEB-INF/page/sys/user.html
  78. 84 8
      kmall-admin/src/main/webapp/js/shop/ad.js
  79. 84 6
      kmall-admin/src/main/webapp/js/shop/brand.js
  80. 93 2
      kmall-admin/src/main/webapp/js/shop/category.js
  81. 76 2
      kmall-admin/src/main/webapp/js/shop/freight.js
  82. 2 2
      kmall-admin/src/main/webapp/js/shop/goods.js
  83. 195 0
      kmall-admin/src/main/webapp/js/shop/orderresend.js
  84. 6 5
      kmall-admin/src/main/webapp/js/shop/product.js
  85. 32 3
      kmall-admin/src/main/webapp/js/shop/store.js
  86. 38 4
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js
  87. 2 2
      kmall-admin/src/main/webapp/js/sys/role.js
  88. 26 2
      kmall-admin/src/main/webapp/js/sys/user.js
  89. 二進制
      kmall-admin/src/main/webapp/statics/file/category_store_export_yyyy_mm_dd_v1.0.0.xls
  90. 二進制
      kmall-admin/src/main/webapp/statics/file/store_export_yyyy_mm_dd_v1.0.0.xls
  91. 二進制
      kmall-admin/src/main/webapp/statics/file/store_goods_export_yyyy_mm_dd_v1.0.0.xls
  92. 二進制
      kmall-admin/src/main/webapp/statics/file/store_id_export_yyyy_mm_dd_v1.0.0.xls
  93. 二進制
      kmall-admin/src/main/webapp/statics/file/sys_user_export_yyyy_mm_dd_v1.0.0.xls
  94. 23 3
      kmall-api/src/main/java/com/kmall/api/api/ApiAuthController.java
  95. 182 4
      kmall-api/src/main/java/com/kmall/api/api/ApiUserController.java
  96. 41 4
      kmall-api/src/main/java/com/kmall/api/cache/UserTokenCache.java
  97. 10 0
      kmall-api/src/main/java/com/kmall/api/entity/TokenEntity.java
  98. 32 10
      kmall-api/src/main/java/com/kmall/api/interceptor/AuthorizationInterceptor.java
  99. 3 1
      kmall-api/src/main/java/com/kmall/api/service/TokenService.java
  100. 31 4
      kmall-api/src/main/java/com/kmall/api/util/ApiBaseAction.java

+ 0 - 1
README.md

@@ -65,7 +65,6 @@ kmall-pt
 
 
 * 生成环境打包 
 * 生成环境打包 
     * mvn clean package
     * mvn clean package
-    * mvn package -P prod
     
     
 ## 打印机设置
 ## 打印机设置
 * 360急速浏览器
 * 360急速浏览器

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/AdController.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.controller;
 package com.kmall.admin.controller;
 
 
+import com.kmall.admin.dto.CopyAdDto;
 import com.kmall.admin.entity.AdEntity;
 import com.kmall.admin.entity.AdEntity;
 import com.kmall.admin.service.AdService;
 import com.kmall.admin.service.AdService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ParamUtils;
@@ -103,4 +104,13 @@ public class AdController {
 
 
         return R.ok().put("list", list);
         return R.ok().put("list", list);
     }
     }
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyAd")
+//    @RequiresPermissions("ad:saveCopyAd")
+    public R saveCopyAd(@RequestBody CopyAdDto copyAdDto) {
+        adService.saveCopyAd(copyAdDto);
+        return R.ok();
+    }
 }
 }

+ 13 - 1
kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java

@@ -1,6 +1,8 @@
 package com.kmall.admin.controller;
 package com.kmall.admin.controller;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.CopyBrandDto;
+import com.kmall.admin.dto.CopyCategoryDto;
 import com.kmall.admin.entity.BrandEntity;
 import com.kmall.admin.entity.BrandEntity;
 import com.kmall.admin.service.BrandService;
 import com.kmall.admin.service.BrandService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ParamUtils;
@@ -31,8 +33,8 @@ public class BrandController {
     @RequestMapping("/list")
     @RequestMapping("/list")
     @RequiresPermissions("brand:list")
     @RequiresPermissions("brand:list")
     public R list(@RequestParam Map<String, Object> params) {
     public R list(@RequestParam Map<String, Object> params) {
-
         ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
         ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
 
 
         //查询列表数据
         //查询列表数据
         Query query = new Query(params);
         Query query = new Query(params);
@@ -123,4 +125,14 @@ public class BrandController {
 
 
         return R.ok().put("list", list);
         return R.ok().put("list", list);
     }
     }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyBrand")
+//    @RequiresPermissions("brand:saveCopyBrand")
+    public R saveCopyBrand(@RequestBody CopyBrandDto copyBrandDto) {
+        brandService.saveCopyCategory(copyBrandDto);
+        return R.ok();
+    }
 }
 }

+ 18 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CategoryController.java

@@ -1,12 +1,18 @@
 package com.kmall.admin.controller;
 package com.kmall.admin.controller;
 
 
+import com.kmall.admin.dto.CopyCategoryDto;
+import com.kmall.admin.dto.StoreDto;
+import com.kmall.admin.dto.StoreIdDto;
 import com.kmall.admin.entity.CategoryEntity;
 import com.kmall.admin.entity.CategoryEntity;
 import com.kmall.admin.service.CategoryService;
 import com.kmall.admin.service.CategoryService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
@@ -25,6 +31,8 @@ import java.util.Map;
 public class CategoryController {
 public class CategoryController {
     @Autowired
     @Autowired
     private CategoryService categoryService;
     private CategoryService categoryService;
+    @Autowired
+    private ExcelUtil excelUtil;
 
 
     /**
     /**
      * 查看列表
      * 查看列表
@@ -183,4 +191,14 @@ public class CategoryController {
         List<CategoryEntity> list = categoryService.queryList(map);
         List<CategoryEntity> list = categoryService.queryList(map);
         return R.ok().put("list", list);
         return R.ok().put("list", list);
     }
     }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyCategory")
+//    @RequiresPermissions("category:saveCopyCategory")
+    public R saveCopyCategory(@RequestBody CopyCategoryDto copyCategoryDto) {
+        categoryService.saveCopyCategory(copyCategoryDto);
+        return R.ok();
+    }
 }
 }

+ 11 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/FreightController.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.CopyFreightDto;
 import com.kmall.admin.entity.FreightEntity;
 import com.kmall.admin.entity.FreightEntity;
 import com.kmall.admin.entity.FreightItemEntity;
 import com.kmall.admin.entity.FreightItemEntity;
 import com.kmall.admin.service.FreightService;
 import com.kmall.admin.service.FreightService;
@@ -141,4 +142,14 @@ public class FreightController {
 
 
         return R.ok().put("list", list);
         return R.ok().put("list", list);
     }
     }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyFreight")
+//    @RequiresPermissions("freight:saveCopyFreight")
+    public R saveCopyFreight(@RequestBody CopyFreightDto copyFreightDto) {
+        freightService.saveCopyFreight(copyFreightDto);
+        return R.ok();
+    }
 }
 }

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

@@ -227,7 +227,7 @@ public class GoodsController {
             e.printStackTrace();
             e.printStackTrace();
             return R.error("导入失败!");
             return R.error("导入失败!");
         }
         }
-        goodsService.uploadExcel(goodsDtoList,1);
+        goodsService.uploadExcel(goodsDtoList,Integer.parseInt(Dict.exportDataType.item_1.getItem()));
         //上传文件
         //上传文件
         return R.ok();
         return R.ok();
     }
     }
@@ -248,7 +248,7 @@ public class GoodsController {
             e.printStackTrace();
             e.printStackTrace();
             return R.error("导入失败!");
             return R.error("导入失败!");
         }
         }
-        goodsService.uploadExcel(generalGoodsDtoList,2);
+        goodsService.uploadExcel(generalGoodsDtoList,Integer.parseInt(Dict.exportDataType.item_2.getItem()));
         //上传文件
         //上传文件
         return R.ok();
         return R.ok();
     }
     }

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

@@ -803,4 +803,20 @@ public class OrderController {
         //上传文件
         //上传文件
         return R.ok();
         return R.ok();
     }
     }
+
+    /**
+     * 获取ccnet需要重发的订单数据
+     */
+    @RequestMapping("/wxOrderResendQueryAllList")
+    public R wxOrderResendQueryAllList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<WxOrderEntity> orderList = orderService.wxOrderResendQueryAllList(query);
+
+        PageUtils pageUtil = new PageUtils(orderList, orderList.size(), query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
 }
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ProductController.java

@@ -3,6 +3,7 @@ package com.kmall.admin.controller;
 import com.kmall.admin.entity.ProductEntity;
 import com.kmall.admin.entity.ProductEntity;
 import com.kmall.admin.service.GoodsSpecificationService;
 import com.kmall.admin.service.GoodsSpecificationService;
 import com.kmall.admin.service.ProductService;
 import com.kmall.admin.service.ProductService;
+import com.kmall.admin.utils.ParamUtils;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.R;
@@ -35,6 +36,7 @@ public class ProductController {
     @RequestMapping("/list")
     @RequestMapping("/list")
     @RequiresPermissions("product:list")
     @RequiresPermissions("product:list")
     public R list(@RequestParam Map<String, Object> params) {
     public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setName(params, "goodsName");
         //查询列表数据
         //查询列表数据
         Query query = new Query(params);
         Query query = new Query(params);
 
 

+ 30 - 5
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -1,17 +1,16 @@
 package com.kmall.admin.controller;
 package com.kmall.admin.controller;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
-import com.kmall.admin.entity.StoreEntity;
-import com.kmall.admin.entity.ThirdMerchantBizEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.ProductStoreRelaService;
 import com.kmall.admin.service.ProductStoreRelaService;
-import com.kmall.admin.service.StoreService;
-import com.kmall.admin.service.ThirdMerchantBizService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.Dict;
+import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
 import com.kmall.common.utils.file.FileUploadUtil;
 import com.kmall.common.utils.file.FileUploadUtil;
 import com.kmall.common.utils.wechat.AccessToken;
 import com.kmall.common.utils.wechat.AccessToken;
 import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
 import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
@@ -20,7 +19,9 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -38,7 +39,7 @@ public class ProductStoreRelaController {
     @Autowired
     @Autowired
     private ProductStoreRelaService productStoreRelaService;
     private ProductStoreRelaService productStoreRelaService;
     @Autowired
     @Autowired
-    private StoreService storeService;
+    private ExcelUtil excelUtil;
 
 
     /**
     /**
      * 查看列表
      * 查看列表
@@ -258,4 +259,28 @@ public class ProductStoreRelaController {
         String url = FileUploadUtil.getUploadUrl(mapToXml, token, id);
         String url = FileUploadUtil.getUploadUrl(mapToXml, token, id);
         return R.ok().put("url", url);
         return R.ok().put("url", url);
     }
     }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/productStoreRelaUpload")
+    public R storeUpload(@RequestParam("file") MultipartFile file) {
+        List<StoreGoodsDto> StoreGoodsDtoList = new ArrayList<>();//信息
+        try {
+            StoreGoodsDto storeGoodsDto = new StoreGoodsDto();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("StoreGoodsDto", storeGoodsDto);
+            beans.put("StoreGoodsDtoList", StoreGoodsDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.STORE_GOODS_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        productStoreRelaService.uploadExcel(StoreGoodsDtoList);
+        //上传文件
+        return R.ok("导入成功!");
+    }
 }
 }

+ 69 - 19
kmall-admin/src/main/java/com/kmall/admin/controller/StoreController.java

@@ -1,42 +1,34 @@
 package com.kmall.admin.controller;
 package com.kmall.admin.controller;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.StoreDto;
 import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.service.StoreService;
 import com.kmall.admin.service.StoreService;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.excel.ExcelExport;
+import com.kmall.common.utils.excel.ExcelUtil;
 import com.kmall.common.utils.file.FileUploadUtil;
 import com.kmall.common.utils.file.FileUploadUtil;
 import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
 import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
-import com.kmall.common.fileserver.util.FileManager;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.wechat.AccessToken;
 import com.kmall.common.utils.wechat.AccessToken;
 import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
 import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.disk.DiskFileItem;
-import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
-import java.io.*;
-import java.nio.file.Files;
-import java.util.List;
-import java.util.Map;
-
-import java.util.HashMap;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.protocol.HTTP;
+import java.util.*;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 
 /**
 /**
  * Controller
  * Controller
@@ -50,6 +42,8 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 public class StoreController {
 public class StoreController {
     @Autowired
     @Autowired
     private StoreService storeService;
     private StoreService storeService;
+    @Autowired
+    private ExcelUtil excelUtil;
 
 
     /**
     /**
      * 查看列表
      * 查看列表
@@ -218,10 +212,66 @@ public class StoreController {
         Map<Object, Object> params = new HashMap<Object, Object>();
         Map<Object, Object> params = new HashMap<Object, Object>();
         params.put("scene", store.getId());//参数
         params.put("scene", store.getId());//参数
         params.put("page", "pages/index/index");//页面
         params.put("page", "pages/index/index");//页面
-        params.put("width", 430);
+        params.put("width", 90);
         String mapToXml = JSON.toJSONString(params);
         String mapToXml = JSON.toJSONString(params);
 
 
         String url = FileUploadUtil.getUploadUrl(mapToXml, token, storeId);
         String url = FileUploadUtil.getUploadUrl(mapToXml, token, storeId);
         return R.ok().put("url", url);
         return R.ok().put("url", url);
     }
     }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/storeUpload")
+    public R storeUpload(@RequestParam("file") MultipartFile file) {
+        List<StoreDto> storeDtoList = new ArrayList<>();//信息
+        try {
+            StoreDto storeDto = new StoreDto();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("StoreDto", storeDto);
+            beans.put("StoreDtoList", storeDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.STORE_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        storeService.uploadExcel(storeDtoList);
+        //上传文件
+        return R.ok("导入成功!");
+    }
+
+    /**
+     * 订单导出请求
+     */
+    @RequestMapping(value = "export")
+    public Object export(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "storeName");
+        //查询列表数据
+        List<StoreEntity> storeEntityList = storeService.queryExportList(params);
+
+        ExcelExport ee = new ExcelExport("门店id信息");
+
+        String[] header = new String[]{"门店编号", "门店名称", "oms门店编号"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (storeEntityList != null && storeEntityList.size() != 0) {
+            for (StoreEntity storeEntity : storeEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+
+                map.put("StoreId", storeEntity.getId());
+                map.put("StoreName", storeEntity.getStoreName());
+                map.put("StoreNumber", storeEntity.getStoreNumber());
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("门店id信息", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+
 }
 }

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

@@ -16,4 +16,5 @@ import java.util.List;
 public interface BrandDao extends BaseDao<BrandEntity> {
 public interface BrandDao extends BaseDao<BrandEntity> {
     BrandEntity queryObjectByName(@Param("brandName")String brandName,@Param("merchSn")String merchSn);
     BrandEntity queryObjectByName(@Param("brandName")String brandName,@Param("merchSn")String merchSn);
     List<BrandEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
     List<BrandEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
+    BrandEntity queryBrandByBrandNameAndStoreId(@Param("brandName")String brandName,@Param("storeId") Long storeId);
 }
 }

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

@@ -22,4 +22,6 @@ public interface FreightDao extends BaseDao<FreightEntity> {
 
 
     FreightEntity queryObjectByName(@Param("defaultFreight")String defaultFreight,@Param("merchSn")String merchSn);
     FreightEntity queryObjectByName(@Param("defaultFreight")String defaultFreight,@Param("merchSn")String merchSn);
     List<FreightEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
     List<FreightEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
+
+    FreightEntity queryFreightByDefaultFreightAndStoreId(@Param("defaultFreight")String defaultFreight, @Param("storeId") Long storeId);
 }
 }

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

@@ -12,4 +12,5 @@ import com.kmall.manager.dao.BaseDao;
  */
  */
 public interface FreightItemDao extends BaseDao<FreightItemEntity> {
 public interface FreightItemDao extends BaseDao<FreightItemEntity> {
     int deleteByFreId(Integer freId);
     int deleteByFreId(Integer freId);
+    FreightItemEntity queryObjectByFreightId(Integer freightId);
 }
 }

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

@@ -26,4 +26,6 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
     List<GoodsEntity> queryObjectByProdBarcode(@Param("prodBarcode") String prodBarcode, @Param("merchSn") String merchSn,@Param("goodsId")Long id);
     List<GoodsEntity> queryObjectByProdBarcode(@Param("prodBarcode") String prodBarcode, @Param("merchSn") String merchSn,@Param("goodsId")Long id);
 
 
     GoodsEntity queryObjectByStoreId(@Param("id") Long id, @Param("storeId") Long storeId);
     GoodsEntity queryObjectByStoreId(@Param("id") Long id, @Param("storeId") Long storeId);
+
+    GoodsEntity queryGoodsByGoodsSnAndStoreId(@Param("goodsSn") String goodsSn, @Param("storeId") Long storeId);
 }
 }

+ 4 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/StoreDao.java

@@ -4,6 +4,9 @@ import com.kmall.admin.entity.StoreEntity;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import com.kmall.manager.dao.BaseDao;
 import com.kmall.manager.dao.BaseDao;
 
 
+import java.util.List;
+import java.util.Map;
+
 /**
 /**
  * Dao
  * Dao
  *
  *
@@ -15,6 +18,6 @@ public interface StoreDao extends BaseDao<StoreEntity> {
 
 
     StoreEntity queryObjectByName(@Param("storeName") String storeName);
     StoreEntity queryObjectByName(@Param("storeName") String storeName);
 
 
+    List<StoreEntity> queryExportList(Map<String, Object> map);
 //    StoreEntity queryObjectByDistId(@Param("distId") Integer distId);
 //    StoreEntity queryObjectByDistId(@Param("distId") Integer distId);
-
 }
 }

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/CateStoreDto.java

@@ -0,0 +1,30 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class CateStoreDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeId;
+    private String categoryId;
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
+    public String getCategoryId() {
+        return categoryId;
+    }
+
+    public void setCategoryId(String categoryId) {
+        this.categoryId = categoryId;
+    }
+}

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/CopyAdDto.java

@@ -0,0 +1,30 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class CopyAdDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeList;
+    private Integer adId;
+
+    public String getStoreList() {
+        return storeList;
+    }
+
+    public void setStoreList(String storeList) {
+        this.storeList = storeList;
+    }
+
+    public Integer getAdId() {
+        return adId;
+    }
+
+    public void setAdId(Integer adId) {
+        this.adId = adId;
+    }
+}

+ 39 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/CopyBrandDto.java

@@ -0,0 +1,39 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class CopyBrandDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeList;
+    private String categoryList;
+    private Integer brandId;
+
+    public String getStoreList() {
+        return storeList;
+    }
+
+    public void setStoreList(String storeList) {
+        this.storeList = storeList;
+    }
+
+    public String getCategoryList() {
+        return categoryList;
+    }
+
+    public void setCategoryList(String categoryList) {
+        this.categoryList = categoryList;
+    }
+
+    public Integer getBrandId() {
+        return brandId;
+    }
+
+    public void setBrandId(Integer brandId) {
+        this.brandId = brandId;
+    }
+}

+ 39 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/CopyCategoryDto.java

@@ -0,0 +1,39 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class CopyCategoryDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeList;
+    private String categoryList;
+    private Integer categoryId;
+
+    public String getStoreList() {
+        return storeList;
+    }
+
+    public void setStoreList(String storeList) {
+        this.storeList = storeList;
+    }
+
+    public String getCategoryList() {
+        return categoryList;
+    }
+
+    public void setCategoryList(String categoryList) {
+        this.categoryList = categoryList;
+    }
+
+    public Integer getCategoryId() {
+        return categoryId;
+    }
+
+    public void setCategoryId(Integer categoryId) {
+        this.categoryId = categoryId;
+    }
+}

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/CopyFreightDto.java

@@ -0,0 +1,30 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class CopyFreightDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeList;
+    private Integer freightId;
+
+    public String getStoreList() {
+        return storeList;
+    }
+
+    public void setStoreList(String storeList) {
+        this.storeList = storeList;
+    }
+
+    public Integer getFreightId() {
+        return freightId;
+    }
+
+    public void setFreightId(Integer freightId) {
+        this.freightId = freightId;
+    }
+}

+ 113 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/StoreDto.java

@@ -0,0 +1,113 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:08
+ */
+public class StoreDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String merchSn;
+    private String storeName;
+    private String storeNumber;
+    private String storeAddress;
+    private String provinceName;
+    private String cityName;
+    private String countyName;
+    private Double latitude;
+    private Double longitude;
+    private String thirdPartyMerchCode;
+    private String exprAgreementType;
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getStoreNumber() {
+        return storeNumber;
+    }
+
+    public void setStoreNumber(String storeNumber) {
+        this.storeNumber = storeNumber;
+    }
+
+    public String getStoreAddress() {
+        return storeAddress;
+    }
+
+    public void setStoreAddress(String storeAddress) {
+        this.storeAddress = storeAddress;
+    }
+
+    public String getProvinceName() {
+        return provinceName;
+    }
+
+    public void setProvinceName(String provinceName) {
+        this.provinceName = provinceName;
+    }
+
+    public String getCityName() {
+        return cityName;
+    }
+
+    public void setCityName(String cityName) {
+        this.cityName = cityName;
+    }
+
+    public String getCountyName() {
+        return countyName;
+    }
+
+    public void setCountyName(String countyName) {
+        this.countyName = countyName;
+    }
+
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+
+    public String getExprAgreementType() {
+        return exprAgreementType;
+    }
+
+    public void setExprAgreementType(String exprAgreementType) {
+        this.exprAgreementType = exprAgreementType;
+    }
+
+    public Double getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(Double latitude) {
+        this.latitude = latitude;
+    }
+
+    public Double getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(Double longitude) {
+        this.longitude = longitude;
+    }
+}

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

@@ -0,0 +1,122 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * @author Scott
+ * @email
+ * @date 2019-10-18 10:41:08
+ */
+public class StoreGoodsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeName;
+    private String specification;
+    private String stockNum;
+    private String goodsSn;
+    private String retailPrice;
+    private String marketPrice;
+    private String goodsBizType;
+    private String categoryName;
+    private String attributeCategory;
+    private String brandName;
+    private String freightName;
+    private String supplierThirdCode;
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public String getStockNum() {
+        return stockNum;
+    }
+
+    public void setStockNum(String stockNum) {
+        this.stockNum = stockNum;
+    }
+
+    public String getGoodsSn() {
+        return goodsSn;
+    }
+
+    public void setGoodsSn(String goodsSn) {
+        this.goodsSn = goodsSn;
+    }
+
+    public String getRetailPrice() {
+        return retailPrice;
+    }
+
+    public void setRetailPrice(String retailPrice) {
+        this.retailPrice = retailPrice;
+    }
+
+    public String getMarketPrice() {
+        return marketPrice;
+    }
+
+    public void setMarketPrice(String marketPrice) {
+        this.marketPrice = marketPrice;
+    }
+
+    public String getGoodsBizType() {
+        return goodsBizType;
+    }
+
+    public void setGoodsBizType(String goodsBizType) {
+        this.goodsBizType = goodsBizType;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public String getAttributeCategory() {
+        return attributeCategory;
+    }
+
+    public void setAttributeCategory(String attributeCategory) {
+        this.attributeCategory = attributeCategory;
+    }
+
+    public String getBrandName() {
+        return brandName;
+    }
+
+    public void setBrandName(String brandName) {
+        this.brandName = brandName;
+    }
+
+    public String getFreightName() {
+        return freightName;
+    }
+
+    public void setFreightName(String freightName) {
+        this.freightName = freightName;
+    }
+
+    public String getSupplierThirdCode() {
+        return supplierThirdCode;
+    }
+
+    public void setSupplierThirdCode(String supplierThirdCode) {
+        this.supplierThirdCode = supplierThirdCode;
+    }
+}

+ 21 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/StoreIdDto.java

@@ -0,0 +1,21 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Scott
+ * @email
+ */
+public class StoreIdDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String storeId;
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+}

+ 83 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/SysUserDto.java

@@ -0,0 +1,83 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+
+/**
+ * @author Scott
+ * @email
+ */
+public class SysUserDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private String userName;
+    private String email;
+    private String mobile;
+    private String storeName;
+    private String roleType;
+    private String roleName;
+    private String merchSn;
+    private String thirdPartyMerchCode;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(String roleType) {
+        this.roleType = roleType;
+    }
+
+    public String getRoleName() {
+        return roleName;
+    }
+
+    public void setRoleName(String roleName) {
+        this.roleName = roleName;
+    }
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+}

+ 20 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/AdEntity.java

@@ -53,6 +53,26 @@ public class AdEntity implements Serializable {
 
 
     private Integer storeTopicId;
     private Integer storeTopicId;
 
 
+    private String storeName;
+
+    private String merchName;
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getMerchName() {
+        return merchName;
+    }
+
+    public void setMerchName(String merchName) {
+        this.merchName = merchName;
+    }
+
     public Integer getStoreTopicId() {
     public Integer getStoreTopicId() {
         return storeTopicId;
         return storeTopicId;
     }
     }

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

@@ -124,6 +124,8 @@ public class ProductStoreRelaEntity implements Serializable {
 
 
     private String isOnSale;
     private String isOnSale;
 
 
+    private Integer hotSortNum;
+
     public String getIsOnSale() {
     public String getIsOnSale() {
         return isOnSale;
         return isOnSale;
     }
     }
@@ -492,6 +494,14 @@ public class ProductStoreRelaEntity implements Serializable {
         this.specification = specification;
         this.specification = specification;
     }
     }
 
 
+    public Integer getHotSortNum() {
+        return hotSortNum;
+    }
+
+    public void setHotSortNum(Integer hotSortNum) {
+        this.hotSortNum = hotSortNum;
+    }
+
     public void addSellVolume() {
     public void addSellVolume() {
         if (null == sellVolume) {
         if (null == sellVolume) {
             sellVolume = 1;
             sellVolume = 1;

+ 735 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/WxOrderEntity.java

@@ -0,0 +1,735 @@
+package com.kmall.admin.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * @author huangyq
+ * @email
+ * @date 2019-11-07 16:11:34
+ */
+public class WxOrderEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String wxOrderSn;
+
+    private String merchOrderId;
+
+    private String orderSn;
+
+    private String wxOrderId;
+
+    private String merchSn;
+
+    private String merchName;
+
+    private String platSn;
+
+    private String platName;
+
+    private String thirdPartyMerchCode;
+
+    private String thirdPartyMerchName;
+
+    private Date placeOrderlTime;
+
+    private String autoSend;
+
+    private String buyerRegNo;
+
+    private Date buyerBillTime;
+
+    private String buyerIdType;
+
+    private String buyerIdCode;
+
+    private String buyerName;
+
+    private String buyerTel;
+
+    private String consigneeIdType;
+
+    private String consigneeIdCode;
+
+    private String consigneeName;
+
+    private String consigneeMob;
+
+    private String consigneeTel;
+
+    private String consigneeCountryCode;
+
+    private String consigneeProvinceCode;
+
+    private String consigneeProvince;
+
+    private String consigneeCityCode;
+
+    private String consigneeCity;
+
+    private String consigneeDistrictCode;
+
+    private String consigneeDistrict;
+
+    private String consigneeAddress;
+
+    private String consigneeZipCode;
+
+    private String payerName;
+
+    private String payerIdType;
+
+    private String payerIdCode;
+
+    private String payerMob;
+
+    private String payEntCusCode;
+
+    private String payNo;
+
+    private BigDecimal goodsValue;
+
+    private BigDecimal freight;
+
+    private BigDecimal discount;
+
+    private BigDecimal taxTotal;
+
+    private BigDecimal acturalPaid;
+
+    private Date payTime;
+
+    private String exprType;
+
+    private String exprCompId;
+
+    private BigDecimal declExprFee;
+
+    private String batchNumbers;
+
+    private BigDecimal declPostTax;
+
+    private String shopId;
+
+    private String extraTag;
+
+    private String currencyCode;
+
+    private String wsFlag;
+
+    private String buyerPayCheck;
+
+    private String wxOrderDetail;
+
+    private String clecOrderStatus;
+
+    private String wayOrderStatus;
+
+    private String projectCheckStatus;
+
+    private String playOrderStatus;
+
+    private String remark;
+
+    private String createrSn;
+
+    private Date createTime;
+
+    private String moderSn;
+
+    private Date modTime;
+
+    private Date tstm;
+
+    private String exField;
+
+    private String exField2;
+
+    private String exField3;
+
+    private String exField4;
+
+    private String exField5;
+
+    private String exprAgreementType;
+
+    private String placeOrderlTimeStr;
+
+    public String getPlaceOrderlTimeStr() {
+        return placeOrderlTimeStr;
+    }
+
+    public void setPlaceOrderlTimeStr(String placeOrderlTimeStr) {
+        this.placeOrderlTimeStr = placeOrderlTimeStr;
+    }
+
+    public String getExprAgreementType() {
+        return exprAgreementType;
+    }
+
+    public void setExprAgreementType(String exprAgreementType) {
+        this.exprAgreementType = exprAgreementType;
+    }
+
+    public String getWxOrderSn() {
+        return wxOrderSn;
+    }
+
+    public void setWxOrderSn(String wxOrderSn) {
+        this.wxOrderSn = wxOrderSn == null ? null : wxOrderSn.trim();
+    }
+
+    public String getMerchOrderId() {
+        return merchOrderId;
+    }
+
+    public void setMerchOrderId(String merchOrderId) {
+        this.merchOrderId = merchOrderId == null ? null : merchOrderId.trim();
+    }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn == null ? null : orderSn.trim();
+    }
+
+    public String getWxOrderId() {
+        return wxOrderId;
+    }
+
+    public void setWxOrderId(String wxOrderId) {
+        this.wxOrderId = wxOrderId == null ? null : wxOrderId.trim();
+    }
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn == null ? null : merchSn.trim();
+    }
+
+    public String getMerchName() {
+        return merchName;
+    }
+
+    public void setMerchName(String merchName) {
+        this.merchName = merchName == null ? null : merchName.trim();
+    }
+
+    public String getPlatSn() {
+        return platSn;
+    }
+
+    public void setPlatSn(String platSn) {
+        this.platSn = platSn == null ? null : platSn.trim();
+    }
+
+    public String getPlatName() {
+        return platName;
+    }
+
+    public void setPlatName(String platName) {
+        this.platName = platName == null ? null : platName.trim();
+    }
+
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode == null ? null : thirdPartyMerchCode.trim();
+    }
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName == null ? null : thirdPartyMerchName.trim();
+    }
+
+    public Date getPlaceOrderlTime() {
+        return placeOrderlTime;
+    }
+
+    public void setPlaceOrderlTime(Date placeOrderlTime) {
+        this.placeOrderlTime = placeOrderlTime;
+    }
+
+    public String getAutoSend() {
+        return autoSend;
+    }
+
+    public void setAutoSend(String autoSend) {
+        this.autoSend = autoSend == null ? null : autoSend.trim();
+    }
+
+    public String getBuyerRegNo() {
+        return buyerRegNo;
+    }
+
+    public void setBuyerRegNo(String buyerRegNo) {
+        this.buyerRegNo = buyerRegNo == null ? null : buyerRegNo.trim();
+    }
+
+    public Date getBuyerBillTime() {
+        return buyerBillTime;
+    }
+
+    public void setBuyerBillTime(Date buyerBillTime) {
+        this.buyerBillTime = buyerBillTime;
+    }
+
+    public String getBuyerIdType() {
+        return buyerIdType;
+    }
+
+    public void setBuyerIdType(String buyerIdType) {
+        this.buyerIdType = buyerIdType == null ? null : buyerIdType.trim();
+    }
+
+    public String getBuyerIdCode() {
+        return buyerIdCode;
+    }
+
+    public void setBuyerIdCode(String buyerIdCode) {
+        this.buyerIdCode = buyerIdCode == null ? null : buyerIdCode.trim();
+    }
+
+    public String getBuyerName() {
+        return buyerName;
+    }
+
+    public void setBuyerName(String buyerName) {
+        this.buyerName = buyerName == null ? null : buyerName.trim();
+    }
+
+    public String getBuyerTel() {
+        return buyerTel;
+    }
+
+    public void setBuyerTel(String buyerTel) {
+        this.buyerTel = buyerTel == null ? null : buyerTel.trim();
+    }
+
+    public String getConsigneeIdType() {
+        return consigneeIdType;
+    }
+
+    public void setConsigneeIdType(String consigneeIdType) {
+        this.consigneeIdType = consigneeIdType == null ? null : consigneeIdType.trim();
+    }
+
+    public String getConsigneeIdCode() {
+        return consigneeIdCode;
+    }
+
+    public void setConsigneeIdCode(String consigneeIdCode) {
+        this.consigneeIdCode = consigneeIdCode == null ? null : consigneeIdCode.trim();
+    }
+
+    public String getConsigneeName() {
+        return consigneeName;
+    }
+
+    public void setConsigneeName(String consigneeName) {
+        this.consigneeName = consigneeName == null ? null : consigneeName.trim();
+    }
+
+    public String getConsigneeMob() {
+        return consigneeMob;
+    }
+
+    public void setConsigneeMob(String consigneeMob) {
+        this.consigneeMob = consigneeMob == null ? null : consigneeMob.trim();
+    }
+
+    public String getConsigneeTel() {
+        return consigneeTel;
+    }
+
+    public void setConsigneeTel(String consigneeTel) {
+        this.consigneeTel = consigneeTel == null ? null : consigneeTel.trim();
+    }
+
+    public String getConsigneeCountryCode() {
+        return consigneeCountryCode;
+    }
+
+    public void setConsigneeCountryCode(String consigneeCountryCode) {
+        this.consigneeCountryCode = consigneeCountryCode == null ? null : consigneeCountryCode.trim();
+    }
+
+    public String getConsigneeProvinceCode() {
+        return consigneeProvinceCode;
+    }
+
+    public void setConsigneeProvinceCode(String consigneeProvinceCode) {
+        this.consigneeProvinceCode = consigneeProvinceCode == null ? null : consigneeProvinceCode.trim();
+    }
+
+    public String getConsigneeProvince() {
+        return consigneeProvince;
+    }
+
+    public void setConsigneeProvince(String consigneeProvince) {
+        this.consigneeProvince = consigneeProvince == null ? null : consigneeProvince.trim();
+    }
+
+    public String getConsigneeCityCode() {
+        return consigneeCityCode;
+    }
+
+    public void setConsigneeCityCode(String consigneeCityCode) {
+        this.consigneeCityCode = consigneeCityCode == null ? null : consigneeCityCode.trim();
+    }
+
+    public String getConsigneeCity() {
+        return consigneeCity;
+    }
+
+    public void setConsigneeCity(String consigneeCity) {
+        this.consigneeCity = consigneeCity == null ? null : consigneeCity.trim();
+    }
+
+    public String getConsigneeDistrictCode() {
+        return consigneeDistrictCode;
+    }
+
+    public void setConsigneeDistrictCode(String consigneeDistrictCode) {
+        this.consigneeDistrictCode = consigneeDistrictCode == null ? null : consigneeDistrictCode.trim();
+    }
+
+    public String getConsigneeDistrict() {
+        return consigneeDistrict;
+    }
+
+    public void setConsigneeDistrict(String consigneeDistrict) {
+        this.consigneeDistrict = consigneeDistrict == null ? null : consigneeDistrict.trim();
+    }
+
+    public String getConsigneeAddress() {
+        return consigneeAddress;
+    }
+
+    public void setConsigneeAddress(String consigneeAddress) {
+        this.consigneeAddress = consigneeAddress == null ? null : consigneeAddress.trim();
+    }
+
+    public String getConsigneeZipCode() {
+        return consigneeZipCode;
+    }
+
+    public void setConsigneeZipCode(String consigneeZipCode) {
+        this.consigneeZipCode = consigneeZipCode == null ? null : consigneeZipCode.trim();
+    }
+
+    public String getPayerName() {
+        return payerName;
+    }
+
+    public void setPayerName(String payerName) {
+        this.payerName = payerName == null ? null : payerName.trim();
+    }
+
+    public String getPayerIdType() {
+        return payerIdType;
+    }
+
+    public void setPayerIdType(String payerIdType) {
+        this.payerIdType = payerIdType == null ? null : payerIdType.trim();
+    }
+
+    public String getPayerIdCode() {
+        return payerIdCode;
+    }
+
+    public void setPayerIdCode(String payerIdCode) {
+        this.payerIdCode = payerIdCode == null ? null : payerIdCode.trim();
+    }
+
+    public String getPayerMob() {
+        return payerMob;
+    }
+
+    public void setPayerMob(String payerMob) {
+        this.payerMob = payerMob == null ? null : payerMob.trim();
+    }
+
+    public String getPayEntCusCode() {
+        return payEntCusCode;
+    }
+
+    public void setPayEntCusCode(String payEntCusCode) {
+        this.payEntCusCode = payEntCusCode == null ? null : payEntCusCode.trim();
+    }
+
+    public String getPayNo() {
+        return payNo;
+    }
+
+    public void setPayNo(String payNo) {
+        this.payNo = payNo == null ? null : payNo.trim();
+    }
+
+    public BigDecimal getGoodsValue() {
+        return goodsValue;
+    }
+
+    public void setGoodsValue(BigDecimal goodsValue) {
+        this.goodsValue = goodsValue;
+    }
+
+    public BigDecimal getFreight() {
+        return freight;
+    }
+
+    public void setFreight(BigDecimal freight) {
+        this.freight = freight;
+    }
+
+    public BigDecimal getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(BigDecimal discount) {
+        this.discount = discount;
+    }
+
+    public BigDecimal getTaxTotal() {
+        return taxTotal;
+    }
+
+    public void setTaxTotal(BigDecimal taxTotal) {
+        this.taxTotal = taxTotal;
+    }
+
+    public BigDecimal getActuralPaid() {
+        return acturalPaid;
+    }
+
+    public void setActuralPaid(BigDecimal acturalPaid) {
+        this.acturalPaid = acturalPaid;
+    }
+
+    public Date getPayTime() {
+        return payTime;
+    }
+
+    public void setPayTime(Date payTime) {
+        this.payTime = payTime;
+    }
+
+    public String getExprType() {
+        return exprType;
+    }
+
+    public void setExprType(String exprType) {
+        this.exprType = exprType == null ? null : exprType.trim();
+    }
+
+    public String getExprCompId() {
+        return exprCompId;
+    }
+
+    public void setExprCompId(String exprCompId) {
+        this.exprCompId = exprCompId == null ? null : exprCompId.trim();
+    }
+
+    public BigDecimal getDeclExprFee() {
+        return declExprFee;
+    }
+
+    public void setDeclExprFee(BigDecimal declExprFee) {
+        this.declExprFee = declExprFee;
+    }
+
+    public String getBatchNumbers() {
+        return batchNumbers;
+    }
+
+    public void setBatchNumbers(String batchNumbers) {
+        this.batchNumbers = batchNumbers == null ? null : batchNumbers.trim();
+    }
+
+    public BigDecimal getDeclPostTax() {
+        return declPostTax;
+    }
+
+    public void setDeclPostTax(BigDecimal declPostTax) {
+        this.declPostTax = declPostTax;
+    }
+
+    public String getShopId() {
+        return shopId;
+    }
+
+    public void setShopId(String shopId) {
+        this.shopId = shopId == null ? null : shopId.trim();
+    }
+
+    public String getExtraTag() {
+        return extraTag;
+    }
+
+    public void setExtraTag(String extraTag) {
+        this.extraTag = extraTag == null ? null : extraTag.trim();
+    }
+
+    public String getCurrencyCode() {
+        return currencyCode;
+    }
+
+    public void setCurrencyCode(String currencyCode) {
+        this.currencyCode = currencyCode == null ? null : currencyCode.trim();
+    }
+
+    public String getWsFlag() {
+        return wsFlag;
+    }
+
+    public void setWsFlag(String wsFlag) {
+        this.wsFlag = wsFlag == null ? null : wsFlag.trim();
+    }
+
+    public String getBuyerPayCheck() {
+        return buyerPayCheck;
+    }
+
+    public void setBuyerPayCheck(String buyerPayCheck) {
+        this.buyerPayCheck = buyerPayCheck;
+    }
+
+    public String getWxOrderDetail() {
+        return wxOrderDetail;
+    }
+
+    public void setWxOrderDetail(String wxOrderDetail) {
+        this.wxOrderDetail = wxOrderDetail;
+    }
+
+    public String getClecOrderStatus() {
+        return clecOrderStatus;
+    }
+
+    public void setClecOrderStatus(String clecOrderStatus) {
+        this.clecOrderStatus = clecOrderStatus == null ? null : clecOrderStatus.trim();
+    }
+
+    public String getWayOrderStatus() {
+        return wayOrderStatus;
+    }
+
+    public void setWayOrderStatus(String wayOrderStatus) {
+        this.wayOrderStatus = wayOrderStatus == null ? null : wayOrderStatus.trim();
+    }
+
+    public String getProjectCheckStatus() {
+        return projectCheckStatus;
+    }
+
+    public void setProjectCheckStatus(String projectCheckStatus) {
+        this.projectCheckStatus = projectCheckStatus == null ? null : projectCheckStatus.trim();
+    }
+
+    public String getPlayOrderStatus() {
+        return playOrderStatus;
+    }
+
+    public void setPlayOrderStatus(String playOrderStatus) {
+        this.playOrderStatus = playOrderStatus == null ? null : playOrderStatus.trim();
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    public String getCreaterSn() {
+        return createrSn;
+    }
+
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn == null ? null : createrSn.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModerSn() {
+        return moderSn;
+    }
+
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn == null ? null : moderSn.trim();
+    }
+
+    public Date getModTime() {
+        return modTime;
+    }
+
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    public Date getTstm() {
+        return tstm;
+    }
+
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    public String getExField() {
+        return exField;
+    }
+
+    public void setExField(String exField) {
+        this.exField = exField == null ? null : exField.trim();
+    }
+
+    public String getExField2() {
+        return exField2;
+    }
+
+    public void setExField2(String exField2) {
+        this.exField2 = exField2 == null ? null : exField2.trim();
+    }
+
+    public String getExField3() {
+        return exField3;
+    }
+
+    public void setExField3(String exField3) {
+        this.exField3 = exField3 == null ? null : exField3.trim();
+    }
+
+    public String getExField4() {
+        return exField4;
+    }
+
+    public void setExField4(String exField4) {
+        this.exField4 = exField4 == null ? null : exField4.trim();
+    }
+
+    public String getExField5() {
+        return exField5;
+    }
+
+    public void setExField5(String exField5) {
+        this.exField5 = exField5 == null ? null : exField5.trim();
+    }
+}

+ 33 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysUserController.java

@@ -1,19 +1,25 @@
 package com.kmall.admin.fromcomm.controller;
 package com.kmall.admin.fromcomm.controller;
 
 
+import com.kmall.admin.dto.SysUserDto;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.annotation.SysLog;
 import com.kmall.common.annotation.SysLog;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.service.SysUserRoleService;
 import com.kmall.admin.fromcomm.service.SysUserRoleService;
 import com.kmall.admin.fromcomm.service.SysUserService;
 import com.kmall.admin.fromcomm.service.SysUserService;
+import com.kmall.common.constant.JxlsXmlTemplateName;
 import com.kmall.common.utils.*;
 import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
 import com.kmall.common.validator.Assert;
 import com.kmall.common.validator.Assert;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.apache.shiro.crypto.hash.Sha256Hash;
 import org.apache.shiro.crypto.hash.Sha256Hash;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -31,6 +37,8 @@ public class SysUserController extends AbstractController {
     private SysUserService sysUserService;
     private SysUserService sysUserService;
     @Autowired
     @Autowired
     private SysUserRoleService sysUserRoleService;
     private SysUserRoleService sysUserRoleService;
+    @Autowired
+    private ExcelUtil excelUtil;
 
 
     /**
     /**
      * 所有用户列表
      * 所有用户列表
@@ -154,4 +162,29 @@ public class SysUserController extends AbstractController {
 
 
         return R.ok();
         return R.ok();
     }
     }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/sysUserUpload")
+    public R storeUpload(@RequestParam("file") MultipartFile file) {
+        List<SysUserDto> sysUserDtoList = new ArrayList<>();//信息
+        try {
+            SysUserDto storeGoodsDto = new SysUserDto();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("SysUserDto", storeGoodsDto);
+            beans.put("SysUserDtoList", sysUserDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.SYS_USER_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        sysUserService.uploadExcel(sysUserDtoList);
+        //上传文件
+        return R.ok("导入成功!");
+    }
+
 }
 }

+ 111 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/UploadStoreIdController.java

@@ -0,0 +1,111 @@
+package com.kmall.admin.fromcomm.controller;
+
+import com.kmall.admin.dto.CateStoreDto;
+import com.kmall.admin.dto.CopyBrandDto;
+import com.kmall.admin.dto.CopyCategoryDto;
+import com.kmall.admin.dto.StoreIdDto;
+import com.kmall.admin.service.BrandService;
+import com.kmall.admin.service.CategoryService;
+import com.kmall.admin.service.StoreService;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.R;
+import com.kmall.common.utils.RRException;
+import com.kmall.common.utils.excel.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 批量上传公共类
+ * @author huangyq
+ * @version 1.0
+ * 2019-10-25 10:40
+ */
+@RestController
+@RequestMapping("/uploadCommon")
+public class UploadStoreIdController extends AbstractController {
+    @Autowired
+    private StoreService storeService;
+    @Autowired
+    private CategoryService categoryService;
+    @Autowired
+    private BrandService brandService;
+    @Autowired
+    private ExcelUtil excelUtil;
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/storeIdUpload")
+    public R storeIdUpload(@RequestParam("file") MultipartFile file) {
+        List<StoreIdDto> storeIdDtoList = new ArrayList<>();//信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("StoreIdDtoList", storeIdDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.STORE_ID_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+//        throw new RRException("导入成功");
+        String storeIds = storeService.checkStoreIdUpload(storeIdDtoList);
+        //上传文件
+        return R.ok("导入成功").put("storeIds", storeIds);
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/cateStoreUpload")
+    public R cateStoreUpload(@RequestParam("file") MultipartFile file) {
+        List<CateStoreDto> cateStoreDtoList = new ArrayList<>();//信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("CateStoreDtoList", cateStoreDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.CATE_STORE_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+//        throw new RRException("导入成功");
+        CopyCategoryDto copyCategoryDto = categoryService.checkCateStoreUpload(cateStoreDtoList);
+        //上传文件
+        return R.ok("导入成功").put("copyCategoryDto", copyCategoryDto);
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/brandStoreUpload")
+    public R brandStoreUpload(@RequestParam("file") MultipartFile file) {
+        List<CateStoreDto> cateStoreDtoList = new ArrayList<>();//信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("CateStoreDtoList", cateStoreDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.CATE_STORE_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+//        throw new RRException("导入成功");
+        CopyBrandDto copyBrandDto = brandService.checkBrandStoreUpload(cateStoreDtoList);
+        //上传文件
+        return R.ok("导入成功").put("copyBrandDto", copyBrandDto);
+    }
+}

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

@@ -2,6 +2,7 @@ package com.kmall.admin.fromcomm.dao;
 
 
 import com.kmall.admin.fromcomm.entity.SysRoleEntity;
 import com.kmall.admin.fromcomm.entity.SysRoleEntity;
 import com.kmall.manager.dao.BaseDao;
 import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -18,4 +19,6 @@ public interface SysRoleDao extends BaseDao<SysRoleEntity> {
      * 查询用户创建的角色ID列表
      * 查询用户创建的角色ID列表
      */
      */
     List<Long> queryRoleIdList(Long createUserId);
     List<Long> queryRoleIdList(Long createUserId);
+
+    SysRoleEntity queryObjectByName(@Param("roleName") String roleName);
 }
 }

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

@@ -14,4 +14,6 @@ import org.springframework.stereotype.Component;
 public interface SysSmsLogDao extends BaseDao<SysSmsLogEntity> {
 public interface SysSmsLogDao extends BaseDao<SysSmsLogEntity> {
 
 
     SysSmsLogEntity querySmsCodeByUserId(Long userId);
     SysSmsLogEntity querySmsCodeByUserId(Long userId);
+
+    SysSmsLogEntity querySmsCodeByMobile(String mobile);
 }
 }

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

@@ -33,4 +33,6 @@ public interface SysRoleService {
      * 查询用户创建的角色ID列表
      * 查询用户创建的角色ID列表
      */
      */
     List<Long> queryRoleIdList(Long createUserId);
     List<Long> queryRoleIdList(Long createUserId);
+
+    SysRoleEntity queryObjectByName(String roleName);
 }
 }

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/SysUserService.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.fromcomm.service;
 package com.kmall.admin.fromcomm.service;
 
 
+import com.kmall.admin.dto.SysUserDto;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -73,4 +74,12 @@ public interface SysUserService {
      * @param newPassword 新密码
      * @param newPassword 新密码
      */
      */
     int updatePassword(Long userId, String password, String newPassword);
     int updatePassword(Long userId, String password, String newPassword);
+
+    /**
+     * 批量导入
+     *
+     * @param sysUserDtoList
+     * @return
+     */
+    int uploadExcel(List<SysUserDto> sysUserDtoList);
 }
 }

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

@@ -139,4 +139,9 @@ public class SysRoleServiceImpl implements SysRoleService {
             throw new RRException("新增角色的权限,已超出你的权限范围");
             throw new RRException("新增角色的权限,已超出你的权限范围");
         }
         }
     }
     }
+
+    @Override
+    public SysRoleEntity queryObjectByName(String roleName) {
+        return sysRoleDao.queryObjectByName(roleName);
+    }
 }
 }

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

@@ -94,4 +94,9 @@ public class SysSmsLogServiceImpl implements SysSmsLogService {
     public SysSmsLogEntity querySmsCodeByUserId(Long userId) {
     public SysSmsLogEntity querySmsCodeByUserId(Long userId) {
         return smsLogDao.querySmsCodeByUserId(userId);
         return smsLogDao.querySmsCodeByUserId(userId);
     }
     }
+
+    @Override
+    public SysSmsLogEntity querySmsCodeByMobile(String mobile) {
+        return smsLogDao.querySmsCodeByMobile(mobile);
+    }
 }
 }

+ 183 - 4
kmall-admin/src/main/java/com/kmall/admin/fromcomm/service/impl/SysUserServiceImpl.java

@@ -1,6 +1,16 @@
 package com.kmall.admin.fromcomm.service.impl;
 package com.kmall.admin.fromcomm.service.impl;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dao.ExportExceptionDataDao;
+import com.kmall.admin.dao.MerchDao;
+import com.kmall.admin.dao.StoreDao;
+import com.kmall.admin.dao.ThirdMerchantBizDao;
+import com.kmall.admin.dto.SysUserDto;
+import com.kmall.admin.entity.ExportExceptionDataEntity;
+import com.kmall.admin.entity.MerchEntity;
+import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.ThirdMerchantBizEntity;
+import com.kmall.admin.fromcomm.entity.SysRoleEntity;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.Global;
 import com.kmall.common.Global;
 import com.kmall.admin.fromcomm.dao.SysUserDao;
 import com.kmall.admin.fromcomm.dao.SysUserDao;
@@ -16,10 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 
 
 /**
 /**
@@ -38,6 +45,14 @@ public class SysUserServiceImpl implements SysUserService {
     private SysUserRoleService sysUserRoleService;
     private SysUserRoleService sysUserRoleService;
     @Autowired
     @Autowired
     private SysRoleService sysRoleService;
     private SysRoleService sysRoleService;
+    @Autowired
+    private StoreDao storeDao;
+    @Autowired
+    private MerchDao merchDao;
+    @Autowired
+    private ThirdMerchantBizDao thirdMerchantBizDao;
+    @Autowired
+    private ExportExceptionDataDao exportExceptionDataDao;
 
 
     @Override
     @Override
     public List<String> queryAllPerms(Long userId) {
     public List<String> queryAllPerms(Long userId) {
@@ -217,4 +232,168 @@ public class SysUserServiceImpl implements SysUserService {
             throw new RRException("新增用户所选角色,不是本人创建");
             throw new RRException("新增用户所选角色,不是本人创建");
         }
         }
     }
     }
+
+    @Override
+    public int uploadExcel(List<SysUserDto> sysUserDtoList){
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        String merchSn = user.getMerchSn();
+        boolean isFail = false;
+        List<String> failThirdMerchSnList = new ArrayList<>(), failMerchSnList = new ArrayList<>(),
+                failStoreNameList = new ArrayList<>(), failRoleTypeList = new ArrayList<>(),
+                failEmailList = new ArrayList<>(), failMobieList = new ArrayList<>(), failRoleList = new ArrayList<>();
+        if (sysUserDtoList != null && sysUserDtoList.size() > 0) {
+            for (int i = 0; i < sysUserDtoList.size(); i++) {
+                SysUserDto sysUserDto = sysUserDtoList.get(i);
+                SysUserEntity sysUserEntity = new SysUserEntity();
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(sysUserDto);
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("userName", "用户名");
+                builder.put("email", "邮箱");
+                builder.put("mobile", "手机");
+                builder.put("roleType", "角色类型");
+                builder.put("roleName", "角色名称");
+
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+                if (Dict.roleType.item_2.getItem().equalsIgnoreCase(sysUserDto.getRoleType())) {
+                    builder.put("merchSn", "商户编号");
+                    builder.put("thirdPartyMerchCode", "第三方商户代码");
+                    builder.put("storeName", "门店名称");
+                }else if (Dict.roleType.item_3.getItem().equalsIgnoreCase(sysUserDto.getRoleType())) {
+                    builder.put("merchSn", "商户编号");
+                }else if (Dict.roleType.item_4.getItem().equalsIgnoreCase(sysUserDto.getRoleType())) {
+                    builder.put("merchSn", "商户编号");
+                    builder.put("thirdPartyMerchCode", "第三方商户代码");
+                }else if (Dict.roleType.item_1.getItem().equalsIgnoreCase(sysUserDto.getRoleType())) {
+                    sysUserEntity.setMerchSn(null);
+                    sysUserEntity.setThirdPartyMerchCode(null);
+                    sysUserEntity.setStoreId(null);
+                }
+                r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+                if(!sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_1.getItem()) && !sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_2.getItem())
+                        && !sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_3.getItem()) && !sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_4.getItem())){
+                    isFail = true;
+                    failRoleTypeList.add(sysUserDto.getStoreName());
+                }
+                if (!user.getEmail().matches("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$")) {
+                    isFail = true;
+                    failEmailList.add(sysUserDto.getStoreName());
+                }
+                if (!PhoneFormatCheckUtils.isPhoneLegal(user.getMobile())) {
+                    isFail = true;
+                    failMobieList.add(sysUserDto.getStoreName());
+                }
+                SysRoleEntity sysRoleEntity = sysRoleService.queryObjectByName(sysUserDto.getRoleName());
+                if(sysRoleEntity == null){
+                    isFail = true;
+                    failRoleList.add(sysUserDto.getStoreName());
+                }else {
+                    sysUserEntity.setRoleId(sysRoleEntity.getRoleId());
+                }
+                if(sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_4.getItem()) ||
+                        sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_2.getItem()) ||
+                        sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_3.getItem())){
+                    MerchEntity merchEntity = merchDao.findByMerchSn(sysUserDto.getMerchSn());
+                    if(merchEntity != null){
+                        sysUserEntity.setMerchSn(merchEntity.getMerchSn());
+                    }else{//商户不存在
+                        isFail = true;
+                        failMerchSnList.add(sysUserDto.getStoreName());
+                    }
+                }
+                if(sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_2.getItem()) ||
+                        sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_4.getItem())){
+                    ThirdMerchantBizEntity thirdMerchantBizEntity = thirdMerchantBizDao.getThirdMerchangByCode(sysUserDto.getThirdPartyMerchCode());
+                    if(thirdMerchantBizEntity != null){
+                        sysUserEntity.setThirdPartyMerchCode(thirdMerchantBizEntity.getThirdPartyMerchCode());
+                    }else{//第三方商户不存在
+                        isFail = true;
+                        failThirdMerchSnList.add(sysUserDto.getStoreName());
+                    }
+                }
+                if(sysUserDto.getRoleType().equalsIgnoreCase(Dict.roleType.item_2.getItem())){
+                    StoreEntity store = storeDao.queryObjectByName(sysUserDto.getStoreName().trim());
+                    if (store != null) {
+                        sysUserEntity.setStoreId(Integer.parseInt(String.valueOf(store.getId())));
+                        sysUserEntity.setMerchSn(store.getMerchSn());
+                    }else{
+                        isFail = true;
+                        failStoreNameList.add(sysUserDto.getStoreName());
+                    }
+                }
+                sysUserEntity.setUsername(sysUserDto.getUserName());
+                sysUserEntity.setEmail(sysUserDto.getEmail());
+                sysUserEntity.setMobile(sysUserDto.getMobile());
+                sysUserEntity.setRoleType(sysUserDto.getRoleType());
+                sysUserEntity.setCreateUserId(user.getUserId());
+                sysUserEntity.setStatus(Integer.parseInt(Dict.status.item_1.getItem()));
+                sysUserEntity.setCreateTime(new Date());
+                if(!isFail){
+                    //sha256加密
+                    sysUserEntity.setPassword(new Sha256Hash(Global.DEFAULT_PASS_WORD).toHex());
+                    sysUserDao.save(sysUserEntity);
+
+                    //检查角色是否越权
+                    checkRole(sysUserEntity);
+
+                    //保存用户与角色关系
+                    sysUserRoleService.saveOrUpdate(sysUserEntity.getUserId(), sysUserEntity.getRoleId());
+                }
+
+                ExportExceptionDataEntity exportExceptionDataEntity = new ExportExceptionDataEntity();
+                exportExceptionDataEntity.setCreaterSn(user.getUserId().toString());
+                exportExceptionDataEntity.setUserId(user.getUserId().intValue());
+                exportExceptionDataEntity.setCreateTime(new Date());
+                exportExceptionDataEntity.setModTime(new Date());
+                exportExceptionDataEntity.setMerchSn(merchSn);
+                exportExceptionDataEntity.setStoreId(user.getStoreId());
+                exportExceptionDataEntity.setExportDataType(Dict.exportDataType.item_3.getItem());
+
+                if(failEmailList != null && failEmailList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("邮箱格式不正确,请检查管理员excel中门店名称【"+ failEmailList +"】的邮箱列信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【邮箱格式不正确】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failMobieList != null && failMobieList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("手机格式不正确,请检查管理员excel中门店名称【"+ failMobieList +"】的手机列信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【手机格式不正确】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failRoleList != null && failRoleList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("角色信息不存在,请检查管理员excel中门店名称【"+ failRoleList +"】的角色名称列信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【角色信息不存在】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failStoreNameList != null && failStoreNameList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("门店名称不存在,请检查管理员excel中门店名称【"+ failStoreNameList +"】的门店名称信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【门店名称不存在】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failThirdMerchSnList != null && failThirdMerchSnList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("第三方商户代码不存在,请检查管理员excel中门店名称【"+failThirdMerchSnList+"】的第三方商户代码信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【第三方商户代码不存在】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failMerchSnList != null && failMerchSnList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("商户编号不存在!请检查管理员excel中门店名称【" + failMerchSnList + "】的商户列信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【商户编号不存在】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failRoleTypeList != null && failRoleTypeList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("商户编码不存在,请检查管理员excel中门店名称【"+failRoleTypeList+"】的角色类型列信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常【商户编码不存在】,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+            }
+        }else{
+            throw new RRException("导入数据为空,或者检查数据是否为空");
+        }
+        throw new RRException("导入成功!");
+//        return 1;
+    }
 }
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/service/AdService.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.CopyAdDto;
 import com.kmall.admin.entity.AdEntity;
 import com.kmall.admin.entity.AdEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -69,4 +70,6 @@ public interface AdService {
      * @return 删除条数
      * @return 删除条数
      */
      */
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
+
+    int saveCopyAd(CopyAdDto copyAdDto);
 }
 }

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

@@ -1,5 +1,8 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.CateStoreDto;
+import com.kmall.admin.dto.CopyBrandDto;
+import com.kmall.admin.dto.CopyCategoryDto;
 import com.kmall.admin.entity.BrandEntity;
 import com.kmall.admin.entity.BrandEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -69,4 +72,8 @@ public interface BrandService {
      * @return 删除条数
      * @return 删除条数
      */
      */
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
+
+    CopyBrandDto checkBrandStoreUpload(List<CateStoreDto> cateStoreDtoList);
+
+    int saveCopyCategory(CopyBrandDto copyBrandDto);
 }
 }

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

@@ -1,5 +1,7 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.CateStoreDto;
+import com.kmall.admin.dto.CopyCategoryDto;
 import com.kmall.admin.entity.CategoryEntity;
 import com.kmall.admin.entity.CategoryEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -69,4 +71,8 @@ public interface CategoryService {
      * @return 删除条数
      * @return 删除条数
      */
      */
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
+
+    CopyCategoryDto checkCateStoreUpload(List<CateStoreDto> cateStoreDtoList);
+
+    int saveCopyCategory(CopyCategoryDto copyCategoryDto);
 }
 }

+ 3 - 0
kmall-admin/src/main/java/com/kmall/admin/service/FreightService.java

@@ -1,5 +1,6 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.CopyFreightDto;
 import com.kmall.admin.entity.FreightEntity;
 import com.kmall.admin.entity.FreightEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -77,4 +78,6 @@ public interface FreightService {
      * @return 删除条数
      * @return 删除条数
      */
      */
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
+
+    int saveCopyFreight(CopyFreightDto copyFreightDto);
 }
 }

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

@@ -4,6 +4,7 @@ import com.kmall.admin.dto.OrderExpressDto;
 import com.kmall.admin.entity.OfflineCartEntity;
 import com.kmall.admin.entity.OfflineCartEntity;
 import com.kmall.admin.entity.OrderEntity;
 import com.kmall.admin.entity.OrderEntity;
 import com.kmall.admin.entity.OrderRefundEntity;
 import com.kmall.admin.entity.OrderRefundEntity;
+import com.kmall.admin.entity.WxOrderEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
 import com.kmall.common.utils.print.ticket.item.Ticket;
 import com.kmall.common.utils.print.ticket.item.Ticket;
@@ -117,4 +118,6 @@ public interface OrderService {
 
 
     int queryStoreTopicOrderTotal(Map<String, Object> map);
     int queryStoreTopicOrderTotal(Map<String, Object> map);
 
 
+    List<WxOrderEntity> wxOrderResendQueryAllList(Map<String, Object> map);
+
 }
 }

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

@@ -1,5 +1,6 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -108,4 +109,12 @@ public interface ProductStoreRelaService {
      * @return 总数
      * @return 总数
      */
      */
     int queryGoodsRealListByTopicIdTotal(Map<String, Object> map);
     int queryGoodsRealListByTopicIdTotal(Map<String, Object> map);
+
+    /**
+     * 批量导入
+     *
+     * @param storeGoodsDtoList
+     * @return
+     */
+    int uploadExcel(List<StoreGoodsDto> storeGoodsDtoList);
 }
 }

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/service/StoreService.java

@@ -1,5 +1,7 @@
 package com.kmall.admin.service;
 package com.kmall.admin.service;
 
 
+import com.kmall.admin.dto.StoreDto;
+import com.kmall.admin.dto.StoreIdDto;
 import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.entity.StoreEntity;
 
 
 import java.util.List;
 import java.util.List;
@@ -69,4 +71,16 @@ public interface StoreService {
      * @return 删除条数
      * @return 删除条数
      */
      */
     int deleteBatch(Integer[] ids);
     int deleteBatch(Integer[] ids);
+
+    /**
+     * 批量导入
+     *
+     * @param storeDtoList
+     * @return
+     */
+    int uploadExcel(List<StoreDto> storeDtoList);
+
+    List<StoreEntity> queryExportList(Map<String, Object> map);
+
+    String checkStoreIdUpload(List<StoreIdDto> storeIdDtoList);
 }
 }

+ 40 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/AdServiceImpl.java

@@ -2,7 +2,10 @@ package com.kmall.admin.service.impl;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dao.AdDao;
 import com.kmall.admin.dao.AdDao;
+import com.kmall.admin.dao.StoreDao;
+import com.kmall.admin.dto.CopyAdDto;
 import com.kmall.admin.entity.AdEntity;
 import com.kmall.admin.entity.AdEntity;
+import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.service.AdService;
 import com.kmall.admin.service.AdService;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.R;
@@ -11,6 +14,8 @@ import com.kmall.common.utils.ValidatorUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -25,6 +30,8 @@ import java.util.Map;
 public class AdServiceImpl implements AdService {
 public class AdServiceImpl implements AdService {
     @Autowired
     @Autowired
     private AdDao adDao;
     private AdDao adDao;
+    @Autowired
+    private StoreDao storeDao;
 
 
     @Override
     @Override
     public AdEntity queryObject(Integer id) {
     public AdEntity queryObject(Integer id) {
@@ -82,4 +89,37 @@ public class AdServiceImpl implements AdService {
     public int deleteBatch(Integer[]ids) {
     public int deleteBatch(Integer[]ids) {
         return adDao.deleteBatch(ids);
         return adDao.deleteBatch(ids);
     }
     }
+
+    @Override
+    public int saveCopyAd(CopyAdDto copyAdDto){
+        AdEntity adEntity = adDao.queryObject(copyAdDto.getAdId());
+        if(adEntity != null){
+            List<Integer> storeIdList = new ArrayList<>();
+            String[] storeIds = copyAdDto.getStoreList().split(";");
+            for(int i = 0; i < storeIds.length; i++){
+                storeIdList.add(Integer.valueOf(storeIds[i]));
+            }
+            for(int i = 0; i < storeIdList.size(); i++){
+                AdEntity ad = new AdEntity();
+                StoreEntity storeEntity = storeDao.queryObject(storeIdList.get(i));
+                if(storeEntity == null){
+                    throw new RRException("门店不存在");
+                }
+                ad.setName(adEntity.getName());
+                ad.setAdPositionId(adEntity.getAdPositionId());
+                ad.setMediaType(adEntity.getMediaType());
+                ad.setSortOrder(adEntity.getSortOrder());
+                ad.setLink(adEntity.getLink());
+                ad.setImageUrl(adEntity.getImageUrl());
+                ad.setContent(adEntity.getContent());
+                ad.setEndTime(adEntity.getEndTime());
+                ad.setEnabled(adEntity.getEnabled());
+                ad.setMerchSn(storeEntity.getMerchSn());
+                ad.setStoreId(storeIdList.get(i));
+                //复制广告信息不保存其他门店的优惠券、活动
+                adDao.save(ad);
+            }
+        }
+        return 1;
+    }
 }
 }

+ 111 - 7
kmall-admin/src/main/java/com/kmall/admin/service/impl/BrandServiceImpl.java

@@ -1,14 +1,20 @@
 package com.kmall.admin.service.impl;
 package com.kmall.admin.service.impl;
 
 
-import com.kmall.admin.dao.BrandDao;
-import com.kmall.admin.dao.GoodsDao;
-import com.kmall.admin.entity.BrandEntity;
-import com.kmall.admin.entity.GoodsEntity;
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dao.*;
+import com.kmall.admin.dto.CateStoreDto;
+import com.kmall.admin.dto.CopyBrandDto;
+import com.kmall.admin.entity.*;
 import com.kmall.admin.service.BrandService;
 import com.kmall.admin.service.BrandService;
+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.RRException;
+import com.kmall.common.utils.ValidatorUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -25,7 +31,11 @@ public class BrandServiceImpl implements BrandService {
     @Autowired
     @Autowired
     private BrandDao brandDao;
     private BrandDao brandDao;
     @Autowired
     @Autowired
-    private GoodsDao goodsDao;
+    private ProductStoreRelaDao productStoreRelaDao;
+    @Autowired
+    private StoreDao storeDao;
+    @Autowired
+    private CategoryDao categoryDao;
 
 
     @Override
     @Override
     public BrandEntity queryObject(Integer id) {
     public BrandEntity queryObject(Integer id) {
@@ -63,15 +73,109 @@ public class BrandServiceImpl implements BrandService {
             BrandEntity brand = queryObject(id);
             BrandEntity brand = queryObject(id);
 
 
             Map<String, Object> map = new HashMap<>();
             Map<String, Object> map = new HashMap<>();
+            map.put("storeId", brand.getStoreId());
             map.put("brandId", id);
             map.put("brandId", id);
-            List<GoodsEntity> goodsList = goodsDao.queryList(map);
+            List<ProductStoreRelaEntity> goodsList = productStoreRelaDao.queryList(map);
 
 
             if (goodsList != null && goodsList.size() > 0) {
             if (goodsList != null && goodsList.size() > 0) {
-                throw new RRException("品牌【" + brand.getName() + "】下还存在【" + goodsList.size() + "】个商品,删除失败!");
+                throw new RRException("门店【"+brand.getStoreId()+"】品牌【" + brand.getName() + "】下还存在【" + goodsList.size() + "】个商品,删除失败!");
             }
             }
             delete(id);
             delete(id);
         }
         }
 
 
         return 1;
         return 1;
     }
     }
+
+    /**
+     * 检查批量导入品牌数据
+     * @param cateStoreDtoList
+     * @return
+     */
+    @Override
+    public CopyBrandDto checkBrandStoreUpload(List<CateStoreDto> cateStoreDtoList){
+        Boolean isFalse = false;
+        List<String> storeIdErrorList = new ArrayList<>();
+        List<String> cateIdErrorList = new ArrayList<>();
+        for(CateStoreDto cateStoreDto : cateStoreDtoList) {
+            Map<String, Object> valideDate = MapBeanUtil.fromObject(cateStoreDto);
+            ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+            builder.put("categoryId", "分类id");
+            builder.put("storeId", "门店id");
+            R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+            if (Integer.valueOf(r.get("code").toString()) != 0) {
+                throw new RRException(r.get("msg").toString());
+            }
+            StoreEntity storeEntity = storeDao.queryObject(cateStoreDto.getStoreId());
+            if (storeEntity == null) {
+                isFalse = true;
+                storeIdErrorList.add(cateStoreDto.getStoreId());
+            }
+            CategoryEntity categoryEntity = categoryDao.queryObject(cateStoreDto.getCategoryId());
+            if (categoryEntity == null) {
+                isFalse = true;
+                cateIdErrorList.add(cateStoreDto.getCategoryId());
+            }else{
+                if(categoryEntity.getStoreId() != Integer.parseInt(cateStoreDto.getStoreId())){
+                    throw new RRException("分类id【" + cateStoreDto.getCategoryId() + "】不属于门店id【"+cateStoreDto.getStoreId()+"】内,请检查");
+                }
+            }
+        }
+        if(isFalse){
+            if(storeIdErrorList!=null && storeIdErrorList.size()>0){
+                throw new RRException("门店id不存在,不存在id【" + storeIdErrorList + "】");
+            }
+            if(cateIdErrorList!=null && cateIdErrorList.size()>0){
+                throw new RRException("分类id不存在,不存在id【" + cateIdErrorList + "】");
+            }
+        }else{
+            CopyBrandDto copyBrandDto = new CopyBrandDto();
+            StringBuffer storeIds = new StringBuffer();
+            StringBuffer cateIds = new StringBuffer();
+            for(CateStoreDto cateStoreDto : cateStoreDtoList){
+                storeIds.append(cateStoreDto.getStoreId()+";");
+                cateIds.append(cateStoreDto.getCategoryId()+";");
+            }
+            copyBrandDto.setStoreList(storeIds.toString());
+            copyBrandDto.setCategoryList(cateIds.toString());
+            return copyBrandDto;
+        }
+        return null;
+    }
+
+    public int saveCopyCategory(CopyBrandDto copyBrandDto){
+        BrandEntity brandEntity = brandDao.queryObject(copyBrandDto.getBrandId());
+        if(brandEntity != null){
+            List<Integer> storeIdList = new ArrayList<>();
+            List<Integer> cateIdList = new ArrayList<>();
+            String[] storeIds = copyBrandDto.getStoreList().split(";");
+            String[] cateIds = copyBrandDto.getCategoryList().split(";");
+            for(int i = 0; i < storeIds.length; i++){
+                storeIdList.add(Integer.valueOf(storeIds[i]));
+                cateIdList.add(Integer.valueOf(cateIds[i]));
+            }
+            for(int i = 0; i < storeIdList.size(); i++){
+                BrandEntity brand = new BrandEntity();
+                StoreEntity storeEntity = storeDao.queryObject(storeIdList.get(i));
+                if(storeEntity == null){
+                    throw new RRException("门店不存在");
+                }
+                brand.setName(brandEntity.getName());
+                brand.setListPicUrl(brandEntity.getListPicUrl());
+                brand.setSimpleDesc(brandEntity.getSimpleDesc());
+                brand.setPicUrl(brandEntity.getPicUrl());
+                brand.setSortOrder(brandEntity.getSortOrder());
+                brand.setIsShow(brandEntity.getIsShow());
+                brand.setFloorPrice(brandEntity.getFloorPrice());
+                brand.setAppListPicUrl(brandEntity.getAppListPicUrl());
+                brand.setIsNew(brandEntity.getIsNew());
+                brand.setNewPicUrl(brandEntity.getNewPicUrl());
+                brand.setNewSortOrder(brandEntity.getNewSortOrder());
+                brand.setCategoryId(cateIdList.get(i));
+                brand.setMerchSn(storeEntity.getMerchSn());
+                brand.setStoreId(storeIdList.get(i));
+                brandDao.save(brand);
+            }
+        }
+        return 1;
+    }
 }
 }

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

@@ -4,9 +4,13 @@ import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dao.CategoryDao;
 import com.kmall.admin.dao.CategoryDao;
 import com.kmall.admin.dao.GoodsDao;
 import com.kmall.admin.dao.GoodsDao;
 import com.kmall.admin.dao.ProductStoreRelaDao;
 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.CategoryEntity;
 import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
+import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.service.CategoryService;
 import com.kmall.admin.service.CategoryService;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.MapBeanUtil;
@@ -16,6 +20,7 @@ import com.kmall.common.utils.ValidatorUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -33,6 +38,8 @@ public class CategoryServiceImpl implements CategoryService {
     private CategoryDao categoryDao;
     private CategoryDao categoryDao;
     @Autowired
     @Autowired
     private ProductStoreRelaDao productStoreRelaDao;
     private ProductStoreRelaDao productStoreRelaDao;
+    @Autowired
+    private StoreDao storeDao;
 
 
     @Override
     @Override
     public CategoryEntity queryObject(Integer id) {
     public CategoryEntity queryObject(Integer id) {
@@ -94,7 +101,21 @@ public class CategoryServiceImpl implements CategoryService {
 
 
     @Override
     @Override
     public int delete(Integer id) {
     public int delete(Integer id) {
-        return categoryDao.delete(id);
+        CategoryEntity categoryEntity = categoryDao.queryObject(id);
+        if(categoryEntity != null){
+            if(categoryEntity.getLevel().equalsIgnoreCase(Dict.Level.item_L1.getItem())){//一级分类先删除二级分类
+                Map map = new HashMap();
+                map.put("parentId", categoryEntity.getId());
+                List<CategoryEntity> list = categoryDao.queryList(map);
+                for(CategoryEntity category: list){
+                    categoryDao.delete(category.getId());
+                }
+                categoryDao.delete(id);
+            }else{
+                return categoryDao.delete(id);
+            }
+        }
+        return 1;
     }
     }
 
 
     @Override
     @Override
@@ -112,6 +133,7 @@ public class CategoryServiceImpl implements CategoryService {
                         map.clear();
                         map.clear();
                         map.put("categoryId", categoryEntity.getId());
                         map.put("categoryId", categoryEntity.getId());
                         map.put("isDelete", Dict.isDelete.item_1.getItem());
                         map.put("isDelete", Dict.isDelete.item_1.getItem());
+                        map.put("storeId", categoryEntity.getStoreId());
                         List<ProductStoreRelaEntity> storeRelaEntityList = productStoreRelaDao.queryList(map);
                         List<ProductStoreRelaEntity> storeRelaEntityList = productStoreRelaDao.queryList(map);
                         if (storeRelaEntityList != null) {
                         if (storeRelaEntityList != null) {
                             goodsTotal += storeRelaEntityList.size();
                             goodsTotal += storeRelaEntityList.size();
@@ -139,4 +161,129 @@ public class CategoryServiceImpl implements CategoryService {
         }
         }
         return 1;
         return 1;
     }
     }
+
+    @Override
+    public CopyCategoryDto checkCateStoreUpload(List<CateStoreDto> cateStoreDtoList){
+        Boolean isFalse = false;
+        List<String> storeIdErrorList = new ArrayList<>();
+        List<String> cateIdErrorList = new ArrayList<>();
+        for(CateStoreDto cateStoreDto : cateStoreDtoList) {
+            Map<String, Object> valideDate = MapBeanUtil.fromObject(cateStoreDto);
+            ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+            builder.put("categoryId", "分类id");
+            builder.put("storeId", "门店id");
+            R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+            if (Integer.valueOf(r.get("code").toString()) != 0) {
+                throw new RRException(r.get("msg").toString());
+            }
+            StoreEntity storeEntity = storeDao.queryObject(cateStoreDto.getStoreId());
+            if (storeEntity == null) {
+                isFalse = true;
+                storeIdErrorList.add(cateStoreDto.getStoreId());
+            }
+            CategoryEntity categoryEntity = categoryDao.queryObject(cateStoreDto.getCategoryId());
+            if (categoryEntity == null) {
+                isFalse = true;
+                cateIdErrorList.add(cateStoreDto.getCategoryId());
+            }
+        }
+        if(isFalse){
+            if(storeIdErrorList!=null && storeIdErrorList.size()>0){
+                throw new RRException("门店id不存在,不存在id【" + storeIdErrorList + "】");
+            }
+            if(cateIdErrorList!=null && cateIdErrorList.size()>0){
+                throw new RRException("分类id不存在,不存在id【" + cateIdErrorList + "】");
+            }
+        }else{
+            CopyCategoryDto copyCategoryDto = new CopyCategoryDto();
+            StringBuffer storeIds = new StringBuffer();
+            StringBuffer cateIds = new StringBuffer();
+            for(CateStoreDto cateStoreDto : cateStoreDtoList){
+                storeIds.append(cateStoreDto.getStoreId()+";");
+                cateIds.append(cateStoreDto.getCategoryId()+";");
+            }
+            copyCategoryDto.setStoreList(storeIds.toString());
+            copyCategoryDto.setCategoryList(cateIds.toString());
+            return copyCategoryDto;
+        }
+        return null;
+    }
+
+    public int saveCopyCategory(CopyCategoryDto copyCategoryDto){
+        CategoryEntity categoryEntity = categoryDao.queryObject(copyCategoryDto.getCategoryId());
+        if(categoryEntity != null){
+            if(Dict.Level.item_L1.getItem().equalsIgnoreCase(categoryEntity.getLevel())){
+                List<Integer> storeIdList = new ArrayList<>();
+                String[] storeIds = copyCategoryDto.getStoreList().split(";");
+                for(int i = 0; i < storeIds.length; i++){
+                    storeIdList.add(Integer.valueOf(storeIds[i]));
+                }
+                for(int i = 0; i < storeIdList.size(); i++){
+                    CategoryEntity category = new CategoryEntity();
+                    category.setParentId(categoryEntity.getParentId());
+                    StoreEntity storeEntity = storeDao.queryObject(storeIdList.get(i));
+                    if(storeEntity == null){
+                        throw new RRException("门店不存在");
+                    }
+                    category.setName(categoryEntity.getName());
+                    category.setKeywords(categoryEntity.getKeywords());
+                    category.setFrontDesc(categoryEntity.getFrontDesc());
+                    category.setSortOrder(categoryEntity.getSortOrder());
+
+                    category.setShowIndex(categoryEntity.getShowIndex());
+                    category.setIsShow(categoryEntity.getIsShow());
+                    category.setBannerUrl(categoryEntity.getBannerUrl());
+                    category.setIconUrl(categoryEntity.getIconUrl());
+                    category.setImgUrl(categoryEntity.getImgUrl());
+                    category.setWapBannerUrl(categoryEntity.getWapBannerUrl());
+                    category.setLevel(categoryEntity.getLevel());
+                    category.setType(categoryEntity.getType());
+                    category.setFrontName(categoryEntity.getFrontName());
+                    category.setMerchSn(storeEntity.getMerchSn());
+                    category.setStoreId(storeIdList.get(i));
+                    categoryDao.save(category);
+                }
+            }else {
+                List<Integer> storeIdList = new ArrayList<>();
+                List<Integer> categoryIdList = new ArrayList<>();
+                String[] storeIds = copyCategoryDto.getStoreList().split(";");
+                String[] categoryIds = copyCategoryDto.getCategoryList().split(";");
+                for(int i = 0; i < storeIds.length; i++){
+                    storeIdList.add(Integer.valueOf(storeIds[i]));
+                    categoryIdList.add(Integer.valueOf(categoryIds[i]));
+                }
+                for(int i = 0; i < storeIdList.size(); i++){
+                    CategoryEntity category = new CategoryEntity();
+                    StoreEntity storeEntity = storeDao.queryObject(storeIdList.get(i));
+                    if(storeEntity == null){
+                        throw new RRException("门店不存在");
+                    }
+                    CategoryEntity parentCateEntity = categoryDao.queryObject(categoryIdList.get(i));
+                    if(parentCateEntity == null){
+                        throw new RRException("分类不存在");
+                    }
+                    category.setParentId(categoryIdList.get(i));
+                    category.setName(categoryEntity.getName());
+                    category.setKeywords(categoryEntity.getKeywords());
+                    category.setFrontDesc(categoryEntity.getFrontDesc());
+                    category.setSortOrder(categoryEntity.getSortOrder());
+
+                    category.setShowIndex(categoryEntity.getShowIndex());
+                    category.setIsShow(categoryEntity.getIsShow());
+                    category.setBannerUrl(categoryEntity.getBannerUrl());
+                    category.setIconUrl(categoryEntity.getIconUrl());
+                    category.setImgUrl(categoryEntity.getImgUrl());
+                    category.setWapBannerUrl(categoryEntity.getWapBannerUrl());
+                    category.setLevel(categoryEntity.getLevel());
+                    category.setType(categoryEntity.getType());
+                    category.setFrontName(categoryEntity.getFrontName());
+                    category.setMerchSn(storeEntity.getMerchSn());
+                    category.setStoreId(storeIdList.get(i));
+                    categoryDao.save(category);
+                }
+
+            }
+        }
+        return 1;
+    }
 }
 }

+ 64 - 16
kmall-admin/src/main/java/com/kmall/admin/service/impl/FreightServiceImpl.java

@@ -1,12 +1,9 @@
 package com.kmall.admin.service.impl;
 package com.kmall.admin.service.impl;
 
 
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableBiMap;
-import com.kmall.admin.dao.FreightDao;
-import com.kmall.admin.dao.FreightItemDao;
-import com.kmall.admin.dao.GoodsDao;
-import com.kmall.admin.entity.FreightEntity;
-import com.kmall.admin.entity.FreightItemEntity;
-import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.dao.*;
+import com.kmall.admin.dto.CopyFreightDto;
+import com.kmall.admin.entity.*;
 import com.kmall.admin.service.FreightService;
 import com.kmall.admin.service.FreightService;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.R;
@@ -16,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -35,7 +33,9 @@ public class FreightServiceImpl
     @Autowired
     @Autowired
     private FreightItemDao freightItemDao;
     private FreightItemDao freightItemDao;
     @Autowired
     @Autowired
-    private GoodsDao goodsDao;
+    private ProductStoreRelaDao productStoreRelaDao;
+    @Autowired
+    private StoreDao storeDao;
 
 
     @Override
     @Override
     public FreightEntity queryObject(Integer id) {
     public FreightEntity queryObject(Integer id) {
@@ -160,15 +160,15 @@ public class FreightServiceImpl
     @Override
     @Override
     public int delete(Integer id) {
     public int delete(Integer id) {
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
+        map.put("storeId", queryObject(id).getStoreId());
         map.put("freightId", id);
         map.put("freightId", id);
-        List<GoodsEntity> list = goodsDao.queryList(map);
+//        List<GoodsEntity> list = goodsDao.queryList(map);
+        List<ProductStoreRelaEntity> list = productStoreRelaDao.queryList(map);
 
 
         if (list != null && list.size() > 0) {
         if (list != null && list.size() > 0) {
             throw new RRException("此运费模版还有【" + list.size() + "】商品正在使用,不能删除!");
             throw new RRException("此运费模版还有【" + list.size() + "】商品正在使用,不能删除!");
         }
         }
-        if (freightItemDao.deleteByFreId(id) <= 0) {
-            throw new RRException("删除此运费模版详情失败!");
-        }
+        freightItemDao.deleteByFreId(id);
 
 
         return freightDao.delete(id);
         return freightDao.delete(id);
     }
     }
@@ -177,17 +177,65 @@ public class FreightServiceImpl
     public int deleteBatch(Integer[] ids) {
     public int deleteBatch(Integer[] ids) {
         for (int id : ids) {
         for (int id : ids) {
             Map<String, Object> map = new HashMap<>();
             Map<String, Object> map = new HashMap<>();
+            Integer storeId = queryObject(id).getStoreId();
+            map.put("storeId", storeId);
             map.put("freightId", id);
             map.put("freightId", id);
             map.put("isDelete", 0);
             map.put("isDelete", 0);
-            List<GoodsEntity> list = goodsDao.queryList(map);
+            List<ProductStoreRelaEntity> list = productStoreRelaDao.queryList(map);
 
 
             if (list != null && list.size() > 0) {
             if (list != null && list.size() > 0) {
-                throw new RRException("【" + id + "】运费模版还有【" + list.size() + "】个商品正在使用,不能删除!");
-            }
-            if (freightItemDao.deleteByFreId(id) <= 0) {
-                throw new RRException("删除【" + id + "】运费模版详情失败!");
+                throw new RRException("门店【"+ storeId +"】运费模版【" + id + "】还有【" + list.size() + "】个商品正在使用,不能删除!");
             }
             }
+            freightItemDao.deleteByFreId(id);
         }
         }
         return freightDao.deleteBatch(ids);
         return freightDao.deleteBatch(ids);
     }
     }
+
+    @Override
+    @Transactional
+    public int saveCopyFreight(CopyFreightDto copyFreightDto){
+        FreightEntity freightEntity = freightDao.queryObject(copyFreightDto.getFreightId());
+        if(freightEntity != null){
+            List<Integer> storeIdList = new ArrayList<>();
+            String[] storeIds = copyFreightDto.getStoreList().split(";");
+            for(int i = 0; i < storeIds.length; i++){
+                storeIdList.add(Integer.valueOf(storeIds[i]));
+            }
+            for(int i = 0; i < storeIdList.size(); i++){
+                FreightEntity freight = new FreightEntity();
+                StoreEntity storeEntity = storeDao.queryObject(storeIdList.get(i));
+                if(storeEntity == null){
+                    throw new RRException("门店不存在");
+                }
+                Map<String, Object> map = new HashMap<>();
+                map.put("storeId", storeEntity.getId());
+                map.put("merchSn", storeEntity.getMerchSn());
+                map.put("name", freightEntity.getName());
+                List<FreightEntity> list = queryList(map);
+                if (list != null && list.size() != 0) {
+                    throw new RRException("excel中的门店id【"+storeIdList.get(i)+"】运费模版名称【"+freightEntity.getName()+"】已存在!请检查!");
+                }
+                freight.setName(freightEntity.getName());
+                freight.setTemplateType(freightEntity.getTemplateType());
+                freight.setPricingManner(freightEntity.getPricingManner());
+                freight.setDefaultFreight(freightEntity.getDefaultFreight());
+                freight.setIsDefault(freightEntity.getIsDefault());
+                freight.setMerchSn(storeEntity.getMerchSn());
+                freight.setStoreId(storeIdList.get(i));
+                freightDao.save(freight);
+                FreightItemEntity itemEntity = freightItemDao.queryObjectByFreightId(freightEntity.getId());
+                if(itemEntity != null){
+                    FreightItemEntity freightItemEntity = new FreightItemEntity();
+                    freightItemEntity.setFreId(freight.getId());//新增的运费id
+                    freightItemEntity.setDeliveryArea(itemEntity.getDeliveryArea());
+                    freightItemEntity.setFirstPiece(itemEntity.getFirstPiece());
+                    freightItemEntity.setFreight(itemEntity.getFreight());
+                    freightItemEntity.setContinuePiece(itemEntity.getContinuePiece());
+                    freightItemEntity.setRenew(itemEntity.getRenew());
+                    freightItemDao.save(freightItemEntity);
+                }
+            }
+        }
+        return 1;
+    }
 }
 }

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

@@ -935,9 +935,9 @@ public class GoodsServiceImpl implements GoodsService {
             exportExceptionDataEntity.setMerchSn(merchSn);
             exportExceptionDataEntity.setMerchSn(merchSn);
             exportExceptionDataEntity.setStoreId(user.getStoreId());
             exportExceptionDataEntity.setStoreId(user.getStoreId());
             if(exportDataType == 1) {
             if(exportDataType == 1) {
-                exportExceptionDataEntity.setExportDataType("1");
+                exportExceptionDataEntity.setExportDataType(Dict.exportDataType.item_1.getItem());
             }else{
             }else{
-                exportExceptionDataEntity.setExportDataType("2");
+                exportExceptionDataEntity.setExportDataType(Dict.exportDataType.item_2.getItem());
             }
             }
             if(failMerchUserGoodsSnList != null && failMerchUserGoodsSnList.size() > 0){
             if(failMerchUserGoodsSnList != null && failMerchUserGoodsSnList.size() > 0){
                 exportExceptionDataEntity.setExportExceptionData("不能操作除了登录用户以外商户的商品,当前商户编号为【"+merchSn+"】,请检查商品编码【"+failMerchUserGoodsSnList+"】的商品信息");
                 exportExceptionDataEntity.setExportExceptionData("不能操作除了登录用户以外商户的商品,当前商户编号为【"+merchSn+"】,请检查商品编码【"+failMerchUserGoodsSnList+"】的商品信息");

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

@@ -9,6 +9,7 @@ import com.kmall.admin.dto.OrderExpressDto;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity;
 import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity;
+import com.kmall.admin.utils.ResponseData;
 import com.kmall.api.entity.mk.MkStorePromOrderRealVo;
 import com.kmall.api.entity.mk.MkStorePromOrderRealVo;
 import com.kmall.manager.manager.express.sf.properties.SFPropertiesBuilder;
 import com.kmall.manager.manager.express.sf.properties.SFPropertiesBuilder;
 import com.kmall.manager.manager.express.sf.properties.SFUtil;
 import com.kmall.manager.manager.express.sf.properties.SFUtil;
@@ -1189,4 +1190,18 @@ public class OrderServiceImpl implements OrderService {
     public int queryStoreTopicOrderTotal(Map<String, Object> map) {
     public int queryStoreTopicOrderTotal(Map<String, Object> map) {
         return orderDao.queryStoreTopicOrderTotal(map);
         return orderDao.queryStoreTopicOrderTotal(map);
     }
     }
+
+    @Override
+    public List<WxOrderEntity> wxOrderResendQueryAllList(Map<String, Object> map){
+//        String requestData = JacksonUtil.toJson(map);
+        String url = "http://120.78.152.8:9580/wx/wxOrderResendQueryAll";
+        // 同步访问,返回结果字符串
+        String response = OkHttpUtils.post(map, url, "SSL");
+        ResponseData responseData = JacksonUtils.fromStringJson(response, ResponseData.class);
+        if(responseData.getCode().equalsIgnoreCase("0")){
+            List<WxOrderEntity> list = responseData.getData().getRows();
+            return list;
+        }
+        return null;
+    }
 }
 }

+ 302 - 16
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps;
 import com.kmall.admin.dao.*;
 import com.kmall.admin.dao.*;
 import com.kmall.admin.dao.mk.dist.MkDistSellAllocationDao;
 import com.kmall.admin.dao.mk.dist.MkDistSellAllocationDao;
+import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
 import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
 import com.kmall.admin.service.ProductStoreRelaService;
 import com.kmall.admin.service.ProductStoreRelaService;
@@ -17,10 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
 /**
  * Service实现类
  * Service实现类
@@ -60,7 +58,13 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     @Autowired
     @Autowired
     private StoreDao storeDao;
     private StoreDao storeDao;
     @Autowired
     @Autowired
+    private MerchDao merchDao;
+    @Autowired
+    private ThirdMerchantBizDao thirdMerchantBizDao;
+    @Autowired
     private MerchUserDao merchUserDao;
     private MerchUserDao merchUserDao;
+    @Autowired
+    private ExportExceptionDataDao exportExceptionDataDao;
 
 
     @Override
     @Override
     public ProductStoreRelaEntity queryObject(Integer id) {
     public ProductStoreRelaEntity queryObject(Integer id) {
@@ -128,7 +132,7 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
                 builder.put("specification", "规格");
                 builder.put("specification", "规格");
             }
             }
             builder.put("retailPrice", "零售价");
             builder.put("retailPrice", "零售价");
-            builder.put("marketPrice", "市场价");
+//            builder.put("marketPrice", "市场价");
             r = ValidatorUtil.isEmpty(builder.build(), valideDate);
             r = ValidatorUtil.isEmpty(builder.build(), valideDate);
             if (Integer.valueOf(r.get("code").toString()) != 0) {
             if (Integer.valueOf(r.get("code").toString()) != 0) {
                 throw new RRException(r.get("msg").toString());
                 throw new RRException(r.get("msg").toString());
@@ -171,12 +175,6 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         SysUserEntity user = ShiroUtils.getUserEntity();
         SysUserEntity user = ShiroUtils.getUserEntity();
         ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(goodsId, "");
         ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(goodsId, "");
 
 
-//        GoodsEntity goods = new GoodsEntity();
-//        goods.setRetailPrice(productStoreRela.getRetailPrice());
-//        goods.setMarketPrice(productStoreRela.getMarketPrice());
-//        goods.setId(goodsEntity.getId());
-//        goodsDao.update(goods);
-
         if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
         if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
             GoodsSpecificationEntity goodsSpecificationEntity = goodsSpecificationDao.queryByGoodsId(goodsEntity.getId());
             GoodsSpecificationEntity goodsSpecificationEntity = goodsSpecificationDao.queryByGoodsId(goodsEntity.getId());
             if(goodsSpecificationEntity != null){
             if(goodsSpecificationEntity != null){
@@ -204,10 +202,7 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
                 product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
                 product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
                 productDao.update(product);
                 productDao.update(product);
             }
             }
-        }/* else {
-            productStoreRela.setRetailPrice(goodsEntity.getRetailPrice());
-            productStoreRela.setMarketPrice(goodsEntity.getMarketPrice());
-        }*/
+        }
 
 
         // 添加商品参数
         // 添加商品参数
         List<GoodsAttributeEntity> attributeEntityList = productStoreRela.getAttributeEntityList();
         List<GoodsAttributeEntity> attributeEntityList = productStoreRela.getAttributeEntityList();
@@ -303,7 +298,7 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
                 builder.put("specification", "规格");
                 builder.put("specification", "规格");
             }
             }
             builder.put("retailPrice", "零售价");
             builder.put("retailPrice", "零售价");
-            builder.put("marketPrice", "市场价");
+//            builder.put("marketPrice", "市场价");
             r = ValidatorUtil.isEmpty(builder.build(), valideDate);
             r = ValidatorUtil.isEmpty(builder.build(), valideDate);
             if (Integer.valueOf(r.get("code").toString()) != 0) {
             if (Integer.valueOf(r.get("code").toString()) != 0) {
                 throw new RRException(r.get("msg").toString());
                 throw new RRException(r.get("msg").toString());
@@ -401,6 +396,9 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
                 }
                 }
             }
             }
         }
         }
+        if(productStoreRela.getMarketPrice()==null){
+            productStoreRela.setMarketPrice(Constant.ZERO);
+        }
         Map cartMap = Maps.newHashMap();
         Map cartMap = Maps.newHashMap();
         cartMap.put("goodsId",goodsEntity.getId());
         cartMap.put("goodsId",goodsEntity.getId());
         List<CartEntity> cartList = cartDao.queryList(cartMap);
         List<CartEntity> cartList = cartDao.queryList(cartMap);
@@ -531,4 +529,292 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         return productStoreRelaDao.queryGoodsRealListByTopicIdTotal(map);
         return productStoreRelaDao.queryGoodsRealListByTopicIdTotal(map);
     }
     }
 
 
+    @Override
+    public int uploadExcel(List<StoreGoodsDto> storeGoodsDtoList){
+        GoodsEntity goodsEntity = null;
+        String isStockShare = "";
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        String merchSn = user.getMerchSn();
+        boolean isFail = false;
+        List<String> failThirdMerchSnList = new ArrayList<>(),
+                failGoodsSnList = new ArrayList<>(), failHaveNameList = new ArrayList<>(), failHaveGoodsSnList = new ArrayList<>()
+                , failParentCateList = new ArrayList<>(), failCateList = new ArrayList<>(), failHaveStoreNameList = new ArrayList<>()
+                , failBrandList = new ArrayList<>(), failFreightList = new ArrayList<>();
+        if (storeGoodsDtoList != null && storeGoodsDtoList.size() > 0) {
+            for (int i = 0; i < storeGoodsDtoList.size(); i++) {
+                StoreGoodsDto storeGoodsDto = storeGoodsDtoList.get(i);
+                ProductStoreRelaEntity storeRelaEntity = new ProductStoreRelaEntity();
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(storeGoodsDto);
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("storeName", "门店名称");
+                builder.put("goodsSn", "商品编码");
+                builder.put("categoryName", "一级分类");
+                builder.put("attributeCategory", "二级分类");
+                builder.put("brandName", "品牌");
+                builder.put("freightName", "运费");
+
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+                StoreEntity store = storeDao.queryObjectByName(storeGoodsDto.getStoreName().trim());
+                if (store != null) {
+                    storeRelaEntity.setStoreId(store.getId());
+                    storeRelaEntity.setMerchSn(store.getMerchSn());
+                    MerchEntity merchEntity = merchDao.findByMerchSn(store.getMerchSn());
+                    if(merchEntity != null){
+                        storeRelaEntity.setMerchName(merchEntity.getMerchName());
+                    }
+                    goodsEntity = goodsDao.queryGoodsByGoodsSnAndStoreId(storeGoodsDto.getGoodsSn(), store.getId());
+                    if(goodsEntity == null){//商品不存在
+                        isFail = true;
+                        failGoodsSnList.add(storeGoodsDto.getStoreName());
+                    }else {
+                        storeRelaEntity.setSku(goodsEntity.getSku());
+                        storeRelaEntity.setGoodsId(goodsEntity.getId());
+                        storeRelaEntity.setGoodsBizType(goodsEntity.getGoodsBizType());
+                        isStockShare = StockUtil.getIsStockShareByGoodsEntity(goodsEntity.getIsSupplierGoods(),
+                                goodsEntity.getIsStockShare(), goodsEntity.getIsStockShareBySuppler());
+
+                        if(goodsEntity.getIsSupplierGoods().equalsIgnoreCase(Dict.isSupplierGoods.item_1.getItem())) {
+                            builder.put("supplierThirdName", "商品供货商所属第三方商户");
+                        }
+                        if(Dict.orderBizType.item_00.getItem().equalsIgnoreCase(goodsEntity.getGoodsBizType())){
+                            if(Dict.isStockShare.item_0.getItem().equalsIgnoreCase(isStockShare)){
+                                builder.put("stockNum", "库存");
+                            }
+                        }else{
+                            builder.put("stockNum", "库存");
+                        }
+                        if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
+                            // 普通商品校验商品规格
+                            builder.put("specification", "产品规格");
+                        }
+                        builder.put("retailPrice", "零售价");
+                        builder.put("marketPrice", "市场价");
+                        r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                        if (Integer.valueOf(r.get("code").toString()) != 0) {
+                            throw new RRException(r.get("msg").toString());
+                        }
+                        //商品配置校验
+                        if(!StringUtils.isNotEmpty(goodsEntity.getListPicUrl())){
+                            throw new RRException("该商品列表图不能为空!请先在商品管理》所有商品中维护商品编号为【"+goodsEntity.getGoodsSn()+"】的商品列表图信息,再来操作门店商品数据");
+                        }
+                        if(!StringUtils.isNotEmpty(goodsEntity.getPrimaryPicUrl())){
+                            throw new RRException("该商品主图不能为空!请先在商品管理》所有商品中维护商品编号为【"+goodsEntity.getGoodsSn()+"】的商品主图信息,再来操作门店商品数据");
+                        }
+                        List<GoodsGalleryEntity> galleryEntityList = goodsGalleryDao.queryObjectByGoodId(goodsEntity.getId());
+                        if (galleryEntityList == null || galleryEntityList.size() <= 0) {
+                            throw new RRException("该商品轮播图不能为空!请先在商品管理》所有商品中维护商品编号为【"+goodsEntity.getGoodsSn()+"】的商品详情轮播图信息,再来操作门店商品数据");
+                        }
+
+                        if(goodsEntity.getIsSupplierGoods().equalsIgnoreCase(Dict.isSupplierGoods.item_1.getItem())) {
+                            builder.put("supplierThirdCode", "商品供货商所属第三方商户");
+                            ThirdMerchantBizEntity thirdMerchantBizEntity = thirdMerchantBizDao.getThirdMerchangByCode(storeGoodsDto.getSupplierThirdCode());
+                            if(thirdMerchantBizEntity != null){
+                                storeRelaEntity.setThirdPartyMerchCode(thirdMerchantBizEntity.getThirdPartyMerchCode());
+                                storeRelaEntity.setSupplierThirdId(thirdMerchantBizEntity.getThirdMerchSn());
+                            }else{//第三方商户不存在
+                                isFail = true;
+                                failThirdMerchSnList.add(storeGoodsDto.getStoreName());
+                            }
+                        }
+                        CategoryEntity parentCategoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getAttributeCategory(), store.getMerchSn());
+                        if(parentCategoryEntity == null){
+                            isFail = true;
+                            failParentCateList.add(storeGoodsDto.getStoreName());
+                        }else {
+                            storeRelaEntity.setAttributeCategory(parentCategoryEntity.getParentId());
+                        }
+                        CategoryEntity categoryEntity = categoryDao.queryObjectByName(storeGoodsDto.getCategoryName(), store.getMerchSn());
+                        if(categoryEntity == null){
+                            isFail = true;
+                            failCateList.add(storeGoodsDto.getStoreName());
+                        }else {
+                            storeRelaEntity.setCategoryId(categoryEntity.getId());
+                        }
+                        BrandEntity brandEntity = brandDao.queryBrandByBrandNameAndStoreId(storeGoodsDto.getBrandName(), store.getId());
+                        if(brandEntity == null){
+                            isFail = true;
+                            failBrandList.add(storeGoodsDto.getStoreName());
+                        }else {
+                            storeRelaEntity.setBrandId(brandEntity.getId());
+                        }
+                        FreightEntity freightEntity = freightDao.queryFreightByDefaultFreightAndStoreId(storeGoodsDto.getBrandName(), store.getId());
+                        if(freightEntity == null){
+                            isFail = true;
+                            failFreightList.add(storeGoodsDto.getStoreName());
+                        }else {
+                            storeRelaEntity.setFreightId(freightEntity.getId());
+                        }
+
+                        //校验总库存
+                        if(goodsEntity.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) && isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())){
+                            Integer stockNum = Integer.parseInt(storeGoodsDto.getStockNum());
+                            Integer goodsNumber = goodsEntity.getGoodsNumber();//商品总库存
+                            if (stockNum.intValue() != goodsNumber.intValue()) {
+                                throw new RRException("门店【" + store.getStoreName() + "】商品编码【" + storeGoodsDto.getGoodsSn()
+                                        + "】的门店商品分配库存不等于商品总库存!当前门店属于共享库存,需与总库存一致,该商品总库存【" + goodsNumber + "】");
+                            } else {
+                                storeRelaEntity.setStockNum(goodsEntity.getGoodsNumber());
+                            }
+                        }
+                        if((!goodsEntity.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem()) && isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) ||
+                                isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())){
+                            Integer stockNum = Integer.parseInt(storeGoodsDto.getStockNum());
+                            Integer goodsNumber = goodsEntity.getGoodsNumber();//商品总库存
+                            Integer storeTotalStockNum = 0;//商品分配库存
+                            List<ProductStoreRelaEntity> proStoreList = productStoreRelaDao.queryByGoodsId(goodsEntity.getId());
+                            for(ProductStoreRelaEntity relaEntity: proStoreList){
+                                if(relaEntity.getStoreId().intValue() != store.getId().intValue()) {
+                                    storeTotalStockNum = storeTotalStockNum + relaEntity.getStockNum();
+                                }
+                            }
+                            Integer totalStockNum = storeTotalStockNum + stockNum;
+                            if(goodsNumber < totalStockNum){
+                                throw new RRException("门店【" + store.getStoreName() + "】商品编码【" + storeGoodsDto.getGoodsSn()
+                                        + "】的门店商品分配库存已超过商品总库存!当前门店商品分配库存【" + stockNum + "】,已在各门店分配库存总额【"+
+                                        storeTotalStockNum + "】,该商品总库存【" + goodsNumber + "】");
+                            }
+                        }
+
+                        String storeId = String.valueOf(store.getId());
+                        String goodsId = String.valueOf(goodsEntity.getId());
+                        Map<String, Object> map = Maps.newHashMap();
+                        map.put("goodsId", goodsId);
+                        map.put("storeId", storeId);
+                        List<ProductStoreRelaEntity> storeRelaList = querySameList(map);
+                        if (storeRelaList != null && storeRelaList.size() > 0) {
+//                        throw new RRException("该门店已存在此商品!");
+                            isFail = true;
+                            failHaveNameList.add(storeGoodsDto.getStoreName());
+                            failHaveGoodsSnList.add(storeGoodsDto.getGoodsSn());
+                        }
+
+                        ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(goodsId, "");
+                        if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
+                            GoodsSpecificationEntity goodsSpecificationEntity = goodsSpecificationDao.queryByGoodsId(goodsEntity.getId());
+                            if(goodsSpecificationEntity != null){
+                                goodsSpecificationDao.delete(goodsSpecificationEntity.getId());
+                            }
+                            // 添加商品规格
+                            GoodsSpecificationEntity goodsSpecification = new GoodsSpecificationEntity();
+                            goodsSpecification.setGoodsId(goodsEntity.getId());
+                            goodsSpecification.setValue(storeGoodsDto.getSpecification());
+                            goodsSpecification.setSpecificationId(1);
+                            goodsSpecificationDao.save(goodsSpecification);
+
+                            // 修改产品
+                            if(product == null){
+                                product = new ProductEntity();
+                                product.setGoodsSn(goodsEntity.getGoodsSn());
+                                product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                                product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                                product.setGoodsId(goodsEntity.getId());
+                                product.setGoodsNumber(goodsEntity.getGoodsNumber());
+                                product.setGoodsDefault(0);
+                                productDao.save(product);
+                            }else{
+                                product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                                product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                                productDao.update(product);
+                            }
+                        }
+
+                        // 批量导入不添加商品参数
+                        //新增库存操作记录
+                        StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
+                        storeMngChangeEntity.setChangeType(Dict.changeType.item_2.getItem());
+                        storeMngChangeEntity.setChangeReason("新增门店商品");
+                        storeMngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(goodsEntity.getId())));
+                        storeMngChangeEntity.setStoreId(Integer.parseInt(String.valueOf(store.getId())));
+                        storeMngChangeEntity.setMerchSn(store.getMerchSn());
+                        storeMngChangeEntity.setCreateTime(new Date());
+                        storeMngChangeEntity.setModTime(new Date());
+                        storeMngChangeEntity.setStoreChangeNum(Integer.parseInt(storeGoodsDto.getStockNum()));
+                        storeMngChangeEntity.setStoreOriginalNum(0);
+                        storeMngChangeEntity.setStoreValidNum(Integer.parseInt(storeGoodsDto.getStockNum()));
+                        storeMngChangeEntity.setCreaterSn(user.getUsername());
+                        storeMngChangeEntity.setModerSn(user.getUsername());
+                        storeMngChangeEntity.setIsValid(0);
+                        storeMngChangeDao.save(storeMngChangeEntity);
+
+                        //更新门店商品是否有修改字段
+                        updateLoadGoodsByStoreId(storeId, user);
+
+                        storeRelaEntity.setProductId(product.getId());
+//                    storeRelaEntity.setGoodsBizType(goodsEntity.getGoodsBizType());
+//                    storeRelaEntity.setSku(goodsEntity.getSku());
+                        storeRelaEntity.setRetailPrice(BigDecimal.valueOf(Long.valueOf(storeGoodsDto.getRetailPrice())));
+                        storeRelaEntity.setMarketPrice(BigDecimal.valueOf(Long.valueOf(storeGoodsDto.getMarketPrice())));
+                        storeRelaEntity.setCreaterSn(user.getUserId().toString());
+                        storeRelaEntity.setCreateTime(new Date());
+                        storeRelaEntity.setModerSn(user.getUserId().toString());
+                        storeRelaEntity.setModTime(new Date());
+                    }
+                }else{
+                    isFail = true;
+                    failHaveStoreNameList.add(storeGoodsDto.getStoreName());
+                }
+
+                if(!isFail){
+                    productStoreRelaDao.save(storeRelaEntity);
+                }
+
+                ExportExceptionDataEntity exportExceptionDataEntity = new ExportExceptionDataEntity();
+                exportExceptionDataEntity.setCreaterSn(user.getUserId().toString());
+                exportExceptionDataEntity.setUserId(user.getUserId().intValue());
+                exportExceptionDataEntity.setCreateTime(new Date());
+                exportExceptionDataEntity.setModTime(new Date());
+                exportExceptionDataEntity.setMerchSn(merchSn);
+                exportExceptionDataEntity.setStoreId(user.getStoreId());
+                exportExceptionDataEntity.setExportDataType(Dict.exportDataType.item_3.getItem());
+
+                if(failHaveStoreNameList != null && failHaveStoreNameList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("门店名称不存在,请检查门店名称【"+failHaveStoreNameList+"】的门店名称信息!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failThirdMerchSnList != null && failThirdMerchSnList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("第三方商户代码不存在,请在商城配置》第三方商户管理中维护,请检查门店名称【"+failThirdMerchSnList+"】的第三方商户代码信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failHaveNameList != null && failHaveNameList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("门店商品已存在!请检查门店名称【" + failHaveNameList + "】商品编码【" + failHaveGoodsSnList + "】的门店商品信息");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failGoodsSnList != null && failGoodsSnList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("商户编码不存在,请检查门店名称【"+failGoodsSnList+"】的商户编码信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failParentCateList != null && failParentCateList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("一级分类不存在,请检查门店名称【"+failParentCateList+"】的一级分类信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failCateList != null && failCateList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("二级分类不存在,请检查门店名称【"+failCateList+"】的二级分类信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failBrandList != null && failBrandList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("品牌不存在,请检查门店名称【"+failBrandList+"】的品牌信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+                if(failFreightList != null && failFreightList.size() > 0){
+                    exportExceptionDataEntity.setExportExceptionData("运费模板不存在,请检查门店名称【"+failFreightList+"】的运费模板信息,请先维护再继续操作!");
+                    exportExceptionDataDao.save(exportExceptionDataEntity);
+                    throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+                }
+            }
+        }else{
+            throw new RRException("导入数据为空,或者检查数据是否为空");
+        }
+        throw new RRException("导入成功!");
+//        return 1;
+    }
 }
 }

+ 155 - 5
kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreServiceImpl.java

@@ -1,19 +1,27 @@
 package com.kmall.admin.service.impl;
 package com.kmall.admin.service.impl;
 
 
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dao.ExportExceptionDataDao;
 import com.kmall.admin.dao.MerchDao;
 import com.kmall.admin.dao.MerchDao;
 import com.kmall.admin.dao.StoreDao;
 import com.kmall.admin.dao.StoreDao;
 import com.kmall.admin.dao.ThirdMerchantBizDao;
 import com.kmall.admin.dao.ThirdMerchantBizDao;
-import com.kmall.admin.entity.MerchEntity;
-import com.kmall.admin.entity.StoreEntity;
-import com.kmall.admin.entity.ThirdMerchantBizEntity;
+import com.kmall.admin.dto.StoreDto;
+import com.kmall.admin.dto.StoreIdDto;
+import com.kmall.admin.entity.*;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.StoreService;
 import com.kmall.admin.service.StoreService;
+import com.kmall.admin.utils.ShiroUtils;
+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.RRException;
+import com.kmall.common.utils.ValidatorUtil;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 
 /**
 /**
  * Service实现类
  * Service实现类
@@ -30,6 +38,8 @@ public class StoreServiceImpl implements StoreService {
     private MerchDao merchDao;
     private MerchDao merchDao;
     @Autowired
     @Autowired
     private ThirdMerchantBizDao thirdMerchantBizDao;
     private ThirdMerchantBizDao thirdMerchantBizDao;
+    @Autowired
+    private ExportExceptionDataDao exportExceptionDataDao;
 
 
     @Override
     @Override
     public StoreEntity queryObject(Integer id) {
     public StoreEntity queryObject(Integer id) {
@@ -48,6 +58,7 @@ public class StoreServiceImpl implements StoreService {
 
 
     @Override
     @Override
     public int save(StoreEntity store) {
     public int save(StoreEntity store) {
+        store.setStoreName(store.getStoreName().trim());
         if(StringUtils.isNotEmpty(store.getMerchSn())){
         if(StringUtils.isNotEmpty(store.getMerchSn())){
             MerchEntity merchEntity = merchDao.findByMerchSn(store.getMerchSn());
             MerchEntity merchEntity = merchDao.findByMerchSn(store.getMerchSn());
             if(merchEntity != null){
             if(merchEntity != null){
@@ -84,6 +95,7 @@ public class StoreServiceImpl implements StoreService {
 
 
     @Override
     @Override
     public int update(StoreEntity store) {
     public int update(StoreEntity store) {
+        store.setStoreName(store.getStoreName().trim());
         if(StringUtils.isEmpty(store.getMerchSn())){
         if(StringUtils.isEmpty(store.getMerchSn())){
             throw new RRException("商户编号不能为空");
             throw new RRException("商户编号不能为空");
         }else{
         }else{
@@ -127,4 +139,142 @@ public class StoreServiceImpl implements StoreService {
     public int deleteBatch(Integer[] ids) {
     public int deleteBatch(Integer[] ids) {
         return storeDao.deleteBatch(ids);
         return storeDao.deleteBatch(ids);
     }
     }
+
+    @Override
+    public int uploadExcel(List<StoreDto> storeDtoList){
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        String merchSn = user.getMerchSn();
+        boolean isFail = false;
+        List<String> failMerchSnList = new ArrayList<>(), failThirdMerchSnList = new ArrayList<>(),
+                failAgreementTypeList = new ArrayList<>(), failHaveNameList = new ArrayList<>();
+        if (storeDtoList != null && storeDtoList.size() > 0) {
+            for (int i = 0; i < storeDtoList.size(); i++) {
+                StoreDto storeDto = storeDtoList.get(i);
+                StoreEntity storeEntity = new StoreEntity();
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(storeDto);
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("merchSn", "商户编码");
+                builder.put("storeName", "门店名称");
+                builder.put("storeNumber", "门店编码");
+                builder.put("storeAddress", "门店地址");
+                builder.put("provinceName", "省");
+                builder.put("cityName", "市");
+                builder.put("countyName", "区");
+                builder.put("latitude", "纬度");
+                builder.put("longitude", "经度");
+                builder.put("thirdPartyMerchCode", "第三方商户代码");
+                builder.put("exprAgreementType", "第三方商户快递协议类型");
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+                MerchEntity merchEntity = merchDao.findByMerchSn(storeDto.getMerchSn());
+                if(merchEntity != null){
+                    storeEntity.setMerchSn(merchEntity.getMerchSn());
+                    storeEntity.setMerchName(merchEntity.getMerchName());
+                }else{//商户不存在
+                    isFail = true;
+                    failMerchSnList.add(storeDto.getStoreName().trim());
+                }
+                ThirdMerchantBizEntity thirdMerchantBizEntity = thirdMerchantBizDao.getThirdMerchangByCode(storeDto.getThirdPartyMerchCode());
+                if(thirdMerchantBizEntity != null){
+                    storeEntity.setThirdPartyMerchCode(thirdMerchantBizEntity.getThirdPartyMerchCode());
+                    storeEntity.setThirdPartyMerchName(thirdMerchantBizEntity.getThirdPartyMerchName());
+                }else{//第三方商户不存在
+                    isFail = true;
+                    failThirdMerchSnList.add(storeDto.getThirdPartyMerchCode());
+                }
+
+                StoreEntity store = storeDao.queryObjectByName(storeDto.getStoreName().trim());
+                if(store != null){
+                    isFail = true;
+                    failHaveNameList.add(storeDto.getStoreName().trim());
+                }
+                if(!storeDto.getExprAgreementType().equalsIgnoreCase(Dict.exprAgreementType.item_00.getItem()) &&
+                        !storeDto.getExprAgreementType().equalsIgnoreCase(Dict.exprAgreementType.item_11.getItem())){
+                    isFail = true;
+                    failAgreementTypeList.add(storeDto.getStoreName().trim());
+                }
+                storeEntity.setStoreName(storeDto.getStoreName().trim());
+                storeEntity.setStoreNumber(storeDto.getStoreNumber().trim());
+                storeEntity.setStoreAddress(storeDto.getStoreAddress().trim());
+                storeEntity.setCountyName(storeDto.getCountyName().trim());
+                storeEntity.setCityName(storeDto.getCityName().trim());
+                storeEntity.setProvinceName(storeDto.getProvinceName().trim());
+                storeEntity.setLatitude(BigDecimal.valueOf(storeDto.getLatitude()));
+                storeEntity.setLongitude(BigDecimal.valueOf(storeDto.getLatitude()));
+                storeEntity.setExprAgreementType(storeDto.getExprAgreementType().trim());
+                storeEntity.setCreaterSn(user.getUsername());
+                storeEntity.setCreateTime(new Date());
+                storeEntity.setModerSn(user.getUsername());
+                storeEntity.setModTime(new Date());
+                storeEntity.setIsValid(Dict.isValid.item_0.getItem());
+
+                if(!isFail){
+                    storeDao.save(storeEntity);
+                }
+            }
+            ExportExceptionDataEntity exportExceptionDataEntity = new ExportExceptionDataEntity();
+            exportExceptionDataEntity.setCreaterSn(user.getUserId().toString());
+            exportExceptionDataEntity.setUserId(user.getUserId().intValue());
+            exportExceptionDataEntity.setCreateTime(new Date());
+            exportExceptionDataEntity.setModTime(new Date());
+            exportExceptionDataEntity.setMerchSn(merchSn);
+            exportExceptionDataEntity.setStoreId(user.getStoreId());
+            exportExceptionDataEntity.setExportDataType(Dict.exportDataType.item_3.getItem());
+            if(failMerchSnList != null && failMerchSnList.size() > 0){
+                exportExceptionDataEntity.setExportExceptionData("商户编码不存在,请检查门店名称【"+failMerchSnList+"】的商户编码信息,请先维护再继续操作!");
+                exportExceptionDataDao.save(exportExceptionDataEntity);
+                throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+            }
+            if(failThirdMerchSnList != null && failThirdMerchSnList.size() > 0){
+                exportExceptionDataEntity.setExportExceptionData("第三方商户代码不存在,请在商城配置》第三方商户管理中维护,请检查门店名称【"+failThirdMerchSnList+"】的第三方商户代码信息,请先维护再继续操作!");
+                exportExceptionDataDao.save(exportExceptionDataEntity);
+                throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+            }
+            if(failHaveNameList != null && failHaveNameList.size() > 0){
+                exportExceptionDataEntity.setExportExceptionData("门店名称已重复!请检查门店名称【" + failHaveNameList + "】的门店名称信息");
+                exportExceptionDataDao.save(exportExceptionDataEntity);
+                throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+            }
+            if(failAgreementTypeList != null && failAgreementTypeList.size() > 0){
+                exportExceptionDataEntity.setExportExceptionData("第三方商户快递协议类型只能是【00:e码头,01:商户自谈】!请检查门店名称【"+failAgreementTypeList+"】的第三方商户快递协议类型信息");
+                exportExceptionDataDao.save(exportExceptionDataEntity);
+                throw new RRException("导入数据异常,异常信息请在商品管理》》导入异常数据中查看检查");
+            }
+        }else{
+            throw new RRException("导入数据为空,或者检查数据是否为空");
+        }
+        throw new RRException("导入成功!");
+//        return 1;
+    }
+
+
+    @Override
+    public List<StoreEntity> queryExportList(Map<String, Object> map) {
+        List<StoreEntity> list = storeDao.queryExportList(map);
+        return list;
+    }
+
+    @Override
+    public String checkStoreIdUpload(List<StoreIdDto> storeIdDtoList){
+        Boolean isFalse = false;
+        List<String> storeIdErrorList = new ArrayList<>();
+        for(StoreIdDto storeIdDto : storeIdDtoList) {
+            StoreEntity storeEntity = storeDao.queryObject(storeIdDto.getStoreId());
+            if (storeEntity == null) {
+                isFalse = true;
+                storeIdErrorList.add(storeIdDto.getStoreId());
+            }
+        }
+        if(isFalse){
+            throw new RRException("门店不存在,不存在id【" + storeIdErrorList + "】");
+        }else{
+            StringBuffer storeIds = new StringBuffer();
+            for(StoreIdDto storeIdDto : storeIdDtoList){
+                storeIds.append(storeIdDto.getStoreId()+";");
+            }
+            return storeIds.toString();
+        }
+    }
 }
 }

+ 38 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/ResponseData.java

@@ -0,0 +1,38 @@
+package com.kmall.admin.utils;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-11-07 15:08
+ */
+public class ResponseData {
+    private String code;
+
+    private String msg;
+
+    private ResponseDataRows data;
+
+    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;
+    }
+
+    public ResponseDataRows getData() {
+        return data;
+    }
+
+    public void setData(ResponseDataRows data) {
+        this.data = data;
+    }
+}

+ 20 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/ResponseDataRows.java

@@ -0,0 +1,20 @@
+package com.kmall.admin.utils;
+
+import java.util.List;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-11-07 15:08
+ */
+public class ResponseDataRows {
+    private List rows;
+
+    public List getRows() {
+        return rows;
+    }
+
+    public void setRows(List rows) {
+        this.rows = rows;
+    }
+}

+ 18 - 0
kmall-admin/src/main/resources/XmlTemplate/CateStoreDtoList.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="1"/>
+        <loop startRow="1" endRow="1" items="CateStoreDtoList" var="CateStoreDto"
+              varType="com.kmall.admin.dto.CateStoreDto">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">CateStoreDto.storeId</mapping>
+                <mapping row="1" col="1">CateStoreDto.categoryId</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 27 - 0
kmall-admin/src/main/resources/XmlTemplate/StoreDtoList.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="1"/>
+        <loop startRow="1" endRow="1" items="StoreDtoList" var="StoreDto"
+              varType="com.kmall.admin.dto.StoreDto">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">StoreDto.merchSn</mapping>
+                <mapping row="1" col="1">StoreDto.storeName</mapping>
+                <mapping row="1" col="2">StoreDto.storeNumber</mapping>
+                <mapping row="1" col="3">StoreDto.storeAddress</mapping>
+                <mapping row="1" col="4">StoreDto.provinceName</mapping>
+                <mapping row="1" col="5">StoreDto.cityName</mapping>
+                <mapping row="1" col="6">StoreDto.countyName</mapping>
+                <mapping row="1" col="7">StoreDto.latitude</mapping>
+                <mapping row="1" col="8">StoreDto.longitude</mapping>
+                <mapping row="1" col="9">StoreDto.thirdPartyMerchCode</mapping>
+                <mapping row="1" col="10">StoreDto.exprAgreementType</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 27 - 0
kmall-admin/src/main/resources/XmlTemplate/StoreGoodsDtoList.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="1"/>
+        <loop startRow="1" endRow="1" items="StoreGoodsDtoList" var="StoreGoodsDto"
+              varType="com.kmall.admin.dto.StoreGoodsDto">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">StoreGoodsDto.storeName</mapping>
+                <mapping row="1" col="1">StoreGoodsDto.specification</mapping>
+                <mapping row="1" col="2">StoreGoodsDto.stockNum</mapping>
+                <mapping row="1" col="3">StoreGoodsDto.goodsSn</mapping>
+                <mapping row="1" col="4">StoreGoodsDto.retailPrice</mapping>
+                <mapping row="1" col="5">StoreGoodsDto.marketPrice</mapping>
+                <mapping row="1" col="6">StoreGoodsDto.categoryName</mapping>
+                <mapping row="1" col="7">StoreGoodsDto.attributeCategory</mapping>
+                <mapping row="1" col="8">StoreGoodsDto.brandName</mapping>
+                <mapping row="1" col="9">StoreGoodsDto.freightName</mapping>
+                <mapping row="1" col="10">StoreGoodsDto.supplierThirdCode</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 17 - 0
kmall-admin/src/main/resources/XmlTemplate/StoreIdDtoList.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="1"/>
+        <loop startRow="1" endRow="1" items="StoreIdDtoList" var="StoreIdDto"
+              varType="com.kmall.admin.dto.StoreIdDto">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">StoreIdDto.storeId</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 24 - 0
kmall-admin/src/main/resources/XmlTemplate/SysUserDtoList.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workbook>
+    <worksheet name="Sheet1">
+        <section startRow="0" endRow="1"/>
+        <loop startRow="1" endRow="1" items="SysUserDtoList" var="SysUserDto"
+              varType="com.kmall.admin.dto.SysUserDto">
+            <section startRow="1" endRow="1">
+                <mapping row="1" col="0">SysUserDto.userName</mapping>
+                <mapping row="1" col="1">SysUserDto.email</mapping>
+                <mapping row="1" col="2">SysUserDto.mobile</mapping>
+                <mapping row="1" col="3">SysUserDto.storeName</mapping>
+                <mapping row="1" col="4">SysUserDto.roleType</mapping>
+                <mapping row="1" col="5">SysUserDto.roleName</mapping>
+                <mapping row="1" col="6">SysUserDto.merchSn</mapping>
+                <mapping row="1" col="7">SysUserDto.thirdPartyMerchCode</mapping>
+            </section>
+            <loopbreakcondition>
+                <rowcheck offset="0">
+                    <cellcheck offset="0"></cellcheck>
+                </rowcheck>
+            </loopbreakcondition>
+        </loop>
+    </worksheet>
+</workbook>

+ 4 - 2
kmall-admin/src/main/resources/mybatis/mapper/AdDao.xml

@@ -86,7 +86,9 @@
         mall_ad.content,
         mall_ad.content,
         mall_ad.end_time,
         mall_ad.end_time,
         mall_ad.enabled,
         mall_ad.enabled,
-        mall_ad_position.name ad_Position_Name
+        mall_ad_position.name ad_Position_Name,
+        s.store_name 'storeName',
+        s.merch_name 'merchName'
         from mall_ad LEFT JOIN mall_ad_position on mall_ad.ad_position_id = mall_ad_position.id
         from mall_ad LEFT JOIN mall_ad_position on mall_ad.ad_position_id = mall_ad_position.id
         left join mall_store s on mall_ad.store_id = s.id
         left join mall_store s on mall_ad.store_id = s.id
         where 1=1
         where 1=1
@@ -195,4 +197,4 @@
         </foreach>
         </foreach>
     </delete>
     </delete>
 
 
-</mapper>
+</mapper>

+ 29 - 2
kmall-admin/src/main/resources/mybatis/mapper/BrandDao.xml

@@ -76,6 +76,33 @@
         </if>
         </if>
     </select>
     </select>
 
 
+    <select id="queryBrandByBrandNameAndStoreId" resultType="com.kmall.admin.entity.BrandEntity">
+        select
+        `id`,
+        `name`,
+        `store_id`,
+        `merch_sn`,
+        `list_pic_url`,
+        `simple_desc`,
+        `pic_url`,
+        `sort_order`,
+        `is_show`,
+        `floor_price`,
+        `app_list_pic_url`,
+        `is_new`,
+        `new_pic_url`,
+        `new_sort_order`,
+        b.category_id
+        from mall_brand b
+        where 1=1
+        <if test="storeId != null and storeId != ''">
+            AND b.store_id = #{storeId}
+        </if>
+        <if test="brandName != null">
+            AND b.name = #{brandName}
+        </if>
+    </select>
+
     <select id="queryObjectByStoreId" resultType="com.kmall.admin.entity.BrandEntity">
     <select id="queryObjectByStoreId" resultType="com.kmall.admin.entity.BrandEntity">
         select *
         select *
         from mall_brand
         from mall_brand
@@ -120,7 +147,7 @@
             AND s.third_party_merch_code = #{thirdPartyMerchCode}
             AND s.third_party_merch_code = #{thirdPartyMerchCode}
         </if>
         </if>
         <if test="name != null and name.trim() != ''">
         <if test="name != null and name.trim() != ''">
-            AND name LIKE concat('%',#{name},'%')
+            AND b.name LIKE concat('%',#{name},'%')
         </if>
         </if>
         <choose>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
             <when test="sidx != null and sidx.trim() != ''">
@@ -223,4 +250,4 @@
         </foreach>
         </foreach>
     </delete>
     </delete>
 
 
-</mapper>
+</mapper>

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

@@ -139,7 +139,7 @@
 			limit #{offset}, #{limit}
 			limit #{offset}, #{limit}
 		</if>
 		</if>
 	</select>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_category b
 		select count(*) from mall_category b
 		left join mall_store s on b.store_id = s.id
 		left join mall_store s on b.store_id = s.id
@@ -166,8 +166,8 @@
 			AND b.`parent_id` != #{isL2}
 			AND b.`parent_id` != #{isL2}
 		</if>
 		</if>
 	</select>
 	</select>
-	 
-	<insert id="save" parameterType="com.kmall.admin.entity.CategoryEntity">
+
+	<insert id="save" parameterType="com.kmall.admin.entity.CategoryEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_category(
 		insert into mall_category(
 			`id`,
 			`id`,
 			`name`,
 			`name`,
@@ -205,7 +205,7 @@
 			#{type},
 			#{type},
 			#{frontName})
 			#{frontName})
 	</insert>
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.CategoryEntity">
 	<update id="update" parameterType="com.kmall.admin.entity.CategoryEntity">
 		update mall_category
 		update mall_category
 		<set>
 		<set>
@@ -228,11 +228,11 @@
 		</set>
 		</set>
 		where id = #{id}
 		where id = #{id}
 	</update>
 	</update>
-	
+
 	<delete id="delete">
 	<delete id="delete">
 		delete from mall_category where id = #{value}
 		delete from mall_category where id = #{value}
 	</delete>
 	</delete>
-	
+
 	<delete id="deleteBatch">
 	<delete id="deleteBatch">
 		delete from mall_category where id in
 		delete from mall_category where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 		<foreach item="id" collection="array" open="(" separator="," close=")">
@@ -240,4 +240,4 @@
 		</foreach>
 		</foreach>
 	</delete>
 	</delete>
 
 
-</mapper>
+</mapper>

+ 28 - 8
kmall-admin/src/main/resources/mybatis/mapper/FreightDao.xml

@@ -47,6 +47,26 @@
 		</if>
 		</if>
 	</select>
 	</select>
 
 
+	<select id="queryFreightByDefaultFreightAndStoreId" resultType="com.kmall.admin.entity.FreightEntity">
+		select
+		`id`,
+		`name`,
+		`store_id`,
+		`merch_sn`,
+		`template_type`,
+		`pricing_manner`,
+		`default_freight`,
+		`is_default`
+		from mall_freight
+		where 1=1
+		<if test="defaultFreight != null and defaultFreight != ''">
+			AND default_freight = #{defaultFreight}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND store_id = #{storeId}
+		</if>
+	</select>
+
 	<select id="queryObjectByStoreId" resultType="com.kmall.admin.entity.FreightEntity">
 	<select id="queryObjectByStoreId" resultType="com.kmall.admin.entity.FreightEntity">
 		select
 		select
 		`id`,
 		`id`,
@@ -141,7 +161,7 @@
 			limit #{offset}, #{limit}
 			limit #{offset}, #{limit}
 		</if>
 		</if>
 	</select>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_freight b
 		select count(*) from mall_freight b
 		left join mall_store s on b.store_id = s.id
 		left join mall_store s on b.store_id = s.id
@@ -162,7 +182,7 @@
 			AND b.id NOT LIKE concat('%',#{id},'%')
 			AND b.id NOT LIKE concat('%',#{id},'%')
 		</if>
 		</if>
 	</select>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.admin.entity.FreightEntity" useGeneratedKeys="true" keyProperty="id">
 	<insert id="save" parameterType="com.kmall.admin.entity.FreightEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_freight(
 		insert into mall_freight(
 			`name`,
 			`name`,
@@ -181,9 +201,9 @@
 			#{defaultFreight},
 			#{defaultFreight},
 			#{isDefault})
 			#{isDefault})
 	</insert>
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.FreightEntity">
 	<update id="update" parameterType="com.kmall.admin.entity.FreightEntity">
-		update mall_freight 
+		update mall_freight
 		<set>
 		<set>
 			<if test="name != null">`name` = #{name}, </if>
 			<if test="name != null">`name` = #{name}, </if>
 			<if test="storeId != null">`store_id` = #{storeId}, </if>
 			<if test="storeId != null">`store_id` = #{storeId}, </if>
@@ -195,13 +215,13 @@
 		</set>
 		</set>
 		where id = #{id}
 		where id = #{id}
 	</update>
 	</update>
-	
+
 	<delete id="delete">
 	<delete id="delete">
 		delete from mall_freight where id = #{value}
 		delete from mall_freight where id = #{value}
 	</delete>
 	</delete>
-	
+
 	<delete id="deleteBatch">
 	<delete id="deleteBatch">
-		delete from mall_freight where id in 
+		delete from mall_freight where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 			#{id}
 			#{id}
 		</foreach>
 		</foreach>
@@ -210,4 +230,4 @@
 	<select id="queryMaxId" resultType="java.lang.Integer" parameterType="map">
 	<select id="queryMaxId" resultType="java.lang.Integer" parameterType="map">
 		SELECT MAX(id) FROM mall_freight
 		SELECT MAX(id) FROM mall_freight
 	</select>
 	</select>
-</mapper>
+</mapper>

+ 21 - 8
kmall-admin/src/main/resources/mybatis/mapper/FreightItemDao.xml

@@ -55,7 +55,7 @@
 			limit #{offset}, #{limit}
 			limit #{offset}, #{limit}
 		</if>
 		</if>
 	</select>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_freight_item
 		select count(*) from mall_freight_item
 		WHERE 1=1
 		WHERE 1=1
@@ -66,7 +66,7 @@
 			AND fre_id = #{freId}
 			AND fre_id = #{freId}
 		</if>
 		</if>
 	</select>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.admin.entity.FreightItemEntity" useGeneratedKeys="true" keyProperty="id">
 	<insert id="save" parameterType="com.kmall.admin.entity.FreightItemEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_freight_item(
 		insert into mall_freight_item(
 			`fre_id`,
 			`fre_id`,
@@ -83,9 +83,9 @@
 			#{continuePiece},
 			#{continuePiece},
 			#{renew})
 			#{renew})
 	</insert>
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.FreightItemEntity">
 	<update id="update" parameterType="com.kmall.admin.entity.FreightItemEntity">
-		update mall_freight_item 
+		update mall_freight_item
 		<set>
 		<set>
 			<if test="freId != null">`fre_id` = #{freId}, </if>
 			<if test="freId != null">`fre_id` = #{freId}, </if>
 			<if test="deliveryArea != null">`delivery_area` = #{deliveryArea}, </if>
 			<if test="deliveryArea != null">`delivery_area` = #{deliveryArea}, </if>
@@ -96,13 +96,13 @@
 		</set>
 		</set>
 		where id = #{id}
 		where id = #{id}
 	</update>
 	</update>
-	
+
 	<delete id="delete">
 	<delete id="delete">
 		delete from mall_freight_item where id = #{value}
 		delete from mall_freight_item where id = #{value}
 	</delete>
 	</delete>
-	
+
 	<delete id="deleteBatch">
 	<delete id="deleteBatch">
-		delete from mall_freight_item where id in 
+		delete from mall_freight_item where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 			#{id}
 			#{id}
 		</foreach>
 		</foreach>
@@ -111,4 +111,17 @@
 	<delete id="deleteByFreId">
 	<delete id="deleteByFreId">
 		delete from mall_freight_item where fre_id = #{freId}
 		delete from mall_freight_item where fre_id = #{freId}
 	</delete>
 	</delete>
-</mapper>
+
+	<select id="queryObjectByFreightId" resultType="com.kmall.admin.entity.FreightItemEntity">
+		select
+			`id`,
+			`fre_id`,
+			`delivery_area`,
+			`first_piece`,
+			`freight`,
+			`continue_piece`,
+			`renew`
+		from mall_freight_item
+		where fre_id = #{freightId}
+	</select>
+</mapper>

+ 60 - 8
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -136,6 +136,58 @@
         where a.id = #{id} and psr1.store_id = #{storeId}
         where a.id = #{id} and psr1.store_id = #{storeId}
     </select>
     </select>
 
 
+    <select id="queryGoodsByGoodsSnAndStoreId" resultMap="goodsMap">
+        select
+        a.sku,
+        a.id,
+        psr1.category_id,
+        a.goods_sn,
+        a.name,
+        psr1.brand_id,
+        a.goods_number,
+        a.keywords,
+        a.goods_brief,
+        a.is_on_sale,
+        a.add_time,
+        a.sort_order,
+        a.is_delete,
+        psr1.attribute_category,
+        a.counter_price,
+        a.extra_price,
+        a.is_new,
+        a.goods_unit,
+        a.primary_pic_url,
+        a.list_pic_url,
+        psr1.retail_price,
+        psr1.sell_volume,
+        a.primary_product_id,
+        a.unit_price,
+        a.promotion_desc,
+        a.promotion_tag,
+        a.app_exclusive_price,
+        a.is_app_exclusive,
+        a.is_limited,
+        a.is_hot,
+        a.merch_sn,
+        m.merch_name,
+        psr1.store_id,
+        psr1.market_price,
+        psr1.stock_num,
+        a.goods_desc,a.goods_biz_type,a.goods_rate,
+        a.sell_volume goods_sell_volume,
+        mb.third_party_merch_code,
+        mb.is_stock_share isStockShare,
+        mb.is_supplier_goods 'isSupplierGoods',
+        mb2.third_party_merch_code 'supplierThirdMerchCode',
+        mb2.is_stock_share 'isStockShareBySuppler'
+        from mall_goods a left join mall_merch m on a.merch_sn = m.merch_sn
+        LEFT JOIN mall_product_store_rela psr1 ON a.id = psr1.goods_id and a.merch_sn = psr1.merch_sn
+        LEFT JOIN mall_store s ON s.id = psr1.store_id
+        LEFT JOIN third_merchant_biz mb on s.third_party_merch_code = mb.third_party_merch_code
+        LEFT JOIN third_merchant_biz mb2 ON a.third_party_merch_code = mb2.third_party_merch_code
+        where a.goods_sn = #{goodsSn} and psr1.store_id = #{storeId}
+    </select>
+
     <select id="queryObjectByProdBarcodeAndBizType" resultType="com.kmall.admin.entity.GoodsEntity">
     <select id="queryObjectByProdBarcodeAndBizType" resultType="com.kmall.admin.entity.GoodsEntity">
         SELECT
         SELECT
             a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId'
             a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId'
@@ -201,24 +253,24 @@
         <if test="name != null and name != ''">
         <if test="name != null and name != ''">
             AND mall_goods.name LIKE concat('%',#{name},'%')
             AND mall_goods.name LIKE concat('%',#{name},'%')
         </if>
         </if>
-        <!--<if test="freightId != null and freightId != ''">
-            AND mall_goods.freight_id = #{freightId}
-        </if>
-        <if test="brandId != null and brandId != ''">
+        <!--<if test="brandId != null and brandId != ''">
             AND mall_goods.brand_id = #{brandId}
             AND mall_goods.brand_id = #{brandId}
         </if>
         </if>
+        <if test="freightId != null and freightId != ''">
+            AND mall_goods.freight_id = #{freightId}
+        </if>
         <if test="categoryId != null and categoryId != ''">
         <if test="categoryId != null and categoryId != ''">
             AND mall_goods.category_id = #{categoryId}
             AND mall_goods.category_id = #{categoryId}
-        </if>-->
-        <if test="sku != null and sku != ''">
-            AND mall_goods.sku LIKE concat('%',#{sku},'%')
         </if>
         </if>
-        <!--<if test="category != null and category != ''">
+        <if test="category != null and category != ''">
             AND mall_goods.category_id IN (select id from mall_category where parent_id = #{category})
             AND mall_goods.category_id IN (select id from mall_category where parent_id = #{category})
         </if>
         </if>
         <if test="categoryTwo != null and categoryTwo != ''">
         <if test="categoryTwo != null and categoryTwo != ''">
             AND mall_goods.category_id = #{categoryTwo}
             AND mall_goods.category_id = #{categoryTwo}
         </if>-->
         </if>-->
+        <if test="sku != null and sku != ''">
+            AND mall_goods.sku LIKE concat('%',#{sku},'%')
+        </if>
         <if test="isDelete != null">
         <if test="isDelete != null">
             AND mall_goods.is_Delete = #{isDelete}
             AND mall_goods.is_Delete = #{isDelete}
         </if>
         </if>

+ 16 - 6
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -41,6 +41,7 @@
         <result column="thirdPartyMerchCode" property="thirdPartyMerchCode" />
         <result column="thirdPartyMerchCode" property="thirdPartyMerchCode" />
         <result column="isStockShare" property="isStockShare" />
         <result column="isStockShare" property="isStockShare" />
         <result column="goodsSellVolume" property="goodsSellVolume" />
         <result column="goodsSellVolume" property="goodsSellVolume" />
+        <result column="hot_sort_num" property="hotSortNum" />
     </resultMap>
     </resultMap>
 
 
     <select id="queryObject" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
     <select id="queryObject" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
@@ -72,7 +73,7 @@
             a.attribute_category,
             a.attribute_category,
             a.brand_id,
             a.brand_id,
             a.freight_id,
             a.freight_id,
-            supplier_third_id
+            supplier_third_id, a.hot_sort_num
         FROM
         FROM
             mall_product_store_rela a
             mall_product_store_rela a
             LEFT JOIN mall_store s ON a.store_id = s.id
             LEFT JOIN mall_store s ON a.store_id = s.id
@@ -108,7 +109,7 @@
             b.goods_number goodsNumber,
             b.goods_number goodsNumber,
             mb.is_stock_share isStockShare,
             mb.is_stock_share isStockShare,
             b.sell_volume goodsSellVolume,
             b.sell_volume goodsSellVolume,
-            supplier_third_id
+            supplier_third_id, a.hot_sort_num
         from mall_product_store_rela a
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
         left join mall_goods b on a.goods_id = b.id
         left join mall_store s on a.store_id = s.id
         left join mall_store s on a.store_id = s.id
@@ -135,7 +136,7 @@
             a.attribute_category,
             a.attribute_category,
             a.brand_id,
             a.brand_id,
             a.freight_id,
             a.freight_id,
-            supplier_third_id
+            supplier_third_id, a.hot_sort_num
         from mall_product_store_rela a
         from mall_product_store_rela a
         where a.store_id = #{storeId} and a.goods_id = #{goodsId}
         where a.store_id = #{storeId} and a.goods_id = #{goodsId}
     </select>
     </select>
@@ -170,7 +171,7 @@
         b.goods_number goodsNumber,
         b.goods_number goodsNumber,
         b.third_party_merch_code thirdPartyMerchCode,
         b.third_party_merch_code thirdPartyMerchCode,
         mb.is_stock_share isStockShare,
         mb.is_stock_share isStockShare,
-        b.list_pic_url,supplier_third_id
+        b.list_pic_url,supplier_third_id, a.hot_sort_num
         from mall_product_store_rela a
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
         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 third_merchant_biz mb on mb.third_party_merch_code = b.third_party_merch_code and mb.merch_sn=b.merch_sn
@@ -255,7 +256,7 @@
         a.category_id,
         a.category_id,
         a.attribute_category,
         a.attribute_category,
         a.brand_id,
         a.brand_id,
-        a.freight_id,supplier_third_id
+        a.freight_id,supplier_third_id,a.hot_sort_num
         from mall_product_store_rela a
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
         left join mall_goods b on a.goods_id = b.id
         left join mall_product c on a.product_id = c.id
         left join mall_product c on a.product_id = c.id
@@ -387,6 +388,9 @@
         <if test="freightId != null" >
         <if test="freightId != null" >
             freight_id,
             freight_id,
         </if>
         </if>
+        <if test="hotSortNum != null" >
+            hot_sort_num,
+        </if>
         <if test="createrSn != null" >
         <if test="createrSn != null" >
             creater_sn,
             creater_sn,
         </if>
         </if>
@@ -430,6 +434,9 @@
         <if test="freightId != null" >
         <if test="freightId != null" >
             #{freightId,jdbcType=CHAR},
             #{freightId,jdbcType=CHAR},
         </if>
         </if>
+        <if test="hotSortNum != null" >
+            #{hotSortNum},
+        </if>
         <if test="createrSn != null" >
         <if test="createrSn != null" >
             #{createrSn,jdbcType=VARCHAR},
             #{createrSn,jdbcType=VARCHAR},
         </if>
         </if>
@@ -477,6 +484,9 @@
             <if test="freightId != null" >
             <if test="freightId != null" >
                 freight_id = #{freightId,jdbcType=CHAR},
                 freight_id = #{freightId,jdbcType=CHAR},
             </if>
             </if>
+            <if test="hotSortNum != null" >
+                hot_sort_num = #{hotSortNum,jdbcType=CHAR},
+            </if>
             <if test="createrSn != null" >
             <if test="createrSn != null" >
                 creater_sn = #{createrSn,jdbcType=VARCHAR},
                 creater_sn = #{createrSn,jdbcType=VARCHAR},
             </if>
             </if>
@@ -679,4 +689,4 @@
         where a.goods_id = #{goodsId}
         where a.goods_id = #{goodsId}
     </update>
     </update>
 
 
-</mapper>
+</mapper>

+ 46 - 6
kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml

@@ -115,7 +115,7 @@
 			AND s.store_name LIKE concat('%',#{storeName},'%')
 			AND s.store_name LIKE concat('%',#{storeName},'%')
 		</if>
 		</if>
 		<if test="storeNumber != null and storeNumber.trim() != ''">
 		<if test="storeNumber != null and storeNumber.trim() != ''">
-			AND s.storeNumber LIKE concat('%',#{store_number},'%')
+			AND s.store_number LIKE concat('%',#{storeNumber},'%')
 		</if>
 		</if>
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
 			AND s.third_party_merch_code = #{thirdPartyMerchCode}
 			AND s.third_party_merch_code = #{thirdPartyMerchCode}
@@ -141,7 +141,7 @@
 			limit #{offset}, #{limit}
 			limit #{offset}, #{limit}
 		</if>
 		</if>
 	</select>
 	</select>
-	
+
  	<select id="queryTotal" resultType="int">
  	<select id="queryTotal" resultType="int">
 		select count(*) from mall_store s left join third_merchant_biz t on s.third_party_merch_code = t.third_party_merch_code
 		select count(*) from mall_store s left join third_merchant_biz t on s.third_party_merch_code = t.third_party_merch_code
 		WHERE 1=1
 		WHERE 1=1
@@ -152,7 +152,7 @@
 			AND s.store_name LIKE concat('%',#{storeName},'%')
 			AND s.store_name LIKE concat('%',#{storeName},'%')
 		</if>
 		</if>
 		<if test="storeNumber != null and storeNumber.trim() != ''">
 		<if test="storeNumber != null and storeNumber.trim() != ''">
-			AND s.storeNumber LIKE concat('%',#{store_number},'%')
+			AND s.store_number LIKE concat('%',#{storeNumber},'%')
 		</if>
 		</if>
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
 			AND s.third_party_merch_code = #{thirdPartyMerchCode}
 			AND s.third_party_merch_code = #{thirdPartyMerchCode}
@@ -239,11 +239,11 @@
 		</set>
 		</set>
 		where id = #{id}
 		where id = #{id}
 	</update>
 	</update>
-	
+
 	<delete id="delete">
 	<delete id="delete">
 		delete from mall_store where id = #{value}
 		delete from mall_store where id = #{value}
 	</delete>
 	</delete>
-	
+
 	<delete id="deleteBatch">
 	<delete id="deleteBatch">
 		delete from mall_store where id in
 		delete from mall_store where id in
 		<foreach item="id" collection="array" open="(" separator="," close=")">
 		<foreach item="id" collection="array" open="(" separator="," close=")">
@@ -251,4 +251,44 @@
 		</foreach>
 		</foreach>
 	</delete>
 	</delete>
 
 
-</mapper>
+	<select id="queryExportList" resultType="com.kmall.admin.entity.StoreEntity">
+		select
+		s.`id`,
+		s.`merch_sn`,
+		s.`merch_name`,
+		s.`store_name`,
+		s.`store_number`,
+		s.`store_address`,
+		s.`province_name`,
+		s.`city_name`,
+		s.`county_name`,
+		s.`latitude`,
+		s.`longitude`,
+		s.`cover_radius`,
+		s.`remark`,s.merch_sn, s.merch_name, s.creater_sn, s.create_time,s.third_party_merch_code,t.third_party_merch_name,s.expr_agreement_type,
+		s.moder_sn, s.mod_time, s.tstm,s.is_valid
+		from mall_store s left join third_merchant_biz t on s.third_party_merch_code = t.third_party_merch_code
+		WHERE 1=1
+		<if test="merchSn != null and merchSn.trim() != ''">
+			AND s.merch_sn = #{merchSn}
+		</if>
+		<if test="storeName != null and storeName.trim() != ''">
+			AND s.store_name LIKE concat('%',#{storeName},'%')
+		</if>
+		<if test="storeNumber != null and storeNumber.trim() != ''">
+			AND s.store_number LIKE concat('%',#{storeNumber},'%')
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
+			AND s.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+			AND t.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="isSupplierGoods != null and isSupplierGoods.trim() != ''">
+			AND t.is_supplier_goods = #{isSupplierGoods}
+		</if>
+		<if test="id != null">
+			AND s.id = #{id}
+		</if>
+	</select>
+</mapper>

+ 23 - 19
kmall-admin/src/main/resources/mybatis/mapper/SysRoleDao.xml

@@ -6,7 +6,7 @@
 	<select id="queryObject" resultType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
 	<select id="queryObject" resultType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
 		select * from sys_role where role_id = #{value}
 		select * from sys_role where role_id = #{value}
 	</select>
 	</select>
-	
+
 	<select id="queryList" resultType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
 	<select id="queryList" resultType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
 		select r.*, (select d.name from sys_dept d where d.dept_id = r.dept_id) deptName from sys_role r
 		select r.*, (select d.name from sys_dept d where d.dept_id = r.dept_id) deptName from sys_role r
 		<where>
 		<where>
@@ -29,23 +29,23 @@
 			limit #{offset}, #{limit}
 			limit #{offset}, #{limit}
 		</if>
 		</if>
 	</select>
 	</select>
-	
+
 	<select id="queryTotal" resultType="int">
 	<select id="queryTotal" resultType="int">
-		select count(*) from sys_role 
+		select count(*) from sys_role
 		<where>
 		<where>
 			<if test="roleName != null and roleName.trim() != ''">
 			<if test="roleName != null and roleName.trim() != ''">
-				and `role_name` like concat('%',#{roleName},'%') 
+				and `role_name` like concat('%',#{roleName},'%')
 			</if>
 			</if>
 			<if test="createUserId != null">
 			<if test="createUserId != null">
-				and create_user_id = #{createUserId} 
+				and create_user_id = #{createUserId}
 			</if>
 			</if>
 		</where>
 		</where>
 	</select>
 	</select>
-	
+
 	<insert id="save" parameterType="com.kmall.admin.fromcomm.entity.SysRoleEntity" useGeneratedKeys="true" keyProperty="roleId">
 	<insert id="save" parameterType="com.kmall.admin.fromcomm.entity.SysRoleEntity" useGeneratedKeys="true" keyProperty="roleId">
 		insert into sys_role
 		insert into sys_role
 		(
 		(
-			`role_id`, 
+			`role_id`,
 			`role_name`,
 			`role_name`,
 			`dept_id`,
 			`dept_id`,
 			`remark`,
 			`remark`,
@@ -54,7 +54,7 @@
 		)
 		)
 		values
 		values
 		(
 		(
-			#{roleId}, 
+			#{roleId},
 			#{roleName},
 			#{roleName},
 			#{deptId},
 			#{deptId},
 			#{remark},
 			#{remark},
@@ -62,10 +62,10 @@
 			#{createTime}
 			#{createTime}
 		)
 		)
 	</insert>
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
 	<update id="update" parameterType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
-		update sys_role 
-		<set> 
+		update sys_role
+		<set>
 			<if test="roleName != null">`role_name` = #{roleName}, </if>
 			<if test="roleName != null">`role_name` = #{roleName}, </if>
 			<if test="remark != null">`remark` = #{remark},</if>
 			<if test="remark != null">`remark` = #{remark},</if>
 			<if test="deptId != null">`dept_id` = #{deptId}, </if>
 			<if test="deptId != null">`dept_id` = #{deptId}, </if>
@@ -75,14 +75,14 @@
 	<delete id="delete">
 	<delete id="delete">
 		delete from sys_role where role_id = #{roleId}
 		delete from sys_role where role_id = #{roleId}
 	</delete>
 	</delete>
-	
+
 	<delete id="deleteBatch">
 	<delete id="deleteBatch">
-		delete from sys_role where role_id in 
+		delete from sys_role where role_id in
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 			#{roleId}
 			#{roleId}
 		</foreach>
 		</foreach>
 		;
 		;
-		delete from sys_role_menu where role_id in 
+		delete from sys_role_menu where role_id in
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 			#{roleId}
 			#{roleId}
 		</foreach>
 		</foreach>
@@ -92,14 +92,18 @@
 			#{roleId}
 			#{roleId}
 		</foreach>
 		</foreach>
 		;
 		;
-		delete from sys_user_role where role_id in 
+		delete from sys_user_role where role_id in
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 		<foreach item="roleId" collection="array" open="(" separator="," close=")">
 			#{roleId}
 			#{roleId}
 		</foreach>
 		</foreach>
 	</delete>
 	</delete>
-	
+
 	<!-- 查询用户创建的角色ID列表 -->
 	<!-- 查询用户创建的角色ID列表 -->
 	<select id="queryRoleIdList" resultType="long">
 	<select id="queryRoleIdList" resultType="long">
-		select role_id from sys_role where create_user_id = #{createUserId} 
-	</select> 
-</mapper>
+		select role_id from sys_role where create_user_id = #{createUserId}
+	</select>
+
+	<select id="queryObjectByName" resultType="com.kmall.admin.fromcomm.entity.SysRoleEntity">
+		select * from sys_role where role_name = #{roleName}
+	</select>
+</mapper>

+ 26 - 1
kmall-admin/src/main/resources/mybatis/mapper/SysSmsLogDao.xml

@@ -208,4 +208,29 @@
 		left join sys_sms_log b on a.user_id = b.user_id and b.stime > a.stime
 		left join sys_sms_log b on a.user_id = b.user_id and b.stime > a.stime
 		where a.user_id = #{user_id} and b.id is null
 		where a.user_id = #{user_id} and b.id is null
 	</select>
 	</select>
-</mapper>
+
+
+    <select id="querySmsCodeByMobile" resultType="com.kmall.manager.entity.SysSmsLogEntity">
+		select
+		a.id,
+        a.user_id,
+        a.content,
+        a.mobile,
+        a.store_id,
+        a.merch_sn,
+        a.stime,
+        a.sign,
+        a.type,
+        a.extno,
+        a.send_status,
+        a.send_id,
+        a.invalid_num,
+        a.success_num,
+        a.black_num,
+        a.return_msg,
+        a.sms_code
+		from sys_sms_log a
+		left join sys_sms_log b on a.user_id = b.user_id and b.stime > a.stime
+		where a.mobile = #{mobile} and b.id is null  order by stime desc limit 1
+	</select>
+</mapper>

+ 26 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/ad.html

@@ -6,7 +6,7 @@
 </head>
 </head>
 <body>
 <body>
 <div id="rrapp" v-cloak>
 <div id="rrapp" v-cloak>
-    <div v-show="showList">
+    <div v-show="!showViewList">
         <Row :gutter="16">
         <Row :gutter="16">
             <div class="search-group">
             <div class="search-group">
                 <i-col span="4">
                 <i-col span="4">
@@ -111,8 +111,32 @@
             </Form-item>
             </Form-item>
         </i-form>
         </i-form>
     </Card>
     </Card>
+
+    <Card v-show="!showCopyList">
+        <p slot="title">{{title}}</p>
+        <i-form>
+            <Form-item label="广告id" prop="id">
+                <i-input v-model="copyAdDto.adId" placeholder="广告id" disabled/>
+            </Form-item>
+            <Form-item>
+                <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                        :format="['xls','xlsx']"
+                        action="../uploadCommon/storeIdUpload">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">复制广告(批量上传门店id)</i-button>
+                </Upload>
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/store_id_export_yyyy_mm_dd_v1.0.0.xls">广告门店id模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+            </Form-item>
+            <Form-item label="上传成功的门店id" prop="storeList">
+                <i-input v-model="copyAdDto.storeList" placeholder="上传成功的门店id" disabled/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmitCopyAd()">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+            </Form-item>
+        </i-form>
+    </Card>
 </div>
 </div>
 
 
 <script src="${rc.contextPath}/js/shop/ad.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/ad.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

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

@@ -6,12 +6,19 @@
 </head>
 </head>
 <body>
 <body>
 <div id="rrapp" v-cloak>
 <div id="rrapp" v-cloak>
-    <div v-show="showList">
+    <div v-show="!showViewList">
         <Row :gutter="16">
         <Row :gutter="16">
             <div class="search-group">
             <div class="search-group">
                 <i-col span="4">
                 <i-col span="4">
                     <i-input v-model="q.name" @on-enter="query" placeholder="品牌名称"/>
                     <i-input v-model="q.name" @on-enter="query" placeholder="品牌名称"/>
                 </i-col>
                 </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
                 <i-button @click="query">查询</i-button>
                 <i-button @click="query">查询</i-button>
             </div>
             </div>
             <div class="buttons-group">
             <div class="buttons-group">
@@ -206,8 +213,35 @@
             </Form-item>
             </Form-item>
         </i-form>
         </i-form>
     </Card>
     </Card>
+
+    <Card v-show="!showCopyList">
+        <p slot="title">{{title}}</p>
+        <i-form>
+            <Form-item label="品牌id" prop="id">
+                <i-input v-model="copyBrandDto.brandId" placeholder="品牌id" disabled/>
+            </Form-item>
+            <Form-item>
+                <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                        :format="['xls','xlsx']"
+                        action="../uploadCommon/brandStoreUpload">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">复制品牌(批量上传门店id)</i-button>
+                </Upload>
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/category_store_export_yyyy_mm_dd_v1.0.0.xls">品牌门店id模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+            </Form-item>
+            <Form-item label="上传成功的门店id" prop="storeList">
+                <i-input v-model="copyBrandDto.storeList" placeholder="上传成功的门店id" disabled/>
+            </Form-item>
+            <Form-item label="上传成功的分类id" prop="categoryList">
+                <i-input v-model="copyBrandDto.categoryList" placeholder="上传成功的分类id" disabled/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmitCopyBrand()">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+            </Form-item>
+        </i-form>
+    </Card>
 </div>
 </div>
 
 
 <script src="${rc.contextPath}/js/shop/brand.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/brand.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

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

@@ -6,7 +6,7 @@
 </head>
 </head>
 <body>
 <body>
 <div id="rrapp" v-cloak>
 <div id="rrapp" v-cloak>
-    <div v-show="showList">
+    <div v-show="!showViewList">
         <Row :gutter="16">
         <Row :gutter="16">
             <div class="search-group">
             <div class="search-group">
                 <i-col span="4">
                 <i-col span="4">
@@ -229,8 +229,43 @@
             </Form-item>
             </Form-item>
         </i-form>
         </i-form>
     </Card>
     </Card>
+
+    <Card v-show="!showCopyList">
+        <p slot="title">{{title}}</p>
+        <i-form>
+            <Form-item label="分类id" prop="id">
+                <i-input v-model="copyCategoryDto.categoryId" placeholder="分类id" disabled/>
+            </Form-item>
+            <Form-item v-if="level=='L1'">
+                <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                        :format="['xls','xlsx']"
+                        action="../uploadCommon/storeIdUpload">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">复制一级分类(批量上传门店id)</i-button>
+                </Upload>
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/store_id_export_yyyy_mm_dd_v1.0.0.xls">一级分类门店id模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+            </Form-item>
+            <Form-item v-if="level=='L2'">
+                <Upload :show-upload-list="false" :on-success="uploadExcelL2Success" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                        :format="['xls','xlsx']"
+                        action="../uploadCommon/cateStoreUpload">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">复制二级分类(批量上传门店id)</i-button>
+                </Upload>
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/category_store_export_yyyy_mm_dd_v1.0.0.xls">二级分类模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+            </Form-item>
+            <Form-item label="上传成功的门店id" prop="storeList">
+                <i-input v-model="copyCategoryDto.storeList" placeholder="上传成功的门店id" disabled/>
+            </Form-item>
+            <Form-item label="上传成功的分类id" prop="categoryList" v-if="level=='L2'">
+                <i-input v-model="copyCategoryDto.categoryList" placeholder="上传成功的分类id" disabled/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmitCopyCate()">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+            </Form-item>
+        </i-form>
+    </Card>
 </div>
 </div>
 
 
 <script src="${rc.contextPath}/js/shop/category.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/category.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

+ 26 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/freight.html

@@ -6,7 +6,7 @@
 </head>
 </head>
 <body>
 <body>
 <div id="rrapp" v-cloak>
 <div id="rrapp" v-cloak>
-    <div v-show="showList">
+    <div v-show="!showViewList">
         <Row :gutter="16">
         <Row :gutter="16">
             <div class="search-group">
             <div class="search-group">
                 <i-col span="4">
                 <i-col span="4">
@@ -115,6 +115,30 @@
             <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
             <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
         </div>
         </div>
     </Card>
     </Card>
+
+    <Card v-show="!showCopyList">
+        <p slot="title">{{title}}</p>
+        <i-form>
+            <Form-item label="运费id" prop="id">
+                <i-input v-model="copyFreightDto.freightId" placeholder="运费id" disabled/>
+            </Form-item>
+            <Form-item>
+                <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                        :format="['xls','xlsx']"
+                        action="../uploadCommon/storeIdUpload">
+                    <i-button type="ghost" icon="ios-cloud-upload-outline">复制运费(批量上传门店id)</i-button>
+                </Upload>
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/store_id_export_yyyy_mm_dd_v1.0.0.xls">运费门店id模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+            </Form-item>
+            <Form-item label="上传成功的门店id" prop="storeList">
+                <i-input v-model="copyFreightDto.storeList" placeholder="上传成功的门店id" disabled/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmitCopyFreight()">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+            </Form-item>
+        </i-form>
+    </Card>
 </div>
 </div>
 
 
 <!-- 选择类型 -->
 <!-- 选择类型 -->
@@ -124,4 +148,4 @@
 
 
 <script src="${rc.contextPath}/js/shop/freight.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/freight.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

+ 26 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/orderresend.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>订单退款记录表</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList == 0">
+        <Row :gutter="16">
+            <div class="search-group">
+<!--                <i-col span="4">-->
+<!--                    <i-input v-model="q.orderSn" @on-enter="query" placeholder="订单编号"/>-->
+<!--                </i-col>-->
+<!--                <i-button @click="query">查询</i-button>-->
+<!--                <i-button @click="reloadSearch">重置</i-button>-->
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+<!--	    <div id="jqGridPager"></div>-->
+    </div>
+</div>
+
+<script src="${rc.contextPath}/js/shop/orderresend.js?_${date.systemTime}"></script>
+</body>
+</html>

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

@@ -30,7 +30,7 @@
         <div id="jqGridPager"></div>
         <div id="jqGridPager"></div>
     </div>
     </div>
 
 
-    <Card v-show="!showList">
+    <!--<Card v-show="!showList">
         <p slot="title">{{title}}</p>
         <p slot="title">{{title}}</p>
         <i-form ref="formValidate" :model="product" :rules="ruleValidate" :label-width="80">
         <i-form ref="formValidate" :model="product" :rules="ruleValidate" :label-width="80">
             <Form-item label="商品" prop="goodsId">
             <Form-item label="商品" prop="goodsId">
@@ -102,9 +102,9 @@
                 <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
                 <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
             </Form-item>
             </Form-item>
         </i-form>
         </i-form>
-    </Card>
+    </Card>-->
 </div>
 </div>
 
 
 <script src="${rc.contextPath}/js/shop/product.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/product.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

+ 16 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/store.html

@@ -28,6 +28,21 @@
                 #if($shiro.hasPermission("store:delete"))
                 #if($shiro.hasPermission("store:delete"))
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 #end
                 #end
+                #if($shiro.hasPermission("store:storeUpload"))
+                <i-col style="display: inline-grid;">
+                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                            :format="['xls','xlsx']"
+                            action="../store/storeUpload">
+                        <i-button type="ghost" icon="ios-cloud-upload-outline">门店导入</i-button>
+                    </Upload>
+                </i-col>
+                #end
+                #if($shiro.hasPermission("store:down"))
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/store_export_yyyy_mm_dd_v1.0.0.xls">门店模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+                #end
+                #if($shiro.hasPermission("store:export"))
+                <i-button type="primary" @click="exportStore"><i class="fa fa-cloud-download"></i>&nbsp;门店id导出</i-button>
+                #end
             </div>
             </div>
         </Row>
         </Row>
         <table id="jqGrid"></table>
         <table id="jqGrid"></table>
@@ -122,4 +137,4 @@
 
 
 <script src="${rc.contextPath}/js/shop/store.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/shop/store.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

+ 23 - 3
kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html

@@ -122,6 +122,18 @@
                 #if($shiro.hasPermission("productstorerela:delete"))
                 #if($shiro.hasPermission("productstorerela:delete"))
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 #end
                 #end
+                #if($shiro.hasPermission("productstorerela:productStoreRelaUpload"))
+                <i-col style="display: inline-grid;">
+                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                            :format="['xls','xlsx']"
+                            action="../productstorerela/productStoreRelaUpload">
+                        <i-button type="ghost" icon="ios-cloud-upload-outline">门店商品导入</i-button>
+                    </Upload>
+                </i-col>
+                #end
+                #if($shiro.hasPermission("productstorerela:down"))
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/store_goods_export_yyyy_mm_dd_v1.0.0.xls">门店商品模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+                #end
             </div>
             </div>
         </Row>
         </Row>
         <table id="jqGrid"></table>
         <table id="jqGrid"></table>
@@ -199,9 +211,13 @@
                               style="width: 268px;"/>
                               style="width: 268px;"/>
             </Form-item>
             </Form-item>
             <Form-item v-if="showInput" label="市场价" prop="marketPrice">
             <Form-item v-if="showInput" label="市场价" prop="marketPrice">
-                <Input-number :min="0.01" :step="0.01" v-model="productStoreRela.marketPrice" placeholder="市场价"
+                <i-input v-model="productStoreRela.marketPrice" placeholder="市场价"
                               style="width: 268px;"/>
                               style="width: 268px;"/>
             </Form-item>
             </Form-item>
+            <Form-item v-if="showInput&&isHotShow" label="热销商品排序" prop="hotSortNum">
+                <i-input v-model="productStoreRela.hotSortNum" placeholder="热销商品排序"
+                         style="width: 268px;"/>
+            </Form-item>
             <div v-if="showInput" v-for="(item,index) in attributeEntityList" v-show="item.isDelete==0" style="margin-left: 16px;">
             <div v-if="showInput" v-for="(item,index) in attributeEntityList" v-show="item.isDelete==0" style="margin-left: 16px;">
                 <div class="row">
                 <div class="row">
                     <div class="col-md-3">
                     <div class="col-md-3">
@@ -316,9 +332,13 @@
                               style="width: 268px;"/>
                               style="width: 268px;"/>
             </Form-item>
             </Form-item>
             <Form-item v-if="showInput" label="市场价" prop="marketPrice">
             <Form-item v-if="showInput" label="市场价" prop="marketPrice">
-                <Input-number :min="0.01" :step="0.01" v-model="productStoreRela.marketPrice" placeholder="市场价"
+                <i-input v-model="productStoreRela.marketPrice" placeholder="市场价"
                               style="width: 268px;"/>
                               style="width: 268px;"/>
             </Form-item>
             </Form-item>
+            <Form-item v-if="showInput&&isHotShow" label="热销商品排序" prop="hotSortNum">
+                <i-input v-model="productStoreRela.hotSortNum" placeholder="热销商品排序"
+                         style="width: 268px;"/>
+            </Form-item>
             <div v-if="showInput" v-for="(item,index) in attributeEntityList" v-show="item.isDelete==0" style="margin-left: 16px;">
             <div v-if="showInput" v-for="(item,index) in attributeEntityList" v-show="item.isDelete==0" style="margin-left: 16px;">
                 <div class="row">
                 <div class="row">
                     <div class="col-md-3">
                     <div class="col-md-3">
@@ -400,4 +420,4 @@
         left: 0px;
         left: 0px;
     }
     }
 </style>
 </style>
-</html>
+</html>

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

@@ -24,6 +24,18 @@
                 #if($shiro.hasPermission("sys:user:delete"))
                 #if($shiro.hasPermission("sys:user:delete"))
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 #end
                 #end
+                #if($shiro.hasPermission("sys:user:sysUserUpload"))
+                <i-col style="display: inline-grid;">
+                    <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"
+                            :format="['xls','xlsx']"
+                            action="../sys/user/sysUserUpload">
+                        <i-button type="ghost" icon="ios-cloud-upload-outline">管理员导入</i-button>
+                    </Upload>
+                </i-col>
+                #end
+                #if($shiro.hasPermission("sys:user:down"))
+                &nbsp;&nbsp;&nbsp;<a href="../statics/file/sys_user_export_yyyy_mm_dd_v1.0.0.xls">管理员模板下载</a>&nbsp;&nbsp;&nbsp;&nbsp;
+                #end
             </div>
             </div>
         </Row>
         </Row>
         <table id="jqGrid"></table>
         <table id="jqGrid"></table>
@@ -99,4 +111,4 @@
 </div>
 </div>
 <script src="${rc.contextPath}/js/sys/user.js?_${date.systemTime}"></script>
 <script src="${rc.contextPath}/js/sys/user.js?_${date.systemTime}"></script>
 </body>
 </body>
-</html>
+</html>

+ 84 - 8
kmall-admin/src/main/webapp/js/shop/ad.js

@@ -4,6 +4,8 @@ $(function () {
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
             {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+            {label: '所属商户', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
+            {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
             {label: '广告位置', name: 'adPositionName', index: 'ad_Position_id', width: 80},
             {label: '广告位置', name: 'adPositionName', index: 'ad_Position_id', width: 80},
             {label: '广告名称', name: 'name', index: 'name', width: 80},
             {label: '广告名称', name: 'name', index: 'name', width: 80},
             {label: '链接', name: 'link', index: 'link', width: 80},
             {label: '链接', name: 'link', index: 'link', width: 80},
@@ -19,12 +21,18 @@ $(function () {
             }
             }
             },
             },
             {label: '排序', name: 'sortOrder', index: 'sortOrder', width: 80},
             {label: '排序', name: 'sortOrder', index: 'sortOrder', width: 80},
-            {
-                label: '状态', name: 'enabled', index: 'enabled', width: 80, formatter: function (value) {
-                return value === 0 ?
-                    '<span class="label label-danger">禁用</span>' :
-                    '<span class="label label-success">正常</span>';
-            }
+            {label: '状态', name: 'enabled', index: 'enabled', width: 80,
+                formatter: function (value) {
+                    return value === 0 ?
+                        '<span class="label label-danger">禁用</span>' :
+                        '<span class="label label-success">正常</span>';
+                }
+            },
+            {label: '操作', width: 90, align: 'center', sortable: false,
+                formatter: function (value, col, row) {
+                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                        "onclick='vm.copyAd(" + row.id + ")'>复制广告</button>";
+                }
             }],
             }],
         viewrecords: true,
         viewrecords: true,
         height: 550,
         height: 550,
@@ -72,14 +80,78 @@ var vm = new Vue({
         },
         },
         adPositions: [],
         adPositions: [],
         storeList: [],
         storeList: [],
-        merchList: []
+        merchList: [],
+        copyAdDto:{
+            adId: '',
+            storeList: ''
+        },
+        showCopyList: true,
+        showViewList: false,
     },
     },
     methods: {
     methods: {
+        copyAd: function(id){
+            vm.copyAdDto.adId = id;
+            vm.copyAdDto.storeList = "";
+            vm.showCopyList = false;
+            vm.showList = true;
+            vm.showViewList = true;
+            vm.title = "复制广告";
+        },
+        handleSubmitCopyAd: function () {
+            if(vm.copyAdDto.adId == ""){
+                alert('广告id不能为空');
+                return;
+            }
+            if(vm.copyAdDto.storeList == ""){
+                alert('门店id批量上传数据没有上传或未上传成功');
+                return;
+            }
+            var url = "../ad/saveCopyAd";
+            $.ajax({
+                type: "POST",
+                url: url,
+                contentType: "application/json",
+                data: JSON.stringify(vm.copyAdDto),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.showCopyList = true;
+                            vm.showList = true;
+                            vm.showViewList = false;
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+            });
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert(data.msg, function (index) {
+                    vm.copyAdDto.storeList = data.storeIds;
+                });
+            }else{
+                alert(data.msg);
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
+        },
         query: function () {
         query: function () {
             vm.reload();
             vm.reload();
         },
         },
         add: function () {
         add: function () {
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "新增";
             vm.title = "新增";
             vm.ad = {enabled: 1, imageUrl: '', mediaType: 0};
             vm.ad = {enabled: 1, imageUrl: '', mediaType: 0};
             vm.adPosition = [];
             vm.adPosition = [];
@@ -94,6 +166,8 @@ var vm = new Vue({
                 return;
                 return;
             }
             }
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "修改";
             vm.title = "修改";
 
 
             vm.getInfo(id);
             vm.getInfo(id);
@@ -160,7 +234,9 @@ var vm = new Vue({
             });
             });
         },
         },
         reload: function (event) {
         reload: function (event) {
+            vm.showViewList = false;
             vm.showList = true;
             vm.showList = true;
+            vm.showCopyList = true;
             var page = $("#jqGrid").jqGrid('getGridParam', 'page');
             var page = $("#jqGrid").jqGrid('getGridParam', 'page');
             $("#jqGrid").jqGrid('setGridParam', {
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 postData: {'name': vm.q.name},
@@ -204,4 +280,4 @@ var vm = new Vue({
             });
             });
         }
         }
     }
     }
-});
+});

+ 84 - 6
kmall-admin/src/main/webapp/js/shop/brand.js

@@ -3,7 +3,7 @@ $(function () {
         url: '../brand/list',
         url: '../brand/list',
         datatype: "json",
         datatype: "json",
         colModel: [{
         colModel: [{
-            label: 'id', name: 'id', index: 'id', key: true, hidden: true
+            label: 'id', name: 'id', index: 'id', key: true, width: 60
         },
         },
             {label: '所属商户', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '所属商户', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
             {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
@@ -42,7 +42,13 @@ $(function () {
             }
             }
         }, {
         }, {
             label: '新品牌排序', name: 'newSortOrder', index: 'new_sort_order', width: 80
             label: '新品牌排序', name: 'newSortOrder', index: 'new_sort_order', width: 80
-        }],
+        },
+            {label: '操作', width: 90, align: 'center', sortable: false,
+                formatter: function (value, col, row) {
+                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                        "onclick='vm.copyBrand(" + row.id + ")'>复制品牌</button>";
+                }
+            }],
         viewrecords: true,
         viewrecords: true,
         height: 550,
         height: 550,
         rowNum: 10,
         rowNum: 10,
@@ -102,18 +108,86 @@ var vm = new Vue({
             ]
             ]
         },
         },
         q: {
         q: {
-            name: ''
+            name: '',
+            storeId: ''
         },
         },
         storeList: [],
         storeList: [],
         merchList: [],
         merchList: [],
-        categories: []//一级分类
+        categories: [],//一级分类
+        copyBrandDto: {brandId: '', storeList:"", categoryList:""},
+        showCopyList: true,
+        showViewList: false,
     },
     },
     methods: {
     methods: {
+        copyBrand: function(id){
+            vm.copyBrandDto.brandId = id;
+            vm.copyBrandDto.storeList = "";
+            vm.copyBrandDto.categoryList = "";
+            vm.showCopyList = false;
+            vm.showList = true;
+            vm.showViewList = true;
+            vm.title = "复制品牌";
+        },
+        handleSubmitCopyBrand: function () {
+            if(vm.copyBrandDto.brandId == ""){
+                alert('品牌id不能为空');
+                return;
+            }
+            if(vm.copyBrandDto.storeList == ""){
+                alert('门店id批量上传数据没有上传或未上传成功');
+                return;
+            }
+            if(vm.copyBrandDto.categoryList == ""){
+                alert('分类id批量上传数据没有上传或未上传成功');
+                return;
+            }
+            var url = "../brand/saveCopyBrand";
+            $.ajax({
+                type: "POST",
+                url: url,
+                contentType: "application/json",
+                data: JSON.stringify(vm.copyBrandDto),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.showCopyList = true;
+                            vm.showList = true;
+                            vm.showViewList = false;
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+            });
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert(data.msg, function (index) {
+                    vm.copyBrandDto.storeList = data.copyBrandDto.storeList;
+                    vm.copyBrandDto.categoryList = data.copyBrandDto.categoryList;
+                });
+            }else{
+                alert(data.msg);
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
+        },
         query: function () {
         query: function () {
             vm.reload();
             vm.reload();
         },
         },
         add: function () {
         add: function () {
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "新增";
             vm.title = "新增";
             vm.brand = {listPicUrl: '', picUrl: '', appListPicUrl: '', newPicUrl: '', isShow: 1, isNew: 0};
             vm.brand = {listPicUrl: '', picUrl: '', appListPicUrl: '', newPicUrl: '', isShow: 1, isNew: 0};
             vm.storeList = [];
             vm.storeList = [];
@@ -126,6 +200,8 @@ var vm = new Vue({
                 return;
                 return;
             }
             }
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "修改";
             vm.title = "修改";
             vm.brand = {listPicUrl: '', picUrl: '', appListPicUrl: '', newPicUrl: '', isShow: 1, isNew: 0};
             vm.brand = {listPicUrl: '', picUrl: '', appListPicUrl: '', newPicUrl: '', isShow: 1, isNew: 0};
             vm.storeList = [];
             vm.storeList = [];
@@ -203,10 +279,12 @@ var vm = new Vue({
             });
             });
         },
         },
         reload: function (event) {
         reload: function (event) {
+            vm.showViewList = false;
             vm.showList = true;
             vm.showList = true;
+            vm.showCopyList = true;
             var page = $("#jqGrid").jqGrid('getGridParam', 'page');
             var page = $("#jqGrid").jqGrid('getGridParam', 'page');
             $("#jqGrid").jqGrid('setGridParam', {
             $("#jqGrid").jqGrid('setGridParam', {
-                postData: {'name': vm.q.name},
+                postData: {'name': vm.q.name,'storeId':vm.q.storeId},
                 page: page
                 page: page
             }).trigger("reloadGrid");
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
             vm.handleReset('formValidate');
@@ -260,4 +338,4 @@ var vm = new Vue({
             handleResetForm(this, name);
             handleResetForm(this, name);
         }
         }
     }
     }
-});
+});

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

@@ -58,6 +58,12 @@ TreeGrid.initColumn = function () {
             formatter: function (item, index) {
             formatter: function (item, index) {
                 return transIsNot(item.show)
                 return transIsNot(item.show)
             }
             }
+        },
+        {title: '操作', width: '90px', align: 'center', valign: 'middle',
+            formatter: function (item, index) {
+                return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                    "onclick='vm.copyCategory(" + item.id + ",\""+ item.level +"\")'>复制分类</button>";
+            }
         }]
         }]
     return columns;
     return columns;
 };
 };
@@ -97,9 +103,88 @@ var vm = new Vue({
         categoryList: [],
         categoryList: [],
         storeList: [],
         storeList: [],
         stores: [],
         stores: [],
-        merchList: []
+        merchList: [],
+        showCopyList: true,
+        showViewList: false,
+        copyCategoryDto:{categoryId:0,storeList: "",categoryList:""},
+        level: ''
     },
     },
     methods: {
     methods: {
+        copyCategory: function(id, level){
+            vm.copyCategoryDto.categoryId = id;
+            vm.copyCategoryDto.storeList = "";
+            vm.copyCategoryDto.categoryList = "";
+            vm.showCopyList = false;
+            vm.showList = true;
+            vm.showViewList = true;
+            vm.title = "复制分类";
+            vm.level = level;
+        },
+        handleSubmitCopyCate: function () {
+            if(vm.copyCategoryDto.categoryId == ""){
+                alert('分类id不能为空');
+                return;
+            }
+            if(vm.copyCategoryDto.storeList == ""){
+                alert('门店id批量上传数据没有上传或未上传成功');
+                return;
+            }
+            if(vm.level == 'L2'){
+                if(vm.copyCategoryDto.categoryList == ""){
+                    alert('分类id批量上传数据没有上传或未上传成功');
+                    return;
+                }
+            }
+            var url = "../category/saveCopyCategory";
+            $.ajax({
+                type: "POST",
+                url: url,
+                contentType: "application/json",
+                data: JSON.stringify(vm.copyCategoryDto),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.showCopyList = true;
+                            vm.showList = true;
+                            vm.showViewList = false;
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+            });
+        },
+        uploadExcelL2Success: function (data) {
+            console.log(data);
+            if(data.code==0){
+                alert(data.msg, function (index) {
+                    vm.copyCategoryDto.storeList = data.copyCategoryDto.storeList;
+                    vm.copyCategoryDto.categoryList = data.copyCategoryDto.categoryList;
+                });
+            }else{
+                alert(data.msg);
+            }
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert(data.msg, function (index) {
+                    vm.copyCategoryDto.storeList = data.storeIds;
+                });
+            }else{
+                alert(data.msg);
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
+        },
         query: function () {
         query: function () {
             vm.reload();
             vm.reload();
         },
         },
@@ -112,6 +197,8 @@ var vm = new Vue({
         },
         },
         add: function () {
         add: function () {
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "新增";
             vm.title = "新增";
             vm.category = {isShow: 1, type: 0, level: 'L1', bannerUrl: '', iconUrl: '', imgUrl: '', wapBannerUrl: ''};
             vm.category = {isShow: 1, type: 0, level: 'L1', bannerUrl: '', iconUrl: '', imgUrl: '', wapBannerUrl: ''};
             // this.getParentCategory(vm.category.storeId);
             // this.getParentCategory(vm.category.storeId);
@@ -126,6 +213,8 @@ var vm = new Vue({
                 return;
                 return;
             }
             }
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "修改";
             vm.title = "修改";
             vm.category = {isShow: 1, type: 0, level: 'L1', bannerUrl: '', iconUrl: '', imgUrl: '', wapBannerUrl: ''};
             vm.category = {isShow: 1, type: 0, level: 'L1', bannerUrl: '', iconUrl: '', imgUrl: '', wapBannerUrl: ''};
             vm.storeList = [];
             vm.storeList = [];
@@ -208,7 +297,9 @@ var vm = new Vue({
             vm.getParentCategory(storeId);
             vm.getParentCategory(storeId);
         },
         },
         reload: function (event) {
         reload: function (event) {
+            vm.showViewList = false;
             vm.showList = true;
             vm.showList = true;
+            vm.showCopyList = true;
             // TreeGrid.table.refresh();
             // TreeGrid.table.refresh();
             initialPage();
             initialPage();
             getGrid();
             getGrid();
@@ -267,4 +358,4 @@ var vm = new Vue({
             vm.stores = r.list;
             vm.stores = r.list;
         });
         });
     }
     }
-});
+});

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

@@ -3,7 +3,7 @@ $(function () {
         url: '../freight/list',
         url: '../freight/list',
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: 'ID', name: 'id', index: 'id', hidden: true, key: true},
+            {label: 'ID', name: 'id', index: 'id', width: 20, key: true},
             {label: '所属商户', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '所属商户', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
             {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
             {label: '模版名称', name: 'name', index: 'name'},
             {label: '模版名称', name: 'name', index: 'name'},
@@ -18,6 +18,12 @@ $(function () {
                 formatter: function (value) {
                 formatter: function (value) {
                     return transPricingManner(value);
                     return transPricingManner(value);
                 }
                 }
+            },
+            {label: '操作', width: 90, align: 'center', sortable: false,
+                formatter: function (value, col, row) {
+                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                        "onclick='vm.copyFreight(" + row.id + ")'>复制运费</button>";
+                }
             }],
             }],
         viewrecords: true,
         viewrecords: true,
         height: 675,
         height: 675,
@@ -87,9 +93,71 @@ let vm = new Vue({
             isDelete: 0
             isDelete: 0
         }],
         }],
         storeList: [],
         storeList: [],
-        merchList: []
+        merchList: [],
+        copyFreightDto:{
+            freightId: '',
+            storeList: ''
+        },
+        showCopyList: true,
+        showViewList: false,
     },
     },
     methods: {
     methods: {
+        copyFreight: function(id){
+            vm.copyFreightDto.freightId = id;
+            vm.copyFreightDto.storeList = "";
+            vm.showCopyList = false;
+            vm.showList = true;
+            vm.showViewList = true;
+            vm.title = "复制运费";
+        },
+        handleSubmitCopyFreight: function () {
+            if(vm.copyFreightDto.freightId == ""){
+                alert('运费id不能为空');
+                return;
+            }
+            if(vm.copyFreightDto.storeList == ""){
+                alert('门店id批量上传数据没有上传或未上传成功');
+                return;
+            }
+            var url = "../freight/saveCopyFreight";
+            $.ajax({
+                type: "POST",
+                url: url,
+                contentType: "application/json",
+                data: JSON.stringify(vm.copyFreightDto),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.showCopyList = true;
+                            vm.showList = true;
+                            vm.showViewList = false;
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+            });
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert(data.msg, function (index) {
+                    vm.copyFreightDto.storeList = data.storeIds;
+                });
+            }else{
+                alert(data.msg);
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
+        },
         changeUnit: function(value) {
         changeUnit: function(value) {
             if (value == '0') {
             if (value == '0') {
                 $('#first').html('首件(个)');
                 $('#first').html('首件(个)');
@@ -129,6 +197,8 @@ let vm = new Vue({
         },
         },
         add: function () {
         add: function () {
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "新增";
             vm.title = "新增";
             vm.freight = {
             vm.freight = {
                 name: '',
                 name: '',
@@ -167,6 +237,8 @@ let vm = new Vue({
                 return;
                 return;
             }
             }
             vm.showList = false;
             vm.showList = false;
+            vm.showCopyList = true;
+            vm.showViewList = true;
             vm.title = "修改";
             vm.title = "修改";
             vm.freight = {
             vm.freight = {
                 name: '',
                 name: '',
@@ -267,7 +339,9 @@ let vm = new Vue({
             vm.reload();
             vm.reload();
         },
         },
         reload: function (event) {
         reload: function (event) {
+            vm.showViewList = false;
             vm.showList = true;
             vm.showList = true;
+            vm.showCopyList = true;
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
             $("#jqGrid").jqGrid('setGridParam', {
             $("#jqGrid").jqGrid('setGridParam', {
                 postData: {'name': vm.q.name},
                 postData: {'name': vm.q.name},

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

@@ -3,7 +3,7 @@ $(function () {
         url: '../goods/list',
         url: '../goods/list',
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: 'ID', name: 'id', index: 'id', hidden: true, key: true},
+            {label: 'ID', name: 'id', index: 'id', width: 60, key: true},
             {label: '商户名称', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '商户名称', name: 'merchName', index: 'merchName', width: 100, align: 'center'},
             {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60, align: 'center'},
             {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60, align: 'center'},
             {label: '商品编码', name: 'goodsSn', index: 'goods_Sn', width: 60, align: 'center'},
             {label: '商品编码', name: 'goodsSn', index: 'goods_Sn', width: 60, align: 'center'},
@@ -708,4 +708,4 @@ var vm = new Vue({
         });
         });
 
 
     }
     }
-});
+});

+ 195 - 0
kmall-admin/src/main/webapp/js/shop/orderresend.js

@@ -0,0 +1,195 @@
+$(function () {
+    let url = '../order/wxOrderResendQueryAllList';
+    $("#jqGrid").jqGrid({
+        url: url,
+        datatype: "json",
+        colModel: [
+			{label: 'wxOrderSn', name: 'wxOrderSn', index: 'wxOrderSn', key: true, hidden: true},
+			{label: '订单编号', name: 'wxOrderId', index: 'wxOrderId', width: 40},
+			{label: '商户订单编号', name: 'merchOrderId', index: 'merchOrderId', width: 90},
+			{label: '商户子订单编号', name: 'orderSn', index: 'orderSn', width: 100},
+            {label: '商户编号', name: 'merchSn', index: 'merchSn', width: 100},
+            {label: '商户名称', name: 'merchName', index: 'merchName', width: 70},
+            {label: '第三方商户代码', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 70},
+            {label: '商户下单时间', name: 'placeOrderlTimeStr', index: 'placeOrderlTimeStr', width: 80},
+            {label: '实际支付金额', name: 'acturalPaid', index: 'acturalPaid', width: 80, hidden: true},
+            {label: '订购人支付人核验', name: 'buyerPayCheck', index: 'buyerPayCheck', width: 80,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '未知';
+                    } else if (value == '1') {
+                        return '一致';
+                    } else if (value == '2') {
+                        return '不一致';
+                    }
+                    return '-';
+                }
+            },
+			{label: '电子订单发送状态', name: 'clecOrderStatus', index: 'clecOrderStatus', width: 80,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '待发送';
+                    } else if (value == '1') {
+                        return '发送中';
+                    } else if (value == '2') {
+                        return '已发送';
+                    }else {
+                        return '失败';
+                    }
+                    return '-';
+                }
+            },
+            {label: '运单发送状态', name: 'wayOrderStatus', index: 'wayOrderStatus', width: 70,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '待发送';
+                    } else if (value == '1') {
+                        return '发送中';
+                    } else if (value == '2') {
+                        return '已发送';
+                    }else {
+                        return '失败';
+                    }
+                    return '-';
+                }
+            },
+            {label: '核验发送状态', name: 'projectCheckStatus', index: 'projectCheckStatus', width: 70,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '待发送';
+                    } else if (value == '1') {
+                        return '发送中';
+                    } else if (value == '2') {
+                        return '已发送';
+                    }else {
+                        return '失败';
+                    }
+                    return '-';
+                }
+            },
+            {label: '支付单发送状态', name: 'playOrderStatus', index: 'playOrderStatus', width: 80,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '待发送';
+                    } else if (value == '1') {
+                        return '发送中';
+                    } else if (value == '2') {
+                        return '已发送';
+                    }else {
+                        return '失败';
+                    }
+                    return '-';
+                }
+            },
+            {
+                label: '操作', width: 180, sortable: false,
+                formatter: function (value, col, row) {
+                    let htmlStr = '<button class="btn btn-outline btn-info" onclick="vm.lookDetail(' + row.wxOrderSn + ')"><i class="fa fa-info-circle"></i>详情</button>&nbsp;';
+                    if(row.clecOrderStatus==3){
+                        htmlStr += '<button class="btn btn-outline btn-primary" ' +
+                            'onclick="vm.resendOrder(' + row.wxOrderSn + ')"><i class="fa fa-check-circle"></i>&nbsp;重发电子订单</button>&nbsp;';
+                    }
+                    if(row.wayOrderStatus==3){
+                        htmlStr += '<button class="btn btn-outline btn-primary" ' +
+                            'onclick="vm.resendOrder(' + row.wxOrderSn + ')"><i class="fa fa-check-circle"></i>&nbsp;重发运单</button>&nbsp;';
+                    }
+                    if(row.playOrderStatus==3){
+                        htmlStr += '<button class="btn btn-outline btn-primary" ' +
+                            'onclick="vm.resendOrder(' + row.wxOrderSn + ')"><i class="fa fa-check-circle"></i>&nbsp;重发支付单</button>&nbsp;';
+                    }
+                    return htmlStr;
+                }
+            }],
+		viewrecords: true,
+        height: 645,
+        rowNum: 10,
+        rowList: [200, 300, 500],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
+        }
+    });
+});
+
+var vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: 0,
+        title: null,
+        orderResend: {},
+		ruleValidate: {
+            approvalRemark: [
+				{required: true, message: '审核备注不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+            orderSn: ''
+		}
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+        reloadSearch: function() {
+            vm.q = {
+                orderSn: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = 0;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'orderSn': vm.q.orderSn},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        },
+        resendOrder: function (orderId, rowId) {
+            let params = {};
+            params.orderId = orderId;
+            params.refundId = rowId;
+            confirm('是否确认重发?', function () {
+                $.ajax({
+                    type: "POST",
+                    url: '../order/resendWxOrder',
+                    data: params,
+                    success: function (r) {
+                        if (r.code === 0) {
+                            alert('重发成功', function (index) {
+                                vm.reload();
+                            });
+                        } else {
+                            alert(r.msg);
+                        }
+                    }
+                });
+            })
+        },
+        lookDetail: function (rowId) {
+            vm.showList = 1;
+            vm.title = "维权订单详情";
+            // $.get("../orderrefund/info/" + rowId, function (r) {
+            //     vm.orderResend = r.orderRefund;
+            // });
+        }
+	}
+});

+ 6 - 5
kmall-admin/src/main/webapp/js/shop/product.js

@@ -8,7 +8,7 @@ $(function () {
         url: url,
         url: url,
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+            {label: 'id', name: 'id', index: 'id', key: true, width: 20},
             {label: '商品', name: 'goodsName', index: 'goods_id', width: 120},
             {label: '商品', name: 'goodsName', index: 'goods_id', width: 120},
             {
             {
                 label: '商品规格',
                 label: '商品规格',
@@ -20,9 +20,10 @@ $(function () {
                 }
                 }
             },
             },
             {label: '商品序列号', name: 'goodsSn', index: 'goods_sn', width: 80},
             {label: '商品序列号', name: 'goodsSn', index: 'goods_sn', width: 80},
-            {label: '商品库存', name: 'goodsNumber', index: 'goods_number', width: 80},
-            {label: '零售价格(元)', name: 'retailPrice', index: 'retail_price', width: 80},
-            {label: '市场价格(元)', name: 'marketPrice', index: 'market_price', width: 80}],
+            // {label: '商品库存', name: 'goodsNumber', index: 'goods_number', width: 80},
+            // {label: '零售价格(元)', name: 'retailPrice', index: 'retail_price', width: 80},
+            // {label: '市场价格(元)', name: 'marketPrice', index: 'market_price', width: 80}
+            ],
         viewrecords: true,
         viewrecords: true,
         height: 550,
         height: 550,
         rowNum: 10,
         rowNum: 10,
@@ -172,4 +173,4 @@ let vm = new Vue({
             });
             });
         }
         }
     }
     }
-});
+});

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

@@ -3,7 +3,7 @@ $(function () {
         url: '../store/list',
         url: '../store/list',
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+            {label: 'id', name: 'id', index: 'id', key: true, width: 40},
             {label: '商户编号', name: 'merchSn', index: 'merch_sn', width: 80},
             {label: '商户编号', name: 'merchSn', index: 'merch_sn', width: 80},
             {label: '商户名称', name: 'merchName', index: 'merch_name', width: 60, align: 'center'},
             {label: '商户名称', name: 'merchName', index: 'merch_name', width: 60, align: 'center'},
             {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60, align: 'center'},
             {label: '第三方商户编号', name: 'thirdPartyMerchCode', index: 'thirdPartyMerchCode', width: 60, align: 'center'},
@@ -234,6 +234,35 @@ let vm = new Vue({
         },
         },
         handleReset: function (name) {
         handleReset: function (name) {
             handleResetForm(this, name);
             handleResetForm(this, name);
-        }
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert('导入成功', function (index) {
+                    vm.reload();
+                });
+            }else{
+                if(data.msg == '导入成功!'){
+                    alert(data.msg);
+                    vm.reload();
+                }else {
+                    alert(data.msg);
+                }
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
+        },
+        exportStore: function() {
+            var params = {};
+            params.storeName = vm.q.storeName, params.storeNumber = vm.q.storeNumber;
+            exportFile('#rrapp', '../store/export', params);
+        },
     }
     }
-});
+});

+ 38 - 4
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -42,7 +42,7 @@ $(function () {
                 }},
                 }},
             {label: '门店库存', name: 'stockNum', index: 'stockNum', width: 70, align: 'center'},
             {label: '门店库存', name: 'stockNum', index: 'stockNum', width: 70, align: 'center'},
             {label: '零售价格', name: 'retailPrice', index: 'retailPrice', width: 60, align: 'center'},
             {label: '零售价格', name: 'retailPrice', index: 'retailPrice', width: 60, align: 'center'},
-            // {label: '市场价', name: 'marketPrice', index: 'marketPrice', width: 80, align: 'center'},
+            {label: '市场价', name: 'marketPrice', index: 'marketPrice', width: 60, align: 'center'},
             // {label: '库存价格', name: 'stockPrice', index: 'stockPrice', width: 80},
             // {label: '库存价格', name: 'stockPrice', index: 'stockPrice', width: 80},
             {
             {
                 label: '销售量',
                 label: '销售量',
@@ -182,7 +182,8 @@ var vm = new Vue({
         storesBySupplierList: [],
         storesBySupplierList: [],
         stockNum: '',
         stockNum: '',
         isSupplierShowByThirdSn: false,
         isSupplierShowByThirdSn: false,
-        roleType: false
+        roleType: false,
+        isHotShow: false
     },
     },
     methods: {
     methods: {
         getIsSupplierShowByThirdSn: function () {
         getIsSupplierShowByThirdSn: function () {
@@ -196,6 +197,11 @@ var vm = new Vue({
             if (null != goodsId && '' != goodsId) {
             if (null != goodsId && '' != goodsId) {
                 $.get("../goods/info/" + goodsId, function (r) {
                 $.get("../goods/info/" + goodsId, function (r) {
                     vm.goodsId = goodsId;
                     vm.goodsId = goodsId;
+                    if(r.goods.isHot == 1){
+                        vm.isHotShow = true;
+                    }else{
+                        vm.isHotShow = false;
+                    }
                     vm.showInput = true;
                     vm.showInput = true;
                     // console.log(r.goods.goodsBizType);
                     // console.log(r.goods.goodsBizType);
                     if (r.goods.goodsBizType == 11) {
                     if (r.goods.goodsBizType == 11) {
@@ -217,6 +223,11 @@ var vm = new Vue({
                 vm.goodsId = goodsId;
                 vm.goodsId = goodsId;
                 $.get("../goods/info/" + goodsId, function (r) {
                 $.get("../goods/info/" + goodsId, function (r) {
                     vm.showInput = true;
                     vm.showInput = true;
+                    if(r.goods.isHot == 1){
+                        vm.isHotShow = true;
+                    }else{
+                        vm.isHotShow = false;
+                    }
                     if (r.goods.goodsBizType == 11) {
                     if (r.goods.goodsBizType == 11) {
                         vm.showInputSpecification = true;
                         vm.showInputSpecification = true;
                     } else {
                     } else {
@@ -656,8 +667,31 @@ var vm = new Vue({
                     }
                     }
                 });
                 });
             });
             });
-
             $("#qrcImg2").hide();
             $("#qrcImg2").hide();
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert('导入成功', function (index) {
+                    vm.reload();
+                });
+            }else{
+                if(data.msg == '导入成功!'){
+                    alert(data.msg);
+                    vm.reload();
+                }else {
+                    alert(data.msg);
+                }
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
         }
         }
     },
     },
     mounted() {
     mounted() {
@@ -674,4 +708,4 @@ var vm = new Vue({
             vm.thirdMerchantBizShowList = r.list;
             vm.thirdMerchantBizShowList = r.list;
         });
         });
     }
     }
-});
+});

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

@@ -3,7 +3,7 @@ $(function () {
         url: '../sys/role/list',
         url: '../sys/role/list',
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: '角色ID', name: 'roleId', index: "role_id", key: true, hidden: true},
+            {label: '角色ID', name: 'roleId', index: "role_id", key: true, width: 20},
             {label: '角色名称', name: 'roleName', index: "role_name", width: 75},
             {label: '角色名称', name: 'roleName', index: "role_name", width: 75},
             // {label: '所属部门', name: 'deptName', width: 75},
             // {label: '所属部门', name: 'deptName', width: 75},
             {label: '备注', name: 'remark', width: 100},
             {label: '备注', name: 'remark', width: 100},
@@ -281,4 +281,4 @@ var vm = new Vue({
             handleResetForm(this, name);
             handleResetForm(this, name);
         }
         }
     }
     }
-});
+});

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

@@ -3,7 +3,7 @@ $(function () {
         url: '../sys/user/list',
         url: '../sys/user/list',
         datatype: "json",
         datatype: "json",
         colModel: [
         colModel: [
-            {label: '用户ID', name: 'userId', index: "user_id", key: true, hidden: true},
+            {label: '用户ID', name: 'userId', index: "user_id", key: true, width: 20},
             {label: '用户名', name: 'username', width: 75},
             {label: '用户名', name: 'username', width: 75},
             {label: '所属商户', name: 'merchName', width: 75,
             {label: '所属商户', name: 'merchName', width: 75,
                 formatter: function (value) {
                 formatter: function (value) {
@@ -327,6 +327,30 @@ var vm = new Vue({
         },
         },
         handleReset: function (name) {
         handleReset: function (name) {
             handleResetForm(this, name);
             handleResetForm(this, name);
+        },
+        uploadExcelSuccess: function (data) {
+            if(data.code==0){
+                alert('导入成功', function (index) {
+                    vm.reload();
+                });
+            }else{
+                if(data.msg == '导入成功!'){
+                    alert(data.msg);
+                    vm.reload();
+                }else {
+                    alert(data.msg);
+                }
+            }
+        },
+        uploadExcelError: function (data) {
+            console.log(data);
+            alert('上传出现异常,请重试!');
+        },
+        uploadExcelFormatError: function (file) {
+            this.$Notice.warning({
+                title: '文件格式不正确',
+                desc: '文件 ' + file.name + ' 格式不正确,请上传 xls 或 xlsx 格式的文件。'
+            });
         }
         }
     }
     }
-});
+});

二進制
kmall-admin/src/main/webapp/statics/file/category_store_export_yyyy_mm_dd_v1.0.0.xls


二進制
kmall-admin/src/main/webapp/statics/file/store_export_yyyy_mm_dd_v1.0.0.xls


二進制
kmall-admin/src/main/webapp/statics/file/store_goods_export_yyyy_mm_dd_v1.0.0.xls


二進制
kmall-admin/src/main/webapp/statics/file/store_id_export_yyyy_mm_dd_v1.0.0.xls


二進制
kmall-admin/src/main/webapp/statics/file/sys_user_export_yyyy_mm_dd_v1.0.0.xls


+ 23 - 3
kmall-api/src/main/java/com/kmall/api/api/ApiAuthController.java

@@ -108,7 +108,7 @@ public class ApiAuthController extends ApiBaseAction {
             userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
             userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
             userService.update(userVo);
             userService.update(userVo);
         }
         }
-        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn);
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn,"false");
         String token = MapUtils.getString(tokenMap, "token");
         String token = MapUtils.getString(tokenMap, "token");
 
 
         if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
         if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
@@ -150,7 +150,7 @@ public class ApiAuthController extends ApiBaseAction {
         param.put("longitude", longitude);
         param.put("longitude", longitude);
         List<StoreVo> storeVoList = apiStoreService.queryNearbyList(param);
         List<StoreVo> storeVoList = apiStoreService.queryNearbyList(param);
         if (null != storeVoList && storeVoList.size() > 0 && null != getOpenId()) {
         if (null != storeVoList && storeVoList.size() > 0 && null != getOpenId()) {
-            tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn());
+            tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn(),"false");
         }
         }
         return toResponsSuccess(storeVoList);
         return toResponsSuccess(storeVoList);
     }
     }
@@ -190,9 +190,10 @@ public class ApiAuthController extends ApiBaseAction {
         String openId = getOpenId();
         String openId = getOpenId();
         Long storeId = jsonParam.getLong("storeId");
         Long storeId = jsonParam.getLong("storeId");
         String merchSn = (String)jsonParam.get("merchSn");
         String merchSn = (String)jsonParam.get("merchSn");
+        String isRefusedLogin = (String)jsonParam.get("isRefusedLogin");
         //
         //
         Map<String, Object> resultObj = Maps.newHashMap();
         Map<String, Object> resultObj = Maps.newHashMap();
-        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId,getUserId(),merchSn);
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, getUserId(), merchSn, isRefusedLogin);
         String token = MapUtils.getString(tokenMap, "token");
         String token = MapUtils.getString(tokenMap, "token");
         resultObj.put("token", token);
         resultObj.put("token", token);
         return toResponsSuccess(resultObj);
         return toResponsSuccess(resultObj);
@@ -232,4 +233,23 @@ public class ApiAuthController extends ApiBaseAction {
         }
         }
         return toResponsSuccess(thirdMerchantBizVo);
         return toResponsSuccess(thirdMerchantBizVo);
     }
     }
+
+    @GetMapping("getOpenId")
+    @IgnoreAuth
+    public Object getOpenId(@RequestParam String code) {
+        //获取openid
+        String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
+        logger.info("》》》组合token为:" + requestUrl);
+        JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
+        logger.info("》》》sessionData为:" + sessionData);
+
+        if (null == sessionData) {
+            return toResponsFail("登录失败");
+        }
+        String openId = sessionData.getString("openid");
+        if (StringUtils.isNullOrEmpty(openId)) {
+            return toResponsFail("登录失败");
+        }
+        return toResponsSuccess(openId);
+    }
 }
 }

+ 182 - 4
kmall-api/src/main/java/com/kmall/api/api/ApiUserController.java

@@ -2,20 +2,32 @@ package com.kmall.api.api;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Maps;
 import com.kmall.api.annotation.LoginUser;
 import com.kmall.api.annotation.LoginUser;
 import com.kmall.api.dto.SendMsgVo;
 import com.kmall.api.dto.SendMsgVo;
+import com.kmall.api.entity.FullUserInfo;
+import com.kmall.api.entity.UserInfo;
+import com.kmall.api.service.TokenService;
+import com.kmall.api.util.ApiUserUtils;
+import com.kmall.api.util.CommonUtil;
 import com.kmall.manager.entity.SysSmsLogEntity;
 import com.kmall.manager.entity.SysSmsLogEntity;
 import com.kmall.manager.service.SysSmsLogService;
 import com.kmall.manager.service.SysSmsLogService;
 import com.kmall.api.util.SendMsgUtil;
 import com.kmall.api.util.SendMsgUtil;
 import com.kmall.api.entity.UserVo;
 import com.kmall.api.entity.UserVo;
 import com.kmall.api.service.ApiUserService;
 import com.kmall.api.service.ApiUserService;
 import com.kmall.api.util.ApiBaseAction;
 import com.kmall.api.util.ApiBaseAction;
+import com.qiniu.util.StringUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.log4j.Logger;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 /**
 /**
  * 作者: @author Scott <br>
  * 作者: @author Scott <br>
  * 时间: 2017-08-11 08:32<br>
  * 时间: 2017-08-11 08:32<br>
@@ -29,6 +41,8 @@ public class ApiUserController extends ApiBaseAction {
     private ApiUserService userService;
     private ApiUserService userService;
     @Autowired
     @Autowired
     private SysSmsLogService smsLogService;
     private SysSmsLogService smsLogService;
+    @Autowired
+    private TokenService tokenService;
 
 
     /**
     /**
      */
      */
@@ -53,9 +67,9 @@ public class ApiUserController extends ApiBaseAction {
 //        String msgContent = "【前海电商】手机验证码为:"+sms_code;
 //        String msgContent = "【前海电商】手机验证码为:"+sms_code;
         String msgContent = "【中网小程序】亲爱的亲,您的验证码是"+sms_code+"。有效期为5分钟,请尽快验证";
         String msgContent = "【中网小程序】亲爱的亲,您的验证码是"+sms_code+"。有效期为5分钟,请尽快验证";
 
 
-        System.out.println("msgContent:"+msgContent);
+        logger.info(msgContent);
         // 一分钟之内不能重复发送短信
         // 一分钟之内不能重复发送短信
-        SysSmsLogEntity smsLogVo = smsLogService.querySmsCodeByUserId(loginUser.getId());
+        SysSmsLogEntity smsLogVo = smsLogService.querySmsCodeByMobile(phone);
         if (null != smsLogVo && (System.currentTimeMillis() - smsLogVo.getStime().getTime()) / 1000 < 1 * 60) {
         if (null != smsLogVo && (System.currentTimeMillis() - smsLogVo.getStime().getTime()) / 1000 < 1 * 60) {
             return toResponsFail("短信已发送");
             return toResponsFail("短信已发送");
         }
         }
@@ -66,7 +80,9 @@ public class ApiUserController extends ApiBaseAction {
             SendMsgVo vo = JSON.parseObject(result,SendMsgVo.class);
             SendMsgVo vo = JSON.parseObject(result,SendMsgVo.class);
 
 
             SysSmsLogEntity smsLog = new SysSmsLogEntity();
             SysSmsLogEntity smsLog = new SysSmsLogEntity();
-            smsLog.setUserId(loginUser.getId());
+            if(loginUser != null){
+                smsLog.setUserId(loginUser.getId());
+            }
             smsLog.setMobile(phone);
             smsLog.setMobile(phone);
             smsLog.setContent(msgContent);
             smsLog.setContent(msgContent);
             smsLog.setSmsCode(sms_code);
             smsLog.setSmsCode(sms_code);
@@ -111,4 +127,166 @@ public class ApiUserController extends ApiBaseAction {
         userInfo.setUserLevel(userLevel);
         userInfo.setUserLevel(userLevel);
         return toResponsSuccess(userInfo);
         return toResponsSuccess(userInfo);
     }
     }
-}
+
+    public static String filterEmoji(String source) {
+        if (source != null && source.length() > 0) {
+            return source.replaceAll("[\ud800\udc00-\udbff\udfff\ud800-\udfff]", "");
+        } else {
+            return source;
+        }
+    }
+    /**
+     * 手机号登陆
+     */
+    @PostMapping("userLogin")
+    public Object userLogin(@LoginUser UserVo loginUser) {
+        JSONObject jsonParam = getJsonRequest();
+        String openId = jsonParam.getString("openId");
+        String phone = jsonParam.getString("phone");
+        String smscode = jsonParam.getString("smscode");
+        Long storeId = jsonParam.getLong("storeId");
+        String merchSn = jsonParam.getString("merchSn");
+        FullUserInfo fullUserInfo = null;
+        if (null != jsonParam.get("userInfo")) {
+            fullUserInfo = jsonParam.getObject("userInfo", FullUserInfo.class);
+        }
+        UserInfo userInfo = fullUserInfo.getUserInfo();
+        if(userInfo == null){
+            return toResponsFail("登录失败");
+        }
+        if (StringUtils.isNullOrEmpty(openId)) {
+            return toResponsFail("登录失败");
+        }
+
+        UserVo userVoByOpenId = userService.queryByOpenId(openId);
+        if(userVoByOpenId == null){
+            userInfo.setNickName(filterEmoji(userInfo.getNickName()));;
+            Date nowTime = new Date();
+            UserVo saveUserVo = new UserVo();
+            saveUserVo.setPassword(openId);
+            saveUserVo.setRegister_time(nowTime);
+            saveUserVo.setRegister_ip(this.getClientIp());
+            saveUserVo.setLast_login_ip(saveUserVo.getRegister_ip());
+            saveUserVo.setLast_login_time(saveUserVo.getRegister_time());
+            saveUserVo.setWeixin_openid(openId);
+            saveUserVo.setAvatar(userInfo.getAvatarUrl());
+            saveUserVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
+            saveUserVo.setNickname(userInfo.getNickName());
+            saveUserVo.setUser_level_id(1);
+            userService.save(saveUserVo);
+            userVoByOpenId = userService.queryByOpenId(openId);
+        }
+        // 校验短信码
+        SysSmsLogEntity smsLogVo = smsLogService.querySmsCodeByMobile(phone);
+        if (null != smsLogVo) {
+            if(!smsLogVo.getSmsCode().equals(smscode) || smsLogVo.getSendStatus() == 0){
+                return toResponsFail("短信验证码错误");
+            }
+        }else{
+            return toResponsFail("短信验证码错误");
+        }
+        if(userVoByOpenId != null){
+            if(com.kmall.common.utils.StringUtils.isNotEmpty(userVoByOpenId.getMobile())){//openid绑定的用户信息已绑定手机号
+                if(!phone.equalsIgnoreCase(userVoByOpenId.getMobile())){
+                    return toResponsWxLoginFail("当前微信授权绑定的手机号为"+userVoByOpenId.getMobile()+",与当前用户登录的手机号不一致,是否更新为当前登录手机号"+phone);
+                }
+            }else {//当前openid未绑定手机号,查询当前登录手机号是否有绑定其他账号
+                //根据手机号查询用户信息
+                List<UserVo> userVoList = userService.queryByMobile(phone);
+                if(userVoList.size() == 0){//未绑定任何微信账号,则提示让用户注册(暂时没有注册,直接绑定)
+                    UserVo userVo = new UserVo();
+                    userVo.setId(userVoByOpenId.getId());
+                    userVo.setMobile(phone);
+                    userService.update(userVo);
+//                    return toResponsFail("当前登录手机号用户暂未绑定当前授权微信用户,是否绑定?");
+                }else{
+                    UserVo userVo = userVoList.get(0);
+                    //手机号绑定的用户微信openid,是否与当前授权的openid一致
+                    if(!userVo.getWeixin_openid().equalsIgnoreCase(openId)){
+                        return toResponsFail("当前登录手机号已绑定其他微信用户,请重新输入登录手机号");
+                    }
+
+                }
+            }
+        }
+
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, userVoByOpenId.getId(), merchSn, "false");
+        String token = MapUtils.getString(tokenMap, "token");
+
+        if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
+            return toResponsFail("登录失败");
+        }
+        Map<String, Object> resultObj = Maps.newHashMap();
+        resultObj.put("token", token);
+        resultObj.put("userInfo", userInfo);
+        resultObj.put("userId", userVoByOpenId.getId());
+        return toResponsSuccess(resultObj);
+    }
+
+    @PostMapping("userLoginMobileUpdate")
+    public Object userLoginMobileUpdate(@LoginUser UserVo loginUser) {
+        JSONObject jsonParam = getJsonRequest();
+        String openId = jsonParam.getString("openId");
+        String phone = jsonParam.getString("phone");
+        Long storeId = jsonParam.getLong("storeId");
+        String merchSn = jsonParam.getString("merchSn");
+        FullUserInfo fullUserInfo = null;
+        if (null != jsonParam.get("userInfo")) {
+            fullUserInfo = jsonParam.getObject("userInfo", FullUserInfo.class);
+        }
+        UserInfo userInfo = fullUserInfo.getUserInfo();
+        if(userInfo == null){
+            return toResponsFail("登录失败");
+        }
+        if (StringUtils.isNullOrEmpty(openId)) {
+            return toResponsFail("登录失败");
+        }
+        UserVo userVoByOpenId = userService.queryByOpenId(openId);
+        if(userVoByOpenId != null){
+            UserVo userVo = new UserVo();
+            userVo.setId(userVoByOpenId.getId());
+            userVo.setMobile(phone);
+            userService.update(userVo);
+        }else{
+            return toResponsFail("绑定失败");
+        }
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, userVoByOpenId.getId(), merchSn, "false");
+        String token = MapUtils.getString(tokenMap, "token");
+
+        if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
+            return toResponsFail("登录失败");
+        }
+        Map<String, Object> resultObj = Maps.newHashMap();
+        resultObj.put("token", token);
+        resultObj.put("userInfo", userInfo);
+        resultObj.put("userId", userVoByOpenId.getId());
+        return toResponsSuccess(resultObj);
+    }
+
+    /**
+     * 注册用户,手机号、验证码
+     * @param loginUser
+     * @return
+     */
+    @PostMapping("registUser")
+    public Object registUser(@LoginUser UserVo loginUser) {
+        JSONObject jsonParam = getJsonRequest();
+        //
+        String phone = jsonParam.getString("phone");
+        String smscode = jsonParam.getString("smscode");
+        List<UserVo> userVoList = userService.queryByMobile(phone);
+        if(userVoList.size() == 0){
+            return toResponsFail("该手机号用户不存在");
+        }
+        UserVo userVo = userVoList.get(0);
+        // 校验短信码
+        SysSmsLogEntity smsLogVo = smsLogService.querySmsCodeByMobile(phone);
+        if (null != smsLogVo) {
+            if(!smsLogVo.getSmsCode().equals(smscode) || smsLogVo.getSendStatus() == 0){
+                return toResponsFail("短信验证码错误");
+            }
+        }
+//        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId, getUserId(), merchSn, "false");
+        return toResponsSuccess("注册成功");
+    }
+}

+ 41 - 4
kmall-api/src/main/java/com/kmall/api/cache/UserTokenCache.java

@@ -24,6 +24,7 @@ public class UserTokenCache {
     public static final String XCX_TOKEN_USER_PREFIXX = "xcx_token_user_";
     public static final String XCX_TOKEN_USER_PREFIXX = "xcx_token_user_";
     public static final String XCX_USER_TOKEN_PREFIXX = "xcx_user_token_";
     public static final String XCX_USER_TOKEN_PREFIXX = "xcx_user_token_";
     public static final String XCX_USER_INFO_PREFIXX = "xcx_user_info_";
     public static final String XCX_USER_INFO_PREFIXX = "xcx_user_info_";
+    public static final String XCX_TOKEN_STORE_PREFIXX = "xcx_store_token_";
     public static int wsTokenExpireTime = 3600 * 24 * 30;
     public static int wsTokenExpireTime = 3600 * 24 * 30;
 
 
     /**
     /**
@@ -48,7 +49,6 @@ public class UserTokenCache {
      * @param token
      * @param token
      * @return
      * @return
      */
      */
-
     public static TokenEntity getUserInfoByToken(String token) {
     public static TokenEntity getUserInfoByToken(String token) {
         String temp = JedisUtil.get(toTokenUserKey(token));
         String temp = JedisUtil.get(toTokenUserKey(token));
         if (StringUtils.isNullOrEmpty(temp)) {
         if (StringUtils.isNullOrEmpty(temp)) {
@@ -64,6 +64,28 @@ public class UserTokenCache {
         }
         }
     }
     }
 
 
+
+    /**
+     * 当用户拒绝授权时,根据门店token获取保存的信息
+     * @param token
+     * @return
+     */
+    public static TokenEntity getStoreByTokenByRefused(String token) {
+        String tokenKey = toTokenStoreKey(token);
+        String temp = JedisUtil.get(tokenKey);
+        if (StringUtils.isNullOrEmpty(temp)) {
+            return null;
+        }
+//        String userID = toUserTokenKey(Long.valueOf(temp));
+//        String tokenEntityJson = JedisUtil.get(temp);
+        if (!org.springframework.util.StringUtils.isEmpty(temp)) {
+            TokenEntity d = JSON.parseObject(temp, TokenEntity.class);
+            return d;
+        } else {
+            return null;
+        }
+    }
+
     public static void del(Long userId) {
     public static void del(Long userId) {
         JedisUtil.del(toUserTokenKey(userId));
         JedisUtil.del(toUserTokenKey(userId));
     }
     }
@@ -74,8 +96,19 @@ public class UserTokenCache {
      * @param tokenEntity
      * @param tokenEntity
      */
      */
     public static void putUserToken(TokenEntity tokenEntity) {
     public static void putUserToken(TokenEntity tokenEntity) {
-        JedisUtil.set(toUserTokenKey(tokenEntity.getUserId()), fromTokenCacheString(tokenEntity), wsTokenExpireTime);
-        JedisUtil.set(toTokenUserKey(tokenEntity.getToken()), tokenEntity.getUserId().toString(), wsTokenExpireTime);
+        if(tokenEntity.getUserId() != null && (tokenEntity.getIsRefusedLogin()==null||!tokenEntity.getIsRefusedLogin().equalsIgnoreCase("true"))) {
+            JedisUtil.set(toUserTokenKey(tokenEntity.getUserId()), fromTokenCacheString(tokenEntity), wsTokenExpireTime);
+        }
+        if(tokenEntity.getToken() != null && tokenEntity.getUserId() != null && (tokenEntity.getIsRefusedLogin()==null ||
+                !tokenEntity.getIsRefusedLogin().equalsIgnoreCase("true"))) {
+            JedisUtil.set(toTokenUserKey(tokenEntity.getToken()), tokenEntity.getUserId().toString(), wsTokenExpireTime);
+        }
+        if(tokenEntity.getIsRefusedLogin()!=null){
+            if(tokenEntity.getStoreId() != null && tokenEntity.getIsRefusedLogin().equalsIgnoreCase("true")){
+                String tokenKey = toTokenStoreKey(tokenEntity.getToken());
+                JedisUtil.set(tokenKey, fromTokenCacheString(tokenEntity), wsTokenExpireTime);
+            }
+        }
     }
     }
 
 
     private static String fromTokenCacheString(TokenEntity d) {
     private static String fromTokenCacheString(TokenEntity d) {
@@ -84,6 +117,10 @@ public class UserTokenCache {
         return JSON.toJSONString(d, filter);
         return JSON.toJSONString(d, filter);
     }
     }
 
 
+    private static String toTokenStoreKey(String token) {
+        return XCX_TOKEN_STORE_PREFIXX + token;
+    }
+
     private static String toUserTokenKey(Long userId) {
     private static String toUserTokenKey(Long userId) {
         return XCX_TOKEN_USER_PREFIXX + userId;
         return XCX_TOKEN_USER_PREFIXX + userId;
     }
     }
@@ -117,4 +154,4 @@ public class UserTokenCache {
             return null;
             return null;
         return JSON.toJSONString(d, filter);
         return JSON.toJSONString(d, filter);
     }
     }
-}
+}

+ 10 - 0
kmall-api/src/main/java/com/kmall/api/entity/TokenEntity.java

@@ -29,6 +29,8 @@ public class TokenEntity implements Serializable {
     //商户编号
     //商户编号
     private String merchSn;
     private String merchSn;
 
 
+    private String isRefusedLogin;
+
     /**
     /**
      * 设置:用户ID
      * 设置:用户ID
      */
      */
@@ -114,4 +116,12 @@ public class TokenEntity implements Serializable {
     public void setMerchSn(String merchSn) {
     public void setMerchSn(String merchSn) {
         this.merchSn = merchSn;
         this.merchSn = merchSn;
     }
     }
+
+    public String getIsRefusedLogin() {
+        return isRefusedLogin;
+    }
+
+    public void setIsRefusedLogin(String isRefusedLogin) {
+        this.isRefusedLogin = isRefusedLogin;
+    }
 }
 }

+ 32 - 10
kmall-api/src/main/java/com/kmall/api/interceptor/AuthorizationInterceptor.java

@@ -24,6 +24,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
 
 
     public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY";
     public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY";
     public static final String LOGIN_TOKEN_KEY = "X-Nideshop-Token";
     public static final String LOGIN_TOKEN_KEY = "X-Nideshop-Token";
+    public static final String IS_REFUSED_LOGIN = "isRefusedLogin";
 
 
 
 
     @Override
     @Override
@@ -47,19 +48,40 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
             token = request.getParameter(LOGIN_TOKEN_KEY);
             token = request.getParameter(LOGIN_TOKEN_KEY);
         }
         }
 
 
+        //从header中获取IS_REFUSED_LOGIN
+        String isRefusedLogin = request.getHeader(IS_REFUSED_LOGIN);
+
         //token为空
         //token为空
-        if (StringUtils.isBlank(token)) {
-            throw new ApiRRException("请先登录", 401);
-        }
+        if(isRefusedLogin != null && !isRefusedLogin.equalsIgnoreCase("")){
+            if (StringUtils.isBlank(token) && !isRefusedLogin.equalsIgnoreCase("true")) {
+                throw new ApiRRException("请先登录", 401);
+            }
 
 
-        //查询token信息
-        TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
-        if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
-            throw new ApiRRException("token失效,请重新登录", 401);
-        }
+            //查询token信息
+            TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+            if ((tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis())&& !isRefusedLogin.equalsIgnoreCase("true")) {
+                throw new ApiRRException("token失效,请重新登录", 401);
+            }
+
+            if (tokenEntity != null && tokenEntity.getExpireTime().getTime() > System.currentTimeMillis()) {
+                //设置userId到request里,后续根据userId,获取用户信息
+                request.setAttribute(LOGIN_USER_KEY, tokenEntity.getUserId());
+            }
+        }else{
+            if (StringUtils.isBlank(token)) {
+                throw new ApiRRException("请先登录", 401);
+            }
+            //查询token信息
+            TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+            if ((tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis())) {
+                throw new ApiRRException("token失效,请重新登录", 401);
+            }
 
 
-        //设置userId到request里,后续根据userId,获取用户信息
-        request.setAttribute(LOGIN_USER_KEY, tokenEntity.getUserId());
+            if (tokenEntity != null && tokenEntity.getExpireTime().getTime() > System.currentTimeMillis()) {
+                //设置userId到request里,后续根据userId,获取用户信息
+                request.setAttribute(LOGIN_USER_KEY, tokenEntity.getUserId());
+            }
+        }
 
 
         return true;
         return true;
     }
     }

+ 3 - 1
kmall-api/src/main/java/com/kmall/api/service/TokenService.java

@@ -17,7 +17,7 @@ public class TokenService {
     //12小时后过期
     //12小时后过期
     private final static int EXPIRE = 3600 * 12;
     private final static int EXPIRE = 3600 * 12;
 
 
-    public Map<String, Object> createAndUpdateToken(String openId, Long storeId, Long userId,String merchSn) {
+    public Map<String, Object> createAndUpdateToken(String openId, Long storeId, Long userId,String merchSn,String isRefusedLogin) {
         //生成一个token
         //生成一个token
         String token = CharUtil.getRandomString(32);
         String token = CharUtil.getRandomString(32);
         //当前时间
         //当前时间
@@ -37,6 +37,7 @@ public class TokenService {
             tokenEntity.setUpdateTime(now);
             tokenEntity.setUpdateTime(now);
             tokenEntity.setExpireTime(expireTime);
             tokenEntity.setExpireTime(expireTime);
             tokenEntity.setStoreId(storeId);
             tokenEntity.setStoreId(storeId);
+            tokenEntity.setIsRefusedLogin(isRefusedLogin);
             if(StringUtils.isNotEmpty(merchSn)) {
             if(StringUtils.isNotEmpty(merchSn)) {
                 tokenEntity.setMerchSn(merchSn);
                 tokenEntity.setMerchSn(merchSn);
             }
             }
@@ -45,6 +46,7 @@ public class TokenService {
 //            save(tokenEntity);
 //            save(tokenEntity);
             UserTokenCache.putUserToken(tokenEntity);
             UserTokenCache.putUserToken(tokenEntity);
         } else {
         } else {
+            tokenEntity.setIsRefusedLogin(isRefusedLogin);
             token = tokenEntity.getToken();
             token = tokenEntity.getToken();
 //            tokenEntity.setToken(token);
 //            tokenEntity.setToken(token);
             tokenEntity.setUpdateTime(now);
             tokenEntity.setUpdateTime(now);

+ 31 - 4
kmall-api/src/main/java/com/kmall/api/util/ApiBaseAction.java

@@ -109,6 +109,15 @@ public class ApiBaseAction {
     }
     }
 
 
     /**
     /**
+     * 微信授权登录异常
+     * @param msg
+     * @return
+     */
+    public Map<String, Object> toResponsWxLoginFail(String msg) {
+        return toResponsObject(2, msg, null);
+    }
+
+    /**
      * initBinder 初始化绑定 <br>
      * initBinder 初始化绑定 <br>
      * 这里处理了3种类型<br>
      * 这里处理了3种类型<br>
      * 1、字符串自动 trim 去掉前后空格 <br>
      * 1、字符串自动 trim 去掉前后空格 <br>
@@ -198,8 +207,17 @@ public class ApiBaseAction {
      */
      */
     public Long getStoreId() {
     public Long getStoreId() {
         String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
         String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
-        //查询token信息
-        TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+        String isRefusedLogin = request.getHeader(AuthorizationInterceptor.IS_REFUSED_LOGIN);
+        TokenEntity tokenEntity = null;
+        if(StringUtils.isNotEmpty(isRefusedLogin)) {
+            if (isRefusedLogin.equalsIgnoreCase("true")) {//用户拒绝授权
+                tokenEntity = UserTokenCache.getStoreByTokenByRefused(token);//当用户拒绝授权时,根据门店token获取保存的信息
+            } else {
+                tokenEntity = UserTokenCache.getUserInfoByToken(token);//查询token信息
+            }
+        }else{
+            tokenEntity = UserTokenCache.getUserInfoByToken(token);//查询token信息
+        }
         if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
         if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
             return null;
             return null;
         }
         }
@@ -212,8 +230,17 @@ public class ApiBaseAction {
      */
      */
     public String getMerchSn() {
     public String getMerchSn() {
         String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
         String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
-        //查询token信息
-        TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+        String isRefusedLogin = request.getHeader(AuthorizationInterceptor.IS_REFUSED_LOGIN);
+        TokenEntity tokenEntity = null;
+        if(StringUtils.isNotEmpty(isRefusedLogin)) {
+            if (isRefusedLogin.equalsIgnoreCase("true")) {//用户拒绝授权
+                tokenEntity = UserTokenCache.getStoreByTokenByRefused(token);//当用户拒绝授权时,根据门店token获取保存的信息
+            } else {
+                tokenEntity = UserTokenCache.getUserInfoByToken(token);//查询token信息
+            }
+        }else{
+            tokenEntity = UserTokenCache.getUserInfoByToken(token);//查询token信息
+        }
         if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
         if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
             return null;
             return null;
         }
         }

Some files were not shown because too many files changed in this diff