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 ad765709..4b6f3402 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 @@ -21,11 +21,12 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.util.Pair; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -39,7 +40,7 @@ import java.util.Map; * @author Xinze * @since 2021-03-30 */ -@Log4j +@Slf4j @Api(tags = "用户基本信息表") @RestController @RequestMapping("/mobile/account/login") @@ -239,8 +240,24 @@ public class LoginController extends BaseControllerImpl { @ApiOperation(value = "商家版注册与登录") @RequestMapping(value = "/doMerchSmsRegisterAndLogin", method = RequestMethod.POST) - public CommonResult doMerchSmsRegisterAndLogin(@RequestBody JSONObject paramJSON) { - return accountUserBaseService.doMerchSmsRegisterAndLogin(paramJSON.getStr("user_mobile"), paramJSON.getStr("rand_key"), paramJSON.getStr("verify_code")); + public CommonResult doMerchSmsRegisterAndLogin(HttpServletRequest request, @RequestBody JSONObject paramJSON) { + if (paramJSON == null) { + return CommonResult.failed("缺少必要参数!"); + } + + String userMobile = paramJSON.getStr("user_mobile"); + String randKey = paramJSON.getStr("rand_key"); + String verifyCode = paramJSON.getStr("verify_code"); + + if (StrUtil.isBlank(userMobile) || StrUtil.isBlank(randKey) || StrUtil.isBlank(verifyCode)) { + return CommonResult.failed("缺少必要参数!"); + } + + String cid = paramJSON.getStr("cid"); + String osType = paramJSON.getStr("osType"); + + + return accountUserBaseService.doMerchSmsRegisterAndLogin(userMobile, randKey, verifyCode, cid, osType); } @ApiOperation(value = "微信用户一键登录和注册") @@ -271,7 +288,10 @@ public class LoginController extends BaseControllerImpl { @ApiOperation(value = "忘记密码-更改新密码") @RequestMapping(value = "/edit/forgetPassword", method = RequestMethod.POST) public CommonResult editForgetPassword(@RequestBody JSONObject paramJSON) { - return accountUserBaseService.doMerchSmsRegisterAndLogin(paramJSON.getStr("user_mobile"), paramJSON.getStr("rand_key"), paramJSON.getStr("verify_code")); + return accountUserBaseService.doMerchSmsRegisterAndLogin(paramJSON.getStr("user_mobile"), + paramJSON.getStr("rand_key"), + paramJSON.getStr("verify_code"), + paramJSON.getStr("cid"), paramJSON.getStr("osType")); } @ApiOperation("退出登录") diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBindGeTuiController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBindGeTuiController.java new file mode 100644 index 00000000..477309b6 --- /dev/null +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBindGeTuiController.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan. + * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna. + * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus. + * Vestibulum commodo. Ut rhoncus gravida arcu. + */ + +package com.suisung.mall.account.controller.admin; + +import com.suisung.mall.account.service.AccountUserBindGeTuiService; +import com.suisung.mall.common.modules.account.AccountUserBindGeTui; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Api(tags = "用户推送关系绑定表") +@RestController +@RequestMapping("/admin/account/account-user-bind-getui") +public class AccountUserBindGeTuiController { + + @Autowired + private AccountUserBindGeTuiService accountUserBindGeTuiService; + + @ApiOperation(value = "用户绑定", notes = "用户绑定") + @RequestMapping(value = "/selectAccountUserBindGeTuiListByUserId", method = RequestMethod.POST) + public List list(@RequestParam(name = "userId", defaultValue = "0") Integer userId) { + return accountUserBindGeTuiService.selectAccountUserBindGeTuiListByUserId(userId); + } +} diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java index 46d8af1f..1096436f 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java @@ -121,9 +121,11 @@ public interface AccountUserBaseService extends IBaseService { * @param user_mobile * @param rand_key 防机器人刷验证码 * @param verify_code + * @param cid 推送 cid + * @param osType 手机系统类型 :1-Android;2-iOS;3-微信小程序; * @return */ - CommonResult doMerchSmsRegisterAndLogin(String user_mobile, String rand_key, String verify_code); + CommonResult doMerchSmsRegisterAndLogin(String user_mobile, String rand_key, String verify_code, String cid, String osType); /** * 微信小程序一键登录注册接口 diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindGeTuiService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindGeTuiService.java index 509ad0c6..5f4fbfbf 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindGeTuiService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindGeTuiService.java @@ -10,4 +10,12 @@ public interface AccountUserBindGeTuiService extends IBaseService getActive(AccountUserBindGeTui accountUserBindGeTui); + + /** + * 根据用户 Id 获取账号绑定关系列表记录 + * + * @param userId + * @return + */ + List selectAccountUserBindGeTuiListByUserId(Integer userId); } 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 a3a207f8..146eb230 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 @@ -2811,10 +2811,12 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl selectAccountUserBindGeTuiListByUserId(Integer userId) { + if (userId == null || userId <= 0) return Collections.singletonList(new AccountUserBindGeTui()); + return list(new QueryWrapper().eq("user_id", userId).eq("status", CommonConstant.Enable)); + } } 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 5825ad45..628af083 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 @@ -218,8 +218,17 @@ public interface AccountService { @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); + String pushTocid(@RequestParam(name = "message") String message, @RequestParam(name = "userId") String userId); @PostMapping("/admin/account/pushNotificationTocid") - String pushNotificationTocid(@RequestParam("userId") String userId,@RequestBody PushTemplate pushTemplate); + String pushNotificationTocid(@RequestParam("userId") String userId, @RequestBody PushTemplate pushTemplate); + + /** + * 根据用户 Id 获取账号推送绑定关系列表记录 + * + * @param userId + * @return + */ + @PostMapping("admin/account/account-user-bind-getui/selectAccountUserBindGeTuiListByUserId") + List selectAccountUserBindGeTuiListByUserId(@RequestParam(name = "userId", defaultValue = "0") Integer userId); } diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java index 888b47dd..a986f2a1 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java @@ -262,10 +262,10 @@ public class ShopMchEntry implements Serializable { private Integer status; @ApiModelProperty(value = "创建该商家入驻记录的用户") - private String created_by; + private Integer created_by; @ApiModelProperty(value = "最后修改该商家入驻记录的用户") - private String updated_by; + private Integer updated_by; @ApiModelProperty(value = "商家入驻记录的创建时间") private Date created_at; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java index d5a3a84e..1f89d918 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java @@ -31,6 +31,7 @@ import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.utils.*; import com.suisung.mall.shop.lakala.service.*; import com.suisung.mall.shop.lakala.utils.LakalaUtil; +import com.suisung.mall.shop.message.service.PushMessageService; import com.suisung.mall.shop.message.service.ShopMessageTemplateService; import com.suisung.mall.shop.order.service.ShopOrderLklService; import com.suisung.mall.shop.page.service.OssService; @@ -149,6 +150,10 @@ public class LakalaApiServiceImpl implements LakalaApiService { @Resource private LklOrderSeparateService lklOrderSeparateService; + @Lazy + @Resource + private PushMessageService pushMessageService; + @Resource private OssService ossService; @@ -558,6 +563,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 【小发同城商家】恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持! shopMessageTemplateService.aliyunSmsSend(mchMobile, "SMS_489795044", null);//SMS_479760276 + pushMessageService.noticeMerchantSignEcContract(shopMchEntry.getCreated_by()); + return Pair.of(true, "商家入网申请电子合同成功"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java index 2d76f6b9..4d8db40c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/PushMessageService.java @@ -17,10 +17,10 @@ public interface PushMessageService { /** * 异步发送推送通知 商户签约电子合同 * - * @param mchMobile + * @param userId * @return */ - CompletableFuture noticeMerchantSignEcContract(String mchMobile); + CompletableFuture noticeMerchantSignEcContract(Integer userId); /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java index 336e6614..97335f25 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/message/service/impl/PushMessageServiceImpl.java @@ -9,6 +9,8 @@ package com.suisung.mall.shop.message.service.impl; import cn.hutool.json.JSONObject; +import com.suisung.mall.common.feignService.AccountService; +import com.suisung.mall.common.modules.account.AccountUserBindGeTui; import com.suisung.mall.common.service.UniCloudPushService; import com.suisung.mall.shop.message.service.PushMessageService; import com.suisung.mall.shop.store.service.ShopStoreEmployeeService; @@ -21,6 +23,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; @Slf4j @@ -36,28 +39,62 @@ public class PushMessageServiceImpl implements PushMessageService { @Resource private ShopStoreEmployeeService shopStoreEmployeeService; + @Lazy + @Resource + private AccountService accountService; + /** * 异步发送推送通知 商户签约电子合同 * - * @param mchMobile + * @param userId * @return */ @Async("pushAsyncExecutor") @Override - public CompletableFuture noticeMerchantSignEcContract(String mchMobile) { - // 获取 商家的 cid - Pair result = uniCloudPushService.sendPushMessage(null, - appName + "邀请您签署入驻合同", - "恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持!", - null); + public CompletableFuture noticeMerchantSignEcContract(Integer userId) { + try { + // 获取商家的 cid 列表,确保用户 ID 有效 + if (userId == null || userId <= 0) { + log.warn("无效的用户ID:{}", userId); + return CompletableFuture.completedFuture(false); + } - if (!result.getFirst()) { - log.error("商家入驻申请电子合同推送失败:{}", result.getSecond()); + List accountUserBindGeTuiList = accountService.selectAccountUserBindGeTuiListByUserId(userId); + + // 检查返回的列表是否为空或包含无效数据 + if (accountUserBindGeTuiList == null || accountUserBindGeTuiList.isEmpty()) { + log.info("未找到与用户ID相关的设备绑定信息:{}", userId); + return CompletableFuture.completedFuture(false); // 无设备无需推送 + } + + // 提取 cid 列表,过滤掉可能的 null 值 + List cidList = accountUserBindGeTuiList.stream() + .map(AccountUserBindGeTui::getCid) + .filter(cid -> cid != null && !cid.trim().isEmpty()) + .collect(Collectors.toList()); + + // 检查 cid 列表是否为空 + if (cidList.isEmpty()) { + log.info("提取的 cid 列表为空,用户ID:{}", userId); + return CompletableFuture.completedFuture(false); // 无有效 cid 无需推送 + } + + Pair result = uniCloudPushService.sendPushMessageBatch(cidList, + appName + "邀请您签署入驻合同", + "恭喜您的开店入驻申请已审核通过!请尽快登录APP平台签署电子合同,签署链接24小时内有效(逾期需重新提交申请)。如有疑问请联系客服,感谢您的支持!", + null); + + if (!result.getFirst()) { + log.error("商家入驻申请电子合同推送失败,用户ID:{},错误信息:{}", userId, result.getSecond()); + return CompletableFuture.completedFuture(false); + } + + return CompletableFuture.completedFuture(true); + } catch (Exception e) { + log.error("执行 noticeMerchantSignEcContract 方法时发生异常,用户ID:{}", userId, e); return CompletableFuture.completedFuture(false); } - - return CompletableFuture.completedFuture(true); } /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java index bb634be0..464d5f29 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java @@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.constant.CommonConstant; +import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.modules.store.ShopMchEntry; import com.suisung.mall.common.utils.BankUtil; import com.suisung.mall.common.utils.DateTimeUtils; @@ -47,6 +48,8 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import static com.suisung.mall.common.utils.ContextUtil.getCurrentUser; + /** * 商家入驻申请表 */ @@ -96,10 +99,10 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl