Browse Source

feat: 实现功能模块相关接口

weijianghai 2 years ago
parent
commit
855cec2c70

+ 60 - 0
src/main/java/com/nokia/controller/web/WebFunctionController.java

@@ -0,0 +1,60 @@
+package com.nokia.controller.web;
+
+import com.nokia.common.R;
+import com.nokia.service.FunctionService;
+import com.nokia.vo.*;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@Tag(name = "功能")
+@RestController
+@RequestMapping("api/web/function")
+public class WebFunctionController {
+    private final FunctionService functionService;
+
+    public WebFunctionController(FunctionService functionService) {
+        this.functionService = functionService;
+    }
+
+    /**
+     * 查询模块列表
+     */
+    @Operation(summary = "查询模块列表")
+    @PostMapping("list")
+    public R<PageVo<ListFunctionVo>> list(@Valid @RequestBody ListFunctionDto dto) {
+        return functionService.list(dto);
+    }
+
+//    /**
+//     * 添加模块
+//     */
+//    @Operation(summary = "添加模块", hidden = true)
+//    @PostMapping("add")
+//    public R<Object> add(@Valid @RequestBody AddFunctionDto dto) {
+//        return functionService.add(dto);
+//    }
+//
+//    /**
+//     * 修改模块
+//     */
+//    @Operation(summary = "修改模块", hidden = true)
+//    @PostMapping("update")
+//    public R<Object> update(@Valid @RequestBody UpdateFunctionDto dto) {
+//        return functionService.update(dto);
+//    }
+//
+//    /**
+//     * 删除模块
+//     */
+//    @Operation(summary = "删除模块", hidden = true)
+//    @PostMapping("del")
+//    public R<Object> del(@Valid @RequestBody DeleteFunctionDto dto) {
+//        return functionService.del(dto);
+//    }
+}

+ 38 - 0
src/main/java/com/nokia/dao/FunctionDao.java

@@ -0,0 +1,38 @@
+package com.nokia.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nokia.pojo.Function;
+import com.nokia.vo.ListFunctionDto;
+import com.nokia.vo.ListFunctionVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface FunctionDao extends BaseMapper<Function> {
+    /**
+     * 查询功能列表
+     *
+     */
+    @Select("<script> " +
+            "select af.id as function_id, af.\"name\" as function_name, af.app_url, af.app_icon, af.app_priority, " +
+            "af.web_url, af.web_icon, af.web_priority, af.function_description, as2.system_name, ac.client_name " +
+            "from sqmdb_rpt.acl_function af inner join sqmdb_rpt.acl_system as2 on af.\"system\" = as2.\"system\" " +
+            "inner join sqmdb_rpt.acl_client ac on af.client = ac.client" +
+            "<where> " +
+            "    <if test='dto.system'> " +
+            "         af.\"system\" = #{dto.system} " +
+            "    </if> " +
+            "    <if test='dto.client'> " +
+            "         and af.client = #{dto.client} " +
+            "    </if> " +
+            "    <if test='dto.functionName'> " +
+            "         and af.\"name\" like concat('%', #{dto.functionName}, '%') " +
+            "    </if> " +
+            "</where> " +
+            "</script>"
+    )
+    List<ListFunctionVo> list(Page<ListFunctionVo> page, ListFunctionDto dto);
+}

+ 32 - 0
src/main/java/com/nokia/pojo/Function.java

