瀏覽代碼

导航栏增删改查

xusonglin 5 年之前
父節點
當前提交
e250be3521

+ 8 - 0
src/main/java/com/jkcredit/sysnews/mapper/NavigationBarMapper.java

@@ -1,7 +1,11 @@
 package com.jkcredit.sysnews.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jkcredit.sysnews.model.dto.navigationBar.NavigationBarDto;
 import com.jkcredit.sysnews.model.po.navigationBar.NavigationBarPo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @description:
@@ -10,5 +14,9 @@ import com.jkcredit.sysnews.model.po.navigationBar.NavigationBarPo;
  * @version: V1.0
  **/
 public interface NavigationBarMapper extends BaseMapper<NavigationBarPo> {
+    List<NavigationBarPo> getNavigationBars(@Param("query")NavigationBarDto navigationBarDto);
+
+    NavigationBarPo getNavigationBarById(Long id);
 
+    List<NavigationBarPo> getNavigationBarByParentId(Long id);
 }

+ 25 - 0
src/main/java/com/jkcredit/sysnews/model/vo/navigationBar/NavigationBarTreeVo.java

@@ -0,0 +1,25 @@
+package com.jkcredit.sysnews.model.vo.navigationBar;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/3/10 14:52
+ * @version: V1.0
+ **/
+@Data
+public class NavigationBarTreeVo implements Serializable {
+    private static final long serialVersionUID = 6290294918471292342L;
+    private Long id;
+    private String name;
+    private Long parentId;
+    private Integer level;
+    private String goPageUrl;
+    private Integer homePageFlag;
+    private Integer homePageOrder;
+    private List<NavigationBarTreeVo> childList;
+}

+ 59 - 4
src/main/java/com/jkcredit/sysnews/resource/web/navigationBar/NavigationBarResource.java

@@ -1,8 +1,11 @@
 package com.jkcredit.sysnews.resource.web.navigationBar;
 
 import com.jkcredit.sysnews.model.dto.navigationBar.NavigationBarDto;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarTreeVo;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarVo;
 import com.jkcredit.sysnews.resource.base.WebResource;
 import com.jkcredit.sysnews.resource.web.navigationBar.fb.NavigationBarAddFB;
+import com.jkcredit.sysnews.resource.web.navigationBar.fb.NavigationBarEditFB;
 import com.jkcredit.sysnews.service.navigationBar.NavigationBarService;
 import com.jkcredit.sysnews.spi.lang.exception.ServiceException;
 import com.jkcredit.sysnews.spi.web.data.ResponseData;
@@ -10,9 +13,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,7 +35,6 @@ public class NavigationBarResource extends WebResource {
     @ApiOperation(value = "新增菜单栏")
     public ResponseData saveNavigationBar(@RequestBody List<NavigationBarAddFB> fbList) {
         try {
-            // todo 导航首页展示顺序是否需要 需要和前端讨论
             List<NavigationBarDto> navigationBarDtoList = new ArrayList<>();
             for (NavigationBarAddFB fb : fbList) {
                 validate(fb);
@@ -48,4 +48,59 @@ public class NavigationBarResource extends WebResource {
             return ResponseData.failed("新增菜单栏失败,失败原因:" + e.getMessage());
         }
     }
+
+    @GetMapping("/menu")
+    @PreAuthorize("hasPermission('menu','read')")
+    @ApiOperation(value = "获取树状菜单栏")
+    public ResponseData getNavigationBar() {
+        try {
+            List<NavigationBarTreeVo> result = navigationBarService.getNavigationBars(new NavigationBarDto());
+            return ResponseData.success(result);
+        } catch (ServiceException e) {
+            log.error(e.getMessage());
+            return ResponseData.failed("获取树状菜单栏失败");
+        }
+    }
+
+    @GetMapping("/menu/{id}")
+    @PreAuthorize("hasPermission('menu','read')")
+    @ApiOperation(value = "根据id获取菜单栏信息")
+    public ResponseData getNavigationBarById(@PathVariable Long id) {
+        try {
+            NavigationBarVo navigationBarVo = navigationBarService.getNavigationBarById(id);
+            return ResponseData.success(navigationBarVo);
+        } catch (ServiceException e) {
+            log.error(e.getMessage());
+            return ResponseData.failed("获取菜单栏信息失败");
+        }
+    }
+
+    @PutMapping("/menu/{id}")
+    @PreAuthorize("hasPermission('menu','edit')")
+    @ApiOperation(value = "删除菜单栏")
+    public ResponseData deleteNavigationBar(@PathVariable Long id) {
+        try {
+            navigationBarService.deleteNavigationBar(id);
+            return ResponseData.success("删除菜单栏成功");
+        } catch (ServiceException e) {
+            log.error(e.getMessage());
+            return ResponseData.failed(e.getMessage());
+        }
+    }
+
+    @PutMapping("/menu")
+    @PreAuthorize("hasPermission('menu','edit')")
+    @ApiOperation(value = "修改菜单栏信息")
+    public ResponseData updateNavigationBar(NavigationBarEditFB navigationBarEditFB) {
+        try {
+            validate(navigationBarEditFB);
+            NavigationBarDto navigationBarDto = mapper.map(navigationBarEditFB, NavigationBarDto.class);
+            navigationBarService.editNavigationBar(navigationBarDto);
+            return ResponseData.success("修改菜单栏成功");
+        } catch (ServiceException e) {
+            log.error(e.getMessage());
+            return ResponseData.failed("修改菜单栏失败");
+        }
+
+    }
 }

+ 24 - 0
src/main/java/com/jkcredit/sysnews/resource/web/navigationBar/fb/NavigationBarEditFB.java

@@ -0,0 +1,24 @@
+package com.jkcredit.sysnews.resource.web.navigationBar.fb;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @description:
+ * @author: xusonglin
+ * @create: 2020/3/10 21:58
+ * @version: V1.0
+ **/
+@Data
+public class NavigationBarEditFB implements Serializable {
+
+    private static final long serialVersionUID = -7086865058706315186L;
+    @NotNull(message = "id不能为空")
+    private Long id;
+    private String name;
+    private String goPageUrl;
+    private Integer homePageFlag;
+    private Integer homePageOrder;
+}

+ 10 - 0
src/main/java/com/jkcredit/sysnews/service/navigationBar/NavigationBarService.java

@@ -1,6 +1,8 @@
 package com.jkcredit.sysnews.service.navigationBar;
 
 import com.jkcredit.sysnews.model.dto.navigationBar.NavigationBarDto;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarTreeVo;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarVo;
 
 import java.util.List;
 
@@ -12,4 +14,12 @@ import java.util.List;
  **/
 public interface NavigationBarService {
     void saveNavigationBar(List<NavigationBarDto> navigationBarDtoList);
+
+    List<NavigationBarTreeVo> getNavigationBars(NavigationBarDto navigationBarDto);
+
+    void editNavigationBar(NavigationBarDto dto);
+
+    void deleteNavigationBar(Long id);
+
+    NavigationBarVo getNavigationBarById(Long id);
 }

+ 97 - 0
src/main/java/com/jkcredit/sysnews/service/navigationBar/NavigationBarServiceImpl.java

@@ -3,14 +3,20 @@ package com.jkcredit.sysnews.service.navigationBar;
 import com.jkcredit.sysnews.mapper.NavigationBarMapper;
 import com.jkcredit.sysnews.model.dto.navigationBar.NavigationBarDto;
 import com.jkcredit.sysnews.model.po.navigationBar.NavigationBarPo;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarTreeVo;
+import com.jkcredit.sysnews.model.vo.navigationBar.NavigationBarVo;
 import com.jkcredit.sysnews.service.base.BaseService;
+import com.jkcredit.sysnews.spi.lang.constant.CommonConstant;
 import com.jkcredit.sysnews.spi.lang.exception.ServiceException;
+import com.jkcredit.sysnews.util.AssertUtils;
 import com.jkcredit.sysnews.util.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -43,4 +49,95 @@ public class NavigationBarServiceImpl extends BaseService implements NavigationB
             throw new ServiceException("新增菜单栏失败");
         }
     }
+
+    @Override
+    public List<NavigationBarTreeVo> getNavigationBars(NavigationBarDto navigationBarDto) {
+        try {
+            List<NavigationBarPo> navigationBarPoList = navigationBarMapper.getNavigationBars(navigationBarDto);
+            List<NavigationBarTreeVo> navigationBarTreeVoList = new ArrayList<>();
+            for (NavigationBarPo navigationBarPo : navigationBarPoList) {
+                NavigationBarTreeVo navigationBarTreeVo = new NavigationBarTreeVo();
+                BeanUtil.copyProperties(navigationBarTreeVo, navigationBarPo);
+                navigationBarTreeVoList.add(navigationBarTreeVo);
+            }
+
+            List<NavigationBarTreeVo> resultList = new ArrayList<>();
+            for (NavigationBarTreeVo vo : navigationBarTreeVoList) {
+                if (vo.getLevel().equals(1)) {
+                    vo.setChildList(getChildrenNode(vo.getId(), navigationBarTreeVoList));
+                    resultList.add(vo);
+                }
+            }
+            return resultList;
+        } catch (Exception e) {
+            log.error("获取菜单栏失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("获取菜单栏失败");
+        }
+    }
+
+    // 获取子节点的递归方法
+    private static List<NavigationBarTreeVo> getChildrenNode(Long id, List<NavigationBarTreeVo> nodeList) {
+        List<NavigationBarTreeVo> list = new ArrayList<>();
+        for (NavigationBarTreeVo node : nodeList) {
+            if (node.getParentId().equals(id)) {
+                // 递归获取子节点
+                node.setChildList(getChildrenNode(node.getId(), nodeList));
+                list.add(node);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    @Transactional(rollbackFor = ServiceException.class)
+    public void editNavigationBar(NavigationBarDto dto) {
+        try {
+            validate(dto);
+            NavigationBarPo navigationBarPo = navigationBarMapper.getNavigationBarById(dto.getId());
+            if (!StringUtils.isBlank(dto.getName())) {
+                navigationBarPo.setName(dto.getName());
+            }
+            if (!StringUtils.isBlank(dto.getGoPageUrl())) {
+                navigationBarPo.setGoPageUrl(dto.getGoPageUrl());
+            }
+            if (dto.getHomePageFlag() != null) {
+                navigationBarPo.setHomePageFlag(dto.getHomePageFlag());
+            }
+            if (dto.getHomePageOrder() != null) {
+                navigationBarPo.setHomePageOrder(dto.getHomePageOrder());
+            }
+            navigationBarPo.setUpdateTime(new Date());
+            navigationBarMapper.updateById(navigationBarPo);
+        } catch (Exception e) {
+            log.error("编辑导航栏失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("编辑导航栏失败");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = ServiceException.class)
+    public void deleteNavigationBar(Long id) {
+        List<NavigationBarPo> navigationBarPoList = navigationBarMapper.getNavigationBarByParentId(id);
+        if (navigationBarPoList.size() != 0) {
+            throw new ServiceException("此导航栏目录下有子导航,不允许删除!");
+        }
+        try {
+            NavigationBarPo navigationBarPo = navigationBarMapper.getNavigationBarById(id);
+            navigationBarPo.setUpdateTime(new Date());
+            navigationBarPo.setActivated(CommonConstant.ACTIVATED_DELETED);
+            navigationBarMapper.updateById(navigationBarPo);
+        } catch (Exception e) {
+            log.error("删除导航栏失败,失败原因:{}", e.getMessage());
+            throw new ServiceException("删除导航栏失败");
+        }
+    }
+
+    @Override
+    public NavigationBarVo getNavigationBarById(Long id) {
+        AssertUtils.assertNotNull(id, "id不能为空");
+        NavigationBarPo navigationBarPo = navigationBarMapper.getNavigationBarById(id);
+        NavigationBarVo navigationBarVo = new NavigationBarVo();
+        BeanUtil.copyProperties(navigationBarVo, navigationBarPo);
+        return navigationBarVo;
+    }
 }

+ 65 - 0
src/main/resources/mapper/NavigationBarMapper.xml

@@ -0,0 +1,65 @@
+<?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.jkcredit.sysnews.mapper.NavigationBarMapper">
+    <resultMap id="baseResultMap" type="com.jkcredit.sysnews.model.po.navigationBar.NavigationBarPo">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="parent_ids" property="parentIds"/>
+        <result column="level" property="level"/>
+        <result column="go_page_url" property="goPageUrl"/>
+        <result column="home_page_flag" property="homePageFlag"/>
+        <result column="home_page_order" property="homePageOrder"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="activated" property="activated"/>
+    </resultMap>
+
+    <sql id="navigationBar">
+        id,
+        name,
+        parent_id,
+        parent_ids,
+        level,
+        go_page_url,
+        home_page_flag,
+        home_page_order,
+        create_time,
+        update_time,
+        activated
+    </sql>
+
+    <select id="getNavigationBars" resultMap="baseResultMap">
+        select
+            <include refid="navigationBar"/>
+        from
+            navigation_bar as navigationBar
+        <where>
+            and navigationBar.activated = 1
+            <if test="query.name != null and query.name != ''">
+                and navigationBar.name like CONCAT('%',#{query.name},'%')
+            </if>
+            <if test="query.level != null and query.level != ''">
+                and navigationBar.level = #{query.level}
+            </if>
+        </where>
+    </select>
+
+    <select id="getNavigationBarById" resultMap="baseResultMap">
+        select
+            <include refid="navigationBar"/>
+        from
+            navigation_bar
+        where
+            id = #{id}
+    </select>
+
+    <select id="getNavigationBarByParentId" resultMap="baseResultMap">
+        select
+            <include refid="navigationBar"/>
+        from
+            navigation_bar
+        where
+            parent_id = #{id}
+    </select>
+</mapper>