weijianghai 9 сар өмнө
parent
commit
7172ed604b

+ 14 - 0
doc/backup-db.sh

@@ -0,0 +1,14 @@
+#!/bin/sh
+
+echo "$(date) backup start"
+export PGPASSWORD='gC5jP3oM1tQ8'
+backup_dir=/data/ts_acl_backup/$(date +%Y%m%d%H%M%S)
+mkdir -p "${backup_dir}"
+host='192.168.70.136'
+port='9999'
+username='ts_acl'
+dbname='ts_acl'
+jobs='24'
+echo "pg_dump -h ${host} -p ${port} -U ${username} -d ${dbname} -v -O -Fd -j ${jobs} -Z9 -f ${backup_dir}"
+pg_dump -h "${host}" -p "${port}" -U "${username}" -d "${dbname}" -v -O -Fd -j "${jobs}" -Z9 -f "${backup_dir}"
+echo "$(date) backup end"

+ 10 - 0
doc/restore-db.sh

@@ -0,0 +1,10 @@
+#!/bin/sh
+
+export PGPASSWORD='NFQCgBA6YhNvgAqG6THw'
+backup_dir=$1
+host='127.0.0.1'
+port='15432'
+username='postgres'
+dbname='ts_acl'
+jobs='24'
+pg_restore -O -c -v -h "${host}" -p "${port}" -U "${username}" -d "${dbname}" -Fd -j "${jobs}" "${backup_dir}"

+ 27 - 0
src/main/java/com/nokia/config/ApiDocConfig.java

@@ -2,6 +2,8 @@ package com.nokia.config;
 
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.parameters.Parameter;
+import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,4 +17,29 @@ public class ApiDocConfig {
     public OpenAPI openapi() {
         return new OpenAPI().info(new Info().title("acl_tousu").description("acl_tousu接口文档").version("1.0"));
     }
+
+    @Bean
+    public OpenApiCustomiser openApiCustomiser() {
+        return openApi -> openApi.getPaths().values().forEach(pathItem -> pathItem.readOperations().forEach(operation -> {
+            operation
+                    .addParametersItem(new Parameter()
+                            .required(true)
+                            .in("header")
+                            .name("X-Authorization-Token")
+                            .description("token")
+                            .example("test_token_hebei"))
+                    .addParametersItem(new Parameter()
+                            .required(true)
+                            .in("header")
+                            .name("X-Authorization-fromSystem")
+                            .description("fromSystem")
+                            .example("test"))
+                    .addParametersItem(new Parameter()
+                            .required(true)
+                            .in("header")
+                            .name("X-Authorization-system")
+                            .description("system")
+                            .example("web"));
+        }));
+    }
 }

+ 1 - 1
src/main/java/com/nokia/controller/VerificationController.java

