Browse Source

Merge remote-tracking branch 'origin/dev' into dev

caozj 1 year ago
parent
commit
81d6d928cb

+ 11 - 3
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -24,11 +24,13 @@ import com.fjhx.account.service.account.AccountRunningWaterService;
 import com.fjhx.account.service.tax.TaxRefundDetailsService;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.entity.corporation.po.Corporation;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.common.utils.ExchangeRateUtil;
 import com.fjhx.item.util.excel.util.ExcelUtil;
-import com.fjhx.socket.service.WebSocketServer;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
@@ -249,8 +251,14 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
 
         String msg = "{} - {}账户有一笔新的到账(金额:{} {}),请相应业务员进行认领。";
 
-        WebSocketServer.sendInfoGroup(0, StrUtil.format(
-                msg, corporation.getName(), accountManagement.getName(), dto.getCurrency(), dto.getAmount()));
+        // WebSocketServer.sendInfoGroup(0, StrUtil.format(
+        //         msg, corporation.getName(), accountManagement.getName(), dto.getCurrency(), dto.getAmount()));
+
+        WebSocketPush.byTenant(
+                PushTypeEnum.PUSH_NOTIFICATION,
+                StrUtil.format(msg, corporation.getName(), accountManagement.getName(), dto.getCurrency(), dto.getAmount()),
+                PushBusinessTypeEnum.TO_THE_ACCOUNT.getType()
+        );
 
     }
 

+ 79 - 79
hx-common/src/main/java/com/fjhx/common/controller/send/SendMegController.java

@@ -1,79 +1,79 @@
-package com.fjhx.common.controller.send;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.common.entity.send.dto.SendMegDto;
-import com.fjhx.common.entity.send.dto.SendMegSelectDto;
-import com.fjhx.common.entity.send.vo.SendMegVo;
-import com.fjhx.common.service.send.SendMegService;
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-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;
-
-
-/**
- * <p>
- * 前端控制器
- * </p>
- *
- * @author
- * @since 2023-05-22
- */
-@EnableScheduling
-@RestController
-@RequestMapping("/sendMeg")
-public class SendMegController {
-
-    @Autowired
-    private SendMegService sendMegService;
-
-    /**
-     * 分页
-     */
-    @PostMapping("/page")
-    public Page<SendMegVo> page(@RequestBody SendMegSelectDto dto) {
-        return sendMegService.getPage(dto);
-    }
-
-    /**
-     * 明细
-     */
-    @PostMapping("/detail")
-    public SendMegVo detail(@RequestBody BaseSelectDto dto) {
-        return sendMegService.detail(dto.getId());
-    }
-
-    /**
-     * 新增
-     */
-    @PostMapping("/add")
-    public void add(@RequestBody SendMegDto sendMegDto) {
-        sendMegService.add(sendMegDto);
-    }
-
-    /**
-     * 编辑
-     */
-    @PostMapping("/edit")
-    public void edit(@RequestBody SendMegDto sendMegDto) {
-        sendMegService.edit(sendMegDto);
-    }
-
-    /**
-     * 删除
-     */
-    @PostMapping("/delete")
-    public void delete(@RequestBody BaseSelectDto dto) {
-        sendMegService.delete(dto.getId());
-    }
-
-    @Scheduled(cron = "0 0/1 *  * * ? ")   // 每1分钟执行一次
-    public void execute() {
-        sendMegService.executeSend();
-    }
-
-}
+// package com.fjhx.common.controller.send;
+//
+// import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// import com.fjhx.common.entity.send.dto.SendMegDto;
+// import com.fjhx.common.entity.send.dto.SendMegSelectDto;
+// import com.fjhx.common.entity.send.vo.SendMegVo;
+// import com.fjhx.common.service.send.SendMegService;
+// import com.ruoyi.common.core.domain.BaseSelectDto;
+// import org.springframework.beans.factory.annotation.Autowired;
+// import org.springframework.scheduling.annotation.EnableScheduling;
+// import org.springframework.scheduling.annotation.Scheduled;
+// 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;
+//
+//
+// /**
+//  * <p>
+//  * 前端控制器
+//  * </p>
+//  *
+//  * @author
+//  * @since 2023-05-22
+//  */
+// @EnableScheduling
+// @RestController
+// @RequestMapping("/sendMeg")
+// public class SendMegController {
+//
+//     @Autowired
+//     private SendMegService sendMegService;
+//
+//     /**
+//      * 分页
+//      */
+//     @PostMapping("/page")
+//     public Page<SendMegVo> page(@RequestBody SendMegSelectDto dto) {
+//         return sendMegService.getPage(dto);
+//     }
+//
+//     /**
+//      * 明细
+//      */
+//     @PostMapping("/detail")
+//     public SendMegVo detail(@RequestBody BaseSelectDto dto) {
+//         return sendMegService.detail(dto.getId());
+//     }
+//
+//     /**
+//      * 新增
+//      */
+//     @PostMapping("/add")
+//     public void add(@RequestBody SendMegDto sendMegDto) {
+//         sendMegService.add(sendMegDto);
+//     }
+//
+//     /**
+//      * 编辑
+//      */
+//     @PostMapping("/edit")
+//     public void edit(@RequestBody SendMegDto sendMegDto) {
+//         sendMegService.edit(sendMegDto);
+//     }
+//
+//     /**
+//      * 删除
+//      */
+//     @PostMapping("/delete")
+//     public void delete(@RequestBody BaseSelectDto dto) {
+//         sendMegService.delete(dto.getId());
+//     }
+//
+//     @Scheduled(cron = "0 0/1 *  * * ? ")   // 每1分钟执行一次
+//     public void execute() {
+//         sendMegService.executeSend();
+//     }
+//
+// }

