diff --git a/docs/databases/tables_create.sql b/docs/databases/tables_create.sql index ab4bf23..29ef738 100644 --- a/docs/databases/tables_create.sql +++ b/docs/databases/tables_create.sql @@ -19,4 +19,14 @@ insert into app_version(versionCode,versionName,downloadUrl,versionInfo,fileName values (1002,'1.0.0.2','http://mall.yyundong.com/apks/mall-1002.apk','BUG修复,功能完善','mall-1002.apk') insert into app_version(versionCode,versionName,downloadUrl,versionInfo,fileName) -values (1003,'1.0.0.3','http://mall.yyundong.com/apks/mall-1003.apk','登录方式切换的Bug修复;登录及退出后本地缓存数据问题的修复。','mall-1003.apk') \ No newline at end of file +values (1003,'1.0.0.3','http://mall.yyundong.com/apks/mall-1003.apk','登录方式切换的Bug修复;登录及退出后本地缓存数据问题的修复。','mall-1003.apk') + + + +CREATE TABLE `push_cids` ( + `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号', + `getuiCid` varchar(100) NOT NULL COMMENT '个推的ClientID', + `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 diff --git a/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/UniPushService.java b/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java similarity index 76% rename from mallplus-portal/src/main/java/com/zscat/mallplus/unipush/UniPushService.java rename to mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java index 8e063d1..4d4a8de 100644 --- a/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/UniPushService.java +++ b/mallplus-admin/src/main/java/com/zscat/mallplus/unipush/UniPushService.java @@ -5,11 +5,10 @@ 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.message.PushChannel; import com.getui.push.v2.sdk.dto.req.message.PushDTO; import com.getui.push.v2.sdk.dto.req.message.PushMessage; -import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO; import com.getui.push.v2.sdk.dto.req.message.android.GTNotification; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Map; @@ -17,6 +16,36 @@ import java.util.Map; @Component public class UniPushService { + // @Value("${unipush.appid:UBUIDJ8NQm50rGJsB6LYx1}") + // private String appid; + + private static String apiurl = "https://restapi.getui.com/v2/"; + private static String appid = "UBUIDJ8NQm50rGJsB6LYx1"; + private static String appkey = "RS3UZfeS509hcNEkmfS6R"; + private static String appsecret = "6QuFcPWFga8DQzSa03ruR7"; + private static String mastersecret = "6fjUinwRfDA3BcEnDQvTl5"; + private static String apppackage = "org.jbase.yxt.yyd.pyw"; + + private static PushApi pushApi = null; + + private PushApi singlePushApi() { + if (pushApi == null) { + System.setProperty("http.maxConnections", "200"); + GtApiConfiguration apiConfiguration = new GtApiConfiguration(); + //填写应用配置 + apiConfiguration.setAppId(appid); + apiConfiguration.setAppKey(appkey); + apiConfiguration.setMasterSecret(mastersecret); + // 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId + apiConfiguration.setDomain(apiurl); + // 实例化ApiHelper对象,用于创建接口对象 + ApiHelper apiHelper = ApiHelper.build(apiConfiguration); + // 创建对象,建议复用。目前有PushApi、StatisticApi、UserApi + pushApi = apiHelper.creatApi(PushApi.class); + } + return pushApi; + } + public void test() { // 设置httpClient最大连接数,当并发较大时建议调大此参数。或者启动参数加上 -Dhttp.maxConnections=200 @@ -106,5 +135,4 @@ public class UniPushService { } - } diff --git a/mallplus-admin/src/main/resources/application.properties b/mallplus-admin/src/main/resources/application.properties index 0288546..e32d32c 100644 --- a/mallplus-admin/src/main/resources/application.properties +++ b/mallplus-admin/src/main/resources/application.properties @@ -82,4 +82,11 @@ jwt.secret=mySecret jwt.expiration=604800 #JWT\u8D1F\u8F7D\u4E2D\u62FF\u5230\u5F00\u5934 jwt.tokenHead=Bearer -#===JWT end=== \ No newline at end of file +#===JWT end=== + +unipush.baseurl=https://restapi.getui.com/v2/UBUIDJ8NQm50rGJsB6LYx1 +unipush.appid=UBUIDJ8NQm50rGJsB6LYx1 +unipush.appkey=RS3UZfeS509hcNEkmfS6R +unipush.appsecret=6QuFcPWFga8DQzSa03ruR7 +unipush.mastersecret=6fjUinwRfDA3BcEnDQvTl5 +unipush.apppackage=org.jbase.yxt.yyd.pyw \ No newline at end of file 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 new file mode 100644 index 0000000..69ecf06 --- /dev/null +++ b/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/entity/PushCids.java @@ -0,0 +1,72 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.zscat.mallplus.unipush.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; + +/** + * Project: mallplus
+ * File: PushCids.java
+ * Class: com.zscat.mallplus.unipush.entity.PushCids
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023/3/16 21:36
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@TableName("push_cids") +public class PushCids implements Serializable { + + private static final long serialVersionUID = 1L; + + public PushCids() { + } + + public PushCids(String getuiCid) { + this.getuiCid = getuiCid; + } + + public PushCids(String getuiCid, String userPhone) { + this.getuiCid = getuiCid; + this.userPhone = userPhone; + } + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private String getuiCid;// 个推的ClientID + private String userPhone;// 用户手机号 + private Long userId;// 用户ID +} diff --git a/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/mapper/PushCidsMapper.java b/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/mapper/PushCidsMapper.java new file mode 100644 index 0000000..dc13d74 --- /dev/null +++ b/mallplus-mbg/src/main/java/com/zscat/mallplus/unipush/mapper/PushCidsMapper.java @@ -0,0 +1,45 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.zscat.mallplus.unipush.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zscat.mallplus.unipush.entity.PushCids; + +/** + * Project: mallplus
+ * File: PushCidsMapper.java
+ * Class: com.zscat.mallplus.unipush.entity.PushCidsMapper
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023/3/16 21:46
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +public interface PushCidsMapper extends BaseMapper { +} diff --git a/mallplus-portal/pom.xml b/mallplus-portal/pom.xml index 1b5a753..c90a4f6 100644 --- a/mallplus-portal/pom.xml +++ b/mallplus-portal/pom.xml @@ -204,12 +204,12 @@ wsdl4j 1.6.3 - - com.getui.push - restful-sdk - 1.0.0.11 - compile - + + + + + + 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 c62daeb..b35466e 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 @@ -1,6 +1,7 @@ package com.zscat.mallplus.single; +import cn.hutool.core.thread.ThreadUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zscat.mallplus.annotation.IgnoreAuth; @@ -25,6 +26,7 @@ import com.zscat.mallplus.ums.service.IAdminSysNoticeService; import com.zscat.mallplus.ums.service.IUmsMemberLocationService; import com.zscat.mallplus.ums.service.IUmsMemberService; import com.zscat.mallplus.ums.service.RedisService; +import com.zscat.mallplus.unipush.PushCidsService; import com.zscat.mallplus.util.JsonUtils; import com.zscat.mallplus.util.OssAliyunUtil; import com.zscat.mallplus.utils.CommonResult; @@ -98,10 +100,14 @@ public class SingelHomeController { @Resource private MallplusProperties mallplusProperties; + @Resource + private PushCidsService pushCidsService; + @RequestMapping(value = "/sysInfo", method = RequestMethod.GET) public Object sysInfo() { return new CommonResult().success(mallplusProperties); } + @IgnoreAuth @ApiOperation("首页内容页信息展示") @SysLog(MODULE = "home", REMARK = "首页内容页信息展示") @@ -348,7 +354,8 @@ public class SingelHomeController { @ApiOperation(value = "手机号 密码登录") @PostMapping(value = "/login") public Object login(@RequestParam("phone") String phone, - @RequestParam("password") String password) { + @RequestParam("password") String password, + @RequestParam(required = false) String cid) { if (phone == null || "".equals(phone)) { return new CommonResult().validateFailed("用户名或密码错误"); } @@ -361,6 +368,9 @@ public class SingelHomeController { log.info("用户名或密码错误"); return new CommonResult().failed("用户名或密码错误"); } + if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone)) { + ThreadUtil.execute(() -> pushCidsService.bindPhone(cid, phone)); + } return new CommonResult().success(token); } catch (AuthenticationException e) { log.info("用户名或密码错误"); @@ -376,7 +386,8 @@ public class SingelHomeController { @ApiOperation(value = "手机和验证码登录") @PostMapping(value = "/loginByCode") public Object loginByCode(@RequestParam String phone, - @RequestParam String authCode) { + @RequestParam String authCode, + @RequestParam(required = false) String cid) { if (phone == null || "".equals(phone)) { return new CommonResult().validateFailed("用户名或密码错误"); } @@ -388,6 +399,9 @@ public class SingelHomeController { if (token.get("token") == null) { return new CommonResult().validateFailed("用户名或密码错误"); } + if (StringUtils.isNotBlank(cid) && StringUtils.isNotBlank(phone)) { + ThreadUtil.execute(() -> pushCidsService.bindPhone(cid, phone)); + } return new CommonResult().success(token); } catch (AuthenticationException e) { return new CommonResult().validateFailed("用户名或密码错误"); @@ -448,19 +462,19 @@ public class SingelHomeController { @IgnoreAuth @ApiOperation("获取验证码") @PostMapping(value = "/sms/codes") - public Object sendSmsCode(@RequestParam("phone") String phone,@RequestParam(value = "type")String type) { + public Object sendSmsCode(@RequestParam("phone") String phone, @RequestParam(value = "type") String type) { try { if (!PhoneUtil.checkPhone(phone)) { throw new IllegalArgumentException("手机号格式不正确"); } - if(StringUtils.isBlank(type)){ + if (StringUtils.isBlank(type)) { return new CommonResult().failed("参数错误:type"); } //缓存识别码 String redisKey = ""; - if(SmsEnum.SendEnum.LOGIN.getCode().equals(type)){ + if (SmsEnum.SendEnum.LOGIN.getCode().equals(type)) { redisKey = REDIS_KEY_PREFIX_LOGIN_CODE; - }else if(SmsEnum.SendEnum.FORGET.getCode().equals(type)){ + } else if (SmsEnum.SendEnum.FORGET.getCode().equals(type)) { redisKey = REDIS_KEY_PREFIX_FORGET_CODE; } Date date = new Date(); @@ -473,7 +487,7 @@ public class SingelHomeController { return new CommonResult().failed("请等待一分钟后再次重试!"); } } - SmsCode smsCode = memberService.generateCode(phone,type,date); + SmsCode smsCode = memberService.generateCode(phone, type, date); return new CommonResult().success(smsCode); } catch (Exception e) { @@ -606,4 +620,15 @@ public class SingelHomeController { SecurityContextHolder.getContext().setAuthentication(null); return new CommonResult().success(null); } + + + @IgnoreAuth + @ApiOperation("提供unipush的ClientID") + @PostMapping(value = "/pushCid") + public Object pushCid(@RequestParam String cid) { + if (StringUtils.isNotBlank(cid)) { + ThreadUtil.execute(() -> pushCidsService.pushCid(cid)); + } + return new CommonResult().success(); + } } 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 new file mode 100644 index 0000000..568ac0c --- /dev/null +++ b/mallplus-portal/src/main/java/com/zscat/mallplus/unipush/PushCidsService.java @@ -0,0 +1,94 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.zscat.mallplus.unipush; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zscat.mallplus.unipush.entity.PushCids; +import com.zscat.mallplus.unipush.mapper.PushCidsMapper; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * Project: mallplus
+ * File: IPushCidsService.java
+ * Class: com.zscat.mallplus.unipush.service.IPushCidsService
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023/3/16 22:18
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Service +public class PushCidsService extends ServiceImpl { + public void pushCid(String cid) { + List list = listByCid(cid); + if (list == null || list.isEmpty()) { + baseMapper.insert(new PushCids(cid)); + } + } + + public List listByCid(String cid) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("getuiCid", cid); + return baseMapper.selectList(qw); + } + + public void bindPhone(String cid, String phone) { + List list = listByCid(cid); + 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); + } + return; + } + if (list == null || list.isEmpty()) { // 如果没有cid,直接插入 + baseMapper.insert(new PushCids(cid, phone)); + return; + } + + // cid不为空且多于1条,全部删除只保留一条 + deleteByCid(cid); + baseMapper.insert(new PushCids(cid, phone)); + } + + private void deleteByCid(String cid) { + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("getuiCid", cid); + baseMapper.delete(uw); + } +} diff --git a/mallplus-portal/src/main/resources/application.properties b/mallplus-portal/src/main/resources/application.properties index 26e4ee1..7c28e74 100644 --- a/mallplus-portal/src/main/resources/application.properties +++ b/mallplus-portal/src/main/resources/application.properties @@ -135,10 +135,3 @@ wxsubpay.partnerKey=xxxx wxsubpay.certPath=xxxx wxsubpay.domain=xxxx -unipush.baseurl=https://restapi.getui.com/v2/UBUIDJ8NQm50rGJsB6LYx1 -unipush.appid=UBUIDJ8NQm50rGJsB6LYx1 -unipush.appkey=RS3UZfeS509hcNEkmfS6R -unipush.appsecret=6QuFcPWFga8DQzSa03ruR7 -unipush.mastersecret=6fjUinwRfDA3BcEnDQvTl5 -unipush.apppackage=org.jbase.yxt.yyd.pyw -