Răsfoiți Sursa

pc->app菜单映射

czh 2 ani în urmă
părinte
comite
3985e89c9d

+ 1 - 0
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -565,6 +565,7 @@ public class AuthServiceImpl implements IAuthService {
             LoginUserInfo loginUserInfo = new LoginUserInfo();
             loginUserInfo.setId(user.getId());
             loginUserInfo.setSystemType(loginBase.getSystemType());
+            loginUserInfo.setClientType(loginBase.getClientType());
             loginUserInfo.setAccount(user.getPhone());
             loginUserInfo.setUserName(user.getName());
             loginUserInfo.setPhone(user.getPhone());

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ClientTypeEnum.java

@@ -10,6 +10,7 @@ import com.sckw.core.model.constant.Global;
 public enum ClientTypeEnum {
     //浏览器-官网
     pc("浏览器", "pc"),
+    app("app", "app"),
     //苹果设备
     ios("苹果设备", "ios"),
     //安卓设备

+ 13 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsMenuController.java

@@ -1,6 +1,5 @@
 package com.sckw.system.controller;
 
-import com.sckw.core.exception.SystemException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.model.KwsMenu;
@@ -125,4 +124,17 @@ public class KwsMenuController {
     public HttpResult queryChildMenu(@Valid @RequestBody QueryChildMenuReqVo reqVo) {
         return HttpResult.ok(kwsMenuService.queryChildMenu(reqVo));
     }
+
+    /**
+     * @param  reqVo 入参
+     * @return HttpResult
+     * @desc: 保存映射关系
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    @PostMapping("/saveMapping")
+    public HttpResult saveMapping(@Valid @RequestBody SaveMappingReqVo reqVo) {
+        kwsMenuService.saveMapping(reqVo);
+        return HttpResult.ok();
+    }
 }

+ 42 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuMappingDao.java

@@ -0,0 +1,42 @@
+package com.sckw.system.dao;
+
+import com.sckw.system.model.KwsMenuMapping;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+/**
+ * 菜单
+ * @author zk
+ * @date 2023-05-31
+ */
+@Mapper
+public interface KwsMenuMappingDao {
+
+    /**
+     * @param list 实体类
+     * @desc: 批量保存
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    void saveBatch(List<KwsMenuMapping> list);
+
+    /**
+     * @param id menuId
+     * @return KwsMenuMapping
+     * @desc: 根据菜单id查映射关系
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    List<KwsMenuMapping> selectByMenuId(Long id);
+
+    /**
+     * @param kwsMenuMapping 实体
+     * @desc: 修改
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    int updateById(KwsMenuMapping kwsMenuMapping);
+
+}

+ 21 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsMenuMapping.java

@@ -0,0 +1,21 @@
+package com.sckw.system.model;
+
+import com.sckw.core.model.base.BaseModel;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+/**
+ * 菜单
+ * @author zk
+ * @date 2023-05-31
+ */
+@Data
+public class KwsMenuMapping extends BaseModel {
+
+    private Long menuId;
+
+    private Long mappingId;
+
+}

+ 36 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/SaveMappingReqVo.java

@@ -0,0 +1,36 @@
+package com.sckw.system.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 保存菜单映射
+ * @date 2023/9/5
+ */
+@Data
+public class SaveMappingReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6484424016595829142L;
+
+    /**
+     * 菜单id
+     */
+    @NotNull(message = "菜单不能为空")
+    private Long menuId;
+
+    /**
+     * 对应的菜单id
+     */
+    @NotNull(message = "对应的菜单不能为空")
+    private List<Long> mappingIdList;
+
+    @Size(max = 200, message = "备注长度不能超过200")
+    private String remark;
+}

+ 72 - 6
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -7,6 +7,7 @@ import java.util.*;
 import cn.hutool.core.collection.CollectionUtil;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.ClientTypeEnum;
 import com.sckw.core.model.enums.MenuTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.utils.BeanUtils;
@@ -46,6 +47,9 @@ public class KwsMenuService {
     @Autowired
     KwsEnterpriseDao kwsEnterpriseDao;
 
+    @Autowired
+    KwsMenuMappingDao kwsMenuMappingDao;
+
     /**
      * @param params 实体
      * @desc: 添加新纪录
@@ -67,8 +71,6 @@ public class KwsMenuService {
             params.setParentId(0L);
         }
 
-
-
         //新增按钮时,有重复的序号,则把后面的都加1
         //按钮继承父菜单的using_roles
         if (params.getType() == MenuTypeEnum.BUTTON.getCode()) {
@@ -259,12 +261,34 @@ public class KwsMenuService {
         extracted(reqVo.getUserId(), findMenuTreePojo);
 
         List<KwsMenuResVo> menuList = kwsMenuDao.findList(findMenuTreePojo);
+        List<KwsMenuResVo> finalList = new ArrayList<>();
+        //app菜单特殊处理
+        if (SystemTypeEnum.COMPANY.getCode().equals(LoginUserHolder.getSystemType()) && ClientTypeEnum.app.getValue().equals(LoginUserHolder.getClientType())) {
+            for (KwsMenuResVo kwsMenuResVo : menuList) {
+                List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(kwsMenuResVo.getId());
+                if (CollectionUtils.isEmpty(kwsMenuMappings)) {
+                    continue;
+                }
+
+                List<Long> mapIds = kwsMenuMappings.stream().map(KwsMenuMapping::getMappingId).toList();
+                List<KwsMenu> kwsMenus = kwsMenuDao.selectByKeys(mapIds);
+                if (CollectionUtils.isEmpty(kwsMenus)) {
+                    continue;
+                }
+
+                List<KwsMenuResVo> kwsMenuResVos = BeanUtils.copyToList(kwsMenus, KwsMenuResVo.class);
+                finalList.addAll(kwsMenuResVos);
+            }
+        } else {
+            finalList = menuList;
+        }
+
         List<KwsMenuResVo> rootList = new ArrayList<>();
 
         //获取根节点数据
-        if (CollectionUtil.isNotEmpty(menuList)) {
-            int level = menuList.get(0).getLevel();
-            for (KwsMenuResVo kwsMenu : menuList) {
+        if (CollectionUtil.isNotEmpty(finalList)) {
+            int level = finalList.get(0).getLevel();
+            for (KwsMenuResVo kwsMenu : finalList) {
                 if (kwsMenu.getLevel() == level) {
                     rootList.add(kwsMenu);
                 }
@@ -273,7 +297,7 @@ public class KwsMenuService {
 
         //遍历,找到二级机构(根机构的id和所有机构中的pid比较)
         for (KwsMenuResVo kwsMenu : rootList) {
-            List<KwsMenuResVo> child = getChild(kwsMenu.getId(), menuList);
+            List<KwsMenuResVo> child = getChild(kwsMenu.getId(), finalList);
             kwsMenu.setChildren(child);
         }
         return BeanUtils.copyToList(rootList, FindMenuTreeResVo.class);
@@ -420,4 +444,46 @@ public class KwsMenuService {
         return BeanUtils.copyToList(select, QueryChildMenuResVo.class);
     }
 
+
+    /**
+     * @param reqVo 入参
+     * @desc: 保存菜单映射关系
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    @Transactional(rollbackFor = {})
+    public void saveMapping(SaveMappingReqVo reqVo) {
+        Long menuId = reqVo.getMenuId();
+        List<Long> mappingIdList = reqVo.getMappingIdList();
+        List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(menuId);
+        Date date = new Date();
+        if (CollectionUtils.isNotEmpty(kwsMenuMappings)) {
+            for (KwsMenuMapping kwsMenuMapping : kwsMenuMappings) {
+                kwsMenuMapping.setDelFlag(Global.YES);
+                kwsMenuMapping.setUpdateBy(LoginUserHolder.getUserId());
+                kwsMenuMapping.setUpdateTime(date);
+                if (kwsMenuMappingDao.updateById(kwsMenuMapping) <= 0) {
+                    throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+                }
+            }
+        }
+
+        List<KwsMenuMapping> list = new ArrayList<>();
+        for (Long id : mappingIdList) {
+            KwsMenuMapping kwsMenuMapping = new KwsMenuMapping();
+            kwsMenuMapping.setMenuId(menuId);
+            kwsMenuMapping.setMappingId(id);
+            kwsMenuMapping.setId(new IdWorker(1L).nextId());
+            kwsMenuMapping.setRemark(reqVo.getRemark());
+            kwsMenuMapping.setStatus(Global.NO);
+            kwsMenuMapping.setCreateBy(LoginUserHolder.getUserId());
+            kwsMenuMapping.setCreateTime(date);
+            kwsMenuMapping.setUpdateBy(LoginUserHolder.getUserId());
+            kwsMenuMapping.setUpdateTime(date);
+            kwsMenuMapping.setDelFlag(Global.NO);
+            list.add(kwsMenuMapping);
+        }
+        kwsMenuMappingDao.saveBatch(list);
+    }
+
 }

+ 51 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuMappingDao.xml

@@ -0,0 +1,51 @@
+<?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.sckw.system.dao.KwsMenuMappingDao">
+
+  <insert id="saveBatch">
+    insert into kws_menu_mapping (
+      id,
+      menu_id,
+      mapping_id,
+      create_by,
+      create_time,
+      update_by,
+      update_time,
+      del_flag,
+      status,
+      remark
+    ) values
+    <foreach collection="list" item="item" separator=",">
+      (
+        #{item.id},
+        #{item.menuId},
+        #{item.mappingId},
+        #{item.createBy},
+        #{item.createTime},
+        #{item.updateBy},
+        #{item.updateTime},
+        #{item.delFlag},
+        #{item.status},
+        #{item.remark}
+      )
+    </foreach>
+  </insert>
+  <update id="updateById">
+    update kws_menu_mapping
+       set menu_id = #{menuId},
+           mapping_id = #{mappingId},
+           create_by = #{createBy},
+           create_time = #{createTime},
+           update_by = #{updateBy},
+           update_time = #{updateTime},
+           del_flag = #{delFlag},
+           status = #{status},
+           remark = #{remark}
+     where id = #{id}
+  </update>
+
+  <select id="selectByMenuId" resultType="com.sckw.system.model.KwsMenuMapping">
+    select a.* from kws_menu_mapping a where a.menu_id = #{id} and a.del_flag = 0
+  </select>
+
+</mapper>