+ 36 - 0
hx-common/src/main/java/com/fjhx/common/enums/PushBusinessTypeEnum.java

@@ -0,0 +1,36 @@
+package com.fjhx.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum PushBusinessTypeEnum {
+    /**
+     * 未读日报
+     */
+    UNREAD_DAILY(1),
+    /**
+     * 发布日志
+     */
+    RELEASE_LOG(2),
+    /**
+     * 分享日报
+     */
+    SHARE_DAILY(3),
+    /**
+     * 日程提醒
+     */
+    SCHEDULE_REMINDER(4),
+    /**
+     * 到账
+     */
+    TO_THE_ACCOUNT(5),
+    /**
+     * 异常处理
+     */
+    EXCEPTION_HANDLING(6);
+
+    private final int type;
+
+}

+ 26 - 26
hx-common/src/main/java/com/fjhx/common/mapper/send/SendMegMapper.java

@@ -1,26 +1,26 @@
-package com.fjhx.common.mapper.send;
-
-import com.fjhx.common.entity.send.po.SendMeg;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.common.entity.send.vo.SendMegVo;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import org.apache.ibatis.annotations.Param;
-
-
-/**
- * <p>
- *  Mapper 接口
- * </p>
- *
- * @author 
- * @since 2023-05-22
- */
-public interface SendMegMapper extends BaseMapper<SendMeg> {
-
-    /**
-     * 分页
-     */
-    Page<SendMegVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SendMeg> wrapper);
-
-}
+// package com.fjhx.common.mapper.send;
+//
+// import com.fjhx.common.entity.send.po.SendMeg;
+// import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+// import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// import com.fjhx.common.entity.send.vo.SendMegVo;
+// import com.ruoyi.common.utils.wrapper.IWrapper;
+// import org.apache.ibatis.annotations.Param;
+//
+//
+// /**
+//  * <p>
+//  *  Mapper 接口
+//  * </p>
+//  *
+//  * @author
+//  * @since 2023-05-22
+//  */
+// public interface SendMegMapper extends BaseMapper<SendMeg> {
+//
+//     /**
+//      * 分页
+//      */
+//     Page<SendMegVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SendMeg> wrapper);
+//
+// }

+ 55 - 55
hx-common/src/main/java/com/fjhx/common/service/send/SendMegService.java

@@ -1,55 +1,55 @@
-package com.fjhx.common.service.send;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.common.entity.send.dto.SendMegDto;
-import com.fjhx.common.entity.send.dto.SendMegSelectDto;
-import com.fjhx.common.entity.send.po.SendMeg;
-import com.fjhx.common.entity.send.vo.SendMegVo;
-import com.ruoyi.common.core.service.BaseService;
-
-
-/**
- * <p>
- * 服务类
- * </p>
- *
- * @author
- * @since 2023-05-22
- */
-public interface SendMegService extends BaseService<SendMeg> {
-
-    /**
-     * 分页
-     */
-    Page<SendMegVo> getPage(SendMegSelectDto dto);
-
-    /**
-     * 明细
-     */
-    SendMegVo detail(Long id);
-
-    /**
-     * 新增
-     */
-    void add(SendMegDto sendMegDto);
-
-    /**
-     * 编辑
-     */
-    void edit(SendMegDto sendMegDto);
-
-    /**
-     * 删除
-     */
-    void delete(Long id);
-
-    /**
-     * 推送数据
-     */
-    void send(SendMeg sendMeg);
-
-
-    void executeSend();
-
-
-}
+// package com.fjhx.common.service.send;
+//
+// import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// import com.fjhx.common.entity.send.dto.SendMegDto;
+// import com.fjhx.common.entity.send.dto.SendMegSelectDto;
+// import com.fjhx.common.entity.send.po.SendMeg;
+// import com.fjhx.common.entity.send.vo.SendMegVo;
+// import com.ruoyi.common.core.service.BaseService;
+//
+//
+// /**
+//  * <p>
+//  * 服务类
+//  * </p>
+//  *
+//  * @author
+//  * @since 2023-05-22
+//  */
+// public interface SendMegService extends BaseService<SendMeg> {
+//
+//     /**
+//      * 分页
+//      */
+//     Page<SendMegVo> getPage(SendMegSelectDto dto);
+//
+//     /**
+//      * 明细
+//      */
+//     SendMegVo detail(Long id);
+//
+//     /**
+//      * 新增
+//      */
+//     void add(SendMegDto sendMegDto);
+//
+//     /**
+//      * 编辑
+//      */
+//     void edit(SendMegDto sendMegDto);
+//
+//     /**
+//      * 删除
+//      */
+//     void delete(Long id);
+//
+//     /**
+//      * 推送数据
+//      */
+//     void send(SendMeg sendMeg);
+//
+//
+//     void executeSend();
+//
+//
+// }

