Browse Source

1.文档问题修复
2.新增会员等级接口

FengChaoYu 1 month ago
parent
commit
59cea10622

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsCategoryBean.java

@@ -14,6 +14,9 @@ import java.util.List;
 @Data
 public class GoodsCategoryBean extends GoodsCategory {
 
+    @ApiModelProperty( value = "商品分类关系")
+    private String goodsCategoryStr;
+
     @ApiModelProperty( value = "子类别")
     private List<GoodsCategoryBean> children;
 

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsDocumentsRelaBean.java

@@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode;
 @ApiModel
 public class GoodsDocumentsRelaBean extends GoodsDocumentsRela {
 
+    @ApiModelProperty(value = "文件一级分类名称")
+    private String parentCategoryName;
+
     @ApiModelProperty(value = "文件名称")
     private String fileName;
 

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsLibraryDocumentsRelaBean.java

@@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode;
 @ApiModel
 public class GoodsLibraryDocumentsRelaBean extends GoodsLibraryDocumentsRela {
 
+    @ApiModelProperty(value = "文件一级分类名称")
+    private String parentCategoryName;
+
     @ApiModelProperty(value = "文件名称")
     private String fileName;
 

+ 27 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/user/UserLevelBean.java

@@ -0,0 +1,27 @@
+package com.gree.mall.manager.bean.user;
+
+import com.gree.mall.manager.plus.entity.User;
+import com.gree.mall.manager.plus.entity.UserLevel;
+import com.gree.mall.manager.plus.entity.UserLevelGoods;
+import com.gree.mall.manager.plus.entity.UserLevelRela;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class UserLevelBean extends UserLevel {
+
+    @ApiModelProperty(value = "会员列表(回显用)")
+    private List<User> userList;
+
+    @ApiModelProperty(value = "会员列表(添加用)")
+    private List<UserLevelRela> relaList;
+
+    @ApiModelProperty(value = "商品规格列表")
+    private List<UserLevelGoods> goodsSpecList;
+}

+ 38 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/user/UserLevelVO.java

@@ -0,0 +1,38 @@
+package com.gree.mall.manager.bean.user;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel
+@ZfireField(tbName = "a")
+public class UserLevelVO {
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "等级名称")
+    private String levelName;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "修改人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 12 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/CommonMapper.java

@@ -26,6 +26,7 @@ import com.gree.mall.manager.bean.settle.SettleMonthWagesWorkerVO;
 import com.gree.mall.manager.bean.settle.repair.*;
 import com.gree.mall.manager.bean.user.UserCompanyCreditBillItemVO;
 import com.gree.mall.manager.bean.user.UserCompanyCreditBillVO;
+import com.gree.mall.manager.bean.user.UserLevelVO;
 import com.gree.mall.manager.bean.workorder.*;
 import com.gree.mall.manager.enums.UserTypeEnum;
 import com.gree.mall.manager.plus.entity.CommonFile;
@@ -641,4 +642,15 @@ public interface CommonMapper {
      * @return
      */
     IPage<GoodsDocumentsFileVO> goodsDocumentsFileList(Page page, @Param("ex") ZfireParamBean zfireParamBean, @Param("categoryList") List<String> categoryList);
+
+    /**
+     * 会员等级列表
+     * @param page
+     * @return
+     */
+    IPage<UserLevelVO> userLevelList(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    List<GoodsLibraryDocumentsRelaBean> findGoodsDocumentsCategoryListByGoodsLibraryId(@Param("id") String goodsLibraryId);
+
+    List<GoodsDocumentsRelaBean> findGoodsDocumentsCategoryListByGoodsId(@Param("id") String goodsId);
 }

+ 11 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/UserLevelMapper.java

@@ -0,0 +1,11 @@
+package com.gree.mall.manager.commonmapper;
+
+import com.gree.mall.manager.plus.entity.UserLevel;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+@Mapper
+public interface UserLevelMapper {
+
+    UserLevel existUserInUserLevel(@Param("companyName") String companyName, @Param("userId") String userId, @Param("userLevelId") String userLevelId);
+}

+ 84 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/member/UserLevelController.java

@@ -0,0 +1,84 @@
+package com.gree.mall.manager.controller.member;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.user.UserLevelBean;
+import com.gree.mall.manager.bean.user.UserLevelVO;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.user.UserLevelLogic;
+import com.gree.mall.manager.plus.entity.UserLevel;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@Slf4j
+@RestController
+@Api(value = "会员等级API", tags ={"会员等级API"} )
+@RequestMapping(value = "/user/level", produces = "application/json; charset=utf-8")
+public class UserLevelController {
+
+    @Resource
+    UserLevelLogic userLevelLogic;
+
+    @ZfireList
+    @PostMapping("/list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<UserLevelVO>> page(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws Exception {
+        IPage<UserLevelVO> page = userLevelLogic.page(zfireParamBean);
+        return ResponseHelper.success(page, new TypeReference<UserLevelVO>() {});
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation(value = "详情")
+    public ResponseHelper<UserLevelBean> detail(
+            @ApiParam(value = "id",required = true) @RequestParam String id
+    ) throws RemoteServiceException {
+        UserLevelBean detail = userLevelLogic.detail(id);
+        return ResponseHelper.success(detail);
+    }
+
+    @PostMapping("/del")
+    @ApiOperation(value = "删除")
+    public ResponseHelper del(
+            @ApiParam(value = "id",required = true) @RequestParam String id
+    ) throws RemoteServiceException {
+        userLevelLogic.del(id);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/add")
+    @ApiOperation(value = "新增")
+    public ResponseHelper add(
+            @ApiParam(value = "object",required = true) @RequestBody UserLevel userLevel
+    ) throws RemoteServiceException {
+        userLevelLogic.add(userLevel);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/edit")
+    @ApiOperation(value = "编辑")
+    public ResponseHelper edit(
+            @ApiParam(value = "object",required = true) @RequestBody UserLevel userLevel
+    ) throws RemoteServiceException {
+        userLevelLogic.edit(userLevel);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/add/user")
+    @ApiOperation(value = "添加会员")
+    public ResponseHelper add(
+            @ApiParam(value = "object",required = true) @RequestBody UserLevelBean userLevel
+    ) throws RemoteServiceException {
+        userLevelLogic.addUser(userLevel);
+        return ResponseHelper.success();
+    }
+}

+ 43 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/goods/GoodsCategoryLogic.java

@@ -19,6 +19,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Component
@@ -58,7 +60,44 @@ public class GoodsCategoryLogic {
         if (type == null) {
             type = 1;
         }
-        return customGoodsCategoryMapper.list(type, level, status, name, companyWechatIds);
+        final List<GoodsCategoryBean> beanList = customGoodsCategoryMapper.list(type, level, status, name, companyWechatIds);
+        if (type == 5 && CollectionUtil.isNotEmpty(beanList)) {
+            // 文档分类处理
+            final List<String> categoryList = beanList.stream().map(GoodsCategoryBean::getCategoryId).distinct().collect(Collectors.toList());
+            final List<GoodsCategoryRela> relaList = goodsCategoryRelaService.lambdaQuery()
+                    .in(GoodsCategoryRela::getCategoryId, categoryList)
+                    .list();
+
+            // 获取商品分类
+            final List<String> goodsCategoryIdList = relaList.stream().map(GoodsCategoryRela::getParentCategoryId).distinct().collect(Collectors.toList());
+            final List<GoodsCategory> goodsCategoryList = goodsCategoryService.lambdaQuery()
+                    .select(GoodsCategory::getCategoryId, GoodsCategory::getName)
+                    .in(GoodsCategory::getCategoryId, goodsCategoryIdList)
+                    .list();
+
+            final Map<String, String> goodsCategoryMap = goodsCategoryList.stream().collect(Collectors.toMap(GoodsCategory::getCategoryId, GoodsCategory::getName));
+
+
+            final Map<String, List<GoodsCategoryRela>> groupCategoryMap = relaList.stream().collect(Collectors.groupingBy(GoodsCategoryRela::getCategoryId));
+            for (GoodsCategoryBean bean : beanList) {
+                final List<GoodsCategoryRela> goodsCategoryRelas = groupCategoryMap.get(bean.getCategoryId());
+                if (CollectionUtil.isNotEmpty(goodsCategoryRelas)) {
+                    StringBuilder sb = new StringBuilder();
+                    for (GoodsCategoryRela goodsCategoryRela : goodsCategoryRelas) {
+                        final String categoryName = goodsCategoryMap.get(goodsCategoryRela.getParentCategoryId());
+                        if (StringUtils.isNotBlank(categoryName)) {
+                            sb.append(categoryName).append(",");
+                        }
+                    }
+
+                    if (StringUtils.isNotBlank(sb.toString())) {
+                        sb.deleteCharAt(sb.length() - 1);
+                        bean.setGoodsCategoryStr(sb.toString());
+                    }
+                }
+            }
+        }
+        return beanList;
     }
 
     /**
@@ -101,7 +140,9 @@ public class GoodsCategoryLogic {
         goodsCategory.insert();
 
         // 文档分类处理
-        if (goodsCategoryBean.getType() == 5 && CollectionUtil.isNotEmpty(goodsCategoryBean.getGoodsCategoryRelaList())) {
+        if (Objects.nonNull(goodsCategoryBean.getType())
+                && goodsCategoryBean.getType() == 5
+                && CollectionUtil.isNotEmpty(goodsCategoryBean.getGoodsCategoryRelaList())) {
             for (GoodsCategoryRela categoryRela : goodsCategoryBean.getGoodsCategoryRelaList()) {
                 categoryRela.setCategoryId(goodsCategory.getCategoryId());
             }

+ 6 - 12
mall-server-api/src/main/java/com/gree/mall/manager/logic/goods/GoodsLibraryLogic.java

@@ -15,6 +15,7 @@ import com.gree.mall.manager.plus.entity.CommonFile;
 import com.gree.mall.manager.plus.entity.GoodsLibrary;
 import com.gree.mall.manager.plus.entity.GoodsLibraryDocumentsRela;
 import com.gree.mall.manager.plus.entity.GoodsLibrarySpec;
+import com.gree.mall.manager.plus.service.GoodsDocumentsService;
 import com.gree.mall.manager.plus.service.GoodsLibraryDocumentsRelaService;
 import com.gree.mall.manager.plus.service.GoodsLibraryService;
 import com.gree.mall.manager.plus.service.GoodsLibrarySpecService;
@@ -28,7 +29,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.InputStream;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -112,27 +112,21 @@ public class GoodsLibraryLogic {
         List<GoodsLibrarySpec> list = goodsLibrarySpecService.lambdaQuery().eq(GoodsLibrarySpec::getGoodsLibraryId, goodsLibraryBean.getGoodsLibraryId()).list();
         goodsLibraryBean.setGoodsLibrarySpecList(list);
 
-        final List<GoodsLibraryDocumentsRela> relaList = goodsLibraryDocumentsRelaService.lambdaQuery()
-                .eq(GoodsLibraryDocumentsRela::getGoodsLibraryId, goodsLibraryId)
-                .list();
+        final List<GoodsLibraryDocumentsRelaBean> relaList = commonMapper.findGoodsDocumentsCategoryListByGoodsLibraryId(goodsLibraryId);
 
         if (CollectionUtil.isNotEmpty(relaList)) {
-            List<GoodsLibraryDocumentsRelaBean> relaBeanList = new ArrayList<>();
             final List<CommonFile> commonFileList = commonMapper.findCommonFileById(relaList.stream()
                     .map(GoodsLibraryDocumentsRela::getCommonFileId)
                     .collect(Collectors.toList()));
 
             final Map<String, CommonFile> fileMap = commonFileList.stream().collect(Collectors.toMap(CommonFile::getId, Function.identity()));
 
-            for (GoodsLibraryDocumentsRela rela : relaList) {
-                GoodsLibraryDocumentsRelaBean relaBean = new GoodsLibraryDocumentsRelaBean();
-                BeanUtils.copyProperties(rela, relaBean);
+            for (GoodsLibraryDocumentsRelaBean rela : relaList) {
                 final CommonFile commonFile = fileMap.get(rela.getCommonFileId());
-                relaBean.setFileName(commonFile.getName());
-                relaBean.setUrl(commonFile.getUrl());
-                relaBeanList.add(relaBean);
+                rela.setFileName(commonFile.getName());
+                rela.setUrl(commonFile.getUrl());
             }
-            goodsLibraryBean.setGoodsLibraryDocumentsRelaList(relaBeanList);
+            goodsLibraryBean.setGoodsLibraryDocumentsRelaList(relaList);
         }
 
         return goodsLibraryBean;

+ 5 - 11
mall-server-api/src/main/java/com/gree/mall/manager/logic/goods/GoodsLogic.java

@@ -290,27 +290,21 @@ public class GoodsLogic {
         }
 
         // 文档列表
-        final List<GoodsDocumentsRela> relaList = goodsDocumentsRelaService.lambdaQuery()
-                .eq(GoodsDocumentsRela::getGoodsId, goodsId)
-                .list();
+        final List<GoodsDocumentsRelaBean> relaList = commonMapper.findGoodsDocumentsCategoryListByGoodsId(goodsId);
 
         if (CollectionUtil.isNotEmpty(relaList)) {
-            List<GoodsDocumentsRelaBean> relaBeanList = new ArrayList<>();
             final List<CommonFile> commonFileList = commonMapper.findCommonFileById(relaList.stream()
                     .map(GoodsDocumentsRela::getCommonFileId)
                     .collect(Collectors.toList()));
 
             final Map<String, CommonFile> fileMap = commonFileList.stream().collect(Collectors.toMap(CommonFile::getId, Function.identity()));
 
-            for (GoodsDocumentsRela rela : relaList) {
-                GoodsDocumentsRelaBean relaBean = new GoodsDocumentsRelaBean();
-                BeanUtils.copyProperties(rela, relaBean);
+            for (GoodsDocumentsRelaBean rela : relaList) {
                 final CommonFile commonFile = fileMap.get(rela.getCommonFileId());
-                relaBean.setFileName(commonFile.getName());
-                relaBean.setUrl(commonFile.getUrl());
-                relaBeanList.add(relaBean);
+                rela.setFileName(commonFile.getName());
+                rela.setUrl(commonFile.getUrl());
             }
-            goodsBean.setGoodsDocumentsRelaList(relaBeanList);
+            goodsBean.setGoodsDocumentsRelaList(relaList);
         }
 
         return goodsBean;

+ 175 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/user/UserLevelLogic.java

@@ -0,0 +1,175 @@
+package com.gree.mall.manager.logic.user;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.bean.user.UserLevelBean;
+import com.gree.mall.manager.bean.user.UserLevelVO;
+import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.commonmapper.UserLevelMapper;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.User;
+import com.gree.mall.manager.plus.entity.UserLevel;
+import com.gree.mall.manager.plus.entity.UserLevelGoods;
+import com.gree.mall.manager.plus.entity.UserLevelRela;
+import com.gree.mall.manager.plus.service.UserLevelGoodsService;
+import com.gree.mall.manager.plus.service.UserLevelRelaService;
+import com.gree.mall.manager.plus.service.UserLevelService;
+import com.gree.mall.manager.plus.service.UserService;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class UserLevelLogic {
+
+    private final CommonLogic commonLogic;
+    private final CommonMapper commonMapper;
+    private final UserLevelService userLevelService;
+    private final UserLevelRelaService userLevelRelaService;
+    private final UserLevelGoodsService userLevelGoodsService;
+    private final UserService userService;
+    private final UserLevelMapper userLevelMapper;
+
+    public IPage<UserLevelVO> page(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.supplyParam(zfireParamBean, UserLevelVO.class, adminUser);
+        IPage<UserLevelVO> list = commonMapper.userLevelList(new Page(zfireParamBean.getPageNum(),
+                zfireParamBean.getPageSize()), zfireParamBean);
+        return list;
+    }
+
+
+    public UserLevelBean detail(String id) {
+        final UserLevel userLevel = userLevelService.getById(id);
+        if (Objects.isNull(userLevel)) {
+            throw new RemoteServiceException("会员等级有误");
+        }
+        UserLevelBean bean = new UserLevelBean();
+        BeanUtils.copyProperties(userLevel, bean);
+        final List<UserLevelRela> relaList = userLevelRelaService.lambdaQuery()
+                .eq(UserLevelRela::getUserLevelId, id)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(relaList)) {
+            final List<String> ids = relaList.stream().map(UserLevelRela::getUserId).collect(Collectors.toList());
+            final List<User> userList = userService.lambdaQuery()
+                    .in(User::getUserId, ids)
+                    .list();
+            bean.setUserList(userList);
+        }
+
+        final List<UserLevelGoods> userLevelGoods = userLevelGoodsService.lambdaQuery()
+                .eq(UserLevelGoods::getUserLevelId, id)
+                .list();
+
+        bean.setGoodsSpecList(userLevelGoods);
+
+        return bean;
+    }
+
+    @Transactional
+    public void del(String id) {
+        if (userLevelGoodsService.lambdaQuery()
+                .eq(UserLevelGoods::getUserLevelId, id)
+                .count() > 0) {
+            throw new RemoteServiceException("请清空商品关系后再删除等级");
+        }
+        userLevelService.removeById(id);
+    }
+
+    @Transactional
+    public void add(UserLevel userLevel) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        String loginCompanyWechatId = adminUser.getCompanyWechatId();
+        if (StringUtils.isBlank(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无添加会员等级权限");
+        }
+        if (Objects.isNull(userLevel.getSort())) {
+            throw new RemoteServiceException("排序不能为空");
+        }
+        if (userLevelService.lambdaQuery()
+                .eq(UserLevel::getCompanyWechatId,adminUser.getCompanyWechatId())
+                .eq(UserLevel::getSort, userLevel.getSort())
+                .count() > 0)
+            throw new RemoteServiceException("排序重复,请修改");
+
+        userLevel.setCompanyWechatId(loginCompanyWechatId);
+        userLevel.setCompanyWechatName(adminUser.getCompanyName());
+        userLevel.insert();
+    }
+
+    @Transactional
+    public void edit(UserLevel userLevel) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        String loginCompanyWechatId = adminUser.getCompanyWechatId();
+        if (StringUtils.isBlank(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无编辑会员等级权限");
+        }
+        String id = userLevel.getId();
+        if (StringUtils.isBlank(id)) {
+            throw new RemoteServiceException("无效会员等级");
+        }
+
+        if (Objects.isNull(userLevel.getSort())) {
+            throw new RemoteServiceException("排序不能为空");
+        }
+        if (userLevelService.lambdaQuery()
+                .eq(UserLevel::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .eq(UserLevel::getSort, userLevel.getSort())
+                .ne(UserLevel::getId, userLevel.getId())
+                .count() > 0)
+            throw new RemoteServiceException("排序重复,请修改");
+
+        //更新
+        userLevel.updateById();
+    }
+
+    @Transactional
+    public void addUser(UserLevelBean userLevel) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        String loginCompanyWechatId = adminUser.getCompanyWechatId();
+        if (StringUtils.isBlank(loginCompanyWechatId)) {
+            throw new RemoteServiceException("无添加会员关系权限");
+        }
+
+        // 先清空会员关系
+        userLevelRelaService.lambdaUpdate()
+                .eq(UserLevelRela::getUserLevelId, userLevel.getId())
+                .remove();
+
+        if (CollectionUtil.isNotEmpty(userLevel.getUserList())) {
+            List<UserLevelRela> relaList = new ArrayList<>();
+            for (UserLevelRela userLevelRela : userLevel.getRelaList()) {
+                UserLevelRela rela = new UserLevelRela();
+                // 如果会员在其他等级里就阻止
+                final UserLevel existUserLevel = userLevelMapper.existUserInUserLevel(loginCompanyWechatId, userLevelRela.getUserId(), userLevel.getId());
+
+                if (Objects.nonNull(existUserLevel)) {
+                    final User user = userService.getById(userLevelRela.getUserId());
+                    throw new RemoteServiceException(user.getNickName() + "已在" + existUserLevel.getLevelName() +  "建立关系");
+                }
+                rela.setCompanyWechatId(userLevel.getCompanyWechatId())
+                        .setUserId(userLevelRela.getUserId())
+                        .setUserLevelId(userLevel.getId());
+
+                relaList.add(rela);
+            }
+        }
+
+    }
+}

+ 38 - 0
mall-server-api/src/main/resources/mapper/CommonMapper.xml

@@ -1234,5 +1234,43 @@
         ${ex.orderBy}
     </select>
 
+    <select id="userLevelList" resultType="com.gree.mall.manager.bean.user.UserLevelVO">
+        SELECT
+        ${ex.selected}
+        FROM user_level a
+        ${ex.query}
+        AND a.del = 0
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.sort ASC, a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
+
+    <select id="findGoodsDocumentsCategoryListByGoodsLibraryId"
+            resultType="com.gree.mall.manager.bean.goods.GoodsLibraryDocumentsRelaBean">
+        SELECT
+            a.*,
+            c.name AS parent_category_name
+        FROM
+            goods_library_documents_rela a
+                JOIN goods_documents b ON a.goods_documents_id = b.id
+                LEFT JOIN goods_category c ON b.parent_category_id = c.category_id
+        WHERE
+            a.goods_library_id = #{id}
+    </select>
+
+    <select id="findGoodsDocumentsCategoryListByGoodsId"
+            resultType="com.gree.mall.manager.bean.goods.GoodsDocumentsRelaBean">
+        SELECT
+            a.*,
+            c.name AS parent_category_name
+        FROM
+            goods_documents_rela a
+                JOIN goods_documents b ON a.goods_documents_id = b.id
+                LEFT JOIN goods_category c ON b.parent_category_id = c.category_id
+        WHERE
+            a.goods_id = #{id}
+    </select>
+
 
 </mapper>

+ 16 - 0
mall-server-api/src/main/resources/mapper/UserLevelMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gree.mall.manager.commonmapper.UserLevelMapper">
+
+    <select id="existUserInUserLevel" resultType="com.gree.mall.manager.plus.entity.UserLevel">
+        SELECT
+            b.level_name
+        FROM
+             user_level_rela a JOIN user_level b ON a.user_level_id = b.id
+        WHERE
+            b.del = 0
+            AND a.company_wechat_id = #{companyName}
+            AND a.user_id = #{userId}
+            AND a.user_level_id <![CDATA[ <> ]]> #{userLevelId}
+    </select>
+</mapper>