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 b32e4445..90eaca1d 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 @@ -10,6 +10,7 @@ import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.constant.AuthConstant; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.constant.RedisConstant; +import com.suisung.mall.common.pojo.req.WxUserInfoReq; import com.suisung.mall.common.service.impl.BaseControllerImpl; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.UserInfoService; @@ -192,13 +193,18 @@ public class LoginController extends BaseControllerImpl { return accountUserBaseService.doMerchSmsRegisterAndLogin(paramJSON.getStr("user_mobile"), paramJSON.getStr("rand_key"), paramJSON.getStr("verify_code")); } + @ApiOperation(value = "微信用户一键登录和注册") + @RequestMapping(value = "/doWxUserRegisterAndLogin", method = RequestMethod.POST) + public CommonResult doWxUserRegisterAndLogin(@RequestBody WxUserInfoReq wxUserInfoReq) { + return accountUserBaseService.doWxUserRegisterAndLogin(wxUserInfoReq); + } + @ApiOperation(value = "通过(绑定手机的)账号、手机、email 发送短信、邮件验证码") @RequestMapping(value = "/sendVerifyCode", method = RequestMethod.POST) public CommonResult sendVerifyCode(@RequestBody JSONObject paramJSON) { return accountUserBaseService.sendVerifyCode(paramJSON.getStr("number")); } - @ApiOperation(value = "忘记密码后修改密码") @RequestMapping(value = "/doForgetPassword", method = RequestMethod.POST) public CommonResult doForgetPassword(@RequestBody JSONObject paramJSON) { diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java index d0746aad..c018dfe3 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java @@ -124,8 +124,8 @@ public class AccountUserBaseController extends BaseControllerImpl { @ApiOperation("根据用户名获取通用用户信息") @RequestMapping(value = "/loadByUsername", method = RequestMethod.GET) - public UserDto loadUserByUsername(@RequestParam String user_account) { - return accountUserBaseService.loadUserByUsername(user_account); + public UserDto loadUserByUsername(@RequestParam String user_account, @RequestParam(name = "user_is_admin", required = false) Integer user_is_admin) { + return accountUserBaseService.loadUserByUsername(user_account, user_is_admin); } @ApiOperation(value = "后台管理员和商家登录,登录后返回token") // app 和 pc 的 登录最好分开,这样容易区分从哪个端进来,方便处理逻辑(验证码) 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 5bd6f41d..586afeba 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 @@ -3,6 +3,7 @@ package com.suisung.mall.account.service; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.modules.account.AccountUserBase; +import com.suisung.mall.common.pojo.req.WxUserInfoReq; import com.suisung.mall.core.web.service.IBaseService; import org.springframework.data.util.Pair; @@ -28,6 +29,8 @@ public interface AccountUserBaseService extends IBaseService { UserDto loadUserByUsername(String user_account); + UserDto loadUserByUsername(String user_account, Integer user_is_admin); + boolean logout(); Map getConnectInfo(); @@ -75,8 +78,24 @@ public interface AccountUserBaseService extends IBaseService { */ Integer doBindMobile(String user_intl, String mobile, UserDto currentUser); + /** + * 根据账号和账号类型获取一条记录 + * + * @param user_account + * @param user_is_admin + * @return + */ + AccountUserBase getByAccount(String user_account, Integer user_is_admin); + + /** + * 根据账号获取一条记录 + * + * @param user_account + * @return + */ AccountUserBase getByAccount(String user_account); + boolean getVerifyCode(String number); /** @@ -106,6 +125,14 @@ public interface AccountUserBaseService extends IBaseService { */ CommonResult doMerchSmsRegisterAndLogin(String user_mobile, String rand_key, String verify_code); + /** + * 微信小程序一键登录注册接口 + * + * @param wxUserInfoReq + * @return + */ + CommonResult doWxUserRegisterAndLogin(WxUserInfoReq wxUserInfoReq); + Map doAppConnectLogin(String bind_name, String code); CommonResult doMobileBindLogin(String user_mobile, String verify_code); diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindConnectService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindConnectService.java index 585922e7..298baeb5 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindConnectService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBindConnectService.java @@ -1,6 +1,7 @@ package com.suisung.mall.account.service; import com.suisung.mall.common.modules.account.AccountUserBindConnect; +import com.suisung.mall.common.pojo.req.WxUserInfoReq; import com.suisung.mall.core.web.service.IBaseService; import java.util.Map; @@ -62,4 +63,14 @@ public interface AccountUserBindConnectService extends IBaseService().eq("user_account", user_account)); + return loadUserByUsername(user_account, CommonConstant.USER_TYPE_NORMAL); + } - if (admin != null) { - UserDto userDTO = new UserDto(); - String store_ids = admin.getStore_ids(); - if (StrUtil.isNotBlank(store_ids)) { - userDTO.setStore_id(store_ids); - } - - userDTO.setId(admin.getUser_id()); - userDTO.setUser_account(admin.getUser_account()); - userDTO.setUser_password(admin.getUser_password()); - userDTO.setUser_state(admin.getUser_state()); - userDTO.setUser_salt(admin.getUser_salt()); - - setIdentityByUser(userDTO, admin); - userDTO.setUser_nickname(admin.getUser_nickname()); - List roles = null; - - String rights_group_id = admin.getRights_group_id(); - - if (StrUtil.isBlank(rights_group_id)) { - return null; - } - - //读取分站编号 - try { - Map params = new HashMap(); - params.put("user_id:eq", admin.getUser_id()); - CommonResult findResult = shopService.findOnePlantSubUser(params); - ShopPlantformSubsiteUser subsiteUser = findResult.getFenResult(ShopPlantformSubsiteUser.class); - - if (subsiteUser != null) { - Integer subsite_id = subsiteUser.getSubsite_id(); - userDTO.setSite_id(subsite_id); - } - } catch (Exception e) { - logger.error("远程调用分站数据异常!" + e.getMessage(), e); - } - - try { - roles = adminService.getRoleListById(rights_group_id); - } catch (Exception e) { - logger.error("远程调用异常!" + e.getMessage(), e); - } - List roleNames = roles.stream().map(item -> item.getRights_group_id() + "_" + item.getRights_group_name()).collect(Collectors.toList()); - userDTO.setRoles(roleNames); - return userDTO; + /** + * @param user_account + * @param user_is_admin + * @return + */ + @Override + public UserDto loadUserByUsername(String user_account, Integer user_is_admin) { + if (StrUtil.isBlank(user_account)) { + return null; } - return null; + + if (ObjectUtil.isEmpty(user_is_admin)) { + user_is_admin = CommonConstant.USER_TYPE_NORMAL; + } + + //获取用户信息 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_account", user_account).eq("user_is_admin", user_is_admin).orderByDesc("user_id"); + List list = accountUserBaseService.find(queryWrapper); + if (CollUtil.isEmpty(list)) { + return null; + } + + AccountUserBase accountUserBase = list.get(0); + + UserDto userDTO = new UserDto(); + String store_ids = accountUserBase.getStore_ids(); + if (StrUtil.isNotBlank(store_ids)) { + userDTO.setStore_id(store_ids); + } + + userDTO.setId(accountUserBase.getUser_id()); + userDTO.setUser_account(accountUserBase.getUser_account()); + userDTO.setUser_password(accountUserBase.getUser_password()); + userDTO.setUser_state(accountUserBase.getUser_state()); + userDTO.setUser_salt(accountUserBase.getUser_salt()); + + setIdentityByUser(userDTO, accountUserBase); + userDTO.setUser_nickname(accountUserBase.getUser_nickname()); + List roles = null; + List roleNames = new ArrayList<>(); + //读取分站编号 + try { + Map params = new HashMap(); + params.put("user_id:eq", accountUserBase.getUser_id()); + CommonResult findResult = shopService.findOnePlantSubUser(params); + ShopPlantformSubsiteUser subsiteUser = findResult.getFenResult(ShopPlantformSubsiteUser.class); + + if (subsiteUser != null) { + Integer subsite_id = subsiteUser.getSubsite_id(); + userDTO.setSite_id(subsite_id); + } + + String rights_group_id = accountUserBase.getRights_group_id(); + if (StrUtil.isNotBlank(rights_group_id)) { + roles = adminService.getRoleListById(rights_group_id); + if (CollUtil.isNotEmpty(roles)) { + roleNames = roles.stream().map(item -> item.getRights_group_id() + "_" + item.getRights_group_name()).collect(Collectors.toList()); + } + } + + } catch (Exception e) { + logger.error("远程调用分站数据异常!" + e.getMessage(), e); + } + + userDTO.setRoles(roleNames); + return userDTO; } /** @@ -1613,11 +1634,11 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); @@ -2266,15 +2286,31 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_account", user_account).orderByAsc("user_id"); + if (user_is_admin == null) { + user_is_admin = CommonConstant.USER_TYPE_NORMAL; + } + queryWrapper.eq("user_account", user_account) + .eq("user_is_admin", user_is_admin) + .orderByAsc("user_id"); AccountUserBase data = findOne(queryWrapper); - return data; } + @Override + public AccountUserBase getByAccount(String user_account) { + return getByAccount(user_account, CommonConstant.USER_TYPE_NORMAL); + } + /** * 发送 手机/邮件 验证码 * @@ -2737,7 +2773,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl args = new HashMap<>(); + args.put("user_account", user_nickname); + args.put("register_time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(today)); + + messageService.sendNoticeMsg(userId, 0, message_id, args); + } + + // accountUserBase == null 的情况 + // 是否绑定手机号了? + AccountUserBindConnect accountUserBindConnect = accountUserBindConnectService.getBindByBindId(mobile, BindCode.MOBILE, CommonConstant.USER_TYPE_NORMAL); + if (accountUserBindConnect == null || !accountUserBase.getUser_id().equals(accountUserBindConnect.getUser_id())) { + // 先绑定手机号 + if (accountUserBindConnectService.bindMobileAndOpenId(wxUserInfoReq, accountUserBase.getUser_id(), accountUserBase.getUser_is_admin()) == null) { + return CommonResult.failed(_("账号绑定失败!")); + } + } + + // 已经绑定了,直接登录 + Map params = new HashMap<>(); + params.put("client_id", AuthConstant.MOBILE_CLIENT_ID); + params.put("client_secret", AuthConstant.AUTHORITY_MOBILE_SECRET); + params.put("grant_type", "password"); + params.put("verify_pwd", "1001"); // 是否验证密码 1001:不验证;1002:验证(内部登录没有用户明文密码,只能不验证) + params.put("username", mobile); + params.put("password", ""); + params.put("user_mobile", mobile); + params.put("user_is_admin", CommonConstant.USER_TYPE_NORMAL.toString()); + + return login(params); + } + + /** * 手机号登陆操作 * 使用到的:后台管理员或商家登录,客户c端 @@ -2799,6 +3008,8 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl userInfo = new HashMap<>(); - userInfo.put("user_account", user_mobile);// 时间 yyyyMMddHHmmss + 4位随机数 com.suisung.mall.common.utils.StringUtils.genLklOrderNo(4) + userInfo.put("user_account", user_mobile); userInfo.put("user_mobile", user_mobile); - userInfo.put("user_is_admin", CommonConstant.USER_TYPE_MCH); // 商家入驻注册 + userInfo.put("user_is_admin", userType); // 商家入驻注册 // 随机数明文密码 String user_password = com.suisung.mall.common.utils.StringUtils.random(6, com.suisung.mall.common.utils.StringUtils.RandomType.STRING); userInfo.put("user_password", user_password); - userInfo.put("is_admin", CommonConstant.USER_TYPE_MCH); // 商家入驻注册 + userInfo.put("is_admin", userType); // 商家入驻注册 // 注:注册商家账号,都是需要手机号绑定的。 accountUserBase = register(userInfo); @@ -2862,7 +3077,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params = new HashMap<>(); - params.put("client_id", isMerch ? AuthConstant.MCH_CLIENT_ID : AuthConstant.MOBILE_CLIENT_ID); + params.put("client_id", CommonConstant.USER_TYPE_MCH.equals(userType) ? AuthConstant.MCH_CLIENT_ID : AuthConstant.MOBILE_CLIENT_ID); params.put("client_secret", AuthConstant.AUTHORITY_MOBILE_SECRET); params.put("grant_type", "password"); params.put("verify_pwd", "1001"); // 是否验证密码 1001:不验证;1002:验证(内部登录没有用户明文密码,只能不验证) diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java index bc08fccb..afe8e856 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java @@ -15,6 +15,7 @@ import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.account.AccountUserBase; import com.suisung.mall.common.modules.account.AccountUserBindConnect; import com.suisung.mall.common.modules.account.AccountUserInfo; +import com.suisung.mall.common.pojo.req.WxUserInfoReq; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; @@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -308,4 +310,68 @@ public class AccountUserBindConnectServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("bind_id", mobile) + .eq("bind_type", BindCode.MOBILE) + .eq("user_type", userType) + .eq("user_id", userId) + .eq("bind_active", CommonConstant.Enable); + + AccountUserBindConnect accountUserBindConnect = findOne(queryWrapper); + if (accountUserBindConnect != null) { + return accountUserBindConnect; + } + + // 新增一条绑定数据 + AccountUserBindConnect record = new AccountUserBindConnect(); + record.setBind_id(mobile); + record.setBind_type(BindCode.MOBILE); + record.setUser_id(userId); + record.setUser_type(userType); + record.setBind_openid(wxUserInfoReq.getOpenId()); + record.setBind_unionid(wxUserInfoReq.getUnionId()); + record.setBind_gender(wxUserInfoReq.getGender()); + record.setBind_nickname(wxUserInfoReq.getNickName()); + record.setBind_icon(wxUserInfoReq.getAvatarUrl()); + record.setBind_country(wxUserInfoReq.getCountry()); + record.setBind_province(wxUserInfoReq.getProvince()); + record.setBind_city(wxUserInfoReq.getCity()); + record.setBind_active(CommonConstant.Enable); + record.setBind_time(new Date()); + record.setBind_expires_in(0); + record.setBind_token_ttl(0); + record.setBind_level(0); + record.setBind_vip(0); + + if (save(record)) { + return record; + } + + return null; + } } diff --git a/mall-auth/src/main/java/com/suisung/mall/auth/service/AccountService.java b/mall-auth/src/main/java/com/suisung/mall/auth/service/AccountService.java index eda023ab..4a75e315 100644 --- a/mall-auth/src/main/java/com/suisung/mall/auth/service/AccountService.java +++ b/mall-auth/src/main/java/com/suisung/mall/auth/service/AccountService.java @@ -9,5 +9,6 @@ import org.springframework.web.bind.annotation.RequestParam; public interface AccountService { @GetMapping("/admin/account/account-user-base/loadByUsername") - UserDto loadUserByUsername(@RequestParam("user_account") String user_account); + UserDto loadUserByUsername(@RequestParam("user_account") String user_account, @RequestParam(name = "user_is_admin", required = false) Integer user_is_admin); + } diff --git a/mall-auth/src/main/java/com/suisung/mall/auth/service/impl/UserServiceImpl.java b/mall-auth/src/main/java/com/suisung/mall/auth/service/impl/UserServiceImpl.java index ed490934..04338d2b 100644 --- a/mall-auth/src/main/java/com/suisung/mall/auth/service/impl/UserServiceImpl.java +++ b/mall-auth/src/main/java/com/suisung/mall/auth/service/impl/UserServiceImpl.java @@ -1,9 +1,11 @@ package com.suisung.mall.auth.service.impl; +import cn.hutool.core.util.ObjectUtil; import com.suisung.mall.auth.constant.MessageConstant; import com.suisung.mall.auth.domain.SecurityUser; import com.suisung.mall.auth.service.AccountService; import com.suisung.mall.common.constant.AuthConstant; +import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.domain.UserDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AccountExpiredException; @@ -33,11 +35,13 @@ public class UserServiceImpl implements UserDetailsService { String client_id = request.getParameter("client_id"); UserDto userDto; if (AuthConstant.ADMIN_CLIENT_ID.equals(client_id)) { - userDto = accountService.loadUserByUsername(username); + userDto = accountService.loadUserByUsername(username, CommonConstant.USER_TYPE_ADMIN); + } else if (AuthConstant.MCH_CLIENT_ID.equals(client_id)) { + userDto = accountService.loadUserByUsername(username, CommonConstant.USER_TYPE_MCH); } else { - userDto = accountService.loadUserByUsername(username); + userDto = accountService.loadUserByUsername(username, CommonConstant.USER_TYPE_NORMAL); } - if (userDto == null) { + if (ObjectUtil.isEmpty(userDto)) { throw new UsernameNotFoundException(MessageConstant.USERNAME_PASSWORD_ERROR); } userDto.setClient_id(client_id); diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/req/WxUserInfoReq.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/req/WxUserInfoReq.java new file mode 100644 index 00000000..88269610 --- /dev/null +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/req/WxUserInfoReq.java @@ -0,0 +1,48 @@ +/* + * 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.common.pojo.req; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(description = "微信小程序用户信息请求参数") +public class WxUserInfoReq implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("认证手机号") + private String phoneNumber; + @ApiModelProperty("国家通信编号") + private String CountryCode; + @ApiModelProperty("openId") + private String openId; + @ApiModelProperty("unionId") + private String unionId; + @ApiModelProperty("会员真实姓名") + private String nickName; + @ApiModelProperty("会员性别:1-男;2-女;") + private Integer gender; + @ApiModelProperty("省份") + private String province; + @ApiModelProperty("城市") + private String city; + @ApiModelProperty("县") + private String country; + @ApiModelProperty("头像") + private String avatarUrl; +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/mobile/ShopMerchEntryController.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/mobile/ShopMerchEntryController.java index 7772b908..16047d3b 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/mobile/ShopMerchEntryController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/mobile/ShopMerchEntryController.java @@ -59,10 +59,6 @@ public class ShopMerchEntryController extends BaseControllerImpl { @ApiOperation(value = "获取商家入驻资料详情", notes = "获取商家入驻资料详情") @RequestMapping(value = "/detail", method = RequestMethod.POST) public CommonResult shopMerchEntryDetail(@RequestBody JSONObject jsonParam) { - // approvalStatus 入驻商家的审批状态:1-已通过;2-未通过;3-待审核; -// List approvalStatusList = new ArrayList(); -// approvalStatusList.add(2); -// approvalStatusList.add(3); return shopMerchEntryService.shopMerchEntryDetail(null, jsonParam.getStr("mobile"), null); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java index 26c2ce15..bc5c4e99 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMerchEntryServiceImpl.java @@ -391,14 +391,32 @@ public class ShopMerchEntryServiceImpl extends BaseServiceImpl contractInfo = esignContractService.checkSignFlowStatus(record.getLogin_mobile()); if (contractInfo != null) { record.setSigned_status(contractInfo.getFirst()); record.setContract_download_url(contractInfo.getSecond()); - // 更改同步合同审核状态和下载地址失败 + // 更改同步合同审核状态和合同下载地址 taskService.executeTask(() -> { log.debug("###更改同步合同审核状态和下载地址###"); if (!updateMerchEntrySignedStatusAndContractDownloadUrl(record.getLogin_mobile(), record.getSigned_status(), record.getContract_download_url())) { @@ -407,8 +425,6 @@ public class ShopMerchEntryServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("login_mobile", loginMobile) - .select("id", "approval_status", "approval_remark", "approval_invalid_col") + .select("id", "approval_status", "approval_remark", "login_mobile", "approval_invalid_col", "signed_status", "contract_download_url") .orderByAsc("id"); List recordList = list(queryWrapper); @@ -572,7 +588,12 @@ public class ShopMerchEntryServiceImpl extends BaseServiceImpl resp = wxQrCodeService.genUnlimitedWxQrCode("pagesub/index/store", "store_id=" + store_id); - if (StrUtil.isNotBlank(resp.getFirst())) { - updateStoreBaseQrCode(store_id, resp.getFirst()); + if (StrUtil.isBlank(store_row.getWx_qrcode())) { + // 生成店铺的太阳码 2025-03-31 + Pair resp = wxQrCodeService.genUnlimitedWxQrCode("pagesub/index/store", "store_id=" + store_id); + if (StrUtil.isNotBlank(resp.getFirst())) { + updateStoreBaseQrCode(store_id, resp.getFirst()); + } } @@ -2486,6 +2490,10 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl companyQueryWrapper = new QueryWrapper<>(); @@ -3448,17 +3456,17 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl