diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java new file mode 100644 index 0000000..771798c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java @@ -0,0 +1,35 @@ +package com.casic.missiles.model.system; + +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 com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + @TableField("client_id") + private String clientId; + @TableField("user_id") + private Long userId; + @TableField("create_time") + private String createTime; + @TableField("update_time") + private String updateTime; + @TableField("tag") + private String tag; + @TableField("type") + private String type; + @TableField("enable") + private Integer enable; +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java new file mode 100644 index 0000000..771798c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java @@ -0,0 +1,35 @@ +package com.casic.missiles.model.system; + +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 com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + @TableField("client_id") + private String clientId; + @TableField("user_id") + private Long userId; + @TableField("create_time") + private String createTime; + @TableField("update_time") + private String updateTime; + @TableField("tag") + private String tag; + @TableField("type") + private String type; + @TableField("enable") + private Integer enable; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a94cbb9..d84792c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -39,6 +39,7 @@ import com.casic.missiles.model.system.UserInfo; import com.casic.missiles.model.workbench.WorkbenchRemindMessage; import com.casic.missiles.service.business.IBusinessDispatchService; +import com.casic.missiles.service.system.IMessagePushService; import com.casic.missiles.utils.DictCodeUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -68,6 +69,7 @@ private final MeterOrganizeMapper meterOrganizeMapper; private final MeterStaffMapper meterStaffMapper; private final UserInfoMapper userInfoMapper; + private final IMessagePushService messagePushService; /** * 终止、回退、收入、归还、催办按钮 @@ -282,6 +284,7 @@ WorkbenchRemindMessage remindMessage = initWorkbenchRemindMessage(labExecutiveInfo); int remindMessageAddFlag = remindMessageMapper.insert(remindMessage); if (remindMessageAddFlag > 0) { + Boolean sendFlag = messagePushService.pushToUser(remindMessage); return ReturnUtil.success(); } } @@ -292,9 +295,9 @@ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", TO_ALLOCATE) + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) - .or().eq("measure_status",IN_MEASURE)); + .or().eq("measure_status", IN_MEASURE)); List businessLabExecutiveInfo = labExecutiveInfoMapper.selectList(queryWrapper); return businessLabExecutiveInfo.isEmpty() ? null : businessLabExecutiveInfo.get(0); } @@ -319,9 +322,9 @@ if (!Objects.isNull(labExecutiveInfo.getMeasurePersonId()) && !MeasureStatusEnum.TO_ALLOCATE.equals(labExecutiveInfo.getMeasureStatus())) { MeterStaff meterStaff = meterStaffMapper.selectById(labExecutiveInfo.getMeasurePersonId()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("account",meterStaff.getAccount()); + wrapper.eq("account", meterStaff.getAccount()); UserInfo userInfo = userInfoMapper.selectOne(wrapper); - if(ObjectUtil.isEmpty(userInfo)){ + if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(BusinessExceptionEnum.NOT_FOUND_USER_INFO); } remindMessage.setRemindId(userInfo.getId()); @@ -330,12 +333,12 @@ remindMessage.setMessageTopic("部门检测"); //催办给部门组长(计量组织表负责人) Long directorId = null; - if(Objects.nonNull(labExecutiveInfo.getMeasureDeptId())){ + if (Objects.nonNull(labExecutiveInfo.getMeasureDeptId())) { directorId = meterOrganizeMapper.selectDeptDirectorByDeptId(labExecutiveInfo.getMeasureDeptId()); } - if(Objects.nonNull(directorId)){ + if (Objects.nonNull(directorId)) { remindMessage.setRemindId(directorId); - }else{ + } else { throw new BusinessException(BusinessExceptionEnum.UNABLE_TO_URGE); } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java new file mode 100644 index 0000000..771798c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java @@ -0,0 +1,35 @@ +package com.casic.missiles.model.system; + +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 com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + @TableField("client_id") + private String clientId; + @TableField("user_id") + private Long userId; + @TableField("create_time") + private String createTime; + @TableField("update_time") + private String updateTime; + @TableField("tag") + private String tag; + @TableField("type") + private String type; + @TableField("enable") + private Integer enable; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a94cbb9..d84792c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -39,6 +39,7 @@ import com.casic.missiles.model.system.UserInfo; import com.casic.missiles.model.workbench.WorkbenchRemindMessage; import com.casic.missiles.service.business.IBusinessDispatchService; +import com.casic.missiles.service.system.IMessagePushService; import com.casic.missiles.utils.DictCodeUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -68,6 +69,7 @@ private final MeterOrganizeMapper meterOrganizeMapper; private final MeterStaffMapper meterStaffMapper; private final UserInfoMapper userInfoMapper; + private final IMessagePushService messagePushService; /** * 终止、回退、收入、归还、催办按钮 @@ -282,6 +284,7 @@ WorkbenchRemindMessage remindMessage = initWorkbenchRemindMessage(labExecutiveInfo); int remindMessageAddFlag = remindMessageMapper.insert(remindMessage); if (remindMessageAddFlag > 0) { + Boolean sendFlag = messagePushService.pushToUser(remindMessage); return ReturnUtil.success(); } } @@ -292,9 +295,9 @@ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", TO_ALLOCATE) + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) - .or().eq("measure_status",IN_MEASURE)); + .or().eq("measure_status", IN_MEASURE)); List businessLabExecutiveInfo = labExecutiveInfoMapper.selectList(queryWrapper); return businessLabExecutiveInfo.isEmpty() ? null : businessLabExecutiveInfo.get(0); } @@ -319,9 +322,9 @@ if (!Objects.isNull(labExecutiveInfo.getMeasurePersonId()) && !MeasureStatusEnum.TO_ALLOCATE.equals(labExecutiveInfo.getMeasureStatus())) { MeterStaff meterStaff = meterStaffMapper.selectById(labExecutiveInfo.getMeasurePersonId()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("account",meterStaff.getAccount()); + wrapper.eq("account", meterStaff.getAccount()); UserInfo userInfo = userInfoMapper.selectOne(wrapper); - if(ObjectUtil.isEmpty(userInfo)){ + if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(BusinessExceptionEnum.NOT_FOUND_USER_INFO); } remindMessage.setRemindId(userInfo.getId()); @@ -330,12 +333,12 @@ remindMessage.setMessageTopic("部门检测"); //催办给部门组长(计量组织表负责人) Long directorId = null; - if(Objects.nonNull(labExecutiveInfo.getMeasureDeptId())){ + if (Objects.nonNull(labExecutiveInfo.getMeasureDeptId())) { directorId = meterOrganizeMapper.selectDeptDirectorByDeptId(labExecutiveInfo.getMeasureDeptId()); } - if(Objects.nonNull(directorId)){ + if (Objects.nonNull(directorId)) { remindMessage.setRemindId(directorId); - }else{ + } else { throw new BusinessException(BusinessExceptionEnum.UNABLE_TO_URGE); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 4858271..277ea15 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.config.ReminderNodeConfig; +import com.casic.missiles.config.message.ReminderNodeConfig; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java new file mode 100644 index 0000000..771798c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java @@ -0,0 +1,35 @@ +package com.casic.missiles.model.system; + +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 com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + @TableField("client_id") + private String clientId; + @TableField("user_id") + private Long userId; + @TableField("create_time") + private String createTime; + @TableField("update_time") + private String updateTime; + @TableField("tag") + private String tag; + @TableField("type") + private String type; + @TableField("enable") + private Integer enable; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a94cbb9..d84792c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -39,6 +39,7 @@ import com.casic.missiles.model.system.UserInfo; import com.casic.missiles.model.workbench.WorkbenchRemindMessage; import com.casic.missiles.service.business.IBusinessDispatchService; +import com.casic.missiles.service.system.IMessagePushService; import com.casic.missiles.utils.DictCodeUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -68,6 +69,7 @@ private final MeterOrganizeMapper meterOrganizeMapper; private final MeterStaffMapper meterStaffMapper; private final UserInfoMapper userInfoMapper; + private final IMessagePushService messagePushService; /** * 终止、回退、收入、归还、催办按钮 @@ -282,6 +284,7 @@ WorkbenchRemindMessage remindMessage = initWorkbenchRemindMessage(labExecutiveInfo); int remindMessageAddFlag = remindMessageMapper.insert(remindMessage); if (remindMessageAddFlag > 0) { + Boolean sendFlag = messagePushService.pushToUser(remindMessage); return ReturnUtil.success(); } } @@ -292,9 +295,9 @@ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", TO_ALLOCATE) + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) - .or().eq("measure_status",IN_MEASURE)); + .or().eq("measure_status", IN_MEASURE)); List businessLabExecutiveInfo = labExecutiveInfoMapper.selectList(queryWrapper); return businessLabExecutiveInfo.isEmpty() ? null : businessLabExecutiveInfo.get(0); } @@ -319,9 +322,9 @@ if (!Objects.isNull(labExecutiveInfo.getMeasurePersonId()) && !MeasureStatusEnum.TO_ALLOCATE.equals(labExecutiveInfo.getMeasureStatus())) { MeterStaff meterStaff = meterStaffMapper.selectById(labExecutiveInfo.getMeasurePersonId()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("account",meterStaff.getAccount()); + wrapper.eq("account", meterStaff.getAccount()); UserInfo userInfo = userInfoMapper.selectOne(wrapper); - if(ObjectUtil.isEmpty(userInfo)){ + if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(BusinessExceptionEnum.NOT_FOUND_USER_INFO); } remindMessage.setRemindId(userInfo.getId()); @@ -330,12 +333,12 @@ remindMessage.setMessageTopic("部门检测"); //催办给部门组长(计量组织表负责人) Long directorId = null; - if(Objects.nonNull(labExecutiveInfo.getMeasureDeptId())){ + if (Objects.nonNull(labExecutiveInfo.getMeasureDeptId())) { directorId = meterOrganizeMapper.selectDeptDirectorByDeptId(labExecutiveInfo.getMeasureDeptId()); } - if(Objects.nonNull(directorId)){ + if (Objects.nonNull(directorId)) { remindMessage.setRemindId(directorId); - }else{ + } else { throw new BusinessException(BusinessExceptionEnum.UNABLE_TO_URGE); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 4858271..277ea15 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.config.ReminderNodeConfig; +import com.casic.missiles.config.message.ReminderNodeConfig; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java new file mode 100644 index 0000000..487e1e9 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java @@ -0,0 +1,125 @@ +package com.casic.missiles.service.Impl.system; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.system.PushUserMessage; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.sys.MessagePushMapper; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.model.workbench.WorkbenchRemindMessage; +import com.casic.missiles.service.system.IMessagePushService; +import com.casic.missiles.utils.PushList; +import com.gexin.rp.sdk.base.IPushResult; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.function.Supplier; + +@Slf4j +@Service +@AllArgsConstructor +public class MessagePushServiceImpl extends ServiceImpl implements IMessagePushService { + + private final AbstractPermissionContext permissionService; + + /** + * 注册个推信息 + */ + @Override + public ReturnDTO registerGeTui(String clientid) { + Long userId = permissionService.getAuthService().getLoginUser().getId(); + UserPush userPush = initUserPush(userId, clientid); + UserPush old = this.baseMapper.getPushByUserId(userId, userPush.getType()); + int updateOrAddFlag = 0; + if (!ObjectUtil.isEmpty(old)) { + userPush.setId(old.getId()); + updateOrAddFlag = this.baseMapper.updateById(userPush); + } else { + updateOrAddFlag = this.baseMapper.insert(userPush); + } + if (updateOrAddFlag > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO setEnable(int enable) { + QueryWrapper pushQueryWrapper = new QueryWrapper<>(); + Long userId = permissionService.getAuthService().getLoginUser().getId(); + pushQueryWrapper.eq("user_id", userId); + UserPush userPush = new UserPush(); + userPush.setEnable(enable); + int updateFlag = this.baseMapper.update(userPush, pushQueryWrapper); + if (updateFlag > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + /** + * 获取用户推送信息 + */ + @Override + public ReturnDTO getUserPush() { + Long userId = permissionService.getAuthService().getLoginUser().getId(); + QueryWrapper pushQueryWrapper = new QueryWrapper<>(); + pushQueryWrapper.eq("user_id", userId); + List userPushList = this.baseMapper.selectList(pushQueryWrapper); + Optional userPushOptional = userPushList.stream().findFirst(); + UserPush userPush = userPushOptional.isPresent() ? userPushOptional.get() : null; + return ObjectUtil.isNotEmpty(userPush) ? ReturnUtil.success(userPush) : + ReturnUtil.failed(BusinessExceptionEnum.HANDLE_FAILED.getMessage()); + } + + + @Override + public Boolean pushToUser(WorkbenchRemindMessage remindMessage) { + PushUserMessage pushUserMessage = pushToUserTemplate(remindMessage); + List enableClientList = this.baseMapper.getEnableClientList(pushUserMessage.getUserIds()); + if (enableClientList.size() > 0) { + IPushResult pushResult = PushList.doPushToUser(enableClientList, pushUserMessage.getTitle(), pushUserMessage.getAppMsg()); + if ("ok".equals(pushResult.getResponse().get("result").toString())) { + log.debug("APP消息推送成功,客户端列表为{}",JSONObject.toJSON(enableClientList)); + return true; + } + } + log.info("APP消息推送推送失败,发送客户端缺失或发送失败,客户端列表为{}",JSONObject.toJSON(enableClientList)); + return false; + } + + private PushUserMessage pushToUserTemplate(WorkbenchRemindMessage remindMessage) { + PushUserMessage pushUserMessage = new PushUserMessage(); + List userIds=new ArrayList<>(); + if (remindMessage.getRemindId().equals(remindMessage.getRemindDeptId())) { + userIds.addAll(this.baseMapper.getUserIdsByDeptId(remindMessage.getRemindDeptId())); + } else { + userIds.add(remindMessage.getRemindId()); + } + pushUserMessage.setUserIds(userIds); + pushUserMessage.setTitle(remindMessage.getMessageTitle()); + pushUserMessage.setAppMsg(JSONObject.toJSONString(remindMessage)); + return pushUserMessage; + } + + private UserPush initUserPush(Long userId, String clientid) { + UserPush userPush = new UserPush(); + userPush.setType("GT"); + userPush.setUserId(userId); + userPush.setClientId(clientid); + userPush.setEnable(1); + return userPush; + } + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java new file mode 100644 index 0000000..c4d8b8b --- /dev/null +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/system/message/MessagePushController.java @@ -0,0 +1,47 @@ +package com.casic.missiles.controller.system.message; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.system.UserClientDTO; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.service.system.IMessagePushService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@AllArgsConstructor +@RequestMapping("/push") +public class MessagePushController { + + private final IMessagePushService messagePushService; + + + @RequestMapping("/app/registerGeTui") + public ReturnDTO geTuiRegister(@RequestBody @Valid UserClientDTO userClientDTO) { + Assert.isFalse(StringUtils.isEmpty(userClientDTO.getClientId()), () -> { + throw new BusinessException(BusinessExceptionEnum.CLIENT_ID_EMPTY); + }); + return messagePushService.registerGeTui(userClientDTO.getClientId()); + } + + + @RequestMapping("/app/enable") + public ReturnDTO setEnable(@RequestBody @Valid UserClientDTO userClientDTO){ + Assert.isFalse(ObjectUtil.isEmpty(userClientDTO.getEnable()), () -> { + throw new BusinessException(BusinessExceptionEnum.USER_ID_EMPTY); + }); + return messagePushService.setEnable(userClientDTO.getEnable()); + } + + @RequestMapping("/app/detail") + public ReturnDTO getUserPush() { + return messagePushService.getUserPush(); + } + +} diff --git a/casic-metering-api/src/main/resources/config/application.yml b/casic-metering-api/src/main/resources/config/application.yml index c749975..1791e6a 100644 --- a/casic-metering-api/src/main/resources/config/application.yml +++ b/casic-metering-api/src/main/resources/config/application.yml @@ -115,6 +115,10 @@ config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ file: dir: D:\cz\203\file + getui: + app-id: RoW3b4QCWH9EnYYiyaUJz5 #计量appid + app-key: fRjRIdibj47mBZV2Ru5Uf7 #app key + master-secret: yH3Otq5z5t6ZgNvENle0Z7 #代码生成器配置 code: generate: diff --git a/casic-metering-common/pom.xml b/casic-metering-common/pom.xml index c21a2b6..a662665 100644 --- a/casic-metering-common/pom.xml +++ b/casic-metering-common/pom.xml @@ -55,6 +55,28 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.gexin.platform + gexin-rp-fastjson + 1.0.0.3 + + + com.gexin.platform + gexin-rp-sdk-base + 4.0.0.30 + + + com.gexin.platform + gexin-rp-sdk-http + 4.1.0.5 + + + com.gexin.platform + gexin-rp-sdk-template + 4.0.0.24 + + org.flowable flowable-spring-boot-starter diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java deleted file mode 100644 index 4d41461..0000000 --- a/casic-metering-common/src/main/java/com/casic/missiles/config/ReminderNodeConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.missiles.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Data -@Configuration -@ConfigurationProperties( - prefix ="reminder.node" -) -public class ReminderNodeConfig { - - private String sampleCertificate; - - -} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java new file mode 100644 index 0000000..5f35fc4 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/PushProperties.java @@ -0,0 +1,16 @@ +package com.casic.missiles.config.message; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "casic.getui") +public class PushProperties { + private String appId = null; + private String appKey = null; + private String masterSecret = null; + + public PushProperties() { + } +} \ No newline at end of file diff --git a/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java new file mode 100644 index 0000000..831aaa5 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/config/message/ReminderNodeConfig.java @@ -0,0 +1,17 @@ +package com.casic.missiles.config.message; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +@ConfigurationProperties( + prefix ="reminder.node" +) +public class ReminderNodeConfig { + + private String sampleCertificate; + + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index 9c31e9c..d3c8aa7 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -81,7 +81,9 @@ OUTSOURCE_CERTIFICATE_NO_DATA(2428, "Excel文件无数据"), OUTSOURCE_CERTIFICATE_NO_DATA_ITEM(2429, "Excel文件中缺少必要数据项数据"), OUTSOURCE_CERTIFICATE_INCORRECT_DATA_ITEM(2430, "Excel文件中检测单位编号或样品编号或证书附件不正确"), - UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"); + UNABLE_TO_URGE(2431, "该部门不存在负责人,无法催办"), + USER_ID_EMPTY(2432, "用户id不能为空"), + CLIENT_ID_EMPTY(2433, "用户id不能为空"); private Integer code; private String message; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java new file mode 100644 index 0000000..023e0e1 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/PushList.java @@ -0,0 +1,113 @@ +package com.casic.missiles.utils; + +import com.casic.missiles.config.message.PushProperties; +import com.gexin.rp.sdk.base.IPushResult; +import com.gexin.rp.sdk.base.impl.ListMessage; +import com.gexin.rp.sdk.base.impl.Target; +import com.gexin.rp.sdk.base.payload.APNPayload; +import com.gexin.rp.sdk.http.IGtPush; +import com.gexin.rp.sdk.template.NotificationTemplate; +import com.gexin.rp.sdk.template.style.Style0; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by test203 on 2019/6/11. + */ + +@Component +public class PushList { + + // 采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换;; + private static PushProperties pushProperties; + private static String appId; + private static String appKey; + private static String masterSecret; + + @Autowired + public void setPushProperties(PushProperties pushProperties) { + PushList.pushProperties = pushProperties; + PushList.appId = pushProperties.getAppId(); + PushList.appKey = pushProperties.getAppKey(); + PushList.masterSecret = pushProperties.getMasterSecret(); + } + + //别名推送方式 + // static String Alias1 = ""; + // static String Alias2 = ""; + static String host = "http://sdk.open.api.igexin.com/apiex.htm"; + + public static IPushResult doPushToUser(List cids, String title, String content) { + // 配置返回每个用户返回用户状态,可选 + System.setProperty("gexin_pushList_needDetails", "true"); + // 配置返回每个别名及其对应cid的用户状态,可选 + IGtPush push = new IGtPush(host, appKey, masterSecret); + // 通知透传模板 + NotificationTemplate template = notificationTemplateDemo(title, content); + ListMessage message = new ListMessage(); + message.setData(template); + // 设置消息离线,并设置离线时间 + message.setOffline(true); + // 离线有效时间,单位为毫秒,可选 + message.setOfflineExpireTime(24 * 1000 * 3600); + // 配置推送目标 + List targets = new ArrayList(); + for (String cid : cids) { + Target target = new Target(); + target.setAppId(appId); + target.setClientId(cid); + targets.add(target); + } + // taskId用于在推送时去查找对应的message + String taskId = push.getContentId(message); + IPushResult ret = push.pushMessageToList(taskId, targets); + System.out.println(ret.getResponse().toString()); + return ret; + } + + public static NotificationTemplate notificationTemplateDemo(String title, String content) { + NotificationTemplate template = new NotificationTemplate(); + template.setAppId(appId); + template.setAppkey(appKey); + // 设置APPID与APPKEY + populateTemplateStyle(title, content, template); + populateTemplateIos(content,template); + // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 + template.setTransmissionType(1); + template.setTransmissionContent("请输入您要透传的内容"); + return template; + } + + private static void populateTemplateStyle(String title, String content, NotificationTemplate template) { + // 设置Android通知样式 + Style0 style = new Style0(); + // 设置通知栏标题与内容 + style.setTitle(title); + style.setText(content); + // 配置通知栏图标 + style.setLogo("icon.png"); + // 配置通知栏网络图标 + style.setLogoUrl(""); + // 设置通知是否响铃,震动,或者可清除 + style.setRing(true); + style.setVibrate(true); + style.setClearable(true); + template.setStyle(style); + } + + private static void populateTemplateIos(String content, NotificationTemplate template) { + // 设置IOS推送样式 + APNPayload payload = new APNPayload(); + //在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字 + payload.setAutoBadge("+1"); + payload.setContentAvailable(1); + //简单模式APNPayload.SimpleMsg + payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); + template.setAPNInfo(payload); + } + +} + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java new file mode 100644 index 0000000..ed26b4f --- /dev/null +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/sys/MessagePushMapper.java @@ -0,0 +1,16 @@ +package com.casic.missiles.mapper.sys; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.model.system.UserPush; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface MessagePushMapper extends BaseMapper { + + UserPush getPushByUserId(@Param("userId") Long userId, @Param("type") String type); + + List getUserIdsByDeptId(@Param("deptId") Long deptId); + List getEnableClientList(@Param("userIds") List userIds); + +} diff --git a/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml new file mode 100644 index 0000000..897a355 --- /dev/null +++ b/casic-metering-dao/src/main/resources/mapper/sys/MessagePushMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java new file mode 100644 index 0000000..ac9e4e4 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/PushUserMessage.java @@ -0,0 +1,12 @@ +package com.casic.missiles.dto.system; + +import lombok.Data; + +import java.util.List; + +@Data +public class PushUserMessage { + private String title; + private String appMsg; + private List userIds; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java new file mode 100644 index 0000000..7836d1a --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/system/UserClientDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.dto.system; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserClientDTO { + + @ApiModelProperty(value = "客户端id", dataType = "String") + private String clientId; + + @ApiModelProperty(value = "关闭/启动", dataType = "Integer") + private Integer enable; + +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java new file mode 100644 index 0000000..771798c --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/system/UserPush.java @@ -0,0 +1,35 @@ +package com.casic.missiles.model.system; + +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 com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Long id; + @TableField("client_id") + private String clientId; + @TableField("user_id") + private Long userId; + @TableField("create_time") + private String createTime; + @TableField("update_time") + private String updateTime; + @TableField("tag") + private String tag; + @TableField("type") + private String type; + @TableField("enable") + private Integer enable; +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java index a94cbb9..d84792c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/IBusinessDispatchServiceImpl.java @@ -39,6 +39,7 @@ import com.casic.missiles.model.system.UserInfo; import com.casic.missiles.model.workbench.WorkbenchRemindMessage; import com.casic.missiles.service.business.IBusinessDispatchService; +import com.casic.missiles.service.system.IMessagePushService; import com.casic.missiles.utils.DictCodeUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -68,6 +69,7 @@ private final MeterOrganizeMapper meterOrganizeMapper; private final MeterStaffMapper meterStaffMapper; private final UserInfoMapper userInfoMapper; + private final IMessagePushService messagePushService; /** * 终止、回退、收入、归还、催办按钮 @@ -282,6 +284,7 @@ WorkbenchRemindMessage remindMessage = initWorkbenchRemindMessage(labExecutiveInfo); int remindMessageAddFlag = remindMessageMapper.insert(remindMessage); if (remindMessageAddFlag > 0) { + Boolean sendFlag = messagePushService.pushToUser(remindMessage); return ReturnUtil.success(); } } @@ -292,9 +295,9 @@ QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("sample_id", deviceStatusChangeDTO.getSampleId()); queryWrapper.eq("order_id", deviceStatusChangeDTO.getOrderId()); - queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", TO_ALLOCATE) + queryWrapper.and(QueryWrapper -> QueryWrapper.eq("measure_status", MeasureStatusEnum.TO_ALLOCATE) .or().eq("measure_status", MeasureStatusEnum.TO_MEASURE) - .or().eq("measure_status",IN_MEASURE)); + .or().eq("measure_status", IN_MEASURE)); List businessLabExecutiveInfo = labExecutiveInfoMapper.selectList(queryWrapper); return businessLabExecutiveInfo.isEmpty() ? null : businessLabExecutiveInfo.get(0); } @@ -319,9 +322,9 @@ if (!Objects.isNull(labExecutiveInfo.getMeasurePersonId()) && !MeasureStatusEnum.TO_ALLOCATE.equals(labExecutiveInfo.getMeasureStatus())) { MeterStaff meterStaff = meterStaffMapper.selectById(labExecutiveInfo.getMeasurePersonId()); QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("account",meterStaff.getAccount()); + wrapper.eq("account", meterStaff.getAccount()); UserInfo userInfo = userInfoMapper.selectOne(wrapper); - if(ObjectUtil.isEmpty(userInfo)){ + if (ObjectUtil.isEmpty(userInfo)) { throw new BusinessException(BusinessExceptionEnum.NOT_FOUND_USER_INFO); } remindMessage.setRemindId(userInfo.getId()); @@ -330,12 +333,12 @@ remindMessage.setMessageTopic("部门检测"); //催办给部门组长(计量组织表负责人) Long directorId = null; - if(Objects.nonNull(labExecutiveInfo.getMeasureDeptId())){ + if (Objects.nonNull(labExecutiveInfo.getMeasureDeptId())) { directorId = meterOrganizeMapper.selectDeptDirectorByDeptId(labExecutiveInfo.getMeasureDeptId()); } - if(Objects.nonNull(directorId)){ + if (Objects.nonNull(directorId)) { remindMessage.setRemindId(directorId); - }else{ + } else { throw new BusinessException(BusinessExceptionEnum.UNABLE_TO_URGE); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java index 4858271..277ea15 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/customer/CustomerSampleServiceImpl.java @@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.casic.missiles.config.ReminderNodeConfig; +import com.casic.missiles.config.message.ReminderNodeConfig; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java new file mode 100644 index 0000000..487e1e9 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/MessagePushServiceImpl.java @@ -0,0 +1,125 @@ +package com.casic.missiles.service.Impl.system; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.system.PushUserMessage; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.sys.MessagePushMapper; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.model.workbench.WorkbenchRemindMessage; +import com.casic.missiles.service.system.IMessagePushService; +import com.casic.missiles.utils.PushList; +import com.gexin.rp.sdk.base.IPushResult; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.function.Supplier; + +@Slf4j +@Service +@AllArgsConstructor +public class MessagePushServiceImpl extends ServiceImpl implements IMessagePushService { + + private final AbstractPermissionContext permissionService; + + /** + * 注册个推信息 + */ + @Override + public ReturnDTO registerGeTui(String clientid) { + Long userId = permissionService.getAuthService().getLoginUser().getId(); + UserPush userPush = initUserPush(userId, clientid); + UserPush old = this.baseMapper.getPushByUserId(userId, userPush.getType()); + int updateOrAddFlag = 0; + if (!ObjectUtil.isEmpty(old)) { + userPush.setId(old.getId()); + updateOrAddFlag = this.baseMapper.updateById(userPush); + } else { + updateOrAddFlag = this.baseMapper.insert(userPush); + } + if (updateOrAddFlag > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + @Override + public ReturnDTO setEnable(int enable) { + QueryWrapper pushQueryWrapper = new QueryWrapper<>(); + Long userId = permissionService.getAuthService().getLoginUser().getId(); + pushQueryWrapper.eq("user_id", userId); + UserPush userPush = new UserPush(); + userPush.setEnable(enable); + int updateFlag = this.baseMapper.update(userPush, pushQueryWrapper); + if (updateFlag > 0) { + return ReturnUtil.success(); + } + throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); + } + + /** + * 获取用户推送信息 + */ + @Override + public ReturnDTO getUserPush() { + Long userId = permissionService.getAuthService().getLoginUser().getId(); + QueryWrapper pushQueryWrapper = new QueryWrapper<>(); + pushQueryWrapper.eq("user_id", userId); + List userPushList = this.baseMapper.selectList(pushQueryWrapper); + Optional userPushOptional = userPushList.stream().findFirst(); + UserPush userPush = userPushOptional.isPresent() ? userPushOptional.get() : null; + return ObjectUtil.isNotEmpty(userPush) ? ReturnUtil.success(userPush) : + ReturnUtil.failed(BusinessExceptionEnum.HANDLE_FAILED.getMessage()); + } + + + @Override + public Boolean pushToUser(WorkbenchRemindMessage remindMessage) { + PushUserMessage pushUserMessage = pushToUserTemplate(remindMessage); + List enableClientList = this.baseMapper.getEnableClientList(pushUserMessage.getUserIds()); + if (enableClientList.size() > 0) { + IPushResult pushResult = PushList.doPushToUser(enableClientList, pushUserMessage.getTitle(), pushUserMessage.getAppMsg()); + if ("ok".equals(pushResult.getResponse().get("result").toString())) { + log.debug("APP消息推送成功,客户端列表为{}",JSONObject.toJSON(enableClientList)); + return true; + } + } + log.info("APP消息推送推送失败,发送客户端缺失或发送失败,客户端列表为{}",JSONObject.toJSON(enableClientList)); + return false; + } + + private PushUserMessage pushToUserTemplate(WorkbenchRemindMessage remindMessage) { + PushUserMessage pushUserMessage = new PushUserMessage(); + List userIds=new ArrayList<>(); + if (remindMessage.getRemindId().equals(remindMessage.getRemindDeptId())) { + userIds.addAll(this.baseMapper.getUserIdsByDeptId(remindMessage.getRemindDeptId())); + } else { + userIds.add(remindMessage.getRemindId()); + } + pushUserMessage.setUserIds(userIds); + pushUserMessage.setTitle(remindMessage.getMessageTitle()); + pushUserMessage.setAppMsg(JSONObject.toJSONString(remindMessage)); + return pushUserMessage; + } + + private UserPush initUserPush(Long userId, String clientid) { + UserPush userPush = new UserPush(); + userPush.setType("GT"); + userPush.setUserId(userId); + userPush.setClientId(clientid); + userPush.setEnable(1); + return userPush; + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/system/IMessagePushService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/system/IMessagePushService.java new file mode 100644 index 0000000..ec1d650 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/system/IMessagePushService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.service.system; + +import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.model.system.UserPush; +import com.casic.missiles.model.workbench.WorkbenchRemindMessage; + +public interface IMessagePushService { + + ReturnDTO registerGeTui(String clientid); + + ReturnDTO setEnable(int enable); + + ReturnDTO getUserPush(); + + Boolean pushToUser(WorkbenchRemindMessage remindMessage); + +}