瀏覽代碼

1、更改redis缓存用户信息出key
2、ADS的消息管理
3、Agent的未读消息和标记已读

marxjaw 3 月之前
父節點
當前提交
a69f337233
共有 29 個文件被更改,包括 679 次插入66 次删除
  1. 1 1
      yt-agent/agent-service/src/main/java/com/ytpm/config/CustomUserAuthenticationConverter.java
  2. 20 2
      yt-agent/agent-service/src/main/java/com/ytpm/controller/AgentIndexController.java
  3. 12 0
      yt-agent/agent-service/src/main/java/com/ytpm/dao/AppUserLoginMapper.java
  4. 11 0
      yt-agent/agent-service/src/main/java/com/ytpm/service/YtAppUserService.java
  5. 19 0
      yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java
  6. 23 0
      yt-agent/agent-service/src/main/resources/mapper/AppUserLoginMapper.xml
  7. 4 0
      yt-common/src/main/java/com/ytpm/agent/model/YtWorkorder.java
  8. 2 8
      yt-common/src/main/java/com/ytpm/constant/StrConstant.java
  9. 19 0
      yt-common/src/main/java/com/ytpm/middle/enums/MessageTypeEnum.java
  10. 37 0
      yt-common/src/main/java/com/ytpm/middle/model/YtPlatformMessage.java
  11. 33 0
      yt-common/src/main/java/com/ytpm/middle/model/YtPlatformMessageRecord.java
  12. 40 0
      yt-common/src/main/java/com/ytpm/middle/param/MessageParam.java
  13. 34 0
      yt-common/src/main/java/com/ytpm/middle/view/MessageRecordVO.java
  14. 42 0
      yt-common/src/main/java/com/ytpm/middle/view/MessageVO.java
  15. 25 22
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/CustomUserAuthenticationConverter.java
  16. 45 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/MessageController.java
  17. 32 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MessageMapper.java
  18. 6 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleUserMapper.java
  19. 4 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/RoleMapper.java
  20. 18 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/MessageService.java
  21. 66 0
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/MessageServiceImpl.java
  22. 10 2
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/RoleServiceImpl.java
  23. 1 1
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/UserServiceImpl.java
  24. 0 26
      yt-middle/middle-platform/src/main/java/com/ytpm/middle/util/AliOSSUtil.java
  25. 141 0
      yt-middle/middle-platform/src/main/resources/mapper/MessageMapper.xml
  26. 8 0
      yt-middle/middle-platform/src/main/resources/mapper/MiddleUserMapper.xml
  27. 7 0
      yt-middle/middle-platform/src/main/resources/mapper/RoleMapper.xml
  28. 18 3
      yt-middle/middle-platform/src/main/resources/mapper/WorkorderMapper.xml
  29. 1 1
      yt-risk/risk-manage/src/main/java/com/ytpm/config/CustomUserAuthenticationConverter.java

+ 1 - 1
yt-agent/agent-service/src/main/java/com/ytpm/config/CustomUserAuthenticationConverter.java

@@ -63,7 +63,7 @@ public class CustomUserAuthenticationConverter implements UserAuthenticationConv
                 log.error("当前用户不存在,应该退出登录");
                 return null;
             }
