Răsfoiți Sursa

feature: 消息功能开发

xucaiqin 6 zile în urmă
părinte
comite
703c259143

+ 6 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseResult.java

@@ -30,6 +30,12 @@ public class BaseResult<T> implements Serializable {
         result.setData(data);
         return result;
     }
+    public static <T> BaseResult<T> success(T data,String message) {
+        BaseResult<T> result = new BaseResult<>();
+        result.setData(data);
+        result.setMessage(message);
+        return result;
+    }
 
     /**
      * 失败响应 - 自定义消息

+ 23 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -2,6 +2,7 @@ package com.sckw.message.controller;
 
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.model.KwmMessage;
 import com.sckw.message.model.dto.SelectMessagesDTO;
@@ -9,7 +10,10 @@ import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
 import com.sckw.message.model.vo.req.ReadMessagesReqVO;
 import com.sckw.message.model.vo.req.SelectMessagesReqVO;
 import com.sckw.message.model.vo.req.StatisticsMessagesReqVO;
+import com.sckw.message.model.vo.res.KwmMessageListResVO;
 import com.sckw.message.service.MessageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
@@ -23,6 +27,7 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 @RequestMapping(value = "/kwmMessage")
 @RequiredArgsConstructor
+@Tag(name = "消息管理", description = "消息管理")
 public class MessageController {
 
     private final MessageService messageService;
@@ -40,6 +45,13 @@ public class MessageController {
         return HttpResult.ok("获取消息详情成功", message);
     }
 
+    @PostMapping(value = "/count", produces = MediaType.APPLICATION_JSON_VALUE)
+    @Operation(summary = "我的未读消息")
+    public BaseResult<Long> count(@RequestBody @Valid SelectMessagesReqVO params) {
+        Long res = messageService.count(BeanUtils.copyProperties(params, SelectMessagesDTO.class));
+        return BaseResult.success(res, "查询成功");
+    }
+
     /**
      * @param params
      * @return com.sckw.core.web.response.HttpResult
@@ -48,9 +60,10 @@ public class MessageController {
      * @date: 2023-06-09 15:12
      */
     @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult select(@RequestBody @Valid SelectMessagesReqVO params) {
-        PageRes res = messageService.select(BeanUtils.copyProperties(params, SelectMessagesDTO.class));
-        return HttpResult.ok("分页查询消息成功", res);
+    @Operation(summary = "分页查询消息")
+    public BaseResult<PageRes<KwmMessageListResVO>> select(@RequestBody @Valid SelectMessagesReqVO params) {
+        PageRes<KwmMessageListResVO> res = messageService.select(BeanUtils.copyProperties(params, SelectMessagesDTO.class));
+        return BaseResult.success(res, "分页查询消息成功");
     }
 
     /**
@@ -65,6 +78,13 @@ public class MessageController {
         return HttpResult.ok("消息列表统计查询成功", messageService.statistics(params));
     }
 
+    @PostMapping(value = "/mock", produces = MediaType.APPLICATION_JSON_VALUE)
+    @Operation(summary = "模拟数据")
+    public HttpResult mock() {
+        messageService.mock();
+        return HttpResult.ok("读取消息成功");
+    }
+
     /**
      * @param readMessagesReqVO
      * @return com.sckw.core.web.response.HttpResult

+ 2 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/dao/KwmMessageMapper.java

@@ -34,4 +34,6 @@ public interface KwmMessageMapper extends BaseMapper<KwmMessage> {
      * @return: java.util.List<com.sckw.core.model.vo.TableTop>
      */
     List<TableTop> statistics(@Param("item") SelectMessagesDTO item);
+
+    Long joinCount(@Param("para") SelectMessagesDTO selectMessagesDTO);
 }

+ 3 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessage.java

@@ -2,10 +2,7 @@ package com.sckw.message.model;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
+import lombok.*;
 
 import java.io.Serial;
 
@@ -17,6 +14,8 @@ import java.io.Serial;
 @Getter
 @Setter
 @ToString
+@AllArgsConstructor
+@NoArgsConstructor
 @Builder
 @TableName("kwm_message")
 public class KwmMessage extends BaseModel {

+ 3 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/KwmMessageUser.java

@@ -2,10 +2,7 @@ package com.sckw.message.model;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
+import lombok.*;
 
 import java.io.Serial;
 
@@ -18,6 +15,8 @@ import java.io.Serial;
 @Setter
 @ToString
 @Builder
+@AllArgsConstructor
+@NoArgsConstructor
 @TableName("kwm_message_user")
 public class KwmMessageUser extends BaseModel {
     @Serial

+ 1 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/dto/SelectMessagesDTO.java

@@ -23,7 +23,7 @@ public class SelectMessagesDTO implements Serializable {
 
     @Serial
     private static final long serialVersionUID = -6087719092255350917L;
-
+    private String query;
     /**
      * 一级企业id
      */

+ 28 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/MockMessageReq.java

@@ -0,0 +1,28 @@
+package com.sckw.message.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 读取消息请求参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+@Schema(description = "模拟数据请求参数")
+public class MockMessageReq {
+
+
+    /**
+     * 消息ids
+     */
+    @NotBlank(message = "消息ids不能为空")
+    private String ids;
+
+
+}

+ 9 - 7
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SelectMessagesReqVO.java

@@ -2,11 +2,12 @@ package com.sckw.message.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.core.model.page.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.hibernate.validator.constraints.Range;
 
 import java.util.Date;
 
@@ -18,16 +19,22 @@ import java.util.Date;
 @Getter
 @Setter
 @ToString
+@Schema(description = "获取消息分页参数")
 public class SelectMessagesReqVO extends PageRequest {
-
+    @Schema(description = "搜索参数", example = "皮带")
+    private String query;
     /**
      * 消息类型
      */
+    @Schema(description = "消息分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "SYSTEM")
+    @NotBlank(message = "消息分类不能为空")
     private String category;
 
     /**
      * 消息状态(0未读,1已读)
      */
+    @NotNull(message = "消息状态不能为空")
+    @Schema(description = "消息状态 (0未读,1已读)", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
     private Integer status;
 
     /**
@@ -42,9 +49,4 @@ public class SelectMessagesReqVO extends PageRequest {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endCreateTime;
 
-    @NotNull(message = "消息列表排序类型不能为空")
-    @Range(min = 1, max = 2, message = "非法消息列表排序类型")
-    private Integer sortType;
-
-
 }

+ 9 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/KwmMessageListResVO.java

@@ -1,6 +1,7 @@
 package com.sckw.message.model.vo.res;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -24,6 +25,7 @@ public class KwmMessageListResVO implements Serializable {
 
     private Long id;
 
+    @Schema(description = "状态")
     private Integer status;
 
     private String statusLabel;
@@ -31,6 +33,7 @@ public class KwmMessageListResVO implements Serializable {
     /**
      * 消息分类
      */
+    @Schema(description = "消息分类")
     private String category;
 
     private String categoryLabel;
@@ -38,32 +41,38 @@ public class KwmMessageListResVO implements Serializable {
     /**
      * 消息标题
      */
+    @Schema(description = "消息标题")
     private String title;
 
     /**
      * 消息内容
      */
+    @Schema(description = "消息内容")
     private String content;
 
     /**
      * 消息跳转url
      */
+    @Schema(description = "消息跳转url")
     private String url;
 
     /**
      * 创建时间
      */
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "创建时间")
     private Date createTime;
 
     /**
      * 提交人
      */
+    @Schema(description = "提交人")
     private Long createBy;
 
     /**
      * 提交人姓名
      */
+    @Schema(description = "提交人姓名")
     private String createByName;
 
     /**

+ 44 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/KwmMessageService.java

@@ -1,13 +1,19 @@
 package com.sckw.message.service;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.vo.TableTop;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.message.dao.KwmMessageMapper;
+import com.sckw.message.dao.KwmMessageUserMapper;
 import com.sckw.message.model.KwmMessage;
+import com.sckw.message.model.KwmMessageUser;
 import com.sckw.message.model.dto.MessageListDTO;
 import com.sckw.message.model.dto.SelectMessagesDTO;
 import lombok.RequiredArgsConstructor;
@@ -29,6 +35,7 @@ import java.util.Objects;
 public class KwmMessageService {
 
     private final KwmMessageMapper kwmMessageMapper;
+    private final KwmMessageUserMapper kwmMessageUserMapper;
 
 
     /**
@@ -138,4 +145,41 @@ public class KwmMessageService {
                 .orderByAsc(KwmMessage::getStatus).orderByDesc(KwmMessage::getCreateTime);
         return CollectionUtil.emptyIfNull(kwmMessageMapper.selectList(wrapper));
     }
+
+    public Long findCount(SelectMessagesDTO selectMessagesDTO) {
+        if (LoginUserHolder.isManager()) {
+            return 0L;
+        }
+        return kwmMessageMapper.joinCount(selectMessagesDTO);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void mock() {
+        if (LoginUserHolder.isManager()) {
+            return;
+        }
+        Long entId = LoginUserHolder.getEntId();
+        Long userId = LoginUserHolder.getUserId();
+        KwmMessage kwmMessage = new KwmMessage();
+        kwmMessage.setCategory("SYSTEM");
+        kwmMessage.setType("PD");
+        kwmMessage.setTitle("无人巡检异常");
+        kwmMessage.setContent(String.format("一氧化碳 %s,甲烷 %s,湿度 %s,红外热成像皮带点位1 温度%s摄氏度超出阈值",
+                RandomUtil.randomInt(10, 50), RandomUtil.randomInt(30, 50), RandomUtil.randomInt(20, 90), RandomUtil.randomInt(10, 39)));
+        kwmMessage.setUrl("{\"app\":\"/pages/cooperative/manage\",\"pc\":\"/cooperator/cooperativeManagement\"}");
+        kwmMessage.setParams("");
+        kwmMessage.setClientType("");
+        kwmMessage.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwmMessage.setRemark("");
+        kwmMessage.setStatus(0);
+        kwmMessageMapper.insert(kwmMessage);
+        KwmMessageUser kwmMessageUser = new KwmMessageUser();
+        kwmMessageUser.setMsgId(kwmMessage.getId());
+        kwmMessageUser.setEntId(entId);
+        kwmMessageUser.setUserId(userId);
+        kwmMessageUser.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwmMessageUser.setRemark("");
+        kwmMessageUser.setStatus(0);
+        kwmMessageUserMapper.insert(kwmMessageUser);
+    }
 }

+ 19 - 7
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -113,19 +113,18 @@ public class MessageService {
      * @author: yzc
      * @date: 2023-06-13 9:05
      */
-    public PageRes select(SelectMessagesDTO dto) {
+    public PageRes<KwmMessageListResVO> select(SelectMessagesDTO dto) {
         PageHelper.startPage(dto.getPage(), dto.getPageSize());
         //当前登录人是企业管理员则查看全部消息,否则只查看对应用户消息
-        Integer isMain = LoginUserHolder.getIsMain();
-        if (Objects.equals(isMain, 1)) {
-            dto.setEntId(LoginUserHolder.getEntId());
-        } else {
-            dto.setUserId(LoginUserHolder.getUserId());
+        if (LoginUserHolder.isManager()) {
+            return new PageRes<>();
         }
+        dto.setUserId(LoginUserHolder.getUserId());
+        dto.setEntId(LoginUserHolder.getEntId());
         List<MessageListDTO> list = kwmMessageService.findPage(dto);
         PageInfo<MessageListDTO> pageInfo = new PageInfo<>(list);
         if (CollectionUtils.isEmpty(list)) {
-            return PageRes.build(pageInfo, list);
+            return PageRes.build(new PageInfo<KwmMessageListResVO>(), new ArrayList<>());
         }
         Map<String, String> categoryMap, statusMap;
         Map<String, Map<String, String>> dictMap = remoteSystemService.queryDictByType(
@@ -325,4 +324,17 @@ public class MessageService {
         result.setMsgList(msgList).setTotalUnReadNum(unReadNum);
         return result;
     }
+
+    public Long count(SelectMessagesDTO selectMessagesDTO) {
+        if (LoginUserHolder.isManager()) {//
+            return 0L;
+        }
+        selectMessagesDTO.setEntId(LoginUserHolder.getEntId());
+        selectMessagesDTO.setUserId(LoginUserHolder.getUserId());
+        return kwmMessageService.findCount(selectMessagesDTO);
+    }
+
+    public void mock() {
+        kwmMessageService.mock();
+    }
 }

+ 51 - 17
sckw-modules/sckw-message/src/main/resources/mapper/KwmMessageMapper.xml

@@ -3,18 +3,36 @@
 <mapper namespace="com.sckw.message.dao.KwmMessageMapper">
 
   <select id="findPage" resultType="com.sckw.message.model.dto.MessageListDTO" >
-      select
-      mu.id, mu.ent_id entId, mu.user_id userId, mu.status, mu.remark, mu.create_by createBy, mu.create_time createTime,
-      mu.update_by updateBy, mu.update_time updateTime, m.id as msgId, m.category, m.type, m.title, m.content, m.url,
-      m.params, m.client_type clientType, m.remark as msgRemark
+      select mu.id,
+             mu.ent_id      entId,
+             mu.user_id     userId,
+             mu.status,
+             mu.remark,
+             mu.create_by   createBy,
+             mu.create_time createTime,
+             mu.update_by   updateBy,
+             mu.update_time updateTime,
+             m.id     as    msgId,
+             m.category,
+             m.type,
+             m.title,
+             m.content,
+             m.url,
+             m.params,
+             m.client_type  clientType,
+             m.remark as    msgRemark
       from kwm_message_user mu
-      left join kwm_message m
-      on mu.msg_id = m.id
+               left join kwm_message m
+                         on mu.msg_id = m.id
       <where>
-          m.del_flag = 0 and mu.del_flag = 0
+          m.del_flag = 0
+            and mu.del_flag = 0
           <if test="item.entId != null">
               and mu.ent_id = #{item.entId}
           </if>
+          <if test="item.query != null and item.query != ''">
+              and (m.title like concat('%', #{item.query}, '%') or m.content like concat(#{item.query}, '%'))
+          </if>
           <if test="item.userId != null">
               and mu.user_id = #{item.userId}
           </if>
@@ -31,15 +49,7 @@
               and mu.create_time &lt;= #{item.endCreateTime,jdbcType=TIMESTAMP}
           </if>
       </where>
-      ORDER BY
-      <choose>
-          <when test="item.sortType != null and item.sortType == 1">
-              mu.status ASC, mu.create_time DESC
-          </when>
-          <otherwise>
-              mu.create_time DESC
-          </otherwise>
-      </choose>
+      ORDER BY mu.status, mu.create_time DESC
   </select>
     <select id="statistics" resultType="com.sckw.core.model.vo.TableTop">
         select
@@ -68,4 +78,28 @@
         group by mu.status
 
     </select>
-</mapper>
+
+  <select id="joinCount" resultType="java.lang.Long">
+      select count(1)
+      from kwm_message km
+               inner join kwm_message_user kmu on km.id = kmu.msg_id and kmu.del_flag = 0
+      <where>
+          km.del_flag = 0
+          <if test="para.entId != null">
+              and kmu.ent_id = #{para.entId}
+          </if>
+          <if test="para.query != null and para.query != ''">
+              and (km.title like concat('%', #{para.query}, '%') or km.content like concat(#{para.query}, '%'))
+          </if>
+          <if test="para.userId != null">
+              and kmu.user_id = #{para.userId}
+          </if>
+          <if test="para.category != null and para.category != ''">
+              and km.category = #{param1.category}
+          </if>
+          <if test="para.status != null">
+              and km.status = #{para.status}
+          </if>
+      </where>
+  </select>
+</mapper>