diff --git a/docs/databases/tables_create.sql b/docs/databases/tables_create.sql index 29ef738..aee8aa8 100644 --- a/docs/databases/tables_create.sql +++ b/docs/databases/tables_create.sql @@ -29,4 +29,16 @@ CREATE TABLE `push_cids` ( `userPhone` varchar(100) DEFAULT NULL COMMENT '用户手机号', `userId` bigint(32) DEFAULT NULL COMMENT '用户ID', PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +CREATE TABLE `sys_message_task` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `user_id` int(11) NOT NULL DEFAULT '1' COMMENT '用户id', + `code` varchar(60) DEFAULT '系统消息' COMMENT '消息编码', + `params` varchar(5000) DEFAULT NULL COMMENT '参数', + `content` text COMMENT '内容', + `sendtime` date NOT NULL COMMENT '发送时间', + `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '0未发送,1已发送', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='定时消息'; \ No newline at end of file diff --git a/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java b/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java index 4d4a8de..ca6ee2a 100644 --- a/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java +++ b/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java @@ -1,16 +1,22 @@ package com.zscat.mallplus.unipush; +import cn.hutool.json.JSONUtil; import com.getui.push.v2.sdk.ApiHelper; import com.getui.push.v2.sdk.GtApiConfiguration; import com.getui.push.v2.sdk.api.PushApi; import com.getui.push.v2.sdk.common.ApiResult; import com.getui.push.v2.sdk.dto.req.Audience; +import com.getui.push.v2.sdk.dto.req.AudienceDTO; import com.getui.push.v2.sdk.dto.req.message.PushDTO; import com.getui.push.v2.sdk.dto.req.message.PushMessage; import com.getui.push.v2.sdk.dto.req.message.android.GTNotification; +import com.getui.push.v2.sdk.dto.res.TaskIdDTO; +import com.zscat.mallplus.ums.entity.SysMessage; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @Component @@ -130,9 +136,152 @@ public class UniPushService { } + public void testlist() { + String taskid = createMessageTaskaa(); + AudienceDTO pdto = new AudienceDTO(); + + Audience audience = new Audience(); + audience.addCid("89e286aee78d38faf748a690e603b1a3"); + audience.addCid("e4a96929cc5f40c886cb517853356bc2"); + + pdto.setAudience(audience); + pdto.setTaskid(taskid); + + ApiResult>> mapApiResult = singlePushApi().pushListByCid(pdto); + + System.out.println(mapApiResult); + } + + public String createMessageTaskaa() { + PushDTO pdto = new PushDTO<>(); + pdto.setGroupName("群发消息"); + + + PushMessage pushMessage = new PushMessage(); + + GTNotification notification = new GTNotification(); + notification.setTitle("测试Titleaa"); + notification.setBody("测试BodyXaa"); + + SysMessage msg = new SysMessage(); + msg.setId(11); + msg.setUserId(1); + msg.setCode("云链助手"); + msg.setParams("欢迎"); + msg.setContent("欢迎注册汇融云链~"); + msg.setCtime(System.currentTimeMillis()); + +// String payload = "{\"title\":\"lzh\",\"body\":\"liubody\",\"name\":\"hao\",\"userid\":101,\"msgtitle\":\"haha\"}"; + String payload = JSONUtil.toJsonStr(msg); + notification.setPayload(payload); + notification.setClickType("payload"); + + pushMessage.setNotification(notification); + + pdto.setPushMessage(pushMessage); + + ApiResult msgg = this.singlePushApi().createMsg(pdto); + System.out.println(msgg); + return msgg.getData().getTaskId(); + } + public static void main(String[] args) { - new UniPushService().test(); + List clist = new ArrayList<>(); + clist.add("079fb42d1f4f824a3defd471a432d0fe"); + clist.add("89e286aee78d38faf748a690e603b1a3"); + + SysMessage msg = new SysMessage(); + msg.setId(11); + msg.setUserId(1); + msg.setCode("交易物流"); + msg.setParams("ABC"); + msg.setContent("欢迎注册汇融云链~"); + msg.setCtime(System.currentTimeMillis()); + new UniPushService().sendPush(msg, clist); +// new UniPushService().testlist(); + } + + private static String imgUrltx = "http://mall.yyundong.com/tx.png"; + private static String imgUrltz = "http://mall.yyundong.com/tz.png"; + private static String imgUrlwl = "http://mall.yyundong.com/wl.png"; + + public void sendPush(SysMessage mess, List cids) { + String code = mess.getCode(); + if ("系统消息".equals(code)) { + sendTzMsg(mess); + } else { + sendUserMsg(mess, cids); + } + } + private void sendUserMsg(SysMessage mess, List cids) { + + if (cids == null || cids.isEmpty()) + return; + + String taskid = createMessageTask(mess); + AudienceDTO pdto = new AudienceDTO(); + + Audience audience = new Audience(); + cids.forEach(cid -> audience.addCid(cid)); + + pdto.setAudience(audience); + pdto.setTaskid(taskid); + + ApiResult>> mapApiResult = singlePushApi().pushListByCid(pdto); + + } + + private void sendTzMsg(SysMessage mess) { + + PushDTO pd = new PushDTO<>(); + pd.setRequestId("all" + System.currentTimeMillis()); + pd.setGroupName("system_notice"); + pd.setAudience("all"); + + pd.setPushMessage(createPushMessage(mess)); + + ApiResult taskIdDTOApiResult = singlePushApi().pushAll(pd); +// System.out.println(taskIdDTOApiResult); + } + + private PushMessage createPushMessage(SysMessage mess) { + + String code = mess.getCode(); + PushMessage pushMessage = new PushMessage(); + + GTNotification notification = new GTNotification(); +// notification.setTitle(code); +// notification.setBody(mess.getParams()); + notification.setTitle(mess.getParams()); + notification.setBody(mess.getContent()); + if ("交易物流".equals(code)) { + notification.setLogoUrl(imgUrlwl); + } else if ("云链助手".equals(code)) { + notification.setLogoUrl(imgUrltx); + } else { + notification.setLogoUrl(imgUrltz); + } + String payload = JSONUtil.toJsonStr(mess); + notification.setPayload(payload); + notification.setClickType("payload"); +// notification.setClickType("payload_custom"); + + pushMessage.setNotification(notification); + + return pushMessage; + } + + private String createMessageTask(SysMessage mess) { + PushDTO pdto = new PushDTO<>(); + pdto.setGroupName("tolist"); + + pdto.setPushMessage(createPushMessage(mess)); + + ApiResult result = this.singlePushApi().createMsg(pdto); +// System.out.println(msgg); + return result.getData().getTaskId(); + } } diff --git a/mallplus-admin/src/main/resources/application-dev.properties b/mallplus-admin/src/main/resources/application-dev.properties index 7f32296..225d647 100644 --- a/mallplus-admin/src/main/resources/application-dev.properties +++ b/mallplus-admin/src/main/resources/application-dev.properties @@ -18,11 +18,11 @@ spring.redis.pool.min-idle=0 # \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09 spring.redis.timeout=0 #===redis end=== -spring.datasource.url=jdbc:mysql://8.130.39.13:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 -#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 +#spring.datasource.url=jdbc:mysql://8.130.39.13:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 +spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mallplus1?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 spring.datasource.username=root -#spring.datasource.password=root -spring.datasource.password=1LAiGz$t1*Iw +spring.datasource.password=root +#spring.datasource.password=1LAiGz$t1*Iw spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initialSize=5 diff --git a/mallplus-mbg/src/main/java/com/zscat/mallplus/ums/entity/SysMessage.java b/mallplus-mbg/src/main/java/com/zscat/mallplus/ums/entity/SysMessage.java index cdd8cdf..1884a60 100644 --- a/mallplus-mbg/src/main/java/com/zscat/mallplus/ums/entity/SysMessage.java +++ b/mallplus-mbg/src/main/java/com/zscat/mallplus/ums/entity/SysMessage.java @@ -64,7 +64,7 @@ public class SysMessage implements Serializable { public String getCdate() { String cdate = ""; if (ctime != null && ctime > 0) { - cdate = DateUtil.format(new Date(ctime), "yyyy-MM-dd"); + cdate = DateUtil.format(new Date(ctime), "yyyy-MM-dd hh:mm:ss"); } return cdate; } @@ -72,7 +72,7 @@ public class SysMessage implements Serializable { public String getUdate() { String udate = ""; if (utime != null && utime > 0) { - udate = DateUtil.format(new Date(utime), "yyyy-MM-dd"); + udate = DateUtil.format(new Date(utime), "yyyy-MM-dd hh:mm:ss"); } return udate; } diff --git a/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/entity/PushCids.java b/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/entity/PushCids.java index 69ecf06..9fedf0d 100644 --- a/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/entity/PushCids.java +++ b/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/entity/PushCids.java @@ -26,6 +26,7 @@ package com.zscat.mallplus.unipush.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -66,7 +67,10 @@ public class PushCids implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; + @TableField("getuiCid") private String getuiCid;// 个推的ClientID + @TableField("userPhone") private String userPhone;// 用户手机号 + @TableField("userId") private Long userId;// 用户ID } diff --git a/mallplus-mbg/src/main/java/com/zscat/mallplus/utils/PhoneUtil.java b/mallplus-mbg/src/main/java/com/zscat/mallplus/utils/PhoneUtil.java index 30cf3f9..186aa3f 100644 --- a/mallplus-mbg/src/main/java/com/zscat/mallplus/utils/PhoneUtil.java +++ b/mallplus-mbg/src/main/java/com/zscat/mallplus/utils/PhoneUtil.java @@ -10,7 +10,8 @@ import java.util.regex.Pattern; */ public class PhoneUtil { - private static String REGEX = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$"; + private static String REGEX = "^(1[3-9])\\d{9}$"; +// private static String REGEX = "^((13[0-9])|(14[0-9])|(15([0-9]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$"; private static Pattern P = Pattern.compile(REGEX); /** diff --git a/mallplus-portal/src/main/java/com/zscat/mallplus/single/SingelHomeController.java b/mallplus-portal/src/main/java/com/zscat/mallplus/single/SingelHomeController.java index b35466e..4683598 100644 --- a/mallplus-portal/src/main/java/com/zscat/mallplus/single/SingelHomeController.java +++ b/mallplus-portal/src/main/java/com/zscat/mallplus/single/SingelHomeController.java @@ -368,7 +368,7 @@ public class SingelHomeController { log.info("用户名或密码错误"); return new CommonResult().failed("用户名或密码错误"); } - if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone)) { + if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone) && !"null".equals(cid)) { ThreadUtil.execute(() -> pushCidsService.bindPhone(cid, phone)); } return new CommonResult().success(token); @@ -399,7 +399,7 @@ public class SingelHomeController { if (token.get("token") == null) { return new CommonResult().validateFailed("用户名或密码错误"); } - if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone)) { + if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone) && !"null".equals(cid)) { ThreadUtil.execute(() -> pushCidsService.bindPhone(cid, phone)); } return new CommonResult().success(token); @@ -470,6 +470,12 @@ public class SingelHomeController { if (StringUtils.isBlank(type)) { return new CommonResult().failed("参数错误:type"); } + + UmsMember byUsername = memberService.getByUsername(phone); + if (byUsername == null) { + return new CommonResult().failed("该手机号未注册!"); + } + //缓存识别码 String redisKey = ""; if (SmsEnum.SendEnum.LOGIN.getCode().equals(type)) { @@ -616,8 +622,9 @@ public class SingelHomeController { @ApiOperation(value = "登出功能") @RequestMapping(value = "/logout", method = RequestMethod.POST) @ResponseBody - public Object logout() { + public Object logout(@RequestParam("cid") String cid) { SecurityContextHolder.getContext().setAuthentication(null); + ThreadUtil.execute(() -> pushCidsService.unbindPhone(cid)); return new CommonResult().success(null); } @@ -629,6 +636,6 @@ public class SingelHomeController { if (StringUtils.isNotBlank(cid)) { ThreadUtil.execute(() -> pushCidsService.pushCid(cid)); } - return new CommonResult().success(); + return new CommonResult().success("OK"); } } diff --git a/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/PushCidsService.java b/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/PushCidsService.java index 568ac0c..d8bf718 100644 --- a/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/PushCidsService.java +++ b/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/PushCidsService.java @@ -25,6 +25,7 @@ *********************************************************/ package com.zscat.mallplus.unipush; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -69,10 +70,8 @@ public class PushCidsService extends ServiceImpl { if (list != null && list.size() == 1) { // 只有一条cid数据,判断是否和手机号相同 PushCids pc = list.get(0); if (!phone.equals(pc.getUserPhone())) { // 手机号不同或为空,更新手机号 - UpdateWrapper uw = new UpdateWrapper<>(); - uw.set("userPhone", phone); - uw.eq("getuiCid", cid); - baseMapper.update(null, uw); + pc.setUserPhone(phone); + baseMapper.updateById(pc); } return; } @@ -91,4 +90,13 @@ public class PushCidsService extends ServiceImpl { uw.eq("getuiCid", cid); baseMapper.delete(uw); } + + public void unbindPhone(String cid) { + if (StrUtil.isBlank(cid)) + return; + UpdateWrapper uw = new UpdateWrapper<>(); + uw.set("userPhone", ""); + uw.eq("getuiCid", cid); + baseMapper.update(null, uw); + } } diff --git a/mallplus-portal/src/main/resources/application-dev.properties b/mallplus-portal/src/main/resources/application-dev.properties index 74d8c60..763a2a7 100644 --- a/mallplus-portal/src/main/resources/application-dev.properties +++ b/mallplus-portal/src/main/resources/application-dev.properties @@ -44,7 +44,8 @@ spring.redis.host=127.0.0.1 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u7AEF\u53E3 spring.redis.port=6379 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09 -spring.redis.password=123456 +spring.redis.password= +#spring.redis.password=123456 # \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 spring.redis.pool.max-active=8 # \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 diff --git a/mallplus-portal/src/main/resources/application.properties b/mallplus-portal/src/main/resources/application.properties index 7c28e74..e2058c6 100644 --- a/mallplus-portal/src/main/resources/application.properties +++ b/mallplus-portal/src/main/resources/application.properties @@ -53,10 +53,10 @@ oss.aliyun.first.bucketName=yxt-sc oss.aliyun.first.endPoint=oss-cn-huhehaote.aliyuncs.com oss.aliyun.first.styleName= oss.aliyun.first.prefix=web -oss.aliyun.second.accessKeyId=\u02A1\uFFFD\uFFFD... -oss.aliyun.second.accessKeySecret=\u02A1\uFFFD\uFFFD... -oss.aliyun.second.accessKeyId=\u7701\u951F\u65A4\u62F7... -oss.aliyun.second.accessKeySecret=\u7701\u951F\u65A4\u62F7... +#oss.aliyun.second.accessKeyId=\u02A1\uFFFD\uFFFD... +#oss.aliyun.second.accessKeySecret=\u02A1\uFFFD\uFFFD... +#oss.aliyun.second.accessKeyId=\u7701\u951F\u65A4\u62F7... +#oss.aliyun.second.accessKeySecret=\u7701\u951F\u65A4\u62F7... oss.aliyun.second.bucketName=peterjava oss.aliyun.second.endPoint=oss-cn-huhehaote.aliyuncs.com oss.aliyun.second.styleName= diff --git a/mallplusui-web-admin/config/dev.env.js b/mallplusui-web-admin/config/dev.env.js index 9253274..1fbcfe6 100644 --- a/mallplusui-web-admin/config/dev.env.js +++ b/mallplusui-web-admin/config/dev.env.js @@ -4,7 +4,7 @@ const prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"development"', - BASE_API: '"http://mall.yyundong.com/adminapi"', + // BASE_API: '"http://mall.yyundong.com/adminapi"', // BASE_API: '"http://192.168.3.9:8085"' - // BASE_API: '"http://127.0.0.1:8085"' + BASE_API: '"http://127.0.0.1:8085"' }) diff --git a/mallplusui-web-admin/static/tz.png b/mallplusui-web-admin/static/tz.png new file mode 100644 index 0000000..747a340 Binary files /dev/null and b/mallplusui-web-admin/static/tz.png differ diff --git a/mallplusui-web-admin/static/tzf.png b/mallplusui-web-admin/static/tzf.png new file mode 100644 index 0000000..31b93a4 Binary files /dev/null and b/mallplusui-web-admin/static/tzf.png differ diff --git a/mallplusui-web-admin/static/tzy.png b/mallplusui-web-admin/static/tzy.png new file mode 100644 index 0000000..747a340 Binary files /dev/null and b/mallplusui-web-admin/static/tzy.png differ