From c511e991d1f17125ecf3ba2940f27fd85c0f5076 Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Sat, 24 May 2025 15:44:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E6=8E=A8=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/controller/WebController.java | 10 +- .../mall/account/RedisKeyManage/RedisKey.java | 6 ++ .../account/controller/LoginController.java | 1 - .../mobile/SinglePushController.java | 35 +++++++ .../account/mapper/UserDeviceBindMapper.java | 9 ++ .../service/AccountSinglePushService.java | 16 ++++ .../service/UserDeviceBindService.java | 14 +++ .../impl/AccountSinglePushServiceImpl.java | 62 +++++++++++++ .../impl/AccountUserBaseServiceImpl.java | 22 ++++- .../impl/UserDeviceBindServiceImpl.java | 60 ++++++++++++ .../mall/auth/controller/AuthController.java | 4 +- .../mall/auth/domain/Oauth2TokenDto.java | 4 + mall-common/pom.xml | 9 ++ .../mall/common/RedisKeyManage/RedisKey.java | 6 ++ .../common/feignService/AccountService.java | 3 + .../modules/singlepush/UserDeviceBind.java | 59 ++++++++++++ .../common/service/SinglePushBaseService.java | 12 +++ .../impl/SinglePushBaseServiceImpl.java | 93 +++++++++++++++++++ .../mall/common/utils/ContextUtil.java | 15 +-- .../src/main/resources/application-local.yml | 7 +- .../src/main/resources/application-prod.yml | 5 + .../src/main/resources/application-test.yml | 7 +- .../src/main/resources/application-uat.yml | 5 + mall-shop/pom.xml | 1 - .../controller/SyncThirdDataController.java | 14 +-- sql/shop/dev/20250522_ddl.sql | 13 +++ 26 files changed, 466 insertions(+), 26 deletions(-) create mode 100644 mall-account/src/main/java/com/suisung/mall/account/RedisKeyManage/RedisKey.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/controller/mobile/SinglePushController.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/mapper/UserDeviceBindMapper.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/service/AccountSinglePushService.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/service/UserDeviceBindService.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountSinglePushServiceImpl.java create mode 100644 mall-account/src/main/java/com/suisung/mall/account/service/impl/UserDeviceBindServiceImpl.java create mode 100644 mall-common/src/main/java/com/suisung/mall/common/RedisKeyManage/RedisKey.java create mode 100644 mall-common/src/main/java/com/suisung/mall/common/modules/singlepush/UserDeviceBind.java create mode 100644 mall-common/src/main/java/com/suisung/mall/common/service/SinglePushBaseService.java create mode 100644 mall-common/src/main/java/com/suisung/mall/common/service/impl/SinglePushBaseServiceImpl.java create mode 100644 sql/shop/dev/20250522_ddl.sql diff --git a/client/src/main/java/com/small/client/controller/WebController.java b/client/src/main/java/com/small/client/controller/WebController.java index 737b0be9..65aa2b66 100644 --- a/client/src/main/java/com/small/client/controller/WebController.java +++ b/client/src/main/java/com/small/client/controller/WebController.java @@ -54,11 +54,11 @@ public class WebController { sxDataService.SyncVipList(new DataBaseInfo(),sxDataService.getCommentModel()); } - @RequestMapping("/getAppSign") - public void getAppSign(){ - log.info("getAppSign"); - sxDataService.getAppSign(); - } +// @RequestMapping("/getAppSign") +// public void getAppSign(){ +// log.info("getAppSign"); +// sxDataService.getAppSign(); +// } @RequestMapping("/downLoadClient") public void downLoadClient(){ diff --git a/mall-account/src/main/java/com/suisung/mall/account/RedisKeyManage/RedisKey.java b/mall-account/src/main/java/com/suisung/mall/account/RedisKeyManage/RedisKey.java new file mode 100644 index 00000000..6edf2b41 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/RedisKeyManage/RedisKey.java @@ -0,0 +1,6 @@ +package com.suisung.mall.account.RedisKeyManage; + +public class RedisKey { + + public static final String SINGLEPUSHTOKE="singlePush:toke"; +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java index 1ead17bf..217ca92c 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java @@ -80,7 +80,6 @@ public class LoginController extends BaseControllerImpl { params.put("grant_type", "password"); params.put("username", user_account); params.put("password", user_password); - CommonResult result = accountUserBaseService.login(params); // user_account 判断是否绑定了手机号 diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/mobile/SinglePushController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/mobile/SinglePushController.java new file mode 100644 index 00000000..bed0f6e8 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/mobile/SinglePushController.java @@ -0,0 +1,35 @@ +package com.suisung.mall.account.controller.mobile; + +import com.suisung.mall.account.service.AccountSinglePushService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/account/singlePus") +@Slf4j +public class SinglePushController { + @Autowired + private AccountSinglePushService accountSinglePushService; + + @RequestMapping("/getSingleToken") + public String getToken() { + return accountSinglePushService.getTokenString(); + } + + @RequestMapping("/delSingleToken") + public String delSingleToken() { + accountSinglePushService.delToken(); + return "success"; + } + + @PostMapping("/pushTocid") + public String pushTocid(@RequestParam String message,@RequestParam String userId) { + log.info("pushTocid"); + accountSinglePushService.pushTocid(message,userId); + return "success"; + } +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/mapper/UserDeviceBindMapper.java b/mall-account/src/main/java/com/suisung/mall/account/mapper/UserDeviceBindMapper.java new file mode 100644 index 00000000..1331574b --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/mapper/UserDeviceBindMapper.java @@ -0,0 +1,9 @@ +package com.suisung.mall.account.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.suisung.mall.common.modules.singlepush.UserDeviceBind; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserDeviceBindMapper extends BaseMapper { +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountSinglePushService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountSinglePushService.java new file mode 100644 index 00000000..b06a43f3 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountSinglePushService.java @@ -0,0 +1,16 @@ +package com.suisung.mall.account.service; + +import com.getui.push.v2.sdk.dto.res.TokenDTO; +import com.suisung.mall.common.service.SinglePushBaseService; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Service; + + +public interface AccountSinglePushService extends SinglePushBaseService { + + String getTokenString(); + + void delToken(); + + void pushTocid(String message,String userId); +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/UserDeviceBindService.java b/mall-account/src/main/java/com/suisung/mall/account/service/UserDeviceBindService.java new file mode 100644 index 00000000..80c7fff2 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/service/UserDeviceBindService.java @@ -0,0 +1,14 @@ +package com.suisung.mall.account.service; + +import com.suisung.mall.common.modules.singlepush.UserDeviceBind; +import com.suisung.mall.core.web.service.IBaseService; +import org.springframework.stereotype.Service; + +import java.util.List; + +public interface UserDeviceBindService extends IBaseService { + + void saveUserDeviceBind(UserDeviceBind userDeviceBind); + + List getActive(UserDeviceBind userDeviceBind); +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountSinglePushServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountSinglePushServiceImpl.java new file mode 100644 index 00000000..9013a090 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountSinglePushServiceImpl.java @@ -0,0 +1,62 @@ +package com.suisung.mall.account.service.impl; +import cn.hutool.core.collection.CollectionUtil; +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.PushDTO; +import com.getui.push.v2.sdk.dto.req.message.PushMessage; +import com.suisung.mall.account.service.AccountSinglePushService; +import com.suisung.mall.account.service.UserDeviceBindService; +import com.suisung.mall.common.modules.singlepush.UserDeviceBind; +import com.suisung.mall.common.service.impl.SinglePushBaseServiceImpl; +import com.suisung.mall.common.utils.ContextUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +@lombok.extern.slf4j.Slf4j +public class AccountSinglePushServiceImpl extends SinglePushBaseServiceImpl implements AccountSinglePushService { + + @Autowired + private UserDeviceBindService userDeviceBindService; + + @Override + public String getTokenString() { + return super.getTokenDTO().getToken(); + } + + public void delToken(){ + super.delToken(); + } + + @Override + public void pushTocid(String message,String userId) { + UserDeviceBind userDeviceBind= new UserDeviceBind(); + userDeviceBind.setUserId(userId); + List list= userDeviceBindService.getActive(userDeviceBind); + if(CollectionUtil.isEmpty(list)){ + log.error("登录时绑定设备不存在"); + return ; + } + String cid=list.get(0).getCid(); + PushApi pushApi= this.getApiHelper().creatApi(PushApi.class); + PushDTO pushDTO=new PushDTO<>(); + Audience audience=new Audience(); + audience.addCid(cid); + pushDTO.setAudience(audience); + pushDTO.setRequestId(UUID.randomUUID().toString()); + PushMessage pushMessage=new PushMessage(); + pushMessage.setDuration(this.getDuration()); + pushMessage.setTransmission(message); + pushDTO.setPushMessage(pushMessage); + ApiResult>> mapApiResult= pushApi.pushToSingleByCid(pushDTO,super.getTokenDTO()); + if(mapApiResult.getCode()==0){ + log.info("用户为{},cid为{}发送成功消息成功",list.get(0).getUserId(),list.get(0).getCid()); + } + log.info("mapApiResult的数据{}",mapApiResult); + } + + +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index 7ec21c10..1e1a9a14 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -50,6 +50,7 @@ import com.suisung.mall.common.modules.distribution.ShopDistributionUser; import com.suisung.mall.common.modules.distribution.ShopDistributionUserCommission; import com.suisung.mall.common.modules.pay.PayUserResource; import com.suisung.mall.common.modules.plantform.ShopPlantformSubsiteUser; +import com.suisung.mall.common.modules.singlepush.UserDeviceBind; import com.suisung.mall.common.pojo.dto.SmsDto; import com.suisung.mall.common.pojo.req.WxUserInfoReq; import com.suisung.mall.common.service.MessageService; @@ -65,9 +66,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.util.Pair; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -136,6 +139,8 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params) { @@ -216,10 +221,21 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl getUserInfo(Integer user_id) { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -3034,6 +3050,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl implements UserDeviceBindService { + @Override + public void saveUserDeviceBind(UserDeviceBind userDeviceBind) { + if(StringUtils.isEmpty(userDeviceBind.getCid())){ + throw new RuntimeException("绑定cid不能为空"); + } + if(StringUtils.isEmpty(userDeviceBind.getOsType())){ + throw new RuntimeException("操作系统类型不能为空"); + } + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("user_id",userDeviceBind.getCid()); + UserDeviceBind bind=getOne(wrapper); + if(bind==null){ + UserDto userDto= ContextUtil.getCurrentUser(); + assert userDto != null; + userDeviceBind.setUserId(userDto.getUser_account()); + userDeviceBind.setUserType(userDto.getRole_id()); + userDeviceBind.setLastActive(new Date()); + userDeviceBind.setBindTime(new Date()); + this.saveOrUpdate(userDeviceBind); + log.info("保存用户设备绑定关系实体成功"); + }else { + if(!bind.getCid().equals(userDeviceBind.getCid())){ + bind.setCid(userDeviceBind.getCid()); + } + if(!bind.getOsType().equals(userDeviceBind.getOsType())){ + bind.setCid(userDeviceBind.getOsType()); + } + bind.setLastActive(new Date()); + bind.setBindTime(new Date()); + this.saveOrUpdate(bind); + } + } + + @Override + public List getActive(UserDeviceBind userDeviceBind) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("user_id",userDeviceBind.getUserId()).orderByDesc("bind_time"); + return list(wrapper); + } +} diff --git a/mall-auth/src/main/java/com/suisung/mall/auth/controller/AuthController.java b/mall-auth/src/main/java/com/suisung/mall/auth/controller/AuthController.java index 4bcabf99..85f99c34 100644 --- a/mall-auth/src/main/java/com/suisung/mall/auth/controller/AuthController.java +++ b/mall-auth/src/main/java/com/suisung/mall/auth/controller/AuthController.java @@ -54,7 +54,9 @@ public class AuthController { .token(oAuth2AccessToken.getValue()) .refreshToken(oAuth2AccessToken.getRefreshToken().getValue()) .expiresIn(oAuth2AccessToken.getExpiresIn()) - .tokenHead(AuthConstant.JWT_TOKEN_PREFIX).build(); + .tokenHead(AuthConstant.JWT_TOKEN_PREFIX) + .cid(parameters.get("cid")).build(); + } catch (Exception e) { logger.error(I18nUtil._("Oauth2获取token失败!") + e.getMessage(), e); return CommonResult.failed(e.getMessage()); diff --git a/mall-auth/src/main/java/com/suisung/mall/auth/domain/Oauth2TokenDto.java b/mall-auth/src/main/java/com/suisung/mall/auth/domain/Oauth2TokenDto.java index 74a68e39..19116adb 100644 --- a/mall-auth/src/main/java/com/suisung/mall/auth/domain/Oauth2TokenDto.java +++ b/mall-auth/src/main/java/com/suisung/mall/auth/domain/Oauth2TokenDto.java @@ -20,4 +20,8 @@ public class Oauth2TokenDto { private String tokenHead; @ApiModelProperty("有效时间(秒)") private int expiresIn; + + //个推使用 + @ApiModelProperty("cid") + private String cid; } diff --git a/mall-common/pom.xml b/mall-common/pom.xml index 3af6b2f1..c73d8eec 100644 --- a/mall-common/pom.xml +++ b/mall-common/pom.xml @@ -279,6 +279,15 @@ jieba-analysis 1.0.2 + + + + com.getui.push + restful-sdk + 1.0.6.1 + ${project.basedir}/src/main/resources/lib/restful-sdk-1.0.6.1.jar + system + diff --git a/mall-common/src/main/java/com/suisung/mall/common/RedisKeyManage/RedisKey.java b/mall-common/src/main/java/com/suisung/mall/common/RedisKeyManage/RedisKey.java new file mode 100644 index 00000000..5dc5902d --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/RedisKeyManage/RedisKey.java @@ -0,0 +1,6 @@ +package com.suisung.mall.common.RedisKeyManage; + +public class RedisKey { + + public static final String SINGLEPUSHTOKE="singlePush:toke"; +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java b/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java index 379cfc0b..3811ba5f 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/feignService/AccountService.java @@ -215,4 +215,7 @@ public interface AccountService { Integer getUserBindConnectUserIdByCondition(@RequestParam(name = "bind_id") String bind_id, @RequestParam(name = "bind_type") Integer bind_type, @RequestParam(name = "user_type", required = false) Integer user_type); + + @PostMapping("/admin/account/pushTocid") + String pushTocid(@RequestParam(name = "message") String message,@RequestParam(name = "userId") String userId); } diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/singlepush/UserDeviceBind.java b/mall-common/src/main/java/com/suisung/mall/common/modules/singlepush/UserDeviceBind.java new file mode 100644 index 00000000..cc5ed36d --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/singlepush/UserDeviceBind.java @@ -0,0 +1,59 @@ +package com.suisung.mall.common.modules.singlepush; +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 io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("user_device_bind") // MyBatis-Plus 表名注解 +@ApiModel("用户设备绑定实体") // Swagger 模型描述 +public class UserDeviceBind implements Serializable { + + @TableId(value = "id", type = IdType.AUTO) // 主键自增 + @ApiModelProperty(value = "主键ID", hidden = true) // 隐藏此字段不展示在Swagger文档 + private Long id; + + @TableField("user_id") // 明确字段映射(可省略,默认自动转下划线) + @ApiModelProperty(value = "用户唯一标识", required = true, example = "U20231001") + private String userId; + + @TableField("cid") + @ApiModelProperty(value = "设备CID", required = true, example = "CID_ABCD1234") + private String cid; + + @TableField("user_type") + @ApiModelProperty( + value = "用户类型 (1=普通用户, 2=管理员, 3=商家)", + required = true, + example = "1", + notes = "1-普通用户, 2-管理员, 3-商家" + ) + private Integer userType; + + @TableField("os_type") + @ApiModelProperty( + value = "手机系统类型", + example = "Android", + notes = "Android, iOS" + ) + private String osType; + + @TableField("bind_time") + @ApiModelProperty(value = "绑定时间", example = "2023-10-01 12:00:00") + private Date bindTime; + + @TableField("last_active") + @ApiModelProperty(value = "最后活跃时间", example = "2023-10-05 14:30:00") + private Date lastActive; +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/SinglePushBaseService.java b/mall-common/src/main/java/com/suisung/mall/common/service/SinglePushBaseService.java new file mode 100644 index 00000000..63e6e798 --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/service/SinglePushBaseService.java @@ -0,0 +1,12 @@ +package com.suisung.mall.common.service; + +import com.getui.push.v2.sdk.dto.res.TokenDTO; +import com.suisung.mall.common.pojo.dto.SmsDto; + +/** + * 第三方服务 + */ +public interface SinglePushBaseService { + TokenDTO getTokenDTO(); + void delToken(); +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/impl/SinglePushBaseServiceImpl.java b/mall-common/src/main/java/com/suisung/mall/common/service/impl/SinglePushBaseServiceImpl.java new file mode 100644 index 00000000..3bf539e4 --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/service/impl/SinglePushBaseServiceImpl.java @@ -0,0 +1,93 @@ +package com.suisung.mall.common.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.map.MapUtil; +import com.getui.push.v2.sdk.ApiHelper; +import com.getui.push.v2.sdk.GtApiConfiguration; +import com.getui.push.v2.sdk.api.AuthApi; +import com.getui.push.v2.sdk.common.ApiResult; +import com.getui.push.v2.sdk.dto.req.AuthDTO; +import com.getui.push.v2.sdk.dto.res.TokenDTO; +import com.suisung.mall.common.RedisKeyManage.RedisKey; +import com.suisung.mall.common.service.SinglePushBaseService; +import com.suisung.mall.core.web.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +@Service +@lombok.extern.slf4j.Slf4j +public class SinglePushBaseServiceImpl implements SinglePushBaseService { + @Value("${single.push.mastersecret}") + private String mastersecret; + + @Value("${single.push.appkey}") + private String appkey; + @Value("${single.push.appId}") + private String appId; + @Autowired + private RedisService redisService; + + @Override + public TokenDTO getTokenDTO() { + TokenDTO token=new TokenDTO(); + if(redisService.get(RedisKey.SINGLEPUSHTOKE)==null){ + return getTokenFromSingelPush(); + }else { + Map map= (Map) redisService.get(RedisKey.SINGLEPUSHTOKE); + token.setToken(map.get("token").toString()); + token.setExpireTime((Long) map.get("expireTime")); + } + return token; + } + + @Override + public void delToken(){ + if(redisService.get(RedisKey.SINGLEPUSHTOKE)!=null){ + Map map= (Map) redisService.get(RedisKey.SINGLEPUSHTOKE); + AuthApi authApi = getApiHelper().creatApi(AuthApi.class); + String token = (String) map.get("token"); + TokenDTO tokenDTO = new TokenDTO(); + tokenDTO.setToken(token); + tokenDTO.setExpireTime((Long) map.get("expireTime")); + log.info("token--{}",tokenDTO); + authApi.close(token,tokenDTO); + redisService.del(RedisKey.SINGLEPUSHTOKE); + } + } + + public ApiHelper getApiHelper(){ + GtApiConfiguration config = new GtApiConfiguration(); + config.setAppKey(appkey); + config.setMasterSecret(mastersecret); + config.setAppId(appId); + return ApiHelper.build(config); + } + + public String getDuration(){ + long timestamp = System.currentTimeMillis(); // 当前时间的时间戳 + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp); + calendar.add(Calendar.MINUTE, 10); // 增加10分钟 + long newTimestamp = calendar.getTimeInMillis(); // 获取新的时间戳 + return timestamp+"-"+newTimestamp; + } + + private TokenDTO getTokenFromSingelPush(){ + AuthApi authApi= getApiHelper().creatApi(AuthApi.class); + AuthDTO authDTO= AuthDTO.build(appkey, mastersecret); + ApiResult tokenDTOApiResult= authApi.auth(authDTO); + TokenDTO token=null; + if (tokenDTOApiResult!= null) { + token = tokenDTOApiResult.getData(); + Map map= BeanUtil.beanToMap(token); + log.info("tokenDTO:{}",token); + redisService.set(RedisKey.SINGLEPUSHTOKE, map,(token.getExpireTime()/1000)-60); + } + return token; + } +} diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/ContextUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/ContextUtil.java index b5214cff..cda710ba 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/ContextUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/ContextUtil.java @@ -39,13 +39,14 @@ public class ContextUtil { */ public static UserDto getCurrentUser() { try { - UserDto loginUser = staticUserInfoService.getUser(); - log.info("##### 当前登录用户:{}###", JsonUtil.object2json(loginUser)); - return loginUser;//todo 测试去除 -// UserDto user= new UserDto(); -// user.setStore_id("1"); -// user.setRole_id(9); -// return user; +// UserDto loginUser = staticUserInfoService.getUser(); +// log.info("##### 当前登录用户:{}###", JsonUtil.object2json(loginUser)); +// return loginUser;//todo 测试去除 + UserDto user= new UserDto(); + user.setStore_id("1"); + user.setRole_id(9); + user.setUser_account("18260885688"); + return user; } catch (Exception e) { System.out.println(e.getMessage()); } diff --git a/mall-common/src/main/resources/application-local.yml b/mall-common/src/main/resources/application-local.yml index 133826be..53d510c5 100644 --- a/mall-common/src/main/resources/application-local.yml +++ b/mall-common/src/main/resources/application-local.yml @@ -32,4 +32,9 @@ baidu: map: app_id: 116444176 ak: qWKt2xbrqXsp2yK35YYXVBNZgrbiCG5v - url: https://api.map.baidu.com/geoconv/v2/? \ No newline at end of file + url: https://api.map.baidu.com/geoconv/v2/? +single: # 个推配置 + push: + mastersecret: jYnpS1xYhh6GfyZQMlciJ + appkey: neXXX9r1Tc7gMxN2PIcHA1 + appId: KXgzOaKSzd5HG3p9IPaVa8 \ No newline at end of file diff --git a/mall-common/src/main/resources/application-prod.yml b/mall-common/src/main/resources/application-prod.yml index 7104124c..1e5279a1 100644 --- a/mall-common/src/main/resources/application-prod.yml +++ b/mall-common/src/main/resources/application-prod.yml @@ -33,3 +33,8 @@ baidu: app_id: 116444176 ak: qWKt2xbrqXsp2yK35YYXVBNZgrbiCG5v url: https://api.map.baidu.com/geoconv/v2/? +single: # 个推配置 + push: + mastersecret: jYnpS1xYhh6GfyZQMlciJ + appkey: neXXX9r1Tc7gMxN2PIcHA1 + appId: KXgzOaKSzd5HG3p9IPaVa8 \ No newline at end of file diff --git a/mall-common/src/main/resources/application-test.yml b/mall-common/src/main/resources/application-test.yml index fd6dca23..4e42a7dc 100644 --- a/mall-common/src/main/resources/application-test.yml +++ b/mall-common/src/main/resources/application-test.yml @@ -32,4 +32,9 @@ baidu: map: app_id: 116444176 ak: qWKt2xbrqXsp2yK35YYXVBNZgrbiCG5v - url: https://api.map.baidu.com/geoconv/v2/? \ No newline at end of file + url: https://api.map.baidu.com/geoconv/v2/? +single: # 个推配置 + push: + mastersecret: jYnpS1xYhh6GfyZQMlciJ + appkey: neXXX9r1Tc7gMxN2PIcHA1 + appId: KXgzOaKSzd5HG3p9IPaVa8 \ No newline at end of file diff --git a/mall-common/src/main/resources/application-uat.yml b/mall-common/src/main/resources/application-uat.yml index 770dd4db..4e42a7dc 100644 --- a/mall-common/src/main/resources/application-uat.yml +++ b/mall-common/src/main/resources/application-uat.yml @@ -33,3 +33,8 @@ baidu: app_id: 116444176 ak: qWKt2xbrqXsp2yK35YYXVBNZgrbiCG5v url: https://api.map.baidu.com/geoconv/v2/? +single: # 个推配置 + push: + mastersecret: jYnpS1xYhh6GfyZQMlciJ + appkey: neXXX9r1Tc7gMxN2PIcHA1 + appId: KXgzOaKSzd5HG3p9IPaVa8 \ No newline at end of file diff --git a/mall-shop/pom.xml b/mall-shop/pom.xml index 49369c3e..7edcf4b9 100644 --- a/mall-shop/pom.xml +++ b/mall-shop/pom.xml @@ -301,7 +301,6 @@ 9.2.1.jre8 - diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java index f690ad67..cefeb867 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/controller/SyncThirdDataController.java @@ -31,8 +31,8 @@ import java.util.Map; @RestController @RequestMapping("/shop/sync/third") public class SyncThirdDataController { - @Resource - private SyncAppService syncAppService; +// @Resource +// private SyncAppService syncAppService; @Resource private SyncThirdDataService syncThirdDataService; @@ -125,11 +125,11 @@ public class SyncThirdDataController { return readSxData(folders,appKey,sign,syncType); } - @ApiOperation(value = "获取加密密钥", notes = "获取加密密钥") - @RequestMapping(value = "/getAppSign", method = RequestMethod.POST) - public Map getAppSign(@RequestParam String primaryKey) { - return syncAppService.getAppSign(primaryKey); - } +// @ApiOperation(value = "获取加密密钥", notes = "获取加密密钥") +// @RequestMapping(value = "/getAppSign", method = RequestMethod.POST) +// public Map getAppSign(@RequestParam String primaryKey) { +// return syncAppService.getAppSign(primaryKey); +// } /** * 客户端查询配置 diff --git a/sql/shop/dev/20250522_ddl.sql b/sql/shop/dev/20250522_ddl.sql new file mode 100644 index 00000000..2c157fb4 --- /dev/null +++ b/sql/shop/dev/20250522_ddl.sql @@ -0,0 +1,13 @@ +CREATE TABLE `user_device_bind` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `user_id` varchar(32) NOT NULL COMMENT '用户唯一标识', + `cid` varchar(64) NOT NULL COMMENT '设备CID', + `user_type` tinyint(4) NOT NULL COMMENT '用户类型 (1=普通用户, 2=管理员, 3=商家)', + `os_type` varchar(16) NOT NULL COMMENT '手机系统类型 (Android/iOS)', + `bind_time` datetime NOT NULL COMMENT '绑定时间', + `last_active` datetime NOT NULL COMMENT '最后活跃时间', + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_cid` (`cid`), + KEY `idx_last_active` (`last_active`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户设备绑定关系表'; \ No newline at end of file