+ 166 - 166
hx-common/src/main/java/com/fjhx/common/service/send/impl/SendMegServiceImpl.java

@@ -1,166 +1,166 @@
-package com.fjhx.common.service.send.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.convert.Convert;
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.common.entity.send.dto.SendMegDto;
-import com.fjhx.common.entity.send.dto.SendMegSelectDto;
-import com.fjhx.common.entity.send.po.SendMeg;
-import com.fjhx.common.entity.send.vo.SendMegVo;
-import com.fjhx.common.mapper.send.SendMegMapper;
-import com.fjhx.common.service.send.SendMegService;
-import com.fjhx.socket.entity.MessageEntity;
-import com.fjhx.socket.event.WebSocketUserOfflineEvent;
-import com.fjhx.socket.service.WebSocketServer;
-import com.ruoyi.common.constant.StatusConstant;
-import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.ruoyi.framework.mybatis.holder.TenantHolder;
-import com.ruoyi.system.service.ISysUserService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Service;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author
- * @since 2023-05-22
- */
-@Slf4j
-@Service
-public class SendMegServiceImpl extends ServiceImpl<SendMegMapper, SendMeg> implements SendMegService {
-
-    @Autowired
-    private ISysUserService sysUserService;
-
-    @Autowired
-    private RedisCache redisCache;
-
-    private static final String sendMessageKey = "sendMessage:";
-
-    @Override
-    public Page<SendMegVo> getPage(SendMegSelectDto dto) {
-        IWrapper<SendMeg> wrapper = getWrapper();
-        wrapper.eq("sm", SendMeg::getType, dto.getType());
-        wrapper.eq("sm", SendMeg::getStatus, dto.getStatus());
-        wrapper.orderByAsc("sm", SendMeg::getStatus);
-        wrapper.orderByDesc("sm", SendMeg::getId);
-        Page<SendMegVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-        return page;
-    }
-
-    @Override
-    public SendMegVo detail(Long id) {
-        SendMeg SendMeg = this.getById(id);
-        SendMegVo result = BeanUtil.toBean(SendMeg, SendMegVo.class);
-        return result;
-    }
-
-    @Override
-    public void add(SendMegDto sendMegDto) {
-        Date sendTime = sendMegDto.getSendTime();
-        if (sendTime.before(DateUtil.endOfMinute(new Date()))) {
-            sendMegDto.setStatus(StatusConstant.YES);
-            new Thread(() -> send(sendMegDto)).start();
-        } else {
-            sendMegDto.setStatus(StatusConstant.NO);
-        }
-
-        this.save(sendMegDto);
-    }
-
-    @Override
-    public void edit(SendMegDto sendMegDto) {
-        sendMegDto.setStatus(StatusConstant.YES);
-        this.updateById(sendMegDto);
-    }
-
-    @Override
-    public void delete(Long id) {
-        this.removeById(id);
-    }
-
-    @Override
-    public synchronized void send(SendMeg sendMeg) {
-        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-        TenantHolder.setIgnore(true);
-        List<SysUser> list = sysUserService.list();
-        DynamicDataSourceContextHolder.poll();
-
-        for (SysUser sysUser : list) {
-            WebSocketServer.sendInfo(sysUser.getUserId(), 0, sendMeg);
-        }
-
-    }
-
-    @Override
-    public void executeSend() {
-
-        Set<String> scan = redisCache.scan(sendMessageKey + "**");
-        for (String key : scan) {
-            String[] split = key.split(":");
-            if (split.length != 3) {
-                return;
-            }
-            String userIdStr = split[2];
-            Long userId = Convert.toLong(userIdStr);
-            if (userId == null) {
-                return;
-            }
-
-            try {
-                SendMeg cacheObject = redisCache.getCacheObject(key);
-                redisCache.deleteObject(key);
-                WebSocketServer.sendInfo(userId, 0, cacheObject);
-            } catch (Exception e) {
-                log.error("推送异常", e);
-            }
-
-        }
-
-
-        List<SendMeg> list = list(q -> q
-                .eq(SendMeg::getStatus, StatusConstant.NO)
-                .le(SendMeg::getSendTime, DateUtil.endOfMinute(new Date())));
-
-        for (SendMeg sendMeg : list) {
-            send(sendMeg);
-            sendMeg.setStatus(StatusConstant.YES);
-        }
-        updateBatchById(list);
-
-    }
-
-    @EventListener
-    public void userOfflineEvent(WebSocketUserOfflineEvent webSocketUserOfflineEvent) {
-        MessageEntity messageEntity = webSocketUserOfflineEvent.getMessageEntity();
-
-        Object data = messageEntity.getData();
-
-        if (messageEntity.getType() != 0 || !(data instanceof SendMeg)) {
-            return;
-        }
-
-        String key = sendMessageKey + ((SendMeg) data).getId() + ":" + messageEntity.getUserId();
-        if (((SendMeg) data).getEndTime().after(new Date())) {
-            redisCache.setCacheObject(key, data);
-        }
-
-    }
-
-
-}
+// package com.fjhx.common.service.send.impl;
+//
+// import cn.hutool.core.bean.BeanUtil;
+// import cn.hutool.core.convert.Convert;
+// import cn.hutool.core.date.DateUtil;
+// import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+// import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+// import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+// import com.fjhx.common.constant.SourceConstant;
+// import com.fjhx.common.entity.send.dto.SendMegDto;
+// import com.fjhx.common.entity.send.dto.SendMegSelectDto;
+// import com.fjhx.common.entity.send.po.SendMeg;
+// import com.fjhx.common.entity.send.vo.SendMegVo;
+// import com.fjhx.common.mapper.send.SendMegMapper;
+// import com.fjhx.common.service.send.SendMegService;
+// import com.fjhx.socket.entity.MessageEntity;
+// import com.fjhx.socket.event.WebSocketUserOfflineEvent;
+// import com.fjhx.socket.service.WebSocketServer;
+// import com.ruoyi.common.constant.StatusConstant;
+// import com.ruoyi.common.core.domain.entity.SysUser;
+// import com.ruoyi.common.core.redis.RedisCache;
+// import com.ruoyi.common.utils.wrapper.IWrapper;
+// import com.ruoyi.framework.mybatis.holder.TenantHolder;
+// import com.ruoyi.system.service.ISysUserService;
+// import lombok.extern.slf4j.Slf4j;
+// import org.springframework.beans.factory.annotation.Autowired;
+// import org.springframework.context.event.EventListener;
+// import org.springframework.stereotype.Service;
+//
+// import java.util.Date;
+// import java.util.List;
+// import java.util.Set;
+//
+//
+// /**
+//  * <p>
+//  * 服务实现类
+//  * </p>
+//  *
+//  * @author
+//  * @since 2023-05-22
+//  */
+// @Slf4j
+// @Service
+// public class SendMegServiceImpl extends ServiceImpl<SendMegMapper, SendMeg> implements SendMegService {
+//
+//     @Autowired
+//     private ISysUserService sysUserService;
+//
+//     @Autowired
+//     private RedisCache redisCache;
+//
+//     private static final String sendMessageKey = "sendMessage:";
+//
+//     @Override
+//     public Page<SendMegVo> getPage(SendMegSelectDto dto) {
+//         IWrapper<SendMeg> wrapper = getWrapper();
+//         wrapper.eq("sm", SendMeg::getType, dto.getType());
+//         wrapper.eq("sm", SendMeg::getStatus, dto.getStatus());
+//         wrapper.orderByAsc("sm", SendMeg::getStatus);
+//         wrapper.orderByDesc("sm", SendMeg::getId);
+//         Page<SendMegVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+//         return page;
+//     }
+//
+//     @Override
+//     public SendMegVo detail(Long id) {
+//         SendMeg SendMeg = this.getById(id);
+//         SendMegVo result = BeanUtil.toBean(SendMeg, SendMegVo.class);
+//         return result;
+//     }
+//
+//     @Override
+//     public void add(SendMegDto sendMegDto) {
+//         Date sendTime = sendMegDto.getSendTime();
+//         if (sendTime.before(DateUtil.endOfMinute(new Date()))) {
+//             sendMegDto.setStatus(StatusConstant.YES);
+//             new Thread(() -> send(sendMegDto)).start();
+//         } else {
+//             sendMegDto.setStatus(StatusConstant.NO);
+//         }
+//
+//         this.save(sendMegDto);
+//     }
+//
+//     @Override
+//     public void edit(SendMegDto sendMegDto) {
+//         sendMegDto.setStatus(StatusConstant.YES);
+//         this.updateById(sendMegDto);
+//     }
+//
+//     @Override
+//     public void delete(Long id) {
+//         this.removeById(id);
+//     }
+//
+//     @Override
+//     public synchronized void send(SendMeg sendMeg) {
+//         DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+//         TenantHolder.setIgnore(true);
+//         List<SysUser> list = sysUserService.list();
+//         DynamicDataSourceContextHolder.poll();
+//
+//         for (SysUser sysUser : list) {
+//             WebSocketServer.sendInfo(sysUser.getUserId(), 0, sendMeg);
+//         }
+//
+//     }
+//
+//     @Override
+//     public void executeSend() {
+//
+//         Set<String> scan = redisCache.scan(sendMessageKey + "**");
+//         for (String key : scan) {
+//             String[] split = key.split(":");
+//             if (split.length != 3) {
+//                 return;
+//             }
+//             String userIdStr = split[2];
+//             Long userId = Convert.toLong(userIdStr);
+//             if (userId == null) {
+//                 return;
+//             }
+//
+//             try {
+//                 SendMeg cacheObject = redisCache.getCacheObject(key);
+//                 redisCache.deleteObject(key);
+//                 WebSocketServer.sendInfo(userId, 0, cacheObject);
+//             } catch (Exception e) {
+//                 log.error("推送异常", e);
+//             }
+//
+//         }
+//
+//
+//         List<SendMeg> list = list(q -> q
+//                 .eq(SendMeg::getStatus, StatusConstant.NO)
+//                 .le(SendMeg::getSendTime, DateUtil.endOfMinute(new Date())));
+//
+//         for (SendMeg sendMeg : list) {
+//             send(sendMeg);
+//             sendMeg.setStatus(StatusConstant.YES);
+//         }
+//         updateBatchById(list);
+//
+//     }
+//
+//     @EventListener
+//     public void userOfflineEvent(WebSocketUserOfflineEvent webSocketUserOfflineEvent) {
+//         MessageEntity messageEntity = webSocketUserOfflineEvent.getMessageEntity();
+//
+//         Object data = messageEntity.getData();
+//
+//         if (messageEntity.getType() != 0 || !(data instanceof SendMeg)) {
+//             return;
+//         }
+//
+//         String key = sendMessageKey + ((SendMeg) data).getId() + ":" + messageEntity.getUserId();
+//         if (((SendMeg) data).getEndTime().after(new Date())) {
+//             redisCache.setCacheObject(key, data);
+//         }
+//
+//     }
+//
+//
+// }

