From 93d8b70e655b1ec491731fb933d25de79cda1718 Mon Sep 17 00:00:00 2001 From: bynt <13586541001@163.com> Date: Thu, 30 Nov 2023 17:27:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B6=88=E6=81=AF=E5=86=85?= =?UTF-8?q?=E5=AE=B9=20=E5=A2=9E=E5=8A=A0websocket=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NotifyWebsocketEventListener.java | 19 ++++++ .../event/UserAnnouncementReadEvent.java | 28 ++++++++ .../impl/AnnouncementNotifyInfoHandler.java | 6 +- .../handler/impl/AnnouncementPushMessage.java | 25 ++++++++ .../notify/mapper/UserAnnouncementMapper.java | 32 +++++++--- .../service/UserAnnouncementService.java | 14 ++++ .../impl/UserAnnouncementEventListener.java | 34 ++++++++++ .../impl/UserAnnouncementServiceImpl.java | 15 ++++- .../UserAnnouncementController.java | 16 ++++- .../model/domain/AnnouncementNotifyInfo.java | 5 +- .../notify/model/entity/UserAnnouncement.java | 2 +- .../notify/model/qo/UserAnnouncementQO.java | 7 ++ .../model/vo/UserAnnouncementPageVO.java | 4 +- .../distribute/controller/ClueController.java | 8 +++ .../baiye/modules/distribute/dto/ClueDTO.java | 5 ++ .../modules/distribute/entity/ClueEntity.java | 7 +- .../service/impl/ClueServiceImpl.java | 64 ++++++++++++++----- .../service/impl/CustomServiceImpl.java | 15 ++++- .../service/impl/CustomStoreServiceImpl.java | 6 +- .../baiye/modules/distribute/vo/ClueVO.java | 5 +- .../src/main/resources/mapper/ClueMapper.xml | 3 +- 21 files changed, 281 insertions(+), 39 deletions(-) create mode 100644 ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/event/UserAnnouncementReadEvent.java create mode 100644 ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementEventListener.java diff --git a/ad-distribute-admin/admin-websocket/src/main/java/com/baiye/listener/NotifyWebsocketEventListener.java b/ad-distribute-admin/admin-websocket/src/main/java/com/baiye/listener/NotifyWebsocketEventListener.java index 921cce5..e8aeadd 100644 --- a/ad-distribute-admin/admin-websocket/src/main/java/com/baiye/listener/NotifyWebsocketEventListener.java +++ b/ad-distribute-admin/admin-websocket/src/main/java/com/baiye/listener/NotifyWebsocketEventListener.java @@ -15,6 +15,7 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.time.LocalTime; import java.util.List; /** @@ -56,6 +57,7 @@ public class NotifyWebsocketEventListener { @Async @EventListener(StationNotifyPushEvent.class) public void onAnnouncementPublishEvent(StationNotifyPushEvent event) { + log.info("============ onAnnouncementPublishEvent time {} ============", LocalTime.now()); NotifyInfo notifyInfo = event.getNotifyInfo(); List userList = event.getUserIdList(); notifyInfoDelegateHandler.handle(userList, notifyInfo); @@ -64,4 +66,21 @@ public class NotifyWebsocketEventListener { + /** + * 公告关闭事件监听 + * + * @param event the AnnouncementCloseEvent + */ + @Async + @EventListener(AnnouncementCloseEvent.class) + public void read(AnnouncementCloseEvent event) { + // 构建公告关闭的消息体 + AnnouncementCloseMessage message = new AnnouncementCloseMessage(); + message.setId(event.getId()); + String msg = JsonUtils.toJson(message); + + // 广播公告关闭信息 + MessageDO messageDO = new MessageDO().setMessageText(msg).setNeedBroadcast(true); + messageDistributor.distribute(messageDO); + } } diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/event/UserAnnouncementReadEvent.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/event/UserAnnouncementReadEvent.java new file mode 100644 index 0000000..84fdd85 --- /dev/null +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/event/UserAnnouncementReadEvent.java @@ -0,0 +1,28 @@ +package com.baiye.notify.event; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +/** + * 公告关闭事件 + * + * @author Hccake 2021/1/7 + * @version 1.0 + */ +@Getter +@ToString +@AllArgsConstructor +public class UserAnnouncementReadEvent { + + /** + * ID + */ + private final Long id; + + /** + * userId + */ + private final Long userId; + +} diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementNotifyInfoHandler.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementNotifyInfoHandler.java index 8e62765..f7b5f55 100644 --- a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementNotifyInfoHandler.java +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementNotifyInfoHandler.java @@ -29,7 +29,7 @@ public class AnnouncementNotifyInfoHandler // 向指定用户推送 for (Long userId : userIdList) { UserAnnouncement userAnnouncement = userAnnouncementService.prodUserAnnouncement - (userId, announcementNotifyInfo.getId(), announcementNotifyInfo.getState(), announcementNotifyInfo.getType(), + (userId, announcementNotifyInfo.getId(), announcementNotifyInfo.getState(), announcementNotifyInfo.getMessageType(), announcementNotifyInfo.getMessageKey(), announcementNotifyInfo.getTitle(), announcementNotifyInfo.getContent()); userAnnouncements.add(userAnnouncement); } @@ -40,10 +40,14 @@ public class AnnouncementNotifyInfoHandler protected AnnouncementPushMessage createMessage(AnnouncementNotifyInfo announcementNotifyInfo) { AnnouncementPushMessage message = new AnnouncementPushMessage(); message.setId(announcementNotifyInfo.getId()); + message.setState(announcementNotifyInfo.getState()); message.setTitle(announcementNotifyInfo.getTitle()); message.setContent(announcementNotifyInfo.getContent()); message.setImmortal(announcementNotifyInfo.getImmortal()); message.setDeadline(announcementNotifyInfo.getDeadline()); + message.setMessageKey(announcementNotifyInfo.getMessageKey()); + message.setCreateTime(announcementNotifyInfo.getCreateTime()); + message.setMessageType(announcementNotifyInfo.getMessageType()); return message; } diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementPushMessage.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementPushMessage.java index a205759..ff4784b 100644 --- a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementPushMessage.java +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/handler/impl/AnnouncementPushMessage.java @@ -35,15 +35,40 @@ public class AnnouncementPushMessage extends JsonWebSocketMessage { */ private String content; + /** + * 内容 + */ + private Integer state; + + /** * 永久有效的 * @see com.baiye.ballcat.common.core.constant.enums.BooleanEnum */ private Integer immortal; + + + + /** + * message + */ + private String messageKey; + + /** + * 消息类型 + */ + private Integer messageType; + /** * 截止日期 */ private LocalDateTime deadline; + + /** + * 拉取时间 + */ + private LocalDateTime createTime; + } diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/mapper/UserAnnouncementMapper.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/mapper/UserAnnouncementMapper.java index 663d67e..9f605f5 100644 --- a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/mapper/UserAnnouncementMapper.java +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/mapper/UserAnnouncementMapper.java @@ -26,8 +26,9 @@ public interface UserAnnouncementMapper extends ExtendMapper { /** * 分页查询 + * * @param pageParam 分页参数 - * @param qo 查询对象 + * @param qo 查询对象 * @return 分页结果数据 PageResult */ default PageResult queryPage(PageParam pageParam, UserAnnouncementQO qo) { @@ -36,8 +37,8 @@ public interface UserAnnouncementMapper extends ExtendMapper { if (StringUtils.isNotBlank(qo.getStartTime()) && StringUtils.isNotBlank(qo.getEndTime())) { wrapperX.between(UserAnnouncement::getCreateTime, qo.getStartTime(), qo.getEndTime()); } - wrapperX.eqIfPresent(UserAnnouncement::getId, qo.getId()).likeIfPresent(UserAnnouncement::getContent, qo.getContent()) - .orderByDesc(UserAnnouncement::getState).orderByAsc(UserAnnouncement::getId); + wrapperX.eqIfPresent(UserAnnouncement::getId, qo.getId()).eqIfPresent(UserAnnouncement::getUserId,qo.getUserId()).likeIfPresent + (UserAnnouncement::getContent, qo.getContent()).orderByAsc(UserAnnouncement::getState).orderByDesc(UserAnnouncement::getId); this.selectPage(page, wrapperX); IPage voPage = page.convert(UserAnnouncementConverter.INSTANCE::poToPageVo); return new PageResult<>(voPage.getRecords(), voPage.getTotal()); @@ -45,16 +46,31 @@ public interface UserAnnouncementMapper extends ExtendMapper { /** * 更新用户公共信息至已读状态 - * @param userId 用户ID + * + * @param userId 用户ID * @param announcementId 公告ID */ default void updateToReadState(Long userId, Long announcementId) { LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(UserAnnouncement::getState, UserAnnouncementStateEnum.READ.getValue()) - .set(UserAnnouncement::getReadTime, LocalDateTime.now()) - .eq(UserAnnouncement::getAnnouncementId, announcementId) - .eq(UserAnnouncement::getUserId, userId); + .set(UserAnnouncement::getState, UserAnnouncementStateEnum.READ.getValue()) + .set(UserAnnouncement::getReadTime, LocalDateTime.now()) + .eq(UserAnnouncement::getId, announcementId) + .eq(UserAnnouncement::getUserId, userId); this.update(null, wrapper); } + /** + * 更新用户公共信息至已读状态 + * + * @param userId 用户ID + * @param id 公告ID + */ + default void updateToReadStateByMessageKey(Long userId, Long id) { + LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() + .set(UserAnnouncement::getState, UserAnnouncementStateEnum.READ.getValue()) + .set(UserAnnouncement::getReadTime, LocalDateTime.now()) + .eq(UserAnnouncement::getMessageKey, id.toString()) + .eq(UserAnnouncement::getUserId, userId); + this.update(null, wrapper); + } } diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/UserAnnouncementService.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/UserAnnouncementService.java index 4da05f1..3e3926f 100644 --- a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/UserAnnouncementService.java +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/UserAnnouncementService.java @@ -44,4 +44,18 @@ public interface UserAnnouncementService extends ExtendService */ void readAnnouncement(Long userId, Long announcementId); + /** + * 查询未读数量 + * @param currentUserId + * @return + */ + Long queryNotReadNum(Long currentUserId); + + + /** + * 对用户公告进行已读标记 + * @param userId 用户id + * @param id 公告id + */ + void readAnnouncementByMessageKey(Long userId, Long id); } diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementEventListener.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementEventListener.java new file mode 100644 index 0000000..3c6940e --- /dev/null +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementEventListener.java @@ -0,0 +1,34 @@ +package com.baiye.notify.service.impl; + + +import com.baiye.notify.event.UserAnnouncementReadEvent; +import com.baiye.notify.service.UserAnnouncementService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +/** + * @author Hccake 2021/1/5 + * @version 1.0 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class UserAnnouncementEventListener { + + private final UserAnnouncementService userAnnouncementService; + + + /** + * 公告关闭事件监听 + * + * @param event the AnnouncementCloseEvent + */ + @Async + @EventListener(UserAnnouncementReadEvent.class) + public void read(UserAnnouncementReadEvent event) { + userAnnouncementService.readAnnouncementByMessageKey(event.getUserId(), event.getId()); + } +} diff --git a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementServiceImpl.java b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementServiceImpl.java index 0f03b41..101e0a3 100644 --- a/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementServiceImpl.java +++ b/ad-distribute-notify/distribute-notify-biz/src/main/java/com/baiye/notify/service/impl/UserAnnouncementServiceImpl.java @@ -10,6 +10,7 @@ import com.baiye.notify.model.entity.UserAnnouncement; import com.baiye.notify.model.qo.UserAnnouncementQO; import com.baiye.notify.model.vo.UserAnnouncementPageVO; import com.baiye.notify.service.UserAnnouncementService; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -49,11 +50,11 @@ public class UserAnnouncementServiceImpl extends ExtendServiceImpl> getUserAnnouncementPage(@Validated PageParam pageParam, UserAnnouncementQO userAnnouncementQO) { + userAnnouncementQO.setUserId(SecurityUtils.getCurrentUserId()); return R.ok(userAnnouncementService.queryPage(pageParam, userAnnouncementQO)); } - @PatchMapping("/read/{announcementId}") + + /** + * 查询未读数量 + * @return + */ + @GetMapping("/not/read/count") + @Operation(summary = "查询未读数量", description = "查询未读数量") + public R queryNotReadNum() { + Long currentUserId = SecurityUtils.getCurrentUserId(); + return R.ok(userAnnouncementService.queryNotReadNum(currentUserId)); + } + + + @GetMapping("/read/{announcementId}") // @PreAuthorize("@per.hasPermission('notify:userannouncement:read')") @Operation(summary = "用户公告已读上报", description = "用户公告已读上报") public R readAnnouncement(@PathVariable("announcementId") Long announcementId) { diff --git a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/domain/AnnouncementNotifyInfo.java b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/domain/AnnouncementNotifyInfo.java index b1350d6..8bbd234 100644 --- a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/domain/AnnouncementNotifyInfo.java +++ b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/domain/AnnouncementNotifyInfo.java @@ -2,6 +2,8 @@ package com.baiye.notify.model.domain; import com.baiye.notify.enums.NotifyChannelEnum; import com.baiye.notify.enums.NotifyRecipientFilterTypeEnum; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; @@ -23,6 +25,7 @@ public class AnnouncementNotifyInfo implements NotifyInfo { /** * ID */ + @TableId(type = IdType.INPUT) @Schema(title = "公告ID") private Long id; @@ -37,7 +40,7 @@ public class AnnouncementNotifyInfo implements NotifyInfo { * 公告类型 */ @Schema(title = "公告类型") - private Integer type; + private Integer messageType; /** diff --git a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/entity/UserAnnouncement.java b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/entity/UserAnnouncement.java index 66d32da..1b6fd14 100644 --- a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/entity/UserAnnouncement.java +++ b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/entity/UserAnnouncement.java @@ -44,7 +44,7 @@ public class UserAnnouncement implements Serializable { * 公告类型 */ @Schema(title = "公告类型") - private Integer type; + private Integer messageType; /** diff --git a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/qo/UserAnnouncementQO.java b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/qo/UserAnnouncementQO.java index 7e12339..cb44472 100644 --- a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/qo/UserAnnouncementQO.java +++ b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/qo/UserAnnouncementQO.java @@ -23,6 +23,13 @@ public class UserAnnouncementQO { @Parameter(description = "ID") private Long id; + /** + * ID + */ + @Parameter(description = "ID") + private Long userId; + + @Parameter(description = "创建人") private String content; diff --git a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/vo/UserAnnouncementPageVO.java b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/vo/UserAnnouncementPageVO.java index b6a6dda..8e80df2 100644 --- a/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/vo/UserAnnouncementPageVO.java +++ b/ad-distribute-notify/distribute-notify-model/src/main/java/com/baiye/notify/model/vo/UserAnnouncementPageVO.java @@ -51,8 +51,8 @@ public class UserAnnouncementPageVO implements Serializable { /** * 公告类型 */ - @Schema(title = "公告类型") - private Integer type; + @Schema(title = "消息类型") + private Integer messageType; /** * 标题 diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueController.java index e9f1c98..1d0d4f8 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueController.java +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueController.java @@ -7,12 +7,15 @@ import com.baiye.modules.distribute.entity.ClueEntity; import com.baiye.modules.distribute.qo.ClueQo; import com.baiye.modules.distribute.service.ClueService; import com.baiye.modules.distribute.vo.ClueVO; +import com.baiye.notify.event.UserAnnouncementReadEvent; import com.baiye.result.BaseResultCode; import com.baiye.result.R; +import com.baiye.security.util.SecurityUtils; import com.baiye.validation.group.UpdateGroup; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationContext; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -24,6 +27,8 @@ public class ClueController { private final ClueService clueService; + + private final ApplicationContext publisher; @GetMapping("/page") @Operation(summary = "分页查询资源") public R> getClueRecordPage(@Validated PageParam pageParam, ClueQo qo) { @@ -33,12 +38,15 @@ public class ClueController { @PostMapping("/update") @Operation(summary = "修改资源详细信息", description = "修改资源详细信息") public R update(@Validated({ UpdateGroup.class }) @RequestBody ClueDTO clueEntity) { + publisher.publishEvent(new UserAnnouncementReadEvent(clueEntity.getClueId(), SecurityUtils.getCurrentUserId())); return clueService.update(clueEntity) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败"); } @PostMapping("/updateClue") @Operation(summary = "修改资源", description = "修改资源") public R updateClue(@Validated({ UpdateGroup.class }) @RequestBody ClueEntity clueEntity) { + clueEntity.setIsNewClue(Boolean.FALSE); + publisher.publishEvent(new UserAnnouncementReadEvent(clueEntity.getClueId(), SecurityUtils.getCurrentUserId())); return clueService.updateById(clueEntity) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败"); } diff --git a/admin/src/main/java/com/baiye/modules/distribute/dto/ClueDTO.java b/admin/src/main/java/com/baiye/modules/distribute/dto/ClueDTO.java index 1108448..faa4831 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/dto/ClueDTO.java +++ b/admin/src/main/java/com/baiye/modules/distribute/dto/ClueDTO.java @@ -64,6 +64,11 @@ public class ClueDTO { @Schema(title = "创建者") private Long createBy; + @Schema(title = "资源线索ID") + private Boolean isNewClue; + + + @Schema(title = "资源标签集合") private List clueLabelList; diff --git a/admin/src/main/java/com/baiye/modules/distribute/entity/ClueEntity.java b/admin/src/main/java/com/baiye/modules/distribute/entity/ClueEntity.java index 2c2e5d3..42e86fb 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/entity/ClueEntity.java +++ b/admin/src/main/java/com/baiye/modules/distribute/entity/ClueEntity.java @@ -3,6 +3,7 @@ package com.baiye.modules.distribute.entity; import com.baiye.entity.LogicDeletedBaseEntity; import com.baiye.extend.mybatis.plus.alias.TableAlias; import com.baiye.validation.group.UpdateGroup; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; @@ -20,7 +21,7 @@ public class ClueEntity extends LogicDeletedBaseEntity { private static final long serialVersionUID = 1L; - @TableId + @TableId(type = IdType.INPUT) @Schema(title = "线索ID") @NotNull(message = "分发ID不能为空", groups = { UpdateGroup.class }) private Long clueId; @@ -57,6 +58,10 @@ public class ClueEntity extends LogicDeletedBaseEntity { @Schema(title = "资源线索ID") private Long clueStageId; + + @Schema(title = "资源线索ID") + private Boolean isNewClue; + @Schema(title = "资源线索名称") private String clueStageName; diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueServiceImpl.java index b9f0faa..f903464 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueServiceImpl.java @@ -2,10 +2,13 @@ package com.baiye.modules.distribute.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.IdUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; +import com.baiye.constant.DefaultNumberConstants; import com.baiye.domain.PageParam; import com.baiye.domain.PageResult; +import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.modules.distribute.converter.ClueConverter; import com.baiye.modules.distribute.dto.ClueDTO; import com.baiye.modules.distribute.entity.*; @@ -16,10 +19,11 @@ import com.baiye.modules.distribute.service.ClueService; import com.baiye.modules.distribute.service.ClueStageService; import com.baiye.modules.distribute.service.LabelOrganizeService; import com.baiye.modules.distribute.vo.ClueVO; +import com.baiye.notify.event.StationNotifyPushEvent; +import com.baiye.notify.model.domain.AnnouncementNotifyInfo; import com.baiye.security.util.SecurityUtils; import com.baiye.util.AESUtils; import com.baiye.util.MobileUtil; -import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.RequiredArgsConstructor; @@ -27,10 +31,15 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.ballcat.security.properties.SecurityProperties; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @Slf4j @@ -46,6 +55,15 @@ public class ClueServiceImpl extends ExtendServiceImpl i private final SecurityProperties securityProperties; + private final ApplicationContext publisher; + + + @Value("${snowflake.workerId}") + private int workerId; + + @Value("${snowflake.datacenterId}") + private int datacenterId; + @Override @Transactional(rollbackFor = Exception.class) public void clueFileUploadSaveAll(List clues) { @@ -59,15 +77,16 @@ public class ClueServiceImpl extends ExtendServiceImpl i if (!bool) { failClueList.add(clue); } + clue.setIsNewClue(Boolean.TRUE); clue.setNid(AESUtils.encrypt(clue.getNid(), securityProperties.getPasswordSecretKey())); } // 去除手机号不符合条件的资源-插入数据 clues = clues.stream() - .filter(item -> !failClueList.stream() - .map(ClueEntity::getNid) - .collect(Collectors.toList()) - .contains(item.getNid())) - .collect(Collectors.toList()); + .filter(item -> !failClueList.stream() + .map(ClueEntity::getNid) + .collect(Collectors.toList()) + .contains(item.getNid())) + .collect(Collectors.toList()); if (CollUtil.isNotEmpty(clues)) baseMapper.insertBatchSomeColumn(clues); @@ -103,8 +122,7 @@ public class ClueServiceImpl extends ExtendServiceImpl i // StringBuilder stringBuilder = new StringBuilder(decryptNid); // String nid = stringBuilder.replace(3, 7, "****").toString(); record.setNid(decryptNid); - } - else { + } else { record.setNid(""); } // 转换标签 @@ -122,19 +140,19 @@ public class ClueServiceImpl extends ExtendServiceImpl i @Override public boolean update(ClueDTO clueDTO) { ClueEntity clueEntity = ClueConverter.INSTANCE.dtoToPo(clueDTO); + clueEntity.setIsNewClue(Boolean.FALSE); // 修改标签 List clueLabelList = clueDTO.getClueLabelList(); if (CollUtil.isNotEmpty(clueLabelList)) { String result = clueLabelList.stream() - .map(LabelEntity::getId) - .map(Object::toString) - .collect(Collectors.joining(",")); + .map(LabelEntity::getId) + .map(Object::toString) + .collect(Collectors.joining(",")); clueEntity.setClueLabel(result); List nameList = clueLabelList.stream().map(LabelEntity::getLabelName).collect(Collectors.toList()); clueEntity.setClueLabelName(JSONUtil.toJsonStr(nameList)); - } - else { + } else { // 修改标签为空 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(ClueEntity::getClueId, clueDTO.getClueId()); @@ -154,7 +172,7 @@ public class ClueServiceImpl extends ExtendServiceImpl i ClueEntity clueEntity = baseMapper.selectById(clueId); clueEntity.setNid(AESUtils.decrypt(clueEntity.getNid(), securityProperties.getPasswordSecretKey())); BeanUtils.copyProperties(clueEntity, clueVO); - + clueVO.setClueId(clueEntity.getClueId().toString()); Long whichUserId = SecurityUtils.getWhichUserId(); // 查询上级用户标签 List organizeEntities = labelOrganizeService.queryUserList(whichUserId); @@ -166,9 +184,25 @@ public class ClueServiceImpl extends ExtendServiceImpl i return clueVO; } + + @Override public Boolean saveClueListByStoreInfo(List list) { List entityList = Convert.toList(ClueEntity.class, list); + AnnouncementNotifyInfo notifyInfo; + for (ClueDTO dto : list) { + // 雪花算法id + Long id = IdUtil.getSnowflake(workerId, datacenterId).nextId(); + notifyInfo = new AnnouncementNotifyInfo(); + notifyInfo.setId(id); + notifyInfo.setTitle("新消息通知"); + notifyInfo.setMessageKey(dto.getClueId().toString()); + notifyInfo.setContent("您有一条新线索请及时查收!"); + notifyInfo.setCreateTime(LocalDateTime.now()); + notifyInfo.setState(DefaultNumberConstants.ZERO_NUMBER); + notifyInfo.setMessageType(DefaultNumberConstants.ONE_NUMBER); + publisher.publishEvent(new StationNotifyPushEvent(notifyInfo, Collections.singletonList(dto.getAssignedBy()))); + } return SqlHelper.retBool(baseMapper.insertBatchSomeColumn(entityList)); } diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomServiceImpl.java index 3b314d4..ccd7914 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomServiceImpl.java @@ -3,6 +3,7 @@ package com.baiye.modules.distribute.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.StrPool; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baiye.domain.PageParam; import com.baiye.domain.PageResult; @@ -38,6 +39,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.ballcat.security.properties.SecurityProperties; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -66,6 +68,13 @@ public class CustomServiceImpl extends ExtendServiceImpl queryPage(PageParam pageParam, CustomQo qo) { PageResult customVOPageResult = baseMapper.queryPage(pageParam, qo); @@ -179,14 +188,16 @@ public class CustomServiceImpl extends ExtendServiceImpl customStores = customStoreService.selectListByCustomId(id); if (CollUtil.isNotEmpty(customStores)) { for (CustomStoreEntity store : customStores) { + // 雪花算法id + Long clueId = IdUtil.getSnowflake(workerId, datacenterId).nextId(); StoreUserDTO entity = storeUserService.findUserIdByStoreId(store.getStoreId()); if (ObjectUtil.isNotNull(entity) && ObjectUtil.isNotNull(entity.getUserId())) { // 扣减余额 Boolean result = sysUserService.deductionQuantity(entity.getUserId(), entity.getStoreName()); if (Boolean.TRUE.equals(result)) { - ClueDTO clueDTO = ClueDTO.builder().originName(ClueSourceEnum.STORE_DISTRIBUTION.getDescription()).remark + ClueDTO clueDTO = ClueDTO.builder().originName(ClueSourceEnum.STORE_DISTRIBUTION.getDescription()).clueId(clueId).remark (customEntity.getRemark()).nid(AESUtils.encrypt(customEntity.getCustomNid(), securityProperties.getPasswordSecretKey())).assignedBy - (entity.getUserId()).createBy(customEntity.getCompanyId()).assignedName(store.getStoreName()).otherClue(otherClue).build(); + (entity.getUserId()).createBy(customEntity.getCompanyId()).assignedName(store.getStoreName()).otherClue(otherClue).isNewClue(Boolean.TRUE).build(); list.add(clueDTO); } } diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomStoreServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomStoreServiceImpl.java index 4f19dcd..92aa47f 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomStoreServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/CustomStoreServiceImpl.java @@ -2,7 +2,6 @@ package com.baiye.modules.distribute.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; -import com.baiye.exception.BadRequestException; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import com.baiye.modules.distribute.entity.CustomStoreEntity; import com.baiye.modules.distribute.mapper.CustomStoreMapper; @@ -14,10 +13,9 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; - -import java.util.List; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; diff --git a/admin/src/main/java/com/baiye/modules/distribute/vo/ClueVO.java b/admin/src/main/java/com/baiye/modules/distribute/vo/ClueVO.java index 9fcb069..6ecc296 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/vo/ClueVO.java +++ b/admin/src/main/java/com/baiye/modules/distribute/vo/ClueVO.java @@ -12,7 +12,7 @@ import java.util.List; public class ClueVO { @Schema(title = "线索ID") - private Long clueId; + private String clueId; @Schema(title = "线索来源") private String originName; @@ -56,6 +56,9 @@ public class ClueVO { @Schema(title = "资源标签集合") private List clueLabelList; + @Schema(title = "资源线索ID") + private Boolean isNewClue; + @Schema(title = "标签组-标签信息") List organizeEntities; diff --git a/admin/src/main/resources/mapper/ClueMapper.xml b/admin/src/main/resources/mapper/ClueMapper.xml index 28ac8cb..37289fd 100644 --- a/admin/src/main/resources/mapper/ClueMapper.xml +++ b/admin/src/main/resources/mapper/ClueMapper.xml @@ -3,6 +3,7 @@ ce.clue_id, + ce.is_new_clue, ce.origin_name, ce.nid, ce.clue_time, @@ -43,4 +44,4 @@ tb_clue ce ${ew.customSqlSegment} - \ No newline at end of file +