From fe634c3192ae868b08981b2314859b19a65ce605 Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Sun, 26 Feb 2023 05:45:54 +0800 Subject: [PATCH] =?UTF-8?q?:rocket:=20=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-cloud/Jenkins/docker-compose.yml | 17 ++++ .../kicc/commonbiz/api/entity/Message.java | 46 +++++++-- .../commonbiz/api/entity/PushApplication.java | 2 +- .../kicc/commonbiz/api/entity/UserPush.java | 36 +++++++ .../controller/MapTaskController.java | 2 - .../controller/MessageController.java | 1 - .../controller/PushApplicationController.java | 10 +- .../kicc/commonbiz/mapper/UserPushMapper.java | 16 +++ .../service/IPushApplicationService.java | 10 +- .../commonbiz/service/UserPushService.java | 16 +++ .../impl/PushApplicationServiceImpl.java | 97 ++++++++++++++++++- .../service/impl/UserPushServiceImpl.java | 20 ++++ .../kicc/commonbiz/util/PushClientUtil.java | 7 ++ .../main/resources/mapper/UserPushMapper.xml | 5 + 14 files changed, 269 insertions(+), 16 deletions(-) create mode 100644 docker-cloud/Jenkins/docker-compose.yml create mode 100644 kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/UserPush.java create mode 100644 kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/mapper/UserPushMapper.java create mode 100644 kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/UserPushService.java create mode 100644 kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/UserPushServiceImpl.java create mode 100644 kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/UserPushMapper.xml diff --git a/docker-cloud/Jenkins/docker-compose.yml b/docker-cloud/Jenkins/docker-compose.yml new file mode 100644 index 00000000..cd64ccf3 --- /dev/null +++ b/docker-cloud/Jenkins/docker-compose.yml @@ -0,0 +1,17 @@ +version: "3" +services: + jenkins: + image: jenkins/jenkins:lts + container_name: jenkins + hostname: jenkins + volumes: + - jenkins_home:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock + - /usr/bin/docker:/usr/bin/docker + - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose + restart: always + ports: + - 8080:8080 + +volumes: + jenkins_home: diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/Message.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/Message.java index b92b224b..6e817a2f 100644 --- a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/Message.java +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/Message.java @@ -1,18 +1,16 @@ package com.cloud.kicc.commonbiz.api.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.cloud.kicc.common.data.entity.CommonEntity; -import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; /** *

- * + * 消息发送 *

* * @author entfrm开发团队-王翔 @@ -21,7 +19,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @TableName("common_message") -@ApiModel(value = "Message对象", description = "") +@ApiModel(value = "Message对象") public class Message extends CommonEntity { private static final long serialVersionUID = 1L; @@ -29,8 +27,8 @@ public class Message extends CommonEntity { @ApiModelProperty("主键id") private String id; - @ApiModelProperty("消息名称") - private String name; + @ApiModelProperty("发送用户id") + private String sendUserId; @ApiModelProperty("消息类型") private String type; @@ -38,8 +36,38 @@ public class Message extends CommonEntity { @ApiModelProperty("消息状态 0-未读 1-已读") private String status; - @ApiModelProperty("消息内容") - private String content; + @ApiModelProperty("别名类型") + private String aliasType; + + @ApiModelProperty("别名,多个alias以英文逗号间隔") + private String alias; + + @ApiModelProperty("消息显示类型") + private String displayType; + + @ApiModelProperty("通知标题") + private String title; + + @ApiModelProperty("通知文字描述") + private String text; + + @ApiModelProperty("自定义通知声音 R.raw.[sound]") + private String sound; + + @ApiModelProperty("收到通知是否震动") + private Boolean playVibrate; + + @ApiModelProperty("收到通知是否闪灯") + private Boolean playLights; + + @ApiModelProperty("收到通知是否发出声音") + private Boolean playSound; + + @ApiModelProperty("自定义活动点击跳转内容") + private String custom; + @ApiModelProperty("app发送密钥") + @TableField(exist = false) + private String messageSecret; } diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushApplication.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushApplication.java index 2340f788..7f4919a6 100644 --- a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushApplication.java +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/PushApplication.java @@ -32,7 +32,7 @@ public class PushApplication extends CommonEntity { private String status; - private String url; + private String ip; private String messageSecret; diff --git a/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/UserPush.java b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/UserPush.java new file mode 100644 index 00000000..0dbd6b30 --- /dev/null +++ b/kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/entity/UserPush.java @@ -0,0 +1,36 @@ +package com.cloud.kicc.commonbiz.api.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + *

+ * 用户和消息推送关联表 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/2/24 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("sys_user_push") +public class UserPush implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private String userId; + + /** + * 推送ID + */ + private String pushId; + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MapTaskController.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MapTaskController.java index 60eb6957..9e04eed2 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MapTaskController.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MapTaskController.java @@ -12,14 +12,12 @@ import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.core.constant.SecurityConstants; import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.commonbiz.api.entity.*; -import com.cloud.kicc.commonbiz.api.enums.MapTaskStatusEnum; import com.cloud.kicc.commonbiz.service.*; import com.cloud.kicc.system.api.entity.User; import com.cloud.kicc.system.api.feign.RemoteUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Response; import org.springframework.web.bind.annotation.*; diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MessageController.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MessageController.java index 9d0bd7e6..46dc0d82 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MessageController.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/MessageController.java @@ -12,7 +12,6 @@ import com.cloud.kicc.commonbiz.service.IMessageService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.Arrays; diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java index 99e5445c..3f5908b6 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java @@ -8,9 +8,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; import com.cloud.kicc.common.log.annotation.SysLog; +import com.cloud.kicc.commonbiz.api.entity.MapLogisticPoint; +import com.cloud.kicc.commonbiz.api.entity.Message; import com.cloud.kicc.commonbiz.api.entity.PushApplication; import com.cloud.kicc.commonbiz.service.IPushApplicationService; import com.cloud.kicc.system.api.entity.OauthClientDetails; +import com.google.gson.JsonObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -77,7 +80,12 @@ public class PushApplicationController { } - + @PostMapping("/send") + @ApiOperation(value = "消息发送") + public R mapPresetPointConfirmPushMsgTest(@Valid @RequestBody Message message) { + iPushApplicationService.messageSend(message); + return R.ok(true); + } } diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/mapper/UserPushMapper.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/mapper/UserPushMapper.java new file mode 100644 index 00000000..f55f492c --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/mapper/UserPushMapper.java @@ -0,0 +1,16 @@ +package com.cloud.kicc.commonbiz.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.cloud.kicc.commonbiz.api.entity.UserPush; + +/** + *

+ * Mapper 接口 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/2/24 + */ +public interface UserPushMapper extends BaseMapper { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/IPushApplicationService.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/IPushApplicationService.java index 11088284..8c624f4a 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/IPushApplicationService.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/IPushApplicationService.java @@ -1,7 +1,8 @@ package com.cloud.kicc.commonbiz.service; -import com.cloud.kicc.commonbiz.api.entity.PushApplication; import com.baomidou.mybatisplus.extension.service.IService; +import com.cloud.kicc.commonbiz.api.entity.Message; +import com.cloud.kicc.commonbiz.api.entity.PushApplication; /** *

@@ -13,4 +14,11 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IPushApplicationService extends IService { + /** + * 消息发送 + * @param + * @return + */ + void messageSend(Message message); + } diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/UserPushService.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/UserPushService.java new file mode 100644 index 00000000..d54b4c98 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/UserPushService.java @@ -0,0 +1,16 @@ +package com.cloud.kicc.commonbiz.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.cloud.kicc.commonbiz.api.entity.UserPush; + +/** + *

+ * 服务类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/2/24 + */ +public interface UserPushService extends IService { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java index b80efc37..f5fb566a 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java @@ -1,10 +1,37 @@ package com.cloud.kicc.commonbiz.service.impl; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.common.core.api.R; +import com.cloud.kicc.common.core.constant.SecurityConstants; +import com.cloud.kicc.common.core.exception.CheckedException; +import com.cloud.kicc.commonbiz.api.entity.Message; import com.cloud.kicc.commonbiz.api.entity.PushApplication; +import com.cloud.kicc.commonbiz.api.entity.UserPush; import com.cloud.kicc.commonbiz.mapper.PushApplicationMapper; import com.cloud.kicc.commonbiz.service.IPushApplicationService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.service.UserPushService; +import com.cloud.kicc.commonbiz.util.PushClientUtil; +import com.cloud.kicc.system.api.entity.User; +import com.cloud.kicc.system.api.feign.RemoteUserService; +import lombok.RequiredArgsConstructor; +import okhttp3.OkHttpClient; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; /** *

@@ -15,6 +42,74 @@ import org.springframework.stereotype.Service; * @since 2023-02-16 */ @Service +@RequiredArgsConstructor +@Transactional(rollbackFor = Exception.class) public class PushApplicationServiceImpl extends ServiceImpl implements IPushApplicationService { + private final OkHttpClient okHttpClient; + private final UserPushService userPushService; + private final RemoteUserService remoteUserService; + + @Override + public void messageSend(Message message) { + + if (StrUtil.isBlank(message.getSendUserId()) || StrUtil.isBlank(message.getMessageSecret())) { + throw new CheckedException("当前发送用户ID与推送应用密钥必填!"); + } + R user = remoteUserService.selectByUserId(message.getSendUserId(), SecurityConstants.FROM_IN); + + // 第三方发送前较验数据 + if (user.getData().getUserType().equals("9")) { + PushApplication pushApplication = baseMapper.selectOne(Wrappers.lambdaQuery() + .eq(PushApplication::getMessageSecret, message.getMessageSecret()).eq(PushApplication::getStatus, "0")); + pushApplication = Optional.of(pushApplication).orElseThrow(() -> new CheckedException("你当前没有权限发送消息,请联系管理员!")); + HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); + // 如果ip地址存在即验证发送方ip + if (StrUtil.isNotBlank(pushApplication.getIp()) && !StrUtil.contains(pushApplication.getIp(), ServletUtil.getClientIP(request))) { + throw new CheckedException("你的ip地址不正确,请检查消息应用中设置的ip地址!"); + } + } + + List pushList = userPushService.list(Wrappers.lambdaQuery().eq(UserPush::getUserId, message.getSendUserId())); + if (ObjectUtil.isNotEmpty(pushList)) { + // 设置默认数据 + message.setDisplayType("notification"); + message.setAliasType(PushClientUtil.uPushUserAliasType); + message.setAlias(pushList.stream().map(item -> item.getPushId()).collect(Collectors.joining(","))); + JSONObject custom = new JSONObject(); + custom.put("sendUserId", message.getSendUserId()); + message.setCustom(custom.toString()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("production_mode", PushClientUtil.PRODUCTION_MODE); + jsonObject.put("type", "customizedcast"); + jsonObject.put("description", message.getRemarks()); + jsonObject.put("alias_type", message.getAliasType()); + jsonObject.put("alias", message.getAlias()); + JSONObject payload = new JSONObject(); + payload.put("display_type", message.getDisplayType()); + JSONObject body = new JSONObject(); + body.put("ticker", message.getTitle()); + body.put("text", message.getText()); + body.put("title", message.getTitle()); + body.put("sound", message.getSound()); + body.put("after_open", "go_custom"); + body.put("custom", message.getCustom()); + body.put("play_sound", message.getPlaySound()); + body.put("play_vibrate", message.getPlayVibrate()); + body.put("play_lights", message.getPlayLights()); + payload.put("body", body); + jsonObject.put("payload", payload); + JSONObject policy = new JSONObject(); + policy.put("expire_time", LocalDateTimeUtil.now().plusDays(3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + policy.put("out_biz_no", LocalDateTimeUtil.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + jsonObject.put("policy", policy); + try { + PushClientUtil pushClientUtil = new PushClientUtil(okHttpClient); + pushClientUtil.send(jsonObject); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/UserPushServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/UserPushServiceImpl.java new file mode 100644 index 00000000..48021223 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/UserPushServiceImpl.java @@ -0,0 +1,20 @@ +package com.cloud.kicc.commonbiz.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.commonbiz.api.entity.UserPush; +import com.cloud.kicc.commonbiz.mapper.UserPushMapper; +import com.cloud.kicc.commonbiz.service.UserPushService; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @Author: entfrm开发团队-王翔 + * @Date: 2022/2/24 + */ +@Service +public class UserPushServiceImpl extends ServiceImpl implements UserPushService { + +} diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/util/PushClientUtil.java b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/util/PushClientUtil.java index 2bb887cc..2ad96b0e 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/util/PushClientUtil.java +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/util/PushClientUtil.java @@ -22,6 +22,8 @@ public class PushClientUtil { private OkHttpClient okHttpClient; + public static final Boolean PRODUCTION_MODE = false; + protected final String USER_AGENT = "Mozilla/5.0"; protected static final String host = "http://msg.umeng.com"; @@ -40,6 +42,11 @@ public class PushClientUtil { this.okHttpClient = okHttpClient; } + public static void main(String[] args) { + System.out.println((System.currentTimeMillis())); + System.out.println((System.currentTimeMillis() / 1000)); + } + public boolean send(JSONObject jsonObject) throws Exception { // 配置消息推送参数 diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/UserPushMapper.xml b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/UserPushMapper.xml new file mode 100644 index 00000000..afca9173 --- /dev/null +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/mapper/UserPushMapper.xml @@ -0,0 +1,5 @@ + + + + +