From d9e89f560697cf7fdb140c95e970dbc1196f3a87 Mon Sep 17 00:00:00 2001 From: nieziyan Date: Wed, 31 Jan 2024 16:09:52 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9Asend=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/common/constant/CommonConstant.java | 2 + .../common/constant/ServiceNameConstants.java | 4 +- .../base/entity/postgre/SysUserClient.java | 39 +++++ .../modules/feignclient/SystemClient.java | 9 +- .../modules/redisStream/AnalysisConsumer.java | 8 +- .../org/jeecg/common/util/GammaFileUtil.java | 6 + .../modules/mapper/GardsNuclLibMapper.java | 2 +- .../org/jeecg/DataReceivingStatusManager.java | 1 + jeecg-module-system/jeecg-system-biz/pom.xml | 20 ++- .../org/jeecg/config/init/MyApiHelper.java | 44 ++++++ .../controller/SendAppMessageController.java | 21 +++ .../controller/SendMessageController.java | 4 +- .../message/mapper/AppMessageMapper.java | 25 +++ .../message/mapper/xml/AppMessageMapper.xml | 22 +++ .../message/service/IAppMessageService.java | 9 ++ .../service/impl/AppMessageServiceImpl.java | 37 +++++ .../modules/message/util/PushAppUtil.java | 148 ++++++++++++++++++ .../jeecg/modules/quartz/entity/Monitor.java | 4 + .../jeecg/modules/quartz/job/DatabaseJob.java | 1 + .../jeecg/modules/quartz/job/EmailJob.java | 1 + .../jeecg/modules/quartz/job/ServerJob.java | 1 + .../system/controller/LoginController.java | 34 ++++ .../controller/SysUserClientController.java | 23 +++ .../system/mapper/SysUserClientMapper.java | 7 + .../system/service/ISysUserClientService.java | 10 ++ .../impl/SysUserClientServiceImpl.java | 36 +++++ .../controller/RadionuclideController.java | 5 +- .../mapper/GardsSampleDataWebMapper.java | 3 +- .../mapper/xml/GardsSampleDataWebMapper.xml | 3 + .../jeecg/modules/service/IAutoService.java | 2 +- .../modules/service/impl/AutoServiceImpl.java | 4 +- 31 files changed, 519 insertions(+), 16 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/SysUserClient.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/MyApiHelper.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendAppMessageController.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/AppMessageMapper.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/AppMessageMapper.xml create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/IAppMessageService.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/AppMessageServiceImpl.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserClientController.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserClientMapper.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserClientService.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserClientServiceImpl.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java index dd411a72..224269cc 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java @@ -79,6 +79,8 @@ public interface CommonConstant { public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; /** 登录用户Token令牌缓存KEY前缀 */ String PREFIX_USER_TOKEN = "prefix_user_token:"; + /** APP端记录登陆用户Token令牌缓存KEY */ + String PREFIX_USER_TOKEN_APP = "prefix_user_token_app:"; // /** Token缓存时间:3600秒即一小时 */ // int TOKEN_EXPIRE_TIME = 3600; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java index 351d4127..1db798d1 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java @@ -28,11 +28,11 @@ public interface ServiceNameConstants { /** * 微服务名:系统管理模块 */ - String SERVICE_SYSTEM = "jeecg-system"; + String SERVICE_SYSTEM = "armd-system"; /** * 微服务名: demo模块 */ - String SERVICE_DEMO = "jeecg-demo"; + String SERVICE_DEMO = "armd-demo"; /** * 微服务名:online在线模块 */ diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/SysUserClient.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/SysUserClient.java new file mode 100644 index 00000000..eb00dab6 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/SysUserClient.java @@ -0,0 +1,39 @@ +package org.jeecg.modules.base.entity.postgre; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_client") +public class SysUserClient implements Serializable { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + + @TableField(value = "user_id") + private String userId; + + @TableField(value = "client_id") + private String clientId; + + @TableField(value = "create_by") + private String createBy; + + @TableField(value = "create_time") + private Date createTime; + + @TableField(value = "update_by") + private String updateBy; + + @TableField(value = "update_time") + private Date updateTime; + + + +} diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/SystemClient.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/SystemClient.java index 8b8e9c4c..ccd00db5 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/SystemClient.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/SystemClient.java @@ -19,8 +19,8 @@ public interface SystemClient { @RequestMapping("/sys/user/findUserMap") Map findUserMap(); - @GetMapping("/sys/sendMessage/send") - void sendMessage(@RequestParam MessageDTO messageDTO, + @PostMapping("/sys/sendMessage/send") + void sendMessage(@RequestBody MessageDTO messageDTO, @RequestParam String groupId, @RequestParam String notific); @@ -39,4 +39,9 @@ public interface SystemClient { @GetMapping("/gardsStations/stationCodesMap") Map stationCodesMap(); + + @PostMapping("/sys/appMessage/pushMessageToSingle") + void pushMessageToSingle(@RequestBody MessageDTO messageDTO, @RequestParam String groupId); + + } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java index 1de847a4..1165b97e 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java @@ -198,8 +198,12 @@ public class AnalysisConsumer implements StreamListener { List findNuclidesAnalysis(); List getNuclideLines(); - + } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java b/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java index af035bdd..506ba9df 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java @@ -81,6 +81,7 @@ public class DataReceivingStatusManager { String cacheTime = (String) redisUtil.get("maxCacheTime"); //从redis中获取台站信息 Map stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); +// List stationIds = stationInfoMap.keySet().stream().collect(Collectors.toList()); List stationIds = new LinkedList<>(); for (Map.Entry stationInfo:stationInfoMap.entrySet()) { GardsStations infoValue = stationInfo.getValue(); diff --git a/jeecg-module-system/jeecg-system-biz/pom.xml b/jeecg-module-system/jeecg-system-biz/pom.xml index 7d176710..e8a618df 100644 --- a/jeecg-module-system/jeecg-system-biz/pom.xml +++ b/jeecg-module-system/jeecg-system-biz/pom.xml @@ -55,6 +55,24 @@ org.jeecgframework.boot jeecg-module-beta-gamma-analyser + + + com.getui.push + restful-sdk + 1.0.0.7 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.2.3 + - + + + + getui-nexus + https://mvn.getui.com/nexus/content/repositories/releases/ + + + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/MyApiHelper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/MyApiHelper.java new file mode 100644 index 00000000..797ac4f3 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/MyApiHelper.java @@ -0,0 +1,44 @@ +package org.jeecg.config.init; + +import com.getui.push.v2.sdk.ApiHelper; +import com.getui.push.v2.sdk.GtApiConfiguration; +import com.getui.push.v2.sdk.api.PushApi; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "getui.app") +public class MyApiHelper { + + private String appId; + + private String appKey; + + private String appSecret; + + private String masterSecret; + + private String url; + + /** + * 个推接口实例化 + * @return + */ + @Bean(name = "onlyPushApi") + public PushApi pushApi() { + GtApiConfiguration apiConfiguration = new GtApiConfiguration(); + //填写应用配置,参数在“Uni Push”下的“应用配置”页面中获取 + apiConfiguration.setAppId(appId); + apiConfiguration.setAppKey(appKey); + apiConfiguration.setMasterSecret(masterSecret); + //实例化ApiHelper对象,用于创建接口对象 + ApiHelper apiHelper = ApiHelper.build(apiConfiguration); + //创建对象,建议复用。目前有PushApi、StatisticApi、UserApi + PushApi pushApi = apiHelper.creatApi(PushApi.class); + return pushApi; + } + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendAppMessageController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendAppMessageController.java new file mode 100644 index 00000000..7f701e6e --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendAppMessageController.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.message.controller; + +import org.jeecg.common.api.dto.message.MessageDTO; +import org.jeecg.modules.message.service.IAppMessageService; +import org.jeecg.modules.message.util.PushAppUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("sys/appMessage") +public class SendAppMessageController { + + @Autowired + private IAppMessageService appMessageService; + + @PostMapping("pushMessageToSingle") + public void pushMessageToSingle(@RequestBody MessageDTO messageDTO, @RequestParam String groupId) { + appMessageService.sendToSingle(messageDTO, groupId); + } + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendMessageController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendMessageController.java index 5a83b40a..495eb13a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendMessageController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SendMessageController.java @@ -18,8 +18,8 @@ public class SendMessageController { @Autowired private ISysBaseAPI sysBaseAPI; - @GetMapping("send") - public void sendMessage(@RequestParam MessageDTO messageDTO, + @PostMapping("send") + public void sendMessage(@RequestBody MessageDTO messageDTO, @RequestParam String groupId, @RequestParam String notific){ sendMessage.send(messageDTO, groupId, notific); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/AppMessageMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/AppMessageMapper.java new file mode 100644 index 00000000..55f32860 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/AppMessageMapper.java @@ -0,0 +1,25 @@ +package org.jeecg.modules.message.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AppMessageMapper { + + /** + * 根据分组id获取关联的用户id + * @param groupId + * @return + */ + List findGroupUserIds(@Param(value = "groupId") String groupId); + + /** + * 查询用户关联的客户端id + * @param userIds + * @return + */ + List findUserClientId(@Param(value = "userIds") List userIds); + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/AppMessageMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/AppMessageMapper.xml new file mode 100644 index 00000000..b6f72ff9 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/AppMessageMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/IAppMessageService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/IAppMessageService.java new file mode 100644 index 00000000..def8c8ab --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/IAppMessageService.java @@ -0,0 +1,9 @@ +package org.jeecg.modules.message.service; + +import org.jeecg.common.api.dto.message.MessageDTO; + +public interface IAppMessageService { + + void sendToSingle(MessageDTO messageDTO, String groupId); + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/AppMessageServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/AppMessageServiceImpl.java new file mode 100644 index 00000000..27439781 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/AppMessageServiceImpl.java @@ -0,0 +1,37 @@ +package org.jeecg.modules.message.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.jeecg.common.api.dto.message.MessageDTO; +import org.jeecg.modules.message.mapper.AppMessageMapper; +import org.jeecg.modules.message.service.IAppMessageService; +import org.jeecg.modules.message.util.PushAppUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class AppMessageServiceImpl implements IAppMessageService { + + @Autowired + private PushAppUtil pushAppUtil; + @Autowired + private AppMessageMapper appMessageMapper; + + + @Override + public void sendToSingle(MessageDTO messageDTO, String groupId) { + //根据分组id查询出关联的用户id + List groupUserIds = appMessageMapper.findGroupUserIds(groupId); + if (CollectionUtils.isNotEmpty(groupUserIds)) { + //根据用户id查询出用户关联的app客户端id + List userClientId = appMessageMapper.findUserClientId(groupUserIds); + if (CollectionUtils.isNotEmpty(userClientId)) { + userClientId = userClientId.stream().distinct().collect(Collectors.toList()); + //调用app推送方法 + pushAppUtil.pushToList(messageDTO, userClientId); + } + } + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java new file mode 100644 index 00000000..e33f4182 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java @@ -0,0 +1,148 @@ +package org.jeecg.modules.message.util; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.getui.push.v2.sdk.api.PushApi; +import com.getui.push.v2.sdk.common.ApiResult; +import com.getui.push.v2.sdk.dto.req.Audience; +import com.getui.push.v2.sdk.dto.req.AudienceDTO; +import com.getui.push.v2.sdk.dto.req.Settings; +import com.getui.push.v2.sdk.dto.req.message.PushChannel; +import com.getui.push.v2.sdk.dto.req.message.PushDTO; +import com.getui.push.v2.sdk.dto.req.message.PushMessage; +import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO; +import com.getui.push.v2.sdk.dto.req.message.android.GTNotification; +import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification; +import com.getui.push.v2.sdk.dto.req.message.android.Ups; +import com.getui.push.v2.sdk.dto.res.TaskIdDTO; +import org.jeecg.common.api.dto.message.MessageDTO; +import org.jeecg.modules.message.mapper.AppMessageMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class PushAppUtil { + + @Autowired + private AppMessageMapper appMessageMapper; + @Resource(name = "onlyPushApi") + private PushApi pushApi; + + /** + * 根据groupId,查询给个人 + * @param messageDTO + * @param groupId + */ + public void pushToSingle(MessageDTO messageDTO, String groupId) { + //根据分组id查询出关联的用户id + List groupUserIds = appMessageMapper.findGroupUserIds(groupId); + if (CollectionUtils.isNotEmpty(groupUserIds)) { + //根据用户id查询出用户关联的app客户端id + List userClientId = appMessageMapper.findUserClientId(groupUserIds); + if (CollectionUtils.isNotEmpty(userClientId)) { + userClientId = userClientId.stream().distinct().collect(Collectors.toList()); + //调用app推送方法 + pushToList(messageDTO, userClientId); + } + } + } + + public void pushToList(MessageDTO messageDTO, List clientIds) { + //批量发送 + AudienceDTO audienceDTO = new AudienceDTO(); + + PushDTO pushDTO = buildPushDTO(messageDTO.getTitle(), messageDTO.getContent()); + //创建消息 + ApiResult createApiResult = pushApi.createMsg(pushDTO); + if (! createApiResult.isSuccess()) { + System.out.println("推送:创建消息失败"+createApiResult.getMsg()); + } + // 设置接收人信息 + Audience audience = new Audience(); + pushDTO.setAudience(audience); + audience.setCid(clientIds); + + audienceDTO.setAudience(audience); + audienceDTO.setTaskid(createApiResult.getData().getTaskId()); + audienceDTO.setAsync(true); + + ApiResult>> apiResult = pushApi.pushListByCid(audienceDTO); + if (apiResult.isSuccess()) { + // success + System.out.println(apiResult.getMsg()); + } else { + // failed + System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg()); + } + } + + /** + * 构建推送消息 + * @param title + * @param content + * @return + */ + private PushDTO buildPushDTO(String title, String content) { + PushDTO pushDTO = new PushDTO<>(); + // 设置推送参数 + pushDTO.setRequestId(System.currentTimeMillis() + ""); + pushDTO.setGroupName("test-group"); + + //配置推送条件 + Settings settings = new Settings(); + pushDTO.setSettings(settings); + //消息有效期,走厂商消息需要设置该值 + settings.setTtl(3600000); + + //安卓在线通道走个推推送时的消息体(在线通道不支持ios) + PushMessage pushMessage = new PushMessage(); + pushDTO.setPushMessage(pushMessage); + //通知消息 + GTNotification notification = new GTNotification(); + pushMessage.setNotification(notification); + notification.setTitle(title); + notification.setBody(content); + notification.setClickType("intent"); + notification.setIntent("intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=com.analysissystem/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"); + //透传消息 此格式的透传消息由 unipush 做了特殊处理,会自动展示通知栏。开发者也可自定义其它格式,在客户端自己处理。 +// pushMessage.setTransmission(" {title:\"个推通道透传消息标题\",content:\"个推通道透传消息内容\",payload:\"自定义数据\"}"); + + //设置离线推送时的消息体 + PushChannel pushChannel = new PushChannel(); + + //安卓离线厂商通道推送的消息体 + AndroidDTO androidDTO = new AndroidDTO(); + Ups ups = new Ups(); + //通知消息 + ThirdNotification thirdNotification = new ThirdNotification(); + ups.setNotification(thirdNotification); + thirdNotification.setTitle(title); + thirdNotification.setBody(content); + thirdNotification.setClickType("intent"); + thirdNotification.setIntent("intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=com.analysissystem/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end"); + //透传消息 +// ups.setTransmission(" {title:\"安卓离线厂商通道透传消息标题\",content:\"安卓离线厂商通道透传消息内容\",payload:\"自定义数据\"}"); + //华为手机配置厂商参数 + ups.addOption("HW", "/message/android/notification/badge/add_num", 1); + ups.addOption("HW", "/message/android/notification/importance", "HIGH"); + ups.addOption("HW", "/message/android/category", "WORK"); + //OPPO手机配置厂商参数 + ups.addOption("OP", "/off_line", true); + ups.addOption("OP", "/show_ttl", 86400); + //VIVO手机配置厂商参数 + ups.addOption("VV", "/notifyType", 4); + ups.addOption("VV", "/timeToLive", 86400); + + androidDTO.setUps(ups); + pushChannel.setAndroid(androidDTO); + + pushDTO.setPushChannel(pushChannel); + return pushDTO; + } + + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/entity/Monitor.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/entity/Monitor.java index e281d477..633cdcd0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/entity/Monitor.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/entity/Monitor.java @@ -9,6 +9,7 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.feignclient.AbnormalAlarmClient; import org.jeecg.modules.feignclient.MonitorSystem; import org.jeecg.modules.message.SendMessage; +import org.jeecg.modules.message.util.PushAppUtil; import static org.jeecg.common.util.TokenUtils.getTempToken; @Getter @@ -24,6 +25,8 @@ public abstract class Monitor { private AbnormalAlarmClient alarmClient; + private PushAppUtil pushAppUtil; + /* * 规则首次触发报警后,设置该规则的沉默周期(如果有) */ @@ -40,6 +43,7 @@ public abstract class Monitor { redisStreamUtil = SpringContextUtils.getBean(RedisStreamUtil.class); alarmClient = SpringContextUtils.getBean(AbnormalAlarmClient.class); monitorSystem = SpringContextUtils.getBean(MonitorSystem.class); + pushAppUtil = SpringContextUtils.getBean(PushAppUtil.class); } protected void destroy() { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java index 5fff55b3..7022bdf1 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java @@ -116,6 +116,7 @@ public class DatabaseJob extends Monitor implements Job{ String groupId = alarmRule.getContactId(); String notific = alarmRule.getNotification(); getSendMessage().send(messageDTO, groupId, notific); + getPushAppUtil().pushToSingle(messageDTO, groupId); } } catch (JsonProcessingException e) { log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java index 320cfddc..614cb05f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/EmailJob.java @@ -107,6 +107,7 @@ public class EmailJob extends Monitor implements Job{ String groupId = alarmRule.getContactId(); String notific = alarmRule.getNotification(); getSendMessage().send(messageDTO, groupId, notific); + getPushAppUtil().pushToSingle(messageDTO, groupId); } } catch (JsonProcessingException e) { log.error("Email预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java index afc18cfd..5d5c8a89 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java @@ -122,6 +122,7 @@ public class ServerJob extends Monitor implements Job { String groupId = alarmRule.getContactId(); String notific = alarmRule.getNotification(); getSendMessage().send(messageDTO, groupId, notific); + getPushAppUtil().pushToSingle(messageDTO, groupId); } }catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java index 1f9af1d2..df9484e4 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -612,12 +612,22 @@ public class LoginController { //6. 生成token String token = JwtUtil.sign(username, syspassword); + //判断是否存在当前token如果存在 销毁当前token重新生成token信息 + if ( redisUtil.hasKey(CommonConstant.PREFIX_USER_TOKEN_APP+username) ) { + //获取存储的app端token + String usedToken = (String) redisUtil.get(CommonConstant.PREFIX_USER_TOKEN_APP+username); + logOutApp(usedToken); + } + // 设置超时时间 redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN_APP+username, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN_APP+username, JwtUtil.EXPIRE_TIME*2 / 1000); //token 信息 obj.put("token", token); + result.setResult(obj); result.setSuccess(true); result.setCode(200); @@ -625,6 +635,30 @@ public class LoginController { return result; } + private void logOutApp(String token) { + //通过token获取用户名 + String username = JwtUtil.getUsername(token); + //根据用户名查询用户信息 + LoginUser sysUser = sysBaseApi.getUserByName(username); + //用户信息不为空 + if(sysUser!=null) { + //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功[移动端]!", CommonConstant.LOG_TYPE_1, null,sysUser); + //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + log.info(" 用户名: "+sysUser.getRealname()+",退出成功[移动端]! "); + //清空用户登录Token缓存 + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); + //清空用户登陆app端Token缓存 + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN_APP+username); + //清空用户登录Shiro权限缓存 + redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); + //清空用户的缓存信息(包括部门信息),例如sys:cache:user:: + redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); + //调用shiro的logout + SecurityUtils.getSubject().logout(); + } + } + /** * 图形验证码 * @param sysLoginModel diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserClientController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserClientController.java new file mode 100644 index 00000000..9e6fc740 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserClientController.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.system.controller; + +import org.jeecg.modules.base.entity.postgre.SysUserClient; +import org.jeecg.modules.system.service.ISysUserClientService; +import org.springframework.beans.factory.annotation.Autowired; +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; + +@RestController +@RequestMapping("/sys/userClient") +public class SysUserClientController { + + @Autowired + private ISysUserClientService userClientService; + + @PostMapping("saveOrUpdateClient") + public void saveOrUpdateClient(@RequestBody SysUserClient sysUserClient) { + userClientService.saveOrUpdateClient(sysUserClient); + } + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserClientMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserClientMapper.java new file mode 100644 index 00000000..d6f82b38 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserClientMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.postgre.SysUserClient; + +public interface SysUserClientMapper extends BaseMapper { +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserClientService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserClientService.java new file mode 100644 index 00000000..39585697 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserClientService.java @@ -0,0 +1,10 @@ +package org.jeecg.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.postgre.SysUserClient; + +public interface ISysUserClientService extends IService { + + void saveOrUpdateClient(SysUserClient sysUserClient); + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserClientServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserClientServiceImpl.java new file mode 100644 index 00000000..5a6635e5 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserClientServiceImpl.java @@ -0,0 +1,36 @@ +package org.jeecg.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.base.entity.postgre.SysUserClient; +import org.jeecg.modules.system.mapper.SysUserClientMapper; +import org.jeecg.modules.system.service.ISysUserClientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +@Service("sysUserClientService") +public class SysUserClientServiceImpl extends ServiceImpl implements ISysUserClientService { + + @Override + public void saveOrUpdateClient(SysUserClient userClient) { + //根据用户id查询cid + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUserClient::getUserId, userClient.getUserId()); + SysUserClient sysUserClient = this.baseMapper.selectOne(queryWrapper); + //判断用户关联的客户端id是否为空 + if (Objects.nonNull(sysUserClient)) { + sysUserClient.setClientId(userClient.getClientId()); + this.baseMapper.updateById(sysUserClient); + } else {//如果用户关联的客户端id为空 说明当前用户没有关联的客户端id + userClient.setId(IdWorker.getIdStr()); + this.baseMapper.insert(userClient); + } + } + +} diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java index e21eb63a..e32bbe8a 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java @@ -24,10 +24,11 @@ public class RadionuclideController { @GetMapping("findAutoPage") @ApiOperation(value = "分页查询自动处理结果", notes = "分页查询自动处理结果") - public Result findAutoPage(QueryRequest queryRequest, Integer[] stationIds, String qualifie, + public Result findAutoPage(QueryRequest queryRequest, Integer[] stationIds, + String qualifie, String sampleType, @DateTimeFormat(pattern = "yyyy-MM-dd")Date startTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime){ - return autoService.findAutoPage(queryRequest, stationIds, qualifie, startTime, endTime); + return autoService.findAutoPage(queryRequest, stationIds, qualifie, sampleType,startTime, endTime); } @GetMapping("findReviewedPage") diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/GardsSampleDataWebMapper.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/GardsSampleDataWebMapper.java index 22f8ccdb..e4b2a9d2 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/GardsSampleDataWebMapper.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/GardsSampleDataWebMapper.java @@ -8,11 +8,12 @@ import org.jeecg.modules.entity.GardsSampleDataWeb; import org.jeecg.modules.entity.vo.SpectrumFileRecord; import java.util.List; +import java.util.Map; @Mapper public interface GardsSampleDataWebMapper extends BaseMapper { - Page findAutoPage(String startDate, String endDate, List stationIdList, String qualifie, Page page); + Page findAutoPage(String startDate, String endDate, List stationIdList, String qualifie, String sampleType, Page page); Page findReviewedPage(String startDate, String endDate, List stationIdList, String qualifie, Page page); diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/xml/GardsSampleDataWebMapper.xml b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/xml/GardsSampleDataWebMapper.xml index 065c2899..aea22575 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/xml/GardsSampleDataWebMapper.xml +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/mapper/xml/GardsSampleDataWebMapper.xml @@ -42,6 +42,9 @@ AND sam.SPECTRAL_QUALIFIE = #{qualifie} + + AND sam.SAMPLE_TYPE = #{sampleType} + ORDER BY sam.ACQUISITION_START DESC diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/IAutoService.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/IAutoService.java index 97182440..138b5d8b 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/IAutoService.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/IAutoService.java @@ -10,7 +10,7 @@ import java.util.Date; public interface IAutoService extends IService { - Result findAutoPage(QueryRequest queryRequest, Integer[] stationIds, String qualifie, Date startTime, Date endTime); + Result findAutoPage(QueryRequest queryRequest, Integer[] stationIds, String qualifie, String sampleType,Date startTime, Date endTime); GardsAnalyses getOne(Integer sampleId); diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/AutoServiceImpl.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/AutoServiceImpl.java index 4294f92c..9da79ffa 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/AutoServiceImpl.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/AutoServiceImpl.java @@ -45,7 +45,7 @@ public class AutoServiceImpl extends ServiceImpl stationMap = (Map)redisUtil.get("stationMap"); @@ -66,7 +66,7 @@ public class AutoServiceImpl extends ServiceImpl page = new Page<>(queryRequest.getPageNo(), queryRequest.getPageSize()); - Page sampleDataPage = gardsSampleDataWebMapper.findAutoPage(startDate, endDate, stationIdList, qualifie, page); + Page sampleDataPage = gardsSampleDataWebMapper.findAutoPage(startDate, endDate, stationIdList, qualifie, sampleType, page); sampleDataPage.getRecords().forEach(item->{ item.setSiteDetCode(StringUtils.trim(item.getSiteDetCode())); if (stationMap.containsKey(item.getStationId().toString()) && CollectionUtils.isNotEmpty(stationMap)){