From 1817b9b693a773791f1f38c331bc543d74846d89 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Tue, 16 Jul 2024 16:50:53 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=BA=93=E5=AD=98=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E5=92=8C=E5=91=86=E6=96=99=E9=A2=84=E8=AD=A6=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/listen/EarlyEventListener.java | 13 ++ .../tasks/AutoDeferralNotice.java | 13 ++ .../notice/SysNoticeController.java | 86 ++++++++ .../service/notice/ISysNoticeService.java | 94 +++++++++ .../service/notice/dao/SysNotice.java | 52 +++++ .../notice/dao/mapper/SysNoticeMapper.java | 13 ++ .../notice/dao/mapper/SysNoticeMapper.xml | 5 + .../service/notice/dto/SysNoticeDto.java | 54 +++++ .../service/notice/dto/SysNoticeQuery.java | 13 ++ .../service/notice/enums/NoticeEnum.java | 37 ++++ .../service/notice/enums/NoticeTypeEnum.java | 29 +++ .../notice/impl/SysNoticeServiceImpl.java | 189 ++++++++++++++++++ 12 files changed, 598 insertions(+) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/controller/notice/SysNoticeController.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/ISysNoticeService.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/SysNotice.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.xml create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeDto.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeQuery.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeEnum.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeTypeEnum.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/impl/SysNoticeServiceImpl.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java index feaaed2c..b448bdda 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.publish.AbstraceListener; import org.nl.common.utils.IdUtil; +import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; +import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.early_manage.service.early_dtl.IAlmEarlyDtlService; import org.nl.wms.early_manage.service.early_dtl.dao.AlmEarlyDtl; import org.nl.wms.early_manage.service.early_inv.IAlmEarlyInvService; @@ -14,6 +16,8 @@ import org.nl.wms.early_manage.service.early_msg.IAlmEarlyMsgService; import org.nl.wms.early_manage.service.early_msg.dao.AlmEarlyMsg; import org.nl.wms.early_manage.service.event.EarlyEvent; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.system_manage.service.notice.ISysNoticeService; +import org.nl.wms.system_manage.service.notice.enums.NoticeTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,6 +39,10 @@ public class EarlyEventListener extends AbstraceListener { private IAlmEarlyDtlService almEarlyDtlService; @Autowired private IMdPbVehicleMaterService mdPbVehicleMaterService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private IMdMeMaterialbaseService materialbaseService; @Override protected String doEvent(EarlyEvent event) { @@ -62,6 +70,11 @@ public class EarlyEventListener extends AbstraceListener { almEarlyMsg.setEarly_type("1"); almEarlyMsg.setStor_code(earlyInv.getStor_code()); almEarlyMsgService.save(almEarlyMsg); + MdMeMaterialbase materialbase = materialbaseService.getById(material_id); + String msg = "仓库: " + earlyInv.getStor_code() + ", 物料: " + materialbase.getMaterial_code() + ", 超过其最大库存量 " + safety_max_qty + + "或小于其最新库存量 " + safety_min_qty; + noticeService.createNotice(msg, "库存预警", + NoticeTypeEnum.NOTIFICATION.getCode()); //根据notice_type下发通知 System.out.println("下发通知"); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java index 47a519a3..ac12942a 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/tasks/AutoDeferralNotice.java @@ -3,6 +3,8 @@ package org.nl.wms.early_manage.tasks; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.utils.IdUtil; +import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; +import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; import org.nl.wms.early_manage.notification.NotificationFactory; @@ -12,6 +14,8 @@ import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferral; import org.nl.wms.early_manage.service.early_deferral.dao.AlmEarlyDeferralDetail; import org.nl.wms.early_manage.service.early_msg.IAlmEarlyMsgService; import org.nl.wms.early_manage.service.early_msg.dao.AlmEarlyMsg; +import org.nl.wms.system_manage.service.notice.ISysNoticeService; +import org.nl.wms.system_manage.service.notice.enums.NoticeTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -34,6 +38,10 @@ public class AutoDeferralNotice { private IMdPbVehicleMaterService mdPbVehicleMaterService; @Autowired private IAlmEarlyMsgService almEarlyMsgService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private IMdMeMaterialbaseService materialbaseService; public void run() { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -67,6 +75,11 @@ public class AutoDeferralNotice { almEarlyMsg.setVehicle_code(filteredMdPbVehicleMater.getVehicle_code()); almEarlyMsg.setPcsn(filteredMdPbVehicleMater.getPcsn()); almEarlyMsgService.save(almEarlyMsg); + MdMeMaterialbase materialbase = materialbaseService.getById(filteredMdPbVehicleMater.getMaterial_id()); + String msg = "仓库: " + almEarlyDeferral.getStor_code() + ", 物料: " + materialbase.getMaterial_code() + + ", 在仓库呆料时间已超过 " + almEarlyDeferral.getStay_days() + "天"; + noticeService.createNotice(msg, "呆料预警", + NoticeTypeEnum.NOTIFICATION.getCode()); NotificationFactory.getNotification(almEarlyDeferral.getNotice_type()).send(""); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/controller/notice/SysNoticeController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/controller/notice/SysNoticeController.java new file mode 100644 index 00000000..a25e6c42 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/controller/notice/SysNoticeController.java @@ -0,0 +1,86 @@ +package org.nl.wms.system_manage.controller.notice; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.system_manage.service.notice.ISysNoticeService; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; + +/** + * @author lyd + * @date 2023-05-09 + **/ +@Slf4j +@RestController + +@RequestMapping("/api/notice") +public class SysNoticeController { + + @Autowired + private ISysNoticeService noticeService; + + @GetMapping + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(noticeService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping + public ResponseEntity create(@Validated @RequestBody SysNotice entity) { + noticeService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + public ResponseEntity update(@Validated @RequestBody SysNotice entity) { + noticeService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + noticeService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/countByReceiveNotRead") + public ResponseEntity countByReceiveNotRead() { + return new ResponseEntity<>(noticeService.countByReceiveNotRead(), HttpStatus.OK); + } + + @GetMapping("/pageByReceive") + public ResponseEntity pageByReceive() { + return new ResponseEntity<>(noticeService.pageByReceive(), HttpStatus.OK); + } + + @PostMapping("/read") + public ResponseEntity read(@RequestBody String id) { + noticeService.read(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/findById") + public ResponseEntity findById(@RequestBody String id) { + return new ResponseEntity<>(noticeService.getById(id), HttpStatus.OK); + } + + @PostMapping("/deal") + public ResponseEntity deal(@RequestBody String id) { + noticeService.deal(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/changeRead") + public ResponseEntity changeRead(@RequestBody JSONObject jsonObject) { + noticeService.changeRead(jsonObject); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/ISysNoticeService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/ISysNoticeService.java new file mode 100644 index 00000000..b4760118 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/ISysNoticeService.java @@ -0,0 +1,94 @@ +package org.nl.wms.system_manage.service.notice; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author lyd + * @description 服务接口 + * @date 2023-05-09 + **/ +public interface ISysNoticeService extends IService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * + * @param entity / + */ + void create(SysNotice entity); + + /** + * 编辑 + * + * @param entity / + */ + void update(SysNotice entity); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 获取未读的接收消息条数 + * + * @return + */ + Integer countByReceiveNotRead(); + + /** + * 获取不同类型的前三条信息 + * + * @return + */ + LinkedList> pageByReceive(); + + /** + * 标记已读 + * + * @param id + */ + void read(String id); + + /** + * 处理信息 + * + * @param id + */ + void deal(String id); + + /** + * 批量已读 + * + * @param jsonObject + */ + void changeRead(JSONObject jsonObject); + + /** + * 写入信息 + * + * @param msg: 数据信息 + * @param title: 唯一 + * @param type: 类型 + */ + void createNotice(String msg, String title, String type); +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/SysNotice.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/SysNotice.java new file mode 100644 index 00000000..c36818b3 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/SysNotice.java @@ -0,0 +1,52 @@ +package org.nl.wms.system_manage.service.notice.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author lyd + * @description / + * @date 2023-05-09 + **/ +@Data +@Builder +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@TableName("sys_notice") +public class SysNotice implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "notice_id", type = IdType.NONE) + + private String notice_id; + + + private String notice_title; + + + private String notice_content; + + + private String notice_type; + + + private String have_read; + + + private String read_time; + + + private String deal_status; + + + private String create_time; + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.java new file mode 100644 index 00000000..98803d28 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.java @@ -0,0 +1,13 @@ +package org.nl.wms.system_manage.service.notice.dao.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; + +/** + * @author lyd + * @date 2023-05-09 + **/ +public interface SysNoticeMapper extends BaseMapper { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.xml new file mode 100644 index 00000000..c5d4aab8 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dao/mapper/SysNoticeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeDto.java new file mode 100644 index 00000000..aa17ac8e --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeDto.java @@ -0,0 +1,54 @@ +package org.nl.wms.system_manage.service.notice.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author lyd + * @description / + * @date 2023-05-09 + **/ +@Data +public class SysNoticeDto implements Serializable { + + /** + * 信息标识 + */ + private String notice_id; + + /** + * 信息标题 + */ + private String notice_title; + + /** + * 信息内容 + */ + private String notice_content; + + /** + * 信息类型 + */ + private String notice_type; + + /** + * 读取状态 + */ + private String have_read; + + /** + * 读取时间 + */ + private String read_time; + + /** + * 处理状态 + */ + private String deal_status; + + /** + * 创建时间 + */ + private String create_time; +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeQuery.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeQuery.java new file mode 100644 index 00000000..d959da46 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/dto/SysNoticeQuery.java @@ -0,0 +1,13 @@ +package org.nl.wms.system_manage.service.notice.dto; + + +import org.nl.common.domain.entity.BaseQuery; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; + +/** + * @author lyd + * @date 2023-05-09 + **/ +public class SysNoticeQuery extends BaseQuery { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeEnum.java new file mode 100644 index 00000000..3c453081 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeEnum.java @@ -0,0 +1,37 @@ +package org.nl.wms.system_manage.service.notice.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/5/9 + */ +@Getter +@AllArgsConstructor +public enum NoticeEnum { + /** + * 未读 + */ + HAVE_READ_OFF("1", "未读"), + /** + * 已读 + */ + HAVE_READ_ON("2", "已读"), + /** + * 未处理 + */ + DEAL_STATUS_NO("1", "未处理"), + /** + * 已处理 + */ + DEAL_STATUS_YES("2", "已处理"), + /** + * 无需处理 + */ + DEAL_STATUS_NO_NEED("3", "无需处理"); + + private final String value; + private final String desc; +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeTypeEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeTypeEnum.java new file mode 100644 index 00000000..6fe29443 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/enums/NoticeTypeEnum.java @@ -0,0 +1,29 @@ +package org.nl.wms.system_manage.service.notice.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 通知类型枚举 + * @Date: 2023/6/15 + */ +@Getter +@AllArgsConstructor +public enum NoticeTypeEnum { + /** + * 异常 + */ + EXCEPTION("1", "异常"), + /** + * 警告 + */ + WARN("2", "警告"), + /** + * 通知 + */ + NOTIFICATION("3", "通知"); + + private final String code; + private final String name; +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/impl/SysNoticeServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/impl/SysNoticeServiceImpl.java new file mode 100644 index 00000000..8dacb896 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/notice/impl/SysNoticeServiceImpl.java @@ -0,0 +1,189 @@ +package org.nl.wms.system_manage.service.notice.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.entity.PageQuery; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.websocket.MsgType; +import org.nl.common.websocket.SocketMsg; +import org.nl.common.websocket.WebSocketServer; +import org.nl.wms.system_manage.service.dict.dao.Dict; +import org.nl.wms.system_manage.service.dict.dao.mapper.SysDictMapper; +import org.nl.wms.system_manage.service.notice.ISysNoticeService; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; +import org.nl.wms.system_manage.service.notice.dao.mapper.SysNoticeMapper; +import org.nl.wms.system_manage.service.notice.enums.NoticeEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author lyd + * @description 服务实现 + * @date 2023-05-09 + **/ +@Slf4j +@Service +public class SysNoticeServiceImpl extends ServiceImpl implements ISysNoticeService { + + @Autowired + private SysNoticeMapper sysNoticeMapper; + + @Autowired + private SysDictMapper dictMapper; + + @Resource + private WebSocketServer webSocketServer; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String notice_title = ObjectUtil.isNotEmpty(whereJson.get("notice_title")) + ? whereJson.get("notice_title").toString() : null; + String notice_type = ObjectUtil.isNotEmpty(whereJson.get("notice_type")) + ? whereJson.get("notice_type").toString() : null; + String have_read = ObjectUtil.isNotEmpty(whereJson.get("have_read")) + ? whereJson.get("have_read").toString() : null; + String deal_status = ObjectUtil.isNotEmpty(whereJson.get("deal_status")) + ? whereJson.get("deal_status").toString() : null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(notice_title), SysNotice::getNotice_title, notice_title) + .eq(ObjectUtil.isNotEmpty(notice_type), SysNotice::getNotice_type, notice_type) + .eq(ObjectUtil.isNotEmpty(have_read), SysNotice::getHave_read, have_read) + .eq(ObjectUtil.isNotEmpty(deal_status), SysNotice::getDeal_status, deal_status) + .orderByAsc(SysNotice::getHave_read) + .orderByDesc(SysNotice::getCreate_time); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + sysNoticeMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SysNotice entity) { + String now = DateUtil.now(); + + entity.setNotice_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + entity.setCreate_time(now); + sysNoticeMapper.insert(entity); + } + + @Override + public void update(SysNotice entity) { + SysNotice dto = sysNoticeMapper.selectById(entity.getNotice_id()); + if (dto == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + sysNoticeMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + sysNoticeMapper.deleteBatchIds(ids); + } + + @Override + public Integer countByReceiveNotRead() { + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper() + .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue())); + return ObjectUtil.isNotEmpty(sysNotices) ? sysNotices.size() : 0; + } + + @Override + public LinkedList> pageByReceive() { + LinkedList> result = new LinkedList<>(); + List dictList = dictMapper.selectList(new LambdaQueryWrapper() + .eq(Dict::getCode, "notice_type") + .orderByAsc(Dict::getDict_sort)); + dictList.forEach(dict -> { + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper() + .eq(SysNotice::getNotice_type, dict.getValue()) + .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue()) + .orderByDesc(SysNotice::getCreate_time) + .last("LIMIT 0,3")); + result.add(sysNotices); + }); + return result; + } + + @Override + public void read(String id) { + SysNotice notice = this.getById(id); + if (ObjectUtil.isEmpty(notice)) { + throw new BadRequestException("该信息不存在!"); + } + notice.setHave_read(NoticeEnum.HAVE_READ_ON.getValue()); + notice.setRead_time(DateUtil.now()); + sysNoticeMapper.updateById(notice); + } + + @Override + public void deal(String id) { + SysNotice notice = this.getById(id); + if (ObjectUtil.isEmpty(notice)) { + throw new BadRequestException("该信息不存在!"); + } + // 设置处理 + notice.setDeal_status(NoticeEnum.DEAL_STATUS_YES.getValue()); + // 判断是否读取 + if (notice.getHave_read().equals(NoticeEnum.HAVE_READ_OFF.getValue())) { + // 标记已读并设置读取时间 + notice.setHave_read(NoticeEnum.HAVE_READ_ON.getValue()); + notice.setRead_time(DateUtil.now()); + } + sysNoticeMapper.updateById(notice); + } + + @Override + public void changeRead(JSONObject jsonObject) { + JSONArray data = jsonObject.getJSONArray("data"); + String haveRead = jsonObject.getString("have_read"); + List sysNotices = JSON.parseArray(data.toJSONString(), SysNotice.class); + sysNotices.forEach(sysNotice -> sysNotice.setHave_read(haveRead)); + this.updateBatchById(sysNotices); + } + + @Override + public void createNotice(String msg, String title, String type) { + List sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper() + .eq(SysNotice::getNotice_title, title) + .eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue())); + SysNotice noticeDto = SysNotice.builder() + .notice_id(IdUtil.getSnowflake(1, 1).nextIdStr()) + .notice_type(type) + .notice_title(title) + .notice_content(msg) + .deal_status(NoticeEnum.DEAL_STATUS_NO.getValue()) + .have_read(NoticeEnum.HAVE_READ_OFF.getValue()) + .create_time(DateUtil.now()) + .build(); + if (ObjectUtil.isNotEmpty(sysNotices)) { + noticeDto.setNotice_id(sysNotices.get(0).getNotice_id()); + } + // 插入/修改 + this.saveOrUpdate(noticeDto); + JSONObject res = new JSONObject(); + res.put("data", "notice_message_update"); + SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO); + try { + WebSocketServer.sendInfo(messageInfo, "messageInfo"); + } catch (IOException e) { + throw new BadRequestException("消息发送失败"); + } + } + +}