+ 12 - 2
hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportDetailsServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.oa.entity.daily.po.DailyReportDetails;
 import com.fjhx.oa.entity.daily.vo.DailyReportDetailsVo;
 import com.fjhx.oa.mapper.daily.DailyReportDetailsMapper;
 import com.fjhx.oa.service.daily.DailyReportDetailsService;
-import com.fjhx.socket.service.WebSocketServer;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.stereotype.Service;
 
@@ -44,7 +46,15 @@ public class DailyReportDetailsServiceImpl extends ServiceImpl<DailyReportDetail
         msgMap.put("businessId", id);
         msgMap.put("msg", "您有未读的日报");
         for (DailyReportDetails dailyReportDetails : list) {
-            WebSocketServer.sendInfo(dailyReportDetails.getRecipientId(), 1, msgMap);
+            // WebSocketServer.sendInfo(dailyReportDetails.getRecipientId(), 1, msgMap);
+
+            WebSocketPush.byUser(
+                    PushTypeEnum.MESSAGE,
+                    dailyReportDetails.getRecipientId(),
+                    "您有未读的日报",
+                    PushBusinessTypeEnum.UNREAD_DAILY.getType(),
+                    msgMap
+            );
         }
     }
 }

+ 22 - 3
hx-oa/src/main/java/com/fjhx/oa/service/daily/impl/DailyReportServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.oa.entity.daily.dto.DailyReportDto;
 import com.fjhx.oa.entity.daily.dto.DailyReportSelectDto;
