浏览代码

优化菜单查询功能

java110 4 年之前
父节点
当前提交
fc8ed67be2

+ 29 - 0
java110-bean/src/main/java/com/java110/dto/menuGroup/MenuGroupDto.java

@@ -6,6 +6,8 @@ import java.io.Serializable;
 
 public class MenuGroupDto extends PageDto implements Serializable {
 
+    public static final String GROUP_TYPE_PC = "P_WEB";
+
     private String gId;
     private String name;
     private String icon;
@@ -15,6 +17,9 @@ public class MenuGroupDto extends PageDto implements Serializable {
     private String statusCd;
     private String groupType;
     private String storeType;
+    private String userId;
+    private String domain;
+    private String caId;
 
     public String getGId() {
         return gId;
@@ -96,4 +101,28 @@ public class MenuGroupDto extends PageDto implements Serializable {
     public void setStoreType(String storeType) {
         this.storeType = storeType;
     }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    public String getCaId() {
+        return caId;
+    }
+
+    public void setCaId(String caId) {
+        this.caId = caId;
+    }
 }

+ 35 - 0
java110-db/src/main/resources/mapper/user/MenuCatalogV1ServiceDaoImplMapper.xml

@@ -117,4 +117,39 @@
 
     </select>
 
+    <!-- 查询菜单目录数量 add by wuxw 2018-07-03 -->
+    <select id="queryMenus" parameterType="Map" resultType="Map">
+        SELECT mm.`m_id` `mId`,mm.name menuName,mm.`g_id` gId,mm.`url`,mm.seq menuSeq,mm.`p_id` pId,
+        mm.`description` menuDescription, mmg.name menuGroupName,mmg.`icon`,mmg.`label`,mmg.`seq` menuGroupSeq,
+        mmg.`description` menuGroupDescription,mm.is_show isShow,mm.description
+        FROM m_menu mm
+        inner join m_menu_group mmg on mm.`g_id` = mmg.`g_id` AND mmg.`status_cd` = '0'
+        inner join m_menu_group_catalog mgc on mmg.g_id = mgc.g_id and mgc.status_cd = '0'
+        WHERE
+         mmg.group_type = #{groupType}
+        and mmg.store_type= #{domain}
+        and mgc.ca_id = #{caId}
+        AND mm.`status_cd` = '0'
+        AND mm.`m_id` IN (
+        SELECT pp.`m_id` FROM p_privilege_user ppu,p_privilege pp
+        WHERE ppu.`p_id` = pp.`p_id`
+        and pp.domain in (#{domain},'9999')
+        AND ppu.`privilege_flag` = '0'
+        AND ppu.`user_id` = #{userId}
+        AND ppu.`status_cd` = '0'
+        AND pp.`status_cd` = '0'
+        UNION
+        SELECT pp.`m_id` FROM p_privilege_user ppu,p_privilege_group ppg,p_privilege pp,p_privilege_rel ppr
+        WHERE ppu.`p_id` = ppr.pg_id
+        AND ppr.pg_id = ppg.pg_id
+        AND ppr.p_id = pp.`p_id`
+        and pp.domain in (#{domain},'9999')
+        AND ppu.`privilege_flag` = '1'
+        AND ppu.`user_id` = #{userId}
+        AND ppu.`status_cd` = '0'
+        AND pp.`status_cd` = '0'
+        AND ppg.status_cd = '0'
+        AND ppr.status_cd = '0'
+        )
+    </select>
 </mapper>

+ 5 - 0
java110-interface/src/main/java/com/java110/intf/user/IMenuCatalogV1InnerServiceSMO.java

@@ -17,6 +17,7 @@ package com.java110.intf.user;
 
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.menuCatalog.MenuCatalogDto;
+import com.java110.dto.menuGroup.MenuGroupDto;
 import com.java110.po.menuCatalog.MenuCatalogPo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 类表述: 服务之前调用的接口类,不对外提供接口能力 只用于接口建调用
@@ -65,4 +67,7 @@ public interface IMenuCatalogV1InnerServiceSMO {
      */
     @RequestMapping(value = "/queryMenuCatalogsCount", method = RequestMethod.POST)
     int queryMenuCatalogsCount(@RequestBody MenuCatalogDto menuCatalogDto);
+
+    @RequestMapping(value = "/queryMenus", method = RequestMethod.POST)
+    List<Map> queryMenus(@RequestBody MenuGroupDto menuCatalogDto);
 }

+ 139 - 0
service-user/src/main/java/com/java110/user/cmd/menu/ListCatalogMenusCmd.java

@@ -0,0 +1,139 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.user.cmd.menu;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.AbstractServiceCmdListener;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.menuGroup.MenuGroupDto;
+import com.java110.dto.store.StoreDto;
+import com.java110.intf.store.IStoreInnerServiceSMO;
+import com.java110.intf.user.IMenuCatalogV1InnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 类表述:查询
+ * 服务编码:menuCatalog.listMenuCatalog
+ * 请求路劲:/app/menuCatalog.ListMenuCatalog
+ * add by 吴学文 at 2022-02-26 10:12:36 mail: 928255095@qq.com
+ * open source address: https://gitee.com/wuxw7/MicroCommunity
+ * 官网:http://www.homecommunity.cn
+ * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
+ * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
+ */
+@Java110Cmd(serviceCode = "menu.listCatalogMenus")
+public class ListCatalogMenusCmd extends AbstractServiceCmdListener {
+
+    private static Logger logger = LoggerFactory.getLogger(ListCatalogMenusCmd.class);
+    @Autowired
+    private IMenuCatalogV1InnerServiceSMO menuCatalogV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IStoreInnerServiceSMO storeInnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
+        //super.validatePageInfo(reqJson);
+
+        Assert.hasKeyAndValue(reqJson, "userId", "未包含用户信息");
+        Assert.hasKeyAndValue(reqJson, "storeId", "未包含商户信息");
+        Assert.hasKeyAndValue(reqJson, "caId", "未包含目录信息");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
+
+        MenuGroupDto menuCatalogDto = BeanConvertUtil.covertBean(reqJson, MenuGroupDto.class);
+        menuCatalogDto.setGroupType(MenuGroupDto.GROUP_TYPE_PC);
+
+        //查询store 信息
+        StoreDto storeDto = new StoreDto();
+        storeDto.setStoreId(reqJson.getString("storeId"));
+        List<StoreDto> storeDtos = storeInnerServiceSMOImpl.getStores(storeDto);
+
+        Assert.listOnlyOne(storeDtos, "商户不存在");
+
+        menuCatalogDto.setDomain(storeDtos.get(0).getStoreTypeCd());
+        menuCatalogDto.setStoreType(storeDtos.get(0).getStoreTypeCd());
+
+        List<Map> menus = menuCatalogV1InnerServiceSMOImpl.queryMenus(menuCatalogDto);
+
+        cmdDataFlowContext.setResponseEntity(refreshMenusInfo(menus));
+    }
+
+
+    private ResponseEntity<String> refreshMenusInfo(List<Map> menusList) {
+        JSONArray tempMenus = new JSONArray();
+        JSONObject tempMenu = null;
+        for (Map tmpMenu : menusList) {
+            JSONObject tMenu = JSONObject.parseObject(JSONObject.toJSONString(tmpMenu));
+            tempMenu = this.getMenuFromMenus(tempMenus, tMenu.getString("gId"));
+            if (tempMenu == null) {
+                tempMenu = new JSONObject();
+                tempMenu.put("id", tMenu.getString("gId"));
+                tempMenu.put("icon", tMenu.getString("icon"));
+                tempMenu.put("name", tMenu.getString("menuGroupName"));
+                tempMenu.put("label", tMenu.getString("label"));
+                tempMenu.put("seq", tMenu.getString("menuGroupSeq"));
+                tempMenu.put("childs", new JSONArray());
+                tempMenus.add(tempMenu);
+            }
+            //获取孩子菜单
+            JSONArray childs = tempMenu.getJSONArray("childs");
+            JSONObject childMenu = new JSONObject();
+            childMenu.put("name", tMenu.getString("menuName"));
+            childMenu.put("href", tMenu.getString("url"));
+            childMenu.put("seq", tMenu.getString("menuSeq"));
+            childMenu.put("isShow", tMenu.getString("isShow"));
+            childMenu.put("description", tMenu.getString("description"));
+            childs.add(childMenu);
+        }
+
+
+        return ResultVo.createResponseEntity(tempMenus);
+    }
+
+    /**
+     * 在菜单列表查询菜单
+     *
+     * @param gId
+     * @return
+     */
+    private JSONObject getMenuFromMenus(JSONArray tempMenus, String gId) {
+        for (int tempIndex = 0; tempIndex < tempMenus.size(); tempIndex++) {
+            if (tempMenus.getJSONObject(tempIndex).getString("id").equals(gId)) {
+                return tempMenus.getJSONObject(tempIndex);
+            }
+        }
+
+        return null;
+    }
+}

+ 6 - 0
service-user/src/main/java/com/java110/user/dao/IMenuCatalogV1ServiceDao.java

@@ -74,4 +74,10 @@ public interface IMenuCatalogV1ServiceDao {
      */
     int queryMenuCatalogsCount(Map info);
 
+    /**
+     * 查询菜单
+     * @param info
+     * @return
+     */
+    List<Map> queryMenus(Map info);
 }

+ 9 - 0
service-user/src/main/java/com/java110/user/dao/impl/MenuCatalogV1ServiceDaoImpl.java

@@ -108,5 +108,14 @@ public class MenuCatalogV1ServiceDaoImpl extends BaseServiceDao implements IMenu
         return Integer.parseInt(businessMenuCatalogInfos.get(0).get("count").toString());
     }
 
+    @Override
+    public List<Map> queryMenus(Map info) {
+        logger.debug("查询 queryMenus 入参 info : {}",info);
+
+        List<Map> businessMenuCatalogInfos = sqlSessionTemplate.selectList("menuCatalogV1ServiceDaoImpl.queryMenus",info);
+
+        return businessMenuCatalogInfos;
+    }
+
 
 }

+ 24 - 16
service-user/src/main/java/com/java110/user/smo/impl/MenuCatalogV1InnerServiceSMOImpl.java

@@ -16,20 +16,20 @@
 package com.java110.user.smo.impl;
 
 
-import com.java110.user.dao.IMenuCatalogV1ServiceDao;
-import com.java110.intf.user.IMenuCatalogV1InnerServiceSMO;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.PageDto;
 import com.java110.dto.menuCatalog.MenuCatalogDto;
+import com.java110.dto.menuGroup.MenuGroupDto;
+import com.java110.intf.user.IMenuCatalogV1InnerServiceSMO;
 import com.java110.po.menuCatalog.MenuCatalogPo;
+import com.java110.user.dao.IMenuCatalogV1ServiceDao;
 import com.java110.utils.util.BeanConvertUtil;
-import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.dto.user.UserDto;
-import com.java110.dto.PageDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
@@ -47,26 +47,26 @@ public class MenuCatalogV1InnerServiceSMOImpl extends BaseServiceSMO implements
 
 
     @Override
-    public int saveMenuCatalog(@RequestBody  MenuCatalogPo menuCatalogPo) {
+    public int saveMenuCatalog(@RequestBody MenuCatalogPo menuCatalogPo) {
         int saveFlag = menuCatalogV1ServiceDaoImpl.saveMenuCatalogInfo(BeanConvertUtil.beanCovertMap(menuCatalogPo));
         return saveFlag;
     }
 
-     @Override
-    public int updateMenuCatalog(@RequestBody  MenuCatalogPo menuCatalogPo) {
+    @Override
+    public int updateMenuCatalog(@RequestBody MenuCatalogPo menuCatalogPo) {
         int saveFlag = menuCatalogV1ServiceDaoImpl.updateMenuCatalogInfo(BeanConvertUtil.beanCovertMap(menuCatalogPo));
         return saveFlag;
     }
 
-     @Override
-    public int deleteMenuCatalog(@RequestBody  MenuCatalogPo menuCatalogPo) {
-       menuCatalogPo.setStatusCd("1");
-       int saveFlag = menuCatalogV1ServiceDaoImpl.updateMenuCatalogInfo(BeanConvertUtil.beanCovertMap(menuCatalogPo));
-       return saveFlag;
+    @Override
+    public int deleteMenuCatalog(@RequestBody MenuCatalogPo menuCatalogPo) {
+        menuCatalogPo.setStatusCd("1");
+        int saveFlag = menuCatalogV1ServiceDaoImpl.updateMenuCatalogInfo(BeanConvertUtil.beanCovertMap(menuCatalogPo));
+        return saveFlag;
     }
 
     @Override
-    public List<MenuCatalogDto> queryMenuCatalogs(@RequestBody  MenuCatalogDto menuCatalogDto) {
+    public List<MenuCatalogDto> queryMenuCatalogs(@RequestBody MenuCatalogDto menuCatalogDto) {
 
         //校验是否传了 分页信息
 
@@ -84,6 +84,14 @@ public class MenuCatalogV1InnerServiceSMOImpl extends BaseServiceSMO implements
 
     @Override
     public int queryMenuCatalogsCount(@RequestBody MenuCatalogDto menuCatalogDto) {
-        return menuCatalogV1ServiceDaoImpl.queryMenuCatalogsCount(BeanConvertUtil.beanCovertMap(menuCatalogDto));    }
+        return menuCatalogV1ServiceDaoImpl.queryMenuCatalogsCount(BeanConvertUtil.beanCovertMap(menuCatalogDto));
+    }
+
+    @Override
+    public List<Map> queryMenus(@RequestBody MenuGroupDto menuGroupDto) {
+        List<Map> menus = menuCatalogV1ServiceDaoImpl.queryMenus(BeanConvertUtil.beanCovertMap(menuGroupDto));
+
+        return menus;
+    }
 
 }