-            String key = StrConstant.USER_INFO_PRE + userName ;
+            String key = StrConstant.AGENT_USER_INFO_PRE + userName ;
             if (redisService.hasKey(key)) {
                 String str = redisService.getStr(key);
                 AgentUserInfo jwtUser = JSONObject.parseObject(str, AgentUserInfo.class);

+ 20 - 2
yt-agent/agent-service/src/main/java/com/ytpm/controller/AgentIndexController.java

@@ -15,17 +15,21 @@ import com.ytpm.dao.AppMapper;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.view.MessageVO;
 import com.ytpm.service.AgentAppService;
+import com.ytpm.service.YtAppUserService;
 import com.ytpm.util.DateUtil;
 import com.ytpm.util.RedisService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -53,8 +57,10 @@ public class AgentIndexController {
 
     @Resource
     private AppMapper appMapper;
-    @Autowired
+    @Resource
     private RedisService redisService;
+    @Resource
+    private YtAppUserService appUserService;
 
 
     /**
@@ -183,5 +189,17 @@ public class AgentIndexController {
         }
     }
 
+    @ApiOperation("查询我的未读通知")
+    @GetMapping("/unreadMessage")
+    public ResultTable<MessageVO> unreadMessage(@ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo) {
+        return appUserService.unreadMessage(userInfo.getUserId());
+    }
+
+    @ApiImplicitParam(name = "messageId", value = "消息ID")
+    @ApiOperation("标记为已读")
+    @GetMapping("/markRead")
+    public Result<String> markRead(@RequestParam(name = "messageId")String messageId, @ApiIgnore @AuthenticationPrincipal AgentUserInfo userInfo) {
+        return appUserService.markRead(messageId,userInfo.getUserId());
+    }
 
 }

+ 12 - 0
yt-agent/agent-service/src/main/java/com/ytpm/dao/AppUserLoginMapper.java

@@ -1,9 +1,12 @@
 package com.ytpm.dao;
 
 import com.ytpm.app.model.YtAppUserLoginRecord;
+import com.ytpm.middle.view.MessageVO;
 import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface AppUserLoginMapper {
     /**
@@ -23,4 +26,13 @@ public interface AppUserLoginMapper {
      * 查询同一个应用下与当前用户设备型号相同的玩家数量
      */
     Integer getDeviceCount(@Param("userId") String userId, @Param("appId") String appId, @Param("phoneModel") String phoneModel);
+    /**
+     * 查询我的未读消息
+     */
+    List<MessageVO> getUnreadMessage(@Param("userId")String userId);
+
+    /**
+     * 标记消息已读
+     */
+    void markRead(@Param("messageId")String messageId, @Param("userId")String userId);
 }

+ 11 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/YtAppUserService.java

@@ -7,6 +7,7 @@ import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.app.view.YtUserEcpmListView;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
+import com.ytpm.middle.view.MessageVO;
 
 import java.math.BigDecimal;
 
@@ -33,4 +34,14 @@ public interface YtAppUserService {
      * 根据时间统计收益
      */
     Result<BigDecimal> getRevenueByTime(YtAppUserListParam param, String userId);
+
+    /**
+     * 查询我的未读消息
+     */
+    ResultTable<MessageVO> unreadMessage(String userId);
+
+    /**
+     *
+     */
+    Result<String> markRead(String messageId, String userId);
 }

+ 19 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java

@@ -18,8 +18,10 @@ import com.ytpm.dao.AppUserLoginMapper;
 import com.ytpm.dao.AppVideoWatchMapper;
 import com.ytpm.dao.AppWithdrawMapper;
 import com.ytpm.feign.AppFeign;
+import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
+import com.ytpm.middle.view.MessageVO;
 import com.ytpm.service.YtAppUserService;
 import org.springframework.stereotype.Service;
 
@@ -151,6 +153,23 @@ public class YtAppUserServiceImpl implements YtAppUserService {
         return Result.resultObjOk(appFeign.getRevenueByTime(param));
     }
 
+    /**
+     * 查询我的未读消息
+     */
+    @Override
+    public ResultTable<MessageVO> unreadMessage(String userId) {
+        return ResultTable.resultTableOk(new PageInfo<MessageVO>(userLoginMapper.getUnreadMessage(userId)));
+    }
+
+    /**
+     * 标记消息已读
+     */
+    @Override
+    public Result<String> markRead(String messageId, String userId) {
+        userLoginMapper.markRead(messageId,userId);
+        return Result.resultOk(RepMessage.MODIFY_SUCCESS);
+    }
+
 
     /**
      * 查询用户当日播放视频总数

+ 23 - 0
yt-agent/agent-service/src/main/resources/mapper/AppUserLoginMapper.xml

@@ -1,6 +1,11 @@
 <?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.ytpm.dao.AppUserLoginMapper">
+    <update id="markRead">
+        update yt_platform_message_record
+        set recipient_status = 1, update_user_id = #{userId}, update_time = now()
+        where message_id = #{messageId} and recipient = #{userId}
+    </update>
 
     <select id="getLastLoginInfo" resultType="com.ytpm.app.model.YtAppUserLoginRecord">
         select
@@ -27,4 +32,22 @@
             and user_id not in (#{userId})
             and phone_model = #{phoneModel}
     </select>
+    <select id="getUnreadMessage" resultType="com.ytpm.middle.view.MessageVO">
+        select
+            pm.message_id,
+            pm.message_type,
+            pm.message_title,
+            pm.message_content,
+            pm.message_status,
+            pm.send_time,
+            pm.send_type,
+            pm.create_time,
+            pm.create_user_id,
+            pm.update_time,
+            pm.update_user_id,
+            pm.available
+        from yt_platform_message_record pmr
+        join yt_platform_message pm on pmr.message_id = pm.message_id
+        where pmr.recipient = #{userId}
+    </select>
 </mapper>

+ 4 - 0
yt-common/src/main/java/com/ytpm/agent/model/YtWorkorder.java

@@ -34,4 +34,8 @@ public class YtWorkorder extends BaseParam {
     private String remark;
     @ApiModelProperty("完成时间")
     private Date finishTime;
+    @ApiModelProperty(value = "创建人昵称", hidden = true)
+    private String creatorName;
+    @ApiModelProperty(value = "处理人昵称", hidden = true)
+    private String processorName;
 }

+ 2 - 8
yt-common/src/main/java/com/ytpm/constant/StrConstant.java

@@ -5,15 +5,9 @@ public class StrConstant {
      * redis 存储用户信息前缀
      */
 
-    public static final String USER_INFO_PRE = "YT_PLATFORM_";
+    public static final String ADS_USER_INFO_PRE = "YT_ADS_";
 
-    /**
-     * 退出登录
-     */
-    public static final int LOG_OUT = 1024;  /**
-     * 提交次数限制
-     */
-    public static final String POST_SUBMIT_TIMES="YT_POST_SUBMIT_TIMES_";
+    public static final String AGENT_USER_INFO_PRE = "YT_AGENT_";
     /**
      * 平台ID前缀
      */

+ 19 - 0
yt-common/src/main/java/com/ytpm/middle/enums/MessageTypeEnum.java

@@ -0,0 +1,19 @@
+package com.ytpm.middle.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum MessageTypeEnum {
+    NOTICE(1,"公告"),
+    SYSTEM(2,"系统通知"),
+    ACTIVITY(3,"运营活动"),
+    REMINDER(4, "友情提醒");
+
+    private int type;
+    private String desc;
+
+    MessageTypeEnum(int type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+}

+ 37 - 0
yt-common/src/main/java/com/ytpm/middle/model/YtPlatformMessage.java

@@ -0,0 +1,37 @@
+package com.ytpm.middle.model;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 11:37
+ */
+@Data
+@ApiModel("消息信息表")
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+public class YtPlatformMessage extends BaseParam {
+    @ApiModelProperty("消息ID")
+    private String messageId;
+    @ApiModelProperty("消息类型 1-公告 2-系统通知 3-运营活动 4-温馨提醒")
+    private Integer messageType;
+    @ApiModelProperty("消息标题")
+    private String messageTitle;
+    @ApiModelProperty("消息内容")
+    private String messageContent;
+    @ApiModelProperty("消息状态 0-未读完 1-已读完")
+    private Integer messageStatus;
+    @ApiModelProperty("发送类型 1-单发 2-群发")
+    private Integer sendType;
+    @ApiModelProperty("发送时间")
+    private Date sendTime;
+}

+ 33 - 0
yt-common/src/main/java/com/ytpm/middle/model/YtPlatformMessageRecord.java

@@ -0,0 +1,33 @@
+package com.ytpm.middle.model;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 11:44
+ */
+@Data
+@ApiModel("消息记录表")
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+public class YtPlatformMessageRecord extends BaseParam {
+    @ApiModelProperty("消息记录ID")
+    private String recordId;
+    @ApiModelProperty("消息ID")
+    private String messageId;
+    @ApiModelProperty("接收人ID")
+    private String recipient;
+    @ApiModelProperty("接收状态")
+    private int recipientStatus;
+    @ApiModelProperty("接收时间")
+    private Date recipientTime;
+}

+ 40 - 0
yt-common/src/main/java/com/ytpm/middle/param/MessageParam.java

@@ -0,0 +1,40 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 11:53
+ */
+@Data
+@ApiModel("消息表单")
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessageParam extends BaseParam {
+    @ApiModelProperty("消息ID")
+    private String messageId;
+    @ApiModelProperty("消息类型 1-公告 2-系统通知 3-运营通知 4-缴费提醒")
+    private Integer messageType;
+    @ApiModelProperty("消息标题")
+    private String messageTitle;
+    @ApiModelProperty("消息内容")
+    private String messageContent;
+    @ApiModelProperty("消息状态 0-未读完 1-已读完")
+    private Integer messageStatus;
+    @ApiModelProperty("发送类型 1-单发 2-群发")
+    private Integer sendType;
+    @ApiModelProperty("发送时间")
+    private Date sendTime;
+    @ApiModelProperty("发送对象ID")
+    private List<String> recipientList;
+}

+ 34 - 0
yt-common/src/main/java/com/ytpm/middle/view/MessageRecordVO.java

@@ -0,0 +1,34 @@
+package com.ytpm.middle.view;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 14:44
+ */
+@Data
+@ApiModel("消息记录表")
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessageRecordVO {
+    @ApiModelProperty("消息记录ID")
+    private String recordId;
+    @ApiModelProperty("消息ID")
+    private String messageId;
+    @ApiModelProperty("接收人ID")
+    private String recipient;
+    @ApiModelProperty("接收人名称")
+    private String recipientName;
+    @ApiModelProperty("接收状态")
+    private int recipientStatus;
+    @ApiModelProperty("接收时间")
+    private Date recipientTime;
+}

+ 42 - 0
yt-common/src/main/java/com/ytpm/middle/view/MessageVO.java

@@ -0,0 +1,42 @@
+package com.ytpm.middle.view;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 14:34
+ */
+@Data
+@ApiModel("消息信息表")
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+public class MessageVO extends BaseParam {
+    @ApiModelProperty("消息ID")
+    private String messageId;
+    @ApiModelProperty("消息类型 1-公告 2-系统通知 3-运营活动 4-温馨提醒")
+    private Integer messageType;
+    @ApiModelProperty("消息标题")
+    private String messageTitle;
+    @ApiModelProperty("消息内容")
+    private String messageContent;
+    @ApiModelProperty("消息状态 0-未读完 1-已读完")
+    private Integer messageStatus;
+    @ApiModelProperty("发送类型 1-单发 2-群发")
+    private Integer sendType;
+    @ApiModelProperty("发送时间")
+    private Date sendTime;
+    @ApiModelProperty(value = "发送对象", hidden = true)
+    private List<MessageRecordVO> recipient;
+    @ApiModelProperty("发送对象")
+    private String recipientName;
+}

+ 25 - 22
yt-middle/middle-platform/src/main/java/com/ytpm/middle/config/CustomUserAuthenticationConverter.java

@@ -1,6 +1,7 @@
 package com.ytpm.middle.config;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ytpm.constant.StrConstant;
@@ -13,7 +14,6 @@ import com.ytpm.middle.view.MiddleRoleVO;
 import com.ytpm.middle.view.MiddleUserInfo;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
@@ -23,6 +23,7 @@ import org.springframework.security.oauth2.provider.token.UserAuthenticationConv
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -42,16 +43,16 @@ public class CustomUserAuthenticationConverter implements UserAuthenticationConv
             new ArrayList<>(AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN"));
     private UserDetailsService userDetailsService;
 
-    @Autowired
+    @Resource
     private RedisUtil redisService;
-    @Autowired
+    @Resource
     private MiddleUserMapper userMapper;
-    @Autowired
+    @Resource
     private PermissionMapper permissionMapper;
 
     @Override
     public Map<String, ?> convertUserAuthentication(Authentication authentication) {
-        Map<String, Object> response = new LinkedHashMap();
+        Map<String, Object> response = new LinkedHashMap<>();
         response.put("username", authentication.getName());
         if (authentication.getAuthorities() != null && !authentication.getAuthorities().isEmpty()) {
             response.put("authorities", AuthorityUtils.authorityListToSet(authentication.getAuthorities()));
@@ -63,32 +64,36 @@ public class CustomUserAuthenticationConverter implements UserAuthenticationConv
     public Authentication extractAuthentication(Map<String, ?> map) {
         if (map.containsKey("user_name")) {
             String userName = (String) map.get("user_name");
-            Object principal = map.get("principal");
-            Collection<? extends GrantedAuthority> authorities = this.getAuthorities(map);
+            Object principal;
+            this.getAuthorities(map);
+            Collection<? extends GrantedAuthority> authorities;
             MiddleUserInfo user = userMapper.getByLoginName(userName);
             if(Objects.isNull(user)){
                 log.error("当前用户不存在,应该退出登录");
                 throw new CustomerException("用户登录失效,请重新登录!");
             }
-            String key = StrConstant.USER_INFO_PRE + userName ;
-            if (redisService.hasKey(key)) {
+            String key = StrConstant.ADS_USER_INFO_PRE + userName ;
+            if (Boolean.TRUE.equals(redisService.hasKey(key))) {
                 String str = redisService.getStr(key);
                 MiddleUserInfo jwtUser = JSONObject.parseObject(str, MiddleUserInfo.class);
                 principal = jwtUser;
                 authorities = jwtUser.getAuthorities();
             } else {
-                List<MiddleRoleVO> roleList = new ArrayList<>();
+                List<MiddleRoleVO> roleList;
                 if(1==user.getSuperAdmin()){
                     roleList = userMapper.getSuperAdmin();
+                    user.setRoleList(roleList);
+                    user.setPermissionList(permissionMapper.queryAll(new MiddlePermissionParam()));
                 }else{
                     roleList = userMapper.getRoleList(user.getUserId());
+                    if(CollUtil.isEmpty(roleList)){
+                        throw new CustomerException("用户权限不足!");
+                    }
+                    user.setRoleList(roleList);
+                    List<Integer> roleIdList = roleList.stream()
+                            .map(MiddleRoleVO::getRoleId).collect(Collectors.toList());
+                    user.setPermissionList(permissionMapper.queryAllByRoleIds(roleIdList));
                 }
-                user.setRoleList(roleList);
-                List<Integer> roleIdList = roleList.stream()
-                        .map(MiddleRoleVO::getRoleId).collect(Collectors.toList());
-                user.setPermissionList(user.getSuperAdmin() == 1?
-                       permissionMapper.queryAll(new MiddlePermissionParam())
-                        : permissionMapper.queryAllByRoleIds(roleIdList));
                 MiddleUserInfo jwtUser = new MiddleUserInfo();
                 BeanUtil.copyProperties(user,jwtUser);
                 authorities = jwtUser.getAuthorities();
@@ -104,15 +109,13 @@ public class CustomUserAuthenticationConverter implements UserAuthenticationConv
     /**
      * 用户资源授权的方法重写
      */
-    private Collection<? extends GrantedAuthority> getAuthorities(Map<String, ?> map) {
-        if (!map.containsKey("authorities")) {
-            return this.defaultAuthorities;
-        } else {
+    private void getAuthorities(Map<String, ?> map) {
+        if (map.containsKey("authorities")){
             Object authorities = map.get("authorities");
             if (authorities instanceof String) {
-                return AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
+                AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
             } else if (authorities instanceof Collection) {
-                return AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection) authorities));
+                AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection<?>) authorities));
             } else {
                 throw new IllegalArgumentException("Authorities must be either a String or a Collection");
             }

+ 45 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/MessageController.java

@@ -0,0 +1,45 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.MessageParam;
+import com.ytpm.middle.service.MessageService;
+import com.ytpm.middle.view.MessageVO;
+import com.ytpm.middle.view.MiddleUserInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+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 springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 11:55
+ */
+@Api(tags = "消息管理模块")
+@RestController
+@RequestMapping("/message")
+public class MessageController {
+
+    @Resource
+    private MessageService messageService;
+
+    @ApiOperation("消息发送")
+    @PostMapping("/sendMessage")
+    public Result<String> sendMessage(@RequestBody MessageParam param, @ApiIgnore@AuthenticationPrincipal MiddleUserInfo userInfo) {
+        param.setDefaultParam(userInfo.getUserId());
+        return messageService.sendMessage(param);
+    }
+
+    @ApiOperation("查询消息列表")
+    @PostMapping("/queryList")
+    public ResultTable<MessageVO> queryList(@RequestBody MessageParam param) {
+        return messageService.queryList(param);
+    }
+
+}

+ 32 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MessageMapper.java

@@ -0,0 +1,32 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.middle.model.YtPlatformMessage;
+import com.ytpm.middle.model.YtPlatformMessageRecord;
+import com.ytpm.middle.param.MessageParam;
+import com.ytpm.middle.view.MessageVO;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MessageMapper {
+    /**
+     * 新建消息
+     */
+    void insertMessage(YtPlatformMessage message);
+
+    /**
+     * 修改消息
+     */
+    void updateByPrimaryKeySelective(YtPlatformMessage message);
+
+    /**
+     * 批量插入消息接收
+     */
+    void batchInsertMessageRecipient(YtPlatformMessageRecord record);
+
+    /**
+     * 查询消息列表
+     */
+    List<MessageVO> queryAll(MessageParam param);
+}

+ 6 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/MiddleUserMapper.java

@@ -1,5 +1,6 @@
 package com.ytpm.middle.dao;
 
+import com.ytpm.middle.model.YtMiddleUser;
 import com.ytpm.middle.model.YtMiddleUserRole;
 import com.ytpm.middle.param.MiddleUserListParam;
 import com.ytpm.middle.view.MiddleRoleVO;
@@ -58,4 +59,9 @@ public interface MiddleUserMapper {
      * 根据用户ID删除用户角色
      */
     void deleteByUserId(@Param("userId")String userId);
+
+    /**
+     * 根据用户ID 查询用户
+     */
+    List<YtMiddleUser> getByIds(@Param("userIds") List<String> userIds);
 }

+ 4 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/RoleMapper.java

@@ -44,4 +44,8 @@ public interface RoleMapper {
      * 授权用户角色
      */
     void grantRoleToUsers(@Param("roleId") Integer roleId,@Param("operatorId") String operatorId, @Param("userIds") String userIds);
+    /**
+     * 查询角色用户ID
+     */
+    List<String> getRoleUserIds(@Param("roleId") Integer roleId);
 }

+ 18 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/MessageService.java

@@ -0,0 +1,18 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.MessageParam;
+import com.ytpm.middle.view.MessageVO;
+
+public interface MessageService {
+    /**
+     * 发送消息
+     */
+    Result<String> sendMessage(MessageParam param);
+
+    /**
+     * 消息列表
+     */
+    ResultTable<MessageVO> queryList(MessageParam param);
+}

+ 66 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/MessageServiceImpl.java

@@ -0,0 +1,66 @@
+package com.ytpm.middle.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.MessageMapper;
+import com.ytpm.middle.model.YtPlatformMessage;
+import com.ytpm.middle.model.YtPlatformMessageRecord;
+import com.ytpm.middle.param.MessageParam;
+import com.ytpm.middle.service.MessageService;
+import com.ytpm.middle.view.MessageVO;
+import com.ytpm.util.IDUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Marx
+ * @date 2025/8/5 11:56
+ */
+@Service
+public class MessageServiceImpl implements MessageService {
+
+    @Resource
+    private MessageMapper messageMapper;
+
+    /**
+     * 发送消息
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result<String> sendMessage(MessageParam param) {
+        YtPlatformMessage message = new YtPlatformMessage();
+        BeanUtils.copyProperties(param, message);
+        message.setMessageId(IDUtil.generateFlowID("message"));
+        message.setSendTime(new Date());
+        messageMapper.insertMessage(message);
+        List<String> recipientList = param.getRecipientList();
+        if(CollUtil.isNotEmpty(recipientList)){
+            YtPlatformMessageRecord record = new YtPlatformMessageRecord();
+            record.setRecordId(IDUtil.generateFlowID("sendMsg"));
+            record.setMessageId(message.getMessageId());
+            record.setRecipient(String.join(",", recipientList));
+            record.setRecipientStatus(0);
+            record.setDefaultParam(param.getCreateUserId());
+            messageMapper.batchInsertMessageRecipient(record);
+        }
+        return Result.resultOk(RepMessage.SAVE_SUCCESS);
+    }
+
+    /**
+     * 查询消息列表
+     */
+    @Override
+    public ResultTable<MessageVO> queryList(MessageParam param) {
+        PageHelper.startPage(param.getPage(), param.getLimit());
+        return ResultTable.resultTableOk(new PageInfo<>(messageMapper.queryAll(param)));
+    }
+}

+ 10 - 2
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/RoleServiceImpl.java

@@ -1,14 +1,17 @@
 package com.ytpm.middle.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ytpm.constant.StrConstant;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.MiddleUserMapper;
 import com.ytpm.middle.dao.PermissionMapper;
 import com.ytpm.middle.dao.RoleMapper;
 import com.ytpm.middle.model.YtMiddleRole;
+import com.ytpm.middle.model.YtMiddleUser;
 import com.ytpm.middle.param.MiddleRoleParam;
 import com.ytpm.middle.service.RoleService;
 import com.ytpm.middle.util.RedisUtil;
@@ -20,7 +23,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service
 public class RoleServiceImpl implements RoleService {
@@ -31,6 +37,8 @@ public class RoleServiceImpl implements RoleService {
     private PermissionMapper permissionMapper;
     @Resource
     private RedisUtil redisService;
+    @Resource
+    private MiddleUserMapper userMapper;
 
     /**
      * 查询角色列表
@@ -101,7 +109,7 @@ public class RoleServiceImpl implements RoleService {
         roleMapper.delUserRoleById(roleId);
         roleMapper.grantRoleToUsers(roleId,userInfo.getUserId(),userIds);
         //清除redis用户信息
-        redisService.del(StrConstant.USER_INFO_PRE+userInfo.getLoginName());
+        redisService.del(StrConstant.ADS_USER_INFO_PRE+userInfo.getLoginName());
         return Result.resultOk(RepMessage.GRANT_SUCCESS);
     }
 
@@ -119,7 +127,7 @@ public class RoleServiceImpl implements RoleService {
         permissionMapper.delByRoleId(roleId);
         permissionMapper.addRolePermissions(roleId,permissionIds,userInfo.getUserId());
         //清除redis用户信息
-        redisService.del(StrConstant.USER_INFO_PRE+userInfo.getLoginName());
+        redisService.del(StrConstant.ADS_USER_INFO_PRE+userInfo.getLoginName());
         return Result.resultOk(RepMessage.GRANT_SUCCESS);
     }
 }

+ 1 - 1
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/UserServiceImpl.java

@@ -99,7 +99,7 @@ public class UserServiceImpl implements UserService {
             addUserRole(param);
         }
         //清除redis用户信息
-        redisService.del(StrConstant.USER_INFO_PRE+loginName);
+        redisService.del(StrConstant.ADS_USER_INFO_PRE+loginName);
         return Result.resultOk(RepMessage.MODIFY_SUCCESS);
     }
 

+ 0 - 26
yt-middle/middle-platform/src/main/java/com/ytpm/middle/util/AliOSSUtil.java

@@ -1,6 +1,5 @@
 package com.ytpm.middle.util;
 
-import com.alibaba.fastjson.JSON;
 import com.aliyun.oss.ClientBuilderConfiguration;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClientBuilder;
@@ -12,7 +11,6 @@ import com.aliyun.oss.common.comm.SignVersion;
 import com.aliyun.oss.model.PutObjectRequest;
 import com.aliyun.sls20201230.models.GetLogsResponse;
 import com.aliyun.tea.TeaException;
-import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
@@ -55,30 +53,6 @@ public class AliOSSUtil {
         bucketName = bucketNameCon;
     }
 
-    private static String projectName;
-    @Value("${oss.aliyun.bucketName}")
-    public static void setProjectName(String projectName) {
-        AliOSSUtil.projectName = projectName;
-    }
-
-    private static String logstoreName;
-    @Value("${oss.aliyun.logstoreName}")
-    public static void setLogstoreName(String logstoreName) {
-        AliOSSUtil.logstoreName = logstoreName;
-    }
-
-    private static String logUrl;
-    @Value("${oss.aliyun.logUrl}")
-    public static void setLogUrl(String logUrl) {
-        AliOSSUtil.logUrl = logUrl;
-    }
-
-    private static String querySql;
-    @Value("${oss.aliyun.querySql}")
-    public static void setQuerySql(String querySql) {
-        AliOSSUtil.querySql = querySql;
-    }
-
     /**
      * 上传广告平台文件
      */

+ 141 - 0
yt-middle/middle-platform/src/main/resources/mapper/MessageMapper.xml

@@ -0,0 +1,141 @@
+<?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.ytpm.middle.dao.MessageMapper">
+
+    <insert id="insertMessage">
+        insert into yt_platform_message
+        (
+         message_id,
+         message_type,
+         message_title,
+         message_content,
+         message_status,
+         send_time,
+         send_type,
+         create_time,
+         create_user_id,
+         available
+        )
+        values
+        (
+         #{messageId},
+         #{messageType},
+         #{messageTitle},
+         #{messageContent},
+         #{messageStatus},
+         #{sendTime},
+         #{sendType},
+         #{createTime},
+         #{createUserId},
+         #{available}
+        );
+    </insert>
+    <insert id="batchInsertMessageRecipient">
+        insert into yt_platform_message_record
+        (
+         record_id,
+         message_id,
+         recipient,
+         recipient_status,
+         recipient_time,
+         create_user_id,
+         create_time,
+         available
+        )
+        values
+        (
+          #{recordId},
+          #{messageId},
+          #{recipient},
+          #{recipientStatus},
+          #{recipientTime},
+          #{createUserId},
+          #{createTime},
+          #{available}
+        );
+    </insert>
+    <update id="updateByPrimaryKeySelective">
+        update yt_platform_message
+        <set>
+            <if test="messageType != null">
+                message_type = #{messageType},
+            </if>
+            <if test="messageTitle != null">
+                message_title = #{messageTitle},
+            </if>
+            <if test="messageContent != null">
+                message_content = #{messageContent},
+            </if>
+            <if test="messageStatus != null">
+                message_status = #{messageStatus},
+            </if>
+            <if test="sendTime != null">
+                send_time = #{sendTime},
+            </if>
+            <if test="sendType != null">
+                send_type = #{sendType},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+            <if test="updateUserId != null">
+                update_user_id = #{updateUserId},
+            </if>
+            <if test="available != null">
+                available = #{available}
+            </if>
+        </set>
+        where message_id = #{messageId}
+    </update>
+    <resultMap id="MessageVOMap" type="com.ytpm.middle.view.MessageVO">
+        <id column="message_id" property="messageId" />
+        <result column="message_type" property="messageType" />
+        <result column="message_title" property="messageContent" />
+        <result column="message_content" property="messageContent" />
+        <result column="message_status" property="messageStatus" />
+        <result column="send_time" property="sendTime" />
+        <result column="send_type" property="sendType" />
+        <result column="create_time" property="createTime" />
+        <result column="available" property="available" />
+        <collection property="recipient" ofType="com.ytpm.middle.view.MessageRecordVO">
+            <result column="record_id" property="recordId" />
+            <result column="recipient" property="recipient" />
+            <result column="recipientName" property="recipientName" />
+            <result column="recipient_status" property="recipientStatus" />
+            <result column="recipient_time" property="recipientTime" />
+        </collection>
+    </resultMap>
+    <select id="queryAll" resultMap="MessageVOMap">
+        select
+        m.message_id,
+        m.message_type,
+        m.message_title,
+        m.message_content,
+        m.message_status,
+        m.send_time,
+        m.send_type,
+        m.create_time,
+        m.create_user_id,
+        m.update_time,
+        m.update_user_id,
+        m.available,
+        ypmr.record_id,
+        ypmr.recipient,
+        (select nick_name from yt_platform_user where user_id = ypmr.recipient) recipientName,
+        ypmr.recipient_status,
+        ypmr.recipient_time
+        from yt_platform_message m
+        left join yt_platform.yt_platform_message_record ypmr on m.available = ypmr.available
+        <where>
+            <if test="messageTitle != null and messageTitle != ''">
+                and message_title like concat('%',#{messageTitle},'%')
+            </if>
+            <if test="messageType != null ">
+                and message_type = #{messageType}
+            </if>
+            <if test="messageStatus != null ">
+                and message_status = #{messageStatus}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 8 - 0
yt-middle/middle-platform/src/main/resources/mapper/MiddleUserMapper.xml

@@ -187,4 +187,12 @@
         from yt_platform_user
         where user_id = #{userId}
     </select>
+    <select id="getByIds" resultType="com.ytpm.middle.model.YtMiddleUser">
+        select
+        from yt_platform_user
+        where user_id in
+        <foreach collection="userIds" separator="," item="item" open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
 </mapper>

+ 7 - 0
yt-middle/middle-platform/src/main/resources/mapper/RoleMapper.xml

@@ -83,4 +83,11 @@
         from yt_middle_role
         where role_id = #{roleId}
     </select>
+    <select id="getRoleUserIds" resultType="java.lang.String">
+        select distinct
+            user_id
+        from yt_middle_role r
+        left join yt_middle_user_role ymur on r.role_id = ymur.role_id
+        where r.role_id = #{roleId}
+    </select>
 </mapper>

+ 18 - 3
yt-middle/middle-platform/src/main/resources/mapper/WorkorderMapper.xml

@@ -67,8 +67,23 @@
     </select>
     <select id="selectByPrimary" resultType="com.ytpm.agent.model.YtWorkorder">
         select
-            workorder_id, title, content, workorder_status, remark, processor, finish_time, create_user_id, create_time, update_user_id, update_time, available
-        from yt_work_order
-        where workorder_id = #{workorderId}
+            wo.workorder_id,
+            wo.title,
+            wo.content,
+            wo.workorder_status,
+            wo.remark,
+            wo.processor,
+            wo.finish_time,
+            wo.create_user_id,
+            wo.create_time,
+            wo.update_user_id,
+            wo.update_time,
+            wo.available,
+            pu.nick_name creatorName,
+            pu1.nick_name processorName
+        from yt_work_order wo
+        left join yt_platform_user pu on wo.create_user_id = pu.user_id
+        left join yt_platform_user pu1 on wo.processor = pu1.user_id
+        where wo.workorder_id = #{workorderId}
     </select>
 </mapper>

+ 1 - 1
yt-risk/risk-manage/src/main/java/com/ytpm/config/CustomUserAuthenticationConverter.java

@@ -63,7 +63,7 @@ public class CustomUserAuthenticationConverter implements UserAuthenticationConv
                 log.error("当前用户不存在,应该退出登录");
                 return null;
             }
-            String key = StrConstant.USER_INFO_PRE + userName ;
+            String key = StrConstant.AGENT_USER_INFO_PRE + userName ;
             if (redisService.hasKey(key)) {
                 String str = redisService.getStr(key);
                 AgentUserInfo jwtUser = JSONObject.parseObject(str, AgentUserInfo.class);