@@ -17,7 +18,8 @@ import com.fjhx.oa.entity.daily.vo.DailyReportVo;
 import com.fjhx.oa.mapper.daily.DailyReportMapper;
 import com.fjhx.oa.service.daily.DailyReportDetailsService;
 import com.fjhx.oa.service.daily.DailyReportService;
-import com.fjhx.socket.service.WebSocketServer;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.ruoyi.common.constant.StatusConstant;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
@@ -120,7 +122,15 @@ public class DailyReportServiceImpl extends ServiceImpl<DailyReportMapper, Daily
         msgMap.put("businessId", dailyReportDto.getId());
         msgMap.put("msg", String.format("%s发布了新日志", userName));
         for (DailyReportDetails dailyReportDetails : dailyReportDetailsList) {
-            WebSocketServer.sendInfo(dailyReportDetails.getRecipientId(), 1, msgMap);
+            // WebSocketServer.sendInfo(dailyReportDetails.getRecipientId(), 1, msgMap);
+
+            WebSocketPush.byUser(
+                    PushTypeEnum.MESSAGE,
+                    dailyReportDetails.getRecipientId(),
+                    String.format("%s发布了新日志", userName),
+                    PushBusinessTypeEnum.RELEASE_LOG.getType(),
+                    msgMap
+            );
         }
     }
 
@@ -173,7 +183,16 @@ public class DailyReportServiceImpl extends ServiceImpl<DailyReportMapper, Daily
         msgMap.put("businessId", id);
         msgMap.put("msg", String.format("%s给你分享了日报", username));
         for (Long toUserId : toUserIdList) {
-            WebSocketServer.sendInfo(toUserId, 1, msgMap);
+            // WebSocketServer.sendInfo(toUserId, 1, msgMap);
+
+            WebSocketPush.byUser(
+                    PushTypeEnum.MESSAGE,
+                    toUserId,
+                    String.format("%s给你分享了日报", username),
+                    PushBusinessTypeEnum.SHARE_DAILY.getType(),
+                    msgMap
+            );
+
         }
     }
 

+ 14 - 3
hx-oa/src/main/java/com/fjhx/oa/utils/Notice.java

@@ -2,11 +2,13 @@ package com.fjhx.oa.utils;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
 import com.fjhx.oa.entity.schedule.po.ScheduleDetails;
 import com.fjhx.oa.entity.schedule.po.ScheduleInfo;
 import com.fjhx.oa.service.schedule.ScheduleDetailsService;
 import com.fjhx.oa.service.schedule.ScheduleInfoService;
