Bladeren bron

kmall-pt-general 提交

zcb@qhdswl.com 5 jaren geleden
commit
a1d2220945
100 gewijzigde bestanden met toevoegingen van 12732 en 0 verwijderingen
  1. 36 0
      kmall-admin/src/main/java/com/kmall/admin/Test.java
  2. 30 0
      kmall-admin/src/main/java/com/kmall/admin/annotation/DataFilter.java
  3. 126 0
      kmall-admin/src/main/java/com/kmall/admin/aop/DataFilterAspect.java
  4. 85 0
      kmall-admin/src/main/java/com/kmall/admin/aop/SysLogAspect.java
  5. 116 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AdController.java
  6. 100 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AdPositionController.java
  7. 91 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AddressController.java
  8. 100 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AttributeCategoryController.java
  9. 135 0
      kmall-admin/src/main/java/com/kmall/admin/controller/AttributeController.java
  10. 138 0
      kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java
  11. 93 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CartController.java
  12. 204 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CategoryController.java
  13. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ChannelController.java
  14. 94 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CollectController.java
  15. 135 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CommentController.java
  16. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CommentPictureController.java
  17. 136 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CouponController.java
  18. 115 0
      kmall-admin/src/main/java/com/kmall/admin/controller/CouponGoodsController.java
  19. 75 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ExportExceptionDataController.java
  20. 104 0
      kmall-admin/src/main/java/com/kmall/admin/controller/FeedbackController.java
  21. 102 0
      kmall-admin/src/main/java/com/kmall/admin/controller/FootprintController.java
  22. 155 0
      kmall-admin/src/main/java/com/kmall/admin/controller/FreightController.java
  23. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/FreightItemController.java
  24. 91 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsAttributeController.java
  25. 305 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java
  26. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGalleryController.java
  27. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGroupController.java
  28. 121 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGroupOpenController.java
  29. 118 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsIssueController.java
  30. 119 0
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsSpecificationController.java
  31. 128 0
      kmall-admin/src/main/java/com/kmall/admin/controller/HelpIssueController.java
  32. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/HelpTypeController.java
  33. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/KeywordsController.java
  34. 111 0
      kmall-admin/src/main/java/com/kmall/admin/controller/MerchController.java
  35. 109 0
      kmall-admin/src/main/java/com/kmall/admin/controller/MngChangeController.java
  36. 138 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OfflineCartController.java
  37. 882 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  38. 129 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderGoodsController.java
  39. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderProcessRecordController.java
  40. 138 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderRefundController.java
  41. 188 0
      kmall-admin/src/main/java/com/kmall/admin/controller/PickUpCodeController.java
  42. 122 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductController.java
  43. 286 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  44. 91 0
      kmall-admin/src/main/java/com/kmall/admin/controller/RelatedGoodsController.java
  45. 91 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SearchHistoryController.java
  46. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ShippingController.java
  47. 101 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SpecificationController.java
  48. 277 0
      kmall-admin/src/main/java/com/kmall/admin/controller/StoreController.java
  49. 109 0
      kmall-admin/src/main/java/com/kmall/admin/controller/StoreMngChangeController.java
  50. 108 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SupplierController.java
  51. 100 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysConfigController.java
  52. 118 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysCusNationCodeController.java
  53. 121 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysCusUnitCodeController.java
  54. 139 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysDeptController.java
  55. 49 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysLogController.java
  56. 113 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysMacroController.java
  57. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysNoticeController.java
  58. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysNoticeUserController.java
  59. 196 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysOssController.java
  60. 22 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysPageController.java
  61. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysPrinterController.java
  62. 168 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysRegionController.java
  63. 144 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysSmsLogController.java
  64. 123 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchExpressController.java
  65. 218 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchantBizController.java
  66. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/TopicCategoryController.java
  67. 99 0
      kmall-admin/src/main/java/com/kmall/admin/controller/TopicController.java
  68. 152 0
      kmall-admin/src/main/java/com/kmall/admin/controller/UserController.java
  69. 111 0
      kmall-admin/src/main/java/com/kmall/admin/controller/UserCouponController.java
  70. 100 0
      kmall-admin/src/main/java/com/kmall/admin/controller/UserLevelController.java
  71. 95 0
      kmall-admin/src/main/java/com/kmall/admin/controller/faceid/CheckFaceLivenessRecogController.java
  72. 160 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuController.java
  73. 123 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuStoreRealController.java
  74. 128 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/dist/MkDistChnlController.java
  75. 169 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/dist/MkDistController.java
  76. 289 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/dist/MkDistHierController.java
  77. 138 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/dist/MkDistSellAllocationController.java
  78. 178 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/dist/MkDistSellStatisController.java
  79. 235 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusController.java
  80. 128 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusGoodsController.java
  81. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusLevelController.java
  82. 109 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromChnlController.java
  83. 266 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromController.java
  84. 179 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromStatController.java
  85. 106 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromTypeController.java
  86. 319 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketDiscountController.java
  87. 113 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketDiscountGoodsController.java
  88. 231 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketGoodsTempController.java
  89. 129 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTopicStatController.java
  90. 110 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/StoreTopicController.java
  91. 35 0
      kmall-admin/src/main/java/com/kmall/admin/controller/test.java
  92. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/AdDao.java
  93. 14 0
      kmall-admin/src/main/java/com/kmall/admin/dao/AdPositionDao.java
  94. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/AddressDao.java
  95. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/AttributeCategoryDao.java
  96. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/AttributeDao.java
  97. 20 0
      kmall-admin/src/main/java/com/kmall/admin/dao/BrandDao.java
  98. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/CartDao.java
  99. 20 0
      kmall-admin/src/main/java/com/kmall/admin/dao/CategoryDao.java
  100. 15 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ChannelDao.java

+ 36 - 0
kmall-admin/src/main/java/com/kmall/admin/Test.java

@@ -0,0 +1,36 @@
+/*
+ * 创建时间:2017-08-19 08:55
+ * 项目名称:kmall_pt
+ * 类名称:Test.java
+ * 包名称:com.kmall.admin
+ *
+ * 修改履历:
+ *          日期              修正者        主要内容
+ *                                      
+ *
+ * Copyright (c) 2016-2017 兆尹科技
+ */
+package com.kmall.admin;
+
+/**
+ * 名称:Test <br>
+ * 描述:<br>
+ *
+ * @author Scott
+ * @version 1.0
+ * @since 1.0.0
+ */
+public class Test {
+    public static void main(String[] args) {
+        //Integer使用equals判断
+        Integer a = 127;
+        Integer b = 127;
+        System.out.println(a == b);
+        Integer c = 129;
+        Integer d = 129;
+        System.out.println(c == d);
+
+        System.out.println(c.equals(d));
+
+    }
+}

+ 30 - 0
kmall-admin/src/main/java/com/kmall/admin/annotation/DataFilter.java

@@ -0,0 +1,30 @@
+package com.kmall.admin.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 数据过滤
+ *
+ * @author Scott
+ * @email
+ * @date 2017年10月23日 下午13:13:23
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataFilter {
+    /**
+     * sql中数据创建用户(通常传入TABLE.CREATE_USER_ID)的别名
+     */
+    String userAlias() default "";
+
+    /**
+     * sql中数据deptId的别名
+     */
+    String deptAlias() default "";
+
+    /**
+     * true:没有本部门数据权限,也能查询本人数据  暂时不使用
+     */
+    boolean self() default true;
+}

+ 126 - 0
kmall-admin/src/main/java/com/kmall/admin/aop/DataFilterAspect.java

@@ -0,0 +1,126 @@
+package com.kmall.admin.aop;
+
+import com.kmall.admin.annotation.DataFilter;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.fromcomm.service.SysRoleDeptService;
+import com.kmall.common.utils.Constant;
+import com.kmall.common.utils.RRException;
+import com.kmall.admin.utils.ShiroUtils;
+import org.apache.commons.lang.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 数据过滤,切面处理类
+ *
+ * @author Scott
+ * @email
+ * @date 2017年10月23日 下午13:33:35
+ */
+@Aspect
+@Component
+public class DataFilterAspect {
+    @Autowired
+    private SysRoleDeptService sysRoleDeptService;
+
+    @Pointcut("@annotation(com.kmall.admin.annotation.DataFilter)")
+    public void dataFilterCut() {
+
+    }
+
+    @Before("dataFilterCut()")
+    public void dataFilter(JoinPoint point) throws Throwable {
+        //获取参数
+        Object params = point.getArgs()[0];
+        if (params != null && params instanceof Map) {
+            SysUserEntity user = ShiroUtils.getUserEntity();
+
+            //如果不是超级管理员,则只能查询权限数据
+            if (user.getUserId() != Constant.SUPER_ADMIN) {
+                Map map = (Map) params;
+                map.put("filterSql", getFilterSQL(user, point));
+            }
+
+            return;
+        }
+
+        throw new RRException("数据权限接口的参数必须为Map类型,且不能为NULL");
+    }
+
+    /**
+     * 获取数据过滤的SQL
+     */
+    private String getFilterSQL(SysUserEntity user, JoinPoint point) {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        DataFilter dataFilter = signature.getMethod().getAnnotation(DataFilter.class);
+
+        String userAlias = dataFilter.userAlias();
+        String deptAlias = dataFilter.deptAlias();
+
+        StringBuilder filterSql = new StringBuilder();
+
+        //取出当前登录用户的部门权限
+        String alias = getAliasByUser(user.getUserId());
+        if (StringUtils.isNotEmpty(alias)) {
+            filterSql.append(" and (");
+            filterSql.append(deptAlias);
+            filterSql.append(" in ");
+            filterSql.append(" ( ");
+            filterSql.append(alias);
+            filterSql.append(" ) ");
+            if (StringUtils.isNotBlank(userAlias)) {
+                filterSql.append(" or ");
+                filterSql.append(userAlias);
+                filterSql.append("=");
+                filterSql.append(user.getUserId());
+            }
+            filterSql.append(" ) ");
+        } else if (StringUtils.isNotBlank(userAlias)) {
+            filterSql.append(" and ");
+            filterSql.append(userAlias);
+            filterSql.append("=");
+            filterSql.append(user.getUserId());
+            filterSql.append(" ");
+        }
+        //没有部门数据权限,也能查询本人数据
+        if (dataFilter.self()) {
+            filterSql.append(" or ");
+            filterSql.append(userAlias);
+            filterSql.append("=");
+            filterSql.append(user.getUserId());
+            filterSql.append(" ");
+        }
+        return filterSql.toString();
+    }
+
+    /**
+     * 取出当前登录用户的部门权限
+     *
+     * @param userId 登录用户Id
+     * @return 部门权限
+     */
+    private String getAliasByUser(Long userId) {
+        @SuppressWarnings("unchecked")
+        List<Long> roleOrglist = sysRoleDeptService.queryDeptIdListByUserId(userId);
+        StringBuilder roleStr = new StringBuilder();
+        String alias = "";
+        if (roleOrglist != null && !roleOrglist.isEmpty()) {
+            for (Long roleId : roleOrglist) {
+                roleStr.append(",");
+                roleStr.append("'");
+                roleStr.append(roleId);
+                roleStr.append("'");
+            }
+            alias = roleStr.toString().substring(1, roleStr.length());
+        }
+        return alias;
+    }
+}

+ 85 - 0
kmall-admin/src/main/java/com/kmall/admin/aop/SysLogAspect.java

@@ -0,0 +1,85 @@
+package com.kmall.admin.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.kmall.common.annotation.SysLog;
+import com.kmall.manager.entity.SysLogEntity;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.manager.service.SysLogService;
+import com.kmall.common.utils.HttpContextUtils;
+import com.kmall.common.utils.IPUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+
+/**
+ * 系统日志,切面处理类
+ *
+ * @author Scott
+ * @email
+ * @date 2017年3月8日 上午11:07:35
+ */
+@Aspect
+@Component
+public class SysLogAspect {
+    @Autowired
+    private SysLogService sysLogService;
+
+    @Pointcut("@annotation(com.kmall.common.annotation.SysLog)")
+    public void logPointCut() {
+
+    }
+
+    @Before("logPointCut()")
+    public void saveSysLog(JoinPoint joinPoint) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        SysLogEntity sysLog = new SysLogEntity();
+        SysLog syslog = method.getAnnotation(SysLog.class);
+        if (syslog != null) {
+            //注解上的描述
+            sysLog.setOperation(syslog.value());
+        }
+
+        //请求的方法名
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        sysLog.setMethod(className + "." + methodName + "()");
+
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        String params = JSON.toJSONString(args[0]);
+        sysLog.setParams(params);
+
+        //获取request
+        HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
+        //设置IP地址
+        sysLog.setIp(IPUtils.getIpAddr(request));
+
+        //用户名
+        SysUserEntity sysUserEntity = ShiroUtils.getUserEntity();
+        String username = "";
+        if ("login".equals(methodName)) {
+            username = params;
+        }
+        if (null != sysUserEntity) {
+            username = ShiroUtils.getUserEntity().getUsername();
+        }
+        sysLog.setUsername(username);
+
+        sysLog.setCreateDate(new Date());
+        //保存系统日志
+        sysLogService.save(sysLog);
+    }
+
+}

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