@@ -0,0 +1,32 @@
+package com.nokia.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/*
+ * 功能
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@TableName("sqmdb_rpt.acl_function")
+public class Function implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    private String name;
+    private String functionDescription;
+    private String system;
+    private Integer client;
+    private String appUrl;
+    private String appIcon;
+    private Integer appPriority;
+    private String webUrl;
+    private String webIcon;
+    private Integer webPriority;
+}

+ 87 - 0
src/main/java/com/nokia/service/FunctionService.java

@@ -0,0 +1,87 @@
+package com.nokia.service;
+
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nokia.common.R;
+import com.nokia.dao.FunctionDao;
+import com.nokia.dao.RoleDao;
+import com.nokia.dao.UserFunctionDao;
+import com.nokia.pojo.Function;
+import com.nokia.pojo.UserFunction;
+import com.nokia.vo.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class FunctionService {
+    private final FunctionDao functionDao;
+    private final UserFunctionDao userFunctionDao;
+    private final RoleDao roleDao;
+
+    public FunctionService(FunctionDao functionDao, UserFunctionDao userFunctionDao, RoleDao roleDao) {
+        this.functionDao = functionDao;
+        this.userFunctionDao = userFunctionDao;
+        this.roleDao = roleDao;
+    }
+
+    public R<PageVo<ListFunctionVo>> list(ListFunctionDto dto) {
+        PageVo<ListFunctionVo> vo = new PageVo<>();
+        Page<ListFunctionVo> page = new Page<>(dto.getCurrent(), dto.getPageSize());
+        page.addOrder(OrderItem.asc("af.\"system\""));
+        List<ListFunctionVo> list = functionDao.list(page, dto);
+        vo.setList(list);
+        vo.setTotal(page.getTotal());
+        return R.ok(vo);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public R<Object> add(AddFunctionDto dto) {
+        Function function = new Function();
+        function.setName(dto.getFunctionName());
+        function.setSystem(dto.getSystem());
+        function.setClient(dto.getClient());
+        function.setAppUrl(dto.getAppUrl());
+        function.setAppIcon(dto.getAppIcon());
+        function.setAppPriority(dto.getAppPriority());
+        function.setWebUrl(dto.getWebUrl());
+        function.setWebIcon(dto.getWebIcon());
+        function.setWebPriority(dto.getWebPriority());
+        function.setFunctionDescription(dto.getFunctionDescription());
+        functionDao.insert(function);
+        return R.ok();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public R<Object> update(UpdateFunctionDto dto) {
+        Function function = new Function();
+        function.setId(dto.getFunctionId());
+        function.setName(dto.getFunctionName());
+        function.setSystem(dto.getSystem());
+        function.setClient(dto.getClient());
+        function.setAppUrl(dto.getAppUrl());
+        function.setAppIcon(dto.getAppIcon());
+        function.setAppPriority(dto.getAppPriority());
+        function.setWebUrl(dto.getWebUrl());
+        function.setWebIcon(dto.getWebIcon());
+        function.setWebPriority(dto.getWebPriority());
+        function.setFunctionDescription(dto.getFunctionDescription());
+        functionDao.updateById(function);
+        return R.ok();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public R<Object> del(DeleteFunctionDto dto) {
+        // 删除关联acl_user_function
+        UpdateWrapper<UserFunction> userFunctionWrapper = new UpdateWrapper<>();
+        userFunctionWrapper.in("function_id", dto.getFunctionIds());
+        userFunctionDao.delete(userFunctionWrapper);
+        // 修改关联acl_role的function_id为null
+        roleDao.resetFunctionId(dto.getFunctionIds());
+        // 删除模块
+        functionDao.deleteBatchIds(dto.getFunctionIds());
+        return R.ok();
+    }
+}

+ 38 - 0
src/main/java/com/nokia/vo/AddFunctionDto.java

@@ -0,0 +1,38 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class AddFunctionDto {
+    @Schema(description = "功能名称", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "functionName不能为空")
+    private String functionName;
+    @Schema(description = "系统id", requiredMode = Schema.RequiredMode.REQUIRED, example = "flow")
+    @NotBlank(message = "system不能为空")
+    private String system;
+    @Schema(description = "客户端id", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "client不能为空")
+    private Integer client;
+    @Schema(description = "app优先级")
+    private Integer appPriority;
+    @Schema(description = "web优先级")
+    private Integer webPriority;
+    @Schema(description = "web链接")
+    private String webUrl;
+    @Schema(description = "app链接")
+    private String appUrl;
+    @Schema(description = "web图标")
+    private String webIcon;
+    @Schema(description = "app图标")
+    private String appIcon;
+    @Schema(description = "功能描述")
+    private String functionDescription;
+}

+ 18 - 0
src/main/java/com/nokia/vo/DeleteFunctionDto.java

@@ -0,0 +1,18 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class DeleteFunctionDto {
+    @Schema(description = "功能id列表", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotEmpty(message = "functionIds不能为空")
+    private List<Integer> functionIds;
+}

+ 20 - 0
src/main/java/com/nokia/vo/ListFunctionDto.java

@@ -0,0 +1,20 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ListFunctionDto extends PageDto {
+    @Schema(description = "模块名称", example = "工单")
+    private String functionName;
+    @Schema(description = "客户端id")
+    private Integer client;
+    @Schema(description = "系统id", example = "flow")
+    private String system;
+}

+ 34 - 0
src/main/java/com/nokia/vo/ListFunctionVo.java

@@ -0,0 +1,34 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class ListFunctionVo {
+    @Schema(description = "模块id")
+    private Integer functionId;
+    @Schema(description = "模块名称", example = "工单查询")
+    private String functionName;
+    @Schema(description = "系统名称", example = "流程")
+    private String systemName;
+    @Schema(description = "客户端名称", example = "app")
+    private String clientName;
+    @Schema(description = "模块描述")
+    private String functionDescription;
+    @Schema(description = "app显示优先级")
+    private Integer appPriority;
+    @Schema(description = "web显示优先级")
+    private Integer webPriority;
+    @Schema(description = "web链接")
+    private String webUrl;
+    @Schema(description = "app链接")
+    private String appUrl;
+    @Schema(description = "web图标")
+    private String webIcon;
+    @Schema(description = "app图标")
+    private String appIcon;
+}

+ 38 - 0
src/main/java/com/nokia/vo/UpdateFunctionDto.java

@@ -0,0 +1,38 @@
+package com.nokia.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class UpdateFunctionDto {
+
+    @Schema(description = "功能id")
+    @NotNull(message = "functionId不能为空")
+    private Integer functionId;
+    @Schema(description = "功能名称")
+    private String functionName;
+    @Schema(description = "系统id", example = "flow")
+    private String system;
+    @Schema(description = "客户端id")
+    private Integer client;
+    @Schema(description = "app优先级")
+    private Integer appPriority;
+    @Schema(description = "web优先级")
+    private Integer webPriority;
+    @Schema(description = "web链接")
+    private String webUrl;
+    @Schema(description = "app链接")
+    private String appUrl;
+    @Schema(description = "web图标")
+    private String webIcon;
+    @Schema(description = "app图标")
+    private String appIcon;
+    @Schema(description = "功能描述")
+    private String functionDescription;
+}