Преглед изворни кода

渠道分销商逻辑,admin模块功能开发

hyq пре 6 година
родитељ
комит
a5854cefbc
80 измењених фајлова са 9666 додато и 88 уклоњено
  1. 4 18
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  2. 114 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuController.java
  3. 128 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistChnlController.java
  4. 171 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistController.java
  5. 258 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistHierController.java
  6. 147 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistSellAllocationController.java
  7. 206 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistSellStatisController.java
  8. 3 0
      kmall-admin/src/main/java/com/kmall/admin/dao/StoreDao.java
  9. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkCenterMenuDao.java
  10. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistChnlDao.java
  11. 26 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistDao.java
  12. 77 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistHierDao.java
  13. 18 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellAllocationDao.java
  14. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellAllocationHistoryDao.java
  15. 18 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellStatisDao.java
  16. 53 0
      kmall-admin/src/main/java/com/kmall/admin/dto/ExpendDistDto.java
  17. 3 3
      kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java
  18. 1 1
      kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java
  19. 10 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ThirdMerchantBizEntity.java
  20. 274 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkCenterMenuEntity.java
  21. 258 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistChnlEntity.java
  22. 292 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistEntity.java
  23. 361 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistHierEntity.java
  24. 31 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistHierLvlEntity.java
  25. 390 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellAllocationEntity.java
  26. 324 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellAllocationHistoryEntity.java
  27. 491 0
      kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellStatisEntity.java
  28. 9 0
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/entity/SysConfigEntity.java
  29. 33 1
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  30. 28 8
      kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreServiceImpl.java
  31. 68 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkCenterMenuServiceImpl.java
  32. 75 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistChnlServiceImpl.java
  33. 358 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistHierServiceImpl.java
  34. 58 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellAllocationHistoryServiceImpl.java
  35. 304 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellAllocationServiceImpl.java
  36. 69 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellStatisServiceImpl.java
  37. 92 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistServiceImpl.java
  38. 72 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkCenterMenuService.java
  39. 72 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistChnlService.java
  40. 76 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistHierService.java
  41. 72 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellAllocationHistoryService.java
  42. 74 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellAllocationService.java
  43. 74 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellStatisService.java
  44. 75 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistService.java
  45. 3 0
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  46. 55 28
      kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml
  47. 18 12
      kmall-admin/src/main/resources/mybatis/mapper/SupplierDao.xml
  48. 2 2
      kmall-admin/src/main/resources/mybatis/mapper/SysConfigDao.xml
  49. 13 5
      kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchantBizDao.xml
  50. 164 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkCenterMenuDao.xml
  51. 187 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistChnlDao.xml
  52. 287 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistDao.xml
  53. 422 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistHierDao.xml
  54. 252 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellAllocationDao.xml
  55. 171 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellAllocationHistoryDao.xml
  56. 330 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellStatisDao.xml
  57. 87 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/ad.html
  58. 28 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkcenter.html
  59. 81 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkcentermenu.html
  60. 90 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdist.html
  61. 92 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistchnl.html
  62. 116 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdisthier.html
  63. 167 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistsellallocation.html
  64. 124 0
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistsellstatis.html
  65. 6 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/store.html
  66. 10 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchantbiz.html
  67. 10 0
      kmall-admin/src/main/webapp/WEB-INF/page/sys/config.html
  68. 1 1
      kmall-admin/src/main/webapp/index.html
  69. 43 0
      kmall-admin/src/main/webapp/js/mk/mkcenter.js
  70. 182 0
      kmall-admin/src/main/webapp/js/mk/mkcentermenu.js
  71. 193 0
      kmall-admin/src/main/webapp/js/mk/mkdist.js
  72. 193 0
      kmall-admin/src/main/webapp/js/mk/mkdistchnl.js
  73. 248 0
      kmall-admin/src/main/webapp/js/mk/mkdisthier.js
  74. 399 0
      kmall-admin/src/main/webapp/js/mk/mkdistsellallocation.js
  75. 237 0
      kmall-admin/src/main/webapp/js/mk/mkdistsellstatis.js
  76. 11 5
      kmall-admin/src/main/webapp/js/shop/store.js
  77. 10 1
      kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js
  78. 10 1
      kmall-admin/src/main/webapp/js/sys/config.js
  79. 1 1
      kmall-admin/src/main/webapp/statics/css/main.css
  80. 109 0
      kmall-admin/src/main/webapp/statics/css/mkcenter.css

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

@@ -78,7 +78,7 @@ public class OrderController {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-            startTime = getDate(startTime);
+            startTime = DateUtils.getDate(startTime);
             query.put("startTime", startTime + " 00:00:00");
         }
         if(org.apache.commons.lang.StringUtils.isNotEmpty(endTime)) {
@@ -87,7 +87,7 @@ public class OrderController {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-            endTime = getDate(endTime);
+            endTime = DateUtils.getDate(endTime);
             query.put("endTime", endTime + " 59:59:59");
         }
         List<OrderEntity> orderList = orderService.queryList(query);
@@ -714,7 +714,7 @@ public class OrderController {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-            startTime = getDate(startTime);
+            startTime = DateUtils.getDate(startTime);
             params.put("startTime", startTime + " 00:00:00");
         }
         if(org.apache.commons.lang.StringUtils.isNotEmpty(endTime)) {
@@ -723,7 +723,7 @@ public class OrderController {
             } catch (Exception e) {
                 e.printStackTrace();
             }
-            endTime = getDate(endTime);
+            endTime = DateUtils.getDate(endTime);
             params.put("endTime", endTime + " 59:59:59");
         }
 
@@ -773,20 +773,6 @@ public class OrderController {
         return R.ok();
     }
 
-    private String getDate(String datdString){
-        datdString = datdString.replace("GMT", "").replaceAll("\\(.*\\)", "");
-        //将字符串转化为date类型,格式2016-10-12
-        SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z", Locale.ENGLISH);
-        Date dateTrans = null;
-        try {
-            dateTrans = format.parse(datdString);
-            return new SimpleDateFormat("yyyy-MM-dd").format(dateTrans);
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return datdString;
-    }
-
     /**
      * 订单修改快递
      */

+ 114 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuController.java

@@ -0,0 +1,114 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.MkCenterMenuEntity;
+import com.kmall.admin.service.mk.MkCenterMenuService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.common.utils.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 营销中心菜单表Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+@Controller
+@RequestMapping("mkcentermenu")
+public class MkCenterMenuController {
+    @Autowired
+    private MkCenterMenuService mkCenterMenuService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkcentermenu:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkCenterMenuEntity> mkCenterMenuList = mkCenterMenuService.queryList(query);
+        int total = mkCenterMenuService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkCenterMenuList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("mkcentermenu:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MkCenterMenuEntity mkCenterMenu = mkCenterMenuService.queryObject(id);
+
+        return R.ok().put("mkCenterMenu", mkCenterMenu);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkcentermenu:save")
+    @ResponseBody
+    public R save(@RequestBody MkCenterMenuEntity mkCenterMenu) {
+        mkCenterMenuService.save(mkCenterMenu);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkcentermenu:update")
+    @ResponseBody
+    public R update(@RequestBody MkCenterMenuEntity mkCenterMenu) {
+        mkCenterMenuService.update(mkCenterMenu);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkcentermenu:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] ids) {
+        mkCenterMenuService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params,HttpServletRequest request) {
+        String requestPath = request.getRequestURL().toString().replaceAll("mkcentermenu/queryAll","");
+        List<MkCenterMenuEntity> list = mkCenterMenuService.queryList(params);
+        for (MkCenterMenuEntity mkCenterMenuEntity: list) {
+            if(StringUtils.isNotEmpty(mkCenterMenuEntity.getMenuUrl())) {
+                mkCenterMenuEntity.setMenuUrl(requestPath + mkCenterMenuEntity.getMenuUrl());
+            }
+        }
+
+        return R.ok().put("list", list);
+    }
+}

+ 128 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistChnlController.java

@@ -0,0 +1,128 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.MkDistChnlEntity;
+import com.kmall.admin.service.mk.MkDistChnlService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 分销渠道Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+@Controller
+@RequestMapping("mkdistchnl")
+public class MkDistChnlController {
+    @Autowired
+    private MkDistChnlService mkDistChnlService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkdistchnl:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkDistChnlEntity> mkDistChnlList = mkDistChnlService.queryList(query);
+        int total = mkDistChnlService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkDistChnlList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{distChnlId}")
+    @RequiresPermissions("mkdistchnl:info")
+    @ResponseBody
+    public R info(@PathVariable("distChnlId") Integer distChnlId) {
+        MkDistChnlEntity mkDistChnl = mkDistChnlService.queryObject(distChnlId);
+
+        return R.ok().put("mkDistChnl", mkDistChnl);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkdistchnl:save")
+    @ResponseBody
+    public R save(@RequestBody MkDistChnlEntity mkDistChnl) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistChnl);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distFlag", "分销渠道名称");
+//        builder.put("partType", "所属分类");
+        builder.put("thirdMerchSn", "所属第三方商户");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistChnlService.save(mkDistChnl);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkdistchnl:update")
+    @ResponseBody
+    public R update(@RequestBody MkDistChnlEntity mkDistChnl) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistChnl);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distFlag", "分销渠道名称");
+//        builder.put("partType", "所属分类");
+        builder.put("thirdMerchSn", "所属第三方商户");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistChnlService.update(mkDistChnl);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkdistchnl:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]distChnlIds) {
+        mkDistChnlService.deleteBatch(distChnlIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkDistChnlEntity> list = mkDistChnlService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 171 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistController.java

@@ -0,0 +1,171 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.MkDistEntity;
+import com.kmall.admin.service.mk.MkDistService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 分销商,distributorController
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+@Controller
+@RequestMapping("mkdist")
+public class MkDistController {
+    @Autowired
+    private MkDistService mkDistService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkdist:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        String distName = (String) params.get("distName");
+        if(org.apache.commons.lang3.StringUtils.isNotEmpty(distName)){
+            try{
+                distName = new String(distName.getBytes("iso-8859-1"),"utf-8");
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+            params.put("distName", distName);
+        }
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkDistEntity> mkDistList = mkDistService.queryList(query);
+        int total = mkDistService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkDistList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{distId}")
+    @RequiresPermissions("mkdist:info")
+    @ResponseBody
+    public R info(@PathVariable("distId") Integer distId) {
+        MkDistEntity mkDist = mkDistService.queryObject(distId);
+
+        return R.ok().put("mkDist", mkDist);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkdist:save")
+    @ResponseBody
+    public R save(@RequestBody MkDistEntity mkDist) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDist);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distName", "分销商名称");
+        builder.put("distEname", "分销商英文名");
+        builder.put("distFlag", "分销商标识");
+        builder.put("thirdMerchSn", "所属第三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistService.save(mkDist);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkdist:update")
+    @ResponseBody
+    public R update(@RequestBody MkDistEntity mkDist) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDist);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distName", "分销商名称");
+        builder.put("distEname", "分销商英文名");
+        builder.put("distFlag", "分销商标识");
+        builder.put("thirdMerchSn", "所属第三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistService.update(mkDist);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkdist:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]distIds) {
+        mkDistService.deleteBatch(distIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<MkDistEntity> list = mkDistService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+    /**
+     * 查看所有子分销商列表
+     */
+    @RequestMapping("/queryChildAll")
+    @ResponseBody
+    public R queryChildAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        List<MkDistEntity> list = mkDistService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+
+    @RequestMapping("/queryDistByGoodsId")
+    @ResponseBody
+    public R queryDistByGoodsId(@RequestParam Map<String, Object> params) {
+
+        MkDistEntity mkDistEntity = mkDistService.queryDistByGoodsId(params);
+
+        return R.ok().put("mkDistEntity", mkDistEntity);
+    }
+
+    @RequestMapping("/queryAllByHier")
+    @ResponseBody
+    public R queryAllByHier(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        List<MkDistEntity> list = mkDistService.queryAllByHier(params);
+
+        return R.ok().put("list", list);
+    }
+
+}

+ 258 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistHierController.java

@@ -0,0 +1,258 @@
+package com.kmall.admin.controller.mk;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.ExpendDistDto;
+import com.kmall.admin.entity.mk.MkDistEntity;
+import com.kmall.admin.entity.mk.MkDistHierEntity;
+import com.kmall.admin.entity.mk.MkDistHierLvlEntity;
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
+import com.kmall.admin.service.mk.MkDistHierService;
+import com.kmall.admin.service.mk.MkDistSellAllocationService;
+import com.kmall.admin.service.mk.MkDistService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.*;
+import io.swagger.models.auth.In;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Controller
+@RequestMapping("mkdisthier")
+public class MkDistHierController {
+    @Autowired
+    private MkDistHierService mkDistHierService;
+    @Autowired
+    private MkDistService mkDistService;
+    @Autowired
+    private MkDistSellAllocationService mkDistSellAllocationService;
+
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkdisthier:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        String distHierName = (String) params.get("distHierName");
+        if(org.apache.commons.lang3.StringUtils.isNotEmpty(distHierName)){
+            try{
+                distHierName = new String(distHierName.getBytes("iso-8859-1"),"utf-8");
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+            params.put("distHierName", distHierName);
+        }
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkDistHierEntity> mkDistHierList = mkDistHierService.queryList(query);
+        int total = mkDistHierService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkDistHierList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{distHierId}")
+    @RequiresPermissions("mkdisthier:info")
+    @ResponseBody
+    public R info(@PathVariable("distHierId") Integer distHierId) {
+        MkDistHierEntity mkDistHier = mkDistHierService.queryObject(distHierId);
+
+        return R.ok().put("mkDistHier", mkDistHier);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkdisthier:save")
+    @ResponseBody
+    public R save(@RequestBody MkDistHierEntity mkDistHier) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistHier);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distChnlId", "分销渠道id");
+        builder.put("pdistId", "上级分销商id");
+        builder.put("distId", "分销商id");
+        builder.put("hierLvl", "层级级别");
+        builder.put("distHierName", "分销商层级名称");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistHierService.save(mkDistHier);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkdisthier:update")
+    @ResponseBody
+    public R update(@RequestBody MkDistHierEntity mkDistHier) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistHier);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("distChnlId", "分销渠道id");
+        builder.put("pdistId", "上级分销商id");
+        builder.put("distId", "分销商id");
+        builder.put("hierLvl", "层级级别");
+        builder.put("distHierName", "分销商层级名称");
+        builder.put("supplierId", "所属供货商");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistHierService.update(mkDistHier);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkdisthier:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]distHierIds) {
+        mkDistHierService.deleteBatch(distHierIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<MkDistHierEntity> list = mkDistHierService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/queryAllConfig")
+    @ResponseBody
+    public R queryAllConfig(@RequestParam Map<String, Object> params) {
+
+        Map configMap = mkDistHierService.querySysConfigByKey();
+        String value = MapUtils.getString("value", configMap);
+        List<MkDistHierLvlEntity> lvlEntitieyList = new ArrayList<>();
+        Integer hierLvl = Integer.parseInt(value);
+
+        for (int i=0;i < hierLvl;i++){
+            MkDistHierLvlEntity mkDistHierLvlEntity = new MkDistHierLvlEntity();
+            mkDistHierLvlEntity.setHierLvl(String.valueOf(i+1));
+            mkDistHierLvlEntity.setHierKey(String.valueOf(i+1));
+            lvlEntitieyList.add(mkDistHierLvlEntity);
+        }
+
+        return R.ok().put("lvlEntitieyList", lvlEntitieyList);
+    }
+
+    /**
+     * 查看树
+     */
+    @RequestMapping("/queryAll/tree")
+    @ResponseBody
+    public R queryAllByTree(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        String distId = (String) params.get("distId");
+        List<MkDistHierEntity> treeList = new ArrayList<>();
+
+        MkDistHierEntity mkDistHierEntity = mkDistHierService.queryObjectByDistMap(params);
+        if(mkDistHierEntity != null){
+            String lvl = mkDistHierEntity.getHierLvl();
+            Integer hierLvl = Integer.parseInt(lvl);
+
+            Map<String, Object> distMap = new HashMap<>();
+            distMap.put("distId", distId);
+            List<MkDistHierEntity> list = mkDistHierService.queryListByTree(distMap);
+
+            treeList.add(list.get(0));
+            Integer pdistId = 0;
+            if(list != null && list.size() > 0){
+                pdistId = list.get(0).getPdistId();
+            }
+            for (int i = 0; i< hierLvl-1; i++){
+                Map<String, Object> lvlMap = new HashMap<>();
+                lvlMap.put("pdistId", pdistId);
+                lvlMap.put("hierLvl", hierLvl-1-i);
+                List<MkDistHierEntity> lvlList = mkDistHierService.queryListByTree(lvlMap);
+                treeList.add(lvlList.get(0));
+                pdistId = lvlList.get(0).getPdistId();
+            }
+        }
+        List<ExpendDistDto> expendDistDtoList = new ArrayList<>();
+
+        String goodsId = (String) params.get("goodsId");
+        String storeId = (String) params.get("storeId");
+        Map<String, Object> allocationMap = new HashMap<>();
+        allocationMap.put("goodsId", goodsId);
+        allocationMap.put("storeId", storeId);
+        String expendDistLines = "";
+        List<MkDistSellAllocationEntity> allocationEntityList =  mkDistSellAllocationService.queryAllocationByMap(allocationMap);
+        if(allocationEntityList.size() > 0){
+            expendDistLines = allocationEntityList.get(0).getExpendDistLines();
+        }
+        String[] lines = null;
+        if(StringUtils.isNotEmpty(expendDistLines)){
+            lines = expendDistLines.split(",");
+        }
+
+        for (int i=0; i < treeList.size(); i++) {
+            MkDistHierEntity distHier = treeList.get(i);
+            ExpendDistDto expendDistDto = new ExpendDistDto();
+            expendDistDto.setExpendDistId(distHier.getDistId());
+            MkDistEntity mkDistEntity = mkDistService.queryObject(distHier.getDistId());
+            expendDistDto.setExpendDistName(mkDistEntity.getDistName());
+            expendDistDto.setExpendDistLvl(distHier.getHierLvl());
+
+            if(treeList.size() == lines.length){
+                expendDistDto.setExpendDistLine(BigDecimal.valueOf(Double.parseDouble(lines[i])));
+            }
+            expendDistDtoList.add(expendDistDto);
+        }
+        return R.ok().put("list", expendDistDtoList);
+    }
+
+    @RequestMapping("/queryNextLvlByDistId")
+    @ResponseBody
+    public R queryNextLvlByDistId(@RequestParam Map<String, Object> params) {
+        MkDistHierEntity mkDistHierEntity = mkDistHierService.queryObjectByDistMap(params);
+        List<MkDistHierLvlEntity> lvlEntitieyList = new ArrayList<>();
+        if (mkDistHierEntity != null) {
+            String hierLvl = "";
+            Integer lvl = Integer.parseInt(mkDistHierEntity.getHierLvl());
+            hierLvl = String.valueOf(lvl);
+            MkDistHierLvlEntity lvlEntity = new MkDistHierLvlEntity();
+            lvlEntity.setHierKey(hierLvl);
+            lvlEntity.setHierLvl(hierLvl);
+            lvlEntitieyList.add(lvlEntity);
+        }
+        return R.ok().put("lvlEntitieyList", lvlEntitieyList);
+    }
+}

+ 147 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistSellAllocationController.java

@@ -0,0 +1,147 @@
+package com.kmall.admin.controller.mk;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
+import com.kmall.admin.service.mk.MkDistSellAllocationHistoryService;
+import com.kmall.admin.service.mk.MkDistSellAllocationService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelExport;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Controller
+@RequestMapping("mkdistsellallocation")
+public class MkDistSellAllocationController {
+    @Autowired
+    private MkDistSellAllocationService mkDistSellAllocationService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkdistsellallocation:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkDistSellAllocationEntity> mkDistSellAllocationList = mkDistSellAllocationService.queryList(query);
+        int total = mkDistSellAllocationService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkDistSellAllocationList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{sellAllocId}")
+    @RequiresPermissions("mkdistsellallocation:info")
+    @ResponseBody
+    public R info(@PathVariable("sellAllocId") Integer sellAllocId) {
+        MkDistSellAllocationEntity mkDistSellAllocation = mkDistSellAllocationService.queryObject(sellAllocId);
+        String expendDistId = mkDistSellAllocation.getExpendDistIds();
+        String[] expendDistIds = expendDistId.split(",");
+        List<Integer> expendDistIdList = new ArrayList<>();
+        for (int i=0; i< expendDistIds.length;i++){
+            expendDistIdList.add(Integer.valueOf(expendDistIds[i]));
+        }
+        mkDistSellAllocation.setExpendDistIdList(expendDistIdList);
+
+        return R.ok().put("mkDistSellAllocation", mkDistSellAllocation);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkdistsellallocation:save")
+    @ResponseBody
+    public R save(@RequestBody MkDistSellAllocationEntity mkDistSellAllocation) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistSellAllocation);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+//        builder.put("distChnlId", "分销渠道id");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("supplierId", "所属供货商");
+        builder.put("storeId", "所属门店");
+        builder.put("goodsId", "商品id");
+        builder.put("distId", "商品所属分销商id");
+        builder.put("allocType", "分配方式");
+//        builder.put("expendDistLines", "支出提成额度");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistSellAllocationService.save(mkDistSellAllocation);
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkdistsellallocation:update")
+    @ResponseBody
+    public R update(@RequestBody MkDistSellAllocationEntity mkDistSellAllocation) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkDistSellAllocation);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+//        builder.put("distChnlId", "分销渠道id");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("supplierId", "所属供货商");
+        builder.put("storeId", "所属门店");
+        builder.put("goodsId", "商品id");
+        builder.put("distId", "商品所属分销商id");
+        builder.put("allocType", "分配方式");
+//        builder.put("expendDistLines", "支出提成额度");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkDistSellAllocationService.update(mkDistSellAllocation);
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkdistsellallocation:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]sellAllocIds) {
+        mkDistSellAllocationService.deleteBatch(sellAllocIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<MkDistSellAllocationEntity> list = mkDistSellAllocationService.queryList(params);
+        return R.ok().put("list", list);
+    }
+}

+ 206 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkDistSellStatisController.java

@@ -0,0 +1,206 @@
+package com.kmall.admin.controller.mk;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import com.kmall.admin.entity.mk.MkDistEntity;
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
+import com.kmall.admin.entity.mk.MkDistSellStatisEntity;
+import com.kmall.admin.service.mk.MkDistSellStatisService;
+import com.kmall.admin.service.mk.MkDistService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.DateUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.common.utils.excel.ExcelExport;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 购买商品生成销售分配记录统计,渠道销售统计Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Controller
+@RequestMapping("mkdistsellstatis")
+public class MkDistSellStatisController {
+    @Autowired
+    private MkDistSellStatisService mkDistSellStatisService;
+    @Autowired
+    private MkDistService mkDistService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkdistsellstatis:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = setTimeMap(params);
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkDistSellStatisEntity> mkDistSellStatisList = mkDistSellStatisService.queryList(query);
+        int total = mkDistSellStatisService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkDistSellStatisList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("mkdistsellstatis:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MkDistSellStatisEntity mkDistSellStatis = mkDistSellStatisService.queryObject(id);
+
+        return R.ok().put("mkDistSellStatis", mkDistSellStatis);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkdistsellstatis:save")
+    @ResponseBody
+    public R save(@RequestBody MkDistSellStatisEntity mkDistSellStatis) {
+        mkDistSellStatisService.save(mkDistSellStatis);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkdistsellstatis:update")
+    @ResponseBody
+    public R update(@RequestBody MkDistSellStatisEntity mkDistSellStatis) {
+        mkDistSellStatisService.update(mkDistSellStatis);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkdistsellstatis:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        mkDistSellStatisService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = setTimeMap(params);
+
+        List<MkDistSellStatisEntity> list = mkDistSellStatisService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 订单导出请求
+     */
+    @RequiresPermissions(value = {"order:export"})
+    @RequestMapping(value = "export")
+    public Object export(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = setTimeMap(params);
+
+        List<MkDistSellStatisEntity> orderList = mkDistSellStatisService.queryStatisExportList(params);
+
+        ExcelExport ee = new ExcelExport("渠道销售统计");
+
+//        String[] header = new String[]{"分销渠道名称","所属三方商户", "所属门店", "订单编号", "商品所属分销商", "商品名称", "商品销售价", "实际支付金额",
+//                "分销分配方式", "支出分销规则(分销商:分配额度)", "支出分销商", "支出分销商额度", "支出分销商等级"};
+        String[] header = new String[]{ "订单编号", "商品名称", "商品所属分销商-门店","上级分销商-门店","上级分销商等级", "上级分销商分摊金额","商品销售价", "实际支付金额",
+                "分销分配方式", "支出分销规则(分销商:分配额度)", "所属三方商户", "分销渠道名称"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (orderList != null && orderList.size() != 0) {
+            for (MkDistSellStatisEntity mkDistSellStatisEntity : orderList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                StringBuffer lines = new StringBuffer();
+                String distIds = mkDistSellStatisEntity.getExpendDistIds();
+                String distLines = mkDistSellStatisEntity.getExpendDistLines();
+                String[] idsArray = distIds.split(",");
+                String[] distLinesArray = distLines.split(",");
+                for (int i = 0; i < idsArray.length; i++){
+                    MkDistEntity distEntity = mkDistService.queryObject(Integer.parseInt(idsArray[i]));
+                    lines = lines.append(distEntity.getDistName() +":"+ distLinesArray[i]+",");
+                }
+
+                map.put("orderSn", mkDistSellStatisEntity.getOrderSn());
+                map.put("goodsName", mkDistSellStatisEntity.getGoodsName());
+                map.put("goodsDistName", mkDistSellStatisEntity.getGoodsDistName()+"-"+mkDistSellStatisEntity.getStoreName());
+                map.put("expendDistName", mkDistSellStatisEntity.getExpendDistName()+"-"+mkDistSellStatisEntity.getChildStoreName());
+                map.put("expendDistLevel", mkDistSellStatisEntity.getExpendDistLevel());
+                map.put("expendDistPrice", mkDistSellStatisEntity.getExpendDistPrice());
+                map.put("goodsPrice", mkDistSellStatisEntity.getGoodsPrice());
+                map.put("autprice", StringUtils.isNotEmpty(String.valueOf(mkDistSellStatisEntity.getActualPrice())) ? mkDistSellStatisEntity.getActualPrice().doubleValue() : 0);
+                map.put("allocType", StringUtils.isEmpty(mkDistSellStatisEntity.getAllocType())? "":
+                        Dict.allocType.valueOf("item_"+mkDistSellStatisEntity.getAllocType()).getItemName());
+                map.put("expendDistLines", lines.substring(0,lines.length()-1));
+                map.put("thirdPartyMerchName", mkDistSellStatisEntity.getThirdPartyMerchName());
+//                map.put("storeName", mkDistSellStatisEntity.getStoreName());
+//                map.put("childSupplierName", mkDistSellStatisEntity.getChildSupplierName());
+                map.put("distFlag", mkDistSellStatisEntity.getDistFlag());
+
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("渠道销售统计", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+    private Map<String, Object> setTimeMap(Map<String, Object> params){
+        String startTime = (String) params.get("startTime");
+        String endTime = (String) params.get("endTime");
+        if(org.apache.commons.lang.StringUtils.isNotEmpty(startTime)) {
+            try {
+                startTime = new String(startTime.getBytes("iso-8859-1"), "utf-8");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            startTime = DateUtils.getDate(startTime);
+            params.put("startTime", startTime + " 00:00:00");
+        }
+        if(org.apache.commons.lang.StringUtils.isNotEmpty(endTime)) {
+            try {
+                endTime = new String(endTime.getBytes("iso-8859-1"), "utf-8");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            endTime = DateUtils.getDate(endTime);
+            params.put("endTime", endTime + " 59:59:59");
+        }
+        return params;
+    }
+
+
+}

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

@@ -14,4 +14,7 @@ import com.kmall.manager.dao.BaseDao;
 public interface StoreDao extends BaseDao<StoreEntity> {
 
     StoreEntity queryObjectByName(@Param("storeName") String storeName);
+
+//    StoreEntity queryObjectByDistId(@Param("distId") Integer distId);
+
 }

+ 15 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkCenterMenuDao.java

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkCenterMenuEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 营销中心菜单表Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+public interface MkCenterMenuDao extends BaseDao<MkCenterMenuEntity> {
+
+}

+ 16 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistChnlDao.java

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkDistChnlEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 分销渠道Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public interface MkDistChnlDao extends BaseDao<MkDistChnlEntity> {
+    MkDistChnlEntity queryObjectByDistFlag(String distFlag);
+
+}

+ 26 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistDao.java

@@ -0,0 +1,26 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkDistEntity;
+import com.kmall.manager.dao.BaseDao;
+import io.swagger.models.auth.In;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销商,distributorDao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public interface MkDistDao extends BaseDao<MkDistEntity> {
+    MkDistEntity queryObjectByDistName(String distName);
+
+    MkDistEntity queryDistByGoodsId(Map<String, Object> map);
+
+    MkDistEntity queryDistByStoreId(Integer storeId);
+
+    List<MkDistEntity> queryAllByHier(Map<String, Object> map);
+
+}

+ 77 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistHierDao.java

@@ -0,0 +1,77 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkDistHierEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistHierDao extends BaseDao<MkDistHierEntity> {
+
+    MkDistHierEntity queryObjectByName(String distHierName);
+
+    /**
+     * 根据上级分销商和渠道分销查询层级关系
+     * @param pdistId
+     * @param distChnlId
+     * @return
+     */
+    List<MkDistHierEntity> queryObjectByPdistIdAndChnlId(@Param("pdistId") Integer pdistId, @Param("distChnlId")Integer distChnlId);
+
+    /**
+     * 查询层级关系树形结构
+     * @param map
+     * @return
+     */
+    List<MkDistHierEntity> queryListByTree(Map<String, Object> map);
+
+    /**
+     * 根据父级分销商和子级分销商和分销渠道查询层级关系
+     * @param map
+     * @return
+     */
+    List<MkDistHierEntity> queryListByPdistIdAndChnlIdAndDistId(Map<String, Object> map);
+
+    /**
+     * 查询当前上下级分销商的层级关系
+     * @param map
+     * @return
+     */
+    List<MkDistHierEntity> queryObjectByDistIdAndPdistId(Map<String, Object> map);
+
+    /**
+     * 查询配置信息
+     * @param key
+     * @return
+     */
+    Map querySysConfigByKey(String key);
+
+    /**
+     * 查询上级分销商与分销渠道与层级级别的层级关系
+     * @param map
+     * @return
+     */
+    MkDistHierEntity queryObjectByHierMap(Map<String, Object> map);
+
+    /**
+     * 根据分销渠道查询层级级别为1级的层级关系信息
+     * @param distChnlId
+     * @return
+     */
+    MkDistHierEntity selectDistHierByChnlIdAndOneLvl(@Param("distChnlId")Integer distChnlId);
+
+    /**
+     * 根据子级分销商查询层级关系
+     * @param distId
+     * @return
+     */
+    MkDistHierEntity selectDistHierByDistId(@Param("distId")Integer distId);
+}

+ 18 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellAllocationDao.java

@@ -0,0 +1,18 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
+import com.kmall.manager.dao.BaseDao;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistSellAllocationDao extends BaseDao<MkDistSellAllocationEntity> {
+    List<MkDistSellAllocationEntity> queryAllocationByMap(Map<String, Object> map);
+}

+ 16 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellAllocationHistoryDao.java

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao.mk;
+
+
+import com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 13:55:16
+ */
+public interface MkDistSellAllocationHistoryDao extends BaseDao<MkDistSellAllocationHistoryEntity> {
+
+}

+ 18 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkDistSellStatisDao.java

@@ -0,0 +1,18 @@
+package com.kmall.admin.dao.mk;
+
+import com.kmall.admin.entity.mk.MkDistSellStatisEntity;
+import com.kmall.manager.dao.BaseDao;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购买商品生成销售分配记录统计,渠道销售统计Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistSellStatisDao extends BaseDao<MkDistSellStatisEntity> {
+    List<MkDistSellStatisEntity> queryStatisExportList(Map<String, Object> map);
+}

+ 53 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/ExpendDistDto.java

@@ -0,0 +1,53 @@
+package com.kmall.admin.dto;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-19 14:07
+ */
+public class ExpendDistDto  implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer expendDistId;
+
+    private String expendDistName;
+
+    private BigDecimal expendDistLine;
+
+    private String expendDistLvl;
+
+    public String getExpendDistLvl() {
+        return expendDistLvl;
+    }
+
+    public void setExpendDistLvl(String expendDistLvl) {
+        this.expendDistLvl = expendDistLvl;
+    }
+
+    public String getExpendDistName() {
+        return expendDistName;
+    }
+
+    public void setExpendDistName(String expendDistName) {
+        this.expendDistName = expendDistName;
+    }
+
+    public Integer getExpendDistId() {
+        return expendDistId;
+    }
+
+    public void setExpendDistId(Integer expendDistId) {
+        this.expendDistId = expendDistId;
+    }
+
+    public BigDecimal getExpendDistLine() {
+        return expendDistLine;
+    }
+
+    public void setExpendDistLine(BigDecimal expendDistLine) {
+        this.expendDistLine = expendDistLine;
+    }
+}

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

@@ -147,11 +147,11 @@ public class GoodsEntity implements Serializable {
     // 商品类型
     private Integer goodsType = 0; // 0普通 1 2团购
 
-    List<GoodsAttributeEntity> attributeEntityList = new ArrayList<>();
+    private List<GoodsAttributeEntity> attributeEntityList = new ArrayList<>();
 
-    List<GoodsGalleryEntity> goodsImgList = new ArrayList<>();
+    private List<GoodsGalleryEntity> goodsImgList = new ArrayList<>();
 
-    List<ProductEntity> productEntityList = new ArrayList<>();
+    private List<ProductEntity> productEntityList = new ArrayList<>();
     /**
      * 翻译用字段
      */

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

@@ -109,7 +109,7 @@ public class ProductStoreRelaEntity implements Serializable {
 
     private Integer goodsSellVolume;
 
-    List<GoodsAttributeEntity> attributeEntityList = new ArrayList<>();
+    private List<GoodsAttributeEntity> attributeEntityList = new ArrayList<>();
 
     public Integer getGoodsSellVolume() {
         return goodsSellVolume;

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

@@ -61,6 +61,16 @@ public class ThirdMerchantBizEntity implements Serializable {
 
     private String isMapShow;
 
+    private String isDistSellStart;
+
+    public String getIsDistSellStart() {
+        return isDistSellStart;
+    }
+
+    public void setIsDistSellStart(String isDistSellStart) {
+        this.isDistSellStart = isDistSellStart;
+    }
+
     public String getIsMapShow() {
         return isMapShow;
     }

+ 274 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkCenterMenuEntity.java

@@ -0,0 +1,274 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 营销中心菜单表实体
+ * 表名 mk_center_menu
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+public class MkCenterMenuEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private Integer id;
+    /**
+     * 菜单名称
+     */
+    private String menuName;
+    /**
+     * 菜单描述
+     */
+    private String menuDetail;
+    /**
+     * 菜单图片链接
+     */
+    private String picUrl;
+    /**
+     * 菜单跳转url
+     */
+    private String menuUrl;
+    /**
+     * 门店id
+     */
+    private Integer storeId;
+    /**
+     * 第三方商户id
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+    private String storeName;
+    private String thirdPartyMerchName;
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    /**
+     * 设置:编号
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:编号
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:菜单名称
+     */
+    public void setMenuName(String menuName) {
+        this.menuName = menuName;
+    }
+
+    /**
+     * 获取:菜单名称
+     */
+    public String getMenuName() {
+        return menuName;
+    }
+    /**
+     * 设置:菜单描述
+     */
+    public void setMenuDetail(String menuDetail) {
+        this.menuDetail = menuDetail;
+    }
+
+    /**
+     * 获取:菜单描述
+     */
+    public String getMenuDetail() {
+        return menuDetail;
+    }
+    /**
+     * 设置:菜单图片链接
+     */
+    public void setPicUrl(String picUrl) {
+        this.picUrl = picUrl;
+    }
+
+    /**
+     * 获取:菜单图片链接
+     */
+    public String getPicUrl() {
+        return picUrl;
+    }
+    /**
+     * 设置:菜单跳转url
+     */
+    public void setMenuUrl(String menuUrl) {
+        this.menuUrl = menuUrl;
+    }
+
+    /**
+     * 获取:菜单跳转url
+     */
+    public String getMenuUrl() {
+        return menuUrl;
+    }
+    /**
+     * 设置:门店id
+     */
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    /**
+     * 获取:门店id
+     */
+    public Integer getStoreId() {
+        return storeId;
+    }
+    /**
+     * 设置:第三方商户id
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:第三方商户id
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 258 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistChnlEntity.java

@@ -0,0 +1,258 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 分销渠道实体
+ * 表名 mk_dist_chnl
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public class MkDistChnlEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分销渠道id
+     */
+    private Integer distChnlId;
+    /**
+     * 分销渠道名称
+     */
+    private String distFlag;
+    /**
+     * 所属分类,【part_type,00:三方商户,10:供应商,20::三方商户及供货商】
+     */
+    private String partType;
+    /**
+     * 所属三方商户
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 排序
+     */
+    private Integer sortOrder;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+    private String thirdPartyMerchName;
+    private String childSupplierName;
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    public String getChildSupplierName() {
+        return childSupplierName;
+    }
+
+    public void setChildSupplierName(String childSupplierName) {
+        this.childSupplierName = childSupplierName;
+    }
+
+
+    /**
+     * 设置:分销渠道id
+     */
+    public void setDistChnlId(Integer distChnlId) {
+        this.distChnlId = distChnlId;
+    }
+
+    /**
+     * 获取:分销渠道id
+     */
+    public Integer getDistChnlId() {
+        return distChnlId;
+    }
+    /**
+     * 设置:分销渠道名称
+     */
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    /**
+     * 获取:分销渠道名称
+     */
+    public String getDistFlag() {
+        return distFlag;
+    }
+    /**
+     * 设置:所属分类,【part_type,00:三方商户,10:供应商,20::三方商户及供货商】
+     */
+    public void setPartType(String partType) {
+        this.partType = partType;
+    }
+
+    /**
+     * 获取:所属分类,【part_type,00:三方商户,10:供应商,20::三方商户及供货商】
+     */
+    public String getPartType() {
+        return partType;
+    }
+    /**
+     * 设置:所属三方商户
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:所属三方商户
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:排序
+     */
+    public void setSortOrder(Integer sortOrder) {
+        this.sortOrder = sortOrder;
+    }
+
+    /**
+     * 获取:排序
+     */
+    public Integer getSortOrder() {
+        return sortOrder;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 292 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistEntity.java

@@ -0,0 +1,292 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 分销商,distributor实体
+ * 表名 mk_dist
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public class MkDistEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分销商id
+     */
+    private Integer distId;
+    /**
+     * 分销商名称
+     */
+    private String distName;
+    /**
+     * 分销商英文名
+     */
+    private String distEname;
+    /**
+     * 分销商标识
+     */
+    private String distFlag;
+    /**
+     * 所属三方商户
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 排序
+     */
+    private Integer sortOrder;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+    private String thirdPartyMerchName;
+    private String childSupplierName;
+    private Integer storeId;
+    private String storeName;
+
+    public Integer getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    public String getChildSupplierName() {
+        return childSupplierName;
+    }
+
+    public void setChildSupplierName(String childSupplierName) {
+        this.childSupplierName = childSupplierName;
+    }
+
+    /**
+     * 设置:分销商id
+     */
+    public void setDistId(Integer distId) {
+        this.distId = distId;
+    }
+
+    /**
+     * 获取:分销商id
+     */
+    public Integer getDistId() {
+        return distId;
+    }
+    /**
+     * 设置:分销商名称
+     */
+    public void setDistName(String distName) {
+        this.distName = distName;
+    }
+
+    /**
+     * 获取:分销商名称
+     */
+    public String getDistName() {
+        return distName;
+    }
+    /**
+     * 设置:分销商英文名
+     */
+    public void setDistEname(String distEname) {
+        this.distEname = distEname;
+    }
+
+    /**
+     * 获取:分销商英文名
+     */
+    public String getDistEname() {
+        return distEname;
+    }
+    /**
+     * 设置:分销商标识
+     */
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    /**
+     * 获取:分销商标识
+     */
+    public String getDistFlag() {
+        return distFlag;
+    }
+    /**
+     * 设置:所属三方商户
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:所属三方商户
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:排序
+     */
+    public void setSortOrder(Integer sortOrder) {
+        this.sortOrder = sortOrder;
+    }
+
+    /**
+     * 获取:排序
+     */
+    public Integer getSortOrder() {
+        return sortOrder;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 361 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistHierEntity.java

@@ -0,0 +1,361 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级实体
+ * 表名 mk_dist_hier
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public class MkDistHierEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分销层级id
+     */
+    private Integer distHierId;
+    /**
+     * 分销渠道id
+     */
+    private Integer distChnlId;
+    /**
+     * 上级分销商id
+     */
+    private Integer pdistId;
+    /**
+     * 分销商id
+     */
+    private Integer distId;
+    /**
+     * 分销层级名称
+     */
+    private String distHierName;
+    /**
+     * 分销层级昵称
+     */
+    private String distHierNname;
+    /**
+     * 层级级别,最大支持99级,【hier_lvl,01:01,02:02,......,99:99】
+     */
+    private String hierLvl;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 排序
+     */
+    private Integer sortOrder;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String pdDistName;
+
+    private String distName;
+
+    private String distFlag;
+
+    private String childSupplierName;
+
+    private String parentName;
+
+    private String name;
+
+    private List<MkDistHierLvlEntity> lvlEntitieyList;
+
+    public List<MkDistHierLvlEntity> getLvlEntitieyList() {
+        return lvlEntitieyList;
+    }
+
+    public void setLvlEntitieyList(List<MkDistHierLvlEntity> lvlEntitieyList) {
+        this.lvlEntitieyList = lvlEntitieyList;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPdDistName() {
+        return pdDistName;
+    }
+
+    public void setPdDistName(String pdDistName) {
+        this.pdDistName = pdDistName;
+    }
+
+    public String getDistName() {
+        return distName;
+    }
+
+    public void setDistName(String distName) {
+        this.distName = distName;
+    }
+
+    public String getDistFlag() {
+        return distFlag;
+    }
+
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    public String getChildSupplierName() {
+        return childSupplierName;
+    }
+
+    public void setChildSupplierName(String childSupplierName) {
+        this.childSupplierName = childSupplierName;
+    }
+
+    /**
+     * 设置:分销层级id
+     */
+    public void setDistHierId(Integer distHierId) {
+        this.distHierId = distHierId;
+    }
+
+    /**
+     * 获取:分销层级id
+     */
+    public Integer getDistHierId() {
+        return distHierId;
+    }
+    /**
+     * 设置:分销渠道id
+     */
+    public void setDistChnlId(Integer distChnlId) {
+        this.distChnlId = distChnlId;
+    }
+
+    /**
+     * 获取:分销渠道id
+     */
+    public Integer getDistChnlId() {
+        return distChnlId;
+    }
+    /**
+     * 设置:上级分销商id
+     */
+    public void setPdistId(Integer pdistId) {
+        this.pdistId = pdistId;
+    }
+
+    /**
+     * 获取:上级分销商id
+     */
+    public Integer getPdistId() {
+        return pdistId;
+    }
+    /**
+     * 设置:分销商id
+     */
+    public void setDistId(Integer distId) {
+        this.distId = distId;
+    }
+
+    /**
+     * 获取:分销商id
+     */
+    public Integer getDistId() {
+        return distId;
+    }
+    /**
+     * 设置:分销层级名称
+     */
+    public void setDistHierName(String distHierName) {
+        this.distHierName = distHierName;
+    }
+
+    /**
+     * 获取:分销层级名称
+     */
+    public String getDistHierName() {
+        return distHierName;
+    }
+    /**
+     * 设置:分销层级昵称
+     */
+    public void setDistHierNname(String distHierNname) {
+        this.distHierNname = distHierNname;
+    }
+
+    /**
+     * 获取:分销层级昵称
+     */
+    public String getDistHierNname() {
+        return distHierNname;
+    }
+    /**
+     * 设置:层级级别,最大支持99级,【hier_lvl,01:01,02:02,......,99:99】
+     */
+    public void setHierLvl(String hierLvl) {
+        this.hierLvl = hierLvl;
+    }
+
+    /**
+     * 获取:层级级别,最大支持99级,【hier_lvl,01:01,02:02,......,99:99】
+     */
+    public String getHierLvl() {
+        return hierLvl;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:排序
+     */
+    public void setSortOrder(Integer sortOrder) {
+        this.sortOrder = sortOrder;
+    }
+
+    /**
+     * 获取:排序
+     */
+    public Integer getSortOrder() {
+        return sortOrder;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 31 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistHierLvlEntity.java

@@ -0,0 +1,31 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-04-16 17:23
+ */
+public class MkDistHierLvlEntity  implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String hierLvl;
+    private String hierKey;
+
+    public String getHierLvl() {
+        return hierLvl;
+    }
+
+    public void setHierLvl(String hierLvl) {
+        this.hierLvl = hierLvl;
+    }
+
+    public String getHierKey() {
+        return hierKey;
+    }
+
+    public void setHierKey(String hierKey) {
+        this.hierKey = hierKey;
+    }
+}

+ 390 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellAllocationEntity.java

@@ -0,0 +1,390 @@
+package com.kmall.admin.entity.mk;
+
+import com.kmall.admin.dto.ExpendDistDto;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配实体
+ * 表名 mk_dist_sell_allocation
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public class MkDistSellAllocationEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 销售分配id
+     */
+    private Integer sellAllocId;
+    /**
+     * 分销渠道名称
+     */
+    private String distFlag;
+    /**
+     * 所属三方商户
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 商品所属分销商id
+     */
+    private Integer distId;
+    /**
+     * 商品id
+     */
+    private Integer goodsId;
+    /**
+     * 分配方式,【alloc_type,00:比例,10:金额】
+     */
+    private String allocType;
+    /**
+     * 支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    private String expendDistIds;
+    /**
+     * 支出提成额度(点数/金额),格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    private String expendDistLines;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private List<Integer> expendDistIdList;
+
+    private Integer storeId;
+
+    private Integer distChnlId;
+
+    private Integer sellAllocHistoryId;
+
+    private String distName;
+    private String storeName;
+    private String goodsName;
+    private String thirdPartyMerchName;
+    private String childSupplierName;
+
+    private List<ExpendDistDto> expendDistDtoList;
+
+    public List<ExpendDistDto> getExpendDistDtoList() {
+        return expendDistDtoList;
+    }
+
+    public void setExpendDistDtoList(List<ExpendDistDto> expendDistDtoList) {
+        this.expendDistDtoList = expendDistDtoList;
+    }
+
+    public Integer getSellAllocHistoryId() {
+        return sellAllocHistoryId;
+    }
+
+    public void setSellAllocHistoryId(Integer sellAllocHistoryId) {
+        this.sellAllocHistoryId = sellAllocHistoryId;
+    }
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    public String getChildSupplierName() {
+        return childSupplierName;
+    }
+
+    public void setChildSupplierName(String childSupplierName) {
+        this.childSupplierName = childSupplierName;
+    }
+
+
+    public String getDistName() {
+        return distName;
+    }
+
+    public void setDistName(String distName) {
+        this.distName = distName;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public Integer getDistChnlId() {
+        return distChnlId;
+    }
+
+    public void setDistChnlId(Integer distChnlId) {
+        this.distChnlId = distChnlId;
+    }
+
+    public Integer getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    public List<Integer> getExpendDistIdList() {
+        return expendDistIdList;
+    }
+
+    public void setExpendDistIdList(List<Integer> expendDistIdList) {
+        this.expendDistIdList = expendDistIdList;
+    }
+
+    /**
+     * 设置:销售分配id
+     */
+    public void setSellAllocId(Integer sellAllocId) {
+        this.sellAllocId = sellAllocId;
+    }
+
+    /**
+     * 获取:销售分配id
+     */
+    public Integer getSellAllocId() {
+        return sellAllocId;
+    }
+    /**
+     * 设置:分销渠道名称
+     */
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    /**
+     * 获取:分销渠道名称
+     */
+    public String getDistFlag() {
+        return distFlag;
+    }
+    /**
+     * 设置:所属三方商户
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:所属三方商户
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:商品所属分销商id
+     */
+    public void setDistId(Integer distId) {
+        this.distId = distId;
+    }
+
+    /**
+     * 获取:商品所属分销商id
+     */
+    public Integer getDistId() {
+        return distId;
+    }
+    /**
+     * 设置:商品id
+     */
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    /**
+     * 获取:商品id
+     */
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+    /**
+     * 设置:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public void setAllocType(String allocType) {
+        this.allocType = allocType;
+    }
+
+    /**
+     * 获取:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public String getAllocType() {
+        return allocType;
+    }
+    /**
+     * 设置:支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    public void setExpendDistIds(String expendDistIds) {
+        this.expendDistIds = expendDistIds;
+    }
+
+    /**
+     * 获取:支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    public String getExpendDistIds() {
+        return expendDistIds;
+    }
+    /**
+     * 设置:支出提成额度(点数/金额),格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    public void setExpendDistLines(String expendDistLines) {
+        this.expendDistLines = expendDistLines;
+    }
+
+    /**
+     * 获取:支出提成额度(点数/金额),格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    public String getExpendDistLines() {
+        return expendDistLines;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 324 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellAllocationHistoryEntity.java

@@ -0,0 +1,324 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配实体
+ * 表名 mk_dist_sell_allocation_history
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 13:55:16
+ */
+public class MkDistSellAllocationHistoryEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 销售分配历史记录id
+     */
+    private Integer sellAllocHistoryId;
+    /**
+     * 分销渠道id
+     */
+    private Integer distChnlId;
+    /**
+     * 分销渠道名称
+     */
+    private String distFlag;
+    /**
+     * 所属三方商户
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 商品所属分销商id
+     */
+    private Integer distId;
+    /**
+     * 门店id
+     */
+    private Integer storeId;
+    /**
+     * 商品id
+     */
+    private Integer goodsId;
+    /**
+     * 分配方式,【alloc_type,00:比例,10:金额】
+     */
+    private String allocType;
+    /**
+     * 支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    private String expendDistIds;
+    /**
+     * 支出分销商金额【比例/金额】,格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    private String expendDistLines;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    /**
+     * 设置:销售分配历史记录id
+     */
+    public void setSellAllocHistoryId(Integer sellAllocHistoryId) {
+        this.sellAllocHistoryId = sellAllocHistoryId;
+    }
+
+    /**
+     * 获取:销售分配历史记录id
+     */
+    public Integer getSellAllocHistoryId() {
+        return sellAllocHistoryId;
+    }
+    /**
+     * 设置:分销渠道id
+     */
+    public void setDistChnlId(Integer distChnlId) {
+        this.distChnlId = distChnlId;
+    }
+
+    /**
+     * 获取:分销渠道id
+     */
+    public Integer getDistChnlId() {
+        return distChnlId;
+    }
+    /**
+     * 设置:分销渠道名称
+     */
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    /**
+     * 获取:分销渠道名称
+     */
+    public String getDistFlag() {
+        return distFlag;
+    }
+    /**
+     * 设置:所属三方商户
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:所属三方商户
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:商品所属分销商id
+     */
+    public void setDistId(Integer distId) {
+        this.distId = distId;
+    }
+
+    /**
+     * 获取:商品所属分销商id
+     */
+    public Integer getDistId() {
+        return distId;
+    }
+    /**
+     * 设置:门店id
+     */
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    /**
+     * 获取:门店id
+     */
+    public Integer getStoreId() {
+        return storeId;
+    }
+    /**
+     * 设置:商品id
+     */
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    /**
+     * 获取:商品id
+     */
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+    /**
+     * 设置:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public void setAllocType(String allocType) {
+        this.allocType = allocType;
+    }
+
+    /**
+     * 获取:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public String getAllocType() {
+        return allocType;
+    }
+    /**
+     * 设置:支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    public void setExpendDistIds(String expendDistIds) {
+        this.expendDistIds = expendDistIds;
+    }
+
+    /**
+     * 获取:支出分销商id,格式为【一级经销商id,二级经销商id,三级经销商id...】,a,b,c...,n,m
+     */
+    public String getExpendDistIds() {
+        return expendDistIds;
+    }
+    /**
+     * 设置:支出分销商金额【比例/金额】,格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    public void setExpendDistLines(String expendDistLines) {
+        this.expendDistLines = expendDistLines;
+    }
+
+    /**
+     * 获取:支出分销商金额【比例/金额】,格式为【一级提成额度,二级提成额度,三级提成额度...】,3,2,1...,n,m
+     */
+    public String getExpendDistLines() {
+        return expendDistLines;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 491 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/mk/MkDistSellStatisEntity.java

@@ -0,0 +1,491 @@
+package com.kmall.admin.entity.mk;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 购买商品生成销售分配记录统计,渠道销售统计实体
+ * 表名 mk_dist_sell_statis
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public class MkDistSellStatisEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private Integer id;
+    /**
+     * 分销渠道名称
+     */
+    private String distFlag;
+    /**
+     * 所属三方商户
+     */
+    private Integer thirdMerchSn;
+    /**
+     * 所属供应商
+     */
+    private Integer supplierId;
+    /**
+     * 商品所属分销商id
+     */
+    private Integer distId;
+    /**
+     * 商品id
+     */
+    private String goodsId;
+    /**
+     * 商品价格
+     */
+    private BigDecimal goodsPrice;
+    /**
+     * 分配方式,【alloc_type,00:比例,10:金额】
+     */
+    private String allocType;
+    /**
+     * 支出分销商id
+     */
+    private Integer expendDistId;
+    /**
+     * 支出分销商金额【点数/金额】,公式:商品价格*设置点数/金额
+     */
+    private BigDecimal expendDistPrice;
+    /**
+     * 支出分销商等级 1 一级,2 二级,3 三级
+     */
+    private String expendDistLevel;
+    /**
+     * 来源
+     */
+    private String expendSource;
+    /**
+     * 是否有效,0:有效,1:无效
+     */
+    private String isValid;
+    /**
+     * 备注
+     */
+    private String note;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String orderSn;
+
+    private String distChnlId;
+
+    private Integer userId;
+
+    private Integer orderGoodsId;
+
+    private String goodsDistName;
+    private String storeName;
+    private String goodsName;
+    private String thirdPartyMerchName;
+    private String childSupplierName;
+    private String expendDistName;
+    private String userName;
+    private Integer sellAllocHistoryId;
+    private String expendDistIds;
+    private String expendDistLines;
+    private BigDecimal actualPrice;
+    private String childStoreName;
+
+    public String getChildStoreName() {
+        return childStoreName;
+    }
+
+    public void setChildStoreName(String childStoreName) {
+        this.childStoreName = childStoreName;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public Integer getSellAllocHistoryId() {
+        return sellAllocHistoryId;
+    }
+
+    public void setSellAllocHistoryId(Integer sellAllocHistoryId) {
+        this.sellAllocHistoryId = sellAllocHistoryId;
+    }
+
+    public String getExpendDistIds() {
+        return expendDistIds;
+    }
+
+    public void setExpendDistIds(String expendDistIds) {
+        this.expendDistIds = expendDistIds;
+    }
+
+    public String getExpendDistLines() {
+        return expendDistLines;
+    }
+
+    public void setExpendDistLines(String expendDistLines) {
+        this.expendDistLines = expendDistLines;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getGoodsDistName() {
+        return goodsDistName;
+    }
+
+    public void setGoodsDistName(String goodsDistName) {
+        this.goodsDistName = goodsDistName;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getThirdPartyMerchName() {
+        return thirdPartyMerchName;
+    }
+
+    public void setThirdPartyMerchName(String thirdPartyMerchName) {
+        this.thirdPartyMerchName = thirdPartyMerchName;
+    }
+
+    public String getChildSupplierName() {
+        return childSupplierName;
+    }
+
+    public void setChildSupplierName(String childSupplierName) {
+        this.childSupplierName = childSupplierName;
+    }
+
+    public String getExpendDistName() {
+        return expendDistName;
+    }
+
+    public void setExpendDistName(String expendDistName) {
+        this.expendDistName = expendDistName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getOrderGoodsId() {
+        return orderGoodsId;
+    }
+
+    public void setOrderGoodsId(Integer orderGoodsId) {
+        this.orderGoodsId = orderGoodsId;
+    }
+
+    public String getDistChnlId() {
+        return distChnlId;
+    }
+
+    public void setDistChnlId(String distChnlId) {
+        this.distChnlId = distChnlId;
+    }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn;
+    }
+
+    /**
+     * 设置:编号
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:编号
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:分销渠道名称
+     */
+    public void setDistFlag(String distFlag) {
+        this.distFlag = distFlag;
+    }
+
+    /**
+     * 获取:分销渠道名称
+     */
+    public String getDistFlag() {
+        return distFlag;
+    }
+    /**
+     * 设置:所属三方商户
+     */
+    public void setThirdMerchSn(Integer thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:所属三方商户
+     */
+    public Integer getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:所属供应商
+     */
+    public void setSupplierId(Integer supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    /**
+     * 获取:所属供应商
+     */
+    public Integer getSupplierId() {
+        return supplierId;
+    }
+    /**
+     * 设置:商品所属分销商id
+     */
+    public void setDistId(Integer distId) {
+        this.distId = distId;
+    }
+
+    /**
+     * 获取:商品所属分销商id
+     */
+    public Integer getDistId() {
+        return distId;
+    }
+    /**
+     * 设置:商品id
+     */
+    public void setGoodsId(String goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    /**
+     * 获取:商品id
+     */
+    public String getGoodsId() {
+        return goodsId;
+    }
+    /**
+     * 设置:商品价格
+     */
+    public void setGoodsPrice(BigDecimal goodsPrice) {
+        this.goodsPrice = goodsPrice;
+    }
+
+    /**
+     * 获取:商品价格
+     */
+    public BigDecimal getGoodsPrice() {
+        return goodsPrice;
+    }
+    /**
+     * 设置:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public void setAllocType(String allocType) {
+        this.allocType = allocType;
+    }
+
+    /**
+     * 获取:分配方式,【alloc_type,00:比例,10:金额】
+     */
+    public String getAllocType() {
+        return allocType;
+    }
+    /**
+     * 设置:支出分销商id
+     */
+    public void setExpendDistId(Integer expendDistId) {
+        this.expendDistId = expendDistId;
+    }
+
+    /**
+     * 获取:支出分销商id
+     */
+    public Integer getExpendDistId() {
+        return expendDistId;
+    }
+    /**
+     * 设置:支出分销商金额【点数/金额】,公式:商品价格*设置点数/金额
+     */
+    public void setExpendDistPrice(BigDecimal expendDistPrice) {
+        this.expendDistPrice = expendDistPrice;
+    }
+
+    /**
+     * 获取:支出分销商金额【点数/金额】,公式:商品价格*设置点数/金额
+     */
+    public BigDecimal getExpendDistPrice() {
+        return expendDistPrice;
+    }
+    /**
+     * 设置:支出分销商等级 1 一级,2 二级,3 三级
+     */
+    public void setExpendDistLevel(String expendDistLevel) {
+        this.expendDistLevel = expendDistLevel;
+    }
+
+    /**
+     * 获取:支出分销商等级 1 一级,2 二级,3 三级
+     */
+    public String getExpendDistLevel() {
+        return expendDistLevel;
+    }
+    /**
+     * 设置:来源
+     */
+    public void setExpendSource(String expendSource) {
+        this.expendSource = expendSource;
+    }
+
+    /**
+     * 获取:来源
+     */
+    public String getExpendSource() {
+        return expendSource;
+    }
+    /**
+     * 设置:是否有效,0:有效,1:无效
+     */
+    public void setIsValid(String isValid) {
+        this.isValid = isValid;
+    }
+
+    /**
+     * 获取:是否有效,0:有效,1:无效
+     */
+    public String getIsValid() {
+        return isValid;
+    }
+    /**
+     * 设置:备注
+     */
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    /**
+     * 获取:备注
+     */
+    public String getNote() {
+        return note;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/fromcomm/entity/SysConfigEntity.java

@@ -16,8 +16,17 @@ public class SysConfigEntity {
     private String key;
     @NotBlank(message = "参数值不能为空")
     private String value;
+    private String status;
     private String remark;
 
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
     public Long getId() {
         return id;
     }

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

@@ -3,8 +3,11 @@ package com.kmall.admin.service.impl;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.Maps;
 import com.kmall.admin.dao.*;
+import com.kmall.admin.dao.mk.MkDistSellAllocationDao;
 import com.kmall.admin.entity.*;
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
 import com.kmall.admin.service.ProductStoreRelaService;
+import com.kmall.admin.service.mk.MkDistSellAllocationService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
@@ -13,6 +16,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -51,6 +55,8 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     private AttributeDao attributeDao;
     @Autowired
     private StoreMngChangeDao storeMngChangeDao;
+    @Autowired
+    private MkDistSellAllocationDao mkDistSellAllocationDao;
 
     @Override
     public ProductStoreRelaEntity queryObject(Integer id) {
@@ -290,6 +296,33 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         if (storeRelaList != null && storeRelaList.size() > 0) {
             throw new RRException("该门店已存在此商品!");
         }
+        ProductStoreRelaEntity productStoreRelaEntity = productStoreRelaDao.queryObject(productStoreRela.getId());
+        if(productStoreRelaEntity == null){
+            throw new RRException("该门店商品信息不存在!");
+        }
+        BigDecimal retailPrice = productStoreRelaEntity.getRetailPrice();//修改前销售价
+        BigDecimal nowRetailPrice = productStoreRela.getRetailPrice();//用户当前修改销售价
+        if(nowRetailPrice.doubleValue() < retailPrice.doubleValue()){//当前修改销售价格低于修改前价格,则判断查询分销分配金额总数是否低于销售价
+            Map<String, Object> queryDistMap = new HashMap();
+            queryDistMap.put("storeId", productStoreRela.getStoreId());
+            queryDistMap.put("goodsId", productStoreRela.getGoodsId());
+            List<MkDistSellAllocationEntity> allocationEntities = mkDistSellAllocationDao.queryAllocationByMap(queryDistMap);
+            for (MkDistSellAllocationEntity allocationEntity: allocationEntities) {
+                String expendDistLines = allocationEntity.getExpendDistLines();
+                String[] distLiness = expendDistLines.split(",");
+                BigDecimal totalPrice = new BigDecimal(0); //支出分销商额度相加总额
+                for(int i = 0 ; i < distLiness.length; i++){
+                    totalPrice = totalPrice.add(BigDecimal.valueOf(Double.parseDouble(distLiness[i])));
+                }
+                if(allocationEntity.getAllocType().equalsIgnoreCase(Dict.allocType.item_10.getItem())){
+                    if(nowRetailPrice.doubleValue() < totalPrice.doubleValue()){
+                        throw new RRException("修改商品价格失败,当前修改销售价不能低于渠道销售分配规则中子级分销商分配额度总额," +
+                                "子级分销商分配额度规则为【"+ allocationEntity.getExpendDistLines() +
+                                "】,需重新修改渠道销售分配功能的子级分销商分配额度规则信息,详情请看营销平台--》渠道销售分配功能");
+                    }
+                }
+            }
+        }
 
         SysUserEntity user = ShiroUtils.getUserEntity();
 //        GoodsEntity goods = new GoodsEntity();
@@ -361,7 +394,6 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         storeMngChangeEntity.setCreaterSn(user.getUsername());
         storeMngChangeEntity.setModerSn(user.getUsername());
 
-        ProductStoreRelaEntity productStoreRelaEntity = productStoreRelaDao.queryObject(productStoreRela.getId());
         Integer orginalNum = productStoreRelaEntity.getStockNum();//原有库存
         Integer changeNum = productStoreRela.getStockNum();//前端变化库存
         if(changeNum != orginalNum) {

+ 28 - 8
kmall-admin/src/main/java/com/kmall/admin/service/impl/StoreServiceImpl.java

@@ -48,28 +48,37 @@ public class StoreServiceImpl implements StoreService {
 
     @Override
     public int save(StoreEntity store) {
-//        store.setMerchSn(OmsMerchPropertiesBuilder.instance().getMerchSn());
-//        store.setMerchName(OmsMerchPropertiesBuilder.instance().getMerchName());
-        if(StringUtils.isEmpty(store.getMerchSn())){
-            throw new RRException("商户编号不能为空");
-        }else{
+        if(StringUtils.isNotEmpty(store.getMerchSn())){
             MerchEntity merchEntity = merchDao.findByMerchSn(store.getMerchSn());
             if(merchEntity != null){
                 store.setMerchName(merchEntity.getMerchName());
             }else{
                 throw new RRException("商户编号不存在,请先维护用户商户编号信息再来操作");
             }
-        }
-        if(StringUtils.isEmpty(store.getThirdPartyMerchCode())){
-            throw new RRException("第三方商户编号不能为空");
         }else{
+            throw new RRException("商户编号不能为空");
+        }
+        if(StringUtils.isNotEmpty(store.getThirdPartyMerchCode())){
             ThirdMerchantBizEntity thirdMerchantBizEntity = thirdMerchantBizDao.getThirdMerchangByCode(store.getThirdPartyMerchCode());
             if(thirdMerchantBizEntity != null){
                 store.setThirdPartyMerchName(thirdMerchantBizEntity.getThirdPartyMerchName());
             }else{
                 throw new RRException("第三方商户编号【"+store.getThirdPartyMerchCode()+"】不存在,请先维护第三方商户信息再来操作");
             }
+        }else{
+            throw new RRException("第三方商户编号不能为空");
         }
+
+        StoreEntity storeEntity = storeDao.queryObjectByName(store.getStoreName());
+        if(storeEntity != null){
+            throw new RRException("门店名称已存在");
+        }
+//        if(StringUtils.isNotEmpty(String.valueOf(store.getDistId()))) {
+//            StoreEntity storeEntityByDistId = storeDao.queryObjectByDistId(store.getDistId());
+//            if (storeEntityByDistId != null) {
+//                throw new RRException("该分销商已与其他门店建立关系,请重新选择");
+//            }
+//        }
         return storeDao.save(store);
     }
 
@@ -95,6 +104,17 @@ public class StoreServiceImpl implements StoreService {
                 throw new RRException("第三方商户编号【"+store.getThirdPartyMerchCode()+"】不存在,请先维护第三方商户信息再来操作");
             }
         }
+
+        StoreEntity storeEntity = storeDao.queryObjectByName(store.getStoreName());
+        if(storeEntity != null && !storeEntity.getId().equals(store.getId())){
+            throw new RRException("门店名称已存在");
+        }
+//        if(StringUtils.isNotEmpty(String.valueOf(store.getDistId()))) {
+//            StoreEntity storeEntityByDistId = storeDao.queryObjectByDistId(store.getDistId());
+//            if (storeEntityByDistId != null && !storeEntityByDistId.getId().equals(store.getId())) {
+//                throw new RRException("该分销商已与其他门店建立关系,请重新选择");
+//            }
+//        }
         return storeDao.update(store);
     }
 

+ 68 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkCenterMenuServiceImpl.java

@@ -0,0 +1,68 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkCenterMenuDao;
+import com.kmall.admin.entity.mk.MkCenterMenuEntity;
+import com.kmall.admin.service.mk.MkCenterMenuService;
+import com.kmall.admin.utils.ShiroUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 营销中心菜单表Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+@Service("mkCenterMenuService")
+public class MkCenterMenuServiceImpl implements MkCenterMenuService {
+    @Autowired
+    private MkCenterMenuDao mkCenterMenuDao;
+
+    @Override
+    public MkCenterMenuEntity queryObject(Integer id) {
+        return mkCenterMenuDao.queryObject(id);
+    }
+
+    @Override
+    public List<MkCenterMenuEntity> queryList(Map<String, Object> map) {
+        return mkCenterMenuDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkCenterMenuDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkCenterMenuEntity mkCenterMenu) {
+        mkCenterMenu.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkCenterMenu.setCreateTime(new Date());
+        mkCenterMenu.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkCenterMenu.setModTime(new Date());
+        return mkCenterMenuDao.save(mkCenterMenu);
+    }
+
+    @Override
+    public int update(MkCenterMenuEntity mkCenterMenu) {
+        mkCenterMenu.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkCenterMenu.setCreateTime(new Date());
+        mkCenterMenu.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkCenterMenu.setModTime(new Date());
+        return mkCenterMenuDao.update(mkCenterMenu);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        return mkCenterMenuDao.delete(id);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]ids) {
+        return mkCenterMenuDao.deleteBatch(ids);
+    }
+}

+ 75 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistChnlServiceImpl.java

@@ -0,0 +1,75 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkDistChnlDao;
+import com.kmall.admin.entity.mk.MkDistChnlEntity;
+import com.kmall.admin.service.mk.MkDistChnlService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.RRException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 分销渠道Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+@Service("mkDistChnlService")
+public class MkDistChnlServiceImpl implements MkDistChnlService {
+    @Autowired
+    private MkDistChnlDao mkDistChnlDao;
+
+    @Override
+    public MkDistChnlEntity queryObject(Integer distChnlId) {
+        return mkDistChnlDao.queryObject(distChnlId);
+    }
+
+    @Override
+    public List<MkDistChnlEntity> queryList(Map<String, Object> map) {
+        return mkDistChnlDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistChnlDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkDistChnlEntity mkDistChnl) {
+        MkDistChnlEntity mkDistChnlEntity = mkDistChnlDao.queryObjectByDistFlag(mkDistChnl.getDistFlag());
+        if (mkDistChnlEntity != null) {
+            throw new RRException("分销渠道名称已经存在");
+        }
+        mkDistChnl.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistChnl.setCreateTime(new Date());
+        return mkDistChnlDao.save(mkDistChnl);
+    }
+
+    @Override
+    public int update(MkDistChnlEntity mkDistChnl) {
+        MkDistChnlEntity mkDistChnlEntity = mkDistChnlDao.queryObjectByDistFlag(mkDistChnl.getDistFlag());
+        if (mkDistChnlEntity != null && !mkDistChnlEntity.getDistChnlId().equals(mkDistChnl.getDistChnlId())) {
+            throw new RRException("分销渠道名称已经存在");
+        }
+        mkDistChnl.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistChnl.setModTime(new Date());
+
+        return mkDistChnlDao.update(mkDistChnl);
+    }
+
+    @Override
+    public int delete(Integer distChnlId) {
+        return mkDistChnlDao.delete(distChnlId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]distChnlIds) {
+        return mkDistChnlDao.deleteBatch(distChnlIds);
+    }
+}

+ 358 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistHierServiceImpl.java

@@ -0,0 +1,358 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkDistChnlDao;
+import com.kmall.admin.dao.mk.MkDistDao;
+import com.kmall.admin.dao.mk.MkDistHierDao;
+import com.kmall.admin.dao.mk.MkDistSellAllocationDao;
+import com.kmall.admin.entity.mk.*;
+import com.kmall.admin.service.mk.MkDistHierService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.MapUtils;
+import com.kmall.common.utils.RRException;
+import com.kmall.common.utils.StringUtils;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Service("mkDistHierService")
+public class MkDistHierServiceImpl implements MkDistHierService {
+    @Autowired
+    private MkDistHierDao mkDistHierDao;
+    @Autowired
+    private MkDistDao mkDistDao;
+    @Autowired
+    private MkDistChnlDao mkDistChnlDao;
+    @Autowired
+    private MkDistSellAllocationDao mkDistSellAllocationDao;
+
+    @Override
+    public MkDistHierEntity queryObject(Integer distHierId) {
+        MkDistHierEntity entity = mkDistHierDao.queryObject(distHierId);
+        if(entity != null){
+            return entity;
+        }
+        return null;
+    }
+    @Override
+    public Map querySysConfigByKey() {
+        Map configMap = mkDistHierDao.querySysConfigByKey("DIST_HIER_LVL");
+        return configMap;
+    }
+
+    @Override
+    public List<MkDistHierEntity> queryList(Map<String, Object> map) {
+        return mkDistHierDao.queryList(map);
+    }
+
+    @Override
+    public List<MkDistHierEntity> queryListByTree(Map<String, Object> map) {
+        return mkDistHierDao.queryListByTree(map);
+    }
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistHierDao.queryTotal(map);
+    }
+
+    @Override
+    public MkDistHierEntity queryObjectByDistMap(Map<String, Object> map) {
+        List<MkDistHierEntity> mkDistHierEntities = mkDistHierDao.queryObjectByDistIdAndPdistId(map);
+        if(mkDistHierEntities.size() == 0){
+            return null;
+        }else {
+            return mkDistHierEntities.get(0);
+        }
+    }
+    private MkDistHierEntity getOneLvlDistByCurrentDistId(Integer distIdParam, Integer pdistIdParam){
+        MkDistHierEntity oneLvlDistEntity = new MkDistHierEntity();
+        //获取子级层级信息
+        MkDistHierEntity mkDistHierEntity = mkDistHierDao.selectDistHierByDistId(distIdParam);
+        if(mkDistHierEntity == null){
+            mkDistHierEntity = mkDistHierDao.selectDistHierByDistId(pdistIdParam);
+        }
+        if(mkDistHierEntity != null){
+            //子级层级级别
+            Integer hierLvl = Integer.parseInt(mkDistHierEntity.getHierLvl());
+            Integer pdistId = 0;
+            if(mkDistHierEntity != null ){
+                pdistId = mkDistHierEntity.getPdistId();
+            }
+            if(hierLvl == 1){
+                Map<String, Object> lvlMap = new HashMap<>();
+                lvlMap.put("hierLvl", hierLvl);
+                lvlMap.put("pdistId", pdistId);
+                List<MkDistHierEntity> lvlList = mkDistHierDao.queryListByTree(lvlMap);
+                if(lvlList.size() > 0) {
+                    oneLvlDistEntity = lvlList.get(0);
+                }
+            }else{
+                for (int i = 0; i< hierLvl-1; i++){
+                    Map<String, Object> lvlMap = new HashMap<>();
+                    Integer lvl = hierLvl-1-i;
+                    lvlMap.put("hierLvl", lvl);
+                    lvlMap.put("pdistId", pdistId);
+                    List<MkDistHierEntity> lvlList = mkDistHierDao.queryListByTree(lvlMap);
+                    pdistId = lvlList.get(0).getPdistId();
+                    if(lvl == 1){
+                        oneLvlDistEntity = lvlList.get(0);
+                    }
+                }
+            }
+        }
+        return oneLvlDistEntity;
+    }
+    @Override
+    public int save(MkDistHierEntity mkDistHier) {
+        MkDistEntity pdistEntity = mkDistDao.queryObject(mkDistHier.getPdistId());//父级分销商
+        MkDistEntity distEntity = mkDistDao.queryObject(mkDistHier.getDistId());//子级分销商
+
+        MkDistChnlEntity distChnlEntity = mkDistChnlDao.queryObject(mkDistHier.getDistChnlId());
+        if (distChnlEntity == null) {
+            throw new RRException("分销渠道信息不存在");
+        }
+        String pdistName = pdistEntity.getDistName();
+        String distName = distEntity.getDistName();
+        String chnlName = distChnlEntity.getDistFlag();
+
+        //查询当前上下级分销商是否已已存在层级关系
+        Map<String, Object> pdistMap = new HashMap<>();
+        pdistMap.put("pdistId", mkDistHier.getPdistId());
+        pdistMap.put("distId", mkDistHier.getDistId());
+        MkDistHierEntity mkDistHierEntity = queryObjectByDistMap(pdistMap);
+        if (mkDistHierEntity != null) {
+            throw new RRException("上级分销商【"+ pdistName +"】,下级分销商【"+ distName +"】层级关系已存在");
+        }
+        //交叉查询当前上下级分销商,判断是否已已存在上下层级关系
+        Map<String, Object> isChildMap = new HashMap<>();
+        isChildMap.put("pdistId", mkDistHier.getDistId());
+        isChildMap.put("distId", mkDistHier.getPdistId());
+        MkDistHierEntity distHierEntity = queryObjectByDistMap(isChildMap);
+        if (distHierEntity != null) {
+            throw new RRException("上级分销商【"+ pdistName +"】,下级分销商【"+ distName +"】已存在上下层级关系,不能再次交叉添加");
+        }
+        MkDistHierEntity hierByChnlIdAndOneLvl = mkDistHierDao.selectDistHierByChnlIdAndOneLvl(mkDistHier.getDistChnlId());
+        if(mkDistHier.getHierLvl().equalsIgnoreCase("1")){
+            if(hierByChnlIdAndOneLvl != null){
+                throw new RRException("分销渠道【"+ chnlName +"】的一级分销商已存在,请修改层级级别");
+            }
+        }else{
+            if(hierByChnlIdAndOneLvl == null){
+                throw new RRException("分销渠道【"+ chnlName +"】的一级分销商不存在,不能跨一级以上创建,请先创建该分销渠道的一级分销商,层级级别选择1");
+            }
+            if(mkDistHier.getPdistId().equals(mkDistHier.getDistId())){
+                throw new RRException(mkDistHier.getHierLvl() + "级层级级别的上级分销商【"+ pdistName +"】与子级分销商【"+ distName +"】不能选一致的");
+            }
+        }
+        //判断分销渠道与上级分销商的创建关系
+        MkDistHierEntity oneLvlEntity = getOneLvlDistByCurrentDistId(mkDistHier.getDistId(), mkDistHier.getPdistId());
+        if(oneLvlEntity != null){
+            Integer distChnlId = oneLvlEntity.getDistChnlId();
+            if(distChnlId != null && !mkDistHier.getDistChnlId().equals(distChnlId)){
+                MkDistChnlEntity chnlByOneLvlEntity = mkDistChnlDao.queryObject(distChnlId);
+                throw new RRException("当前所选的分销渠道与上级分销商【" + pdistName + "】不存在层级关系,请选择该上级分销商的分销渠道【" +
+                        chnlByOneLvlEntity.getDistFlag() + "】");
+            }
+        }
+        //查询当前子级分销商是否已创建层级关系
+        MkDistHierEntity checkChildDistEntity = mkDistHierDao.selectDistHierByDistId(mkDistHier.getDistId());
+        if (checkChildDistEntity != null){
+            throw new RRException("当前选择的子级分销商【"+ distName +"】已创建层级关系,请重新选择子级分销商");
+        }
+        //判断分销商的层级是否已存在
+        Map hierMap = new HashMap();
+        hierMap.put("pdistId",mkDistHier.getPdistId());
+        hierMap.put("distChnlId",mkDistHier.getDistChnlId());
+        hierMap.put("hierLvl", mkDistHier.getHierLvl());
+        MkDistHierEntity hierEntity = mkDistHierDao.queryObjectByHierMap(hierMap);
+        if(hierEntity != null){
+            throw new RRException("当前选择的子级分销商【" + distName + "】的层级级别【"+ mkDistHier.getHierLvl() +"】已存在");
+        }
+
+        /*//判断分销渠道与上级分销商的创建关系
+        List<MkDistHierEntity> queryByPdistAndChnlList = mkDistHierDao.queryObjectByPdistIdAndChnlId(mkDistHier.getPdistId(), mkDistHier.getDistChnlId());
+        if(queryByPdistAndChnlList.size() == 0) {
+            List<MkDistHierEntity> hierByChnlList = mkDistHierDao.queryObjectByPdistIdAndChnlId(null, mkDistHier.getDistChnlId());
+            if (hierByChnlList != null && hierByChnlList.size() > 0) {
+                throw new RRException("分销渠道【" + chnlName + "】已与上级分销商【" + hierByChnlList.get(0).getDistName() + "】创建关系,不能再与其他分销商存在关系");
+            }
+            List<MkDistHierEntity> hierByPdistList = mkDistHierDao.queryObjectByPdistIdAndChnlId(mkDistHier.getPdistId(), null);
+            if (hierByPdistList.size() > 0 && hierByPdistList != null) {
+                throw new RRException("分销渠道【" + hierByPdistList.get(0).getDistFlag() + "】已与上级分销商【" + pdistName + "】创建关系,不能再与其他分销渠道存在关系");
+            }
+        }*/
+
+        //判断分销层级名称是否存在
+        MkDistHierEntity mkDistHierEntityByName = mkDistHierDao.queryObjectByName(mkDistHier.getDistHierName());
+        if (mkDistHierEntityByName != null) {
+            throw new RRException("分销层级名称已存在");
+        }
+        //判断层级不能超过最高限度
+        Map configMap = mkDistHierDao.querySysConfigByKey("DIST_HIER_LVL");
+        String value = MapUtils.getString("value", configMap);
+        if(StringUtils.isNotEmpty(value)) {
+            //查询上级分销商已存在的层级信息
+            MkDistHierEntity distByPdistIdEntity = mkDistHierDao.selectDistHierByDistId(mkDistHier.getPdistId());
+            if(distByPdistIdEntity != null){
+                Integer distHierLvl = Integer.parseInt(distByPdistIdEntity.getHierLvl());
+                if(distHierLvl == Integer.parseInt(value)){
+                    throw new RRException("该上级分销商【"+ pdistName +"】的层级级别为【"+ distHierLvl +"】级,不能再创建层级为【"+ mkDistHier.getHierLvl() +"】的信息");
+                }
+                if(Integer.parseInt(mkDistHier.getHierLvl()) != distHierLvl+1){
+                    throw new RRException("该上级分销商【"+ pdistName +"】的层级级别为【"+ distHierLvl +"】级,请选择层级级别为【"+ (distHierLvl+1) +"】,不能跨一级以上创建");
+                }
+            }
+        }
+//        mkDistHier.setHierLvl(String.valueOf(distHierLvl));
+        mkDistHier.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistHier.setCreateTime(new Date());
+        mkDistHier.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistHier.setModTime(new Date());
+        return mkDistHierDao.save(mkDistHier);
+    }
+
+    @Override
+    public int update(MkDistHierEntity mkDistHier) {
+        MkDistEntity pdistEntity = mkDistDao.queryObject(mkDistHier.getPdistId());//父级分销商
+        MkDistEntity distEntity = mkDistDao.queryObject(mkDistHier.getDistId());//子级分销商
+        MkDistChnlEntity distChnlEntity = mkDistChnlDao.queryObject(mkDistHier.getDistChnlId());
+        if (distChnlEntity == null) {
+            throw new RRException("分销渠道信息不存在");
+        }
+        String pdistName = pdistEntity.getDistName();
+        String distName = distEntity.getDistName();
+        String chnlName = distChnlEntity.getDistFlag();
+
+        //查询当前上下级分销商是否已存在层级关系
+        Map<String, Object> pdistMap = new HashMap<>();
+        pdistMap.put("pdistId", mkDistHier.getPdistId());
+        pdistMap.put("distId", mkDistHier.getDistId());
+        MkDistHierEntity mkDistHierEntity = queryObjectByDistMap(pdistMap);
+        if (mkDistHierEntity != null && !mkDistHierEntity.getDistHierId().equals(mkDistHier.getDistHierId())) {
+            throw new RRException("上级分销商【"+ pdistName +"】,下级分销商【"+ distName +"】层级关系已存在");
+        }
+        //交叉查询当前上下级分销商,判断是否已已存在上下层级关系
+        Map<String, Object> isChildMap = new HashMap<>();
+        isChildMap.put("pdistId", mkDistHier.getDistId());
+        isChildMap.put("distId", mkDistHier.getPdistId());
+        MkDistHierEntity distHierEntity = queryObjectByDistMap(isChildMap);
+        if (distHierEntity != null && !distHierEntity.getDistHierId().equals(mkDistHier.getDistHierId())) {
+            throw new RRException("上级分销商【"+ pdistName +"】,下级分销商【"+ distName +"】已存在上下层级关系,不能再次交叉添加");
+        }
+
+        MkDistHierEntity hierByChnlIdAndOneLvl = mkDistHierDao.selectDistHierByChnlIdAndOneLvl(mkDistHier.getDistChnlId());
+        if(!mkDistHier.getHierLvl().equalsIgnoreCase("1")){
+            if(hierByChnlIdAndOneLvl == null){
+                throw new RRException("分销渠道【"+ chnlName +"】的一级分销商不存在,不能跨一级以上创建,请先创建该分销渠道的一级分销商,层级级别选择1");
+            }
+            if(mkDistHier.getPdistId().equals(mkDistHier.getDistId())){
+                throw new RRException(mkDistHier.getHierLvl() + "级层级级别的上级分销商【"+ pdistName +"】与子级分销商【"+ distName +"】不能选一致的");
+            }
+        }else{
+            if(hierByChnlIdAndOneLvl != null){
+                throw new RRException("分销渠道【"+ chnlName +"】的一级分销商已存在,请修改层级级别");
+            }
+        }
+        //判断分销渠道与上级分销商的创建关系
+        MkDistHierEntity oneLvlEntity = getOneLvlDistByCurrentDistId(mkDistHier.getDistId(), mkDistHier.getPdistId());
+        if(oneLvlEntity != null){
+            Integer distChnlId = oneLvlEntity.getDistChnlId();
+            if(! mkDistHier.getDistChnlId().equals(distChnlId)){
+                MkDistChnlEntity chnlByOneLvlEntity = mkDistChnlDao.queryObject(distChnlId);
+                throw new RRException("当前所选的分销渠道与上级分销商【" + pdistName + "】不存在层级关系,请选择该上级分销商的分销渠道【" +
+                        chnlByOneLvlEntity.getDistFlag() + "】");
+            }
+        }
+        //查询当前子级分销商是否已创建层级关系
+        MkDistHierEntity checkChildDistEntity = mkDistHierDao.selectDistHierByDistId(mkDistHier.getDistId());
+        if (checkChildDistEntity != null && !checkChildDistEntity.getDistHierId().equals(mkDistHier.getDistHierId())){
+            throw new RRException("当前选择的子级分销商【"+ distName +"】已创建层级关系,请重新选择");
+        }
+
+        //判断该上级分销商的层级是否已存在
+        Map hierMap = new HashMap();
+        hierMap.put("pdistId",mkDistHier.getPdistId());
+        hierMap.put("distId",mkDistHier.getDistId());
+        hierMap.put("distChnlId",mkDistHier.getDistChnlId());
+        hierMap.put("hierLvl", mkDistHier.getHierLvl());
+        MkDistHierEntity hierEntity = mkDistHierDao.queryObjectByHierMap(hierMap);
+        if(hierEntity != null && !hierEntity.getDistHierId().equals(mkDistHier.getDistHierId())){
+            throw new RRException("当前选择的子级分销商【" + distName + "】的层级级别【"+ mkDistHier.getHierLvl() +"】已存在");
+        }
+        /*//判断分销渠道与上级分销商的创建关系
+        List<MkDistHierEntity> queryByPdistAndChnlList = mkDistHierDao.queryObjectByPdistIdAndChnlId(mkDistHier.getPdistId(), mkDistHier.getDistChnlId());
+        if(queryByPdistAndChnlList.size() == 0) {
+            List<MkDistHierEntity> hierByChnlList = mkDistHierDao.queryObjectByPdistIdAndChnlId(null, mkDistHier.getDistChnlId());
+            if (hierByChnlList != null && hierByChnlList.size() > 0) {
+                throw new RRException("分销渠道【" + chnlName + "】已与上级分销商【" + hierByChnlList.get(0).getDistName() + "】创建关系,不能再与其他分销商存在关系");
+            }
+            List<MkDistHierEntity> hierByPdistList = mkDistHierDao.queryObjectByPdistIdAndChnlId(mkDistHier.getPdistId(), null);
+            if (hierByPdistList != null && hierByPdistList.size() > 0) {
+                throw new RRException("分销渠道【" + hierByPdistList.get(0).getDistFlag() + "】已与上级分销商【" + pdistName + "】创建关系,不能再与其他分销渠道存在关系");
+            }
+        }*/
+        //判断分销层级名称是否存在
+        MkDistHierEntity mkDistHierEntityByName = mkDistHierDao.queryObjectByName(mkDistHier.getDistHierName());
+        if (mkDistHierEntityByName != null && !mkDistHierEntityByName.getDistHierId().equals(mkDistHier.getDistHierId())) {
+            throw new RRException("分销层级名称已存在");
+        }
+
+        //判断层级不能超过最高限度
+        Map configMap = mkDistHierDao.querySysConfigByKey("DIST_HIER_LVL");
+        String value = MapUtils.getString("value", configMap);
+        if(StringUtils.isNotEmpty(value)) {
+            //查询上级分销商已存在的层级信息
+            MkDistHierEntity distByPdistIdEntity = mkDistHierDao.selectDistHierByDistId(mkDistHier.getPdistId());
+            if(distByPdistIdEntity != null){
+                Integer distHierLvl = Integer.parseInt(distByPdistIdEntity.getHierLvl());
+                if(distHierLvl == Integer.parseInt(value)){
+                    throw new RRException("该上级分销商【"+ pdistName +"】的层级级别为【"+ distHierLvl +"】级,不能再创建层级为【"+ mkDistHier.getHierLvl() +"】的信息");
+                }
+                if(Integer.parseInt(mkDistHier.getHierLvl()) != distHierLvl+1){
+                    throw new RRException("该上级分销商【"+ pdistName +"】的层级级别为【"+ distHierLvl +"】级,请选择层级级别为【"+ (distHierLvl+1) +"】,不能跨一级以上创建");
+                }
+            }
+        }
+
+        mkDistHier.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistHier.setModTime(new Date());
+        return mkDistHierDao.update(mkDistHier);
+    }
+
+    @Override
+    public int delete(Integer distHierId) {
+        MkDistHierEntity hierEntity = mkDistHierDao.queryObject(distHierId);
+        Map<String, Object> allocationMap = new HashMap<>();
+        allocationMap.put("distChnlId", hierEntity.getDistChnlId());
+        allocationMap.put("distId", hierEntity.getPdistId());
+        List<MkDistSellAllocationEntity> allocationEntityList =  mkDistSellAllocationDao.queryAllocationByMap(allocationMap);
+        if(allocationEntityList != null && allocationEntityList.size() > 0){
+            throw new RRException("当前删除的分销层级关系已与渠道销售分配信息关联,请勿删除");
+        }
+        return mkDistHierDao.delete(distHierId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[] distHierIds) {
+        for(int j=0;j<distHierIds.length;j++) {
+            MkDistHierEntity hierEntity = mkDistHierDao.queryObject(distHierIds[j]);
+            //查询该分销层级关系是否已与渠道销售分配信息关联
+            Map<String, Object> allocationMap = new HashMap<>();
+            allocationMap.put("distChnlId", hierEntity.getDistChnlId());
+            allocationMap.put("distId", hierEntity.getDistId());
+            List<MkDistSellAllocationEntity> allocationEntityList =  mkDistSellAllocationDao.queryAllocationByMap(allocationMap);
+            if(allocationEntityList != null && allocationEntityList.size() > 0){
+                throw new RRException("当前删除的分销层级关系已与渠道销售分配信息关联,请勿删除");
+            }
+        }
+        return mkDistHierDao.deleteBatch(distHierIds);
+    }
+}

+ 58 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellAllocationHistoryServiceImpl.java

@@ -0,0 +1,58 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkDistSellAllocationHistoryDao;
+import com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity;
+import com.kmall.admin.service.mk.MkDistSellAllocationHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 13:55:16
+ */
+@Service("mkDistSellAllocationHistoryService")
+public class MkDistSellAllocationHistoryServiceImpl implements MkDistSellAllocationHistoryService {
+    @Autowired
+    private MkDistSellAllocationHistoryDao mkDistSellAllocationHistoryDao;
+
+    @Override
+    public MkDistSellAllocationHistoryEntity queryObject(Integer sellAllocHistoryId) {
+        return mkDistSellAllocationHistoryDao.queryObject(sellAllocHistoryId);
+    }
+
+    @Override
+    public List<MkDistSellAllocationHistoryEntity> queryList(Map<String, Object> map) {
+        return mkDistSellAllocationHistoryDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistSellAllocationHistoryDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkDistSellAllocationHistoryEntity mkDistSellAllocationHistory) {
+        return mkDistSellAllocationHistoryDao.save(mkDistSellAllocationHistory);
+    }
+
+    @Override
+    public int update(MkDistSellAllocationHistoryEntity mkDistSellAllocationHistory) {
+        return mkDistSellAllocationHistoryDao.update(mkDistSellAllocationHistory);
+    }
+
+    @Override
+    public int delete(Integer sellAllocHistoryId) {
+        return mkDistSellAllocationHistoryDao.delete(sellAllocHistoryId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]sellAllocHistoryIds) {
+        return mkDistSellAllocationHistoryDao.deleteBatch(sellAllocHistoryIds);
+    }
+}

+ 304 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellAllocationServiceImpl.java

@@ -0,0 +1,304 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.GoodsDao;
+import com.kmall.admin.dao.ProductStoreRelaDao;
+import com.kmall.admin.dao.StoreDao;
+import com.kmall.admin.dao.mk.*;
+import com.kmall.admin.dto.ExpendDistDto;
+import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.entity.ProductStoreRelaEntity;
+import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.mk.*;
+import com.kmall.admin.service.mk.MkDistSellAllocationService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.RRException;
+import com.kmall.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Service("mkDistSellAllocationService")
+public class MkDistSellAllocationServiceImpl implements MkDistSellAllocationService {
+    @Autowired
+    private MkDistSellAllocationDao mkDistSellAllocationDao;
+    @Autowired
+    private MkDistHierDao mkDistHierDao;
+    @Autowired
+    private MkDistChnlDao mkDistChnlDao;
+    @Autowired
+    private MkDistDao mkDistDao;
+
+    @Autowired
+    private StoreDao storeDao;
+    @Autowired
+    private GoodsDao goodsDao;
+    @Autowired
+    private ProductStoreRelaDao productStoreRelaDao;
+    @Autowired
+    private MkDistSellAllocationHistoryDao mkDistSellAllocationHistoryDao;
+
+    @Override
+    public MkDistSellAllocationEntity queryObject(Integer sellAllocId) {
+        return mkDistSellAllocationDao.queryObject(sellAllocId);
+    }
+    @Override
+    public List<MkDistSellAllocationEntity> queryAllocationByMap(Map<String, Object> map) {
+        return mkDistSellAllocationDao.queryAllocationByMap(map);
+    }
+
+    @Override
+    public List<MkDistSellAllocationEntity> queryList(Map<String, Object> map) {
+        return mkDistSellAllocationDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistSellAllocationDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkDistSellAllocationEntity mkDistSellAllocation) {
+        /*List<Integer> expendDistIdList = mkDistSellAllocation.getExpendDistIdList();
+        if(expendDistIdList == null || expendDistIdList.size() == 0) {
+            throw new RRException("支出分销商不能为空");
+        }
+        String expendDistLines = mkDistSellAllocation.getExpendDistLines();
+        String[] distLiness = expendDistLines.split(",");
+        if(expendDistList.size() != distLiness.length){
+            throw new RRException("支出分销商额度对应个数错误,个数为"+distLiness.length+",个数需与支出分销商一致,且对应排序!示例:比例1,比例2,比例3...");
+        }*/
+        List<ExpendDistDto> expendDistList = mkDistSellAllocation.getExpendDistDtoList();
+        if(expendDistList == null || expendDistList.size() == 0) {
+            throw new RRException("分销额度分配信息不能为空");
+        }
+        StoreEntity storeEntity = storeDao.queryObject(mkDistSellAllocation.getStoreId());
+        if(storeEntity == null){
+            throw new RRException("门店id不存在");
+        }
+        GoodsEntity goodsEntity = goodsDao.queryObject(mkDistSellAllocation.getGoodsId());
+        if(goodsEntity == null){
+            throw new RRException("商品id不存在");
+        }
+        MkDistEntity mkDistEntity = mkDistDao.queryObject(mkDistSellAllocation.getDistId());
+        if(mkDistEntity == null){
+            throw new RRException("商品所属分销商id不存在");
+        }
+        MkDistHierEntity mkDistHierEntities =  mkDistHierDao.selectDistHierByDistId(mkDistSellAllocation.getDistId());
+        if(mkDistHierEntities == null){
+            throw new RRException("当前所选的商户所属分销商【"+ mkDistEntity.getDistName() +"】没有层级关系信息,请重新选择");
+        }
+        MkDistChnlEntity chnlEntity = mkDistChnlDao.queryObject(mkDistHierEntities.getDistChnlId());
+        if(chnlEntity == null){
+            throw new RRException("分销渠道id不存在");
+        }
+        Map<String, Object> allocationMap = new HashMap<>();
+        allocationMap.put("distId", mkDistSellAllocation.getDistId());
+        allocationMap.put("distChnlId", mkDistSellAllocation.getDistChnlId());
+        allocationMap.put("goodsId", mkDistSellAllocation.getGoodsId());
+        allocationMap.put("storeId", mkDistSellAllocation.getStoreId());
+        List<MkDistSellAllocationEntity> allocationEntityList =  mkDistSellAllocationDao.queryAllocationByMap(allocationMap);
+        if(allocationEntityList.size() > 0){
+            throw new RRException("门店【"+storeEntity.getStoreName()+"】商品【"+ goodsEntity.getName() +
+                    "】,在当前所选的层级关系下已存在渠道销售分配信息!层级关系:分销渠道【"+ chnlEntity.getDistFlag() +"】商户所属分销商【"+ mkDistEntity.getDistName() +"】");
+        }
+        StringBuffer expendDistLines = new StringBuffer();
+        StringBuffer expendDistIds = new StringBuffer();
+        for (ExpendDistDto distDto: expendDistList) {
+            expendDistLines = expendDistLines.append(distDto.getExpendDistLine() + ",");
+            expendDistIds = expendDistIds.append(distDto.getExpendDistId() + ",");
+        }
+        if(StringUtils.isNotEmpty(expendDistLines.toString())){
+            BigDecimal price = new BigDecimal(0); //支出分销商额度相加总额
+            BigDecimal retailPrice = new BigDecimal(0);//商品销售价
+            String expendLines = expendDistLines.substring(0,expendDistLines.length() - 1);
+            if(StringUtils.isNotEmpty(expendLines)){
+                String[] distLiness = expendLines.split(",");
+                ProductStoreRelaEntity relaEntity = productStoreRelaDao.queryByGoodsIdAndStoreId(Long.valueOf(mkDistSellAllocation.getStoreId()),
+                        Long.valueOf(mkDistSellAllocation.getGoodsId()));
+                if(relaEntity != null){
+                    retailPrice = relaEntity.getRetailPrice();
+                }
+                for(int i = 0;i < distLiness.length; i++){
+                    price = price.add(BigDecimal.valueOf(Double.parseDouble(distLiness[i])));
+                }
+                String allocType = mkDistSellAllocation.getAllocType();
+                if(allocType.equalsIgnoreCase(Dict.allocType.item_00.getItem())){
+                    if(price.doubleValue() > 1){
+                        throw new RRException("分配方式为【"+ Dict.allocType.item_00.getItemName() +"】的支出分销商额度相加总额【"+ price +"】不能超过1");
+                    }
+                }
+                if(allocType.equalsIgnoreCase(Dict.allocType.item_10.getItem())){
+                    if(price.doubleValue() > retailPrice.doubleValue()){
+                        throw new RRException("分配方式为【"+ Dict.allocType.item_10.getItemName() +"】的支出分销商额度相加总额【"+
+                                price +"】不能超过商品销售价,商品销售价为【"+ retailPrice +"】");
+                    }
+                }
+                mkDistSellAllocation.setExpendDistLines(expendLines);
+            }
+        }
+        if(StringUtils.isNotEmpty(expendDistIds.toString())) {
+            mkDistSellAllocation.setExpendDistIds(expendDistIds.substring(0, expendDistIds.length() - 1).toString());
+        }
+        mkDistSellAllocation.setDistChnlId(mkDistHierEntities.getDistChnlId());
+        mkDistSellAllocation.setDistFlag(chnlEntity.getDistFlag());
+        mkDistSellAllocation.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistSellAllocation.setCreateTime(new Date());
+        mkDistSellAllocation.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistSellAllocation.setModTime(new Date());
+
+        MkDistSellAllocationHistoryEntity entity = saveDistSellAllocationHistory(mkDistSellAllocation);
+        if(entity != null) {
+            mkDistSellAllocation.setSellAllocHistoryId(entity.getSellAllocHistoryId());
+            return mkDistSellAllocationDao.save(mkDistSellAllocation);
+        }else{
+            return 0;
+        }
+    }
+
+    private MkDistSellAllocationHistoryEntity saveDistSellAllocationHistory(MkDistSellAllocationEntity mkDistSellAllocationEntity){
+        MkDistSellAllocationHistoryEntity historyEntity = new MkDistSellAllocationHistoryEntity();
+        historyEntity.setAllocType(mkDistSellAllocationEntity.getAllocType());
+        historyEntity.setCreaterSn(mkDistSellAllocationEntity.getCreaterSn());
+        historyEntity.setCreateTime(mkDistSellAllocationEntity.getCreateTime());
+        historyEntity.setDistChnlId(mkDistSellAllocationEntity.getDistChnlId());
+        historyEntity.setDistFlag(mkDistSellAllocationEntity.getDistFlag());
+        historyEntity.setDistId(mkDistSellAllocationEntity.getDistId());
+        historyEntity.setExpendDistIds(mkDistSellAllocationEntity.getExpendDistIds());
+        historyEntity.setExpendDistLines(mkDistSellAllocationEntity.getExpendDistLines());
+        historyEntity.setGoodsId(mkDistSellAllocationEntity.getGoodsId());
+        historyEntity.setStoreId(mkDistSellAllocationEntity.getStoreId());
+        historyEntity.setSupplierId(mkDistSellAllocationEntity.getSupplierId());
+        historyEntity.setIsValid(mkDistSellAllocationEntity.getIsValid());
+        historyEntity.setThirdMerchSn(mkDistSellAllocationEntity.getThirdMerchSn());
+        historyEntity.setModerSn(mkDistSellAllocationEntity.getModerSn());
+        historyEntity.setModTime(mkDistSellAllocationEntity.getModTime());
+        historyEntity.setTstm(mkDistSellAllocationEntity.getTstm());
+        if(mkDistSellAllocationHistoryDao.save(historyEntity) > 0) {
+            return historyEntity;
+        }else{
+            return null;
+        }
+    }
+
+    @Override
+    public int update(MkDistSellAllocationEntity mkDistSellAllocation) {
+        /*List<Integer> expendDistIdList = mkDistSellAllocation.getExpendDistIdList();
+        if(expendDistIdList == null || expendDistIdList.size() == 0) {
+            throw new RRException("支出分销商不能为空");
+        }
+        String expendDistLines = mkDistSellAllocation.getExpendDistLines();
+        String[] distLiness = expendDistLines.split(",");
+        if(expendDistIdList.size() != distLiness.length){
+            throw new RRException("支出分销商额度对应个数错误,个数为"+distLiness.length+",个数需与支出分销商一致,且对应排序!示例:比例1,比例2,比例3...");
+        }*/
+
+        List<ExpendDistDto> expendDistList = mkDistSellAllocation.getExpendDistDtoList();
+        if(expendDistList == null || expendDistList.size() == 0) {
+            throw new RRException("分销额度分配信息不能为空");
+        }
+        StoreEntity storeEntity = storeDao.queryObject(mkDistSellAllocation.getStoreId());
+        if(storeEntity == null){
+            throw new RRException("门店id不存在");
+        }
+        GoodsEntity goodsEntity = goodsDao.queryObject(mkDistSellAllocation.getGoodsId());
+        if(goodsEntity == null){
+            throw new RRException("商品id不存在");
+        }
+        MkDistEntity mkDistEntity = mkDistDao.queryObject(mkDistSellAllocation.getDistId());
+        if(mkDistEntity == null){
+            throw new RRException("商品所属分销商id不存在");
+        }
+        MkDistHierEntity mkDistHierEntities =  mkDistHierDao.selectDistHierByDistId(mkDistSellAllocation.getDistId());
+        if(mkDistHierEntities == null){
+            throw new RRException("当前所选的商户所属分销商【"+ mkDistEntity.getDistName() +"】没有层级关系信息,请重新选择");
+        }
+        MkDistChnlEntity chnlEntity = mkDistChnlDao.queryObject(mkDistHierEntities.getDistChnlId());
+        if(chnlEntity == null){
+            throw new RRException("分销渠道id不存在");
+        }
+
+        Map<String, Object> allocationMap = new HashMap<>();
+        allocationMap.put("distId", mkDistSellAllocation.getDistId());
+        allocationMap.put("distChnlId", mkDistSellAllocation.getDistChnlId());
+        allocationMap.put("goodsId", mkDistSellAllocation.getGoodsId());
+        allocationMap.put("storeId", mkDistSellAllocation.getStoreId());
+        allocationMap.put("sellAllocId",mkDistSellAllocation.getSellAllocId());
+        List<MkDistSellAllocationEntity> allocationEntityList =  mkDistSellAllocationDao.queryAllocationByMap(allocationMap);
+        if(allocationEntityList.size() > 0){
+            throw new RRException("门店【"+storeEntity.getStoreName()+"】商品【"+ goodsEntity.getName() +
+                    "】,在当前所选的层级关系下已存在渠道销售分配信息!层级关系:分销渠道【"+ chnlEntity.getDistFlag() +"】商户所属分销商【"+ mkDistEntity.getDistName() +"】");
+        }
+        StringBuffer expendDistLines = new StringBuffer();
+        StringBuffer expendDistIds = new StringBuffer();
+        for (ExpendDistDto distDto: expendDistList) {
+            expendDistLines = expendDistLines.append(distDto.getExpendDistLine() + ",");
+            expendDistIds = expendDistIds.append(distDto.getExpendDistId() + ",");
+        }
+        if(StringUtils.isNotEmpty(expendDistLines.toString())){
+            BigDecimal price = new BigDecimal(0); //支出分销商额度相加总额
+            BigDecimal retailPrice = new BigDecimal(0);//商品销售价
+            String expendLines = expendDistLines.substring(0,expendDistLines.length() - 1);
+            if(StringUtils.isNotEmpty(expendLines)){
+                String[] distLiness = expendLines.split(",");
+                ProductStoreRelaEntity relaEntity = productStoreRelaDao.queryByGoodsIdAndStoreId(Long.valueOf(mkDistSellAllocation.getStoreId()),
+                        Long.valueOf(mkDistSellAllocation.getGoodsId()));
+                if(relaEntity != null){
+                    retailPrice = relaEntity.getRetailPrice();
+                }
+                for(int i = 0;i < distLiness.length; i++){
+                    price = price.add(BigDecimal.valueOf(Double.parseDouble(distLiness[i])));
+                }
+                String allocType = mkDistSellAllocation.getAllocType();
+                if(allocType.equalsIgnoreCase(Dict.allocType.item_10.getItem())){
+                    if(price.doubleValue() > retailPrice.doubleValue()){
+                        throw new RRException("分配方式为【"+ Dict.allocType.item_10.getItemName() +"】的支出分销商额度相加总额【"+
+                                price +"】不能超过商品销售价,商品销售价为【"+ retailPrice +"】");
+                    }
+                }
+                if(allocType.equalsIgnoreCase(Dict.allocType.item_00.getItem())){
+                    if(price.doubleValue() > 1){
+                        throw new RRException("分配方式为【"+ Dict.allocType.item_00.getItemName() +"】的支出分销商额度相加总额【"+ price +"】不能超过1");
+                    }
+                }
+                mkDistSellAllocation.setExpendDistLines(expendLines);
+            }
+        }
+        if(StringUtils.isNotEmpty(expendDistIds.toString())) {
+            mkDistSellAllocation.setExpendDistIds(expendDistIds.substring(0, expendDistIds.length() - 1).toString());
+        }
+        mkDistSellAllocation.setDistChnlId(mkDistHierEntities.getDistChnlId());
+        mkDistSellAllocation.setDistFlag(chnlEntity.getDistFlag());
+        mkDistSellAllocation.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistSellAllocation.setModTime(new Date());
+        MkDistSellAllocationHistoryEntity entity = saveDistSellAllocationHistory(mkDistSellAllocation);
+        if(entity != null) {
+            mkDistSellAllocation.setSellAllocHistoryId(entity.getSellAllocHistoryId());
+            return mkDistSellAllocationDao.update(mkDistSellAllocation);
+        }else{
+            return 0;
+        }
+    }
+
+    @Override
+    public int delete(Integer sellAllocId) {
+        return mkDistSellAllocationDao.delete(sellAllocId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]sellAllocIds) {
+        return mkDistSellAllocationDao.deleteBatch(sellAllocIds);
+    }
+}

+ 69 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistSellStatisServiceImpl.java

@@ -0,0 +1,69 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkDistSellStatisDao;
+import com.kmall.admin.entity.mk.MkDistSellStatisEntity;
+import com.kmall.admin.service.mk.MkDistSellStatisService;
+import com.kmall.admin.utils.ShiroUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购买商品生成销售分配记录统计,渠道销售统计Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+@Service("mkDistSellStatisService")
+public class MkDistSellStatisServiceImpl implements MkDistSellStatisService {
+    @Autowired
+    private MkDistSellStatisDao mkDistSellStatisDao;
+
+    @Override
+    public MkDistSellStatisEntity queryObject(Integer id) {
+        return mkDistSellStatisDao.queryObject(id);
+    }
+
+    @Override
+    public List<MkDistSellStatisEntity> queryList(Map<String, Object> map) {
+        return mkDistSellStatisDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistSellStatisDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkDistSellStatisEntity mkDistSellStatis) {
+        mkDistSellStatis.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistSellStatis.setCreateTime(new Date());
+        return mkDistSellStatisDao.save(mkDistSellStatis);
+    }
+
+    @Override
+    public int update(MkDistSellStatisEntity mkDistSellStatis) {
+        mkDistSellStatis.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDistSellStatis.setModTime(new Date());
+        return mkDistSellStatisDao.update(mkDistSellStatis);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        return mkDistSellStatisDao.delete(id);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]ids) {
+        return mkDistSellStatisDao.deleteBatch(ids);
+    }
+
+    @Override
+    public List<MkDistSellStatisEntity> queryStatisExportList(Map<String, Object> map) {
+        return mkDistSellStatisDao.queryStatisExportList(map);
+    }
+}

+ 92 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkDistServiceImpl.java

@@ -0,0 +1,92 @@
+package com.kmall.admin.service.impl.mk;
+
+import com.kmall.admin.dao.mk.MkDistDao;
+import com.kmall.admin.entity.mk.MkDistEntity;
+import com.kmall.admin.service.mk.MkDistService;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.RRException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销商,distributorService实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+@Service("mkDistService")
+public class MkDistServiceImpl implements MkDistService {
+    @Autowired
+    private MkDistDao mkDistDao;
+
+    @Override
+    public MkDistEntity queryObject(Integer distId) {
+        return mkDistDao.queryObject(distId);
+    }
+
+    @Override
+    public List<MkDistEntity> queryList(Map<String, Object> map) {
+        return mkDistDao.queryList(map);
+    }
+
+    @Override
+    public List<MkDistEntity> queryAllByHier(Map<String, Object> map) {
+        return mkDistDao.queryAllByHier(map);
+    }
+
+
+    @Override
+    public MkDistEntity queryDistByGoodsId(Map<String, Object> map){
+        return mkDistDao.queryDistByGoodsId(map);
+    }
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return mkDistDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(MkDistEntity mkDist) {
+        MkDistEntity mkDistEntity = mkDistDao.queryObjectByDistName(mkDist.getDistName());
+        if (mkDistEntity != null) {
+            throw new RRException("分销商名称已经存在");
+        }
+        MkDistEntity distEntity = mkDistDao.queryDistByStoreId(mkDist.getStoreId());
+        if (distEntity != null) {
+            throw new RRException("该门店已与其他分销商已创建关系,请重新选择门店");
+        }
+
+        mkDist.setCreaterSn(ShiroUtils.getUserEntity().getUsername());
+        mkDist.setCreateTime(new Date());
+        return mkDistDao.save(mkDist);
+    }
+
+    @Override
+    public int update(MkDistEntity mkDist) {
+        MkDistEntity mkDistEntity = mkDistDao.queryObjectByDistName(mkDist.getDistName());
+        if (mkDistEntity != null && !mkDistEntity.getDistId().equals(mkDist.getDistId())) {
+            throw new RRException("分销商名称已经存在");
+        }
+        MkDistEntity distEntity = mkDistDao.queryDistByStoreId(mkDist.getStoreId());
+        if (distEntity != null && !distEntity.getDistId().equals(mkDist.getDistId())) {
+            throw new RRException("该门店已与其他分销商已创建关系,请重新选择门店");
+        }
+        mkDist.setModerSn(ShiroUtils.getUserEntity().getUsername());
+        mkDist.setModTime(new Date());
+        return mkDistDao.update(mkDist);
+    }
+
+    @Override
+    public int delete(Integer distId) {
+        return mkDistDao.delete(distId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]distIds) {
+        return mkDistDao.deleteBatch(distIds);
+    }
+}

+ 72 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkCenterMenuService.java

@@ -0,0 +1,72 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkCenterMenuEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 营销中心菜单表Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+public interface MkCenterMenuService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    MkCenterMenuEntity queryObject(Integer id);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkCenterMenuEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkCenterMenu 实体
+     * @return 保存条数
+     */
+    int save(MkCenterMenuEntity mkCenterMenu);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkCenterMenu 实体
+     * @return 更新条数
+     */
+    int update(MkCenterMenuEntity mkCenterMenu);
+
+    /**
+     * 根据主键删除
+     *
+     * @param id
+     * @return 删除条数
+     */
+    int delete(Integer id);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param ids
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] ids);
+}

+ 72 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistChnlService.java

@@ -0,0 +1,72 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistChnlEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销渠道Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public interface MkDistChnlService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param distChnlId 主键
+     * @return 实体
+     */
+    MkDistChnlEntity queryObject(Integer distChnlId);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistChnlEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDistChnl 实体
+     * @return 保存条数
+     */
+    int save(MkDistChnlEntity mkDistChnl);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDistChnl 实体
+     * @return 更新条数
+     */
+    int update(MkDistChnlEntity mkDistChnl);
+
+    /**
+     * 根据主键删除
+     *
+     * @param distChnlId
+     * @return 删除条数
+     */
+    int delete(Integer distChnlId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param distChnlIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] distChnlIds);
+}

+ 76 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistHierService.java

@@ -0,0 +1,76 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistHierEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistHierService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param distHierId 主键
+     * @return 实体
+     */
+    MkDistHierEntity queryObject(Integer distHierId);
+    Map querySysConfigByKey();
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistHierEntity> queryList(Map<String, Object> map);
+
+    List<MkDistHierEntity> queryListByTree(Map<String, Object> map);
+
+    MkDistHierEntity queryObjectByDistMap(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDistHier 实体
+     * @return 保存条数
+     */
+    int save(MkDistHierEntity mkDistHier);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDistHier 实体
+     * @return 更新条数
+     */
+    int update(MkDistHierEntity mkDistHier);
+
+    /**
+     * 根据主键删除
+     *
+     * @param distHierId
+     * @return 删除条数
+     */
+    int delete(Integer distHierId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param distHierIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] distHierIds);
+}

+ 72 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellAllocationHistoryService.java

@@ -0,0 +1,72 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 13:55:16
+ */
+public interface MkDistSellAllocationHistoryService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param sellAllocHistoryId 主键
+     * @return 实体
+     */
+    MkDistSellAllocationHistoryEntity queryObject(Integer sellAllocHistoryId);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistSellAllocationHistoryEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDistSellAllocationHistory 实体
+     * @return 保存条数
+     */
+    int save(MkDistSellAllocationHistoryEntity mkDistSellAllocationHistory);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDistSellAllocationHistory 实体
+     * @return 更新条数
+     */
+    int update(MkDistSellAllocationHistoryEntity mkDistSellAllocationHistory);
+
+    /**
+     * 根据主键删除
+     *
+     * @param sellAllocHistoryId
+     * @return 删除条数
+     */
+    int delete(Integer sellAllocHistoryId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param sellAllocHistoryIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] sellAllocHistoryIds);
+}

+ 74 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellAllocationService.java

@@ -0,0 +1,74 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistSellAllocationEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistSellAllocationService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    MkDistSellAllocationEntity queryObject(Integer sellAllocId);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistSellAllocationEntity> queryList(Map<String, Object> map);
+
+    List<MkDistSellAllocationEntity> queryAllocationByMap(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDistSellAllocation 实体
+     * @return 保存条数
+     */
+    int save(MkDistSellAllocationEntity mkDistSellAllocation);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDistSellAllocation 实体
+     * @return 更新条数
+     */
+    int update(MkDistSellAllocationEntity mkDistSellAllocation);
+
+    /**
+     * 根据主键删除
+     *
+     * @param sellAllocId
+     * @return 删除条数
+     */
+    int delete(Integer sellAllocId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param sellAllocIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] sellAllocIds);
+}

+ 74 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistSellStatisService.java

@@ -0,0 +1,74 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistSellStatisEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购买商品生成销售分配记录统计,渠道销售统计Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:46
+ */
+public interface MkDistSellStatisService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    MkDistSellStatisEntity queryObject(Integer id);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistSellStatisEntity> queryList(Map<String, Object> map);
+
+    List<MkDistSellStatisEntity> queryStatisExportList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDistSellStatis 实体
+     * @return 保存条数
+     */
+    int save(MkDistSellStatisEntity mkDistSellStatis);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDistSellStatis 实体
+     * @return 更新条数
+     */
+    int update(MkDistSellStatisEntity mkDistSellStatis);
+
+    /**
+     * 根据主键删除
+     *
+     * @param id
+     * @return 删除条数
+     */
+    int delete(Integer id);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param ids
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] ids);
+}

+ 75 - 0
kmall-admin/src/main/java/com/kmall/admin/service/mk/MkDistService.java

@@ -0,0 +1,75 @@
+package com.kmall.admin.service.mk;
+
+import com.kmall.admin.entity.mk.MkDistEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 分销商,distributorService接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-09 18:04:47
+ */
+public interface MkDistService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    MkDistEntity queryObject(Integer distId);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<MkDistEntity> queryList(Map<String, Object> map);
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param mkDist 实体
+     * @return 保存条数
+     */
+    int save(MkDistEntity mkDist);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param mkDist 实体
+     * @return 更新条数
+     */
+    int update(MkDistEntity mkDist);
+
+    /**
+     * 根据主键删除
+     *
+     * @param distId
+     * @return 删除条数
+     */
+    int delete(Integer distId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param distIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[] distIds);
+
+    MkDistEntity queryDistByGoodsId(Map<String, Object> map);
+
+    List<MkDistEntity> queryAllByHier(Map<String, Object> map);
+}

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

@@ -134,6 +134,9 @@
         <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
             AND mall_goods.third_party_merch_code = #{thirdPartyMerchCode}
         </if>
+        <if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+            AND mb.third_merch_sn = #{thirdMerchSn}
+        </if>
         <if test="goodsSn != null and goodsSn != ''">
             AND mall_goods.goods_sn like concat('%',#{goodsSn},'%')
         </if>

+ 55 - 28
kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml

@@ -27,6 +27,7 @@
 		<result property="thirdPartyMerchName" column="third_party_merch_name"/>
 		<result property="exprAgreementType" column="expr_agreement_type"/>
 		<result property="isValid" column="is_valid"/>
+
     </resultMap>
 
 	<select id="queryObject" resultType="com.kmall.admin.entity.StoreEntity">
@@ -69,45 +70,68 @@
 		where store_name = #{storeName}
 	</select>
 
+	<!--<select id="queryObjectByDistId" resultType="com.kmall.admin.entity.StoreEntity">-->
+		<!--select-->
+		<!--`id`,-->
+		<!--`merch_sn`,-->
+		<!--`merch_name`,-->
+		<!--`store_name`,-->
+		<!--`store_number`,-->
+		<!--`store_address`,-->
+		<!--`province_name`,-->
+		<!--`city_name`,-->
+		<!--`county_name`,-->
+		<!--`latitude`,-->
+		<!--`longitude`,-->
+		<!--`cover_radius`,expr_agreement_type,-->
+		<!--`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,-->
+		<!--moder_sn, mod_time, tstm,is_valid,dist_id-->
+		<!--from mall_store-->
+		<!--where dist_id = #{distId}-->
+	<!--</select>-->
+
 	<select id="queryList" resultType="com.kmall.admin.entity.StoreEntity">
 		select
-    		`id`,
-			`merch_sn`,
-			`merch_name`,
-    		`store_name`,
-    		`store_number`,
-    		`store_address`,
-    		`province_name`,
-    		`city_name`,
-    		`county_name`,
-    		`latitude`,
-    		`longitude`,
-    		`cover_radius`,
-    		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,expr_agreement_type,
-		moder_sn, mod_time, tstm,is_valid
-		from mall_store
+		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 merch_sn = #{merchSn}
+			AND s.merch_sn = #{merchSn}
 		</if>
 		<if test="storeName != null and storeName.trim() != ''">
-			AND store_name LIKE concat('%',#{storeName},'%')
+			AND s.store_name LIKE concat('%',#{storeName},'%')
 		</if>
 		<if test="storeNumber != null and storeNumber.trim() != ''">
-			AND storeNumber LIKE concat('%',#{store_number},'%')
+			AND s.storeNumber LIKE concat('%',#{store_number},'%')
 		</if>
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-			AND third_party_merch_code = #{thirdPartyMerchCode}
+			AND s.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+			AND t.third_merch_sn = #{thirdMerchSn}
 		</if>
 		<if test="id != null">
-			AND id = #{id}
+			AND s.id = #{id}
 		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
             </when>
 			<otherwise>
-                order by id desc
+                order by s.id desc
 			</otherwise>
         </choose>
 		<if test="offset != null and limit != null">
@@ -116,22 +140,25 @@
 	</select>
 	
  	<select id="queryTotal" resultType="int">
-		select count(*) from mall_store
+		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
 		<if test="merchSn != null and merchSn.trim() != ''">
-			AND merch_sn = #{merchSn}
+			AND s.merch_sn = #{merchSn}
 		</if>
 		<if test="storeName != null and storeName.trim() != ''">
-			AND store_name LIKE concat('%',#{storeName},'%')
+			AND s.store_name LIKE concat('%',#{storeName},'%')
 		</if>
 		<if test="storeNumber != null and storeNumber.trim() != ''">
-			AND storeNumber LIKE concat('%',#{store_number},'%')
+			AND s.storeNumber LIKE concat('%',#{store_number},'%')
 		</if>
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-			AND third_party_merch_code = #{thirdPartyMerchCode}
+			AND s.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+			AND t.third_merch_sn = #{thirdMerchSn}
 		</if>
 		<if test="id != null">
-			AND id = #{id}
+			AND s.id = #{id}
 		</if>
 	</select>
 
@@ -170,7 +197,7 @@
 			#{latitude},
 			#{longitude},
 			#{coverRadius},
-			#{isValid}
+			#{isValid},
 			#{remark},
 			#{thirdPartyMerchCode},
 			#{thirdPartyMerchName},

+ 18 - 12
kmall-admin/src/main/resources/mybatis/mapper/SupplierDao.xml

@@ -50,30 +50,36 @@
 
 	<select id="queryList" resultType="com.kmall.admin.entity.SupplierEntity">
 		select
-    		`id`,
-    		`level_merch_sn`,
-    		`level_merch_flag`,
-    		`child_supplier_name`,
-    		`child_supplier_flag`,
-    		`sort_order`,
-    		`is_show`,third_party_merch_code
-		from mall_supplier
+		s.`id`,
+		s.`level_merch_sn`,
+		s.`level_merch_flag`,
+		s.`child_supplier_name`,
+		s.`child_supplier_flag`,
+		s.`sort_order`,
+		s.`is_show`,s.third_party_merch_code
+		from mall_supplier s left join third_merchant_biz t on s.third_party_merch_code = t.third_party_merch_code
 		WHERE 1=1
 		<if test="name != null and name.trim() != ''">
-			AND child_supplier_name like concat('%',#{name},'%')
+			AND s.child_supplier_name like concat('%',#{name},'%')
 		</if>
 		<if test="merchSn != null and merchSn.trim() != ''">
-			AND level_merch_sn = #{merchSn}
+			AND s.level_merch_sn = #{merchSn}
 		</if>
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
-			AND third_party_merch_code = #{thirdPartyMerchCode}
+			AND s.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+			AND t.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="supplierId != null and supplierId != ''">
+			AND s.id = #{supplierId}
 		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
             </when>
 			<otherwise>
-                order by id desc
+                order by s.id desc
 			</otherwise>
         </choose>
 		<if test="offset != null and limit != null">

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

@@ -6,7 +6,7 @@
 	</select>
 	
 	<select id="queryList" parameterType="map" resultType="com.kmall.admin.fromcomm.entity.SysConfigEntity">
-		select * from sys_config where status = 1
+		select * from sys_config
 		<if test="key != null and key.trim() != ''">
 			and `key` like concat('%',#{key},'%') 
 		</if>
@@ -16,7 +16,7 @@
 	</select>
 	
 	<select id="queryTotal" parameterType="map" resultType="int">
-		select count(*) from sys_config where status = 1
+		select count(*) from sys_config
 		<if test="key != null and key.trim() != ''">
 			and `key` like concat('%',#{key},'%')
 		</if>

+ 13 - 5
kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchantBizDao.xml

@@ -17,6 +17,8 @@
         <result property="modTime" column="mod_time"/>
         <result property="tstm" column="tstm"/>
 		<result property="isMapShow" column="is_map_show"/>
+		<result property="isDistSellStart" column="is_dist_sell_start"/>
+
     </resultMap>
 
 	<select id="queryObject" resultType="com.kmall.admin.entity.ThirdMerchantBizEntity">
@@ -33,7 +35,7 @@
 			`moder_sn`,
 			`mod_time`,
 			`tstm`,
-			is_map_show
+			is_map_show,is_dist_sell_start
 		from third_merchant_biz
 		where third_merch_sn = #{id}
 	</select>
@@ -52,7 +54,7 @@
 		`moder_sn`,
 		`mod_time`,
 		`tstm`,
-		is_map_show
+		is_map_show,is_dist_sell_start
 		from third_merchant_biz
 		where merch_sn = #{value}
 	</select>
@@ -71,7 +73,7 @@
 		`moder_sn`,
 		`mod_time`,
 		`tstm`,
-		is_map_show
+		is_map_show,is_dist_sell_start
 		from third_merchant_biz
 		where third_party_merch_code = #{thirdMerchantCode}
 	</select>
@@ -89,7 +91,7 @@
     		`create_time`,
     		`moder_sn`,
     		`mod_time`,
-    		`tstm`,is_map_show
+    		`tstm`,is_map_show,is_dist_sell_start
 		from third_merchant_biz
 		WHERE 1=1
 		<if test="name != null and name.trim() != ''">
@@ -101,6 +103,9 @@
 		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
 			and third_party_merch_code = #{thirdPartyMerchCode}
 		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn.trim() != ''">
+			and third_merch_sn = #{thirdMerchSn}
+		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
@@ -137,6 +142,7 @@
 			is_stock_share,
 			is_store_user_share,
 			is_map_show,
+			is_dist_sell_start,
 			`creater_sn`,
 			`create_time`,
 			`moder_sn`,
@@ -150,6 +156,7 @@
 			#{isStockShare},
 			#{isStoreUserShare},
 			#{isMapShow},
+			#{isDistSellStart},
 			#{createrSn},
 			#{createTime},
 			#{moderSn},
@@ -166,7 +173,8 @@
 			<if test="isValid != null">`is_valid` = #{isValid}, </if>
 			<if test="isStockShare != null">`is_stock_share` = #{isStockShare}, </if>
 			<if test="isStoreUserShare != null">`is_store_user_share` = #{isStoreUserShare}, </if>
-			<if test="isStoreUserShare != null">`is_store_user_share` = #{isStoreUserShare}, </if>
+			<if test="isMapShow != null">`is_map_show` = #{isMapShow}, </if>
+			<if test="isDistSellStart != null">`is_dist_sell_start` = #{isDistSellStart}, </if>
 			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
 			<if test="createTime != null">`create_time` = #{createTime}, </if>
 			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>

+ 164 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkCenterMenuDao.xml

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkCenterMenuDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkCenterMenuEntity" id="mkCenterMenuMap">
+        <result property="id" column="id"/>
+        <result property="menuName" column="menu_name"/>
+        <result property="menuDetail" column="menu_detail"/>
+        <result property="picUrl" column="pic_url"/>
+        <result property="menuUrl" column="menu_url"/>
+        <result property="storeId" column="store_id"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="storeName" column="storeName"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkCenterMenuEntity">
+		select
+			`id`,
+			`menu_name`,
+			`menu_detail`,
+			`pic_url`,
+			`menu_url`,
+			`store_id`,
+			`third_merch_sn`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mk_center_menu
+		where id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkCenterMenuEntity">
+		select
+		a.`id`,
+		a.`menu_name`,
+		a.`menu_detail`,
+		a.`pic_url`,
+		a.`menu_url`,
+		a.`store_id`,
+		a.`third_merch_sn`,
+		a.`is_valid`,
+		a.`note`,
+		a.`creater_sn`,
+		a.`create_time`,
+		a.`moder_sn`,
+		a.`mod_time`,
+		a.`tstm`,t.third_party_merch_name thirdPartyMerchName,s.store_name storeName
+		from mk_center_menu a
+		left join mall_store s on a.store_id = s.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		WHERE 1=1
+		<if test="menuName != null and menuName.trim() != ''">
+			AND menu_name LIKE concat('%',#{menuName},'%')
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by a.id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_center_menu a
+		left join mall_store s on a.store_id = s.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		WHERE 1=1
+		<if test="menuName != null and menuName.trim() != ''">
+			AND menu_name LIKE concat('%',#{menuName},'%')
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkCenterMenuEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into mk_center_menu(
+			`menu_name`,
+			`menu_detail`,
+			`pic_url`,
+			`menu_url`,
+			`store_id`,
+			`third_merch_sn`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{menuName},
+			#{menuDetail},
+			#{picUrl},
+			#{menuUrl},
+			#{storeId},
+			#{thirdMerchSn},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkCenterMenuEntity">
+		update mk_center_menu 
+		<set>
+			<if test="menuName != null">`menu_name` = #{menuName}, </if>
+			<if test="menuDetail != null">`menu_detail` = #{menuDetail}, </if>
+			<if test="picUrl != null">`pic_url` = #{picUrl}, </if>
+			<if test="menuUrl != null">`menu_url` = #{menuUrl}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_center_menu where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_center_menu where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 187 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistChnlDao.xml

@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistChnlDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistChnlEntity" id="mkDistChnlMap">
+        <result property="distChnlId" column="dist_chnl_id"/>
+        <result property="distFlag" column="dist_flag"/>
+        <result property="partType" column="part_type"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="sortOrder" column="sort_order"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistChnlEntity">
+		select
+			`dist_chnl_id`,
+			`dist_flag`,
+			`part_type`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mk_dist_chnl
+		where dist_chnl_id = #{id}
+	</select>
+
+	<select id="queryObjectByDistFlag" resultType="com.kmall.admin.entity.mk.MkDistChnlEntity">
+		select
+		`dist_chnl_id`,
+		`dist_flag`,
+		`part_type`,
+		`third_merch_sn`,
+		`supplier_id`,
+		`sort_order`,
+		`is_valid`,
+		`note`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`
+		from mk_dist_chnl
+		where dist_flag = #{distFlag}
+	</select>
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistChnlEntity">
+		select
+		d.`dist_chnl_id`,
+		d.`dist_flag`,
+		d.`part_type`,
+		d.`third_merch_sn`,
+		d.`supplier_id`,
+		d.`sort_order`,
+		d.`is_valid`,
+		d.`note`,
+		d.`creater_sn`,
+		d.`create_time`,
+		d.`moder_sn`,
+		d.`mod_time`,
+		d.`tstm`,t.third_party_merch_name thirdPartyMerchName,s.child_supplier_name childSupplierName
+		from mk_dist_chnl d left join third_merchant_biz t on d.third_merch_sn = t.third_merch_sn
+		left join mall_supplier s on d.supplier_id = s.id
+		WHERE 1=1
+		<if test="distFlag != null and distFlag.trim() != ''">
+			AND d.dist_flag LIKE concat('%',#{distFlag},'%')
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND d.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND d.dist_chnl_id in (select dist_chnl_id from mk_dist_hier h left join mk_dist d
+			on h.dist_id = d.dist_id left join mall_store s on d.store_id = s.id where s.id = #{storeId})
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by d.dist_chnl_id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist_chnl d left join third_merchant_biz t on d.third_merch_sn = t.third_merch_sn
+		left join mall_supplier s on d.supplier_id = s.id
+		WHERE 1=1
+		<if test="distFlag != null and distFlag.trim() != ''">
+			AND d.dist_flag LIKE concat('%',#{distFlag},'%')
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND d.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND d.dist_chnl_id in (select dist_chnl_id from mk_dist_hier h left join mk_dist d
+			on h.dist_id = d.dist_id left join mall_store s on d.store_id = s.id where s.id = #{storeId})
+		</if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistChnlEntity" useGeneratedKeys="true" keyProperty="distChnlId">
+		insert into mk_dist_chnl(
+			`dist_flag`,
+			`part_type`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distFlag},
+			#{partType},
+			#{thirdMerchSn},
+			#{supplierId},
+			#{sortOrder},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistChnlEntity">
+		update mk_dist_chnl 
+		<set>
+			<if test="distFlag != null">`dist_flag` = #{distFlag}, </if>
+			<if test="partType != null">`part_type` = #{partType}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="sortOrder != null">`sort_order` = #{sortOrder}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where dist_chnl_id = #{distChnlId}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist_chnl where dist_chnl_id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist_chnl where dist_chnl_id in 
+		<foreach item="distChnlId" collection="array" open="(" separator="," close=")">
+			#{distChnlId}
+		</foreach>
+	</delete>
+
+</mapper>

+ 287 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistDao.xml

@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistEntity" id="mkDistMap">
+        <result property="distId" column="dist_id"/>
+        <result property="distName" column="dist_name"/>
+        <result property="distEname" column="dist_ename"/>
+        <result property="distFlag" column="dist_flag"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="sortOrder" column="sort_order"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="thirdPartyMerchName" column="thirdPartyMerchName"/>
+		<result property="childSupplierName" column="childSupplierName"/>
+		<result property="storeId" column="store_id"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+			`dist_id`,
+			`dist_name`,
+			`dist_ename`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`,store_id
+		from mk_dist
+		where dist_id = #{id}
+	</select>
+
+	<select id="queryObjectByDistName" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+		`dist_id`,
+		`dist_name`,
+		`dist_ename`,
+		`dist_flag`,
+		`third_merch_sn`,
+		`supplier_id`,
+		`sort_order`,
+		`is_valid`,
+		`note`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`,store_id
+		from mk_dist
+		where dist_name = #{distName}
+	</select>
+
+	<select id="queryDistByStoreId" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+		`dist_id`,
+		`dist_name`,
+		`dist_ename`,
+		`dist_flag`,
+		`third_merch_sn`,
+		`supplier_id`,
+		`sort_order`,
+		`is_valid`,
+		`note`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`,store_id
+		from mk_dist
+		where store_id = #{storeId}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+		d.`dist_id`,
+		d.`dist_name`,
+		d.`dist_ename`,
+		d.`dist_flag`,
+		d.`third_merch_sn`,
+		d.`supplier_id`,
+		d.`sort_order`,
+		d.`is_valid`,
+		d.`note`,
+		d.`creater_sn`,
+		d.`create_time`,
+		d.`moder_sn`,
+		d.`mod_time`,
+		d.`tstm`,t.third_party_merch_name thirdPartyMerchName,s.child_supplier_name childSupplierName,st.store_name storeName
+		from mk_dist d left join third_merchant_biz t on d.third_merch_sn = t.third_merch_sn
+		left join mall_supplier s on d.supplier_id = s.id
+		left join mall_store st on d.store_id = st.id
+		WHERE 1=1
+		<if test="distName != null and distName.trim() != ''">
+			AND dist_name LIKE concat('%',#{distName},'%')
+		</if>
+		<if test="distId != null and distId != ''">
+			and d.dist_id = #{distId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			and d.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND d.store_id = #{storeId}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="childDistId != null and childDistId != ''">
+			AND d.dist_id != #{childDistId}
+		</if>
+
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by d.dist_id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist d left join third_merchant_biz t on d.third_merch_sn = t.third_merch_sn
+		left join mall_supplier s on d.supplier_id = s.id
+		left join mall_store st on d.store_id = st.id
+		WHERE 1=1
+		<if test="distName != null and distName.trim() != ''">
+			AND dist_name LIKE concat('%',#{distName},'%')
+		</if>
+		<if test="distId != null and distId != ''">
+			and d.dist_id = #{distId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			and d.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND d.store_id = #{storeId}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="childDistId != null and childDistId != ''">
+			AND d.dist_id != #{childDistId}
+		</if>
+	</select>
+
+	<select id="queryAllByHier" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+		d.`dist_id`,
+		d.`dist_name`,
+		d.`dist_ename`,
+		d.`dist_flag`,
+		d.`third_merch_sn`,
+		d.`supplier_id`,
+		d.`sort_order`,
+		d.`is_valid`,
+		d.`note`,
+		d.`creater_sn`,
+		d.`create_time`,
+		d.`moder_sn`,
+		d.`mod_time`,
+		d.`tstm`,t.third_party_merch_name thirdPartyMerchName,s.child_supplier_name childSupplierName,st.store_name storeName
+		from mk_dist d left join third_merchant_biz t on d.third_merch_sn = t.third_merch_sn
+		left join mall_supplier s on d.supplier_id = s.id
+		left join mall_store st on d.store_id = st.id
+		WHERE 1=1
+		and dist_id in (select dist_id from mk_dist_hier )
+		<if test="distName != null and distName.trim() != ''">
+			AND dist_name LIKE concat('%',#{distName},'%')
+		</if>
+		<if test="distId != null and distId != ''">
+			and d.dist_id = #{distId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			and d.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND d.store_id = #{storeId}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="childDistId != null and childDistId != ''">
+			AND d.dist_id != #{childDistId}
+		</if>
+	</select>
+
+	<select id="queryDistByGoodsId" resultType="com.kmall.admin.entity.mk.MkDistEntity">
+		select
+		h.*
+		from mk_dist h where 1 =1
+		<if test="storeId != null">
+			AND h.store_id = #{storeId}
+		</if>
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistEntity" useGeneratedKeys="true" keyProperty="distId">
+		insert into mk_dist(
+			`dist_name`,
+			`dist_ename`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			store_id,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distName},
+			#{distEname},
+			#{distFlag},
+			#{thirdMerchSn},
+			#{supplierId},
+			#{storeId},
+			#{sortOrder},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistEntity">
+		update mk_dist 
+		<set>
+			<if test="distName != null">`dist_name` = #{distName}, </if>
+			<if test="distEname != null">`dist_ename` = #{distEname}, </if>
+			<if test="distFlag != null">`dist_flag` = #{distFlag}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="sortOrder != null">`sort_order` = #{sortOrder}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where dist_id = #{distId}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist where dist_id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist where dist_id in 
+		<foreach item="distId" collection="array" open="(" separator="," close=")">
+			#{distId}
+		</foreach>
+	</delete>
+
+</mapper>

+ 422 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistHierDao.xml

@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistHierDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistHierEntity" id="mkDistHierMap">
+        <result property="distHierId" column="dist_hier_id"/>
+        <result property="distChnlId" column="dist_chnl_id"/>
+        <result property="pdistId" column="pdist_id"/>
+        <result property="distId" column="dist_id"/>
+        <result property="distHierName" column="dist_hier_name"/>
+        <result property="distHierNname" column="dist_hier_nname"/>
+        <result property="hierLvl" column="hier_lvl"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="sortOrder" column="sort_order"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="pdDistName" column="pdDistName"/>
+		<result property="distName" column="distName"/>
+		<result property="distFlag" column="distFlag"/>
+		<result property="childSupplierName" column="childSupplierName"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		select
+			`dist_hier_id`,
+			`dist_chnl_id`,
+			`pdist_id`,
+			`dist_id`,
+			`dist_hier_name`,
+			`dist_hier_nname`,
+			`hier_lvl`,
+			`supplier_id`,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mk_dist_hier
+		where dist_hier_id = #{id}
+	</select>
+
+	<select id="queryObjectByName" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		select
+		`dist_hier_id`,
+		`dist_chnl_id`,
+		`pdist_id`,
+		`dist_id`,
+		`dist_hier_name`,
+		`dist_hier_nname`,
+		`hier_lvl`,
+		`supplier_id`,
+		`sort_order`,
+		`is_valid`,
+		`note`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`
+		from mk_dist_hier
+		where dist_hier_name = #{distHierName}
+	</select>
+
+	<select id="queryObjectByPdistIdAndChnlId" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		select
+		h.`dist_hier_id`,
+		h.`dist_chnl_id`,
+		h.`pdist_id`,
+		h.`dist_id`,
+		h.`dist_hier_name`,
+		h.`dist_hier_nname`,
+		h.`hier_lvl`,
+		h.`supplier_id`,
+		h.`sort_order`,
+		h.`is_valid`,
+		h.`note`,
+		h.`creater_sn`,
+		h.`create_time`,
+		h.`moder_sn`,
+		h.`mod_time`,
+		h.`tstm`,cc.dist_flag,d.dist_name
+		from mk_dist_hier h
+		left join mk_dist_chnl cc on h.dist_chnl_id = cc.dist_chnl_id
+		left join mk_dist d on h.pdist_id = d.dist_id
+		where 1=1
+		<if test="pdistId != null and pdistId != ''">
+			and h.pdist_id = #{pdistId}
+		</if>
+		<if test="distChnlId != null and distChnlId != ''">
+			and h.dist_chnl_id = #{distChnlId}
+		</if>
+		order by h.mod_time desc
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT * FROM (
+		select
+		h.`dist_hier_id`,
+		h.`dist_chnl_id`,
+		h.`pdist_id`,
+		h.`dist_id`,
+		h.`dist_hier_name`,
+		h.`dist_hier_nname`,
+		h.`hier_lvl`,
+		h.`supplier_id`,
+		h.`sort_order`,
+		h.`is_valid`,
+		h.`note`,
+		h.`creater_sn`,
+		h.`create_time`,
+		h.`moder_sn`,
+		h.`mod_time`,
+		h.`tstm`,d1.dist_name pdDistName,d2.dist_name distName,dc.dist_flag distFlag,s.child_supplier_name childSupplierName
+		from mk_dist_hier h
+		left join mk_dist_chnl dc on h.dist_chnl_id = dc.dist_chnl_id
+		left join mk_dist d1 on h.pdist_id = d1.dist_id
+		left join mk_dist d2 on h.dist_id = d2.dist_id
+		left join mall_supplier s on h.supplier_id = s.id
+		left join third_merchant_biz t on dc.third_merch_sn = t.third_merch_sn
+		LEFT JOIN mall_store st ON d1.store_id = st.id
+		LEFT JOIN mall_store st2 ON d2.store_id = st2.id
+		WHERE 1=1
+		<if test="distHierName != null and distHierName.trim() != ''">
+			AND h.dist_hier_name LIKE concat('%',#{distHierName},'%')
+		</if>
+		<if test="pdistId != null and pdistId != ''">
+			AND h.pdist_id = #{pdistId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND h.dist_id = #{distId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND dc.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND pdist_id = ( SELECT pdist_id FROM
+			mk_dist_hier h LEFT JOIN mk_dist d ON h.dist_id = d.dist_id
+			LEFT JOIN mall_store s ON d.store_id = s.id WHERE s.id = #{storeId} )
+			AND h.hier_lvl <![CDATA[ <= ]]> ( SELECT hier_lvl FROM
+			mk_dist_hier h LEFT JOIN mk_dist d ON h.dist_id = d.dist_id
+			LEFT JOIN mall_store s ON d.store_id = s.id WHERE s.id = #{storeId} )
+		</if>
+
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by h.dist_hier_id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+		)a
+		GROUP BY
+		a.dist_id ,a.hier_lvl
+	</select>
+
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist_hier h
+		left join mk_dist_chnl dc on h.dist_chnl_id = dc.dist_chnl_id
+		left join mk_dist d1 on h.pdist_id = d1.dist_id
+		left join mk_dist d2 on h.dist_id = d2.dist_id
+		left join mall_supplier s on h.supplier_id = s.id
+		left join third_merchant_biz t on dc.third_merch_sn = t.third_merch_sn
+		LEFT JOIN mall_store st ON d1.store_id = st.id
+		LEFT JOIN mall_store st2 ON d2.store_id = st2.id
+		WHERE 1=1
+		<if test="distHierName != null and distHierName.trim() != ''">
+			AND h.dist_hier_name LIKE concat('%',#{distHierName},'%')
+		</if>
+		<if test="pdistId != null">
+			AND h.pdist_id = #{pdistId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND dc.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND pdist_id = ( SELECT pdist_id FROM
+			mk_dist_hier h LEFT JOIN mk_dist d ON h.dist_id = d.dist_id
+			LEFT JOIN mall_store s ON d.store_id = s.id WHERE s.id = #{storeId} )
+			AND h.hier_lvl <![CDATA[ <= ]]> ( SELECT hier_lvl FROM
+			mk_dist_hier h LEFT JOIN mk_dist d ON h.dist_id = d.dist_id
+			LEFT JOIN mall_store s ON d.store_id = s.id WHERE s.id = #{storeId} )
+		</if>
+	</select>
+
+	<select id="queryListByTree" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT
+		h.`dist_id`,
+		h.`pdist_id`,
+		d2.dist_name NAME,
+		d1.dist_name parentName,
+		h.hier_lvl,
+		h.dist_chnl_id
+		FROM
+		mk_dist_hier h
+		LEFT JOIN mk_dist_chnl dc ON h.dist_chnl_id = dc.dist_chnl_id
+		LEFT JOIN mk_dist d1 ON h.pdist_id = d1.dist_id
+		LEFT JOIN mk_dist d2 ON h.dist_id = d2.dist_id
+		WHERE
+		1 = 1
+		<if test="pdistId != null and pdistId != ''">
+			AND h.pdist_id = ( SELECT pdist_id FROM mk_dist_hier WHERE 1 = 1 and dist_id = #{pdistId})
+		</if>
+		<if test="distId != null and distId != ''">
+			AND h.dist_id = #{distId}
+		</if>
+		<if test="hierLvl != null and hierLvl != ''">
+			AND h.hier_lvl = #{hierLvl}
+		</if>
+		<choose>
+			<when test="sidx != null and sidx.trim() != ''">
+				order by ${sidx} ${order}
+			</when>
+		</choose>
+	</select>
+<!--
+	<select id="queryListByTree" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		&lt;!&ndash;select * from (&ndash;&gt;
+		select
+		h.`dist_id`,
+		h.`pdist_id`,
+		d2.dist_name name,
+		d1.dist_name parentName,
+		h.hier_lvl
+		from mk_dist_hier h
+		left join mk_dist_chnl dc on h.dist_chnl_id = dc.dist_chnl_id
+		left join mk_dist d1 on h.pdist_id = d1.dist_id
+		left join mk_dist d2 on h.dist_id = d2.dist_id
+		WHERE 1=1
+		<if test="pdistId != null">
+			AND h.pdist_id = #{pdistId}
+		</if>
+		&lt;!&ndash;UNION all&ndash;&gt;
+		&lt;!&ndash;select d1.`dist_id` dist_id,&ndash;&gt;
+		&lt;!&ndash;d1.is_valid pdist_id,&ndash;&gt;
+		&lt;!&ndash;d1.dist_name parentName,&ndash;&gt;
+		&lt;!&ndash;d1.dist_name name,&ndash;&gt;
+		&lt;!&ndash;0 'hier_lvl' from mk_dist d1&ndash;&gt;
+		&lt;!&ndash;WHERE 1=1&ndash;&gt;
+		&lt;!&ndash;<if test="pdistId != null">&ndash;&gt;
+			&lt;!&ndash;AND d1.dist_id = #{pdistId}&ndash;&gt;
+		&lt;!&ndash;</if>&ndash;&gt;
+		&lt;!&ndash;)s&ndash;&gt;
+		<choose>
+			<when test="sidx != null and sidx.trim() != ''">
+				order by ${sidx} ${order}
+			</when>
+		</choose>
+	</select>-->
+	<select id="selectDistHierByChnlIdAndOneLvl" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT * FROM `mk_dist_hier` where 1=1 and dist_chnl_id = #{distChnlId} and hier_lvl = 1
+	</select>
+	<select id="selectDistHierByDistId" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT * FROM `mk_dist_hier` where 1=1 and dist_id = #{distId}
+	</select>
+	<select id="selectDistHierByDistChnlId" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT * FROM `mk_dist_hier` where 1=1 and dist_chnl_id = #{distChnlId}
+	</select>
+
+	<select id="queryListByPdistIdAndChnlIdAndDistId" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT h.*
+		FROM mk_dist_hier h
+		WHERE 1=1
+		<if test="pdistId != null">
+			AND h.pdist_id = #{pdistId}
+		</if>
+		<if test="distChnlId != null">
+			AND h.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="distId != null">
+			AND h.dist_id = #{distId}
+		</if>
+	</select>
+	<select id="queryObjectByDistIdAndPdistId" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		SELECT h.*
+		FROM mk_dist_hier h
+		WHERE 1=1
+		<if test="pdistId != null">
+			AND h.pdist_id = #{pdistId}
+		</if>
+		<if test="distId != null">
+			AND h.dist_id = #{distId}
+		</if>
+		<if test="distHierId != null">
+			AND h.dist_hier_id != #{distHierId}
+		</if>
+
+	</select>
+
+	<select id="queryObjectByHierMap" resultType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		select
+		h.`dist_hier_id`,
+		h.`dist_chnl_id`,
+		h.`pdist_id`,
+		h.`dist_id`,
+		h.`dist_hier_name`,
+		h.`dist_hier_nname`,
+		h.`hier_lvl`,
+		h.`supplier_id`,
+		h.`sort_order`,
+		h.`is_valid`,
+		h.`note`,
+		h.`creater_sn`,
+		h.`create_time`,
+		h.`moder_sn`,
+		h.`mod_time`,
+		h.`tstm`,cc.dist_flag,d.dist_name
+		from mk_dist_hier h
+		left join mk_dist_chnl cc on h.dist_chnl_id = cc.dist_chnl_id
+		left join mk_dist d on h.pdist_id = d.dist_id
+		where 1=1
+		<if test="pdistId != null and pdistId != ''">
+			and h.pdist_id = #{pdistId}
+		</if>
+		<if test="distId != null and distId != ''">
+			and h.dist_id = #{distId}
+		</if>
+		<if test="distChnlId != null and distChnlId != ''">
+			and h.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="hierLvl != null and hierLvl != ''">
+			and h.hier_lvl = #{hierLvl}
+		</if>
+	</select>
+
+	<select id="querySysConfigByKey" resultType="map">
+		select s.value from sys_config s where s.key = #{key}
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistHierEntity" useGeneratedKeys="true" keyProperty="distHierId">
+		insert into mk_dist_hier(
+			`dist_chnl_id`,
+			`pdist_id`,
+			`dist_id`,
+			`dist_hier_name`,
+			`dist_hier_nname`,
+			`hier_lvl`,
+			`supplier_id`,
+			`sort_order`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distChnlId},
+			#{pdistId},
+			#{distId},
+			#{distHierName},
+			#{distHierNname},
+			#{hierLvl},
+			#{supplierId},
+			#{sortOrder},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistHierEntity">
+		update mk_dist_hier 
+		<set>
+			<if test="distChnlId != null">`dist_chnl_id` = #{distChnlId}, </if>
+			<if test="pdistId != null">`pdist_id` = #{pdistId}, </if>
+			<if test="distId != null">`dist_id` = #{distId}, </if>
+			<if test="distHierName != null">`dist_hier_name` = #{distHierName}, </if>
+			<if test="distHierNname != null">`dist_hier_nname` = #{distHierNname}, </if>
+			<if test="hierLvl != null">`hier_lvl` = #{hierLvl}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="sortOrder != null">`sort_order` = #{sortOrder}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where dist_hier_id = #{distHierId}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist_hier where dist_hier_id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist_hier where dist_hier_id in 
+		<foreach item="distHierId" collection="array" open="(" separator="," close=")">
+			#{distHierId}
+		</foreach>
+	</delete>
+
+</mapper>

+ 252 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellAllocationDao.xml

@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistSellAllocationDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistSellAllocationEntity" id="mkDistSellAllocationMap">
+        <result property="sellAllocId" column="sell_alloc_id"/>
+		<result property="distChnlId" column="dist_chnl_id"/>
+        <result property="distFlag" column="dist_flag"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="distId" column="dist_id"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="allocType" column="alloc_type"/>
+        <result property="expendDistIds" column="expend_dist_ids"/>
+        <result property="expendDistLines" column="expend_dist_lines"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="storeId" column="store_id"/>
+		<result property="distName" column="distName"/>
+		<result property="storeName" column="storeName"/>
+		<result property="goodsName" column="goodsName"/>
+		<result property="sellAllocHistoryId" column="sell_alloc_history_id"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistSellAllocationEntity">
+		select
+			`sell_alloc_id`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			`goods_id`,
+			`alloc_type`,
+			`expend_dist_ids`,
+			`expend_dist_lines`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`,
+			store_id,dist_chnl_id,sell_alloc_history_id
+		from mk_dist_sell_allocation
+		where sell_alloc_id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistSellAllocationEntity">
+		select
+		a.`sell_alloc_id`,
+		c.`dist_flag`,
+		a.`third_merch_sn`,
+		a.`supplier_id`,
+		a.`dist_id`,
+		a.`goods_id`,
+		a.`alloc_type`,
+		a.`expend_dist_ids`,
+		a.`expend_dist_lines`,
+		a.`is_valid`,
+		a.`note`,
+		a.`creater_sn`,
+		a.`create_time`,
+		a.`moder_sn`,
+		a.`mod_time`,
+		a.`tstm`,a.store_id,a.dist_chnl_id,a.sell_alloc_history_id,
+		d.dist_name distName,s.store_name storeName,g.name goodsName,
+		t.third_party_merch_name thirdPartyMerchName,ss.child_supplier_name childSupplierName
+		from mk_dist_sell_allocation a
+		left join mk_dist_chnl c on a.dist_chnl_id = c.dist_chnl_id
+		left join mk_dist d on a.dist_id = d.dist_id
+		left join mall_store s on a.store_id = s.id
+		left join mall_goods g on a.goods_id = g.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		left join mall_supplier ss on a.supplier_id = ss.id
+		WHERE 1=1
+		<if test="distChnlId != null and distChnlId != ''">
+			AND a.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND a.dist_id = #{distId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by a.sell_alloc_id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+
+	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist_sell_allocation a
+		left join mk_dist_chnl c on a.dist_chnl_id = c.dist_chnl_id
+		left join mk_dist d on a.dist_id = d.dist_id
+		left join mall_store s on a.store_id = s.id
+		left join mall_goods g on a.goods_id = g.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		left join mall_supplier ss on a.supplier_id = ss.id
+		WHERE 1=1
+		<if test="distChnlId != null and distChnlId != ''">
+			AND a.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND a.dist_id = #{distId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+	</select>
+
+	<select id="queryAllocationByMap"  resultType="com.kmall.admin.entity.mk.MkDistSellAllocationEntity">
+		SELECT
+			a.*,
+			h.pdist_id
+		FROM
+		mk_dist_sell_allocation a
+		LEFT JOIN mk_dist_hier h ON a.dist_id = h.dist_id
+		AND a.dist_chnl_id = h.dist_chnl_id
+
+		WHERE 1=1
+		<if test="distId != null and distId != ''">
+			AND h.dist_id = #{distId}
+		</if>
+		<if test="distChnlId != null and distChnlId != ''">
+			AND h.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="sellAllocId != null and sellAllocId != ''">
+			AND a.sell_alloc_id != #{sellAllocId}
+		</if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistSellAllocationEntity" useGeneratedKeys="true" keyProperty="sellAllocId">
+		insert into mk_dist_sell_allocation(
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			dist_chnl_id,
+			store_id,
+			`goods_id`,
+			`alloc_type`,
+			`expend_dist_ids`,
+			`expend_dist_lines`,
+			`is_valid`,
+			sell_alloc_history_id,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distFlag},
+			#{thirdMerchSn},
+			#{supplierId},
+			#{distId},
+			#{distChnlId},
+			#{storeId},
+			#{goodsId},
+			#{allocType},
+			#{expendDistIds},
+			#{expendDistLines},
+			#{isValid},
+			#{sellAllocHistoryId},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistSellAllocationEntity">
+		update mk_dist_sell_allocation 
+		<set>
+			<if test="distFlag != null">`dist_flag` = #{distFlag}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="distId != null">`dist_id` = #{distId}, </if>
+			<if test="distChnlId != null">`dist_chnl_id` = #{distChnlId}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="goodsId != null">`goods_id` = #{goodsId}, </if>
+			<if test="allocType != null">`alloc_type` = #{allocType}, </if>
+			<if test="expendDistIds != null">`expend_dist_ids` = #{expendDistIds}, </if>
+			<if test="expendDistLines != null">`expend_dist_lines` = #{expendDistLines}, </if>
+			<if test="sellAllocHistoryId != null">`sell_alloc_history_id` = #{sellAllocHistoryId}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where sell_alloc_id = #{sellAllocId}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist_sell_allocation where sell_alloc_id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist_sell_allocation where sell_alloc_id in 
+		<foreach item="sellAllocId" collection="array" open="(" separator="," close=")">
+			#{sellAllocId}
+		</foreach>
+	</delete>
+
+</mapper>

+ 171 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellAllocationHistoryDao.xml

@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistSellAllocationHistoryDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity" id="mkDistSellAllocationHistoryMap">
+        <result property="sellAllocHistoryId" column="sell_alloc_history_id"/>
+        <result property="distChnlId" column="dist_chnl_id"/>
+        <result property="distFlag" column="dist_flag"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="distId" column="dist_id"/>
+        <result property="storeId" column="store_id"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="allocType" column="alloc_type"/>
+        <result property="expendDistIds" column="expend_dist_ids"/>
+        <result property="expendDistLines" column="expend_dist_lines"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity">
+		select
+			`sell_alloc_history_id`,
+			`dist_chnl_id`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			`store_id`,
+			`goods_id`,
+			`alloc_type`,
+			`expend_dist_ids`,
+			`expend_dist_lines`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mk_dist_sell_allocation_history
+		where sell_alloc_history_id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity">
+		select
+    		`sell_alloc_history_id`,
+    		`dist_chnl_id`,
+    		`dist_flag`,
+    		`third_merch_sn`,
+    		`supplier_id`,
+    		`dist_id`,
+    		`store_id`,
+    		`goods_id`,
+    		`alloc_type`,
+    		`expend_dist_ids`,
+    		`expend_dist_lines`,
+    		`is_valid`,
+    		`note`,
+    		`creater_sn`,
+    		`create_time`,
+    		`moder_sn`,
+    		`mod_time`,
+    		`tstm`
+		from mk_dist_sell_allocation_history
+		WHERE 1=1
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by sell_alloc_history_id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist_sell_allocation_history
+		WHERE 1=1
+        <if test="name != null and name.trim() != ''">
+            AND name LIKE concat('%',#{name},'%')
+        </if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity" useGeneratedKeys="true" keyProperty="sellAllocHistoryId">
+		insert into mk_dist_sell_allocation_history(
+			`dist_chnl_id`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			`store_id`,
+			`goods_id`,
+			`alloc_type`,
+			`expend_dist_ids`,
+			`expend_dist_lines`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distChnlId},
+			#{distFlag},
+			#{thirdMerchSn},
+			#{supplierId},
+			#{distId},
+			#{storeId},
+			#{goodsId},
+			#{allocType},
+			#{expendDistIds},
+			#{expendDistLines},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistSellAllocationHistoryEntity">
+		update mk_dist_sell_allocation_history 
+		<set>
+			<if test="distChnlId != null">`dist_chnl_id` = #{distChnlId}, </if>
+			<if test="distFlag != null">`dist_flag` = #{distFlag}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="distId != null">`dist_id` = #{distId}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="goodsId != null">`goods_id` = #{goodsId}, </if>
+			<if test="allocType != null">`alloc_type` = #{allocType}, </if>
+			<if test="expendDistIds != null">`expend_dist_ids` = #{expendDistIds}, </if>
+			<if test="expendDistLines != null">`expend_dist_lines` = #{expendDistLines}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where sell_alloc_history_id = #{sellAllocHistoryId}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist_sell_allocation_history where sell_alloc_history_id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist_sell_allocation_history where sell_alloc_history_id in 
+		<foreach item="sellAllocHistoryId" collection="array" open="(" separator="," close=")">
+			#{sellAllocHistoryId}
+		</foreach>
+	</delete>
+
+</mapper>

+ 330 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkDistSellStatisDao.xml

@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.mk.MkDistSellStatisDao">
+
+    <resultMap type="com.kmall.admin.entity.mk.MkDistSellStatisEntity" id="mkDistSellStatisMap">
+        <result property="id" column="id"/>
+        <result property="distFlag" column="dist_flag"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="supplierId" column="supplier_id"/>
+        <result property="distId" column="dist_id"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="goodsPrice" column="goods_price"/>
+        <result property="allocType" column="alloc_type"/>
+		<result property="sellAllocHistoryId" column="sell_alloc_history_id"/>
+        <result property="expendDistId" column="expend_dist_id"/>
+        <result property="expendDistPrice" column="expend_dist_price"/>
+        <result property="expendDistLevel" column="expend_dist_level"/>
+        <result property="expendSource" column="expend_source"/>
+        <result property="isValid" column="is_valid"/>
+        <result property="note" column="note"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="orderSn" column="order_sn"/>
+		<result property="actualPrice" column="actual_price"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.mk.MkDistSellStatisEntity">
+		select
+			`id`,
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			`goods_id`,
+			`goods_price`,
+			`sell_alloc_history_id`,
+			`expend_dist_id`,
+			`expend_dist_price`,
+			`expend_dist_level`,
+			`expend_source`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`,order_sn
+		from mk_dist_sell_statis
+		where id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.mk.MkDistSellStatisEntity">
+		SELECT * FROM (
+		select
+			a.`id`,
+			a.`dist_flag`,
+			a.`third_merch_sn`,
+			a.`supplier_id`,
+			a.`dist_id`,
+			a.`goods_id`,
+			a.`goods_price`,
+			a.`sell_alloc_history_id`,
+			a.`expend_dist_id`,
+			a.`expend_dist_price`,
+			a.`expend_dist_level`,
+			a.`expend_source`,
+			a.`is_valid`,
+			a.`note`,
+			a.`creater_sn`,
+			a.`create_time`,
+			a.`moder_sn`,
+			a.`mod_time`,
+    		a.`tstm`,o.order_sn,
+			d.dist_name goodsDistName,d2.dist_name expendDistName,g.name goodsName,
+			t.third_party_merch_name thirdPartyMerchName,ss.child_supplier_name childSupplierName,
+			sa.expend_dist_ids expendDistIds,sa.expend_dist_lines expendDistLines,sa.alloc_type,s1.store_name storeName,s2.store_name childStoreName
+		from mk_dist_sell_statis  a
+		left join mk_dist_sell_allocation_history sa on a.sell_alloc_history_id = sa.sell_alloc_history_id
+		left join mk_dist_chnl c on a.dist_chnl_id = c.dist_chnl_id
+		left join mk_dist d on a.dist_id = d.dist_id
+		left join mk_dist d2 on a.expend_dist_id = d2.dist_id
+		left join mall_goods g on a.goods_id = g.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		left join mall_supplier ss on a.supplier_id = ss.id
+		left join mall_order o on o.order_sn = a.order_sn
+		left join mall_store s1 on d.store_id = s1.id
+		left join mall_store s2 on d2.store_id = s2.id
+		WHERE 1=1
+		<if test="distChnlId != null and distChnlId != ''">
+			AND a.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND a.dist_id = #{distId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="startTime != null and startTime != ''">
+			AND a.create_time <![CDATA[ >  ]]> #{startTime}
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND a.create_time <![CDATA[ <  ]]> #{endTime}
+		</if>
+
+		<choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by a.id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+		)a
+		GROUP BY
+		a.dist_id ,a.expend_dist_level
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mk_dist_sell_statis  a
+		left join mk_dist_sell_allocation_history sa on a.sell_alloc_history_id = sa.sell_alloc_history_id
+		left join mk_dist_chnl c on a.dist_chnl_id = c.dist_chnl_id
+		left join mk_dist d on a.dist_id = d.dist_id
+		left join mk_dist d2 on a.expend_dist_id = d2.dist_id
+		left join mall_goods g on a.goods_id = g.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		left join mall_supplier ss on a.supplier_id = ss.id
+		left join mall_order o on o.order_sn = a.order_sn
+		left join mall_store s1 on d.store_id = s1.id
+		left join mall_store s2 on d2.store_id = s2.id
+		WHERE 1=1
+		<if test="distChnlId != null and distChnlId != ''">
+			AND a.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND a.dist_id = #{distId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="startTime != null and startTime != ''">
+			AND a.create_time <![CDATA[ >  ]]> #{startTime}
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND a.create_time <![CDATA[ <  ]]> #{endTime}
+		</if>
+	</select>
+
+
+	<select id="queryStatisExportList" resultType="com.kmall.admin.entity.mk.MkDistSellStatisEntity">
+		SELECT * FROM (
+		select
+		a.`id`,
+		a.`dist_flag`,
+		a.`third_merch_sn`,
+		a.`supplier_id`,
+		a.`dist_id`,
+		a.`goods_id`,
+		a.`goods_price`,
+		a.`sell_alloc_history_id`,
+		a.`expend_dist_id`,
+		a.`expend_dist_price`,
+		a.`expend_dist_level`,
+		a.`expend_source`,
+		a.`is_valid`,
+		a.`note`,
+		a.`creater_sn`,
+		a.`create_time`,
+		a.`moder_sn`,
+		a.`mod_time`,
+		a.`tstm`,o.order_sn,o.actual_price,
+		d.dist_name goodsDistName,d2.dist_name expendDistName,g.name goodsName,
+		t.third_party_merch_name thirdPartyMerchName,ss.child_supplier_name childSupplierName,
+		sa.expend_dist_ids expendDistIds,sa.expend_dist_lines expendDistLines,sa.alloc_type,s1.store_name storeName,s2.store_name childStoreName
+		from mk_dist_sell_statis  a
+		left join mk_dist_sell_allocation_history sa on a.sell_alloc_history_id = sa.sell_alloc_history_id
+		left join mk_dist_chnl c on a.dist_chnl_id = c.dist_chnl_id
+		left join mk_dist d on a.dist_id = d.dist_id
+		left join mk_dist d2 on a.expend_dist_id = d2.dist_id
+		left join mall_goods g on a.goods_id = g.id
+		left join third_merchant_biz t on a.third_merch_sn = t.third_merch_sn
+		left join mall_supplier ss on a.supplier_id = ss.id
+		left join mall_order o on o.order_sn = a.order_sn
+		left join mall_store s1 on d.store_id = s1.id
+		left join mall_store s2 on d2.store_id = s2.id
+		WHERE 1=1
+		<if test="distChnlId != null and distChnlId != ''">
+			AND a.dist_chnl_id = #{distChnlId}
+		</if>
+		<if test="storeId != null and storeId != ''">
+			AND a.store_id = #{storeId}
+		</if>
+		<if test="distId != null and distId != ''">
+			AND a.dist_id = #{distId}
+		</if>
+		<if test="goodsId != null and goodsId != ''">
+			AND a.goods_id = #{goodsId}
+		</if>
+		<if test="thirdMerchSn != null and thirdMerchSn != ''">
+			AND a.third_merch_sn = #{thirdMerchSn}
+		</if>
+		<if test="merchSn != null and merchSn != ''">
+			AND t.merch_sn = #{merchSn}
+		</if>
+		<if test="thirdPartyMerchCode != null and thirdPartyMerchCode != ''">
+			AND t.third_party_merch_code = #{thirdPartyMerchCode}
+		</if>
+		<if test="startTime != null and startTime != ''">
+			AND a.create_time <![CDATA[ >  ]]> #{startTime}
+		</if>
+		<if test="endTime != null and endTime != ''">
+			AND a.create_time <![CDATA[ <  ]]> #{endTime}
+		</if>
+		ORDER BY a.id
+		)a
+		GROUP BY
+		a.dist_id ,a.expend_dist_level
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.mk.MkDistSellStatisEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into mk_dist_sell_statis(
+			`dist_flag`,
+			`third_merch_sn`,
+			`supplier_id`,
+			`dist_id`,
+			order_sn,
+			`goods_id`,
+			`goods_price`,
+			`sell_alloc_history_id`,
+			`expend_dist_id`,
+			`expend_dist_price`,
+			`expend_dist_level`,
+			`expend_source`,
+			`is_valid`,
+			`note`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{distFlag},
+			#{thirdMerchSn},
+			#{supplierId},
+			#{distId},
+			#{orderSn},
+			#{goodsId},
+			#{goodsPrice},
+			#{sellAllocHistoryId},
+			#{expendDistId},
+			#{expendDistPrice},
+			#{expendDistLevel},
+			#{expendSource},
+			#{isValid},
+			#{note},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+
+	<update id="update" parameterType="com.kmall.admin.entity.mk.MkDistSellStatisEntity">
+		update mk_dist_sell_statis 
+		<set>
+			<if test="distFlag != null">`dist_flag` = #{distFlag}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="supplierId != null">`supplier_id` = #{supplierId}, </if>
+			<if test="distId != null">`dist_id` = #{distId}, </if>
+			<if test="orderSn != null">`order_sn` = #{orderSn}, </if>
+			<if test="goodsId != null">`goods_id` = #{goodsId}, </if>
+			<if test="goodsPrice != null">`goods_price` = #{goodsPrice}, </if>
+			<if test="sellAllocHistoryId != null">`sell_alloc_history_id` = #{sellAllocHistoryId}, </if>
+			<if test="expendDistId != null">`expend_dist_id` = #{expendDistId}, </if>
+			<if test="expendDistPrice != null">`expend_dist_price` = #{expendDistPrice}, </if>
+			<if test="expendDistLevel != null">`expend_dist_level` = #{expendDistLevel}, </if>
+			<if test="expendSource != null">`expend_source` = #{expendSource}, </if>
+			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="note != null">`note` = #{note}, </if>
+			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
+			<if test="createTime != null">`create_time` = #{createTime}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from mk_dist_sell_statis where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mk_dist_sell_statis where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 87 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/ad.html

@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>分销商,distributor</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.distName" @on-enter="query" placeholder="供货商名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdists:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdist:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdist:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+                <a href="${rc.contextPath}/mk/mkcenter.html">
+                <i-button type="warning" ><i class="fa"></i>&nbsp;返回营销中心页</i-button>
+                </a>
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDist" :rules="ruleValidate" :label-width="120">
+            <Form-item label="分销商名称" prop="distName">
+                <i-input v-model="mkDist.distName" placeholder="分销商名称"/>
+            </Form-item>
+            <Form-item label="分销商英文名" prop="distEname">
+                <i-input v-model="mkDist.distEname" placeholder="分销商英文名"/>
+            </Form-item>
+            <Form-item label="分销商标识" prop="distFlag">
+                <i-input v-model="mkDist.distFlag" placeholder="分销商标识"/>
+            </Form-item>
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <i-select v-model="mkDist.thirdMerchSn" placeholder="所属三方商户" @on-change="showSupplier" style="width: 268px;">
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdMerchSn" :key="thirdMerchant.thirdMerchSn">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属供应商" prop="supplierId">
+                <i-select v-model="mkDist.supplierId" placeholder="所属供应商" style="width: 268px;">
+                    <i-option v-for="supplier in suppliers" :value="supplier.id" :key="supplier.id">{{supplier.childSupplierName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="排序" prop="sortOrder">
+                <i-input v-model="mkDist.sortOrder" placeholder="排序"/>
+            </Form-item>
+            <Form-item label="是否有效" prop="isValid">
+                <Radio-group v-model="mkDist.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDist.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdist.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 28 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkcenter.html

@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>营销中心</title>
+    #parse("sys/header.html")
+    <link rel="stylesheet" href="${rc.contextPath}/statics/css/mkcenter.css">
+</head>
+<body>
+<div id="rrapp">
+	<div>
+        <div class="self-class" v-for="item in mkCenterMenuList" :item="item"><!-- ngIf: inItem.isServiceAvailable==1 -->
+            <a target="_self" ng-href="#" class="ng-scope" :href="item.menuUrl">
+                <div class="list-item clearfix">
+                    <div class="item-img r-2x fl">
+                        <img ng-src="item.picUrl" alt="" :src="item.picUrl">
+                    </div>
+                    <div class="item-intro fl" style="width:70%;">
+                        <p class="intro-title text-elepsis ng-binding">{{item.menuName}} <!-- ngIf: inItem.smallProgram==0 --></p>
+                        <p class="intro-detail text-elepsis ng-binding" :title="item.menuDetail" >{{item.menuDetail}}</p><!-- ngIf: inItem.tagName -->
+                    </div>
+                </div>
+            </a><!-- end ngIf: inItem.isServiceAvailable==1 --> <!-- ngIf: inItem.isServiceAvailable==0 -->
+        </div>
+    </div>
+</div>
+<script src="${rc.contextPath}/js/mk/mkcenter.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 81 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkcentermenu.html

@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>营销中心菜单表</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.name" @on-enter="query" placeholder="名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkcentermenu:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkcentermenu:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkcentermenu:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkCenterMenu" :rules="ruleValidate" :label-width="80">
+            <Form-item label="菜单名称" prop="menuName">
+                <i-input v-model="mkCenterMenu.menuName" placeholder="菜单名称"/>
+            </Form-item>
+            <Form-item label="菜单描述" prop="menuDetail">
+                <i-input v-model="mkCenterMenu.menuDetail" placeholder="菜单描述"/>
+            </Form-item>
+            <Form-item label="菜单图片链接" prop="picUrl">
+                <i-input v-model="mkCenterMenu.picUrl" placeholder="菜单图片链接"/>
+            </Form-item>
+            <Form-item label="菜单跳转url" prop="menuUrl">
+                <i-input v-model="mkCenterMenu.menuUrl" placeholder="菜单跳转url"/>
+            </Form-item>
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <i-select v-model="mkCenterMenu.thirdMerchSn" placeholder="所属三方商户" @on-change="changeStore" style="width: 268px;">
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdMerchSn" :key="thirdMerchant.thirdMerchSn">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属门店" prop="storeId">
+                <i-select v-model="mkCenterMenu.storeId" placeholder="所属门店" style="width: 268px;">
+                    <i-option v-for="store in storeList" :value="store.id" :key="store.id">{{store.storeName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="是否有效" prop="isValid">
+                <Radio-group v-model="mkCenterMenu.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkcentermenu.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 90 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdist.html

@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>分销商,distributor</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.distName" @on-enter="query" placeholder="供货商名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdist:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdist:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdist:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDist" :rules="ruleValidate" :label-width="120">
+            <Form-item label="分销商名称" prop="distName">
+                <i-input v-model="mkDist.distName" placeholder="分销商名称"/>
+            </Form-item>
+            <Form-item label="分销商英文名" prop="distEname">
+                <i-input v-model="mkDist.distEname" placeholder="分销商英文名"/>
+            </Form-item>
+            <Form-item label="分销商标识" prop="distFlag">
+                <i-input v-model="mkDist.distFlag" placeholder="分销商标识"/>
+            </Form-item>
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <i-select v-model="mkDist.thirdMerchSn" placeholder="所属三方商户" @on-change="showSupplier" style="width: 268px;">
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdMerchSn" :key="thirdMerchant.thirdMerchSn">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属门店" prop="storeId">
+                <i-select v-model="mkDist.storeId" placeholder="所属门店" style="width: 268px;">
+                    <i-option v-for="store in storeList" :value="store.id" :key="store.id">{{store.storeName}}</i-option>
+                </i-select>
+            </Form-item>
+
+            <Form-item label="所属供应商" prop="supplierId">
+                <i-select v-model="mkDist.supplierId" placeholder="所属供应商" style="width: 268px;">
+                    <i-option v-for="supplier in suppliers" :value="supplier.id" :key="supplier.id">{{supplier.childSupplierName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="排序" prop="sortOrder">
+                <i-input v-model="mkDist.sortOrder" placeholder="排序"/>
+            </Form-item>
+            <Form-item label="是否有效" prop="isValid">
+                <Radio-group v-model="mkDist.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDist.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdist.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 92 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistchnl.html

@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>分销渠道</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.distFlag" @on-enter="query" placeholder="名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdistchnl:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistchnl:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistchnl:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDistChnl" :rules="ruleValidate" :label-width="120">
+            <Form-item label="分销渠道名称" prop="distFlag">
+                <i-input v-model="mkDistChnl.distFlag" placeholder="分销渠道名称"/>
+            </Form-item>
+            <!--<Form-item label="所属分类" prop="partType">-->
+                <!--&lt;!&ndash;<i-input v-model="mkDistChnl.partType" placeholder="所属分类,【part_type,00:三方商户,10:供应商,20::三方商户及供货商】"/>&ndash;&gt;-->
+                <!--<i-select v-model="mkDistChnl.partType" placeholder="所属分类">-->
+                    <!--<i-option value="00">-->
+                        <!--三方商户-->
+                    <!--</i-option>-->
+                    <!--<i-option value="10">-->
+                        <!--供应商-->
+                    <!--</i-option>-->
+                    <!--<i-option value="20">-->
+                        <!--三方商户及供货商-->
+                    <!--</i-option>-->
+                <!--</i-select>-->
+            <!--</Form-item>-->
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <i-select v-model="mkDistChnl.thirdMerchSn" placeholder="所属三方商户" @on-change="showSupplier" style="width: 268px;">
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdMerchSn" :key="thirdMerchant.thirdMerchSn">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属供应商" prop="supplierId">
+                <i-select v-model="mkDistChnl.supplierId" placeholder="所属供应商" style="width: 268px;">
+                    <i-option v-for="supplier in suppliers" :value="supplier.id" :key="supplier.id">{{supplier.childSupplierName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="排序" prop="sortOrder">
+                <i-input v-model="mkDistChnl.sortOrder" placeholder="排序"/>
+            </Form-item>
+            <Form-item label="是否有效" prop="isValid">
+                <Radio-group v-model="mkDistChnl.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDistChnl.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdistchnl.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 116 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdisthier.html

@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.distHierName" @on-enter="query" placeholder="名称"/>
+                </i-col>
+                <i-col span="4">
+                    <i-select v-model="q.distId" placeholder="分销商"  >
+                        <i-option v-for="dist in queryMkDistList" :value="dist.distId" :key="dist.distId">{{dist.distName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdisthier:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdisthier:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdisthier:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDistHier" :rules="ruleValidate" :label-width="130">
+            <Form-item label="分销渠道" prop="distChnlId">
+                <i-select v-model="mkDistHier.distChnlId" placeholder="分销渠道" label-in-value @on-change="changeDist">
+                    <i-option v-for="mkDistChnl in mkDistChnlList" :value="mkDistChnl.distChnlId" :key="mkDistChnl.distChnlId">{{mkDistChnl.distFlag}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="上级分销商" prop="pdistId">
+                <!--<i-input v-model="mkDistHier.pdistId" placeholder="上级分销商id"/>-->
+                <i-select v-model="mkDistHier.pdistId" placeholder="上级分销商" label-in-value >
+                    <i-option v-for="mkDist in mkDistList" :value="mkDist.distId" :key="mkDist.distId">{{mkDist.distName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="子级分销商" prop="distId">
+                <!--<i-input v-model="mkDistHier.distId" placeholder="分销商id"/>-->
+                <i-select v-model="mkDistHier.distId" placeholder="分销商" label-in-value >
+                    <i-option v-for="mkDist in mkDistList" :value="mkDist.distId" :key="mkDist.distId">{{mkDist.distName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="分销层级名称" prop="distHierName">
+                <i-input v-model="mkDistHier.distHierName" placeholder="分销层级名称"/>
+            </Form-item>
+            <Form-item label="分销层级昵称" prop="distHierNname">
+                <i-input v-model="mkDistHier.distHierNname" placeholder="分销层级昵称"/>
+            </Form-item>
+            <Form-item label="层级级别" prop="hierLvl">
+                <i-select v-model="mkDistHier.hierLvl" placeholder="层级级别" style="width: 268px;" >
+                    <i-option v-for="lvl in lvlEntitieyList" :value="lvl.hierLvl" :key="lvl.hierLvl">{{lvl.hierKey}}
+                    </i-option>
+                </i-select>
+                <!--<i-select v-model="mkDistHier.hierLvl" placeholder="层级级别" style="width: 268px;" v-show="isOperatorShow" disabled>-->
+                    <!--<i-option v-for="lvl in lvlEntitieyList" :value="lvl.hierLvl" :key="lvl.hierLvl">{{lvl.hierKey}}-->
+                    <!--</i-option>-->
+                <!--</i-select>-->
+                <!--<i-select v-model="mkDistHier.hierLvl" placeholder="层级级别" style="width: 268px;" v-show="!isOperatorShow">-->
+                    <!--<i-option v-for="lvl in lvlEntitieyList" :value="lvl.hierLvl" :key="lvl.hierLvl">{{lvl.hierKey}}-->
+                    <!--</i-option>-->
+                <!--</i-select>-->
+            </Form-item>
+            <Form-item label="所属供应商" prop="supplierId">
+                <i-select v-model="mkDistHier.supplierId" placeholder="所属供应商" style="width: 268px;">
+                    <i-option v-for="supplier in suppliers" :value="supplier.id" :key="supplier.id">{{supplier.childSupplierName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="排序" prop="sortOrder">
+                <i-input v-model="mkDistHier.sortOrder" placeholder="排序"/>
+            </Form-item>
+            <Form-item label="是否有效" prop="isValid">
+                <Radio-group v-model="mkDistHier.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDistHier.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdisthier.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 167 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistsellallocation.html

@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>渠道销售分配,分销商针对某个商品sku的销售分配</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="3">
+                    <i-select v-model="q.distChnlId" placeholder="分销渠道"  @on-change="queryChangeByDistChnlId">
+                        <i-option v-for="chnl in queryMkDistChnlList" :value="chnl.distChnlId" :key="chnl.distChnlId">{{chnl.distFlag}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.distId" placeholder="分销商"  >
+                        <i-option v-for="dist in queryMkDistList" :value="dist.distId" :key="dist.distId">{{dist.distName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店"  @on-change="queryChangeGoodsByStore">
+                        <i-option v-for="store in queryStoreList" :value="store.id" :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.goodsId" placeholder="商品" >
+                        <i-option v-for="goods in queryGoodsList" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdistsellallocation:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistsellallocation:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistsellallocation:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDistSellAllocation" :rules="ruleValidate" :label-width="120">
+            <!--<Form-item label="分销渠道id" prop="distChnlId">-->
+                <!--&lt;!&ndash;<i-input v-model="mkDistSellAllocation.distFlag" placeholder="分销渠道名称"/>&ndash;&gt;-->
+                <!--<i-select v-model="mkDistSellAllocation.distChnlId" placeholder="分销渠道名称" style="width: 268px;" @on-change="changeDist" label-in-value>-->
+                    <!--<i-option v-for="mkDistChnl in mkDistChnlList" :value="mkDistChnl.distChnlId" :key="mkDistChnl.distChnlId">{{mkDistChnl.distFlag}}-->
+                    <!--</i-option>-->
+                <!--</i-select>-->
+            <!--</Form-item>-->
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <!--<i-input v-model="mkDistSellAllocation.thirdMerchSn" placeholder="所属三方商户"/>-->
+                <i-select v-model="mkDistSellAllocation.thirdMerchSn" placeholder="所属三方商户" style="width: 268px;" @on-change="changeDist" label-in-value>
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdMerchSn" :key="thirdMerchant.thirdMerchSn">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属供应商" prop="supplierId">
+                <!--<i-input v-model="mkDistSellAllocation.supplierId" placeholder="所属供应商"/>-->
+                <i-select v-model="mkDistSellAllocation.supplierId" placeholder="所属供应商" style="width: 268px;" label-in-value>
+                    <i-option v-for="supplier in suppliers" :value="supplier.id" :key="supplier.id">{{supplier.childSupplierName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="所属门店" prop="storeId">
+                <i-select v-model="mkDistSellAllocation.storeId" placeholder="所属门店" style="width: 268px;" label-in-value  @on-change="changeGoods">
+                    <i-option v-for="store in storeList" :value="store.id" :key="store.id">{{store.storeName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="商品id" prop="goodsId">
+                <i-select v-model="mkDistSellAllocation.goodsId" placeholder="商品id" style="width: 268px;" label-in-value>
+                    <i-option v-for="goods in goodsList" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="商品所属分销商id" prop="distId">
+                <i-select v-model="mkDistSellAllocation.distId" placeholder="分销商" style="width: 268px;" @on-change="showTree" label-in-value>
+                    <i-option v-for="mkDist in mkDistList" :value="mkDist.distId" :key="mkDist.distId">{{mkDist.distName}}
+                    </i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="分配方式" prop="allocType">
+                <i-select v-model="mkDistSellAllocation.allocType" placeholder="分配方式" style="width: 268px;" label-in-value>
+                    <i-option value="00" :key="mkDistSellAllocation.id">比例
+                    </i-option>
+                    <i-option value="10" :key="mkDistSellAllocation.id">金额
+                    </i-option>
+                </i-select>
+            </Form-item>
+
+            <Form-item label="分销额度分配" prop="allocType">
+                <div v-for="(item,index) in expendDistList" >
+                    <div class="row">
+                        <div class="col-md-3">
+                            <label class="ivu-form-item-label">{{item.expendDistLvl != '' ? item.expendDistLvl+'级':'上级'}}分销商:</label>
+                            <div class="col-md-4 input-icon right">
+                                <!--<i-input type="text" v-model="item.expendDistName"/>-->
+                                <i-select v-model="item.expendDistId" placeholder="分销商" style="width: 268px;" label-in-value>
+                                    <i-option :value="item.expendDistId" :key="item.expendDistId">{{item.expendDistName}}
+                                    </i-option>
+                                </i-select>
+                            </div>
+                        </div>
+                        <div class="col-md-4">
+                            <label class="ivu-form-item-label">{{item.expendDistLvl != '' ? item.expendDistLvl+'级':'上级'}}分销商分配额度(比例/金额):</label>
+                            <div class="col-md-5 input-icon right">
+                                <i-input type="text" v-model="item.expendDistLine"/>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div><span style="color: red">{{expendDistList.length == 0 ? '请先维护选择的商品所属分销商的层级关系':''}}</span></div>
+            </Form-item>
+
+            <!--<Form-item label="支出分销商id">-->
+                <!--&lt;!&ndash;<i-input v-model="mkDistSellAllocation.expendDistIds" placeholder="支出分销商id"/>&ndash;&gt;-->
+                <!--<div style="overflow-y: auto; max-height: 250px;width: 300px; border: 1px solid #cccccc;">-->
+                    <!--<ul id="expendDistIdsTree" class="ztree"></ul>-->
+                <!--</div>-->
+            <!--</Form-item>-->
+            <!--<Row>-->
+                <!--<i-col span="16" style="margin-top: -10px;">-->
+                <!--<span style="margin-left: 120px; color: red; font-size: 12px;">* 额度需与支出分销商对应排序,由,拼接,逗号为英文小写。示例:比例1,比例2,比例3...</span>-->
+                <!--</i-col>-->
+            <!--</Row>-->
+            <!--<Form-item label="支出分销商对应额度(比例/金额)" prop="expendDistLines">-->
+                <!--<i-input v-model="mkDistSellAllocation.expendDistLines" placeholder="支出分销商对应额度(比例/金额)"/>-->
+            <!--</Form-item>-->
+            <Form-item label="是否有效" prop="isValid" label-in-value style="margin-top: 20px;">
+                <Radio-group v-model="mkDistSellAllocation.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDistSellAllocation.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdistsellallocation.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 124 - 0
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkdistsellstatis.html

@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>购买商品生成销售分配记录统计,渠道销售统计</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="3">
+                    <i-select v-model="q.distChnlId" placeholder="分销渠道"  @on-change="queryChangeByDistChnlId">
+                        <i-option v-for="chnl in queryMkDistChnlList" :value="chnl.distChnlId" :key="chnl.distChnlId">{{chnl.distFlag}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.distId" placeholder="分销商"  >
+                        <i-option v-for="dist in queryMkDistList" :value="dist.distId" :key="dist.distId">{{dist.distName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店"  @on-change="queryChangeGoodsByStore">
+                        <i-option v-for="store in queryStoreList" :value="store.id" :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.goodsId" placeholder="商品" >
+                        <i-option v-for="goods in queryGoodsList" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
+                <i-col span="3">
+                    <Date-picker v-model="q.startTime" placeholder="创建订单开始时间"/>
+                </i-col>
+                <i-col span="3">
+                    <Date-picker v-model="q.endTime" placeholder="创建订单结束时间"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("mkdistsellstatis:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistsellstatis:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistsellstatis:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+                #if($shiro.hasPermission("mkdistsellstatis:export"))
+                <i-button type="primary" @click="exportDistSellStatis"><i class="fa fa-cloud-download"></i>&nbsp;导出</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="mkDistSellStatis" :rules="ruleValidate" :label-width="80">
+            <Form-item label="分销渠道名称" prop="distFlag">
+                <i-input v-model="mkDistSellStatis.distFlag" placeholder="分销渠道名称"/>
+            </Form-item>
+            <Form-item label="所属三方商户" prop="thirdMerchSn">
+                <i-input v-model="mkDistSellStatis.thirdMerchSn" placeholder="所属三方商户"/>
+            </Form-item>
+            <Form-item label="所属供应商" prop="supplierId">
+                <i-input v-model="mkDistSellStatis.supplierId" placeholder="所属供应商"/>
+            </Form-item>
+            <Form-item label="商品所属分销商id" prop="distId">
+                <i-input v-model="mkDistSellStatis.distId" placeholder="商品所属分销商id"/>
+            </Form-item>
+            <Form-item label="商品id" prop="goodsId">
+                <i-input v-model="mkDistSellStatis.goodsId" placeholder="商品id"/>
+            </Form-item>
+            <Form-item label="商品价格" prop="goodsPrice">
+                <i-input v-model="mkDistSellStatis.goodsPrice" placeholder="商品价格"/>
+            </Form-item>
+            <Form-item label="分配方式,【alloc_type,00:比例,10:金额】" prop="allocType">
+                <i-input v-model="mkDistSellStatis.allocType" placeholder="分配方式,【alloc_type,00:比例,10:金额】"/>
+            </Form-item>
+            <Form-item label="支出分销商id" prop="expendDistId">
+                <i-input v-model="mkDistSellStatis.expendDistId" placeholder="支出分销商id"/>
+            </Form-item>
+            <Form-item label="支出分销商金额【点数/金额】,公式:商品价格*设置点数/金额" prop="expendDistPrice">
+                <i-input v-model="mkDistSellStatis.expendDistPrice" placeholder="支出分销商金额【点数/金额】,公式:商品价格*设置点数/金额"/>
+            </Form-item>
+            <Form-item label="支出分销商等级 1 一级,2 二级,3 三级" prop="expendDistLevel">
+                <i-input v-model="mkDistSellStatis.expendDistLevel" placeholder="支出分销商等级 1 一级,2 二级,3 三级"/>
+            </Form-item>
+            <Form-item label="来源" prop="expendSource">
+                <i-input v-model="mkDistSellStatis.expendSource" placeholder="来源"/>
+            </Form-item>
+            <Form-item label="是否有效,0:有效,1:无效" prop="isValid">
+                <Radio-group v-model="mkDistSellStatis.isValid">
+                    <Radio label="1">
+                        <span>无效</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>有效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="备注" prop="note">
+                <i-input v-model="mkDistSellStatis.note" placeholder="备注"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/mk/mkdistsellstatis.js?_${date.systemTime}"></script>
+</body>
+</html>

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

@@ -38,7 +38,7 @@
         <p slot="title">{{title}}</p>
         <i-form ref="formValidate" :model="store" :rules="ruleValidate" :label-width="80">
             <Form-item label="商户编号" prop="merchSn">
-                <i-select v-model="store.merchSn" filterable placeholder="商户编号" @on-change="showMerchInfo"  label-in-value>
+                <i-select v-model="store.merchSn" filterable placeholder="商户编号" @on-change="showMerchInfo" label-in-value>
                     <i-option v-for="merch in merchList" :value="merch.merchSn" :key="merch.merchSn">{{merch.merchName}}</i-option>
                 </i-select>
             </Form-item>
@@ -86,6 +86,11 @@
             <Form-item label="配送半径(km)" prop="coverRadius">
                 <i-input v-model="store.coverRadius" placeholder="配送半径(km)"/>
             </Form-item>
+            <!--<Form-item label="所属分销商" prop="distId">-->
+                <!--<i-select v-model="store.distId" placeholder="所属分销商" label-in-value>-->
+                    <!--<i-option v-for="mkDist in mkDistList" :value="mkDist.distId" :key="mkDist.distId">{{mkDist.distName}}</i-option>-->
+                <!--</i-select>-->
+            <!--</Form-item>-->
             <Form-item label="备注" prop="remark">
                 <i-input type="textarea" v-model="store.remark" placeholder="备注"/>
             </Form-item>

+ 10 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchantbiz.html

@@ -80,6 +80,16 @@
                     </Radio>
                 </Radio-group>
             </Form-item>
+            <!--<Form-item label="渠道分销是否启用" prop="isDistSellStart">-->
+                <!--<Radio-group v-model="thirdMerchantBiz.isDistSellStart">-->
+                    <!--<Radio label="1">-->
+                        <!--<span>是</span>-->
+                    <!--</Radio>-->
+                    <!--<Radio label="0">-->
+                        <!--<span>否</span>-->
+                    <!--</Radio>-->
+                <!--</Radio-group>-->
+            <!--</Form-item>-->
 
             <Form-item label="是否有效" prop="isValid">
                 <Radio-group v-model="thirdMerchantBiz.isValid">

+ 10 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sys/config.html

@@ -33,6 +33,16 @@
             <Form-item label="参数值" prop="value">
                 <i-input v-model="config.value" placeholder="参数值"/>
             </Form-item>
+            <Form-item label="是否启用" prop="status">
+                <Radio-group v-model="config.status">
+                    <Radio label="1">
+                        <span>启用</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>失效</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
             <Form-item label="备注" prop="remark">
                 <i-input type="textarea" v-model="config.remark" placeholder="备注"/>
             </Form-item>

+ 1 - 1
kmall-admin/src/main/webapp/index.html

@@ -90,7 +90,7 @@
                     data-id="main" seamless></iframe>
         </div>
         <div class="footer">
-            <div class="pull-right">&copy; 2017-2017 <a href="#" target="_blank">中网科技(深圳)有限公司</a>
+            <div class="pull-right">&copy; 2018-2028 <a href="#" target="_blank">中网科技(深圳)有限公司</a>
             </div>
         </div>
     </div>

+ 43 - 0
kmall-admin/src/main/webapp/js/mk/mkcenter.js

@@ -0,0 +1,43 @@
+$(function () {
+    vm.getMkCenterMenuList();
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkCenterMenu: {},
+		ruleValidate: {},
+        mkCenterMenuList: []
+	},
+	methods: {
+        getMkCenterMenuList: function() {
+            $.get("../mkcentermenu/queryAll", function (r) {
+                vm.mkCenterMenuList = r.list;
+            });
+        },
+		getInfo: function(id){
+			$.get("../mkcentermenu/info/"+id, function (r) {
+                vm.mkCenterMenu = r.mkCenterMenu;
+            });
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'name': vm.q.name},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	}
+});

+ 182 - 0
kmall-admin/src/main/webapp/js/mk/mkcentermenu.js

@@ -0,0 +1,182 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkcentermenu/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '菜单名称', name: 'menuName', index: 'menu_name', width: 80, align: 'center'},
+			{label: '菜单描述', name: 'menuDetail', index: 'menu_detail', width: 80, align: 'center'},
+			{label: '菜单图片链接', name: 'picUrl', index: 'pic_url', width: 80, align: 'center'},
+			{label: '菜单跳转url', name: 'menuUrl', index: 'menu_url', width: 80, align: 'center'},
+            {label: '所属三方商户', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 80, align: 'center'},
+            {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
+			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+            {label: '备注', name: 'note', index: 'note', width: 60, align: 'center'},
+            {label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 70, align: 'center'},
+            {label: '创建时间', name: 'createTime', index: 'create_time', width: 110, align: 'center',
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+            {label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 70, align: 'center'},
+            {label: '修改时间', name: 'modTime', index: 'mod_time', width: 110, align: 'center',
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkCenterMenu: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+		    menuName: ''
+		},
+        thirdMerchantBizList: [],
+        storeList:[]
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.thirdMerchantBizList = [];
+			vm.storeList = [];
+			vm.mkCenterMenu = {isValid: 0};
+			vm.getThirdMerchantBizList();
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkCenterMenu.id == null ? "../mkcentermenu/save" : "../mkcentermenu/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkCenterMenu),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkcentermenu/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+        getThirdMerchantBizList: function() {
+            $.get("../thirdmerchantbiz/queryAll", function (r) {
+                vm.thirdMerchantBizList = r.list;
+            });
+        },
+        getStoreList: function(thirdMerchSn){
+            $.get("../store/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.storeList = r.list;
+            });
+        },
+        changeStore: function (thirdMerchSn) {
+            vm.getStoreList(thirdMerchSn);
+        },
+		getInfo: function(id){
+			$.get("../mkcentermenu/info/"+id, function (r) {
+                vm.mkCenterMenu = r.mkCenterMenu;
+            });
+		},
+        reloadSearch: function() {
+            vm.q = {
+                menuName: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'menuName': vm.q.menuName},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	}
+});

+ 193 - 0
kmall-admin/src/main/webapp/js/mk/mkdist.js

@@ -0,0 +1,193 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkdist/list',
+        datatype: "json",
+        colModel: [
+			{label: 'distId', name: 'distId', index: 'dist_id', key: true, hidden: true},
+			{label: '分销商名称', name: 'distName', index: 'dist_name', width: 80},
+			{label: '分销商英文名', name: 'distEname', index: 'dist_ename', width: 80},
+			{label: '分销商标识', name: 'distFlag', index: 'dist_flag', width: 80},
+			{label: '所属三方商户', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 80},
+            {label: '所属门店', name: 'storeName', index: 'storeName', width: 80},
+			{label: '所属供应商', name: 'childSupplierName', index: 'childSupplierName', width: 80},
+			{label: '排序', name: 'sortOrder', index: 'sort_order', width: 80},
+            {label: '是否有效', name: 'isValid', index: 'is_valid', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+			{label: '备注', name: 'note', index: 'note', width: 80},
+			{label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 80},
+			{label: '创建时间', name: 'createTime', index: 'create_time', width: 80,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+			{label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 80},
+			{label: '修改时间', name: 'modTime', index: 'mod_time', width: 80,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkDist: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+            distName: ''
+		},
+        suppliers: [],
+        thirdMerchantBizList: [],
+        storeList:[]
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+            vm.thirdMerchantBizList = [];
+            vm.suppliers = [];
+            vm.storeList = [];
+			vm.mkDist = {isValid:0};
+			vm.getThirdMerchantBizList();
+		},
+		update: function (event) {
+            let distId = getSelectedRow();
+			if (distId == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getThirdMerchantBizList();
+            vm.getInfo(distId)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkDist.distId == null ? "../mkdist/save" : "../mkdist/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkDist),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let distIds = getSelectedRows();
+			if (distIds == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkdist/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(distIds),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(distId){
+			$.get("../mkdist/info/"+distId, function (r) {
+                vm.mkDist = r.mkDist;
+            });
+		},
+        getThirdMerchantBizList: function() {
+            $.get("../thirdmerchantbiz/queryAll", function (r) {
+                vm.thirdMerchantBizList = r.list;
+            });
+        },
+        showSupplier: function (thirdMerchSn) {
+            vm.getStoreList(thirdMerchSn);
+            $.get("../supplier/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.suppliers = r.list;
+            });
+        },
+        getStoreList: function(thirdMerchSn){
+            $.get("../store/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.storeList = r.list;
+            });
+        },
+        showStockShare:function(opt){
+            var thirdMerchantCode = opt.value;
+            vm.getSuppliers(thirdMerchantCode);
+        },
+        reloadSearch: function() {
+            vm.q = {
+                distName: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'distName': vm.q.distName},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	}
+});

+ 193 - 0
kmall-admin/src/main/webapp/js/mk/mkdistchnl.js

@@ -0,0 +1,193 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkdistchnl/list',
+        datatype: "json",
+        colModel: [
+			{label: 'distChnlId', name: 'distChnlId', index: 'dist_chnl_id', key: true, hidden: true},
+			{label: '分销渠道名称', name: 'distFlag', index: 'dist_flag', width: 80},
+			// {label: '所属分类', name: 'partType', index: 'part_type', width: 80,
+             //    formatter: function (value) {
+             //        if (value == '00') {
+             //            return '三方商户';
+             //        } else if (value == '10') {
+             //            return '供应商';
+             //        } else if (value == '20') {
+             //            return '三方商户及供货商';
+             //        }
+             //        return '';
+             //    }},
+            {label: '所属三方商户', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 80},
+            {label: '所属供应商', name: 'childSupplierName', index: 'childSupplierName', width: 80},
+			{label: '排序', name: 'sortOrder', index: 'sort_order', width: 80},
+			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 80,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+			{label: '备注', name: 'note', index: 'note', width: 80},
+            {label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 80},
+            {label: '创建时间', name: 'createTime', index: 'create_time', width: 80,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+            {label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 80},
+            {label: '修改时间', name: 'modTime', index: 'mod_time', width: 80,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkDistChnl: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+            distFlag: ''
+		},
+        suppliers: [],
+        thirdMerchantBizList: []
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+            vm.thirdMerchantBizList = [];
+            vm.suppliers = [];
+			vm.mkDistChnl = {isValid:0};
+            vm.getThirdMerchantBizList();
+		},
+		update: function (event) {
+            let distChnlId = getSelectedRow();
+			if (distChnlId == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getThirdMerchantBizList();
+            vm.getInfo(distChnlId)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkDistChnl.distChnlId == null ? "../mkdistchnl/save" : "../mkdistchnl/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkDistChnl),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let distChnlIds = getSelectedRows();
+			if (distChnlIds == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkdistchnl/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(distChnlIds),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(distChnlId){
+			$.get("../mkdistchnl/info/"+distChnlId, function (r) {
+                vm.mkDistChnl = r.mkDistChnl;
+            });
+		},
+        getThirdMerchantBizList: function() {
+            $.get("../thirdmerchantbiz/queryAll", function (r) {
+                vm.thirdMerchantBizList = r.list;
+            });
+        },
+        showSupplier: function (thirdMerchSn) {
+            $.get("../supplier/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.suppliers = r.list;
+            });
+        },
+        showStockShare:function(opt){
+            var thirdMerchantCode = opt.value;
+            vm.getSuppliers(thirdMerchantCode);
+        },
+        reloadSearch: function() {
+            vm.q = {
+                distFlag: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'distFlag': vm.q.distFlag},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	}
+});

+ 248 - 0
kmall-admin/src/main/webapp/js/mk/mkdisthier.js

@@ -0,0 +1,248 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkdisthier/list',
+        datatype: "json",
+        colModel: [
+			{label: 'distHierId', name: 'distHierId', index: 'dist_hier_id', key: true, hidden: true},
+			{label: '分销渠道id', name: 'distChnlId', index: 'dist_chnl_id', width: 80, hidden: true},
+			{label: '上级分销商id', name: 'pdistId', index: 'pdist_id', width: 80, hidden: true},
+			{label: '分销商id', name: 'distId', index: 'dist_id', width: 80, hidden: true},
+            {label: '所属供应商', name: 'supplierId', index: 'supplier_id', width: 80, hidden: true},
+            {label: '层级级别', name: 'hierLvl', index: 'hier_lvl', width: 50, align: 'center'},
+            {label: '上级分销商', name: 'pdDistName', index: 'pdDistName', width: 80},
+            {label: '下级分销商', name: 'distName', index: 'distName', width: 80},
+            {label: '分销渠道名称', name: 'distFlag', index: 'distFlag', width: 80},
+			{label: '分销层级名称', name: 'distHierName', index: 'dist_hier_name', width: 140},
+			{label: '分销层级昵称', name: 'distHierNname', index: 'dist_hier_nname', width: 80},
+            {label: '所属供应商', name: 'childSupplierName', index: 'childSupplierName', width: 80},
+			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 60,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+            {label: '排序', name: 'sortOrder', index: 'sort_order', width: 80},
+            {label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 60},
+            {label: '创建时间', name: 'createTime', index: 'create_time', width: 100,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+            {label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 60},
+            {label: '修改时间', name: 'modTime', index: 'mod_time', width: 100,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkDistHier: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+            distHierName: '',
+            distId:''
+		},
+        suppliers:[],
+		mkDistList:[],
+		mkDistChnlList:[],
+        mkChildDistList:[],
+        lvlEntitieyList: [],
+        isOperatorShow: false,
+        hierLvl: '',
+        queryMkDistList:[]
+    },
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.suppliers = [];
+            vm.mkDistList = [];
+            vm.mkDistChnlList = [];
+			vm.mkDistHier = {isValid:0};
+            vm.isOperatorShow = false;
+			// vm.showSupplier();
+			// vm.getMkDistList();
+			vm.getMkDistChnlList();
+			vm.getLvlList();
+		},
+		update: function (event) {
+            let distHierId = getSelectedRow();
+			if (distHierId == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+            vm.isOperatorShow = true;
+
+            // vm.showSupplier();
+            // vm.getMkDistList();
+            vm.getMkDistChnlList();
+            vm.getInfo(distHierId);
+            vm.getLvlList();
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkDistHier.distHierId == null ? "../mkdisthier/save" : "../mkdisthier/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkDistHier),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let distHierIds = getSelectedRows();
+			if (distHierIds == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkdisthier/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(distHierIds),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(distHierId){
+			$.get("../mkdisthier/info/"+distHierId, function (r) {
+                vm.mkDistHier = r.mkDistHier;
+            });
+		},
+        showSupplier: function (supplierId) {
+            $.get("../supplier/queryAll?supplierId="+supplierId, function (r) {
+                vm.suppliers = r.list;
+            });
+        },
+        // changeLvl: function (opt) {
+        //     var distId = opt.value;
+        //     if(distId){
+        //         $.get("../mkdisthier/queryNextLvlByDistId?distId="+distId+"&isOperatorShow="+vm.isOperatorShow, function (r) {
+        //             console.log(r.lvlEntitieyList)
+        //             if(r.lvlEntitieyList){
+        //                 vm.lvlEntitieyList = r.lvlEntitieyList;
+        //             }else{
+        //                 vm.getLvlList();
+        //             }
+        //             console.log(vm.lvlEntitieyList)
+        //         });
+        //     }
+        // },
+        getLvlList: function () {
+            $.get("../mkdisthier/queryAllConfig", function (r) {
+                vm.lvlEntitieyList = r.lvlEntitieyList;
+            });
+        },
+        changeDist: function (option) {
+		    var distChnlId = option.value;
+		    if(distChnlId){
+                $.get("../mkdistchnl/info/"+distChnlId, function (r) {
+                    var thirdMerchSn = r.mkDistChnl.thirdMerchSn;
+                    var supplierId = r.mkDistChnl.supplierId;
+                    vm.getMkDistList(thirdMerchSn,supplierId);
+                    vm.showSupplier(supplierId);
+                });
+            }
+        },
+        getMkDistList: function (thirdMerchSn,supplierId) {
+            $.get("../mkdist/queryAll?thirdMerchSn="+thirdMerchSn+"&supplierId="+supplierId, function (r) {
+                vm.mkDistList = r.list;
+            });
+        },
+        changeChildDist: function (option) {
+		    var distId = option.value;
+            $.get("../mkdist/queryChildAll?childDistId="+distId, function (r) {
+                vm.mkChildDistList = r.list;
+            });
+        },
+        getMkDistChnlList: function () {
+            $.get("../mkdistchnl/queryAll", function (r) {
+                vm.mkDistChnlList = r.list;
+            });
+        },
+        reloadSearch: function() {
+            vm.q = {
+                distHierName: '',
+                distId:''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'distHierName': vm.q.distHierName,'distId':vm.q.distId},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	},
+    mounted() {
+        $.get("../mkdist/queryAllByHier", function (r) {
+            vm.queryMkDistList = r.list;
+        });
+    }
+});

+ 399 - 0
kmall-admin/src/main/webapp/js/mk/mkdistsellallocation.js

@@ -0,0 +1,399 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkdistsellallocation/list',
+        datatype: "json",
+        colModel: [
+			{label: 'sellAllocId', name: 'sellAllocId', index: 'sell_alloc_id', key: true, hidden: true},
+			{label: '分销渠道名称', name: 'distFlag', index: 'dist_flag', width: 80},
+            {label: '所属三方商户', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 80},
+            {label: '所属供应商', name: 'childSupplierName', index: 'childSupplierName', width: 80},
+			{label: '商品所属分销商', name: 'distName', index: 'distName', width: 80},
+            {label: '所属门店', name: 'storeName', index: 'storeName', width: 80},
+			{label: '商品', name: 'goodsName', index: 'goodsName', width: 80},
+			{label: '分配方式', name: 'allocType', index: 'alloc_type', width: 80,
+                formatter: function (value) {
+                    if (value == '00') {
+                        return '比例';
+                    } else if (value == '10') {
+                        return '金额';
+                    }
+                    return '';
+                }},
+			{label: '支出分销商id', name: 'expendDistIds', index: 'expend_dist_ids', width: 120},
+			{label: '支出分销商对应额度(点数/金额)', name: 'expendDistLines', index: 'expend_dist_lines', width: 120},
+            {label: '是否有效', name: 'isValid', index: 'is_valid', width: 60,
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+            {label: '备注', name: 'note', index: 'note', width: 60},
+            {label: '创建人编号', name: 'createrSn', index: 'creater_sn', width: 70},
+            {label: '创建时间', name: 'createTime', index: 'create_time', width: 110,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+            {label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 70},
+            {label: '修改时间', name: 'modTime', index: 'mod_time', width: 110,
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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 menu_ztree;
+var menu_setting = {
+    data: {
+        simpleData: {
+            enable: true,
+            idKey: "distId",
+            pIdKey: "pdistId",
+            rootPId: -1
+        },
+        key: {
+            url: "nourl"
+        }
+    },
+    check: {
+        enable: true,
+        nocheckInherit: true
+    }
+};
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkDistSellAllocation: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+
+		q: {
+            distChnlId: '',
+            storeId:'',
+            distId:'',
+            goodsId:''
+		},
+        mkDistChnlList:[],
+        thirdMerchantBizList: [],
+        suppliers:[],
+        mkDistList:[],
+		goodsList:[],
+        storeList:[],
+        mkDist:{},
+        storeId: '',
+        sellAllocId: '',
+        queryGoodsList:[],
+        queryStoreList:[],
+        queryMkDistList:[],
+        queryMkDistChnlList:[],
+        distChnlId:'',
+        distId:'',
+        expendDistList: []
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.mkDistSellAllocation = {isValid:0,storeId:''};
+			vm.mkDistChnlList = [];
+            vm.thirdMerchantBizList = [];
+            vm.storeList = [];
+            vm.suppliers = [];
+            vm.mkDistList = [];
+            vm.goodsList = [];
+            vm.expendDistList = [{expendDistId:'',expendDistName:'',expendDistLine:'',expendDistLvl:''}];
+            // vm.getMkDistChnlList();
+			vm.getThirdMerchantBizList();
+			// vm.getMkDistList();
+		},
+		update: function (event) {
+            let sellAllocId = getSelectedRow();
+			if (sellAllocId == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            // vm.getMkDistChnlList();
+            vm.getThirdMerchantBizList();
+            // vm.getMkDistList();
+            // vm.getInfo(sellAllocId);
+            vm.getInfo(sellAllocId);
+		},
+		saveOrUpdate: function (event) {
+            // //获取选择的菜单
+            // var nodes = menu_ztree.getCheckedNodes(true);
+            // var expendDistIdList = new Array();
+            // for (var i = 0; i < nodes.length; i++) {
+            //     expendDistIdList.push(nodes[i].distId);
+            // }
+            // vm.mkDistSellAllocation.expendDistIdList = expendDistIdList;
+            vm.mkDistSellAllocation.expendDistDtoList = vm.expendDistList;
+
+            let url = vm.mkDistSellAllocation.sellAllocId == null ? "../mkdistsellallocation/save" : "../mkdistsellallocation/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkDistSellAllocation),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let sellAllocIds = getSelectedRows();
+			if (sellAllocIds == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkdistsellallocation/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(sellAllocIds),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(sellAllocId){
+		    if(sellAllocId){
+                $.get("../mkdistsellallocation/info/"+sellAllocId, function (r) {
+                    vm.mkDistSellAllocation = r.mkDistSellAllocation;
+                    vm.sellAllocId = r.mkDistSellAllocation.sellAllocId;
+                    //勾选角色所拥有的菜单
+                    vm.expendDistIds = r.mkDistSellAllocation.expendDistIdList;
+                });
+            }
+		},
+        getMkDistChnlList: function () {
+            $.get("../mkdistchnl/queryAll", function (r) {
+                vm.mkDistChnlList = r.list;
+            });
+        },
+        // changeDist: function (option) {
+		 //    var distChnlId = option.value;
+		 //    if(distChnlId){
+        //         vm.distChnlId = distChnlId;
+        //         $.get("../mkdistchnl/info/"+distChnlId, function (r) {
+        //             var thirdMerchSn = r.mkDistChnl.thirdMerchSn;
+        //             vm.getThirdMerchantBizList(thirdMerchSn);
+        //             vm.showSupplier(thirdMerchSn);
+        //             vm.getStoreList(thirdMerchSn);
+        //         });
+        //     }
+        //     // vm.loadTree();
+        //     // vm.goodsList = [];
+        //     // vm.mkDistList = [];
+        //     // menu_ztree = $.fn.zTree.init($("#expendDistIdsTree"), menu_setting, []);
+        // },
+        getThirdMerchantBizList: function() {
+            $.get("../thirdmerchantbiz/queryAll", function (r) {
+                vm.thirdMerchantBizList = r.list;
+            });
+        },
+        changeDist: function (option) {
+            var thirdMerchSn = option.value;
+            if(thirdMerchSn){
+                vm.showSupplier(thirdMerchSn);
+                vm.getStoreList(thirdMerchSn);
+            }
+            // vm.loadTree();
+            // vm.goodsList = [];
+            // vm.mkDistList = [];
+            // menu_ztree = $.fn.zTree.init($("#expendDistIdsTree"), menu_setting, []);
+        },
+        showSupplier: function (thirdMerchSn) {
+            $.get("../supplier/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.suppliers = r.list;
+            });
+        },
+        getStoreList: function(thirdMerchSn){
+            $.get("../store/queryAll?thirdMerchSn=" + thirdMerchSn, function (r) {
+                vm.storeList = r.list;
+            });
+        },
+        changeGoods: function (option) {
+            var storeId = option.value;
+            if(storeId){
+                vm.getGoodsList(storeId);
+                vm.changeMkDist(storeId);
+                vm.expendDistList = [{expendDistId:'',expendDistName:'',expendDistLine:'',expendDistLvl:''}];
+            }
+        },
+        getGoodsList: function(storeId){
+            if(storeId){
+                $.get("../productstorerela/queryAll?storeId=" + storeId, function (r) {
+                    vm.goodsList = r.list;
+                });
+            }
+        },
+        changeMkDist: function (storeId) {
+            if(storeId) {
+                $.get("../mkdist/queryDistByGoodsId?storeId=" + storeId, function (r) {
+                    vm.mkDist = r.mkDistEntity;
+                    if (r.mkDistEntity) {
+                        vm.getMkDistList(r.mkDistEntity.distId);
+                    } else {
+                        vm.mkDistList = [];
+                    }
+                });
+            }
+        },
+        getMkDistList: function (distId) {
+            if(distId) {
+                $.get("../mkdist/queryAll?distId=" + distId, function (r) {
+                    vm.mkDistList = r.list;
+                });
+            }
+        },
+        // getExpendDistTree: function (pdistId,sellAllocId) {
+        //     //加载树
+        //     $.get("../mkdisthier/queryAll/tree?pdistId="+pdistId+"&sidx=s.hier_lvl", function (r) {
+        //         menu_ztree = $.fn.zTree.init($("#expendDistIdsTree"), menu_setting, r.list);
+        //         //展开所有节点
+        //         menu_ztree.expandAll(true);
+        //         if (sellAllocId != null) {
+        //             vm.getInfo(sellAllocId);
+        //         }
+        //     });
+        // },
+        showTree:function (option) {
+            var distId = option.value;
+            vm.distId = distId;
+            // vm.loadTree();
+            vm.loadExpendDistList();
+        },
+        loadTree: function () {
+            if(vm.distId){
+                // console.log('vm.distChnlId:'+vm.distChnlId);
+                // console.log('vm.distId:'+vm.distId);
+                //加载树
+                $.get("../mkdisthier/queryAll/tree?distId=" + vm.distId + "&sidx=h.hier_lvl", function (r) {
+                    menu_ztree = $.fn.zTree.init($("#expendDistIdsTree"), menu_setting, r.list);
+                    //展开所有节点
+                    menu_ztree.expandAll(true);
+
+                    var exIds = vm.expendDistIds;
+                    if(exIds){
+                        for (var i = 0; i < exIds.length; i++) {
+                            var node = menu_ztree.getNodeByParam("distId", exIds[i]);
+                            menu_ztree.checkNode(node, true, false);
+                        }
+                    }
+                });
+            }else{
+                menu_ztree = $.fn.zTree.init($("#expendDistIdsTree"), menu_setting, []);
+            }
+        },
+        loadExpendDistList:function () {
+            if(vm.distId){
+                $.get("../mkdisthier/queryAll/tree?distId=" + vm.distId + "&sidx=h.hier_lvl", function (r) {
+                    vm.expendDistList = r.list;
+                    console.log(vm.expendDistList)
+                });
+            }
+        },
+        queryChangeGoodsByStore: function (storeId) {
+            if(storeId){
+                $.get("../productstorerela/queryAll?storeId=" + storeId, function (r) {
+                    vm.queryGoodsList = r.list;
+                });
+            }
+        },
+        queryChangeByDistChnlId: function (distChnlId) {
+            if(distChnlId){
+                $.get("../mkdistchnl/info/"+distChnlId, function (r) {
+                    var thirdMerchSn = r.mkDistChnl.thirdMerchSn;
+                    $.get("../store/queryAll?thirdMerchSn="+thirdMerchSn, function (r) {
+                        vm.queryStoreList = r.list;
+                    });
+                    $.get("../mkdist/queryAll?thirdMerchSn="+thirdMerchSn, function (r) {
+                        vm.queryMkDistList = r.list;
+                    });
+                });
+            }
+        },
+        reloadSearch: function() {
+            vm.q = {
+                distChnlId: '',
+                storeId:'',
+                distId:'',
+                goodsId:''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'distChnlId': vm.q.distChnlId,'storeId': vm.q.storeId,'distId': vm.q.distId,'goodsId': vm.q.goodsId},
+                page: page
+            }).trigger("reloadGrid");
+            // vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	},
+    mounted() {
+        $.get("../mkdistchnl/queryAll", function (r) {
+            vm.queryMkDistChnlList = r.list;
+        });
+    }
+});

+ 237 - 0
kmall-admin/src/main/webapp/js/mk/mkdistsellstatis.js

@@ -0,0 +1,237 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../mkdistsellstatis/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '分销渠道名称', name: 'distFlag', index: 'dist_flag', width: 80, align: 'center'},
+            {label: '所属三方商户', name: 'thirdPartyMerchName', index: 'thirdPartyMerchName', width: 70, align: 'center'},
+            {label: '所属供应商', name: 'childSupplierName', index: 'childSupplierName', width: 70, align: 'center'},
+            {label: '商品', name: 'goodsName', index: 'goodsName', width: 80, align: 'center'},
+            {label: '商品所属分销商', name: 'goodsDistName', index: 'distName', width: 70, align: 'center'},
+			{label: '商品价格', name: 'goodsPrice', index: 'goods_price', width: 50, align: 'center'},
+			{label: '分配方式', name: 'allocType', index: 'alloc_type', width: 50, align: 'center',
+                formatter: function (value) {
+                    if (value == '00') {
+                        return '比例';
+                    } else if (value == '10') {
+                        return '金额';
+                    }
+                    return '';
+                }},
+            {label: '支出分销商id规则', name: 'expendDistIds', index: 'expendDistIds', width: 80, align: 'center'},
+            {label: '支出分销商额度规则', name: 'expendDistLines', index: 'expendDistLines', width: 80, align: 'center'},
+			{label: '支出分销商', name: 'expendDistName', index: 'expend_dist_id', width: 80, align: 'center'},
+			{label: '支出分销商金额【点数/金额】', name: 'expendDistPrice', index: 'expend_dist_price', width: 100, align: 'center'},
+			{label: '支出分销商等级', name: 'expendDistLevel', index: 'expend_dist_level', width: 70, align: 'center',
+                formatter: function (value) {
+                    if (value == '1') {
+                        return '一级';
+                    } else if (value == '2') {
+                        return '二级';
+                    } else if (value == '3') {
+                        return '三级';
+                    }
+                    return '';
+                }},
+            {label: '订单编号', name: 'orderSn', index: 'orderSn', width: 100, align: 'center'},
+            // {label: '订单用户', name: 'userName', index: 'userName', width: 70},
+			// {label: '来源', name: 'expendSource', index: 'expend_source', width: 80},
+			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 60, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '有效';
+                    } else if (value == '1') {
+                        return '无效';
+                    }
+                    return '';
+                }},
+            // {label: '备注', name: 'note', index: 'note', width: 60},
+            {label: '创建时间', name: 'createTime', index: 'create_time', width: 110, align: 'center',
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }},
+            {label: '修改时间', name: 'modTime', index: 'mod_time', width: 110, align: 'center',
+                formatter: function (value) {
+                    return transDate(value, 'yyyy-MM-dd hh:mm:ss');
+                }}],
+		viewrecords: true,
+        height: 385,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        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"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		mkDistSellStatis: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+        q: {
+            distChnlId: '',
+            storeId:'',
+            distId:'',
+            goodsId:'',
+            startTime:'',
+            endTime: ''
+        },
+        queryGoodsList:[],
+        queryStoreList:[],
+        queryMkDistList:[],
+        queryMkDistChnlList:[]
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.mkDistSellStatis = {};
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.mkDistSellStatis.id == null ? "../mkdistsellstatis/save" : "../mkdistsellstatis/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.mkDistSellStatis),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../mkdistsellstatis/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(id){
+			$.get("../mkdistsellstatis/info/"+id, function (r) {
+                vm.mkDistSellStatis = r.mkDistSellStatis;
+            });
+		},
+        queryChangeGoodsByStore: function (storeId) {
+            if(storeId){
+                $.get("../productstorerela/queryAll?storeId=" + storeId, function (r) {
+                    vm.queryGoodsList = r.list;
+                });
+            }
+        },
+        queryChangeByDistChnlId: function (distChnlId) {
+            $.get("../mkdistchnl/info/"+distChnlId, function (r) {
+                var thirdMerchSn = r.mkDistChnl.thirdMerchSn;
+                $.get("../store/queryAll?thirdMerchSn="+thirdMerchSn, function (r) {
+                    vm.queryStoreList = r.list;
+                });
+                $.get("../mkdist/queryAll?thirdMerchSn="+thirdMerchSn, function (r) {
+                    vm.queryMkDistList = r.list;
+                });
+            });
+        },
+        exportDistSellStatis: function () {
+            var params = {};
+            params.distChnlId = vm.q.distChnlId, params.storeId = vm.q.storeId, params.distId = vm.q.distId
+                , params.startTime = vm.q.startTime, params.endTime = vm.q.endTime, params.goodsId = vm.q.goodsId;
+
+            exportFile('#rrapp', '../mkdistsellstatis/export', params);
+        },
+        reloadSearch: function() {
+            vm.q = {
+                distChnlId: '',
+                storeId:'',
+                distId:'',
+                goodsId:'',
+                startTime: '',
+                endTime: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'distChnlId': vm.q.distChnlId,'storeId': vm.q.storeId,'distId': vm.q.distId,'goodsId': vm.q.goodsId,'startTime':vm.q.startTime,'endTime':vm.q.endTime},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	},
+    mounted() {
+        // this.uploadList = this.$refs.upload.fileList;
+        /*$.get("../category/getCategorySelect", function (r) {
+            vm.queryCategories = r.list;
+        });*/
+        $.get("../mkdistchnl/queryAll", function (r) {
+            vm.queryMkDistChnlList = r.list;
+        });
+    }
+});

+ 11 - 5
kmall-admin/src/main/webapp/js/shop/store.js

@@ -91,7 +91,8 @@ let vm = new Vue({
             storeNumber: ''
         },
         merchList: [],
-        thirdMerchantBizList: []
+        thirdMerchantBizList: [],
+        mkDistList: []
     },
     methods: {
         query: function () {
@@ -100,7 +101,7 @@ let vm = new Vue({
         add: function () {
             vm.showList = false;
             vm.title = "新增";
-            vm.store = {isValid: 0,exprAgreementType:'00'};
+            vm.store = {isValid: 0,exprAgreementType:'00',distId:''};
             vm.merchList = [];
             vm.getMerchList();
         },
@@ -113,9 +114,8 @@ let vm = new Vue({
             vm.title = "修改";
             vm.merchList = [];
             vm.thirdMerchantBizList = [];
-
-            vm.getInfo(id);
             vm.getMerchList();
+            vm.getInfo(id);
         },
         saveOrUpdate: function (event) {
             let url = vm.store.id == null ? "../store/save" : "../store/update";
@@ -173,10 +173,16 @@ let vm = new Vue({
                 vm.thirdMerchantBizList = r.list;
             });
         },
+        // getMkDistList: function (opt) {
+        //     var thirdPartyMerchCode = opt.value;
+        //     $.get("../mkdist/queryAll?thirdMerchantCode="+thirdPartyMerchCode, function (r) {
+        //         vm.mkDistList = r.list;
+        //     });
+        // },
         getInfo: function (id) {
             $.get("../store/info/" + id, function (r) {
                 vm.store = r.store;
-                vm.getThirdMerchantBizList(r.store.merchSn);
+                // vm.getThirdMerchantBizList(r.store.merchSn);
             });
         },
         reloadSearch: function () {

+ 10 - 1
kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js

@@ -34,6 +34,15 @@ $(function () {
                     }
                     return '';
                 }},
+            // {label: '渠道分销是否启用', name: 'isDistSellStart', index: 'isDistSellStart', width: 80, align: 'center',
+            //     formatter: function (value) {
+            //         if (value == '0') {
+            //             return '禁用';
+            //         } else if (value == '1') {
+            //             return '启用';
+            //         }
+            //         return '';
+            //     }},
 			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 80, align: 'center',
                 formatter: function (value) {
                     if (value == '0') {
@@ -102,7 +111,7 @@ let vm = new Vue({
 			vm.showList = false;
 			vm.title = "新增";
             vm.getMerchList();
-			vm.thirdMerchantBiz = {isValid: 0,isStockShare:0,isStoreUserShare:0,isMapShow:0};
+			vm.thirdMerchantBiz = {isValid: 0,isStockShare:0,isStoreUserShare:0,isMapShow:0,isDistSellStart:0};
 			vm.isOperate = true;
 		},
 		update: function (event) {

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

@@ -6,6 +6,15 @@ $(function () {
             {label: 'ID', name: 'id', key: true, hidden: true},
             {label: '参数名', name: 'key', width: 60},
             {label: '参数值', name: 'value', width: 100},
+            {label: '是否启用', name: 'status', width: 100,
+                formatter: function (value) {
+                    if (value == '1') {
+                        return '启用';
+                    } else if (value == '0') {
+                        return '无效';
+                    }
+                    return '';
+                }},
             {label: '备注', name: 'remark', width: 80}
         ],
         viewrecords: true,
@@ -61,7 +70,7 @@ var vm = new Vue({
         add: function () {
             vm.showList = false;
             vm.title = "新增";
-            vm.config = {};
+            vm.config = {status: 0};
         },
         update: function () {
             var id = getSelectedRow();

+ 1 - 1
kmall-admin/src/main/webapp/statics/css/main.css

@@ -76,7 +76,7 @@ tbody > tr > th {
 }
 
 .row {
-    border-top: 1px solid #ddd;
+    border: 1px solid #ddd;
     margin: 0;
     padding: 10px 2px 0px 2px;
 }

+ 109 - 0
kmall-admin/src/main/webapp/statics/css/mkcenter.css

@@ -0,0 +1,109 @@
+.item-intro {
+    padding-left: 10px;
+    letter-spacing: .5px;
+}
+.fl {
+    float: left;
+}
+.r-2x {
+    border-radius: 4px;
+}
+.item-img {
+    overflow: hidden;
+}
+.list-item {
+    position: relative;
+    border: 1px solid #dddce2;
+    border-radius: 4px;
+    padding: 10px;
+}
+.item-img>img {
+    width: 40px;
+    height: 40px;
+}
+.clearfix {
+    zoom: 1;
+}
+.text-elepsis {
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+.intro-detail {
+    font-size: 12px;
+    line-height: 20px;
+    color: #9797A1;
+    margin: 0;
+}
+.intro-title {
+    font-size: 14px;
+    line-height: 24px;
+    color: #595961;
+    margin: -4px 0 0;
+    font-weight: 700;
+    letter-spacing: 1px;
+}
+.self-class{
+    width: 300px;
+    float: left;
+    margin-right: 20px;
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+@media (min-width: 1649px) {
+    .col-lg-12-6-sf {
+        width: 16.66666667%;
+    }
+}
+@media (min-width: 1426px){
+    .col-lg-12-5-sf {
+        width: 20%;
+    }
+    .m-b-20 {
+        margin-bottom: 20px;
+    }
+    .pad-lr-10 {
+        padding-right: 10px;
+        padding-left: 10px;
+    }
+}
+@media (min-width: 1200px){
+    .col-lg-3 {
+        width: 25%;
+    }
+}
+@media (min-width: 1200px){
+    .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 {
+        float: left;
+    }
+}
+@media (min-width: 992px){
+    .col-md-4 {
+        width: 33.33333333%;
+    }
+}
+@media (min-width: 992px){
+    .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 {
+        float: left;
+    }
+}
+@media (min-width: 768px){
+    .col-sm-6 {
+        width: 50%;
+    }
+}
+@media (min-width: 768px){
+    .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 {
+        float: left;
+    }
+    .col-xs-12 {
+        float: left;
+        width: 100%;
+    }
+    .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+        position: relative;
+        min-height: 1px;
+        padding-left: 15px;
+        padding-right: 15px;
+    }
+}