@@ -0,0 +1,116 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.dto.CopyAdDto;
+import com.kmall.admin.entity.AdEntity;
+import com.kmall.admin.service.AdService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 09:37:35
+ */
+@RestController
+@RequestMapping("ad")
+public class AdController {
+    @Autowired
+    private AdService adService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("ad:list")
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<AdEntity> adList = adService.queryList(query);
+        int total = adService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(adList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("ad:info")
+    public R info(@PathVariable("id") Integer id) {
+        AdEntity ad = adService.queryObject(id);
+
+        return R.ok().put("ad", ad);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("ad:save")
+    public R save(@RequestBody AdEntity ad) {
+        adService.save(ad);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("ad:update")
+    public R update(@RequestBody AdEntity ad) {
+        adService.update(ad);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("ad:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        adService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<AdEntity> list = adService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyAd")
+//    @RequiresPermissions("ad:saveCopyAd")
+    public R saveCopyAd(@RequestBody CopyAdDto copyAdDto) {
+        adService.saveCopyAd(copyAdDto);
+        return R.ok();
+    }
+}

+ 100 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/AdPositionController.java

@@ -0,0 +1,100 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.AdPositionEntity;
+import com.kmall.admin.service.AdPositionService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 12:02:42
+ */
+@RestController
+@RequestMapping("adposition")
+public class AdPositionController {
+    @Autowired
+    private AdPositionService adPositionService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("adposition:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<AdPositionEntity> adPositionList = adPositionService.queryList(query);
+        int total = adPositionService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(adPositionList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("adposition:info")
+    public R info(@PathVariable("id") Integer id) {
+        AdPositionEntity adPosition = adPositionService.queryObject(id);
+
+        return R.ok().put("adPosition", adPosition);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("adposition:save")
+    public R save(@RequestBody AdPositionEntity adPosition) {
+        adPositionService.save(adPosition);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("adposition:update")
+    public R update(@RequestBody AdPositionEntity adPosition) {
+        adPositionService.update(adPosition);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("adposition:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        adPositionService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<AdPositionEntity> list = adPositionService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 91 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/AddressController.java

@@ -0,0 +1,91 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.AddressEntity;
+import com.kmall.admin.service.AddressService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-16 17:22:46
+ */
+@RestController
+@RequestMapping("address")
+public class AddressController {
+    @Autowired
+    private AddressService addressService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("address:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<AddressEntity> addressList = addressService.queryList(query);
+        int total = addressService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(addressList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("address:info")
+    public R info(@PathVariable("id") Integer id) {
+        AddressEntity address = addressService.queryObject(id);
+
+        return R.ok().put("address", address);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("address:save")
+    public R save(@RequestBody AddressEntity address) {
+        addressService.save(address);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("address:update")
+    public R update(@RequestBody AddressEntity address) {
+        addressService.update(address);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("address:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        addressService.deleteBatch(ids);
+
+        return R.ok();
+    }
+}

+ 100 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/AttributeCategoryController.java

@@ -0,0 +1,100 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.AttributeCategoryEntity;
+import com.kmall.admin.service.AttributeCategoryService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-17 16:13:27
+ */
+@RestController
+@RequestMapping("attributecategory")
+public class AttributeCategoryController {
+    @Autowired
+    private AttributeCategoryService attributeCategoryService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("attributecategory:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<AttributeCategoryEntity> attributeCategoryList = attributeCategoryService.queryList(query);
+        int total = attributeCategoryService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(attributeCategoryList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("attributecategory:info")
+    public R info(@PathVariable("id") Integer id) {
+        AttributeCategoryEntity attributeCategory = attributeCategoryService.queryObject(id);
+
+        return R.ok().put("attributeCategory", attributeCategory);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("attributecategory:save")
+    public R save(@RequestBody AttributeCategoryEntity attributeCategory) {
+        attributeCategoryService.save(attributeCategory);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("attributecategory:update")
+    public R update(@RequestBody AttributeCategoryEntity attributeCategory) {
+        attributeCategoryService.update(attributeCategory);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("attributecategory:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        attributeCategoryService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<AttributeCategoryEntity> list = attributeCategoryService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 135 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/AttributeController.java

@@ -0,0 +1,135 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.AttributeEntity;
+import com.kmall.admin.service.AttributeService;
+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.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-17 16:48:17
+ */
+@RestController
+@RequestMapping("attribute")
+public class AttributeController {
+    @Autowired
+    private AttributeService attributeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("attribute:list")
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<AttributeEntity> attributeList = attributeService.queryList(query);
+        int total = attributeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(attributeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("attribute:info")
+    public R info(@PathVariable("id") Integer id) {
+        AttributeEntity attribute = attributeService.queryObject(id);
+
+        return R.ok().put("attribute", attribute);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("attribute:save")
+    public R save(@RequestBody AttributeEntity attribute) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(attribute);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("name", "名称");
+        builder.put("attributeCategoryId", "所属分类");
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+
+        attributeService.save(attribute);
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("attribute:update")
+    public R update(@RequestBody AttributeEntity attribute) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(attribute);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("name", "名称");
+        builder.put("attributeCategoryId", "所属分类");
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+
+        attributeService.update(attribute);
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("attribute:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        attributeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<AttributeEntity> list = attributeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/query")
+    public R query(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<AttributeEntity> list = attributeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 138 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/BrandController.java

@@ -0,0 +1,138 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.CopyBrandDto;
+import com.kmall.admin.dto.CopyCategoryDto;
+import com.kmall.admin.entity.BrandEntity;
+import com.kmall.admin.service.BrandService;
+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.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 17:59:15
+ */
+@RestController
+@RequestMapping("brand")
+public class BrandController {
+    @Autowired
+    private BrandService brandService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("brand:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<BrandEntity> brandList = brandService.queryList(query);
+        int total = brandService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(brandList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("brand:info")
+    public R info(@PathVariable("id") Integer id) {
+        BrandEntity brand = brandService.queryObject(id);
+
+        return R.ok().put("brand", brand);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("brand:save")
+    public R save(@RequestBody BrandEntity brand) {
+
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(brand);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        builder.put("categoryId", "分类");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+
+        brandService.save(brand);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("brand:update")
+    public R update(@RequestBody BrandEntity brand) {
+
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(brand);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        builder.put("categoryId", "分类");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+
+        brandService.update(brand);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("brand:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        brandService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<BrandEntity> list = brandService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyBrand")
+//    @RequiresPermissions("brand:saveCopyBrand")
+    public R saveCopyBrand(@RequestBody CopyBrandDto copyBrandDto) {
+        brandService.saveCopyCategory(copyBrandDto);
+        return R.ok();
+    }
+}

+ 93 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CartController.java

@@ -0,0 +1,93 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CartEntity;
+import com.kmall.admin.service.CartService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:06
+ */
+@RestController
+@RequestMapping("cart")
+public class CartController {
+	@Autowired
+	private CartService cartService;
+	
+	/**
+	 * 列表
+	 */
+	@RequestMapping("/list")
+	@RequiresPermissions("cart:list")
+	public R list(@RequestParam Map<String, Object> params){
+		ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+		//查询列表数据
+        Query query = new Query(params);
+
+		List<CartEntity> cartList = cartService.queryList(query);
+		int total = cartService.queryTotal(query);
+		
+		PageUtils pageUtil = new PageUtils(cartList, total, query.getLimit(), query.getPage());
+		
+		return R.ok().put("page", pageUtil);
+	}
+	
+	
+	/**
+	 * 信息
+	 */
+	@RequestMapping("/info/{id}")
+	@RequiresPermissions("cart:info")
+	public R info(@PathVariable("id") Integer id){
+		CartEntity cart = cartService.queryObject(id);
+		
+		return R.ok().put("cart", cart);
+	}
+	
+	/**
+	 * 保存
+	 */
+	@RequestMapping("/save")
+	@RequiresPermissions("cart:save")
+	public R save(@RequestBody CartEntity cart){
+		cartService.save(cart);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 修改
+	 */
+	@RequestMapping("/update")
+	@RequiresPermissions("cart:update")
+	public R update(@RequestBody CartEntity cart){
+		cartService.update(cart);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 删除
+	 */
+	@RequestMapping("/delete")
+	@RequiresPermissions("cart:delete")
+	public R delete(@RequestBody Integer[] ids){
+		cartService.deleteBatch(ids);
+		
+		return R.ok();
+	}
+	
+}

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

@@ -0,0 +1,204 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.dto.CopyCategoryDto;
+import com.kmall.admin.dto.StoreDto;
+import com.kmall.admin.dto.StoreIdDto;
+import com.kmall.admin.entity.CategoryEntity;
+import com.kmall.admin.service.CategoryService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-21 15:32:31
+ */
+@RestController
+@RequestMapping("category")
+public class CategoryController {
+    @Autowired
+    private CategoryService categoryService;
+    @Autowired
+    private ExcelUtil excelUtil;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("category:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "categoryName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<CategoryEntity> categoryList = categoryService.queryList(query);
+        int total = categoryService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(categoryList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("category:info")
+    public R info(@PathVariable("id") Integer id) {
+        CategoryEntity category = categoryService.queryObject(id);
+
+        return R.ok().put("category", category);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("category:save")
+    public R save(@RequestBody CategoryEntity category) {
+        categoryService.save(category);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("category:update")
+    public R update(@RequestBody CategoryEntity category) {
+        categoryService.update(category);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("category:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        categoryService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "categoryName");
+
+        List<CategoryEntity> list = categoryService.queryList(params);
+        //添加顶级菜单
+//        CategoryEntity root = new CategoryEntity();
+//        root.setId(0);
+//        root.setName("一级分类");
+//        root.setParentId(-1);
+//        root.setOpen(true);
+//        list.add(root);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查看信息(全部加载页面渲染太慢!)
+     */
+    @RequestMapping("/getAreaTree")
+    public R getAreaTree() {
+
+        Map<String, Object> map = new HashMap<>();
+        ParamUtils.setQueryPowerByRoleType(map, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<CategoryEntity> list = categoryService.queryList(map);
+        for (CategoryEntity sysRegionEntity : list) {
+            sysRegionEntity.setValue(sysRegionEntity.getId() + "");
+            sysRegionEntity.setLabel(sysRegionEntity.getName());
+        }
+        List<CategoryEntity> node = TreeUtils.factorTree(list);
+
+        return R.ok().put("node", node);
+    }
+
+    /**
+     * 查询
+     *
+     * @return
+     */
+    @RequestMapping("/getCategorySelect")
+    public R getCategorySelect(@RequestParam Map<String, Object> map) {
+        map.put("parentId", "0");
+        ParamUtils.setQueryPowerByRoleType(map, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<CategoryEntity> list = categoryService.queryList(map);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查询
+     *
+     * @return
+     */
+    @RequestMapping("/getCategorySelectByParent")
+    public R getCategorySelectByParent(@RequestParam Map<String, Object> map) {
+        String parentId = map.get("parentId").toString();
+        List<CategoryEntity> list = new ArrayList<>();
+        if (StringUtils.isNotEmpty(parentId)) {
+            ParamUtils.setQueryPowerByRoleType(map, "storeId", "merchSn", "thirdPartyMerchCode");
+
+            list = categoryService.queryList(map);
+        }
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/query")
+    public R query(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        params.put("isShow", 1);
+        List<CategoryEntity> list = categoryService.queryList(params);
+        //添加顶级菜单
+        CategoryEntity root = new CategoryEntity();
+        root.setId(0);
+        root.setName("一级分类");
+        root.setParentId(-1);
+        root.setOpen(true);
+        list.add(root);
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/getCategory")
+    public R getCategory(@RequestParam Map<String, Object> map) {
+        ParamUtils.setQueryPowerByRoleType(map, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<CategoryEntity> list = categoryService.queryList(map);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyCategory")
+//    @RequiresPermissions("category:saveCopyCategory")
+    public R saveCopyCategory(@RequestBody CopyCategoryDto copyCategoryDto) {
+        categoryService.saveCopyCategory(copyCategoryDto);
+        return R.ok();
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ChannelController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.ChannelEntity;
+import com.kmall.admin.service.ChannelService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-22 19:19:56
+ */
+@RestController
+@RequestMapping("channel")
+public class ChannelController {
+    @Autowired
+    private ChannelService channelService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("channel:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ChannelEntity> channelList = channelService.queryList(query);
+        int total = channelService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(channelList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("channel:info")
+    public R info(@PathVariable("id") Integer id) {
+        ChannelEntity channel = channelService.queryObject(id);
+
+        return R.ok().put("channel", channel);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("channel:save")
+    public R save(@RequestBody ChannelEntity channel) {
+        channelService.save(channel);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("channel:update")
+    public R update(@RequestBody ChannelEntity channel) {
+        channelService.update(channel);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("channel:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        channelService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<ChannelEntity> list = channelService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 94 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CollectController.java

@@ -0,0 +1,94 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CollectEntity;
+import com.kmall.admin.service.CollectService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:06
+ */
+@RestController
+@RequestMapping("collect")
+public class CollectController {
+	@Autowired
+	private CollectService collectService;
+	
+	/**
+	 * 列表
+	 */
+	@RequestMapping("/list")
+	@RequiresPermissions("collect:list")
+	public R list(@RequestParam Map<String, Object> params){
+
+		ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+		//查询列表数据
+        Query query = new Query(params);
+
+		List<CollectEntity> collectList = collectService.queryList(query);
+		int total = collectService.queryTotal(query);
+		
+		PageUtils pageUtil = new PageUtils(collectList, total, query.getLimit(), query.getPage());
+		
+		return R.ok().put("page", pageUtil);
+	}
+	
+	
+	/**
+	 * 信息
+	 */
+	@RequestMapping("/info/{id}")
+	@RequiresPermissions("collect:info")
+	public R info(@PathVariable("id") Integer id){
+		CollectEntity collect = collectService.queryObject(id);
+		
+		return R.ok().put("collect", collect);
+	}
+	
+	/**
+	 * 保存
+	 */
+	@RequestMapping("/save")
+	@RequiresPermissions("collect:save")
+	public R save(@RequestBody CollectEntity collect){
+		collectService.save(collect);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 修改
+	 */
+	@RequestMapping("/update")
+	@RequiresPermissions("collect:update")
+	public R update(@RequestBody CollectEntity collect){
+		collectService.update(collect);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 删除
+	 */
+	@RequestMapping("/delete")
+	@RequiresPermissions("collect:delete")
+	public R delete(@RequestBody Integer[] ids){
+		collectService.deleteBatch(ids);
+		
+		return R.ok();
+	}
+	
+}

+ 135 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CommentController.java

@@ -0,0 +1,135 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CommentEntity;
+import com.kmall.admin.service.CommentService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-28 17:03:40
+ */
+@RestController
+@RequestMapping("comment")
+public class CommentController {
+    @Autowired
+    private CommentService commentService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("comment:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "valueName");
+        ParamUtils.setName(params, "userName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<CommentEntity> commentList = commentService.queryList(query);
+        int total = commentService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(commentList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("comment:info")
+    public R info(@PathVariable("id") Integer id) {
+        CommentEntity comment = commentService.queryObject(id);
+
+        return R.ok().put("comment", comment);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("comment:save")
+    public R save(@RequestBody CommentEntity comment) {
+        commentService.save(comment);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("comment:update")
+    public R update(@RequestBody CommentEntity comment) {
+        commentService.update(comment);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("comment:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        commentService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<CommentEntity> list = commentService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 修改状态
+     */
+    @RequestMapping("/toggleStatus")
+    @RequiresPermissions("comment:toggleStatus")
+    public R toggleStatus(@RequestBody CommentEntity comment) {
+        commentService.toggleStatus(comment);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改状态
+     */
+    @RequestMapping("/toggleStatusBatch")
+    @RequiresPermissions("comment:toggleStatus")
+    public R toggleStatusBatch(@RequestBody Integer[] ids) {
+        commentService.toggleStatusBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        int sum = commentService.queryTotal(params);
+
+        return R.ok().put("sum", sum);
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CommentPictureController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CommentPictureEntity;
+import com.kmall.admin.service.CommentPictureService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 评价图片Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-29 14:45:55
+ */
+@RestController
+@RequestMapping("commentpicture")
+public class CommentPictureController {
+    @Autowired
+    private CommentPictureService commentPictureService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("commentpicture:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<CommentPictureEntity> commentPictureList = commentPictureService.queryList(query);
+        int total = commentPictureService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(commentPictureList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("commentpicture:info")
+    public R info(@PathVariable("id") Integer id) {
+        CommentPictureEntity commentPicture = commentPictureService.queryObject(id);
+
+        return R.ok().put("commentPicture", commentPicture);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("commentpicture:save")
+    public R save(@RequestBody CommentPictureEntity commentPicture) {
+        commentPictureService.save(commentPicture);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("commentpicture:update")
+    public R update(@RequestBody CommentPictureEntity commentPicture) {
+        commentPictureService.update(commentPicture);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("commentpicture:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        commentPictureService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<CommentPictureEntity> list = commentPictureService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 136 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CouponController.java

@@ -0,0 +1,136 @@
+/*
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CouponEntity;
+import com.kmall.admin.service.CouponService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+*/
+/**
+ * 优惠券Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 12:53:26
+ *//*
+
+@RestController
+@RequestMapping("coupon")
+public class CouponController {
+    @Autowired
+    private CouponService couponService;
+
+    */
+/**
+     * 查看列表
+     *//*
+
+    @RequestMapping("/list")
+    @RequiresPermissions("coupon:list")
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<CouponEntity> couponList = couponService.queryList(query);
+        int total = couponService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(couponList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    */
+/**
+     * 查看信息
+     *//*
+
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("coupon:info")
+    public R info(@PathVariable("id") Integer id) {
+        CouponEntity coupon = couponService.queryObject(id);
+
+        return R.ok().put("coupon", coupon);
+    }
+
+    */
+/**
+     * 保存
+     *//*
+
+    @RequestMapping("/save")
+    @RequiresPermissions("coupon:save")
+    public R save(@RequestBody CouponEntity coupon) {
+        couponService.save(coupon);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 修改
+     *//*
+
+    @RequestMapping("/update")
+    @RequiresPermissions("coupon:update")
+    public R update(@RequestBody CouponEntity coupon) {
+        couponService.update(coupon);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 删除
+     *//*
+
+    @RequestMapping("/delete")
+    @RequiresPermissions("coupon:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        couponService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 查看所有列表
+     *//*
+
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<CouponEntity> list = couponService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    */
+/**
+     * 按用户、商品下发优惠券
+     *
+     * @param params
+     * @return
+     *//*
+
+    @RequiresPermissions("coupon:publish")
+    @RequestMapping(value = "publish", method = RequestMethod.POST)
+    public R publish(@RequestBody Map<String, Object> params) {
+        return couponService.publish(params);
+    }
+}
+*/

+ 115 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/CouponGoodsController.java

@@ -0,0 +1,115 @@
+/*
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.CouponGoodsEntity;
+import com.kmall.admin.service.CouponGoodsService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+*/
+/**
+ * 优惠券关联商品Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-29 21:50:17
+ *//*
+
+@RestController
+@RequestMapping("coupongoods")
+public class CouponGoodsController {
+    @Autowired
+    private CouponGoodsService couponGoodsService;
+
+    */
+/**
+     * 查看列表
+     *//*
+
+    @RequestMapping("/list")
+    @RequiresPermissions("coupongoods:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<CouponGoodsEntity> couponGoodsList = couponGoodsService.queryList(query);
+        int total = couponGoodsService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(couponGoodsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    */
+/**
+     * 查看信息
+     *//*
+
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("coupongoods:info")
+    public R info(@PathVariable("id") Integer id) {
+        CouponGoodsEntity couponGoods = couponGoodsService.queryObject(id);
+
+        return R.ok().put("couponGoods", couponGoods);
+    }
+
+    */
+/**
+     * 保存
+     *//*
+
+    @RequestMapping("/save")
+    @RequiresPermissions("coupongoods:save")
+    public R save(@RequestBody CouponGoodsEntity couponGoods) {
+        couponGoodsService.save(couponGoods);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 修改
+     *//*
+
+    @RequestMapping("/update")
+    @RequiresPermissions("coupongoods:update")
+    public R update(@RequestBody CouponGoodsEntity couponGoods) {
+        couponGoodsService.update(couponGoods);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 删除
+     *//*
+
+    @RequestMapping("/delete")
+    @RequiresPermissions("coupongoods:delete")
+    public R delete(@RequestBody Integer[]ids) {
+        couponGoodsService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    */
+/**
+     * 查看所有列表
+     *//*
+
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<CouponGoodsEntity> list = couponGoodsService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}
+*/

+ 75 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ExportExceptionDataController.java

@@ -0,0 +1,75 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.ExportExceptionDataEntity;
+import com.kmall.admin.service.ExportExceptionDataService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.admin.utils.ShiroUtils;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-12-07 09:41:15
+ */
+@Controller
+@RequestMapping("exportexceptiondata")
+public class ExportExceptionDataController {
+    @Autowired
+    private ExportExceptionDataService exportExceptionDataService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("exportexceptiondata:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ExportExceptionDataEntity> exportExceptionDataList = exportExceptionDataService.queryList(query);
+        int total = exportExceptionDataService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(exportExceptionDataList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("exportexceptiondata:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        ExportExceptionDataEntity exportExceptionData = exportExceptionDataService.queryObject(id);
+
+        return R.ok().put("exportExceptionData", exportExceptionData);
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<ExportExceptionDataEntity> list = exportExceptionDataService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 104 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/FeedbackController.java

@@ -0,0 +1,104 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.FeedbackEntity;
+import com.kmall.admin.service.FeedbackService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.admin.utils.ShiroUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-23 15:03:25
+ */
+@RestController
+@RequestMapping("feedback")
+public class FeedbackController {
+    @Autowired
+    private FeedbackService feedbackService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("feedback:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<FeedbackEntity> feedbackList = feedbackService.queryList(query);
+        int total = feedbackService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(feedbackList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{msgId}")
+    @RequiresPermissions("feedback:info")
+    public R info(@PathVariable("msgId") Integer msgId) {
+        FeedbackEntity feedback = feedbackService.queryObject(msgId);
+
+        return R.ok().put("feedback", feedback);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("feedback:save")
+    public R save(@RequestBody FeedbackEntity feedback) {
+        feedbackService.save(feedback);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("feedback:update")
+    public R update(@RequestBody FeedbackEntity feedback) {
+        feedbackService.update(feedback);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("feedback:delete")
+    public R delete(@RequestBody Integer[]msgIds) {
+        feedbackService.deleteBatch(msgIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<FeedbackEntity> list = feedbackService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 102 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/FootprintController.java

@@ -0,0 +1,102 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.FootprintEntity;
+import com.kmall.admin.service.FootprintService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:08
+ */
+@RestController
+@RequestMapping("footprint")
+public class FootprintController {
+    @Autowired
+    private FootprintService footprintService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("footprint:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<FootprintEntity> footprintList = footprintService.queryList(query);
+        int total = footprintService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(footprintList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("footprint:info")
+    public R info(@PathVariable("id") Integer id) {
+        FootprintEntity footprint = footprintService.queryObject(id);
+
+        return R.ok().put("footprint", footprint);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("footprint:save")
+    public R save(@RequestBody FootprintEntity footprint) {
+        footprintService.save(footprint);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("footprint:update")
+    public R update(@RequestBody FootprintEntity footprint) {
+        footprintService.update(footprint);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("footprint:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        footprintService.deleteBatch(ids);
+
+        return R.ok();
+    }
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int hitCount = footprintService.queryTotal(params);
+
+        return R.ok().put("hitCount", hitCount);
+    }
+
+}

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

@@ -0,0 +1,155 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.CopyFreightDto;
+import com.kmall.admin.entity.FreightEntity;
+import com.kmall.admin.entity.FreightItemEntity;
+import com.kmall.admin.service.FreightService;
+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.web.bind.annotation.*;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-21 21:19:49
+ */
+@RestController
+@RequestMapping("freight")
+public class FreightController {
+    @Autowired
+    private FreightService freightService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("freight:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<FreightEntity> freightList = freightService.queryList(query);
+        int total = freightService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(freightList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("freight:info")
+    public R info(@PathVariable("id") Integer id) {
+        FreightEntity freight = freightService.queryObject(id);
+
+        return R.ok().put("freight", freight);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("freight:save")
+    public R save(@RequestBody FreightEntity freight) {
+
+        if (freight.getFreightItemEntityList() == null || freight.getFreightItemEntityList().size() == 0) {
+            throw new RRException("配送区域及运费不能为空");
+        }
+
+        for (FreightItemEntity freightItemEntity : freight.getFreightItemEntityList()) {
+            if (freightItemEntity != null) {
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(freightItemEntity);
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("firstPiece", "首件");
+                builder.put("freight", "运费");
+                builder.put("continuePiece", "续件");
+                builder.put("renew", "续费");
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+            }
+        }
+
+
+        freightService.save(freight);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("freight:update")
+    public R update(@RequestBody FreightEntity freight) {
+
+        if (freight.getFreightItemEntityList() == null || freight.getFreightItemEntityList().size() == 0) {
+            throw new RRException("配送区域及运费不能为空");
+        }
+
+        for (FreightItemEntity freightItemEntity : freight.getFreightItemEntityList()) {
+            if (freightItemEntity != null) {
+                Map<String, Object> valideDate = MapBeanUtil.fromObject(freightItemEntity);
+                ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+                builder.put("firstPiece", "首件");
+                builder.put("freight", "运费");
+                builder.put("continuePiece", "续件");
+                builder.put("renew", "续费");
+                R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+                if (Integer.valueOf(r.get("code").toString()) != 0) {
+                    throw new RRException(r.get("msg").toString());
+                }
+            }
+        }
+
+        freightService.update(freight);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("freight:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        freightService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<FreightEntity> list = freightService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/saveCopyFreight")
+//    @RequiresPermissions("freight:saveCopyFreight")
+    public R saveCopyFreight(@RequestBody CopyFreightDto copyFreightDto) {
+        freightService.saveCopyFreight(copyFreightDto);
+        return R.ok();
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/FreightItemController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.FreightItemEntity;
+import com.kmall.admin.service.FreightItemService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-10-22 15:18:16
+ */
+@Controller
+@RequestMapping("freightitem")
+public class FreightItemController {
+    @Autowired
+    private FreightItemService freightItemService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("freightitem:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<FreightItemEntity> freightItemList = freightItemService.queryList(query);
+        int total = freightItemService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(freightItemList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("freightitem:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        FreightItemEntity freightItem = freightItemService.queryObject(id);
+
+        return R.ok().put("freightItem", freightItem);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("freightitem:save")
+    @ResponseBody
+    public R save(@RequestBody FreightItemEntity freightItem) {
+        freightItemService.save(freightItem);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("freightitem:update")
+    @ResponseBody
+    public R update(@RequestBody FreightItemEntity freightItem) {
+        freightItemService.update(freightItem);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("freightitem:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        freightItemService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<FreightItemEntity> list = freightItemService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 91 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsAttributeController.java

@@ -0,0 +1,91 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.GoodsAttributeEntity;
+import com.kmall.admin.service.GoodsAttributeService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:08
+ */
+@RestController
+@RequestMapping("goodsattribute")
+public class GoodsAttributeController {
+	@Autowired
+	private GoodsAttributeService goodsAttributeService;
+	
+	/**
+	 * 列表
+	 */
+	@RequestMapping("/list")
+	@RequiresPermissions("goodsattribute:list")
+	public R list(@RequestParam Map<String, Object> params){
+		//查询列表数据
+        Query query = new Query(params);
+
+		List<GoodsAttributeEntity> goodsAttributeList = goodsAttributeService.queryList(query);
+		int total = goodsAttributeService.queryTotal(query);
+		
+		PageUtils pageUtil = new PageUtils(goodsAttributeList, total, query.getLimit(), query.getPage());
+		
+		return R.ok().put("page", pageUtil);
+	}
+	
+	
+	/**
+	 * 信息
+	 */
+	@RequestMapping("/info/{id}")
+	@RequiresPermissions("goodsattribute:info")
+	public R info(@PathVariable("id") Integer id){
+		GoodsAttributeEntity goodsAttribute = goodsAttributeService.queryObject(id);
+		
+		return R.ok().put("goodsAttribute", goodsAttribute);
+	}
+	
+	/**
+	 * 保存
+	 */
+	@RequestMapping("/save")
+	@RequiresPermissions("goodsattribute:save")
+	public R save(@RequestBody GoodsAttributeEntity goodsAttribute){
+		goodsAttributeService.save(goodsAttribute);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 修改
+	 */
+	@RequestMapping("/update")
+	@RequiresPermissions("goodsattribute:update")
+	public R update(@RequestBody GoodsAttributeEntity goodsAttribute){
+		goodsAttributeService.update(goodsAttribute);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 删除
+	 */
+	@RequestMapping("/delete")
+	@RequiresPermissions("goodsattribute:delete")
+	public R delete(@RequestBody Integer[] ids){
+		goodsAttributeService.deleteBatch(ids);
+		
+		return R.ok();
+	}
+	
+}

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

@@ -0,0 +1,305 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.dto.GoodsDetailsDto;
+import com.kmall.admin.dto.GoodsDto;
+import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.entity.GoodsGalleryEntity;
+import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.service.GoodsGalleryService;
+import com.kmall.admin.service.GoodsService;
+import com.kmall.admin.service.OfflineCartService;
+import com.kmall.admin.service.StoreService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-21 21:19:49
+ */
+@RestController
+@RequestMapping("goods")
+public class GoodsController {
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private GoodsGalleryService goodsGalleryService;
+    @Autowired
+    private OfflineCartService offlineCartService;
+    @Autowired
+    private ExcelUtil excelUtil;
+    @Autowired
+    private StoreService storeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goods:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        query.put("isDelete", 0);
+        List<GoodsEntity> goodsList = goodsService.queryList(query);
+        int total = goodsService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goods:info")
+    public R info(@PathVariable("id") Integer id) {
+        GoodsEntity goods = goodsService.queryObject(id);
+        if(goods != null) {
+            GoodsGalleryEntity goodsGalleryEntity =goodsGalleryService.queryVideoObjectByGoodId(goods.getId());
+            if(goodsGalleryEntity != null){
+                goods.setVideoUrl(goodsGalleryEntity.getImgUrl());
+            }
+        }
+        return R.ok().put("goods", goods);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goods:save")
+    public R save(@RequestBody GoodsEntity goods) {
+        goodsService.save(goods);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goods:update")
+    public R update(@RequestBody GoodsEntity goods) {
+        goodsService.update(goods);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goods:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        goodsService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        params.put("isDelete", Integer.parseInt(Dict.isDelete.item_0.getItem()));
+        params.put("isOnSale", Integer.parseInt(Dict.isOnSale.item_1.getItem()));
+        List<GoodsEntity> list = goodsService.queryList(params);
+        return R.ok().put("list", list);
+    }
+
+
+    /**
+     * 商品回收站
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping("/historyList")
+    public R historyList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        query.put("isDelete", 1);
+        List<GoodsEntity> goodsList = goodsService.queryList(query);
+        int total = goodsService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 商品从回收站恢复
+     */
+    @RequestMapping("/back")
+    @RequiresPermissions("goods:back")
+    public R back(@RequestBody Integer[] ids) {
+        goodsService.back(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        params.put("isDelete", 0);
+        int sum = goodsService.queryTotal(params);
+        return R.ok().put("goodsSum", sum);
+    }
+
+    /**
+     * 上架
+     */
+    @RequestMapping("/enSale")
+    public R enSale(@RequestBody Integer id) {
+        goodsService.enSale(id);
+
+        return R.ok();
+    }
+
+    /**
+     * 上架
+     */
+    @RequestMapping("/enSaleBatch")
+    public R enSaleBatch(@RequestBody Integer[] ids) {
+        goodsService.enSaleBatch(ids);
+
+        return R.ok();
+    }
+
+
+    /**
+     * 下架
+     */
+    @RequestMapping("/unSale")
+    public R unSale(@RequestBody Integer id) {
+        goodsService.unSale(id);
+
+        return R.ok();
+    }
+
+    /**
+     * 下架
+     */
+    @RequestMapping("/unSaleBatch")
+    public R unSaleBatch(@RequestBody Integer[] ids) {
+        goodsService.unSaleBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/upload")
+    public R upload(@RequestParam("file") MultipartFile file) {
+        List<GoodsDto> goodsDtoList = new ArrayList<>();//商品信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("GoodsDtoList", goodsDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.GOODS_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        goodsService.uploadExcel(goodsDtoList,Integer.parseInt(Dict.exportDataType.item_1.getItem()));
+        //上传文件
+        return R.ok();
+    }
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/generalGoodsUpload")
+    public R generalGoodsUpload(@RequestParam("file") MultipartFile file) {
+        List<GoodsDto> generalGoodsDtoList = new ArrayList<>();//商品信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("GeneralGoodsDtoList", generalGoodsDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.GENERAL_GOODS_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        goodsService.uploadExcel(generalGoodsDtoList,Integer.parseInt(Dict.exportDataType.item_2.getItem()));
+        //上传文件
+        return R.ok();
+    }
+
+    /*@RequestMapping("/scannInfo")
+    @RequiresPermissions("goods:scannInfo")
+    public R scannInfo(@RequestParam Map<String, Object> params) {
+        String goodsSn = (String)params.get("goodsSn");
+        GoodsEntity goods = goodsService.queryObjectByGoodsSnAndBizType(goodsSn);
+        if(goods == null) {
+            return R.error("商品信息不存在");
+        }
+        List<OfflineCartEntity> cartEntityList = offlineCartService.offlineGoodsCart(goods);
+
+        return R.ok().put("cartEntityList", cartEntityList);
+    }*/
+    @RequestMapping("/scannInfo/{prodBarcode}")
+    @RequiresPermissions("goods:scannInfo")
+    public R scannInfo(@PathVariable("prodBarcode")String prodBarcode) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user == null) {
+            return R.error("用户登录超时,请重新登录");
+        }
+        if (!user.getRoleType().equalsIgnoreCase("2")) {
+            return R.error("该操作只允许店员账户操作");
+        }
+        GoodsEntity goods = goodsService.queryObjectByProdBarcodeAndBizType(prodBarcode, user.getStoreId());
+        if(goods == null) {
+            return R.error("商品信息不存在");
+        }
+        return R.ok().put("goods", goods);
+    }
+
+    @RequestMapping("/details/{prodBarcode}")
+//    @RequiresPermissions("goods:details") http://127.0.0.1:8080/goods/details/11111
+    public R details(@PathVariable("prodBarcode")String prodBarcode) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user == null) {
+            return R.error("用户登录超时,请重新登录");
+        }
+        if (!user.getRoleType().equalsIgnoreCase("2")) {
+            return R.error("该操作只允许店员账户操作");
+        }
+        GoodsDetailsDto goods = goodsService.queryGoodsDetailsByProdBarcode(prodBarcode);
+        if(goods == null) {
+            return R.error("商品信息不存在");
+        }
+        return R.ok().put("goodsDetails", goods);
+    }
+
+
+
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGalleryController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.GoodsGalleryEntity;
+import com.kmall.admin.service.GoodsGalleryService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-23 14:41:43
+ */
+@RestController
+@RequestMapping("goodsgallery")
+public class GoodsGalleryController {
+    @Autowired
+    private GoodsGalleryService goodsGalleryService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goodsgallery:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<GoodsGalleryEntity> goodsGalleryList = goodsGalleryService.queryList(query);
+        int total = goodsGalleryService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsGalleryList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goodsgallery:info")
+    public R info(@PathVariable("id") Integer id) {
+        GoodsGalleryEntity goodsGallery = goodsGalleryService.queryObject(id);
+
+        return R.ok().put("goodsGallery", goodsGallery);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goodsgallery:save")
+    public R save(@RequestBody GoodsGalleryEntity goodsGallery) {
+        goodsGalleryService.save(goodsGallery);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goodsgallery:update")
+    public R update(@RequestBody GoodsGalleryEntity goodsGallery) {
+        goodsGalleryService.update(goodsGallery);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goodsgallery:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        goodsGalleryService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        params.put("fileType","0");
+        List<GoodsGalleryEntity> list = goodsGalleryService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGroupController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.GoodsGroupEntity;
+import com.kmall.admin.service.GoodsGroupService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-10-24 09:51:21
+ */
+@Controller
+@RequestMapping("goodsgroup")
+public class GoodsGroupController {
+    @Autowired
+    private GoodsGroupService goodsGroupService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goodsgroup:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<GoodsGroupEntity> goodsGroupList = goodsGroupService.queryList(query);
+        int total = goodsGroupService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsGroupList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goodsgroup:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        GoodsGroupEntity goodsGroup = goodsGroupService.queryObject(id);
+
+        return R.ok().put("goodsGroup", goodsGroup);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goodsgroup:save")
+    @ResponseBody
+    public R save(@RequestBody GoodsGroupEntity goodsGroup) {
+        goodsGroupService.save(goodsGroup);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goodsgroup:update")
+    @ResponseBody
+    public R update(@RequestBody GoodsGroupEntity goodsGroup) {
+        goodsGroupService.update(goodsGroup);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goodsgroup:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] ids) {
+        goodsGroupService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<GoodsGroupEntity> list = goodsGroupService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 121 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsGroupOpenController.java

@@ -0,0 +1,121 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.GoodsGroupOpenEntity;
+import com.kmall.admin.service.GoodsGroupOpenService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-10-23 22:06:59
+ */
+@Controller
+@RequestMapping("goodsgroupopen")
+public class GoodsGroupOpenController {
+    @Autowired
+    private GoodsGroupOpenService goodsGroupOpenService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goodsgroupopen:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<GoodsGroupOpenEntity> goodsGroupOpenList = goodsGroupOpenService.queryList(query);
+        int total = goodsGroupOpenService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsGroupOpenList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goodsgroupopen:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Long id) {
+        GoodsGroupOpenEntity goodsGroupOpen = goodsGroupOpenService.queryObject(id);
+
+        return R.ok().put("goodsGroupOpen", goodsGroupOpen);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goodsgroupopen:save")
+    @ResponseBody
+    public R save(@RequestBody GoodsGroupOpenEntity goodsGroupOpen) {
+        goodsGroupOpenService.save(goodsGroupOpen);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goodsgroupopen:update")
+    @ResponseBody
+    public R update(@RequestBody GoodsGroupOpenEntity goodsGroupOpen) {
+        goodsGroupOpenService.update(goodsGroupOpen);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goodsgroupopen:delete")
+    @ResponseBody
+    public R delete(@RequestBody Long[] ids) {
+        goodsGroupOpenService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<GoodsGroupOpenEntity> list = goodsGroupOpenService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 取消团购订单
+     */
+    @RequestMapping("/cancelGroup")
+    @RequiresPermissions("goodsgroupopen:update")
+    @ResponseBody
+    public R cancelGroup(@RequestBody Integer id) {
+        int result = goodsGroupOpenService.cancelGroup(id);
+        if (result == 0) {
+            return R.error("取消失败");
+        }
+        return R.ok();
+    }
+
+}

+ 118 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsIssueController.java

@@ -0,0 +1,118 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.GoodsIssueEntity;
+import com.kmall.admin.service.GoodsIssueService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-23 14:12:34
+ */
+@RestController
+@RequestMapping("goodsissue")
+public class GoodsIssueController {
+    @Autowired
+    private GoodsIssueService goodsIssueService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goodsissue:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+        List<GoodsIssueEntity> goodsIssueList = goodsIssueService.queryList(query);
+        int total = goodsIssueService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsIssueList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goodsissue:info")
+    public R info(@PathVariable("id") Integer id) {
+        GoodsIssueEntity goodsIssue = goodsIssueService.queryObject(id);
+
+        return R.ok().put("goodsIssue", goodsIssue);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goodsissue:save")
+    public R save(@RequestBody GoodsIssueEntity goodsIssue) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(goodsIssue);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        goodsIssueService.save(goodsIssue);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goodsissue:update")
+    public R update(@RequestBody GoodsIssueEntity goodsIssue) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(goodsIssue);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        goodsIssueService.update(goodsIssue);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goodsissue:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        goodsIssueService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<GoodsIssueEntity> list = goodsIssueService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 119 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsSpecificationController.java

@@ -0,0 +1,119 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.Maps;
+import com.kmall.admin.entity.GoodsSpecificationEntity;
+import com.kmall.admin.entity.SpecificationEntity;
+import com.kmall.admin.service.GoodsSpecificationService;
+import com.kmall.admin.service.SpecificationService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 商品对应规格表值表Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-31 11:15:55
+ */
+@RestController
+@RequestMapping("goodsspecification")
+public class GoodsSpecificationController {
+    @Autowired
+    private GoodsSpecificationService goodsSpecificationService;
+    @Autowired
+    private SpecificationService specificationService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("goodsspecification:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<GoodsSpecificationEntity> goodsSpecificationList = goodsSpecificationService.queryList(query);
+        int total = goodsSpecificationService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(goodsSpecificationList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("goodsspecification:info")
+    public R info(@PathVariable("id") Integer id) {
+        GoodsSpecificationEntity goodsSpecification = goodsSpecificationService.queryObject(id);
+
+        return R.ok().put("goodsSpecification", goodsSpecification);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("goodsspecification:save")
+    public R save(@RequestBody GoodsSpecificationEntity goodsSpecification) {
+        goodsSpecificationService.save(goodsSpecification);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("goodsspecification:update")
+    public R update(@RequestBody GoodsSpecificationEntity goodsSpecification) {
+        goodsSpecificationService.update(goodsSpecification);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("goodsspecification:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        goodsSpecificationService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        List<GoodsSpecificationEntity> list = goodsSpecificationService.queryList(params);
+        List<Integer> goodsSpecificationIds = new ArrayList();
+        if (null != list) {
+            for (GoodsSpecificationEntity specificationEntity : list) {
+                if (!goodsSpecificationIds.contains(specificationEntity.getSpecificationId())) {
+                    goodsSpecificationIds.add(specificationEntity.getSpecificationId());
+                }
+            }
+        }
+        Map param = Maps.newHashMap();
+        param.put("ids", goodsSpecificationIds);
+        List<SpecificationEntity> specificationEntityList = specificationService.queryList(param);
+        Collections.sort(specificationEntityList, new Comparator<SpecificationEntity>() {
+            @Override
+            public int compare(SpecificationEntity o1, SpecificationEntity o2) {
+                return o1.getSortOrder().compareTo(o2.getSortOrder());
+            }
+        });
+        return R.ok().put("list", list).put("specificationEntityList", specificationEntityList);
+    }
+
+}

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

@@ -0,0 +1,128 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.HelpIssueEntity;
+import com.kmall.admin.service.HelpIssueService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.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.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-01 21:09:54
+ */
+@Controller
+@RequestMapping("helpissue")
+public class HelpIssueController {
+    @Autowired
+    private HelpIssueService helpIssueService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("helpissue:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<HelpIssueEntity> helpIssueList = helpIssueService.queryList(query);
+        int total = helpIssueService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(helpIssueList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("helpissue:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        HelpIssueEntity helpIssue = helpIssueService.queryObject(id);
+
+        return R.ok().put("helpIssue", helpIssue);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("helpissue:save")
+    @ResponseBody
+    public R save(@RequestBody HelpIssueEntity helpIssue) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(helpIssue);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        builder.put("typeId", "问题分类");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        helpIssueService.save(helpIssue);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("helpissue:update")
+    @ResponseBody
+    public R update(@RequestBody HelpIssueEntity helpIssue) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(helpIssue);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeId", "门店");
+        builder.put("typeId", "问题分类");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        helpIssueService.update(helpIssue);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("helpissue:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        helpIssueService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<HelpIssueEntity> list = helpIssueService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/HelpTypeController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.HelpTypeEntity;
+import com.kmall.admin.service.HelpTypeService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-01 21:09:55
+ */
+@Controller
+@RequestMapping("helptype")
+public class HelpTypeController {
+    @Autowired
+    private HelpTypeService helpTypeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("helptype:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<HelpTypeEntity> helpTypeList = helpTypeService.queryList(query);
+        int total = helpTypeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(helpTypeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("helptype:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        HelpTypeEntity helpType = helpTypeService.queryObject(id);
+
+        return R.ok().put("helpType", helpType);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("helptype:save")
+    @ResponseBody
+    public R save(@RequestBody HelpTypeEntity helpType) {
+        helpTypeService.save(helpType);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("helptype:update")
+    @ResponseBody
+    public R update(@RequestBody HelpTypeEntity helpType) {
+        helpTypeService.update(helpType);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("helptype:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        helpTypeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<HelpTypeEntity> list = helpTypeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/KeywordsController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.KeywordsEntity;
+import com.kmall.admin.service.KeywordsService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 热闹关键词表Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-25 21:23:41
+ */
+@RestController
+@RequestMapping("keywords")
+public class KeywordsController {
+    @Autowired
+    private KeywordsService keywordsService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("keywords:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<KeywordsEntity> keywordsList = keywordsService.queryList(query);
+        int total = keywordsService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(keywordsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("keywords:info")
+    public R info(@PathVariable("id") Integer id) {
+        KeywordsEntity keywords = keywordsService.queryObject(id);
+
+        return R.ok().put("keywords", keywords);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("keywords:save")
+    public R save(@RequestBody KeywordsEntity keywords) {
+        keywordsService.save(keywords);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("keywords:update")
+    public R update(@RequestBody KeywordsEntity keywords) {
+        keywordsService.update(keywords);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("keywords:delete")
+    public R delete(@RequestBody Integer[]ids) {
+        keywordsService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<KeywordsEntity> list = keywordsService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

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

@@ -0,0 +1,111 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.MerchEntity;
+import com.kmall.admin.service.MerchService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-12-06 09:41:34
+ */
+@Controller
+@RequestMapping("merch")
+public class MerchController {
+    @Autowired
+    private MerchService merchService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("merch:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "roleMerchSn", null);
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MerchEntity> merchList = merchService.queryList(query);
+        int total = merchService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(merchList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("merch:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MerchEntity merch = merchService.queryObject(id);
+
+        return R.ok().put("merch", merch);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("merch:save")
+    @ResponseBody
+    public R save(@RequestBody MerchEntity merch) {
+        merchService.save(merch);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("merch:update")
+    @ResponseBody
+    public R update(@RequestBody MerchEntity merch) {
+        merchService.update(merch);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("merch:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] ids) {
+        merchService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "roleMerchSn", null);
+
+        List<MerchEntity> list = merchService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 109 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/MngChangeController.java

@@ -0,0 +1,109 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.MngChangeEntity;
+import com.kmall.admin.service.MngChangeService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-03-11 10:29:49
+ */
+@Controller
+@RequestMapping("mngchange")
+public class MngChangeController {
+    @Autowired
+    private MngChangeService mngChangeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mngchange:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MngChangeEntity> mngChangeList = mngChangeService.queryList(query);
+        int total = mngChangeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mngChangeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("mngchange:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MngChangeEntity mngChange = mngChangeService.queryObject(id);
+
+        return R.ok().put("mngChange", mngChange);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mngchange:save")
+    @ResponseBody
+    public R save(@RequestBody MngChangeEntity mngChange) {
+        mngChangeService.save(mngChange);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mngchange:update")
+    @ResponseBody
+    public R update(@RequestBody MngChangeEntity mngChange) {
+        mngChangeService.update(mngChange);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mngchange:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        mngChangeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MngChangeEntity> list = mngChangeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 138 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OfflineCartController.java

@@ -0,0 +1,138 @@
+package com.kmall.admin.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.entity.OfflineCartEntity;
+import com.kmall.admin.service.GoodsService;
+import com.kmall.admin.service.OfflineCartService;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.admin.utils.ShiroUtils;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-11-29 15:14:59
+ */
+@Controller
+@RequestMapping("offlinecart")
+public class OfflineCartController {
+    @Autowired
+    private OfflineCartService offlineCartService;
+    @Autowired
+    private GoodsService goodsService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("offlinecart:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<OfflineCartEntity> offlineCartList = offlineCartService.queryList(query);
+        int total = offlineCartService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(offlineCartList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("offlinecart:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        OfflineCartEntity offlineCart = offlineCartService.queryObject(id);
+
+        return R.ok().put("offlineCart", offlineCart);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("offlinecart:save")
+    @ResponseBody
+    public R save(@RequestBody OfflineCartEntity offlineCart) {
+        offlineCartService.save(offlineCart);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("offlinecart:update")
+    @ResponseBody
+    public R update(@RequestBody OfflineCartEntity offlineCart) {
+        offlineCartService.update(offlineCart);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("offlinecart:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        offlineCartService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<OfflineCartEntity> list = offlineCartService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+    @RequestMapping("/infoList")
+    @RequiresPermissions("offlinecart:infoList")
+    @ResponseBody
+    public R infoList(@RequestBody List<OfflineCartEntity> offlineCartEntityList) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        offlineCartService.deleteByUserId(user.getUserId());
+        List<OfflineCartEntity> cartEntityList = new ArrayList<>();
+        for (OfflineCartEntity cartEntity:offlineCartEntityList) {
+            GoodsEntity goods = goodsService.queryObjectByProdBarcodeAndBizType(cartEntity.getProdBarcode(), user.getStoreId());
+            cartEntityList = offlineCartService.offlineGoodsCart(goods);
+        }
+
+        return R.ok().put("list", cartEntityList);
+    }
+    /**
+     * 删除
+     */
+    @RequestMapping("/deleteByUserId")
+    @RequiresPermissions("offlinecart:deleteByUserId")
+    @ResponseBody
+    public R deleteByUserId() {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        offlineCartService.deleteByUserId(user.getUserId());
+        return R.ok();
+    }
+}

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

@@ -0,0 +1,882 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.dto.OrderExpressDto;
+import com.kmall.admin.entity.*;
+import com.kmall.admin.websocket.WebSocketServer;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.excel.ExcelUtil;
+import com.kmall.manager.manager.wechat.WechatUtil;
+import com.kmall.manager.manager.wechat.WechatGlobalUtil;
+import com.kmall.manager.manager.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
+import com.kmall.admin.service.*;
+import com.kmall.admin.service.OrderExceptionRecordService;
+import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelExport;
+import com.kmall.manager.manager.pingan.PinganUtil;
+import com.kmall.manager.manager.pingan.dto.PinganResponseDto;
+import com.kmall.common.utils.print.ticket.item.Ticket;
+import com.kmall.common.utils.wechat.WechatMicropayApiResult;
+import com.kmall.common.utils.wechat.WechatRefundApiResult;
+import com.kmall.common.utils.wechat.WechatReverseApiResult;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.web.session.HttpServletSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.websocket.server.PathParam;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+/**
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:09
+ */
+@RestController
+@RequestMapping("order")
+public class OrderController {
+    private Log logger = LogFactory.getLog(OrderController.class);
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderGoodsService orderGoodsService;
+    @Autowired
+    private OrderProcessRecordService orderProcessRecordService;
+    @Autowired
+    private OrderRefundService orderRefundService;
+    @Autowired
+    private OrderExceptionRecordService orderExceptionRecordService;
+    @Autowired
+    private StoreService storeService;
+    @Autowired
+    private OrderWXPayRecordService orderWXPayRecordService;
+    @Autowired
+    private PinganResponseService pinganResponseService;
+    @Autowired
+    private ExcelUtil excelUtil;
+    @Autowired
+    private ShippingService shippingService;
+
+    private volatile Integer code = 1;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("order:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = ParamUtils.setTimeMap(params);
+        //查询列表数据
+        Query query = new Query(params);
+        query.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_0.getItem());
+        List<OrderEntity> orderList = orderService.queryList(query);
+        int total = orderService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(orderList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("order:info")
+    public R info(@PathVariable("id") Long id) {
+        OrderEntity order = orderService.queryObject(id);
+        return R.ok().put("order", order);
+    }
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/infos/{id}")
+    @RequiresPermissions("order:infos")
+    public R infos(@PathVariable("id") Long id) {
+        OrderEntity order = orderService.queryInfos(id);
+        return R.ok().put("order", order);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("order:save")
+    public R save(@RequestBody OrderEntity order) {
+        orderService.save(order);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("order:update")
+    public R update(@RequestBody OrderEntity order) {
+        orderService.update(order);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("order:delete")
+    public R delete(@RequestBody Long[] ids) {
+        orderService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<OrderEntity> list = orderService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int sum = orderService.queryTotal(params);
+
+        return R.ok().put("sum", sum);
+    }
+
+    /**
+     * 确定收货
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping("/confirm")
+    @RequiresPermissions("order:confirm")
+    public R confirm(@RequestBody Long id) {
+        orderService.confirm(id);
+
+        return R.ok();
+    }
+
+    /**
+     * 发货
+     *
+     * @param order
+     * @return
+     */
+    @RequestMapping("/sendGoods")
+    @RequiresPermissions("order:sendGoods")
+    public R sendGoods(@RequestBody OrderEntity order) {
+        orderService.sendGoods(order);
+
+        return R.ok();
+    }
+
+    /**
+     * 跟踪快递轨迹
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping("/getLogistics/{id}")
+    @RequiresPermissions("order:getLogistics")
+    public R getLogistics(@PathVariable("id") Long id) {
+        Map result = orderService.getLogistics(id);
+        return R.ok().put("result", result);
+    }
+
+    /**
+     * 获取订单清关信息
+     *
+     * @param orderSn
+     * @return
+     */
+    @RequestMapping("/getProcess/{orderSn}")
+    @RequiresPermissions("order:getProcess")
+    public R getProcess(@PathVariable("orderSn") String orderSn) {
+        OrderProcessRecordEntity orderProcessRecordEntity = orderProcessRecordService.queryObjectByOrderSn(orderSn);
+        if (orderProcessRecordEntity != null) {
+            if (orderProcessRecordEntity.getShipmentStartTime() != null) {
+                orderProcessRecordEntity.setShipmentStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getShipmentStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getShipmentSuccTime() != null) {
+                orderProcessRecordEntity.setShipmentSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getShipmentSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getCustomsStartTime() != null) {
+                orderProcessRecordEntity.setCustomsStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getCustomsStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getCustomsSuccTime() != null) {
+                orderProcessRecordEntity.setCustomsSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getCustomsSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getWaybillStartTime() != null) {
+                orderProcessRecordEntity.setWaybillStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getWaybillStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getWaybillSuccTime() != null) {
+                orderProcessRecordEntity.setWaybillSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getWaybillSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getEleOrderStartTime() != null) {
+                orderProcessRecordEntity.setEleOrderStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getEleOrderStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getEleOrderSuccTime() != null) {
+                orderProcessRecordEntity.setEleOrderSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getEleOrderSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getAddOrderStartTime() != null) {
+                orderProcessRecordEntity.setAddOrderStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getAddOrderStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getAddOrderSuccTime() != null) {
+                orderProcessRecordEntity.setAddOrderSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getAddOrderSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getPaySuccTime() != null) {
+                orderProcessRecordEntity.setPaySuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getPaySuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getPayStartTime() != null) {
+                orderProcessRecordEntity.setPayStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getPayStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getPaymentStartTime() != null) {
+                orderProcessRecordEntity.setPaymentStartTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getPaymentStartTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+            if (orderProcessRecordEntity.getPaymentSuccTime() != null) {
+                orderProcessRecordEntity.setPaymentSuccTimeStr(
+                        DateUtils.format(orderProcessRecordEntity.getPaymentSuccTime(), DateUtils.DATE_TIME_PATTERN));
+            }
+        }
+        return R.ok().put("orderProcessRecordEntity", orderProcessRecordEntity);
+    }
+
+    /**
+     * 打印小票
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping("/printMsg")
+    public R printMsg(@RequestBody Long id) {
+        Ticket ticket = orderService.printMsg(id);
+        return R.ok().put("ticket", ticket);
+    }
+
+    @RequestMapping("/printCode")
+    public R printMsg(){
+
+        Map map = new HashMap();
+        map.put("code",code++); // 系统中累加
+        map.put("shopName","深圳xxxxxxCW店"); // 根据门店编号查询
+        map.put("time",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        map.put("orderNo",UUID.randomUUID().toString().replace("//-","")); //
+
+        return R.ok().put("ticket", map);
+    }
+
+
+
+
+
+
+    /**
+     * 订单取消请求
+     */
+    @RequiresPermissions(value = {"order:refund"})
+    @RequestMapping(value = "cancel", method = RequestMethod.POST)
+    public Object cancel(Long orderId) {
+        OrderEntity orderInfo = orderService.queryObject(orderId);
+        if (null == orderInfo) {
+            return R.error("订单不存在");
+        }
+
+        if (orderInfo.getOrderStatus() != 0) {
+            return R.error("订单状态不支持取消");
+        }
+
+        orderService.cancelOrder(orderInfo);
+        return R.ok();
+    }
+
+    /**
+     * 订单退款请求
+     */
+    @RequiresPermissions(value = {"order:refund"})
+    @RequestMapping(value = "refund", method = RequestMethod.POST)
+    public Object refund(Long orderId, String refundId, BigDecimal refundMoney) {
+        OrderEntity orderInfo = orderService.queryObject(orderId);
+        if (null == orderInfo) {
+            return R.error("订单不存在");
+        }
+        if (orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_401.getItem()) ||
+            orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) {
+            return R.error("订单已退款");
+        }
+        Double totalActualPrice = orderService.getTotalActualPrice(orderInfo.getMerchOrderSn());
+        if (totalActualPrice == null) {
+            totalActualPrice = 0d;
+        }
+        OrderProcessRecordEntity processRecordEntity = orderProcessRecordService.queryObjectByOrderSn(orderInfo.getOrderSn());
+        if(org.apache.commons.lang.StringUtils.isNotEmpty(processRecordEntity.getIsCustomsSend())) {
+            if (processRecordEntity.getIsCustomsSend().equalsIgnoreCase("2")) {
+                return R.error("订单正在清关中,不能退款");
+            }
+            if (processRecordEntity.getIsCustomsSend().equalsIgnoreCase("1")) {
+                return R.error("订单已清关完成,不能退款");
+            }
+        }
+        String refundResult = "";
+        if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
+            if (orderInfo.getPayFlag().equalsIgnoreCase(Dict.payFlag.item_wxglobalpay.getItem())) {
+                refundResult = wxGlobalRefund(orderInfo, totalActualPrice);
+                if (StringUtils.isNotBlank(refundResult)) {
+                    return R.error(refundResult);
+                }
+            } else if (orderInfo.getPayFlag().equalsIgnoreCase(Dict.payFlag.item_pingan.getItem())) {
+                refundResult = pinganRefund(orderInfo, refundId);
+                if (StringUtils.isNotBlank(refundResult)) {
+                    return R.error(refundResult);
+                }
+            } else{
+                refundResult = wxRefund(orderInfo,totalActualPrice);
+                if(StringUtils.isNotBlank(refundResult)){
+                    return R.error(refundResult);
+                }
+            }
+        }
+        return R.ok("退款成功");
+    }
+
+    /**
+     * 平安申请退款
+     * @param orderInfo
+     * @return
+     */
+    private String pinganRefund(OrderEntity orderInfo, String refundId){
+        Integer refundAmount =  orderInfo.getActualPrice().multiply(new BigDecimal(100)).intValue();
+        PinganResponseDto responseDto = PinganUtil.pinganPayRefund(orderInfo.getMerchOrderSn(), refundId, refundAmount, null);
+
+        if (!Objects.isNull(responseDto)) {
+            responseDto.setOutNo(orderInfo.getMerchOrderSn());
+            responseDto.setCreateTime(new Date());
+            pinganResponseService.save(responseDto);
+
+            if ("0".equals(responseDto.getErrcode())) {
+                JSONObject tradeResult = JSONObject.fromObject(responseDto.getDatajson());
+                if (Dict.pinganRefundStatus.item_1.getItem().equals(tradeResult.getString("status"))) {
+                    orderService.pinganRefund(orderInfo, tradeResult, refundId);
+                } else {
+                    OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+                    OrderRefundEntity orderRefund = new OrderRefundEntity();
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
+                    orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
+                    orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+                    SysUserEntity user = ShiroUtils.getUserEntity();
+                    orderRefund.setModerSn(user.getUsername());
+                    orderRefund.setModTime(new Date());
+                    orderRefund.setOutRefundNo(tradeResult.getString("ord_no"));
+                    if (mallOrderRefund != null) {
+                        orderRefund.setId(mallOrderRefund.getId());
+                        orderRefundService.update(orderRefund);//退款记录
+                    }
+                    OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
+                    mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
+                    mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+                    mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
+                    mallOrderExceptionRecord.setExceptionContent("退款失败");
+                    mallOrderExceptionRecord.setCreateTime(new Date());
+                    orderExceptionRecordService.save(mallOrderExceptionRecord);
+                    return "发起平安支付退款失败!";
+                }
+            } else {
+                return responseDto.getMsg();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 微信申请退款
+     * @param orderInfo
+     * @param totalActualPrice
+     * @return
+     */
+    private String wxRefund(OrderEntity orderInfo,Double totalActualPrice){
+        WechatRefundApiResult result = WechatUtil.wxRefund(orderInfo.getMerchOrderSn().toString(), totalActualPrice,
+                orderInfo.getActualPrice().doubleValue());
+        if (result.getResult_code().equals(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+            orderService.refund(orderInfo, result);
+        } else {
+            OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+            OrderRefundEntity orderRefund = new OrderRefundEntity();
+            orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
+            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
+            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+            SysUserEntity user = ShiroUtils.getUserEntity();
+            orderRefund.setModerSn(user.getUsername());
+            orderRefund.setModTime(new Date());
+//            orderRefund.setOutRefundNo(result.getOut_refund_no());
+            if (mallOrderRefund != null) {
+                orderRefund.setId(mallOrderRefund.getId());
+                orderRefundService.update(orderRefund);//退款记录
+            }
+            OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
+            mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
+            mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
+            mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getErr_code_des());
+            mallOrderExceptionRecord.setCreateTime(new Date());
+            orderExceptionRecordService.save(mallOrderExceptionRecord);
+            return result.getErr_code_des();
+        }
+        return "";
+    }
+
+    /**
+     * 微信国际申请退款
+     * @param orderInfo
+     * @param totalActualPrice
+     * @return
+     */
+    private String wxGlobalRefund(OrderEntity orderInfo,Double totalActualPrice){
+        WechatGlobalRefundApiResult result = WechatGlobalUtil.wxRefund(orderInfo.getMerchOrderSn().toString(), totalActualPrice,
+                orderInfo.getActualPrice().doubleValue());
+        if (result.getResult_code().equals(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+            orderService.globalRefund(orderInfo, result);
+        } else {
+            OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+            OrderRefundEntity orderRefund = new OrderRefundEntity();
+            orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
+            orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
+//            orderRefund.setOutRefundNo(result.getOut_refund_no());
+            orderRefund.setModTime(new Date());
+            if (mallOrderRefund != null) {
+                orderRefund.setId(mallOrderRefund.getId());
+                orderRefundService.update(orderRefund);//退款记录
+            }
+            OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
+            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
+            mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+            mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
+            mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getErr_code_des());
+            mallOrderExceptionRecord.setCreateTime(new Date());
+            orderExceptionRecordService.save(mallOrderExceptionRecord);
+            return result.getErr_code_des();
+        }
+        return "";
+    }
+    /**
+     * 订单退款请求
+     */
+    @RequiresPermissions(value = {"order:offilineRefund"})
+    @RequestMapping(value = "offilineRefund", method = RequestMethod.POST)
+    public Object offilineRefund(Long orderId) {
+        OrderEntity orderInfo = orderService.queryObject(orderId);
+        if (null == orderInfo) {
+            return R.error("订单不存在");
+        }
+        if (orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_401.getItem()) ||
+            orderInfo.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_402.getItem())) {
+            return R.error("订单已退款");
+        }
+
+        if (orderInfo.getOrderStatus() != Integer.parseInt(Dict.orderStatus.item_0.getItem())) {
+            if (Dict.payFlag.item_cash.getItem().equals(orderInfo.getPayFlag())) {
+                //现金支付,直接修改订单状态
+                orderService.refund(orderInfo, null);
+            } else if (Dict.payFlag.item_weixin.getItem().equals(orderInfo.getPayFlag())) {
+                //微信线下扫码支付
+                WechatRefundApiResult result = WechatUtil
+                        .wxRefund(orderInfo.getOrderSnWx(), orderInfo.getActualPrice().doubleValue(),
+                                  orderInfo.getActualPrice().doubleValue());
+                if (result.getResult_code().equals(WechatUtil.WXTradeState.SUCCESS.getCode())) {
+                    orderService.refund(orderInfo, result);
+                } else {
+                    OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
+                    OrderRefundEntity orderRefund = new OrderRefundEntity();
+                    orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
+                    orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
+                    orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+//                    orderRefund.setOutRefundNo(result.getOut_refund_no());
+                    SysUserEntity user = ShiroUtils.getUserEntity();
+                    orderRefund.setModerSn(user.getUsername());
+                    orderRefund.setModTime(new Date());
+                    if (mallOrderRefund != null) {
+                        orderRefund.setId(mallOrderRefund.getId());
+                        orderRefundService.update(orderRefund);//退款记录
+                    }
+
+                    OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
+                    mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
+                    mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+                    mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
+                    mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getErr_code_des());
+                    mallOrderExceptionRecord.setCreateTime(new Date());
+                    orderExceptionRecordService.save(mallOrderExceptionRecord);
+
+                    return R.error(result.getErr_code_des());
+                }
+            }
+
+        }
+
+        return R.ok("退款成功");
+    }
+
+    /**
+     * 获取首页展示信息--会员购买率相关
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping("/getUserOrderInfo")
+    public R getUserOrderInfo(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int result = orderService.getUserOrderInfo(params);
+
+        return R.ok().put("result", result);
+    }
+
+    @RequiresPermissions(value = {"order:orderSubmit"})
+    @RequestMapping(value = "orderSubmit", method = RequestMethod.POST)
+    @ResponseBody
+    public R orderSubmit(@RequestBody List<OfflineCartEntity> offlineCartEntityList) {
+        Map resultObj = null;
+        try {
+            SysUserEntity user = ShiroUtils.getUserEntity();
+            resultObj = orderService.orderSubmit(offlineCartEntityList, user);
+            if (((Integer) resultObj.get("errno")) != 0) {
+                return R.error((String) resultObj.get("errmsg"));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return R.ok("订单提交成功");
+    }
+
+    /**
+     * 确认付款
+     *
+     * @param id
+     * @return
+     */
+    @RequestMapping("/confirmPay")
+    @RequiresPermissions("order:confirmPay")
+    public R confirmPay(@RequestBody Long id) {
+        orderService.confirmPay(id, Dict.payFlag.item_cash.getItem(), null);
+
+        return R.ok();
+    }
+
+    @RequestMapping("/offilineOrderList")
+    @RequiresPermissions("order:offilineOrderList")
+    public R offilineOrderList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+        query.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_1.getItem());
+        List<OrderEntity> orderList = orderService.queryOffilineOrderList(query);
+        int total = orderService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(orderList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    @RequestMapping("/offlineInfos/{id}")
+    @RequiresPermissions("order:offlineInfos")
+    public R queryObjectBySysUser(@PathVariable("id") Long id) {
+        OrderEntity order = orderService.queryObjectBySysUser(id);
+        List<OrderWXPayRecordEntity> payRecords = orderWXPayRecordService.getRecordsByOutTradeNo(order.getOrderSn());
+        order.setPayRecordList(payRecords);
+        return R.ok().put("order", order);
+    }
+
+
+    @RequestMapping("/wxMicropayPay")
+    @RequiresPermissions("order:wxMicropayPay")
+    public R wxMicropayPay(Long id, String auth_code) {
+        R r = null;
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if (user == null) {
+            throw new RRException("用户登录超时,请重新登录");
+        }
+        if (!user.getRoleType().equalsIgnoreCase("2")) {
+            throw new RRException("该操作只允许店员账户操作");
+        }
+        OrderEntity orderEntity = orderService.queryObject(id);
+        if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_201.getItem())) {
+            throw new RRException("此订单已付款!");
+        }
+        if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_301.getItem())) {
+            throw new RRException("此订单已完成!");
+        }
+        if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_101.getItem())) {
+            throw new RRException("此订单已取消!");
+        }
+        if (orderEntity.getOrderStatus() == Integer.parseInt(Dict.orderStatus.item_102.getItem())) {
+            throw new RRException("此订单已删除!");
+        }
+
+        //保存支付记录
+        OrderWXPayRecordEntity orderWXPayRecordCurrent = orderWXPayRecordService.saveRecord(orderEntity);
+
+        StoreEntity store = storeService.queryObject(orderEntity.getStoreId());
+        WechatMicropayApiResult wechatMicropayApiResult = WechatUtil
+                .wxMicropay(store.getMerchName() + "-" + store.getStoreName(), orderEntity.getOrderBizType(), null,
+                            orderWXPayRecordCurrent.getOutTradeNoWX(), orderEntity.getActualPrice().doubleValue(),
+                            "127.0.0.1", auth_code);
+        orderWXPayRecordService.updateRecord(orderWXPayRecordCurrent.getId(), wechatMicropayApiResult);
+
+        //当支付成功时,修改订单,并把其他支付记录撤销
+        if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatMicropayApiResult.getTrade_state())) {
+            //查询当前订单所有的支付记录
+            List<OrderWXPayRecordEntity> orderWXPayRecordEntitys =
+                    orderWXPayRecordService.getRecordsByOutTradeNo(orderEntity.getOrderSn());
+            for (OrderWXPayRecordEntity orderWXPayRecordTemp : orderWXPayRecordEntitys) {
+                //查询出来的记录排除当前已支付成功的记录,对其他记录交易状态为未撤销,未关闭的订单,调用撤销订单
+                if (orderWXPayRecordTemp.getId() != orderWXPayRecordCurrent.getId() &&
+                    (!WechatUtil.WXTradeState.REVOKED.getCode().equals(orderWXPayRecordTemp.getTradeState()) ||
+                     !WechatUtil.WXTradeState.CLOSED.getCode().equals(orderWXPayRecordTemp.getTradeState()))) {
+                    WechatReverseApiResult wechatReverseApiResult =
+                            WechatUtil.wxReverse(orderWXPayRecordTemp.getOutTradeNoWX());
+                    //撤销订单成功
+                    if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getReturn_code()) &&
+                            WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getResult_code())) {
+                        //调用订单查询接口
+                        WechatRefundApiResult wechatRefundApiResult =
+                                WechatUtil.wxOrderQuery(orderWXPayRecordTemp.getOutTradeNoWX());
+                        if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getReturn_code()) &&
+                                WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getResult_code())) {
+                            // 修改订单支付记录
+                            orderWXPayRecordService
+                                    .updateWXPayRecordTradeState(orderWXPayRecordTemp.getId(), wechatRefundApiResult);
+                        }
+                    }
+                }
+            }
+            orderService.confirmPay(id, Dict.payFlag.item_weixin.getItem(), orderWXPayRecordCurrent.getOutTradeNoWX());
+            r = R.ok();
+            //用户支付中
+        } else if (WechatUtil.WXTradeState.USERPAYING.getCode().equals(wechatMicropayApiResult.getTrade_state())) {
+            r = R.error(WechatUtil.WXTradeState.USERPAYING.getCodeZn() + ",稍等片刻后请刷新页面重新查看订单状态");
+            //用户支付失败
+        } else if (WechatUtil.WXTradeState.PAYERROR.getCode().equals(wechatMicropayApiResult.getTrade_state())) {
+            WechatReverseApiResult wechatReverseApiResult =
+                    WechatUtil.wxReverse(orderWXPayRecordCurrent.getOutTradeNoWX());
+            //撤销订单成功
+            if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getReturn_code()) &&
+                    WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatReverseApiResult.getResult_code())) {
+                //调用订单查询接口
+                WechatRefundApiResult wechatRefundApiResult =
+                        WechatUtil.wxOrderQuery(orderWXPayRecordCurrent.getOutTradeNoWX());
+                if (WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getReturn_code()) &&
+                        WechatUtil.WXTradeState.SUCCESS.getCode().equals(wechatRefundApiResult.getResult_code())) {
+                    // 修改订单支付记录
+                    orderWXPayRecordService
+                            .updateWXPayRecordTradeState(orderWXPayRecordCurrent.getId(), wechatRefundApiResult);
+                }
+                r = R.error(orderWXPayRecordCurrent.getErrCodeDes());
+            } else {
+                r = R.error(wechatReverseApiResult.getErr_code_des());
+            }
+
+        }
+        return r;
+    }
+    /**
+     * 订单导出请求
+     */
+    @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 = ParamUtils.setTimeMap(params);
+        //查询列表数据
+        params.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_0.getItem());
+        List<OrderEntity> orderList = orderService.queryExportList(params);
+
+        ExcelExport ee = new ExcelExport("订单信息");
+
+        String[] header = new String[]{"订单编号","商户订单编号", "所属门店", "供应商", "供应商第三方商户代码", "订单状态", "SKU", "商品名称", "数量", "销售价", "实际支付金额", "保税模式", "快递公司名称", "快递单编号", "海关清单编号", "收货人姓名", "收件人手机", "收件人省份", "收件人城市", "收件人区县", "收件人地址", "下单时间", "支付流水号","身份证号"
+                ,"原产国","规格型号","品牌","单位","毛重(kg)","净重"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (orderList != null && orderList.size() != 0) {
+            for (OrderEntity orderEntity : orderList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                Integer orderStatus = orderEntity.getOrderStatus();
+                String orderBizType = orderEntity.getOrderBizType();
+
+                map.put("OrderSn", orderEntity.getOrderSn());
+                map.put("MerchOrderSn", orderEntity.getMerchOrderSn());
+                map.put("StoreName", orderEntity.getStoreName());
+                map.put("SupplierThirdPartyMerchName", orderEntity.getSupplierThirdPartyMerchName());
+                map.put("SupplierThirdPartyMerchCode", orderEntity.getSupplierThirdPartyMerchCode());
+                map.put("OrderStatus", StringUtils.isEmpty(orderStatus.toString())? "":Dict.orderStatus.valueOf("item_"+ orderStatus).getItemName());
+                map.put("SKU", orderEntity.getSku());
+                map.put("GoodsName", orderEntity.getGoodsName());
+                map.put("Number", orderEntity.getNumber());
+                map.put("RetailPrice", orderEntity.getRetailPrice());
+                map.put("ActualPrice", orderEntity.getActualPrice());
+
+                map.put("OrderBizType", StringUtils.isEmpty(orderBizType)? "":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
+                map.put("ShippingName", orderEntity.getShippingName());
+                map.put("ShippingNo", orderEntity.getShippingNo());
+                map.put("InvtNo", orderEntity.getOrderProcessRecord()==null?"":orderEntity.getOrderProcessRecord().getInvtNo());
+                map.put("Consignee", orderEntity.getConsignee());
+                map.put("Mobile", orderEntity.getMobile());
+                map.put("Province", orderEntity.getProvince());
+                map.put("City", orderEntity.getCity());
+                map.put("District", orderEntity.getDistrict());
+                map.put("Address", orderEntity.getAddress());
+
+                map.put("OrderStartTime", orderEntity.getOrderProcessRecord()==null?"":DateUtils.format(orderEntity.getOrderProcessRecord().getAddOrderStartTime(),"yyyy-MM-dd HH:mm:ss"));
+                map.put("PayId", orderEntity.getPayTransactionId());
+                map.put("IdNo", orderEntity.getIdNo());
+                map.put("OriCntCode", orderEntity.getOriCntCode());
+                map.put("CiqProdModel", orderEntity.getCiqProdModel());
+                map.put("Brand", orderEntity.getBrand());
+                map.put("UnitCode", orderEntity.getUnitCode());
+                map.put("GrossWeight", orderEntity.getGrossWeight());
+                map.put("NetWeight", orderEntity.getNetWeight());
+
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("订单信息", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+
+    /**
+     * 订单修改已发货的快递信息
+     */
+    @RequestMapping("/updateExpressInfo")
+    @RequiresPermissions("order:updateExpressInfo")
+    public Object updateExpressInfo(@RequestBody OrderEntity orderEntity) {
+        OrderEntity orderInfo = orderService.queryObject(orderEntity.getId());
+        if (orderInfo != null){
+            if(orderInfo.getShippingStatus() == Integer.parseInt(Dict.shippingStatus.item_1.getItem())) {
+                OrderEntity order = new OrderEntity();
+                order.setId(orderInfo.getId());
+                order.setShippingCode(orderEntity.getShippingCode());
+                Map map = new HashMap();
+                map.put("code", orderEntity.getShippingCode());
+                ShippingEntity shippingEntity = shippingService.queryObjectByCode(orderEntity.getShippingCode());
+                if(shippingEntity != null) {
+                    order.setShippingName(shippingEntity.getName());
+                }else{
+                    throw new RRException("此订单修改的快递公司信息不存在!不能操作");
+                }
+                order.setShippingNo(orderEntity.getShippingNo());
+                order.setModerSn(ShiroUtils.getUserEntity().getUsername());
+                order.setModTime(new Date());
+                orderService.update(order);
+            }else{
+                throw new RRException("此订单"+Dict.shippingStatus.valueOf("item_"+orderInfo.getShippingStatus()).getItemName()+"!不能操作");
+            }
+        }
+        return R.ok();
+    }
+
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/expressUpload")
+    public R expressUpload(@RequestParam("file") MultipartFile file) {
+        List<OrderExpressDto> orderExpressList = new ArrayList<>();//快递信息
+        try {
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("OrderExpressList", orderExpressList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.ORDER_EXPRESS_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        orderService.uploadExcel(orderExpressList);
+        //上传文件
+        return R.ok();
+    }
+
+    /**
+     * 获取ccnet需要重发的订单数据
+     */
+    @RequestMapping("/wxOrderResendQueryAllList")
+    public R wxOrderResendQueryAllList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<WxOrderEntity> orderList = orderService.wxOrderResendQueryAllList(query);
+
+        PageUtils pageUtil = new PageUtils(orderList, orderList.size(), query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+
+    @RequestMapping("/orderConfirm")
+    public R orderConfirm(@RequestBody Map param) throws IOException {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        Map resultObj = orderService.offlineRetailSubmit(param,user);
+
+        return R.ok().put("resultObj", resultObj);
+    }
+
+    @RequestMapping("/orderDetail/{orderSn}")
+    public R orderDetail(@PathVariable("orderSn") String orderSn) throws IOException {
+
+        OrderProcessRecordEntity orderProcessRecordEntity = orderProcessRecordService.queryObjectByOrderSn(orderSn);
+        OrderEntity orderEntity = orderService.queryObjectByOrderSn(orderSn);
+        Map map = new HashMap();
+        map.put("orderId",orderEntity.getId());
+        List<OrderGoodsEntity> goodsList = orderGoodsService.queryList(map);
+
+        Map<String,Object> result = new HashMap<>();
+        result.put("orderProcessRecordEntity",orderProcessRecordEntity);
+        result.put("orderEntity",orderEntity);
+        result.put("goodsList",goodsList);
+
+        return R.ok().put("resultObj", result);
+    }
+}

+ 129 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderGoodsController.java

@@ -0,0 +1,129 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.OrderGoodsEntity;
+import com.kmall.admin.service.OrderGoodsService;
+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.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:09
+ */
+@RestController
+@RequestMapping("ordergoods")
+public class OrderGoodsController {
+	@Autowired
+	private OrderGoodsService orderGoodsService;
+	
+	/**
+	 * 列表
+	 */
+	@RequestMapping("/list")
+	@RequiresPermissions("ordergoods:list")
+	public R list(@RequestParam Map<String, Object> params){
+		//查询列表数据
+        Query query = new Query(params);
+
+		List<OrderGoodsEntity> orderGoodsList = orderGoodsService.queryList(query);
+		int total = orderGoodsService.queryTotal(query);
+		
+		PageUtils pageUtil = new PageUtils(orderGoodsList, total, query.getLimit(), query.getPage());
+		
+		return R.ok().put("page", pageUtil);
+	}
+	
+	
+	/**
+	 * 信息
+	 */
+	@RequestMapping("/info/{id}")
+	@RequiresPermissions("ordergoods:info")
+	public R info(@PathVariable("id") Integer id){
+		OrderGoodsEntity orderGoods = orderGoodsService.queryObject(id);
+		
+		return R.ok().put("orderGoods", orderGoods);
+	}
+	
+	/**
+	 * 保存
+	 */
+	@RequestMapping("/save")
+	@RequiresPermissions("ordergoods:save")
+	public R save(@RequestBody OrderGoodsEntity orderGoods){
+		orderGoodsService.save(orderGoods);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 修改
+	 */
+	@RequestMapping("/update")
+	@RequiresPermissions("ordergoods:update")
+	public R update(@RequestBody OrderGoodsEntity orderGoods){
+		orderGoodsService.update(orderGoods);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 删除
+	 */
+	@RequestMapping("/delete")
+	@RequiresPermissions("ordergoods:delete")
+	public R delete(@RequestBody Integer[] ids){
+		orderGoodsService.deleteBatch(ids);
+		
+		return R.ok();
+	}
+
+	/**
+	 * 查看所有列表
+	 */
+	@RequestMapping("/queryAll")
+	public R queryAll(@RequestParam Map<String, Object> params) {
+
+		List<OrderGoodsEntity> list = orderGoodsService.queryList(params);
+
+		return R.ok().put("list", list);
+	}
+
+	@RequestMapping("/queryListByOrderId")
+//	@RequiresPermissions("ordergoods:queryListByOrderId")
+	public R queryListByOrderId(@RequestParam Map<String, Object> params){
+		//查询列表数据
+		Integer orderId = Integer.parseInt((String) params.get("id"));
+		List<OrderGoodsEntity> list = orderGoodsService.queryListByOrderId(orderId);
+		if(params.get("promId") != null) {
+			Integer promId = Integer.parseInt((String) params.get("promId"));
+			for (OrderGoodsEntity orderGoodsEntity : list) {
+				//是否属于当前推广渠道商品 0:否 1:是
+				if (orderGoodsEntity.getIsPromGoods() == null) {
+					orderGoodsEntity.setIsPromGoods(0);
+				} else {
+					if (orderGoodsEntity.getPromId().equals(promId)) {
+						orderGoodsEntity.setIsPromGoods(1);
+					} else {
+						orderGoodsEntity.setIsPromGoods(0);
+					}
+				}
+			}
+		}
+
+		PageUtils pageUtil = new PageUtils(list, 1, 5, 1);
+
+		return R.ok().put("page", pageUtil);
+	}
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderProcessRecordController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.OrderProcessRecordEntity;
+import com.kmall.admin.service.OrderProcessRecordService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 订单流转过程记录表Controller
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-10-27 16:38:50
+ */
+@RestController
+@RequestMapping("orderprocessrecord")
+public class OrderProcessRecordController {
+    @Autowired
+    private OrderProcessRecordService orderProcessRecordService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("orderprocessrecord:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<OrderProcessRecordEntity> orderProcessRecordList = orderProcessRecordService.queryList(query);
+        int total = orderProcessRecordService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(orderProcessRecordList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("orderprocessrecord:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        OrderProcessRecordEntity orderProcessRecord = orderProcessRecordService.queryObject(id);
+
+        return R.ok().put("orderProcessRecord", orderProcessRecord);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("orderprocessrecord:save")
+    @ResponseBody
+    public R save(@RequestBody OrderProcessRecordEntity orderProcessRecord) {
+        orderProcessRecordService.save(orderProcessRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("orderprocessrecord:update")
+    @ResponseBody
+    public R update(@RequestBody OrderProcessRecordEntity orderProcessRecord) {
+        orderProcessRecordService.update(orderProcessRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("orderprocessrecord:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        orderProcessRecordService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<OrderProcessRecordEntity> list = orderProcessRecordService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 138 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderRefundController.java

@@ -0,0 +1,138 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.OrderRefundEntity;
+import com.kmall.admin.service.OrderRefundService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.fromcomm.service.SysUserService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-11-01 10:16:41
+ */
+@Controller
+@RequestMapping("orderrefund")
+public class OrderRefundController {
+    @Autowired
+    private OrderRefundService orderRefundService;
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("orderrefund:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params.put("sidx", "mod_time");
+        params.put("order", "desc");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<OrderRefundEntity> orderRefundList = orderRefundService.queryList(query);
+        for (OrderRefundEntity entity: orderRefundList
+             ) {
+            if(entity.getIsOnfflineOrder().equalsIgnoreCase(Dict.isOnfflineOrder.item_1.getItem())) {
+                SysUserEntity sysUserEntity = sysUserService.queryObject(entity.getUserId().longValue());
+                entity.setUserName("操作店员:"+sysUserEntity.getUsername());
+            }
+        }
+        int total = orderRefundService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(orderRefundList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    @ResponseBody
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int total = orderRefundService.queryTotal(params);
+
+        return R.ok().put("sum", total);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("orderrefund:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        OrderRefundEntity orderRefund = orderRefundService.queryObject(id);
+
+        if(orderRefund.getIsOnfflineOrder().equalsIgnoreCase(Dict.isOnfflineOrder.item_1.getItem())) {
+            SysUserEntity sysUserEntity = sysUserService.queryObject(orderRefund.getUserId().longValue());
+            orderRefund.setUserName("操作店员:"+sysUserEntity.getUsername());
+        }
+        return R.ok().put("orderRefund", orderRefund);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("orderrefund:save")
+    @ResponseBody
+    public R save(@RequestBody OrderRefundEntity orderRefund) {
+        orderRefundService.save(orderRefund);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("orderrefund:update")
+    @ResponseBody
+    public R update(@RequestBody OrderRefundEntity orderRefund) {
+        orderRefundService.update(orderRefund);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("orderrefund:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        orderRefundService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<OrderRefundEntity> list = orderRefundService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 188 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/PickUpCodeController.java

@@ -0,0 +1,188 @@
+package com.kmall.admin.controller;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.kmall.admin.entity.PickUpCodeEntity;
+import com.kmall.admin.service.PickUpCodeService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 2020-05-19 09:11:26
+ */
+@Controller
+@RequestMapping("pickupcode")
+public class PickUpCodeController {
+    @Autowired
+    private PickUpCodeService pickUpCodeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("pickupcode:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setName(params, "name");
+        String name = (String)params.get("name");
+        if(org.apache.commons.lang3.StringUtils.isNotEmpty(name)){
+            params.put("orderSn", name);
+        }
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<PickUpCodeEntity> pickUpCodeList = pickUpCodeService.queryList(query);
+        int total = pickUpCodeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(pickUpCodeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    @RequestMapping("/queryByPickTime")
+    @RequiresPermissions("pickupcode:list")
+    @ResponseBody
+    public R queryByPickTime(@RequestParam Map<String, Object> params) {
+        String pickTime = (String)params.get("pickTime");
+        //有日期检查格式,没有生成当天日期
+        if (org.apache.commons.lang3.StringUtils.isNotEmpty(pickTime)){
+            try{
+                String regEx = "\\d{4}(\\-)\\d{2}\\1\\d{2}";
+                // 编译正则表达式
+                Pattern pattern = Pattern.compile(regEx);
+                Matcher matcher = pattern.matcher(pickTime);
+                // 字符串是否与正则表达式相匹配
+                boolean rs = matcher.matches();
+
+                if (!rs){
+                    throw new Exception();
+                }
+            }catch(Exception e){
+                return R.error("传入日期格式错误,请修改日期格式为'yyyy-MM-dd'!");
+            }
+        } else {
+            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            pickTime = formatter.format(new Date());
+        }
+        params.put("pickUpCodeCreatetime", pickTime);
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<PickUpCodeEntity> pickUpCodeList = pickUpCodeService.queryList(query);
+        int total = pickUpCodeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(pickUpCodeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{orderSn}")
+    @RequiresPermissions("pickupcode:info")
+    @ResponseBody
+    public R info(@PathVariable("orderSn") String orderSn) {
+        PickUpCodeEntity pickUpCode = pickUpCodeService.queryObject(orderSn);
+
+        return R.ok().put("pickUpCode", pickUpCode);
+    }
+
+    /**
+     * 生成取货码
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("pickupcode:save")
+    @ResponseBody
+    public R save(@RequestBody PickUpCodeEntity pickUpCode) {
+        if(org.apache.commons.lang3.StringUtils.isEmpty(pickUpCode.getOrderSn())){
+            return R.error("订单编号为空!");
+        }
+
+        int result = pickUpCodeService.save(pickUpCode);
+        if (result <= 0 ){
+            return R.error("生成取货码失败!");
+        }
+
+        return R.ok().put("pickUpCode",pickUpCode );
+    }
+
+    /**
+     * 取货码核销
+     */
+    @RequestMapping("/verification")
+    @RequiresPermissions("pickupcode:update")
+    @ResponseBody
+    public R Verification(@RequestBody PickUpCodeEntity pickUpCode) {
+        if(org.apache.commons.lang3.StringUtils.isEmpty(pickUpCode.getOrderSn())){
+            return R.error("订单编号为空!");
+        }
+
+        String status = pickUpCodeService.queryPickUpCodeStatus(pickUpCode.getOrderSn());
+        if(status.equals("1")){
+            return R.error("取货码已核销过!");
+        }
+
+        pickUpCode.setPickUpCodeStatus("1");
+        if (pickUpCode.getPickUpCodeCreatetime()==null){
+            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
+            pickUpCode.setPickUpCodeVerificationtime(df.format(new Date()));// new Date()为获取当前系统时间
+        }
+        pickUpCode.setModerSn(ShiroUtils.getUserEntity().getUserId().toString());
+        pickUpCode.setModTime(new Date());
+
+        int result = pickUpCodeService.update(pickUpCode);
+        if (result <= 0 ){
+            return R.error("取货码核销失败!");
+        }
+        PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(pickUpCode.getOrderSn());
+
+        return R.ok().put("pickUpCode",pickUpCodeEntity );
+    }
+
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("pickupcode:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[]orderSns) {
+        int result = pickUpCodeService.deleteBatch(orderSns);
+
+        return R.ok().put("result", result);
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<PickUpCodeEntity> list = pickUpCodeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

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

@@ -0,0 +1,122 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.ProductEntity;
+import com.kmall.admin.service.GoodsSpecificationService;
+import com.kmall.admin.service.ProductService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-30 14:31:21
+ */
+@RestController
+@RequestMapping("product")
+public class ProductController {
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private GoodsSpecificationService goodsSpecificationService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("product:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setName(params, "goodsName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ProductEntity> productList = productService.queryList(query);
+        int total = productService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(productList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("product:info")
+    public R info(@PathVariable("id") Integer id) {
+        ProductEntity product = productService.queryObject(id);
+        return R.ok().put("product", product);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("product:save")
+    public R save(@RequestBody ProductEntity product) {
+        productService.save(product);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("product:update")
+    public R update(@RequestBody ProductEntity product) {
+        productService.update(product);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("product:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        productService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     *
+     * @param params
+     * @return
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<ProductEntity> list = productService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 根据goodsId查询商品
+     *
+     * @param goodsId
+     * @return
+     */
+    @RequestMapping("/queryByGoodsId/{goodsId}")
+    public R queryByGoodsId(@PathVariable("goodsId") String goodsId) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("goodsId", goodsId);
+        List<ProductEntity> list = productService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 286 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -0,0 +1,286 @@
+package com.kmall.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.kmall.admin.dto.StoreGoodsDto;
+import com.kmall.admin.entity.ProductStoreRelaEntity;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.ProductStoreRelaService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.excel.ExcelUtil;
+import com.kmall.common.utils.file.FileUploadUtil;
+import com.kmall.common.utils.wechat.AccessToken;
+import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
+import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-27 19:12:46
+ */
+@Controller
+@RequestMapping("productstorerela")
+public class ProductStoreRelaController {
+    @Autowired
+    private ProductStoreRelaService productStoreRelaService;
+    @Autowired
+    private ExcelUtil excelUtil;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "goodsName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryList(query);
+        //共享库存以商品总库存为准
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
+            if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
+                    if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+                        if (pro.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                            pro.setStockNum(pro.getGoodsNumber());
+                        }
+                    }
+                }
+            }
+        }
+        int total = productStoreRelaService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        ProductStoreRelaEntity productStoreRela = productStoreRelaService.queryObject(id);
+
+        return R.ok().put("productStoreRela", productStoreRela);
+    }
+    /**
+     * 根据商品id查看信息
+     */
+    @RequestMapping("/infoByGoodsId")
+    @ResponseBody
+    public R infoByGoodsId(@RequestParam Map<String, Object> params) {
+        ProductStoreRelaEntity productStoreRela = productStoreRelaService.queryObjectByStoreAndGoodsId(params);
+
+        return R.ok().put("productStoreRela", productStoreRela);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("productstorerela:save")
+    @ResponseBody
+    public R save(@RequestBody ProductStoreRelaEntity productStoreRela) {
+
+        productStoreRelaService.save(productStoreRela);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("productstorerela:update")
+    @ResponseBody
+    public R update(@RequestBody ProductStoreRelaEntity productStoreRela) {
+        if (null == productStoreRela.getProductId() || null == productStoreRela.getGoodsId() ||
+            null == productStoreRela.getStoreId()) {
+            return R.error("信息不全,保存失败");
+        }
+
+        productStoreRelaService.update(productStoreRela);
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("productstorerela:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] ids) {
+        productStoreRelaService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+
+        List<ProductStoreRelaEntity> list = productStoreRelaService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查看优惠券选择商品列表
+     * @param params
+     * @return
+     */
+    @RequestMapping("/queryGoodsRealListByDiscountTid")
+    @ResponseBody
+    public R queryGoodsRealListByDiscountTid(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "goodsName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryGoodsRealListByDiscountTid(query);
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
+            if(pro.getIsCheck()==null){
+                pro.setIsCheck(0);//未选中
+            }else{
+                String guid = (String)params.get("guid");
+                if(guid.equalsIgnoreCase(pro.getGuid())) {
+                    pro.setIsCheck(1);
+                }else{
+                    pro.setIsCheck(0);//未选中
+                }
+            }
+            if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
+                    if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+                        if (pro.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                            pro.setStockNum(pro.getGoodsNumber());
+                        }
+                    }
+                }
+            }
+        }
+        int total = productStoreRelaService.queryGoodsRealListByDiscountTidTotal(query);
+
+        PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 根据门店活动id查看门店活动选择商品列表
+     * @param params
+     * @return
+     */
+    @RequestMapping("/queryGoodsRealListByTopicId")
+    @ResponseBody
+    public R queryGoodsRealListByTopicId(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "goodsName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryGoodsRealListByTopicId(query);
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
+            if(pro.getIsCheck()==null){
+                pro.setIsCheck(0);//未选中
+            }else{
+                Integer storeTopicId = Integer.parseInt((String)params.get("storeTopicId"));
+                if(storeTopicId.compareTo(pro.getStoreTopicId())==0) {
+                    pro.setIsCheck(1);
+                }else{
+                    pro.setIsCheck(0);//未选中
+                }
+            }
+            if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
+                    if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+                        if (pro.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                            pro.setStockNum(pro.getGoodsNumber());
+                        }
+                    }
+                }
+            }
+        }
+        int total = productStoreRelaService.queryGoodsRealListByTopicIdTotal(query);
+
+        PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    @RequestMapping("/qrcodeCanvas/{id}")
+//    @RequiresPermissions("mkstoreprom:qrcodeCanvas")
+    @ResponseBody
+    public R qrcodeCanvas(@PathVariable("id") Integer id) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if (user == null) {
+            throw new RRException("用户登录超时,请重新登录");
+        }
+        ProductStoreRelaEntity productStoreRelaEntity = productStoreRelaService.queryObject(id);
+        if(productStoreRelaEntity==null){
+            throw new RRException("门店商品信息不存在");
+        }
+        AccessToken accessToken = WxTemplateUtil.getAccessToken(WxPayPropertiesBuilder.instance().getAppId(),WxPayPropertiesBuilder.instance().getSecret());
+        if(accessToken == null){
+            throw new RRException("token获取失败");
+        }
+        String token = accessToken.getToken();
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        params.put("scene", productStoreRelaEntity.getGoodsId()+"&"+productStoreRelaEntity.getStoreId()+"&&"+user.getUserId());//参数
+        params.put("page", "pages/goods/goods");//商品详情页面
+        params.put("width", 430);
+        String mapToXml = JSON.toJSONString(params);
+
+        String url = FileUploadUtil.getUploadUrl(mapToXml, token, id);
+        return R.ok().put("url", url);
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/productStoreRelaUpload")
+    public R storeUpload(@RequestParam("file") MultipartFile file) {
+        List<StoreGoodsDto> StoreGoodsDtoList = new ArrayList<>();//信息
+        try {
+            StoreGoodsDto storeGoodsDto = new StoreGoodsDto();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("StoreGoodsDto", storeGoodsDto);
+            beans.put("StoreGoodsDtoList", StoreGoodsDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.STORE_GOODS_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        productStoreRelaService.uploadExcel(StoreGoodsDtoList);
+        //上传文件
+        return R.ok("导入成功!");
+    }
+}

+ 91 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/RelatedGoodsController.java

@@ -0,0 +1,91 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.RelatedGoodsEntity;
+import com.kmall.admin.service.RelatedGoodsService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:09
+ */
+@RestController
+@RequestMapping("relatedgoods")
+public class RelatedGoodsController {
+	@Autowired
+	private RelatedGoodsService relatedGoodsService;
+	
+	/**
+	 * 列表
+	 */
+	@RequestMapping("/list")
+	@RequiresPermissions("relatedgoods:list")
+	public R list(@RequestParam Map<String, Object> params){
+		//查询列表数据
+        Query query = new Query(params);
+
+		List<RelatedGoodsEntity> relatedGoodsList = relatedGoodsService.queryList(query);
+		int total = relatedGoodsService.queryTotal(query);
+		
+		PageUtils pageUtil = new PageUtils(relatedGoodsList, total, query.getLimit(), query.getPage());
+		
+		return R.ok().put("page", pageUtil);
+	}
+	
+	
+	/**
+	 * 信息
+	 */
+	@RequestMapping("/info/{id}")
+	@RequiresPermissions("relatedgoods:info")
+	public R info(@PathVariable("id") Integer id){
+		RelatedGoodsEntity relatedGoods = relatedGoodsService.queryObject(id);
+		
+		return R.ok().put("relatedGoods", relatedGoods);
+	}
+	
+	/**
+	 * 保存
+	 */
+	@RequestMapping("/save")
+	@RequiresPermissions("relatedgoods:save")
+	public R save(@RequestBody RelatedGoodsEntity relatedGoods){
+		relatedGoodsService.save(relatedGoods);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 修改
+	 */
+	@RequestMapping("/update")
+	@RequiresPermissions("relatedgoods:update")
+	public R update(@RequestBody RelatedGoodsEntity relatedGoods){
+		relatedGoodsService.update(relatedGoods);
+		
+		return R.ok();
+	}
+	
+	/**
+	 * 删除
+	 */
+	@RequestMapping("/delete")
+	@RequiresPermissions("relatedgoods:delete")
+	public R delete(@RequestBody Integer[] ids){
+		relatedGoodsService.deleteBatch(ids);
+		
+		return R.ok();
+	}
+	
+}

+ 91 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SearchHistoryController.java

@@ -0,0 +1,91 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SearchHistoryEntity;
+import com.kmall.admin.service.SearchHistoryService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:10
+ */
+@RestController
+@RequestMapping("searchhistory")
+public class SearchHistoryController {
+    @Autowired
+    private SearchHistoryService searchHistoryService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("searchhistory:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SearchHistoryEntity> searchHistoryList = searchHistoryService.queryList(query);
+        int total = searchHistoryService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(searchHistoryList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("searchhistory:info")
+    public R info(@PathVariable("id") Integer id) {
+        SearchHistoryEntity searchHistory = searchHistoryService.queryObject(id);
+
+        return R.ok().put("searchHistory", searchHistory);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("searchhistory:save")
+    public R save(@RequestBody SearchHistoryEntity searchHistory) {
+        searchHistoryService.save(searchHistory);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("searchhistory:update")
+    public R update(@RequestBody SearchHistoryEntity searchHistory) {
+        searchHistoryService.update(searchHistory);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("searchhistory:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        searchHistoryService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ShippingController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.ShippingEntity;
+import com.kmall.admin.service.ShippingService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-09-04 21:42:24
+ */
+@RestController
+@RequestMapping("shipping")
+public class ShippingController {
+    @Autowired
+    private ShippingService shippingService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("shipping:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ShippingEntity> shippingList = shippingService.queryList(query);
+        int total = shippingService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(shippingList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("shipping:info")
+    public R info(@PathVariable("id") Integer id) {
+        ShippingEntity shipping = shippingService.queryObject(id);
+
+        return R.ok().put("shipping", shipping);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("shipping:save")
+    public R save(@RequestBody ShippingEntity shipping) {
+        shippingService.save(shipping);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("shipping:update")
+    public R update(@RequestBody ShippingEntity shipping) {
+        shippingService.update(shipping);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("shipping:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        shippingService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<ShippingEntity> list = shippingService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 101 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SpecificationController.java

@@ -0,0 +1,101 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SpecificationEntity;
+import com.kmall.admin.service.SpecificationService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 规格表
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:10
+ */
+@RestController
+@RequestMapping("specification")
+public class SpecificationController {
+    @Autowired
+    private SpecificationService specificationService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("specification:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SpecificationEntity> specificationList = specificationService.queryList(query);
+        int total = specificationService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(specificationList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("specification:info")
+    public R info(@PathVariable("id") Integer id) {
+        SpecificationEntity specification = specificationService.queryObject(id);
+
+        return R.ok().put("specification", specification);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("specification:save")
+    public R save(@RequestBody SpecificationEntity specification) {
+        specificationService.save(specification);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("specification:update")
+    public R update(@RequestBody SpecificationEntity specification) {
+        specificationService.update(specification);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("specification:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        specificationService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SpecificationEntity> list = specificationService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 277 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/StoreController.java

@@ -0,0 +1,277 @@
+package com.kmall.admin.controller;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.dto.StoreDto;
+import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.service.StoreService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.constant.JxlsXmlTemplateName;
+import com.kmall.common.utils.excel.ExcelExport;
+import com.kmall.common.utils.excel.ExcelUtil;
+import com.kmall.common.utils.file.FileUploadUtil;
+import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.wechat.AccessToken;
+import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-02 00:53:32
+ */
+@Controller
+@RequestMapping("store")
+public class StoreController {
+    @Autowired
+    private StoreService storeService;
+    @Autowired
+    private ExcelUtil excelUtil;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("store:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "storeName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<StoreEntity> storeList = storeService.queryList(query);
+        int total = storeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(storeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("store:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        StoreEntity store = storeService.queryObject(id);
+
+        return R.ok().put("store", store);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("store:save")
+    @ResponseBody
+    public R save(@RequestBody StoreEntity store) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user == null) {
+            return R.error("用户登录超时,请重新登录");
+        }
+        if (user.getRoleType().equalsIgnoreCase("2")) {
+            return R.error("当前用户角色为【店员】,店员不能新增其他门店信息");
+        }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(store);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeName", "门店名称");
+        builder.put("storeNumber", "门店编号");
+        builder.put("thirdPartyMerchCode", "第三方商户编号");
+//        builder.put("thirdPartyMerchName", "第三方商户名称");
+        builder.put("exprAgreementType", "第三方商户快递协议类型");
+        builder.put("latitude", "纬度");
+        builder.put("longitude", "经度");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        storeService.save(store);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("store:update")
+    @ResponseBody
+    public R update(@RequestBody StoreEntity store) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user == null) {
+            return R.error("用户登录超时,请重新登录");
+        }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(store);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户");
+        builder.put("storeName", "门店名称");
+        builder.put("storeNumber", "门店编号");
+        builder.put("thirdPartyMerchCode", "第三方商户编号");
+//        builder.put("thirdPartyMerchName", "第三方商户名称");
+        builder.put("exprAgreementType", "第三方商户快递协议类型");
+        builder.put("latitude", "纬度");
+        builder.put("longitude", "经度");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        storeService.update(store);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("store:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] ids) {
+        storeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+
+        List<StoreEntity> list = storeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/getStoresByMerch")
+    @ResponseBody
+    public R getStoresByMerch(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+
+        List<StoreEntity> list = storeService.queryList(params);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 根据第三方商户查看所有列表
+     */
+    @RequestMapping("/getStoresByThirdMerch")
+    @ResponseBody
+    public R getStoresByThirdMerch(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+
+        List<StoreEntity> list = storeService.queryList(params);
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/qrcodeCanvas/{storeId}")
+    @RequiresPermissions("store:qrcodeCanvas")
+    @ResponseBody
+    public R qrcodeCanvas(@PathVariable("storeId") Integer storeId) {
+        StoreEntity store = storeService.queryObject(storeId);
+        if(store==null){
+            throw new RRException("门店信息不存在");
+        }
+        AccessToken accessToken = WxTemplateUtil.getAccessToken(WxPayPropertiesBuilder.instance().getAppId(),WxPayPropertiesBuilder.instance().getSecret());
+        if(accessToken == null){
+            throw new RRException("token获取失败");
+        }
+        String token = accessToken.getToken();
+
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        params.put("scene", store.getId());//参数
+        params.put("page", "pages/index/index");//页面
+        params.put("width", 90);
+        String mapToXml = JSON.toJSONString(params);
+
+        String url = FileUploadUtil.getUploadUrl(mapToXml, token, storeId);
+        return R.ok().put("url", url);
+    }
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/storeUpload")
+    public R storeUpload(@RequestParam("file") MultipartFile file) {
+        List<StoreDto> storeDtoList = new ArrayList<>();//信息
+        try {
+            StoreDto storeDto = new StoreDto();
+            Map<String, Object> beans = new HashMap<String, Object>();
+            beans.put("StoreDto", storeDto);
+            beans.put("StoreDtoList", storeDtoList);
+            if (file.isEmpty()) {
+                return R.error("文件不能为空!");
+            }
+            excelUtil.readExcel(JxlsXmlTemplateName.STORE_DTO_LIST, beans, file.getInputStream());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("导入失败!");
+        }
+        storeService.uploadExcel(storeDtoList);
+        //上传文件
+        return R.ok("导入成功!");
+    }
+
+    /**
+     * 订单导出请求
+     */
+    @RequestMapping(value = "export")
+    public Object export(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) {
+        ParamUtils.setQueryPowerByRoleType(params, "id", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "storeName");
+        //查询列表数据
+        List<StoreEntity> storeEntityList = storeService.queryExportList(params);
+
+        ExcelExport ee = new ExcelExport("门店id信息");
+
+        String[] header = new String[]{"门店编号", "门店名称", "oms门店编号"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (storeEntityList != null && storeEntityList.size() != 0) {
+            for (StoreEntity storeEntity : storeEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+
+                map.put("StoreId", storeEntity.getId());
+                map.put("StoreName", storeEntity.getStoreName());
+                map.put("StoreNumber", storeEntity.getStoreNumber());
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("门店id信息", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+
+}

+ 109 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/StoreMngChangeController.java

@@ -0,0 +1,109 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.StoreMngChangeEntity;
+import com.kmall.admin.service.StoreMngChangeService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-03-11 10:29:49
+ */
+@Controller
+@RequestMapping("storemngchange")
+public class StoreMngChangeController {
+    @Autowired
+    private StoreMngChangeService storeMngChangeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("storemngchange:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<StoreMngChangeEntity> storeMngChangeList = storeMngChangeService.queryList(query);
+        int total = storeMngChangeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(storeMngChangeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("storemngchange:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        StoreMngChangeEntity storeMngChange = storeMngChangeService.queryObject(id);
+
+        return R.ok().put("storeMngChange", storeMngChange);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("storemngchange:save")
+    @ResponseBody
+    public R save(@RequestBody StoreMngChangeEntity storeMngChange) {
+        storeMngChangeService.save(storeMngChange);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("storemngchange:update")
+    @ResponseBody
+    public R update(@RequestBody StoreMngChangeEntity storeMngChange) {
+        storeMngChangeService.update(storeMngChange);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("storemngchange:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        storeMngChangeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<StoreMngChangeEntity> list = storeMngChangeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 108 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SupplierController.java

@@ -0,0 +1,108 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.SupplierEntity;
+import com.kmall.admin.service.SupplierService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-11-26 15:14:24
+ */
+@Controller
+@RequestMapping("supplier")
+public class SupplierController {
+    @Autowired
+    private SupplierService supplierService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("supplier:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SupplierEntity> supplierList = supplierService.queryList(query);
+        int total = supplierService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(supplierList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("supplier:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        SupplierEntity supplier = supplierService.queryObject(id);
+        return R.ok().put("supplier", supplier);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("supplier:save")
+    @ResponseBody
+    public R save(@RequestBody SupplierEntity supplier) {
+        supplierService.save(supplier);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("supplier:update")
+    @ResponseBody
+    public R update(@RequestBody SupplierEntity supplier) {
+        supplierService.update(supplier);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("supplier:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        supplierService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        List<SupplierEntity> list = supplierService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 100 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysConfigController.java

@@ -0,0 +1,100 @@
+package com.kmall.admin.controller;
+
+import com.kmall.common.annotation.SysLog;
+import com.kmall.admin.fromcomm.controller.AbstractController;
+import com.kmall.admin.fromcomm.entity.SysConfigEntity;
+import com.kmall.admin.fromcomm.service.SysConfigService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.common.validator.ValidatorUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 系统配置信息
+ *
+ * @author Scott
+ * @email
+ * @date 2016年12月4日 下午6:55:53
+ */
+@RestController
+@RequestMapping("/sys/config")
+public class SysConfigController extends AbstractController {
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    /**
+     * 所有配置列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:config:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+        List<SysConfigEntity> configList = sysConfigService.queryList(query);
+        int total = sysConfigService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(configList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 配置信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:config:info")
+    public R info(@PathVariable("id") Long id) {
+        SysConfigEntity config = sysConfigService.queryObject(id);
+
+        return R.ok().put("config", config);
+    }
+
+    /**
+     * 保存配置
+     */
+    @SysLog("保存配置")
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:config:save")
+    public R save(@RequestBody SysConfigEntity config) {
+        ValidatorUtils.validateEntity(config);
+
+        sysConfigService.save(config);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改配置
+     */
+    @SysLog("修改配置")
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:config:update")
+    public R update(@RequestBody SysConfigEntity config) {
+        ValidatorUtils.validateEntity(config);
+
+        sysConfigService.update(config);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除配置
+     */
+    @SysLog("删除配置")
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:config:delete")
+    public R delete(@RequestBody Long[] ids) {
+        sysConfigService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+}

+ 118 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysCusNationCodeController.java

@@ -0,0 +1,118 @@
+package com.kmall.admin.controller;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.SysCusNationCodeEntity;
+import com.kmall.admin.service.SysCusNationCodeService;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.admin.utils.ShiroUtils;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-11-10 15:26:44
+ */
+@Controller
+@RequestMapping("syscusnationcode")
+public class SysCusNationCodeController {
+    @Autowired
+    private SysCusNationCodeService sysCusNationCodeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("syscusnationcode:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysCusNationCodeEntity> sysCusNationCodeList = sysCusNationCodeService.queryList(query);
+        int total = sysCusNationCodeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysCusNationCodeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{sn}")
+    @RequiresPermissions("syscusnationcode:info")
+    @ResponseBody
+    public R info(@PathVariable("sn") String sn) {
+        SysCusNationCodeEntity sysCusNationCode = sysCusNationCodeService.queryObject(sn);
+        return R.ok().put("sysCusNationCode", sysCusNationCode);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("syscusnationcode:save")
+    @ResponseBody
+    public R save(@RequestBody SysCusNationCodeEntity sysCusNationCode) {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        sysCusNationCode.setCreaterSn(user.getUserId().toString());
+        sysCusNationCode.setCreateTime(new Date());
+        sysCusNationCode.setModerSn(user.getUserId().toString());
+        sysCusNationCode.setModTime(new Date());
+
+        sysCusNationCodeService.save(sysCusNationCode);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("syscusnationcode:update")
+    @ResponseBody
+    public R update(@RequestBody SysCusNationCodeEntity sysCusNationCode) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        sysCusNationCode.setModerSn(user.getUserId().toString());
+        sysCusNationCode.setModTime(new Date());
+        sysCusNationCodeService.update(sysCusNationCode);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("syscusnationcode:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[]sns) {
+        sysCusNationCodeService.deleteBatch(sns);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysCusNationCodeEntity> list = sysCusNationCodeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 121 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysCusUnitCodeController.java

@@ -0,0 +1,121 @@
+package com.kmall.admin.controller;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.SysCusUnitCodeEntity;
+import com.kmall.admin.service.SysCusUnitCodeService;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.admin.utils.ShiroUtils;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-11-10 15:34:36
+ */
+@Controller
+@RequestMapping("syscusunitcode")
+public class SysCusUnitCodeController {
+    @Autowired
+    private SysCusUnitCodeService sysCusUnitCodeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("syscusunitcode:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysCusUnitCodeEntity> sysCusUnitCodeList = sysCusUnitCodeService.queryList(query);
+        int total = sysCusUnitCodeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysCusUnitCodeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{sn}")
+    @RequiresPermissions("syscusunitcode:info")
+    @ResponseBody
+    public R info(@PathVariable("sn") String sn) {
+        SysCusUnitCodeEntity sysCusUnitCode = sysCusUnitCodeService.queryObject(sn);
+
+        return R.ok().put("sysCusUnitCode", sysCusUnitCode);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("syscusunitcode:save")
+    @ResponseBody
+    public R save(@RequestBody SysCusUnitCodeEntity sysCusUnitCode) {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        sysCusUnitCode.setCreaterSn(user.getUserId().toString());
+        sysCusUnitCode.setCreateTime(new Date());
+        sysCusUnitCode.setModerSn(user.getUserId().toString());
+        sysCusUnitCode.setModTime(new Date());
+
+        sysCusUnitCodeService.save(sysCusUnitCode);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("syscusunitcode:update")
+    @ResponseBody
+    public R update(@RequestBody SysCusUnitCodeEntity sysCusUnitCode) {
+
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        sysCusUnitCode.setModerSn(user.getUserId().toString());
+        sysCusUnitCode.setModTime(new Date());
+
+        sysCusUnitCodeService.update(sysCusUnitCode);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("syscusunitcode:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[]sns) {
+        sysCusUnitCodeService.deleteBatch(sns);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysCusUnitCodeEntity> list = sysCusUnitCodeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 139 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysDeptController.java

@@ -0,0 +1,139 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SysDeptEntity;
+import com.kmall.admin.service.SysDeptService;
+import com.kmall.admin.fromcomm.controller.AbstractController;
+import com.kmall.common.utils.Constant;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 部门管理
+ *
+ * @author liepngjun
+ * @email
+ * @date 2017-09-17 23:58:47
+ */
+@RestController
+@RequestMapping("/sys/dept")
+public class SysDeptController extends AbstractController {
+    @Autowired
+    private SysDeptService sysDeptService;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:dept:list")
+    public R list() {
+        Map<String, Object> map = new HashMap<>();
+        //如果不是超级管理员,则只能查询本部门及子部门数据
+        if (getUserId() != Constant.SUPER_ADMIN) {
+            map.put("deptFilter", sysDeptService.getSubDeptIdList(getDeptId()));
+        }
+        List<SysDeptEntity> deptList = sysDeptService.queryList(map);
+        return R.ok().put("list", deptList);
+    }
+
+    /**
+     * 选择部门(添加、修改菜单)
+     */
+    @RequestMapping("/select")
+    @RequiresPermissions("sys:dept:select")
+    public R select() {
+        Map<String, Object> map = new HashMap<>();
+        //如果不是超级管理员,则只能查询本部门及子部门数据
+        if (getUserId() != Constant.SUPER_ADMIN) {
+            map.put("deptFilter", sysDeptService.getSubDeptIdList(getDeptId()));
+        }
+        List<SysDeptEntity> deptList = sysDeptService.queryList(map);
+
+        //添加一级部门
+        if (getUserId() == Constant.SUPER_ADMIN) {
+            SysDeptEntity root = new SysDeptEntity();
+            root.setDeptId(0L);
+            root.setName("一级部门");
+            root.setParentId(-1L);
+            root.setOpen(true);
+            deptList.add(root);
+        }
+
+        return R.ok().put("deptList", deptList);
+    }
+
+    /**
+     * 上级部门Id(管理员则为0)
+     */
+    @RequestMapping("/info")
+    @RequiresPermissions("sys:dept:list")
+    public R info() {
+        long deptId = 0;
+        if (getUserId() != Constant.SUPER_ADMIN) {
+            SysDeptEntity dept = sysDeptService.queryObject(getDeptId());
+            deptId = dept.getParentId();
+        }
+
+        return R.ok().put("deptId", deptId);
+    }
+
+    /**
+     * 信息
+     */
+    @RequestMapping("/info/{deptId}")
+    @RequiresPermissions("sys:dept:info")
+    public R info(@PathVariable("deptId") Long deptId) {
+        SysDeptEntity dept = sysDeptService.queryObject(deptId);
+
+        return R.ok().put("dept", dept);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:dept:save")
+    public R save(@RequestBody SysDeptEntity dept) {
+        sysDeptService.save(dept);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:dept:update")
+    public R update(@RequestBody SysDeptEntity dept) {
+        sysDeptService.update(dept);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:dept:delete")
+    public R delete(long deptId) {
+        //判断是否有子部门
+        List<Long> deptList = sysDeptService.queryDetpIdList(deptId);
+        if (deptList.size() > 0) {
+            return R.error("请先删除子部门");
+        }
+
+        sysDeptService.delete(deptId);
+
+        return R.ok();
+    }
+
+}

+ 49 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysLogController.java

@@ -0,0 +1,49 @@
+package com.kmall.admin.controller;
+
+import com.kmall.manager.entity.SysLogEntity;
+import com.kmall.manager.service.SysLogService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 系统日志
+ *
+ * @author Scott
+ * @email
+ * @date 2017-03-08 10:40:56
+ */
+@Controller
+@RequestMapping("/sys/log")
+public class SysLogController {
+    @Autowired
+    private SysLogService sysLogService;
+
+    /**
+     * 列表
+     */
+    @ResponseBody
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:log:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+        List<SysLogEntity> sysLogList = sysLogService.queryList(query);
+        int total = sysLogService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysLogList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+}

+ 113 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysMacroController.java

@@ -0,0 +1,113 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SysMacroEntity;
+import com.kmall.admin.service.SysMacroService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通用字典表Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-22 11:48:16
+ */
+@RestController
+@RequestMapping("sys/macro")
+public class SysMacroController {
+    @Autowired
+    private SysMacroService sysMacroService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:macro:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysMacroEntity> sysMacroList = sysMacroService.queryList(query);
+        int total = sysMacroService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysMacroList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{macroId}")
+    @RequiresPermissions("sys:macro:info")
+    public R info(@PathVariable("macroId") Long macroId) {
+        SysMacroEntity sysMacro = sysMacroService.queryObject(macroId);
+
+        return R.ok().put("macro", sysMacro);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:macro:save")
+    public R save(@RequestBody SysMacroEntity sysMacro) {
+        sysMacroService.save(sysMacro);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:macro:update")
+    public R update(@RequestBody SysMacroEntity sysMacro) {
+        sysMacroService.update(sysMacro);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:macro:delete")
+    public R delete(@RequestBody Long[] macroIds) {
+        sysMacroService.deleteBatch(macroIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysMacroEntity> list = sysMacroService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查询数据字典
+     *
+     * @param value
+     * @return
+     */
+    @RequestMapping("/queryMacrosByValue")
+    public R queryMacrosByValue(@RequestParam String value) {
+
+        List<SysMacroEntity> list = sysMacroService.queryMacrosByValue(value);
+
+        return R.ok().put("list", list);
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysNoticeController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SysNoticeEntity;
+import com.kmall.admin.service.SysNoticeService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * 通知Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-11-16 22:00:56
+ */
+@Controller
+@RequestMapping("sys/notice")
+public class SysNoticeController {
+    @Autowired
+    private SysNoticeService sysNoticeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:notice:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysNoticeEntity> sysNoticeList = sysNoticeService.queryList(query);
+        int total = sysNoticeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysNoticeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:notice:info")
+    @ResponseBody
+    public R info(@PathVariable("id") String id) {
+        SysNoticeEntity sysNotice = sysNoticeService.queryObject(id);
+
+        return R.ok().put("sysNotice", sysNotice);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:notice:save")
+    @ResponseBody
+    public R save(@RequestBody SysNoticeEntity sysNotice) {
+        sysNoticeService.save(sysNotice);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:notice:update")
+    @ResponseBody
+    public R update(@RequestBody SysNoticeEntity sysNotice) {
+        sysNoticeService.update(sysNotice);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:notice:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[]ids) {
+        sysNoticeService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysNoticeEntity> list = sysNoticeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysNoticeUserController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SysNoticeUserEntity;
+import com.kmall.admin.service.SysNoticeUserService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * 通知和用户关系表Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-11-16 22:00:57
+ */
+@Controller
+@RequestMapping("sys/noticeuser")
+public class SysNoticeUserController {
+    @Autowired
+    private SysNoticeUserService sysNoticeUserService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:noticeuser:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysNoticeUserEntity> sysNoticeUserList = sysNoticeUserService.queryList(query);
+        int total = sysNoticeUserService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysNoticeUserList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:noticeuser:info")
+    @ResponseBody
+    public R info(@PathVariable("id") String id) {
+        SysNoticeUserEntity sysNoticeUser = sysNoticeUserService.queryObject(id);
+
+        return R.ok().put("sysNoticeUser", sysNoticeUser);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:noticeuser:save")
+    @ResponseBody
+    public R save(@RequestBody SysNoticeUserEntity sysNoticeUser) {
+        sysNoticeUserService.save(sysNoticeUser);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:noticeuser:update")
+    @ResponseBody
+    public R update(@RequestBody SysNoticeUserEntity sysNoticeUser) {
+        sysNoticeUserService.update(sysNoticeUser);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:noticeuser:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[]ids) {
+        sysNoticeUserService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysNoticeUserEntity> list = sysNoticeUserService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 196 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysOssController.java

@@ -0,0 +1,196 @@
+package com.kmall.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.kmall.admin.entity.SysOssEntity;
+import com.kmall.common.fileserver.util.FileManager;
+import com.kmall.common.oss.CloudStorageConfig;
+import com.kmall.admin.fromcomm.service.SysConfigService;
+import com.kmall.admin.service.SysOssService;
+import com.kmall.common.utils.*;
+import com.kmall.common.validator.ValidatorUtils;
+import com.kmall.common.validator.group.AliyunGroup;
+import com.kmall.common.validator.group.QcloudGroup;
+import com.kmall.common.validator.group.QiniuGroup;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Encoder;
+
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 文件上传
+ *
+ * @author Scott
+ * @email
+ * @date 2017-03-25 12:13:26
+ */
+@RestController
+@RequestMapping("sys/oss")
+public class SysOssController {
+    @Autowired
+    private SysOssService sysOssService;
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    private final static String KEY = ConfigConstant.CLOUD_STORAGE_CONFIG_KEY;
+
+    /**
+     * 列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:oss:all")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+        List<SysOssEntity> sysOssList = sysOssService.queryList(query);
+        int total = sysOssService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysOssList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 云存储配置信息
+     */
+    @RequestMapping("/config")
+    @RequiresPermissions("sys:oss:all")
+    public R config() {
+        CloudStorageConfig config = sysConfigService.getConfigObject(KEY, CloudStorageConfig.class);
+
+        return R.ok().put("config", config);
+    }
+
+
+    /**
+     * 保存云存储配置信息
+     */
+    @RequestMapping("/saveConfig")
+    @RequiresPermissions("sys:oss:all")
+    public R saveConfig(@RequestBody CloudStorageConfig config) {
+        //校验类型
+        ValidatorUtils.validateEntity(config);
+
+        if (config.getType() == Constant.CloudService.QINIU.getValue()) {
+            //校验七牛数据
+            ValidatorUtils.validateEntity(config, QiniuGroup.class);
+        } else if (config.getType() == Constant.CloudService.ALIYUN.getValue()) {
+            //校验阿里云数据
+            ValidatorUtils.validateEntity(config, AliyunGroup.class);
+        } else if (config.getType() == Constant.CloudService.QCLOUD.getValue()) {
+            //校验腾讯云数据
+            ValidatorUtils.validateEntity(config, QcloudGroup.class);
+        }
+
+
+        sysConfigService.updateValueByKey(KEY, JSON.toJSONString(config));
+
+        return R.ok();
+    }
+
+
+    /**
+     * 上传文件
+     */
+    @RequestMapping("/upload")
+    @RequiresPermissions("sys:oss:all")
+    public R upload(@RequestParam("file") MultipartFile file) throws Exception {
+        if (file.isEmpty()) {
+            throw new RRException("上传文件不能为空");
+        }
+//        String name = file.getOriginalFilename();
+//        Thumbnails.of(name).size(200, 200).keepAspectRatio(false).allowOverwrite(true).toFile(name);
+        int AllowImgFileSize=0; //允许上传图片文件的大小 0为无限制 单位:KB
+        Long size = file.getSize();
+        int ImgFileSize=Math.round(size/1024*100)/100;//取得图片文件的大小
+        if(ImgFileSize > 200){
+            throw new RRException("上传图片,不能超过 300k");
+        }
+        //上传文件
+        String url = FileManager.upload(file);
+
+        //保存文件信息
+        SysOssEntity ossEntity = new SysOssEntity();
+        ossEntity.setUrl(url);
+        ossEntity.setCreateDate(new Date());
+        sysOssService.save(ossEntity);
+
+        R r = new R();
+        r.put("url", url);
+        r.put("link", url);
+        return r;
+    }
+    /**
+     * 上传视频文件,返回视频文件base64值
+     */
+    @RequestMapping("/uploadAndBase64")
+    @RequiresPermissions("sys:oss:all")
+    public R uploadAndBase64(@RequestParam("file") MultipartFile file) throws Exception {
+        if (file.isEmpty()) {
+            throw new RRException("上传文件不能为空");
+        }
+        Long size = file.getSize();
+        int ImgFileSize=Math.round(size/1024*100)/100;//取得图片文件的大小
+        if(ImgFileSize > 500){
+            throw new RRException("上传视频,不能超过 500k");
+        }
+
+        BASE64Encoder base64Encoder =new BASE64Encoder();
+        String base64EncoderImg = base64Encoder.encode(file.getBytes());
+
+        //上传文件在前端生成临时文件,此处只返回base64码
+        /*//上传文件
+        String url = FileManager.upload(file);
+
+        //保存文件信息
+        SysOssEntity ossEntity = new SysOssEntity();
+        ossEntity.setUrl(url);
+        ossEntity.setCreateDate(new Date());
+        sysOssService.save(ossEntity);*/
+
+        R r = new R();
+//        r.put("url", url);
+//        r.put("link", url);
+        r.put("base64EncoderImg", base64EncoderImg);
+        return r;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:oss:all")
+    public R delete(@RequestBody Long[] ids) {
+        sysOssService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查询所有列表
+     */
+    @RequestMapping("/queryAll")
+    public List<String> queryAll(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        List<SysOssEntity> sysOssList = sysOssService.queryList(params);
+
+        List<String> list = new ArrayList<>();
+        if (null != sysOssList && sysOssList.size() > 0) {
+            for (SysOssEntity item : sysOssList) {
+                list.add(item.getUrl());
+            }
+        }
+        return list;
+    }
+}

+ 22 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysPageController.java

@@ -0,0 +1,22 @@
+package com.kmall.admin.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * 系统页面视图
+ *
+ * @author Scott
+ * @email
+ * @date 2016年11月24日 下午11:05:27
+ */
+@Controller
+public class SysPageController {
+
+    @RequestMapping("{module}/{url}.html")
+    public String page(@PathVariable("module") String module, @PathVariable("url") String url) {
+        return module + "/" + url + ".html";
+    }
+
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysPrinterController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.SysPrinterEntity;
+import com.kmall.admin.service.SysPrinterService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * 飞鸽打印机Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-12-02 00:41:31
+ */
+@Controller
+@RequestMapping("sys/printer")
+public class SysPrinterController {
+    @Autowired
+    private SysPrinterService sysPrinterService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:printer:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysPrinterEntity> sysPrinterList = sysPrinterService.queryList(query);
+        int total = sysPrinterService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sysPrinterList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:printer:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        SysPrinterEntity sysPrinter = sysPrinterService.queryObject(id);
+
+        return R.ok().put("sysPrinter", sysPrinter);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:printer:save")
+    @ResponseBody
+    public R save(@RequestBody SysPrinterEntity sysPrinter) {
+        sysPrinterService.save(sysPrinter);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:printer:update")
+    @ResponseBody
+    public R update(@RequestBody SysPrinterEntity sysPrinter) {
+        sysPrinterService.update(sysPrinter);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:printer:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        sysPrinterService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<SysPrinterEntity> list = sysPrinterService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 168 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysRegionController.java

@@ -0,0 +1,168 @@
+package com.kmall.admin.controller;
+
+import com.kmall.api.fromcomm.cache.RegionCacheUtil;
+import com.kmall.manager.entity.SysRegionEntity;
+import com.kmall.admin.service.SysRegionService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import com.kmall.common.utils.TreeUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-16 21:19:31
+ */
+@RestController
+@RequestMapping("sys/region")
+public class SysRegionController {
+    @Autowired
+    private SysRegionService sysRegionService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:region:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysRegionEntity> regionList = sysRegionService.queryList(query);
+        int total = sysRegionService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(regionList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:region:info")
+    public R info(@PathVariable("id") Integer id) {
+        SysRegionEntity region = sysRegionService.queryObject(id);
+
+        return R.ok().put("region", region);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:region:save")
+    public R save(@RequestBody SysRegionEntity region) {
+        sysRegionService.save(region);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:region:update")
+    public R update(@RequestBody SysRegionEntity region) {
+        sysRegionService.update(region);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:region:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        sysRegionService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查询所有国家
+     *
+     * @return
+     */
+    @RequestMapping("/getAllCountry")
+    public R getAllCountry() {
+        List<SysRegionEntity> list = RegionCacheUtil.getAllCountry();
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查询所有省份
+     *
+     * @return
+     */
+    @RequestMapping("/getAllProvice")
+    public R getAllProvice(@RequestParam(required = false) Integer areaId) {
+        List<SysRegionEntity> list = RegionCacheUtil.getAllProviceByParentId(areaId);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查询所有城市
+     *
+     * @return
+     */
+    @RequestMapping("/getAllCity")
+    public R getAllCity(@RequestParam(required = false) Integer areaId) {
+        List<SysRegionEntity> list = RegionCacheUtil.getChildrenCity(areaId);
+        return R.ok().put("list", list);
+    }
+
+
+    /**
+     * 查询所有区县
+     *
+     * @return
+     */
+    @RequestMapping("/getChildrenDistrict")
+    public R getChildrenDistrict(@RequestParam(required = false) Integer areaId) {
+        List<SysRegionEntity> list = RegionCacheUtil.getChildrenDistrict(areaId);
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查看信息(全部加载页面渲染太慢!)
+     */
+    @RequestMapping("/getAreaTree")
+    public R getAreaTree() {
+        List<SysRegionEntity> list = RegionCacheUtil.sysRegionEntityList;
+        for (SysRegionEntity sysRegionEntity : list) {
+            sysRegionEntity.setValue(sysRegionEntity.getId() + "");
+            sysRegionEntity.setLabel(sysRegionEntity.getName());
+        }
+        List<SysRegionEntity> node = TreeUtils.factorTree(list);
+
+        return R.ok().put("node", node);
+    }
+
+    @RequestMapping("/getAreaByType")
+    public R getAreaByType(@RequestParam(required = false) Integer type) {
+
+        List<SysRegionEntity> list = new ArrayList<>();
+        if (type.equals(0)) {
+
+        } else if (type.equals(1)) {//省份
+            list = RegionCacheUtil.getAllCountry();
+        } else if (type.equals(2)) {
+            list = RegionCacheUtil.getAllProvice();
+        } else if (type.equals(3)) {
+            list = RegionCacheUtil.getAllCity();
+        }
+        return R.ok().put("list", list);
+    }
+}

+ 144 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysSmsLogController.java

@@ -0,0 +1,144 @@
+package com.kmall.admin.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.fromcomm.entity.SmsConfig;
+import com.kmall.manager.entity.SysSmsLogEntity;
+import com.kmall.admin.fromcomm.service.SysConfigService;
+import com.kmall.manager.service.SysSmsLogService;
+import com.kmall.common.utils.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @date 2017-12-16 23:38:05
+ */
+@RestController
+@RequestMapping("/sys/smslog")
+public class SysSmsLogController {
+    @Autowired
+    private SysSmsLogService smsLogService;
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    private final static String KEY = ConfigConstant.SMS_CONFIG_KEY;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("sys:smslog:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SysSmsLogEntity> smsLogList = smsLogService.queryList(query);
+        int total = smsLogService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(smsLogList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("sys:smslog:info")
+    @ResponseBody
+    public R info(@PathVariable("id") String id) {
+        SysSmsLogEntity smsLog = smsLogService.queryObject(id);
+
+        return R.ok().put("smsLog", smsLog);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("sys:smslog:save")
+    @ResponseBody
+    public R save(@RequestBody SysSmsLogEntity smsLog) {
+        smsLogService.save(smsLog);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("sys:smslog:update")
+    @ResponseBody
+    public R update(@RequestBody SysSmsLogEntity smsLog) {
+        smsLogService.update(smsLog);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("sys:smslog:delete")
+    @ResponseBody
+    public R delete(@RequestBody String[] ids) {
+        smsLogService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<SysSmsLogEntity> list = smsLogService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 短信配置信息
+     */
+    @RequestMapping("/config")
+    public R config() {
+        SmsConfig config = sysConfigService.getConfigObject(KEY, SmsConfig.class);
+
+        return R.ok().put("config", config);
+    }
+
+    /**
+     * 保存短信配置信息
+     */
+    @RequestMapping("/saveConfig")
+    public R saveConfig(@RequestBody SmsConfig config) {
+        sysConfigService.updateValueByKey(KEY, JSON.toJSONString(config));
+        return R.ok();
+    }
+
+    /**
+     * 发送短信
+     */
+    @RequestMapping("/sendSms")
+    @ResponseBody
+    public R sendSms(@RequestBody SysSmsLogEntity smsLog) {
+        SysSmsLogEntity sysSmsLogEntity = smsLogService.sendSms(smsLog);
+        return R.ok().put("result", sysSmsLogEntity);
+    }
+}

+ 123 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchExpressController.java

@@ -0,0 +1,123 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.ThirdMerchExpressEntity;
+import com.kmall.admin.service.ThirdMerchExpressService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-03 16:52:21
+ */
+@Controller
+@RequestMapping("thirdmerchexpress")
+public class ThirdMerchExpressController {
+    @Autowired
+    private ThirdMerchExpressService thirdMerchExpressService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("thirdmerchexpress:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ThirdMerchExpressEntity> thirdMerchExpressList = thirdMerchExpressService.queryList(query);
+        int total = thirdMerchExpressService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(thirdMerchExpressList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("thirdmerchexpress:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        ThirdMerchExpressEntity thirdMerchExpress = thirdMerchExpressService.queryObject(id);
+
+        return R.ok().put("thirdMerchExpress", thirdMerchExpress);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("thirdmerchexpress:save")
+    @ResponseBody
+    public R save(@RequestBody ThirdMerchExpressEntity thirdMerchExpress) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchExpress);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("expressAccount", "商户快递账号");
+        builder.put("expressPwd", "商户快递密码");
+        builder.put("expressCusId", "商户快递月结账号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        thirdMerchExpressService.save(thirdMerchExpress);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("thirdmerchexpress:update")
+    @ResponseBody
+    public R update(@RequestBody ThirdMerchExpressEntity thirdMerchExpress) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchExpress);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("expressAccount", "商户快递账号");
+        builder.put("expressPwd", "商户快递密码");
+        builder.put("expressCusId", "商户快递月结账号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        thirdMerchExpressService.update(thirdMerchExpress);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("thirdmerchexpress:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        thirdMerchExpressService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<ThirdMerchExpressEntity> list = thirdMerchExpressService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 218 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchantBizController.java

@@ -0,0 +1,218 @@
+package com.kmall.admin.controller;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.ThirdMerchantBizEntity;
+import com.kmall.admin.service.StoreService;
+import com.kmall.admin.service.ThirdMerchantBizService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.common.utils.*;
+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.*;
+
+/**
+ * 第三方商户表Controller
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-02-15 11:43:32
+ */
+@Controller
+@RequestMapping("thirdmerchantbiz")
+public class ThirdMerchantBizController {
+    @Autowired
+    private ThirdMerchantBizService thirdMerchantBizService;
+    @Autowired
+    private StoreService storeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("thirdmerchantbiz:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ThirdMerchantBizEntity> thirdMerchantBizList = thirdMerchantBizService.queryList(query);
+        int total = thirdMerchantBizService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(thirdMerchantBizList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{thirdMerchSn}")
+    @RequiresPermissions("thirdmerchantbiz:info")
+    @ResponseBody
+    public R info(@PathVariable("thirdMerchSn") Integer thirdMerchSn) {
+        ThirdMerchantBizEntity thirdMerchantBiz = thirdMerchantBizService.queryObject(thirdMerchSn);
+
+        return R.ok().put("thirdMerchantBiz", thirdMerchantBiz);
+    }
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/infoByCode")
+    @ResponseBody
+    public R infoByCode(@RequestParam Map<String, Object> params) {
+        String thirdMerchantCode = (String) params.get("thirdMerchantCode");
+        ThirdMerchantBizEntity thirdMerchantBiz = thirdMerchantBizService.getThirdMerchangByCode(thirdMerchantCode);
+
+        return R.ok().put("thirdMerchantBiz", thirdMerchantBiz);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("thirdmerchantbiz:save")
+    @ResponseBody
+    public R save(@RequestBody ThirdMerchantBizEntity thirdMerchantBiz) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user != null) {
+            thirdMerchantBiz.setCreaterSn(user.getUserId().toString());
+            thirdMerchantBiz.setModerSn(user.getUserId().toString());
+        }else {
+            throw new RRException("登陆用户失效,请重新登陆!");
+        }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchantBiz);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户编号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        builder.put("thirdPartyMerchName", "第三方商户名称");
+        builder.put("isStockShare", "库存是否共享");
+//        builder.put("isStoreUserShare", "门店用户是否共享");
+        builder.put("isMapShow", "商户地图是否显示");
+        builder.put("isSupplierGoods", "供应商模式商品是否启用");
+        builder.put("isFaceCheck", "是否使用人脸核验");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        thirdMerchantBizService.save(thirdMerchantBiz);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("thirdmerchantbiz:update")
+    @ResponseBody
+    public R update(@RequestBody ThirdMerchantBizEntity thirdMerchantBiz) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(user != null) {
+            thirdMerchantBiz.setCreaterSn(user.getUserId().toString());
+            thirdMerchantBiz.setModerSn(user.getUserId().toString());
+        }else {
+            throw new RRException("登陆用户失效,请重新登陆!");
+        }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchantBiz);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户编号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        builder.put("thirdPartyMerchName", "第三方商户名称");
+//        builder.put("isStockShare", "库存是否共享");
+//        builder.put("isStoreUserShare", "门店用户是否共享");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        thirdMerchantBizService.update(thirdMerchantBiz);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("thirdmerchantbiz:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]thirdMerchSns) {
+        thirdMerchantBizService.deleteBatch(thirdMerchSns);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeKey", "merchSn", "thirdPartyMerchCode");
+        List<ThirdMerchantBizEntity> list = thirdMerchantBizService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAlls")
+    @ResponseBody
+    public R queryAlls(@RequestParam Map<String, Object> params) {
+        List<ThirdMerchantBizEntity> list = thirdMerchantBizService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/getIsSupplierShowByThirdSn")
+    @ResponseBody
+    public R getIsSupplierShowByThirdSn(@RequestParam Map<String, Object> params) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if (user == null) {
+            throw new RRException("用户登录超时,请重新登录");
+        }
+        Boolean isSupplierShow = false;
+        Boolean roleType = false;
+        if (Dict.roleType.item_2.getItem().equals(user.getRoleType())) {
+            ThirdMerchantBizEntity thirdMerchantBizEntity  = thirdMerchantBizService.getThirdMerchangByCode(user.getThirdPartyMerchCode());
+            if(thirdMerchantBizEntity != null){
+                String isSupplierGoods = thirdMerchantBizEntity.getIsSupplierGoods();
+                if(isSupplierGoods.equalsIgnoreCase(Dict.isSupplierGoods.item_1.getItem())){
+                    isSupplierShow = true;
+                }
+            }
+        }
+        if (Dict.roleType.item_3.getItem().equalsIgnoreCase(user.getRoleType()) || Dict.roleType.item_1.getItem().equalsIgnoreCase(user.getRoleType())) {
+            isSupplierShow = true;
+            roleType = true;
+        }
+        if (Dict.roleType.item_4.getItem().equals(user.getRoleType())) {
+            ThirdMerchantBizEntity thirdMerchantBizEntity  = thirdMerchantBizService.getThirdMerchangByCode(user.getThirdPartyMerchCode());
+            if(thirdMerchantBizEntity != null){
+                String isSupplierGoods = thirdMerchantBizEntity.getIsSupplierGoods();
+                if(isSupplierGoods.equalsIgnoreCase(Dict.isSupplierGoods.item_1.getItem())){
+                    isSupplierShow = true;
+                }
+            }
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("isSupplierShow", isSupplierShow);
+        map.put("roleType", roleType);
+        return R.ok().put("map", map);
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/TopicCategoryController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.TopicCategoryEntity;
+import com.kmall.admin.service.TopicCategoryService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-20 15:41:56
+ */
+@RestController
+@RequestMapping("topiccategory")
+public class TopicCategoryController {
+    @Autowired
+    private TopicCategoryService topicCategoryService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("topiccategory:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<TopicCategoryEntity> topicCategoryList = topicCategoryService.queryList(query);
+        int total = topicCategoryService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(topicCategoryList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("topiccategory:info")
+    public R info(@PathVariable("id") Integer id) {
+        TopicCategoryEntity topicCategory = topicCategoryService.queryObject(id);
+
+        return R.ok().put("topicCategory", topicCategory);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("topiccategory:save")
+    public R save(@RequestBody TopicCategoryEntity topicCategory) {
+        topicCategoryService.save(topicCategory);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("topiccategory:update")
+    public R update(@RequestBody TopicCategoryEntity topicCategory) {
+        topicCategoryService.update(topicCategory);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("topiccategory:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        topicCategoryService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<TopicCategoryEntity> list = topicCategoryService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 99 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/TopicController.java

@@ -0,0 +1,99 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.TopicEntity;
+import com.kmall.admin.service.TopicService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-20 14:10:08
+ */
+@RestController
+@RequestMapping("topic")
+public class TopicController {
+    @Autowired
+    private TopicService topicService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("topic:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<TopicEntity> topicList = topicService.queryList(query);
+        int total = topicService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(topicList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("topic:info")
+    public R info(@PathVariable("id") Integer id) {
+        TopicEntity topic = topicService.queryObject(id);
+
+        return R.ok().put("topic", topic);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("topic:save")
+    public R save(@RequestBody TopicEntity topic) {
+        topicService.save(topic);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("topic:update")
+    public R update(@RequestBody TopicEntity topic) {
+        topicService.update(topic);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("topic:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        topicService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<TopicEntity> list = topicService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 152 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/UserController.java

@@ -0,0 +1,152 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.UserEntity;
+import com.kmall.admin.service.UserService;
+import com.kmall.admin.utils.ParamUtils;
+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.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-16 15:02:28
+ */
+@RestController
+@RequestMapping("user")
+public class UserController {
+    @Autowired
+    private UserService userService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("user:list")
+    public R list(@RequestParam Map<String, Object> params) {
+
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<UserEntity> userList = userService.queryList(query);
+        int total = userService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(userList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("user:info")
+    public R info(@PathVariable("id") Integer id) {
+        UserEntity user = userService.queryObject(id);
+
+        return R.ok().put("user", user);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("user:save")
+    public R save(@RequestBody UserEntity user) {
+        userService.save(user);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("user:update")
+    public R update(@RequestBody UserEntity user) {
+        userService.update(user);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("user:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        userService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<UserEntity> userList = userService.queryList(params);
+
+        return R.ok().put("list", userList);
+    }
+
+    /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int sum = userService.queryTotal(params);
+
+        return R.ok().put("userSum", sum);
+    }
+
+    /**
+     * 导出会员
+     */
+    @RequestMapping("/export")
+    @RequiresPermissions("user:export")
+    public R export(@RequestParam Map<String, Object> params, HttpServletResponse response) {
+
+        List<UserEntity> userList = userService.queryList(params);
+
+        ExcelExport ee = new ExcelExport("会员列表");
+
+        String[] header = new String[]{"会员微信名称", "会员名称", "性别", "会员级别", "手机号码", "身份证"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+
+        if (userList != null && userList.size() != 0) {
+            for (UserEntity userEntity : userList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                map.put("NICKNAME", userEntity.getNickname());
+                map.put("USERNAME", userEntity.getUsername());
+                map.put("GENDER", userEntity.getGender() == 1 ? "男" : (userEntity.getGender() == 2 ? "女" : "未知"));
+                map.put("LEVEL_NAME", userEntity.getLevelName());
+                map.put("MOBILE", userEntity.getMobile());
+                map.put("IDNO", userEntity.getIdNo());
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("会员", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+
+}

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

@@ -0,0 +1,111 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.UserCouponEntity;
+import com.kmall.admin.service.UserCouponService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 15:40:33
+ */
+@RestController
+@RequestMapping("usercoupon")
+public class UserCouponController {
+    @Autowired
+    private UserCouponService userCouponService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<UserCouponEntity> userCouponList = userCouponService.queryList(query);
+        int total = userCouponService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(userCouponList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("usercoupon:info")
+    public R info(@PathVariable("id") Integer id) {
+        UserCouponEntity userCoupon = userCouponService.queryObject(id);
+
+        return R.ok().put("userCoupon", userCoupon);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("usercoupon:save")
+    public R save(@RequestBody UserCouponEntity userCoupon) {
+        userCouponService.save(userCoupon);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("usercoupon:update")
+    public R update(@RequestBody UserCouponEntity userCoupon) {
+        userCouponService.update(userCoupon);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("usercoupon:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        userCouponService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<UserCouponEntity> list = userCouponService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/getUserCouponByDiscIdList")
+    public R getUserCouponByDiscIdList(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<UserCouponEntity> userCouponList = userCouponService.getUserCouponByDiscIdList(query);
+        int total = userCouponService.queryUserCouponByDiscIdTotal(query);
+
+        PageUtils pageUtil = new PageUtils(userCouponList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+}

+ 100 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/UserLevelController.java

@@ -0,0 +1,100 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.UserLevelEntity;
+import com.kmall.admin.service.UserLevelService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Controller
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-16 16:52:22
+ */
+@RestController
+@RequestMapping("userlevel")
+public class UserLevelController {
+    @Autowired
+    private UserLevelService userLevelService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("userlevel:list")
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<UserLevelEntity> userLevelList = userLevelService.queryList(query);
+        int total = userLevelService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(userLevelList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("userlevel:info")
+    public R info(@PathVariable("id") Integer id) {
+        UserLevelEntity userLevel = userLevelService.queryObject(id);
+
+        return R.ok().put("userLevel", userLevel);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("userlevel:save")
+    public R save(@RequestBody UserLevelEntity userLevel) {
+        userLevelService.save(userLevel);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("userlevel:update")
+    public R update(@RequestBody UserLevelEntity userLevel) {
+        userLevelService.update(userLevel);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("userlevel:delete")
+    public R delete(@RequestBody Integer[] ids) {
+        userLevelService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查询所有数据
+     *
+     * @return
+     */
+    @RequestMapping("queryAll")
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        List<UserLevelEntity> userLevelList = userLevelService.queryList(params);
+        return R.ok().put("list", userLevelList);
+    }
+}

+ 95 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/faceid/CheckFaceLivenessRecogController.java

@@ -0,0 +1,95 @@
+package com.kmall.admin.controller.faceid;
+
+import com.kmall.admin.dto.FaceByOrderDto;
+import com.kmall.admin.dto.OrderRecognitionDto;
+import com.kmall.admin.entity.FaceLivenessRecognitionReturnDataEntity;
+import com.kmall.admin.entity.OrderEntity;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.service.faceid.FaceIdService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.manager.dto.FaceIdRequestDto;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author huangyq
+ * @version 1.0
+ * 2019-11-27 14:09
+ */
+@RestController
+public class CheckFaceLivenessRecogController {
+    @Autowired
+    private FaceIdService faceIdService;
+    @Autowired
+    private OrderService orderService;
+
+    /**
+     * 人脸识别
+     * @param faceByOrderDto
+     * @return
+     */
+    @RequestMapping("face/checkLivenessRecognition")
+    @RequiresPermissions("face:checkLivenessRecognition")
+    public R checkLivenessRecognition(@RequestBody FaceByOrderDto faceByOrderDto) {
+        String msg = faceIdService.checkLivenessRecognition(faceByOrderDto);
+        return R.ok(msg);
+    }
+
+    /**
+     * 列表
+     */
+    @RequestMapping("face/orderList")
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params = ParamUtils.setTimeMap(params);
+        //查询列表数据
+        Query query = new Query(params);
+        query.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_0.getItem());
+        List<OrderRecognitionDto> orderList = orderService.queryOrderListByRecognition(query);
+        int total = orderService.queryOrderListByRecognitionTotal(query);
+
+        PageUtils pageUtil = new PageUtils(orderList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 发送模板
+     * @param orderId
+     * @return
+     */
+    @RequestMapping("face/sendWxTemp/{orderId}")
+//    @RequiresPermissions("face:sendWxTemp")
+    public R sendWxTemp(@PathVariable("orderId") long orderId) {
+        faceIdService.sendWxTemp(orderId);
+        return R.ok();
+    }
+
+
+    /**
+     * 手动操作人脸核验成功
+     * @param orderId
+     * @return
+     */
+    @RequestMapping("face/manualCheckFace/{orderId}")
+//    @RequiresPermissions("face:sendWxTemp")
+    public R manualCheckFace(@PathVariable("orderId") long orderId) {
+        faceIdService.manualCheckFace(orderId);
+        return R.ok();
+    }
+
+    @RequestMapping("face/get/{faceLivenessId}")
+//    @RequiresPermissions("face:sendWxTemp")
+    public R get(@PathVariable("faceLivenessId") long faceLivenessId) {
+        FaceLivenessRecognitionReturnDataEntity entity = faceIdService.get(faceLivenessId);
+        return R.ok().put("faceLiveness",entity);
+    }
+}

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

@@ -0,0 +1,160 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.dto.MkCenterMenuTreeDto;
+import com.kmall.admin.entity.mk.MkCenterMenuEntity;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.mk.MkCenterMenuService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-15 11:23:38
+ */
+@Controller
+@RequestMapping("mkcentermenu")
+public class MkCenterMenuController {
+    private Log logger = LogFactory.getLog(MkCenterMenuController.class);
+    @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.queryListByStore(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) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+//        System.out.println(request.getRequestURI());
+//        System.out.println(request.getRequestURL());
+//        System.out.println(request.getContextPath());
+//        String requestPath = request.getRequestURL().toString().replaceAll("mkcentermenu/queryAll","");
+        List<MkCenterMenuEntity> list = new ArrayList<>();
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        if(Dict.roleType.item_1.getItem().equals(user.getRoleType())){
+            list = mkCenterMenuService.queryList(params);
+        }else{
+            list = mkCenterMenuService.queryCenterByList(params);
+        }
+        if(list != null && list.size() > 0) {
+            for (MkCenterMenuEntity mkCenterMenuEntity : list) {
+                if (StringUtils.isNotEmpty(mkCenterMenuEntity.getMenuUrl())) {
+                    mkCenterMenuEntity.setMenuUrl(request.getContextPath() + mkCenterMenuEntity.getMenuUrl());
+                }
+            }
+        }
+
+        return R.ok().put("list", list);
+    }
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/perms")
+    @ResponseBody
+    public R perms(@RequestParam Map<String, Object> params) {
+        List<MkCenterMenuEntity> list = mkCenterMenuService.queryList(params);
+        List<MkCenterMenuTreeDto> mkCenterMenuTreeDtos = new ArrayList<>();
+        MkCenterMenuTreeDto dto = new MkCenterMenuTreeDto();
+        dto.setCenterMenuId(0);
+        dto.setName("全部");
+        dto.setParentId(0);
+        dto.setParentName("全部");
+        mkCenterMenuTreeDtos.add(dto);
+        for (MkCenterMenuEntity mkCenterMenuEntity: list) {
+            MkCenterMenuTreeDto mkCenterMenuTreeDto = new MkCenterMenuTreeDto();
+            mkCenterMenuTreeDto.setCenterMenuId(mkCenterMenuEntity.getId());
+            mkCenterMenuTreeDto.setParentId(0);
+            mkCenterMenuTreeDto.setParentName("全部");
+            mkCenterMenuTreeDto.setName(mkCenterMenuEntity.getMenuName());
+            mkCenterMenuTreeDtos.add(mkCenterMenuTreeDto);
+        }
+
+        return R.ok().put("list", mkCenterMenuTreeDtos);
+    }
+}

+ 123 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/MkCenterMenuStoreRealController.java

@@ -0,0 +1,123 @@
+package com.kmall.admin.controller.mk;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.MkCenterMenuStoreRealEntity;
+import com.kmall.admin.service.mk.MkCenterMenuStoreRealService;
+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-05-28 10:14:06
+ */
+@Controller
+@RequestMapping("mkcentermenustorereal")
+public class MkCenterMenuStoreRealController {
+    @Autowired
+    private MkCenterMenuStoreRealService mkCenterMenuStoreRealService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkcentermenustorereal:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkCenterMenuStoreRealEntity> mkCenterMenuStoreRealList = mkCenterMenuStoreRealService.queryList(query);
+        int total = mkCenterMenuStoreRealService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkCenterMenuStoreRealList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("mkcentermenustorereal:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        MkCenterMenuStoreRealEntity mkCenterMenuStoreReal = mkCenterMenuStoreRealService.queryObject(id);
+
+        return R.ok().put("mkCenterMenuStoreReal", mkCenterMenuStoreReal);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkcentermenustorereal:save")
+    @ResponseBody
+    public R save(@RequestBody MkCenterMenuStoreRealEntity mkCenterMenuStoreReal) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkCenterMenuStoreReal);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("thirdMerchSn", "所属三方商户");
+//        builder.put("storeId", "所属门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkCenterMenuStoreRealService.saveOrUpdate(mkCenterMenuStoreReal);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkcentermenustorereal:update")
+    @ResponseBody
+    public R update(@RequestBody MkCenterMenuStoreRealEntity mkCenterMenuStoreReal) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkCenterMenuStoreReal);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("thirdMerchSn", "所属三方商户");
+//        builder.put("storeId", "所属门店");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkCenterMenuStoreRealService.update(mkCenterMenuStoreReal);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkcentermenustorereal:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        mkCenterMenuStoreRealService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkCenterMenuStoreRealEntity> list = mkCenterMenuStoreRealService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

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

@@ -0,0 +1,128 @@
+package com.kmall.admin.controller.mk.dist;
+
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.dist.MkDistChnlEntity;
+import com.kmall.admin.service.mk.dist.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 huangyq
+ * @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);
+    }
+}

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

@@ -0,0 +1,169 @@
+package com.kmall.admin.controller.mk.dist;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.dist.MkDistEntity;
+import com.kmall.admin.service.mk.dist.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 huangyq
+ * @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");
+        ParamUtils.setName(params, "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);
+    }
+
+    /**
+     * 修改层级时查看上级分销商
+     * @param params
+     * @return
+     */
+    @RequestMapping("/queryAllById")
+    @ResponseBody
+    public R queryAllById(@RequestParam Map<String, Object> params) {
+        List<MkDistEntity> list = new ArrayList<>();
+        String distId = (String)params.get("distId");
+        if(StringUtils.isNotEmpty(distId)){
+            MkDistEntity mkDistEntity = mkDistService.queryObject(Integer.parseInt(distId));
+            list.add(mkDistEntity);
+        }
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 根据商品id查询分销商
+     * @param params
+     * @return
+     */
+    @RequestMapping("/queryDistByGoodsId")
+    @ResponseBody
+    public R queryDistByGoodsId(@RequestParam Map<String, Object> params) {
+        if(StringUtils.isNotEmpty((String)params.get("storeId"))) {
+            MkDistEntity mkDistEntity = mkDistService.queryDistByStoreId(params);
+            return R.ok().put("mkDistEntity", mkDistEntity);
+        }
+        return R.ok().put("mkDistEntity", null);
+
+    }
+
+    @RequestMapping("/queryAllByHier")
+    @ResponseBody
+    public R queryAllByHier(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params.put("hierLvl", "1");
+        List<MkDistEntity> list = mkDistService.queryAllByHier(params);
+        return R.ok().put("list", list);
+    }
+
+}

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

@@ -0,0 +1,289 @@
+package com.kmall.admin.controller.mk.dist;
+
+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.dist.MkDistEntity;
+import com.kmall.admin.entity.mk.dist.MkDistHierEntity;
+import com.kmall.admin.entity.mk.dist.MkDistHierLvlEntity;
+import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
+import com.kmall.admin.service.mk.dist.MkDistHierService;
+import com.kmall.admin.service.mk.dist.MkDistSellAllocationService;
+import com.kmall.admin.service.mk.dist.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.*;
+
+
+/**
+ * 分销层级,树状层级,每个子级只有唯一一个父级,一个父级可以多个子级Controller
+ *
+ * @author huangyq
+ * @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");
+        ParamUtils.setName(params, "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");
+        ParamUtils.setName(params, "distHierName");
+        List<MkDistHierEntity> list = mkDistHierService.queryList(params);
+        for (MkDistHierEntity distHierEntity: list) {
+//            distHierEntity.setName(distHierEntity.getDistName());
+//            distHierEntity.setParentName(distHierEntity.getPdDistName());
+            if(distHierEntity.getHierLvl().equalsIgnoreCase("1")){
+                distHierEntity.setParentId(0L);
+            }
+        }
+        //添加顶级菜单
+//        MkDistHierEntity root = new MkDistHierEntity();
+//        root.setDistHierId(0);
+//        root.setDistHierName("一级分销");
+//        root.setPdistId(-1);
+//        root.setOpen(true);
+//        list.add(null);
+
+
+        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 storeId = (String) params.get("storeId");
+        String goodsId = (String) params.get("goodsId");
+        MkDistEntity distEntity = mkDistService.queryDistByGoodsId(Integer.parseInt(goodsId),Integer.parseInt(storeId));
+        Integer distId = distEntity.getDistId();
+        params.put("distId", distId);
+
+        List<MkDistHierEntity> treeList = new ArrayList<>();
+
+        List<ExpendDistDto> expendDistDtoList = new ArrayList<>();
+
+        MkDistHierEntity mkDistHierEntity = mkDistHierService.queryObjectByDistMap(params);
+        if(mkDistHierEntity != null){
+            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();
+            }
+            String lvl = mkDistHierEntity.getHierLvl();
+            Integer hierLvl = Integer.parseInt(lvl);
+            for (int i = 0; i< hierLvl-1; i++){
+                Map<String, Object> lvlMap = new HashMap<>();
+                lvlMap.put("distId", pdistId);
+                lvlMap.put("hierLvl", hierLvl-1-i);
+                List<MkDistHierEntity> lvlList = mkDistHierService.queryListByTree(lvlMap);
+                treeList.add(lvlList.get(0));
+                pdistId = lvlList.get(0).getPdistId();
+            }
+
+            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){
+//                SysUserEntity user = ShiroUtils.getUserEntity();
+//                Map<String, Object> distHierMap = new HashMap<>();
+//                if(StringUtils.isNotEmpty(user.getMerchSn())) {
+//                    distHierMap.put("merchSn", user.getMerchSn());
+//                }
+//                if(StringUtils.isNotEmpty(String.valueOf(distEntity.getStoreId()))) {
+//                    distHierMap.put("storeId", distEntity.getStoreId());
+//                }
+//                if(StringUtils.isNotEmpty(user.getThirdPartyMerchCode())) {
+//                    distHierMap.put("thirdPartyMerchCode", user.getThirdPartyMerchCode());
+//                }
+//                List<MkDistHierEntity> distHierEntityList = mkDistHierService.queryList(distHierMap);
+                for (int i=0; i < treeList.size(); i++) {
+                    MkDistHierEntity distHier = treeList.get(i);
+                    MkDistEntity mkDistEntity = mkDistService.queryObject(distHier.getDistId());
+                    ExpendDistDto expendDistDto = new ExpendDistDto();
+                    expendDistDto.setExpendDistId(distHier.getDistId());
+                    expendDistDto.setExpendDistName(mkDistEntity.getDistName());
+                    expendDistDto.setExpendDistLvl(distHier.getHierLvl());
+                    expendDistDtoList.add(expendDistDto);
+                }
+            }else{
+                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);
+                    MkDistEntity mkDistEntity = mkDistService.queryObject(distHier.getDistId());
+                    ExpendDistDto expendDistDto = new ExpendDistDto();
+                    expendDistDto.setExpendDistId(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);
+    }
+}

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

@@ -0,0 +1,138 @@
+package com.kmall.admin.controller.mk.dist;
+
+import java.util.*;
+
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
+import com.kmall.admin.service.mk.dist.MkDistSellAllocationService;
+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.*;
+
+/**
+ * 渠道销售分配,分销商针对某个商品sku的销售分配Controller
+ *
+ * @author huangyq
+ * @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);
+    }
+}

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

@@ -0,0 +1,178 @@
+package com.kmall.admin.controller.mk.dist;
+
+import java.util.*;
+
+import com.kmall.admin.entity.mk.dist.MkDistEntity;
+import com.kmall.admin.entity.mk.dist.MkDistSellStatisEntity;
+import com.kmall.admin.service.mk.dist.MkDistSellStatisService;
+import com.kmall.admin.service.mk.dist.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 huangyq
+ * @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 = ParamUtils.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 = ParamUtils.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 = ParamUtils.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();
+    }
+}

+ 235 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusController.java

@@ -0,0 +1,235 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.store.MkStoreCampMinusEntity;
+import com.kmall.admin.entity.mk.store.StoreTopicEntity;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
+import com.kmall.admin.service.mk.store.StoreTopicService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.file.FileUploadUtil;
+import com.kmall.common.utils.wechat.AccessToken;
+import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
+import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.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-05-29 14:43:28
+ */
+@Controller
+@RequestMapping("mkstorecampminus")
+public class MkStoreCampMinusController {
+    @Autowired
+    private MkStoreCampMinusService mkStoreCampMinusService;
+    @Autowired
+    private StoreTopicService storeTopicService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorecampminus:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "campName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreCampMinusEntity> mkStoreCampMinusList = mkStoreCampMinusService.queryList(query);
+        int total = mkStoreCampMinusService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStoreCampMinusList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{campMinusId}")
+    @RequiresPermissions("mkstorecampminus:info")
+    @ResponseBody
+    public R info(@PathVariable("campMinusId") Integer campMinusId) {
+        MkStoreCampMinusEntity mkStoreCampMinus = mkStoreCampMinusService.queryObject(campMinusId);
+
+        return R.ok().put("mkStoreCampMinus", mkStoreCampMinus);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorecampminus:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreCampMinusEntity mkStoreCampMinus) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreCampMinus);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("campName", "活动名称");
+        builder.put("campBegTime", "活动起始时间");
+        builder.put("campEndTime", "活动结束时间");
+        builder.put("campMinusType", "减免活动类型");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("goodsBizType", "货品业务类型");
+        builder.put("applyType", "适用类型");
+        builder.put("advImgUrl", "活动图片url");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkStoreCampMinusService.save(mkStoreCampMinus);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorecampminus:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreCampMinusEntity mkStoreCampMinus) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreCampMinus);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("campName", "活动名称");
+        builder.put("campBegTime", "活动起始时间");
+        builder.put("campEndTime", "活动结束时间");
+        builder.put("campMinusType", "减免活动类型");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("goodsBizType", "货品业务类型");
+        builder.put("applyType", "适用类型");
+        builder.put("advImgUrl", "活动图片url");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        mkStoreCampMinusService.update(mkStoreCampMinus);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorecampminus:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]campMinusIds) {
+        mkStoreCampMinusService.deleteBatch(campMinusIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStoreCampMinusEntity> list = mkStoreCampMinusService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    /**
+     * 结束活动
+     * @param campMinusId
+     * @return
+     */
+    @RequestMapping("/updatePastById")
+//    @RequiresPermissions("mkstorecampminus:updatePastById")
+    @ResponseBody
+    public R updatePastById(@RequestBody Integer campMinusId) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        MkStoreCampMinusEntity campMinusEntity = mkStoreCampMinusService.queryObject(campMinusId);
+        if(campMinusEntity != null) {
+            MkStoreCampMinusEntity entity = new MkStoreCampMinusEntity();
+            entity.setIsPast(Dict.isPast.item_1.getItem());
+            entity.setIsValid(Dict.isValid.item_1.getItem());
+            entity.setCampMinusId(campMinusId);
+            entity.setCampEndTime(new Date());
+            entity.setModTime(new Date());
+            entity.setModerSn(user.getUsername());
+            mkStoreCampMinusService.updatePastById(entity);
+
+            //修改为无效活动
+            StoreTopicEntity storeTopicEntity = new StoreTopicEntity();
+            storeTopicEntity.setId(campMinusEntity.getStoreTopicId());
+            storeTopicEntity.setIsValid(Dict.isValid.item_1.getItem());
+            storeTopicEntity.setModTime(new Date());
+            storeTopicEntity.setModerSn(user.getUsername());
+            storeTopicService.update(storeTopicEntity);
+        }
+        return R.ok();
+    }
+
+    /**
+     * 开始活动
+     * @param campMinusId
+     * @return
+     */
+    @RequestMapping("/updateStartPastById")
+//    @RequiresPermissions("mkstorecampminus:updateStartPastById")
+    @ResponseBody
+    public R updateStartPastById(@RequestBody Integer campMinusId) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        MkStoreCampMinusEntity campMinusEntity = mkStoreCampMinusService.queryObject(campMinusId);
+        if(campMinusEntity != null) {
+            MkStoreCampMinusEntity entity = new MkStoreCampMinusEntity();
+            entity.setIsPast(Dict.isPast.item_0.getItem());
+            entity.setCampMinusId(campMinusId);
+            entity.setCampBegTime(new Date());
+            entity.setModTime(new Date());
+            entity.setModerSn(user.getUsername());
+            mkStoreCampMinusService.updatePastById(entity);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/qrcodeCanvasByCampMinus/{campMinusId}")
+//    @RequiresPermissions("mkstorecampminus:qrcodeCanvas")
+    @ResponseBody
+    public R qrcodeCanvasByCampMinus(@PathVariable("campMinusId") Integer campMinusId) {
+        MkStoreCampMinusEntity campMinusEntity = mkStoreCampMinusService.queryObject(campMinusId);
+        if(campMinusEntity==null){
+            throw new RRException("门店满减满折信息不存在");
+        }
+        AccessToken accessToken = WxTemplateUtil.getAccessToken(WxPayPropertiesBuilder.instance().getAppId(),WxPayPropertiesBuilder.instance().getSecret());
+        if(accessToken == null){
+            throw new RRException("token获取失败");
+        }
+        String token = accessToken.getToken();
+
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        //dictId&storeId&isShare,isShare为0则是分享页进来的
+        params.put("scene", campMinusEntity.getCampMinusId()+"&"+campMinusEntity.getStoreId()+"&0");//参数
+        params.put("page", "pages/ucenter/couponDetail/couponDetail");//优惠券详情页面
+        params.put("width", 430);
+        String mapToXml = JSON.toJSONString(params);
+
+        String url = FileUploadUtil.getUploadUrl(mapToXml, token, campMinusId);
+        return R.ok().put("url", url);
+    }
+}

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

@@ -0,0 +1,128 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.MkStoreCampMinusGoodsEntity;
+import com.kmall.admin.service.mk.store.MkStoreCampMinusGoodsService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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-05-29 14:43:29
+ */
+@Controller
+@RequestMapping("mkstorecampminusgoods")
+public class MkStoreCampMinusGoodsController {
+    @Autowired
+    private MkStoreCampMinusGoodsService mkStoreCampMinusGoodsService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorecampminusgoods:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+        List<MkStoreCampMinusGoodsEntity> mkStoreCampMinusGoodsList = mkStoreCampMinusGoodsService.queryList(query);
+        int total = mkStoreCampMinusGoodsService.queryTotal(query);
+        PageUtils pageUtil = new PageUtils(mkStoreCampMinusGoodsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    @RequestMapping("/queryCampMinusGoodsByIdList")
+    @ResponseBody
+    public R queryCampMinusGoodsByIdList(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        ParamUtils.setName(params, "goodsName");
+        Query query = new Query(params);
+        List<MkStoreCampMinusGoodsEntity> mkStoreCampMinusGoodsList = mkStoreCampMinusGoodsService.queryCampMinusGoodsByIdList(query);
+        int total = mkStoreCampMinusGoodsService.queryCampMinusGoodsByIdTotal(query);
+        PageUtils pageUtil = new PageUtils(mkStoreCampMinusGoodsList, total, query.getLimit(), query.getPage());
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{minusGoodId}")
+    @RequiresPermissions("mkstorecampminusgoods:info")
+    @ResponseBody
+    public R info(@PathVariable("minusGoodId") Integer minusGoodId) {
+        MkStoreCampMinusGoodsEntity mkStoreCampMinusGoods = mkStoreCampMinusGoodsService.queryObject(minusGoodId);
+
+        return R.ok().put("mkStoreCampMinusGoods", mkStoreCampMinusGoods);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorecampminusgoods:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreCampMinusGoodsEntity mkStoreCampMinusGoods) {
+        mkStoreCampMinusGoodsService.save(mkStoreCampMinusGoods);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorecampminusgoods:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreCampMinusGoodsEntity mkStoreCampMinusGoods) {
+        mkStoreCampMinusGoodsService.update(mkStoreCampMinusGoods);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorecampminusgoods:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]minusGoodIds) {
+        mkStoreCampMinusGoodsService.deleteBatch(minusGoodIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkStoreCampMinusGoodsEntity> list = mkStoreCampMinusGoodsService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+    /**
+     * 保存
+     */
+    @RequestMapping("/batchSaveCampMinusGoods")
+//    @RequiresPermissions("mkstorecampminusgoods:save")
+    @ResponseBody
+    public R batchSaveCampMinusGoods(@RequestBody MkStoreCampMinusGoodsEntity mkStoreCampMinusGoods) {
+        mkStoreCampMinusGoodsService.batchSaveCampMinusGoods(mkStoreCampMinusGoods);
+
+        return R.ok();
+    }
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusLevelController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.MkStoreCampMinusLevelEntity;
+import com.kmall.admin.service.mk.store.MkStoreCampMinusLevelService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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.*;
+
+/**
+ * 门店满减活动层级表,活动减免类型为00:按满足最高层级减一次时增加的活动层级数据Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-05-29 14:43:29
+ */
+@Controller
+@RequestMapping("mkstorecampminuslevel")
+public class MkStoreCampMinusLevelController {
+    @Autowired
+    private MkStoreCampMinusLevelService mkStoreCampMinusLevelService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorecampminuslevel:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreCampMinusLevelEntity> mkStoreCampMinusLevelList = mkStoreCampMinusLevelService.queryList(query);
+        int total = mkStoreCampMinusLevelService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStoreCampMinusLevelList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{campMinusLevelId}")
+    @RequiresPermissions("mkstorecampminuslevel:info")
+    @ResponseBody
+    public R info(@PathVariable("campMinusId") Integer campMinusLevelId) {
+        MkStoreCampMinusLevelEntity mkStoreCampMinusLevel = mkStoreCampMinusLevelService.queryObject(campMinusLevelId);
+
+        return R.ok().put("mkStoreCampMinusLevel", mkStoreCampMinusLevel);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorecampminuslevel:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreCampMinusLevelEntity mkStoreCampMinusLevel) {
+        mkStoreCampMinusLevelService.save(mkStoreCampMinusLevel);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorecampminuslevel:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreCampMinusLevelEntity mkStoreCampMinusLevel) {
+        mkStoreCampMinusLevelService.update(mkStoreCampMinusLevel);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorecampminuslevel:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[] campMinusLevelIds) {
+        mkStoreCampMinusLevelService.deleteBatch(campMinusLevelIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkStoreCampMinusLevelEntity> list = mkStoreCampMinusLevelService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 109 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromChnlController.java

@@ -0,0 +1,109 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.MkStorePromChnlEntity;
+import com.kmall.admin.service.mk.store.MkStorePromChnlService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-26 15:52:20
+ */
+@Controller
+@RequestMapping("mkstorepromchnl")
+public class MkStorePromChnlController {
+    @Autowired
+    private MkStorePromChnlService mkStorePromChnlService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorepromchnl:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStorePromChnlEntity> mkStorePromChnlList = mkStorePromChnlService.queryList(query);
+        int total = mkStorePromChnlService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStorePromChnlList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{promChnlId}")
+    @RequiresPermissions("mkstorepromchnl:info")
+    @ResponseBody
+    public R info(@PathVariable("promChnlId") Integer promChnlId) {
+        MkStorePromChnlEntity mkStorePromChnl = mkStorePromChnlService.queryObject(promChnlId);
+
+        return R.ok().put("mkStorePromChnl", mkStorePromChnl);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorepromchnl:save")
+    @ResponseBody
+    public R save(@RequestBody MkStorePromChnlEntity mkStorePromChnl) {
+        mkStorePromChnlService.save(mkStorePromChnl);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorepromchnl:update")
+    @ResponseBody
+    public R update(@RequestBody MkStorePromChnlEntity mkStorePromChnl) {
+        mkStorePromChnlService.update(mkStorePromChnl);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorepromchnl:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]promChnlIds) {
+        mkStorePromChnlService.deleteBatch(promChnlIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStorePromChnlEntity> list = mkStorePromChnlService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 266 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromController.java

@@ -0,0 +1,266 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.io.*;
+import java.nio.file.Files;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.store.MkStorePromChnlEntity;
+import com.kmall.admin.entity.mk.store.MkStorePromEntity;
+import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.service.mk.store.MkStorePromService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.admin.utils.ShiroUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.fileserver.util.FileManager;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.file.FileUploadUtil;
+import com.kmall.common.utils.wechat.AccessToken;
+import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
+import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.disk.DiskFileItem;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.protocol.HTTP;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+/**
+ * 门店推广Controller
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-26 15:52:20
+ */
+@Controller
+@RequestMapping("mkstoreprom")
+public class MkStorePromController {
+    @Autowired
+    private MkStorePromService mkStorePromService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstoreprom:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "promName");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStorePromEntity> mkStorePromList = mkStorePromService.queryList(query);
+
+        int total = mkStorePromService.queryTotal(query);
+        PageUtils pageUtil = new PageUtils(mkStorePromList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{promId}")
+    @RequiresPermissions("mkstoreprom:info")
+    @ResponseBody
+    public R info(@PathVariable("promId") Integer promId) {
+        MkStorePromEntity mkStoreProm = mkStorePromService.queryObject(promId);
+
+        return R.ok().put("mkStoreProm", mkStoreProm);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstoreprom:save")
+    @ResponseBody
+    public R save(@RequestBody MkStorePromEntity mkStoreProm) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreProm);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("promName", "推广名称");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("promBegTime", "推广起始时间");
+        builder.put("promEndTime", "推广结束时间");
+        builder.put("promType", "推广分类");
+        builder.put("promChnlId", "推广渠道");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(mkStoreProm.getPromType().equalsIgnoreCase("00")){
+            builder.put("storeTopicId", "推广活动");
+        }
+        if(mkStoreProm.getPromType().equalsIgnoreCase("10")){
+            builder.put("goodsId", "推广商品");
+        }
+        r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(!DateUtils.compareDate(mkStoreProm.getPromBegTime(), mkStoreProm.getPromEndTime())){
+            throw new RRException("结束时间不能超过开始时间");
+        }
+
+        mkStorePromService.save(mkStoreProm);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstoreprom:update")
+    @ResponseBody
+    public R update(@RequestBody MkStorePromEntity mkStoreProm) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreProm);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("promName", "推广名称");
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("promBegTime", "推广起始时间");
+        builder.put("promEndTime", "推广结束时间");
+        builder.put("promType", "推广分类");
+        builder.put("promChnlId", "推广渠道");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(mkStoreProm.getPromType().equalsIgnoreCase("00")){
+            builder.put("storeTopicId", "推广活动");
+        }
+        if(mkStoreProm.getPromType().equalsIgnoreCase("10")){
+            builder.put("goodsId", "推广商品");
+        }
+        r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(!DateUtils.compareDate(mkStoreProm.getPromBegTime(), mkStoreProm.getPromEndTime())){
+            throw new RRException("结束时间不能超过开始时间");
+        }
+        mkStorePromService.update(mkStoreProm);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstoreprom:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]promIds) {
+        mkStorePromService.deleteBatch(promIds);
+
+        return R.ok();
+    }
+
+    @RequestMapping("/updateFinished")
+    @RequiresPermissions("mkstoreprom:update")
+    @ResponseBody
+    public R updateFinished(@RequestBody Integer promId) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        MkStorePromEntity mkStorePromEntity = mkStorePromService.queryObject(promId);
+        if(mkStorePromEntity != null){
+            if(mkStorePromEntity.getIsFinished().equalsIgnoreCase(Dict.isFinished.item_0.getItem())){
+                throw new RRException("该推广信息已结束,不能再次操作!");
+            }else{
+                MkStorePromEntity promEntity = new MkStorePromEntity();
+                promEntity.setPromId(promId);
+                promEntity.setIsFinished(Dict.isFinished.item_0.getItem());
+                promEntity.setPromEndTime(new Date());
+                promEntity.setModTime(new Date());
+                promEntity.setModerSn(user.getUsername());
+                mkStorePromService.updateStartedOrFinished(promEntity);
+            }
+        }
+
+        return R.ok();
+    }
+
+    @RequestMapping("/updateStarted")
+    @RequiresPermissions("mkstoreprom:update")
+    @ResponseBody
+    public R updateStarted(@RequestBody Integer promId) {
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        MkStorePromEntity mkStorePromEntity = mkStorePromService.queryObject(promId);
+        if(mkStorePromEntity != null){
+            if(mkStorePromEntity.getIsFinished().equalsIgnoreCase(Dict.isFinished.item_0.getItem())){
+                throw new RRException("该推广信息已结束,不能进行操作!");
+            }else if(mkStorePromEntity.getIsFinished().equalsIgnoreCase(Dict.isFinished.item_1.getItem())){
+                throw new RRException("该推广信息正在进行中,不能再次操作!");
+            }else{
+                MkStorePromEntity promEntity = new MkStorePromEntity();
+                promEntity.setPromId(promId);
+                promEntity.setIsFinished(Dict.isFinished.item_1.getItem());
+                promEntity.setPromBegTime(new Date());
+                promEntity.setModTime(new Date());
+                promEntity.setModerSn(user.getUsername());
+                mkStorePromService.updateStartedOrFinished(promEntity);
+            }
+        }
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStorePromEntity> list = mkStorePromService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/qrcodeCanvas/{promId}")
+//    @RequiresPermissions("mkstoreprom:qrcodeCanvas")
+    @ResponseBody
+    public R qrcodeCanvas(@PathVariable("promId") Integer promId) {
+        MkStorePromEntity storePromEntity = mkStorePromService.queryObject(promId);
+        if(storePromEntity==null){
+            throw new RRException("门店渠道推广信息不存在");
+        }
+        AccessToken accessToken = WxTemplateUtil.getAccessToken(WxPayPropertiesBuilder.instance().getAppId(),WxPayPropertiesBuilder.instance().getSecret());
+        if(accessToken == null){
+            throw new RRException("token获取失败");
+        }
+        String token = accessToken.getToken();
+
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        if(storePromEntity.getPromType().equalsIgnoreCase(Dict.promType.item_10.getItem())){
+            params.put("scene", storePromEntity.getGoodsId()+"&"+storePromEntity.getStoreId()+"&"+storePromEntity.getPromId());//参数
+            params.put("page", "pages/goods/goods");//商品详情页面
+        }
+        if(storePromEntity.getPromType().equalsIgnoreCase(Dict.promType.item_00.getItem())){
+            params.put("scene", storePromEntity.getStoreTopicId()+"&"+storePromEntity.getStoreId()+"&"+storePromEntity.getPromId());//参数
+            params.put("page", "pages/goods/goods");//活动详情页面
+        }
+        params.put("width", 430);
+        String mapToXml = JSON.toJSONString(params);
+
+        String url = FileUploadUtil.getUploadUrl(mapToXml, token, promId);
+        return R.ok().put("url", url);
+    }
+}

+ 179 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromStatController.java

@@ -0,0 +1,179 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.OrderEntity;
+import com.kmall.admin.entity.mk.store.MkStorePromStatEntity;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.service.mk.store.MkStorePromStatService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.StringUtils;
+import com.kmall.common.utils.excel.ExcelExport;
+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 com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 门店推广统计Controller
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-26 15:52:20
+ */
+@Controller
+@RequestMapping("mkstorepromstat")
+public class MkStorePromStatController {
+    @Autowired
+    private MkStorePromStatService mkStorePromStatService;
+
+    @Autowired
+    private OrderService orderService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorepromstat:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStorePromStatEntity> mkStorePromStatList = mkStorePromStatService.queryList(query);
+        int total = mkStorePromStatService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStorePromStatList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{promStatId}")
+    @RequiresPermissions("mkstorepromstat:info")
+    @ResponseBody
+    public R info(@PathVariable("promStatId") Integer promStatId) {
+        MkStorePromStatEntity mkStorePromStat = mkStorePromStatService.queryObject(promStatId);
+
+        return R.ok().put("mkStorePromStat", mkStorePromStat);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorepromstat:save")
+    @ResponseBody
+    public R save(@RequestBody MkStorePromStatEntity mkStorePromStat) {
+        mkStorePromStatService.save(mkStorePromStat);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorepromstat:update")
+    @ResponseBody
+    public R update(@RequestBody MkStorePromStatEntity mkStorePromStat) {
+        mkStorePromStatService.update(mkStorePromStat);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorepromstat:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]promStatIds) {
+        mkStorePromStatService.deleteBatch(promStatIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStorePromStatEntity> list = mkStorePromStatService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/promOrderList")
+//    @RequiresPermissions("mkstorepromstat:promOrderList")
+    @ResponseBody
+    public R promOrderList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<OrderEntity> mkStorePromStatList = orderService.promOrderList(query);
+        int total = orderService.queryPromOrderTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStorePromStatList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    @RequestMapping("/exportPromOrderList")
+//    @RequiresPermissions("mkstorepromstat:exportPromOrderList")
+    public R exportPromOrderList(@RequestParam Map<String, Object> params, HttpServletResponse response) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<OrderEntity> orderEntityList = orderService.promOrderListExport(params);
+
+        ExcelExport ee = new ExcelExport("渠道追踪推广订单列表");
+
+        String[] header = new String[]{"推广id", "订单编号", "商品", "商品单价", "订单实付金额", "渠道推广实收金额", "购买数量",  "会员", "商户订单号", "优惠券使用", "运费", "订单状态", "付款状态"};
+
+        List<Map<String, Object>> list = new ArrayList<>();
+
+        if (orderEntityList != null && orderEntityList.size() != 0) {
+            for (OrderEntity orderEntity : orderEntityList) {
+                LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+                map.put("PromId", orderEntity.getPromId());
+                map.put("OrderSn", orderEntity.getOrderSn());
+                map.put("GoodsName", orderEntity.getGoodsName());
+                map.put("RetailPrice", orderEntity.getRetailPrice());
+                map.put("ActualPrice", orderEntity.getActualPrice());
+                map.put("promActualPrice", orderEntity.getPromActualPrice());
+                map.put("Number", orderEntity.getNumber());
+                map.put("UserName", orderEntity.getUserName());
+                map.put("MerchOrderSn", orderEntity.getMerchOrderSn());
+                map.put("ActivityId", orderEntity.getActivityId()==null?"未使用":orderEntity.getActivityId());
+                map.put("FreightPrice", orderEntity.getFreightPrice());
+                map.put("OrderStatus", StringUtils.isNotEmpty(String.valueOf(orderEntity.getOrderStatus()))?
+                        Dict.orderStatus.valueOf("item_"+orderEntity.getOrderStatus()).getItemName():"");
+                map.put("PayStatus", StringUtils.isNotEmpty(String.valueOf(orderEntity.getPayStatus()))?
+                        Dict.payStatus.valueOf("item_"+orderEntity.getPayStatus()).getItemName():"");
+                list.add(map);
+            }
+        }
+
+        ee.addSheetByMap("渠道追踪推广订单列表", list, header);
+        ee.export(response);
+        return R.ok();
+    }
+
+}

+ 106 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStorePromTypeController.java

@@ -0,0 +1,106 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.MkStorePromTypeEntity;
+import com.kmall.admin.service.mk.store.MkStorePromTypeService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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.*;
+
+/**
+ * 门店活动分类表,store promotionController
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2019-04-28 14:15:21
+ */
+@Controller
+@RequestMapping("mkstorepromtype")
+public class MkStorePromTypeController {
+    @Autowired
+    private MkStorePromTypeService mkStorePromTypeService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstorepromtype:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStorePromTypeEntity> mkStorePromTypeList = mkStorePromTypeService.queryList(query);
+        int total = mkStorePromTypeService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStorePromTypeList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{promTypeId}")
+    @RequiresPermissions("mkstorepromtype:info")
+    @ResponseBody
+    public R info(@PathVariable("promTypeId") Integer promTypeId) {
+        MkStorePromTypeEntity mkStorePromType = mkStorePromTypeService.queryObject(promTypeId);
+
+        return R.ok().put("mkStorePromType", mkStorePromType);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstorepromtype:save")
+    @ResponseBody
+    public R save(@RequestBody MkStorePromTypeEntity mkStorePromType) {
+        mkStorePromTypeService.save(mkStorePromType);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstorepromtype:update")
+    @ResponseBody
+    public R update(@RequestBody MkStorePromTypeEntity mkStorePromType) {
+        mkStorePromTypeService.update(mkStorePromType);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstorepromtype:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]promTypeIds) {
+        mkStorePromTypeService.deleteBatch(promTypeIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkStorePromTypeEntity> list = mkStorePromTypeService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 319 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketDiscountController.java

@@ -0,0 +1,319 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.ImmutableBiMap;
+import com.kmall.admin.entity.mk.store.MkStoreTicketDiscountEntity;
+import com.kmall.admin.service.mk.store.MkStoreTicketDiscountService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+import com.kmall.common.utils.*;
+import com.kmall.common.utils.file.FileUploadUtil;
+import com.kmall.common.utils.wechat.AccessToken;
+import com.kmall.manager.manager.pay.wxpay.WxPayPropertiesBuilder;
+import com.kmall.manager.manager.wechat.wxtemplate.WxTemplateUtil;
+import org.apache.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-05-07 16:06:28
+ */
+@Controller
+@RequestMapping("mkstoreticketdiscount")
+public class MkStoreTicketDiscountController {
+    @Autowired
+    private MkStoreTicketDiscountService mkStoreTicketDiscountService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstoreticketdiscount:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreTicketDiscountEntity> mkStoreTicketDiscountList = mkStoreTicketDiscountService.queryList(query);
+        int total = mkStoreTicketDiscountService.queryTotal(query);
+        for (MkStoreTicketDiscountEntity discountEntity : mkStoreTicketDiscountList) {
+            if(discountEntity.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+                String startDate = DateUtils.format(discountEntity.getFixBegTime(), DateUtils.DATE_PATTERN);
+                String endDate = DateUtils.format(discountEntity.getFixEndTime(), DateUtils.DATE_PATTERN);
+                String inValidDate = startDate + " - " + endDate;
+                discountEntity.setInValidTime(inValidDate);
+                if(discountEntity.getFixEndTime() != null) {
+                    if (DateUtils.compareDate(new Date(), discountEntity.getFixEndTime())) {
+                        discountEntity.setInValidStatus("未过期");
+                        discountEntity.setValidStatus(0);
+                    } else {
+                        discountEntity.setInValidStatus("已过期");
+                        discountEntity.setValidStatus(1);
+                    }
+                }
+            }
+            if(discountEntity.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_01.getItem())){
+                String postponeNum = StringUtils.isNotEmpty(discountEntity.getPostponeNum()) ? discountEntity.getPostponeNum() : "0";
+                String validDayNum = StringUtils.isNotEmpty(discountEntity.getValidDayNum()) ? discountEntity.getValidDayNum() : "0";
+                String inValidDate = "领取后" + postponeNum + "天生效" + validDayNum + "天有效";
+                Integer day = Integer.parseInt(postponeNum) + Integer.parseInt(validDayNum);
+//                Date endDate = DateUtils.addDay(day);
+                Date endDate = DateUtils.addDay(new Date(), day);
+
+                discountEntity.setInValidTime(inValidDate);
+                if(DateUtils.compareDate(new Date(), endDate)) {
+                    discountEntity.setInValidStatus("未过期");
+                    discountEntity.setValidStatus(0);
+                }else{
+                    discountEntity.setInValidStatus("已过期");
+                    discountEntity.setValidStatus(1);
+                }
+            }
+        }
+
+        PageUtils pageUtil = new PageUtils(mkStoreTicketDiscountList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{tickDiscId}")
+    @RequiresPermissions("mkstoreticketdiscount:info")
+    @ResponseBody
+    public R info(@PathVariable("tickDiscId") Integer tickDiscId) {
+        MkStoreTicketDiscountEntity mkStoreTicketDiscount = mkStoreTicketDiscountService.queryObject(tickDiscId);
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+            String startDate = DateUtils.format(mkStoreTicketDiscount.getFixBegTime(), DateUtils.DATE_PATTERN);
+            String endDate = DateUtils.format(mkStoreTicketDiscount.getFixEndTime(), DateUtils.DATE_PATTERN);
+            String inValidDate = startDate + " - " + endDate;
+            mkStoreTicketDiscount.setInValidTime(inValidDate);
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_01.getItem())){
+            String postponeNum = StringUtils.isNotEmpty(mkStoreTicketDiscount.getPostponeNum()) ? mkStoreTicketDiscount.getPostponeNum() : "0";
+            String validDayNum = StringUtils.isNotEmpty(mkStoreTicketDiscount.getValidDayNum()) ? mkStoreTicketDiscount.getValidDayNum() : "0";
+            String inValidDate = "领取后" + postponeNum + "天生效" + validDayNum + "天有效";
+            Integer day = Integer.parseInt(postponeNum) + Integer.parseInt(validDayNum);
+            mkStoreTicketDiscount.setInValidTime(inValidDate);
+        }
+        return R.ok().put("mkStoreTicketDiscount", mkStoreTicketDiscount);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstoreticketdiscount:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreTicketDiscountEntity mkStoreTicketDiscount) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreTicketDiscount);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("name", "优惠券标题");
+        builder.put("effectTimeType", "生效时间");
+        builder.put("tickDiscType", "优惠类型");
+        builder.put("ticketNum", "库存");
+        builder.put("advImgUrl", "活动图片url(小图)");
+        builder.put("storeLogoUrl", "门店logo图url");
+        builder.put("ticketColor", "券面颜色");
+        builder.put("optDecl", "操作说明");
+        builder.put("discDecl", "优惠说明");
+        builder.put("useNoti", "使用须知");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+            builder.put("fixBegTime", "固定开始时间");
+            builder.put("fixEndTime", "固定结束时间");
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_01.getItem())){
+            builder.put("postponeNum", "领券天数");
+            builder.put("validDayNum", "有效天数");
+        }
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_00.getItem())){
+            builder.put("voucherMoney", "代金券减免金额");
+            builder.put("voucherCond", "代金券使用条件");
+        }
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_01.getItem())){
+            builder.put("discRatio", "折扣券折扣");
+            builder.put("discCond", "折扣券使用条件");
+        }
+        //// TODO: 2019/5/21 代金券暂时无用
+        /*if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_02.getItem())){
+            builder.put("exchCond", "兑换券使用条件");
+        }*/
+        r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+            if(!DateUtils.compareDate(mkStoreTicketDiscount.getFixBegTime(), mkStoreTicketDiscount.getFixEndTime())){
+                throw new RRException("固定结束时间不能超过固定开始时间");
+            }else{
+                String startDate = DateUtils.format(mkStoreTicketDiscount.getFixBegTime())+" 00:00:00";
+                String endDate = DateUtils.format(mkStoreTicketDiscount.getFixEndTime())+" 23:59:59";
+                mkStoreTicketDiscount.setFixBegTime(DateUtils.strToDate(startDate));
+                mkStoreTicketDiscount.setFixEndTime(DateUtils.strToDate(endDate));
+            }
+        }
+
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_00.getItem())){
+            if(mkStoreTicketDiscount.getVoucherMoney().compareTo(mkStoreTicketDiscount.getVoucherCond()) == 1){
+                throw new RRException("代金券减免金额不能大于使用条件");
+            }
+        }
+
+        if(StringUtils.isNotEmpty(mkStoreTicketDiscount.getSvrTel())) {
+            if (!PhoneFormatCheckUtils.isPhoneLegal(mkStoreTicketDiscount.getSvrTel())) {
+                throw new RRException("手机号格式有误");
+            }
+        }
+        mkStoreTicketDiscount.setName(mkStoreTicketDiscount.getName().trim());
+        mkStoreTicketDiscount.setTickDiscSubTitle(mkStoreTicketDiscount.getTickDiscSubTitle().trim());
+        mkStoreTicketDiscountService.save(mkStoreTicketDiscount);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstoreticketdiscount:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreTicketDiscountEntity mkStoreTicketDiscount) {
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(mkStoreTicketDiscount);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("thirdMerchSn", "所属三方商户");
+        builder.put("storeId", "所属门店");
+        builder.put("name", "优惠券标题");
+        builder.put("effectTimeType", "生效时间");
+        builder.put("tickDiscType", "优惠类型");
+        builder.put("ticketNum", "库存");
+        builder.put("advImgUrl", "活动图片url(小图)");
+        builder.put("storeLogoUrl", "门店logo图url");
+        builder.put("ticketColor", "券面颜色");
+        builder.put("optDecl", "操作说明");
+        builder.put("discDecl", "优惠说明");
+        builder.put("useNoti", "使用须知");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+            builder.put("fixBegTime", "固定开始时间");
+            builder.put("fixEndTime", "固定结束时间");
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_01.getItem())){
+            builder.put("postponeNum", "领券天数");
+            builder.put("validDayNum", "有效天数");
+        }
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_00.getItem())){
+            builder.put("voucherMoney", "代金券减免金额");
+            builder.put("voucherCond", "代金券使用条件");
+        }
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_01.getItem())){
+            builder.put("discRatio", "折扣券折扣");
+            builder.put("discCond", "折扣券使用条件");
+        }
+        //// TODO: 2019/5/21 代金券暂时无用
+        /*if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_02.getItem())){
+            builder.put("exchCond", "兑换券使用条件");
+        }*/
+        r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
+
+        if(mkStoreTicketDiscount.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_00.getItem())){
+            if(mkStoreTicketDiscount.getVoucherMoney().compareTo(mkStoreTicketDiscount.getVoucherCond()) == 1){
+                throw new RRException("代金券减免金额不能大于使用条件");
+            }
+        }
+        if(mkStoreTicketDiscount.getEffectTimeType().equalsIgnoreCase(Dict.effectTimeType.item_00.getItem())){
+            if(!DateUtils.compareDate(mkStoreTicketDiscount.getFixBegTime(), mkStoreTicketDiscount.getFixEndTime())){
+                throw new RRException("固定结束时间不能超过固定开始时间");
+            }else{
+                String startDate = DateUtils.format(mkStoreTicketDiscount.getFixBegTime())+" 00:00:00";
+                String endDate = DateUtils.format(mkStoreTicketDiscount.getFixEndTime())+" 23:59:59";
+                mkStoreTicketDiscount.setFixBegTime(DateUtils.strToDate(startDate));
+                mkStoreTicketDiscount.setFixEndTime(DateUtils.strToDate(endDate));
+            }
+        }
+
+        if(StringUtils.isNotEmpty(mkStoreTicketDiscount.getSvrTel())) {
+            if (!PhoneFormatCheckUtils.isPhoneLegal(mkStoreTicketDiscount.getSvrTel())) {
+                throw new RRException("手机号格式有误");
+            }
+        }
+        mkStoreTicketDiscountService.update(mkStoreTicketDiscount);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstoreticketdiscount:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]tickDiscIds) {
+        mkStoreTicketDiscountService.deleteBatch(tickDiscIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStoreTicketDiscountEntity> list = mkStoreTicketDiscountService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/qrcodeCanvasByTickDiscId/{tickDiscId}")
+//    @RequiresPermissions("mkstoreticketdiscount:qrcodeCanvasByTickDiscId")
+    @ResponseBody
+    public R qrcodeCanvasByTickDiscId(@PathVariable("tickDiscId") Integer tickDiscId) {
+        MkStoreTicketDiscountEntity ticketDiscountEntity = mkStoreTicketDiscountService.queryObject(tickDiscId);
+        if(ticketDiscountEntity == null){
+            throw new RRException("门店优惠券信息不存在");
+        }
+        AccessToken accessToken = WxTemplateUtil.getAccessToken(WxPayPropertiesBuilder.instance().getAppId(),WxPayPropertiesBuilder.instance().getSecret());
+        if(accessToken == null){
+            throw new RRException("token获取失败");
+        }
+        String token = accessToken.getToken();
+
+        //构建请求参数
+        Map<Object, Object> params = new HashMap<Object, Object>();
+        //dictId&storeId&isShare,isShare为0则是分享页进来的
+        params.put("scene", ticketDiscountEntity.getTickDiscId()+"&"+ticketDiscountEntity.getStoreId()+"&0");//参数
+        params.put("page", "pages/ucenter/couponDetail/couponDetail");//优惠券详情页面
+        params.put("width", 430);
+        String mapToXml = JSON.toJSONString(params);
+
+        String url = FileUploadUtil.getUploadUrl(mapToXml, token, tickDiscId);
+        return R.ok().put("url", url);
+    }
+}

+ 113 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketDiscountGoodsController.java

@@ -0,0 +1,113 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.dto.CheckGoodsDto;
+import com.kmall.admin.entity.mk.store.MkStoreTicketDiscountGoodsEntity;
+import com.kmall.admin.service.mk.store.MkStoreTicketDiscountGoodsService;
+import com.kmall.common.constant.Dict;
+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 com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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-05-07 16:06:28
+ */
+@Controller
+@RequestMapping("mkstoreticketdiscountgoods")
+public class MkStoreTicketDiscountGoodsController {
+    @Autowired
+    private MkStoreTicketDiscountGoodsService mkStoreTicketDiscountGoodsService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstoreticketdiscountgoods:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreTicketDiscountGoodsEntity> mkStoreTicketDiscountGoodsList = mkStoreTicketDiscountGoodsService.queryList(query);
+        int total = mkStoreTicketDiscountGoodsService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStoreTicketDiscountGoodsList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{discGoodId}")
+    @RequiresPermissions("mkstoreticketdiscountgoods:info")
+    @ResponseBody
+    public R info(@PathVariable("discGoodId") Integer discGoodId) {
+        MkStoreTicketDiscountGoodsEntity mkStoreTicketDiscountGoods = mkStoreTicketDiscountGoodsService.queryObject(discGoodId);
+
+        return R.ok().put("mkStoreTicketDiscountGoods", mkStoreTicketDiscountGoods);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstoreticketdiscountgoods:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreTicketDiscountGoodsEntity mkStoreTicketDiscountGoods) {
+        mkStoreTicketDiscountGoodsService.save(mkStoreTicketDiscountGoods);
+
+        return R.ok();
+    }
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstoreticketdiscountgoods:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreTicketDiscountGoodsEntity mkStoreTicketDiscountGoods) {
+        mkStoreTicketDiscountGoodsService.update(mkStoreTicketDiscountGoods);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstoreticketdiscountgoods:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]discGoodIds) {
+        mkStoreTicketDiscountGoodsService.deleteBatch(discGoodIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<MkStoreTicketDiscountGoodsEntity> list = mkStoreTicketDiscountGoodsService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 231 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTicketGoodsTempController.java

@@ -0,0 +1,231 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.MkStoreTicketGoodsTempEntity;
+import com.kmall.admin.service.mk.store.MkStoreTicketGoodsTempService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
+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-05-09 17:33:29
+ */
+@Controller
+@RequestMapping("mkstoreticketgoodstemp")
+public class MkStoreTicketGoodsTempController {
+    @Autowired
+    private MkStoreTicketGoodsTempService mkStoreTicketGoodsTempService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstoreticketgoodstemp:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreTicketGoodsTempEntity> mkStoreTicketGoodsTempList = mkStoreTicketGoodsTempService.queryList(query);
+        int total = mkStoreTicketGoodsTempService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStoreTicketGoodsTempList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{discGoodTempId}")
+    @RequiresPermissions("mkstoreticketgoodstemp:info")
+    @ResponseBody
+    public R info(@PathVariable("discGoodTempId") Integer discGoodTempId) {
+        MkStoreTicketGoodsTempEntity mkStoreTicketGoodsTemp = mkStoreTicketGoodsTempService.queryObject(discGoodTempId);
+
+        return R.ok().put("mkStoreTicketGoodsTemp", mkStoreTicketGoodsTemp);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstoreticketgoodstemp:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketGoodsTemp) {
+        mkStoreTicketGoodsTempService.save(mkStoreTicketGoodsTemp);
+
+        return R.ok();
+    }
+
+    /**
+     * 弹框中确认按钮批量添加
+     * @param mkStoreTicketDiscountGoods
+     * @return
+     */
+    @RequestMapping("/batchSaveDiscountGoods")
+//    @RequiresPermissions("mkstoreticketgoodstemp:batchSaveDiscountGoods")
+    @ResponseBody
+    public R batchSaveDiscountGoods(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketDiscountGoods) {
+        mkStoreTicketGoodsTempService.batchSaveDiscountGoods(mkStoreTicketDiscountGoods);
+        return R.ok();
+    }
+
+    /**
+     * 取消选中当前优惠券商品,将商品状态修改为无效
+     * @param mkStoreTicketDiscountGoods
+     * @return
+     */
+    @RequestMapping("/updateTempByIsValid")
+//    @RequiresPermissions("mkstoreticketgoodstemp:updateTempByIsValid")
+    @ResponseBody
+    public R updateTempByIsValid(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketDiscountGoods) {
+        MkStoreTicketGoodsTempEntity entity = mkStoreTicketGoodsTempService.queryGoodsTempByRealId(mkStoreTicketDiscountGoods.getStoreRelaId(), mkStoreTicketDiscountGoods.getGuid());
+        if(entity != null){
+            MkStoreTicketGoodsTempEntity tempEntity = new MkStoreTicketGoodsTempEntity();
+            tempEntity.setIsValid(Dict.isValid.item_1.getItem());
+            tempEntity.setDiscGoodTempId(entity.getDiscGoodTempId());
+            mkStoreTicketGoodsTempService.update(tempEntity);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/deleteTemp")
+//    @RequiresPermissions("mkstoreticketgoodstemp:deleteTemp")
+    @ResponseBody
+    public R deleteTemp(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketDiscountGoods) {
+        MkStoreTicketGoodsTempEntity entity = mkStoreTicketGoodsTempService.queryGoodsTempByRealId(mkStoreTicketDiscountGoods.getStoreRelaId(), mkStoreTicketDiscountGoods.getGuid());
+        if(entity != null){
+            Integer[] ids = {entity.getDiscGoodTempId()};
+            mkStoreTicketGoodsTempService.deleteBatch(ids);
+        }
+        return R.ok();
+    }
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstoreticketgoodstemp:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketGoodsTemp) {
+        mkStoreTicketGoodsTempService.update(mkStoreTicketGoodsTemp);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+//    @RequiresPermissions("mkstoreticketgoodstemp:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]discGoodTempIds) {
+        mkStoreTicketGoodsTempService.deleteBatch(discGoodTempIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改选中商品为无效
+     * @param discGoodTempIds
+     * @return
+     */
+    @RequestMapping("/updateIsValidById")
+//    @RequiresPermissions("mkstoreticketgoodstemp:updateIsValidById")
+    @ResponseBody
+    public R updateIsValidById(@RequestBody Integer[]discGoodTempIds) {
+        for (int i =0;i< discGoodTempIds.length; i++){
+            MkStoreTicketGoodsTempEntity tempEntity = new MkStoreTicketGoodsTempEntity();
+            tempEntity.setIsButtonCannel(Dict.isValid.item_1.getItem());//无效
+            tempEntity.setDiscGoodTempId(discGoodTempIds[i]);
+            mkStoreTicketGoodsTempService.update(tempEntity);
+        }
+        return R.ok();
+    }
+
+    /**
+     * 触发优惠券选择商品页面返回按钮时,将返回失效的商品还原为有效
+     * @param mkStoreTicketGoodsTemp
+     * @return
+     */
+    @RequestMapping("/resetIsValidByTemp")
+//    @RequiresPermissions("mkstoreticketgoodstemp:resetIsValidByTemp")
+    @ResponseBody
+    public R resetIsValidByTemp(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketGoodsTemp) {
+        mkStoreTicketGoodsTempService.resetDiscTicketIsValidByTemp(mkStoreTicketGoodsTemp);
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStoreTicketGoodsTempEntity> list = mkStoreTicketGoodsTempService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/queryAllDiscountByStoreId")
+    @ResponseBody
+    public R queryAllDiscountByStoreId(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreTicketGoodsTempEntity> list = mkStoreTicketGoodsTempService.queryAllDiscountByStoreId(query);
+
+        int total = mkStoreTicketGoodsTempService.queryTotallDiscountByStoreId(query);
+
+        PageUtils pageUtil = new PageUtils(list, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 触发门店活动选择商品页面分页按钮时保存数据
+     * @param mkStoreTicketDiscountGoods
+     * @return
+     */
+    @RequestMapping("/batchSaveStoreTopicGoods")
+//    @RequiresPermissions("mkstoreticketgoodstemp:batchSaveStoreTopicGoods")
+    @ResponseBody
+    public R batchSaveStoreTopicGoods(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketDiscountGoods) {
+        mkStoreTicketGoodsTempService.batchSaveStoreTopicGoods(mkStoreTicketDiscountGoods);
+        return R.ok();
+    }
+
+    /**
+     * 取消选中当前门店活动商品,将商品状态修改为无效
+     * @param mkStoreTicketDiscountGoods
+     * @return
+     */
+    @RequestMapping("/updateTempByStoreTopicIsValid")
+//    @RequiresPermissions("mkstoreticketgoodstemp:updateTempByStoreTopicIsValid")
+    @ResponseBody
+    public R updateTempByStoreTopicIsValid(@RequestBody MkStoreTicketGoodsTempEntity mkStoreTicketDiscountGoods) {
+        MkStoreTicketGoodsTempEntity entity = mkStoreTicketGoodsTempService.queryGoodsTempByRealIdAndTopicId(mkStoreTicketDiscountGoods.getStoreRelaId(),
+                mkStoreTicketDiscountGoods.getStoreTopicId());
+        if(entity != null){
+            MkStoreTicketGoodsTempEntity tempEntity = new MkStoreTicketGoodsTempEntity();
+            tempEntity.setDiscGoodTempId(entity.getDiscGoodTempId());
+            tempEntity.setIsValid(Dict.isValid.item_1.getItem());
+            mkStoreTicketGoodsTempService.update(tempEntity);
+        }
+        return R.ok();
+    }
+}

+ 129 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreTopicStatController.java

@@ -0,0 +1,129 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.OrderEntity;
+import com.kmall.admin.entity.mk.store.MkStoreTopicStatEntity;
+import com.kmall.admin.service.OrderService;
+import com.kmall.admin.service.mk.store.MkStoreTopicStatService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.MapUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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-05-24 17:58:24
+ */
+@Controller
+@RequestMapping("mkstoretopicstat")
+public class MkStoreTopicStatController {
+    @Autowired
+    private MkStoreTopicStatService mkStoreTopicStatService;
+    @Autowired
+    private OrderService orderService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("mkstoretopicstat:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<MkStoreTopicStatEntity> mkStoreTopicStatList = mkStoreTopicStatService.queryList(query);
+        int total = mkStoreTopicStatService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStoreTopicStatList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{storeTopicStatId}")
+    @RequiresPermissions("mkstoretopicstat:info")
+    @ResponseBody
+    public R info(@PathVariable("storeTopicStatId") Integer storeTopicStatId) {
+        MkStoreTopicStatEntity mkStoreTopicStat = mkStoreTopicStatService.queryObject(storeTopicStatId);
+
+        return R.ok().put("mkStoreTopicStat", mkStoreTopicStat);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("mkstoretopicstat:save")
+    @ResponseBody
+    public R save(@RequestBody MkStoreTopicStatEntity mkStoreTopicStat) {
+        mkStoreTopicStatService.save(mkStoreTopicStat);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("mkstoretopicstat:update")
+    @ResponseBody
+    public R update(@RequestBody MkStoreTopicStatEntity mkStoreTopicStat) {
+        mkStoreTopicStatService.update(mkStoreTopicStat);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("mkstoretopicstat:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]storeTopicStatIds) {
+        mkStoreTopicStatService.deleteBatch(storeTopicStatIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<MkStoreTopicStatEntity> list = mkStoreTopicStatService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+
+    @RequestMapping("/storeTopicOrderList")
+//    @RequiresPermissions("mkstoretopicstat:storeTopicOrderList")
+    @ResponseBody
+    public R storeTopicOrderList(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        //查询列表数据
+        Query query = new Query(params);
+        List<OrderEntity> mkStorePromStatList = orderService.storeTopicOrderList(query);
+        int total = orderService.queryStoreTopicOrderTotal(query);
+
+        PageUtils pageUtil = new PageUtils(mkStorePromStatList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+}

+ 110 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/StoreTopicController.java

@@ -0,0 +1,110 @@
+package com.kmall.admin.controller.mk.store;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.mk.store.StoreTopicEntity;
+import com.kmall.admin.service.mk.store.StoreTopicService;
+import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+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 huangyq
+ * @email admin@qhdswl.com
+ * @date 2019-04-26 16:50:46
+ */
+@Controller
+@RequestMapping("storetopic")
+public class StoreTopicController {
+    @Autowired
+    private StoreTopicService storeTopicService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("storetopic:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        ParamUtils.setName(params, "name");
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<StoreTopicEntity> storeTopicList = storeTopicService.queryList(query);
+        int total = storeTopicService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(storeTopicList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("storetopic:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        StoreTopicEntity storeTopic = storeTopicService.queryObject(id);
+
+        return R.ok().put("storeTopic", storeTopic);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("storetopic:save")
+    @ResponseBody
+    public R save(@RequestBody StoreTopicEntity storeTopic) {
+        storeTopicService.save(storeTopic);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("storetopic:update")
+    @ResponseBody
+    public R update(@RequestBody StoreTopicEntity storeTopic) {
+        storeTopicService.update(storeTopic);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("storetopic:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        storeTopicService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+
+        List<StoreTopicEntity> list = storeTopicService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 35 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/test.java

@@ -0,0 +1,35 @@
+package com.kmall.admin.controller;
+
+import com.kmall.admin.entity.WxOrderEntity;
+import com.kmall.common.utils.ResponseData;
+import com.kmall.common.utils.JacksonUtils;
+import com.kmall.common.utils.OkHttpUtils;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zengjunlin
+ * @version 1.0
+ * 2019-11-07 14:37
+ */
+public class test {
+    public static void main(String[] args) {
+
+        Map map = new HashMap();
+//        map.put("data", '1');
+//        String requestData = JacksonUtil.toJson(map);
+        String url = "http://192.168.1.68:8888/wx/wxOrderResendQueryAll ";
+        // 同步访问,返回结果字符串
+        String response = OkHttpUtils.post(map, url, "SSL");
+        ResponseData responseData = JacksonUtils.fromStringJson(response, ResponseData.class);
+        System.out.println(response);
+        System.out.println(responseData.getCode());
+        System.out.println(responseData.getMsg());
+        System.out.println(responseData.getData().getRows().size());
+        if(responseData.getCode().equalsIgnoreCase("0")){
+            List<WxOrderEntity> list = responseData.getData().getRows();
+            System.out.println(list);
+        }
+    }
+}

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

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.AdEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 09:37:35
+ */
+public interface AdDao extends BaseDao<AdEntity> {
+    AdEntity queryAdByTickDiscId(Integer tickDiscId);
+    AdEntity queryAdByStoreTopicId(Integer storeTopicId);
+}

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/AdPositionDao.java

@@ -0,0 +1,14 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.AdPositionEntity;
+import com.kmall.manager.dao.BaseDao;
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 12:02:42
+ */
+public interface AdPositionDao extends BaseDao<AdPositionEntity> {
+
+}

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

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.AddressEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-16 17:22:46
+ */
+public interface AddressDao extends BaseDao<AddressEntity> {
+
+}

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

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.AttributeCategoryEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-17 16:13:27
+ */
+public interface AttributeCategoryDao extends BaseDao<AttributeCategoryEntity> {
+
+}

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

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.AttributeEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-17 16:48:17
+ */
+public interface AttributeDao extends BaseDao<AttributeEntity> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.BrandEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-19 17:59:15
+ */
+public interface BrandDao extends BaseDao<BrandEntity> {
+    BrandEntity queryObjectByName(@Param("brandName")String brandName,@Param("merchSn")String merchSn);
+    List<BrandEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
+    BrandEntity queryBrandByBrandNameAndStoreId(@Param("brandName")String brandName,@Param("storeId") Long storeId);
+}

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

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.CartEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 
+ * 
+ * @author Scott
+ * @email
+ * @date 2017-08-13 10:41:06
+ */
+public interface CartDao extends BaseDao<CartEntity> {
+	
+}

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

@@ -0,0 +1,20 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.CategoryEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-21 15:32:31
+ */
+public interface CategoryDao extends BaseDao<CategoryEntity> {
+    CategoryEntity queryObjectByName(@Param("cateGoryName") String cateGoryName,@Param("merchSn")String merchSn);
+    List<CategoryEntity> queryObjectByStoreId(@Param("storeId") Long storeId);
+
+}

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

@@ -0,0 +1,15 @@
+package com.kmall.admin.dao;
+
+import com.kmall.admin.entity.ChannelEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * Dao
+ *
+ * @author Scott
+ * @email
+ * @date 2017-08-22 19:19:56
+ */
+public interface ChannelDao extends BaseDao<ChannelEntity> {
+
+}

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