-import com.fjhx.socket.service.WebSocketServer;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.ruoyi.framework.mybatis.holder.TenantHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -85,14 +87,23 @@ public class Notice {
             List<Long> scheduleInfoIds = scheduleInfos.stream().map(ScheduleInfo::getId).collect(Collectors.toList());
             List<ScheduleDetails> scheduleDetailsList = scheduleDetailsService.list(q -> q.in(ScheduleDetails::getScheduleInfoId, scheduleInfoIds));
             for (ScheduleDetails scheduleDetails : scheduleDetailsList) {
-                //发送消息
+                // 发送消息
                 ScheduleInfo scheduleInfo = scheduleInfoMap1.get(scheduleDetails.getScheduleInfoId());
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 String msg = String.format("您的日程<%s>将于%s开始。", scheduleInfo.getTitle(), sdf.format(scheduleInfo.getStartDate()));
+
                 Map<String, Object> msgMap = new HashMap<>();
                 msgMap.put("businessId", scheduleInfo.getId());
                 msgMap.put("msg", msg);
-                WebSocketServer.sendInfo(scheduleDetails.getParticipantId(), 1, msgMap);
+                // WebSocketServer.sendInfo(scheduleDetails.getParticipantId(), 1, msgMap);
+
+                WebSocketPush.byUser(
+                        PushTypeEnum.PUSH_NOTIFICATION,
+                        scheduleDetails.getParticipantId(),
+                        msg,
+                        PushBusinessTypeEnum.SCHEDULE_REMINDER.getType(),
+                        msgMap
+                );
             }
         }
         TenantHolder.clear();

+ 17 - 6
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/abnormal/impl/AbnormalDetailsServiceImpl.java

@@ -7,7 +7,9 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.socket.service.WebSocketServer;
+import com.fjhx.common.enums.PushBusinessTypeEnum;
+import com.fjhx.socket.core.PushTypeEnum;
+import com.fjhx.socket.core.WebSocketPush;
 import com.fjhx.victoriatourist.entity.abnormal.dto.AbnormalDetailsDto;
 import com.fjhx.victoriatourist.entity.abnormal.dto.AbnormalDetailsSelectDto;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalDetails;
@@ -75,11 +77,20 @@ public class AbnormalDetailsServiceImpl extends ServiceImpl<AbnormalDetailsMappe
 
         //如果下一跟进人不为空 就给下一跟进人发送消息
         if (ObjectUtil.isNotEmpty(abnormalDetailsDto.getNextHandleUser())) {
-            //给下一个跟进人发消息通知
-            JSONObject meassage = new JSONObject();
-            meassage.put("msg", "有异常需要您跟进");
-            meassage.put("abnormalInfoId", abnormalDetailsDto.getAbnormalInfoId().toString());
-            WebSocketServer.sendInfo(abnormalDetailsDto.getNextHandleUser(), 1, meassage);
+            // 给下一个跟进人发消息通知
+            JSONObject message = new JSONObject();
+            message.put("msg", "有异常需要您跟进");
+            message.put("abnormalInfoId", abnormalDetailsDto.getAbnormalInfoId().toString());
+            // WebSocketServer.sendInfo(abnormalDetailsDto.getNextHandleUser(), 1, message);
+
+            WebSocketPush.byUser(
+                    PushTypeEnum.PUSH_NOTIFICATION,
+                    abnormalDetailsDto.getNextHandleUser(),
+                    "有异常需要您跟进",
+                    PushBusinessTypeEnum.EXCEPTION_HANDLING.getType(),
+                    message
+            );
+
         }
 
         this.save(abnormalDetailsDto);

+ 80 - 79
hx-wms/src/main/java/com/fjhx/wms/service/monthly/impl/MonthlyInventoryReportServiceImpl.java