@@ -36,7 +36,7 @@ public class VerificationController {
      */
     @Operation(summary = "鉴权")
     @ApiResponses(value = {
-            @ApiResponse(responseCode = "web", description = "{\"success\":true,\"code\":1,\"message\":\"成功\",\"data\":{\"userName\":\"张三\",\"list\":[{\"id\":1,\"name\":\"工单处理\",\"url\":\"url\",\"webIcon\":\"webIcon\",\"priority\":0},{\"id\":2,\"name\":\"工单答复\",\"url\":\"url\",\"webIcon\":\"webIcon\",\"priority\":0}]}}", content = @Content(schema = @Schema(implementation = WebVerificationVo.class))),
+            @ApiResponse(responseCode = "web", description = "{\"success\":true,\"code\":1,\"message\":\"成功\",\"data\":{\"userName\":\"张三\",\"hasNotice\": true,\"list\":[{\"id\":1,\"name\":\"工单处理\",\"url\":\"url\",\"webIcon\":\"webIcon\",\"priority\":0},{\"id\":2,\"name\":\"工单答复\",\"url\":\"url\",\"webIcon\":\"webIcon\",\"priority\":0}]}}", content = @Content(schema = @Schema(implementation = WebVerificationVo.class))),
             @ApiResponse(responseCode = "permission", description = "{\"success\":true,\"code\":1,\"message\":\"成功\",\"data\":null}"),
             @ApiResponse(responseCode = "用户不存在", description = "{\"success\":false,\"code\":0,\"message\":\"用户不存在\",\"data\":null}", content = @Content)
     })

+ 31 - 0
src/main/java/com/nokia/controller/web/WebNoticeController.java

@@ -0,0 +1,31 @@
+package com.nokia.controller.web;
+
+import com.nokia.common.R;
+import com.nokia.service.NoticeService;
+import com.nokia.vo.AddNoticeDto;
+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.servlet.http.HttpSession;
+import javax.validation.Valid;
+
+@Tag(name = "公告")
+@RestController
+@RequestMapping("api/web/notice")
+public class WebNoticeController {
+    private final NoticeService noticeService;
+
+    public WebNoticeController(NoticeService noticeService) {
+        this.noticeService = noticeService;
+    }
+
+    @Operation(summary = "添加公告")
+    @PostMapping("add")
+    public R<Object> add(@Valid @RequestBody AddNoticeDto dto, HttpSession session) {
+        return noticeService.add(dto, session);
+    }
+}

+ 1 - 1
src/main/java/com/nokia/dao/RoleDao.java

@@ -65,7 +65,7 @@ public interface RoleDao extends BaseMapper<Role> {
      */
     @Select("<script>"
             + " select distinct function_id from sqmdb_rpt.acl_role"
-            + " where role_id in"
+            + " where function_id is not null and role_id in"
             + " <foreach open=\"(\" close=\")\" collection=\"list\" item=\"item\" separator=\",\">"
             + "   #{item}"
             + " </foreach>"

+ 6 - 0
src/main/java/com/nokia/dao/UserDao.java

@@ -142,6 +142,12 @@ public interface UserDao extends BaseMapper<User> {
             + " order by af.web_priority desc")
     List<WebFunctionVo> listWebFunctions(@Param("userId") Integer userId, @Param("client") Integer client);
 
+    /**
+     * 判断用户是否有权限
+     */
+    @Select("select exists (select 1 from sqmdb_rpt.acl_user_role_city where role_id = #{roleId} and user_id = #{userId})")
+    boolean hasRole(@Param("roleId") Integer roleId, @Param("userId") Integer userId);
+
     /**
      * 查询用户列表
      */

+ 7 - 4
src/main/java/com/nokia/pojo/Notice.java

@@ -1,5 +1,6 @@
 package com.nokia.pojo;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -9,7 +10,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
-import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 @TableName("sqmdb_rpt.acl_notice")
 @AllArgsConstructor
@@ -17,11 +18,13 @@ import java.time.LocalDate;
 @Data
 public class Notice implements Serializable {
     @Schema(description = "主键")
-    @TableId
+    @TableId(type = IdType.AUTO)
     private Integer id;
     @Schema(description = "时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate createTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    private LocalDateTime createTime;
+    @Schema(description = "标题")
+    private String title;
     @Schema(description = "内容")
     private String content;
 }

+ 26 - 10
src/main/java/com/nokia/service/AclService.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nokia.common.R;
 import com.nokia.common.exception.BizException;
 import com.nokia.constants.ClientEnum;
-import com.nokia.dao.NoticeDao;
 import com.nokia.dao.UserDao;
 import com.nokia.dao.UserRoleCityDao;
 import com.nokia.dao.VerificationLogDao;
@@ -14,7 +13,19 @@ import com.nokia.pojo.User;
 import com.nokia.pojo.UserRoleCity;
 import com.nokia.pojo.VerificationLog;
 import com.nokia.service.file.FileService;
-import com.nokia.vo.*;
+import com.nokia.vo.AppVerificationVo;
+import com.nokia.vo.DapingUserVo;
+import com.nokia.vo.FenxiUserVo;
+import com.nokia.vo.HeidiankuUserVo;
+import com.nokia.vo.LiuchengUserVo;
+import com.nokia.vo.LvYinVo;
+import com.nokia.vo.TokenFlagVo;
+import com.nokia.vo.TokenVo;
+import com.nokia.vo.VolteT2UserVo;
+import com.nokia.vo.WebFunctionSystem;
+import com.nokia.vo.WebFunctionVo;
+import com.nokia.vo.WebVerificationVo;
+import com.nokia.vo.YuceUserVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,7 +35,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpSession;
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 @Slf4j
@@ -49,13 +64,13 @@ public class AclService {
     private final RedisTemplate<String, Object> redisTemplate;
     private final VerificationLogDao verificationLogDao;
     private final UserRoleCityDao userRoleCityDao;
-    private final NoticeDao noticeDao;
+    private final NoticeService noticeService;
     private final FileService fileService;
 
     @Autowired
     public AclService(UserDao userDao, TopService topService, DopService dopService, WoyunweiService woyunweiService,
                       RedisTemplate<String, Object> redisTemplate, VerificationLogDao verificationLogDao,
-                      UserRoleCityDao userRoleCityDao, NoticeDao noticeDao, FileService fileService) {
+                      UserRoleCityDao userRoleCityDao, NoticeService noticeService, FileService fileService) {
         this.userDao = userDao;
         this.topService = topService;
         this.dopService = dopService;
@@ -63,7 +78,7 @@ public class AclService {
         this.redisTemplate = redisTemplate;
         this.verificationLogDao = verificationLogDao;
         this.userRoleCityDao = userRoleCityDao;
-        this.noticeDao = noticeDao;
+        this.noticeService = noticeService;
         this.fileService = fileService;
     }
 
@@ -149,7 +164,7 @@ public class AclService {
      * 将用户信息保存到session
      */
     private void saveSession(HttpSession session, User userEntity, TokenVo tokenEntity) {
-        if (!"permission".equals(tokenEntity.getSystem())) {
+        if (!("permission".equals(tokenEntity.getSystem()) || "web".equals(tokenEntity.getSystem()))) {
             return;
         }
         QueryWrapper<UserRoleCity> wrapper = new QueryWrapper<>();
@@ -239,13 +254,14 @@ public class AclService {
                     }
                 }
                 // 查询公告
-                QueryWrapper<Notice> noticeWrapper = new QueryWrapper<>();
-                noticeWrapper.orderByDesc("create_time");
-                List<Notice> notices = noticeDao.selectList(noticeWrapper);
+                List<Notice> notices = noticeService.list();
                 WebVerificationVo webVo = new WebVerificationVo();
                 webVo.setUserName(userEntity.getUserName());
                 webVo.setNotices(notices);
                 webVo.setFunctions(functions);
+                // 查询是否有管理公告权限
+                boolean hasNotice = userDao.hasRole(-2, userEntity.getUserId());
+                webVo.setHasNotice(hasNotice);
                 return R.ok().data(webVo);
             case "permission":
                 return R.ok();

+ 50 - 0
src/main/java/com/nokia/service/NoticeService.java

@@ -0,0 +1,50 @@
+package com.nokia.service;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nokia.common.R;
+import com.nokia.dao.NoticeDao;
+import com.nokia.pojo.Notice;
+import com.nokia.pojo.UserRoleCity;
+import com.nokia.vo.AddNoticeDto;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpSession;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class NoticeService {
+    private final NoticeDao noticeDao;
+    private final OperationLogService operationLogService;
+
+    public NoticeService(NoticeDao noticeDao, OperationLogService operationLogService) {
+        this.noticeDao = noticeDao;
+        this.operationLogService = operationLogService;
+    }
+
+    public List<Notice> list() {
+        Page<Notice> page = new Page<>(1, 100);
+        page.addOrder(OrderItem.desc("create_time"));
+        Page<Notice> p = noticeDao.selectPage(page, null);
+        return p.getRecords();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public R<Object> add(AddNoticeDto dto, HttpSession session) {
+        UserRoleCity role = (UserRoleCity) session.getAttribute("role");
+        if (role.getCityId() != -1) {
+            return R.error("没有操作权限");
+        }
+        Notice notice = new Notice();
+        notice.setCreateTime(LocalDateTime.now());
+        notice.setContent(dto.getContent());
+        notice.setTitle(dto.getTitle());
+        String sb = "添加公告;" + "标题:" + dto.getTitle() + "," + "内容:" + dto.getContent();
+        noticeDao.insert(notice);
+        // 记录日志
+        operationLogService.logOperation(session, "添加公告", sb);
+        return R.ok();
+    }
+}

+ 20 - 0
src/main/java/com/nokia/vo/AddNoticeDto.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.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class AddNoticeDto {
+    @Schema(description = "标题", example = "标题")
+    @NotBlank(message = "title不能为空")
+    private String title;
+    @Schema(description = "内容", example = "内容")
+    @NotBlank(message = "content不能为空")
+    private String content;
+}

+ 2 - 0
src/main/java/com/nokia/vo/WebVerificationVo.java

@@ -14,6 +14,8 @@ import java.util.List;
 public class WebVerificationVo {
     @Schema(description = "用户名", example = "张三")
     private String userName;
+    @Schema(description = "是否有管理公告权限")
+    private Boolean hasNotice;
     @Schema(description = "通知列表")
     private List<Notice> notices;
     @Schema(description = "入口列表")

+ 6 - 3
src/main/resources/application-test.properties

@@ -7,9 +7,12 @@ logging.level.com.nokia=debug
 
 # 测试环境数据库配置
 spring.datasource.driver-class-name=org.postgresql.Driver
-spring.datasource.url=jdbc:postgresql://192.168.50.5:5432/sqmmt
-spring.datasource.username=sqmdb
-spring.datasource.password=sqmdb_1QAZ
+#spring.datasource.url=jdbc:postgresql://192.168.50.5:5432/sqmmt
+#spring.datasource.username=sqmdb
+#spring.datasource.password=sqmdb_1QAZ
+spring.datasource.url=jdbc:postgresql://192.168.50.3:15432/ts_acl
+spring.datasource.username=postgres
+spring.datasource.password=NFQCgBA6YhNvgAqG6THw
 
 # 测试环境redis配置
 spring.redis.host=192.168.50.3