@@ -94,91 +94,92 @@ public class MonthlyInventoryReportServiceImpl extends ServiceImpl<MonthlyInvent
     @DSTransactional
     public void generateReport() {
         DynamicDataSourceContextHolder.push(SourceConstant.WMS);
-
-        List<MonthlyInventoryReport> monthlyInventoryReportList = new ArrayList<>();
-
-        //获取上上月的报表的 结存数量为上月报表的初期数量 并根据租户id分组
-        List<MonthlyInventoryReportVo> olDmonthlyInventoryReportLists = baseMapper.getLastMonthMonthlyInventoryReport();
-        Map<String, List<MonthlyInventoryReportVo>> olDmonthlyInventoryReportMap = new HashMap<>();
-        if (ObjectUtil.isNotEmpty(olDmonthlyInventoryReportLists)) {
-            olDmonthlyInventoryReportMap = olDmonthlyInventoryReportLists.stream().collect(Collectors.groupingBy(MonthlyInventoryReportVo::getTenantId));
-        }
-        //获取上月流水 并根据租户id分组
-        List<StockJournalDetailsVo> lastMonthStockJournals = baseMapper.getLastMonthStockJournal();
-        Map<String, List<StockJournalDetailsVo>> lastMonthStockJournalMap = new HashMap<>();
-        if (ObjectUtil.isNotEmpty(lastMonthStockJournals)) {
-            lastMonthStockJournalMap = lastMonthStockJournals.stream().collect(Collectors.groupingBy(StockJournalDetailsVo::getTenantId));
-        }
-
-        //获取库存 并根据租户id分组
-        List<Stock> stockLists = stockService.list();
-        if (ObjectUtil.isEmpty(stockLists)) {
-            //如果查询不到一条库存信息直接跳过
-            return;
-        }
-        Map<String, List<Stock>> stockListMap = stockLists.stream().collect(Collectors.groupingBy(Stock::getTenantId));
-
-        //遍历每个租户
-        for (Map.Entry<String, List<Stock>> entry : stockListMap.entrySet()) {
-            String tenantId = entry.getKey();
-            List<Stock> stockList = entry.getValue();
-            if (ObjectUtil.isEmpty(stockList)) {
-                //如果租户库存的信息为空直接跳过这个租户
-                continue;
+        try {
+            List<MonthlyInventoryReport> monthlyInventoryReportList = new ArrayList<>();
+
+            //获取上上月的报表的 结存数量为上月报表的初期数量 并根据租户id分组
+            List<MonthlyInventoryReportVo> olDmonthlyInventoryReportLists = baseMapper.getLastMonthMonthlyInventoryReport();
+            Map<String, List<MonthlyInventoryReportVo>> olDmonthlyInventoryReportMap = new HashMap<>();
+            if (ObjectUtil.isNotEmpty(olDmonthlyInventoryReportLists)) {
+                olDmonthlyInventoryReportMap = olDmonthlyInventoryReportLists.stream().collect(Collectors.groupingBy(MonthlyInventoryReportVo::getTenantId));
+            }
+            //获取上月流水 并根据租户id分组
+            List<StockJournalDetailsVo> lastMonthStockJournals = baseMapper.getLastMonthStockJournal();
+            Map<String, List<StockJournalDetailsVo>> lastMonthStockJournalMap = new HashMap<>();
+            if (ObjectUtil.isNotEmpty(lastMonthStockJournals)) {
+                lastMonthStockJournalMap = lastMonthStockJournals.stream().collect(Collectors.groupingBy(StockJournalDetailsVo::getTenantId));
             }
 
-            List<MonthlyInventoryReportVo> olDmonthlyInventoryReportList = olDmonthlyInventoryReportMap.getOrDefault(tenantId, new ArrayList<>());
-            List<StockJournalDetailsVo> lastMonthStockJournal = lastMonthStockJournalMap.getOrDefault(tenantId, new ArrayList<>());
-
-            //生成上月报表
-            for (Stock stock : stockList) {
-                //计算初期数量
-                List<MonthlyInventoryReport> initialQuantityList = olDmonthlyInventoryReportList.stream().filter(it -> stock.getWarehouseId().equals(it.getWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).collect(Collectors.toList());
-                //计算入库数量
-                List<StockJournalDetailsVo> receiptQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 1).collect(Collectors.toList());
-                BigDecimal receiptQuantity = receiptQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
-                //计算出库数量
-                List<StockJournalDetailsVo> outboundQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 2).collect(Collectors.toList());
-                BigDecimal outboundQuantity = outboundQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
-
-                MonthlyInventoryReport monthlyInventoryReport = new MonthlyInventoryReport();
-                monthlyInventoryReport.setWarehouseId(stock.getWarehouseId());
-                monthlyInventoryReport.setProductId(stock.getProductId());
-                monthlyInventoryReport.setInitialQuantity(BigDecimal.ZERO);//初期数量
-                if (ObjectUtil.isNotEmpty(initialQuantityList)) {
-                    //初期数量=上上月报表的结存数量
-                    monthlyInventoryReport.setInitialQuantity(initialQuantityList.get(0).getBalanceQuantity());
-                }
-                monthlyInventoryReport.setReceiptQuantity(receiptQuantity);//入库数量
-                monthlyInventoryReport.setOutboundQuantity(outboundQuantity);//出库数量
-                monthlyInventoryReport.setBalanceQuantity(BigDecimal.ZERO);//结存数量
-                if (ObjectUtil.isNotEmpty(stock.getQuantity())) {
-                    monthlyInventoryReport.setBalanceQuantity(stock.getQuantity());//结存数量
+            //获取库存 并根据租户id分组
+            List<Stock> stockLists = stockService.list();
+            if (ObjectUtil.isEmpty(stockLists)) {
+                //如果查询不到一条库存信息直接跳过
+                return;
+            }
+            Map<String, List<Stock>> stockListMap = stockLists.stream().collect(Collectors.groupingBy(Stock::getTenantId));
+
+            //遍历每个租户
+            for (Map.Entry<String, List<Stock>> entry : stockListMap.entrySet()) {
+                String tenantId = entry.getKey();
+                List<Stock> stockList = entry.getValue();
+                if (ObjectUtil.isEmpty(stockList)) {
+                    //如果租户库存的信息为空直接跳过这个租户
+                    continue;
                 }
-                monthlyInventoryReport.setBalanceUnitPrice(BigDecimal.ZERO);//结存单价
-                BigDecimal unitPriceOfBalance = stock.getUnitPrice();
-                if (ObjectUtil.isNotEmpty(unitPriceOfBalance)) {
-                    monthlyInventoryReport.setBalanceUnitPrice(unitPriceOfBalance);//结存单价
+
+                List<MonthlyInventoryReportVo> olDmonthlyInventoryReportList = olDmonthlyInventoryReportMap.getOrDefault(tenantId, new ArrayList<>());
+                List<StockJournalDetailsVo> lastMonthStockJournal = lastMonthStockJournalMap.getOrDefault(tenantId, new ArrayList<>());
+
+                //生成上月报表
+                for (Stock stock : stockList) {
+                    //计算初期数量
+                    List<MonthlyInventoryReport> initialQuantityList = olDmonthlyInventoryReportList.stream().filter(it -> stock.getWarehouseId().equals(it.getWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).collect(Collectors.toList());
+                    //计算入库数量
+                    List<StockJournalDetailsVo> receiptQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 1).collect(Collectors.toList());
+                    BigDecimal receiptQuantity = receiptQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    //计算出库数量
+                    List<StockJournalDetailsVo> outboundQuantityList = lastMonthStockJournal.stream().filter(it -> stock.getWarehouseId().equals(it.getToWarehouseId())).filter(it -> stock.getProductId().equals(it.getProductId())).filter(it -> it.getOpType() == 2).collect(Collectors.toList());
+                    BigDecimal outboundQuantity = outboundQuantityList.stream().map(StockJournalDetailsVo::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    MonthlyInventoryReport monthlyInventoryReport = new MonthlyInventoryReport();
+                    monthlyInventoryReport.setWarehouseId(stock.getWarehouseId());
+                    monthlyInventoryReport.setProductId(stock.getProductId());
+                    monthlyInventoryReport.setInitialQuantity(BigDecimal.ZERO);//初期数量
+                    if (ObjectUtil.isNotEmpty(initialQuantityList)) {
+                        //初期数量=上上月报表的结存数量
+                        monthlyInventoryReport.setInitialQuantity(initialQuantityList.get(0).getBalanceQuantity());
+                    }
+                    monthlyInventoryReport.setReceiptQuantity(receiptQuantity);//入库数量
+                    monthlyInventoryReport.setOutboundQuantity(outboundQuantity);//出库数量
+                    monthlyInventoryReport.setBalanceQuantity(BigDecimal.ZERO);//结存数量
+                    if (ObjectUtil.isNotEmpty(stock.getQuantity())) {
+                        monthlyInventoryReport.setBalanceQuantity(stock.getQuantity());//结存数量
+                    }
+                    monthlyInventoryReport.setBalanceUnitPrice(BigDecimal.ZERO);//结存单价
+                    BigDecimal unitPriceOfBalance = stock.getUnitPrice();
+                    if (ObjectUtil.isNotEmpty(unitPriceOfBalance)) {
+                        monthlyInventoryReport.setBalanceUnitPrice(unitPriceOfBalance);//结存单价
+                    }
+                    BigDecimal multiply = monthlyInventoryReport.getBalanceQuantity().multiply(monthlyInventoryReport.getBalanceUnitPrice());
+                    monthlyInventoryReport.setBalanceAmount(multiply);//结存金额
+
+                    //赋值上月第一天
+                    Calendar cal = Calendar.getInstance();
+                    cal.add(Calendar.MONTH, -1);
+                    cal.set(Calendar.DAY_OF_MONTH, 1);
+                    Date startTime = cal.getTime();//上个月第一天
+                    monthlyInventoryReport.setDailyReportDate(startTime);
+
+                    //赋值租户id
+                    monthlyInventoryReport.setTenantId(tenantId);
+                    monthlyInventoryReportList.add(monthlyInventoryReport);
                 }
-                BigDecimal multiply = monthlyInventoryReport.getBalanceQuantity().multiply(monthlyInventoryReport.getBalanceUnitPrice());
-                monthlyInventoryReport.setBalanceAmount(multiply);//结存金额
-
-                //赋值上月第一天
-                Calendar cal = Calendar.getInstance();
-                cal.add(Calendar.MONTH, -1);
-                cal.set(Calendar.DAY_OF_MONTH, 1);
-                Date startTime = cal.getTime();//上个月第一天
-                monthlyInventoryReport.setDailyReportDate(startTime);
-
-                //赋值租户id
-                monthlyInventoryReport.setTenantId(tenantId);
-                monthlyInventoryReportList.add(monthlyInventoryReport);
             }
-        }
-
-        this.saveBatch(monthlyInventoryReportList);
 
-        DynamicDataSourceContextHolder.clear();
+            this.saveBatch(monthlyInventoryReportList);
+        } finally {
+            DynamicDataSourceContextHolder.clear();
+        }
     }
 
     @Override

+ 1 - 1
pom.xml

@@ -52,7 +52,7 @@
             <dependency>
                 <groupId>com.fjhx</groupId>
                 <artifactId>hx-base</artifactId>
-                <version>1.0.1</version>
+                <version>1.0.2</version>
             </dependency>
             <dependency>
                 <groupId>com.fjhx</groupId>