From dd56d1415f2b4014d6349ca11437df780e9c0f28 Mon Sep 17 00:00:00 2001 From: "1215525055@qq.com" <1215525055@qq.com> Date: Thu, 20 Mar 2025 17:06:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=AD=90=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E7=9A=84=E5=8A=9F=E8=83=BD(=E5=88=9D=E7=89=88?= =?UTF-8?q?=E5=BA=95=E5=B1=82=E9=80=BB=E8=BE=91=E5=90=8E=E6=9C=9F=E5=BE=85?= =?UTF-8?q?=E5=AE=8C=E5=96=84)=20,=20=E4=BF=AE=E6=94=B9=E4=BA=86=E5=85=85?= =?UTF-8?q?=E5=80=BC=E5=BE=85=E5=A4=84=E7=90=86=E7=9F=AD=E4=BF=A1=E7=9A=84?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=AD=A5=E9=AA=A4=20,=20sys=5Fuser=5Fexpand?= =?UTF-8?q?=20=20=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B52=E4=B8=AA=20,=20=20?= =?UTF-8?q?=20sub=5Fuser=5Fids=20=20varchar=20=202000=20=20=E5=AD=90?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7ID=E9=9B=86=E5=90=88=20,=20main=5Fuser=5Fid?= =?UTF-8?q?=20=20varchar=20=2036=20=20=20=E5=AD=90=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=9A=84=E4=B8=BB=E8=B4=A6=E5=8F=B7ID=20?= =?UTF-8?q?=E3=80=82=20=E6=96=B0=E5=A2=9E=E5=90=8E=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0sys=5Fuser=5Fexpand=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/user/SubUserDTO.java | 104 ++++++++++++++ .../api/user/UserCreateController.java | 130 ++++++++++++++++++ .../account/AccountResourceController.java | 12 ++ .../AccountItemResourceController.java | 75 ++++++++-- .../user/UserCreateResourceController.java | 124 +++++++++++++++++ .../pojo/dtos/user/expand/UserExpandDTO.java | 24 ++++ .../pojo/vos/user/UserRegisterVO.java | 68 +++++++++ .../pojo/vos/user/expand/UserExpandVO.java | 25 ++++ .../impl/AccountRechargeServiceImpl.java | 34 ++--- .../user/expand/UserExpandServiceImpl.java | 129 +++++++++++++---- .../mapper/user/expand/user-expand.xml | 24 +++- 11 files changed, 697 insertions(+), 52 deletions(-) create mode 100644 src/main/java/cn/com/tenlion/operator/controller/api/user/SubUserDTO.java create mode 100644 src/main/java/cn/com/tenlion/operator/controller/api/user/UserCreateController.java create mode 100644 src/main/java/cn/com/tenlion/operator/controller/resource/user/UserCreateResourceController.java create mode 100644 src/main/java/cn/com/tenlion/operator/pojo/vos/user/UserRegisterVO.java diff --git a/src/main/java/cn/com/tenlion/operator/controller/api/user/SubUserDTO.java b/src/main/java/cn/com/tenlion/operator/controller/api/user/SubUserDTO.java new file mode 100644 index 0000000..f1e85d5 --- /dev/null +++ b/src/main/java/cn/com/tenlion/operator/controller/api/user/SubUserDTO.java @@ -0,0 +1,104 @@ +package cn.com.tenlion.operator.controller.api.user; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel +public class SubUserDTO { + @ApiModelProperty( + name = "userId", + value = "用户ID" + ) + private String userId; + @ApiModelProperty( + name = "username", + value = "用户名" + ) + private String username; + @ApiModelProperty( + name = "name", + value = "昵称" + ) + private String name; + + @ApiModelProperty( + name = "phone", + value = "手机" + ) + private String phone; + + @ApiModelProperty( + name = "status", + value = "状态" + ) + private String status; + + @ApiModelProperty( + name = "mainUserId", + value = "主账号ID" + ) + private String mainUserId; + + @ApiModelProperty( + name = "subUserIds", + value = "子账号ID集" + ) + private String subUserIds; + + public String getSubUserIds() { + return subUserIds == null ? "" : subUserIds.trim(); + } + + public void setSubUserIds(String subUserIds) { + this.subUserIds = subUserIds; + } + + public String getStatus() { + return status == null ? "" : status.trim(); + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMainUserId() { + return mainUserId == null ? "" : mainUserId.trim(); + } + + public void setMainUserId(String mainUserId) { + this.mainUserId = mainUserId; + } + + public String getUserId() { + return userId == null ? "" : userId.trim(); + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUsername() { + return username == null ? "" : username.trim(); + } + + public void setUsername(String username) { + this.username = username; + } + + public String getName() { + return name == null ? "" : name.trim(); + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone == null ? "" : phone.trim(); + } + + public void setPhone(String phone) { + this.phone = phone; + } +} + diff --git a/src/main/java/cn/com/tenlion/operator/controller/api/user/UserCreateController.java b/src/main/java/cn/com/tenlion/operator/controller/api/user/UserCreateController.java new file mode 100644 index 0000000..f77939d --- /dev/null +++ b/src/main/java/cn/com/tenlion/operator/controller/api/user/UserCreateController.java @@ -0,0 +1,130 @@ +package cn.com.tenlion.operator.controller.api.user; + +import cn.com.tenlion.operator.controller.api.user.SubUserDTO; +import cn.com.tenlion.operator.pojo.dtos.user.expand.UserExpandDTO; +import cn.com.tenlion.operator.pojo.vos.user.UserRegisterVO; +import cn.com.tenlion.operator.service.user.expand.UserExpandServiceImpl; +import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.exceptions.SaveException; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.interfaces.role.IRoleBaseService; +import ink.wgink.module.sms.manager.VerifyCodeManager; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.user.UserDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.service.role.service.IRoleUserService; +import ink.wgink.service.user.enums.UserStateEnum; +import ink.wgink.service.user.enums.UserTypeEnum; +import ink.wgink.service.user.pojo.pos.UserPO; +import ink.wgink.service.user.pojo.vos.UserVO; +import ink.wgink.service.user.service.IUserService; +import ink.wgink.util.RegexUtil; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * ClassName: UserInfoController + * Description: + * Author: wanggeng + * Date: 2024/7/23 上午10:09 + * Version: 1.0 + */ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "企业用户创建员工接口") +@RestController +@RequestMapping(ISystemConstant.API_PREFIX + "/user-create") +public class UserCreateController extends DefaultBaseController { + + @Autowired + private IUserService iUserService; + @Autowired + private IRoleBaseService iRoleBaseService; + @Autowired + private IRoleUserService iRoleUserService; + @Autowired + private UserExpandServiceImpl userExpandService; + private static final String REGEX_MOBILE_PHONE = "^1[3-9]\\d{9}$"; + + /** + * 获取当前账号的主账号ID或子账号ID集 + * @param userId + * @return + */ + @GetMapping("get/{userId}") + public SubUserDTO get(@PathVariable("userId") String userId) { + UserExpandDTO userExpandDTO = userExpandService.get(userId); + UserDTO userDTO = iUserService.get(userId); + SubUserDTO dto = new SubUserDTO(); + dto.setUserId(userDTO.getUserId()); + dto.setName(userDTO.getUserName()); + dto.setUsername(userDTO.getUserUsername()); + dto.setPhone(userDTO.getUserPhone()); + dto.setStatus(userDTO.getUserState() + ""); + dto.setMainUserId(userExpandDTO.getMainUserId()); + dto.setSubUserIds(userExpandDTO.getSubUserIds()); + return dto; + } + + /** + * 封禁或解禁子账号 + * @param mainUserId + * @return + */ + @GetMapping("change-status/{mainUserId}/{userId}") + public SuccessResult changeStatus(@PathVariable("mainUserId") String mainUserId, @PathVariable("userId") String userId) { + UserExpandDTO userExpandDTO = userExpandService.get(mainUserId); + if(userExpandDTO.getSubUserIds().contains(userId)) { + UserDTO userDTO = iUserService.get(userId); + iUserService.updateUserState(userId, userDTO.getUserState().equals(0) ? UserStateEnum.LOCK : UserStateEnum.NORMAL); + } + return new SuccessResult(); + } + + /** + * 子账号的列表 + * @param mainUserId + * @return + */ + @GetMapping("list/{mainUserId}") + public List list(@PathVariable("mainUserId") String mainUserId) { + UserExpandDTO userExpandDTO = userExpandService.get(mainUserId); + if(StringUtils.isEmpty(userExpandDTO.getSubUserIds())) { + return new ArrayList<>(); + } + List list = iUserService.listPOByUserIds(Arrays.asList(userExpandDTO.getSubUserIds().split(","))); + List listData = new ArrayList<>(); + for(UserPO po : list) { + SubUserDTO dto = new SubUserDTO(); + dto.setUserId(po.getUserId()); + dto.setName(po.getUserName()); + dto.setUsername(po.getUserUsername()); + dto.setPhone(po.getUserPhone()); + dto.setStatus(po.getUserState() + ""); + dto.setMainUserId(mainUserId); + listData.add(dto); + } + return listData; + } + + + /** + * 子账号的创建 + * @param mainUserId + * @param userRegisterVO + * @return + */ + @PutMapping("register/{mainUserId}") + public SuccessResultData register(@PathVariable("mainUserId") String mainUserId, @RequestBody UserRegisterVO userRegisterVO) { + String userId = userExpandService.saveSub(mainUserId, userRegisterVO); + VerifyCodeManager verifyCodeManager = VerifyCodeManager.getInstance(); + verifyCodeManager.clearUsedVerifyCode(userRegisterVO.getPhone()); + return new SuccessResultData<>(userId); + } + +} diff --git a/src/main/java/cn/com/tenlion/operator/controller/resource/account/AccountResourceController.java b/src/main/java/cn/com/tenlion/operator/controller/resource/account/AccountResourceController.java index 12a42f1..c537b81 100644 --- a/src/main/java/cn/com/tenlion/operator/controller/resource/account/AccountResourceController.java +++ b/src/main/java/cn/com/tenlion/operator/controller/resource/account/AccountResourceController.java @@ -2,8 +2,10 @@ package cn.com.tenlion.operator.controller.resource.account; import cn.com.tenlion.operator.pojo.bos.account.AccountBO; import cn.com.tenlion.operator.pojo.dtos.accountbank.AccountBankDTO; +import cn.com.tenlion.operator.pojo.dtos.user.expand.UserExpandDTO; import cn.com.tenlion.operator.pojo.vos.accountitem.AccountItemOrderVO; import cn.com.tenlion.operator.service.accountbank.IAccountBankService; +import cn.com.tenlion.operator.service.user.expand.UserExpandServiceImpl; import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; import ink.wgink.interfaces.consts.ISystemConstant; @@ -16,6 +18,7 @@ import cn.com.tenlion.operator.pojo.dtos.account.AccountDTO; import cn.com.tenlion.operator.pojo.vos.account.AccountVO; import cn.com.tenlion.operator.service.account.IAccountService; import io.swagger.annotations.*; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -41,6 +44,8 @@ public class AccountResourceController extends DefaultBaseController { @Autowired private IAccountBankService iAccountBankService; + @Autowired + private UserExpandServiceImpl userExpandService; @ApiOperation(value = "客户账户详情", notes = "客户账户详情接口") @ApiImplicitParams({ @@ -50,6 +55,13 @@ public class AccountResourceController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("get/{userId}") public AccountDTO get(@PathVariable("userId") String userId) { + /** + * 2025年3月13日16:59:39 增加子账号查询 + */ + UserExpandDTO userExpandDTO = userExpandService.get(userId); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + userId = userExpandDTO.getMainUserId(); + } AccountDTO dto = accountService.get(userId); return dto; } diff --git a/src/main/java/cn/com/tenlion/operator/controller/resource/accountitem/AccountItemResourceController.java b/src/main/java/cn/com/tenlion/operator/controller/resource/accountitem/AccountItemResourceController.java index eba9984..5bf8f70 100644 --- a/src/main/java/cn/com/tenlion/operator/controller/resource/accountitem/AccountItemResourceController.java +++ b/src/main/java/cn/com/tenlion/operator/controller/resource/accountitem/AccountItemResourceController.java @@ -2,7 +2,9 @@ package cn.com.tenlion.operator.controller.resource.accountitem; import cn.com.tenlion.operator.enums.AccountItemTypeEnum; import cn.com.tenlion.operator.pojo.bos.accountitem.AccountItemBO; +import cn.com.tenlion.operator.pojo.dtos.user.expand.UserExpandDTO; import cn.com.tenlion.operator.pojo.vos.accountitem.AccountItemOrderVO; +import cn.com.tenlion.operator.service.user.expand.UserExpandServiceImpl; import cn.com.tenlion.operator.util.EncryptUtil; import com.alibaba.fastjson.JSONObject; import ink.wgink.annotation.CheckRequestBodyAnnotation; @@ -18,6 +20,7 @@ import cn.com.tenlion.operator.pojo.dtos.accountitem.AccountItemDTO; import cn.com.tenlion.operator.pojo.vos.accountitem.AccountItemVO; import cn.com.tenlion.operator.service.accountitem.IAccountItemService; import io.swagger.annotations.*; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -43,6 +46,8 @@ public class AccountItemResourceController extends DefaultBaseController { @Autowired protected SecurityComponent securityComponent; + @Autowired + private UserExpandServiceImpl userExpandService; @ApiOperation(value = "代理商订单完成", notes = "代理商订单完成接口") @ApiImplicitParams({ @@ -67,12 +72,22 @@ public class AccountItemResourceController extends DefaultBaseController { if (!money.equals(accountItemOrderVO.getAccountMoney()) || !userId.equals(accountItemOrderVO.getUserId()) || !orderId.equals(accountItemOrderVO.getOrderId())) { throw new SaveException("鉴权失败"); } + String msg = ""; + /** + * 增加子账号 2025年3月13日17:02:07 + */ + String userId1 = accountItemOrderVO.getUserId(); + UserExpandDTO userExpandDTO = userExpandService.get(accountItemOrderVO.getUserId()); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + msg = " / 子账号" + userExpandDTO.getUserUsername(); + userId1 = userExpandDTO.getMainUserId(); + } AccountItemVO accountItemVO = new AccountItemVO(); accountItemVO.setMode(1); // 入账 accountItemVO.setType(5); // 收入类型 订单收入 - accountItemVO.setAccountId(accountItemOrderVO.getUserId()); + accountItemVO.setAccountId(userId1); accountItemVO.setAccountMoney(accountItemOrderVO.getAccountMoney()); - accountItemVO.setDescription(accountItemOrderVO.getDescription()); + accountItemVO.setDescription(accountItemOrderVO.getDescription() + msg); accountItemVO.setOrderId(accountItemOrderVO.getOrderId()); accountItemVO.setOrderType("shop"); accountItemService.saveShopReturnId(accountItemVO); @@ -102,12 +117,22 @@ public class AccountItemResourceController extends DefaultBaseController { if (!money.equals(accountItemOrderVO.getAccountMoney()) || !userId.equals(accountItemOrderVO.getUserId()) || !orderId.equals(accountItemOrderVO.getOrderId())) { throw new SaveException("鉴权失败"); } + String msg = ""; + /** + * 增加子账号 2025年3月13日17:02:07 + */ + String userId1 = accountItemOrderVO.getUserId(); + UserExpandDTO userExpandDTO = userExpandService.get(accountItemOrderVO.getUserId()); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + msg = " / 子账号" + userExpandDTO.getUserUsername(); + userId1 = userExpandDTO.getMainUserId(); + } AccountItemVO accountItemVO = new AccountItemVO(); accountItemVO.setMode(1); // 入账 accountItemVO.setType(5); // 收入类型 订单收入 - accountItemVO.setAccountId(accountItemOrderVO.getUserId()); + accountItemVO.setAccountId(userId1); accountItemVO.setAccountMoney(accountItemOrderVO.getAccountMoney()); - accountItemVO.setDescription(accountItemOrderVO.getDescription()); + accountItemVO.setDescription(accountItemOrderVO.getDescription() + msg); accountItemVO.setOrderId(accountItemOrderVO.getOrderId()); accountItemVO.setOrderType("agent"); accountItemService.saveAgentReturnId("agent", accountItemVO); @@ -137,6 +162,16 @@ public class AccountItemResourceController extends DefaultBaseController { if (!money.equals(accountItemOrderVO.getAccountMoney()) || !userId.equals(accountItemOrderVO.getUserId()) || !orderId.equals(accountItemOrderVO.getOrderId())) { throw new SaveException("鉴权失败"); } + String msg = ""; + /** + * 增加子账号 2025年3月13日17:02:07 + */ + String userId1 = accountItemOrderVO.getUserId(); + UserExpandDTO userExpandDTO = userExpandService.get(accountItemOrderVO.getUserId()); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + msg = " / 子账号" + userExpandDTO.getUserUsername(); + userId1 = userExpandDTO.getMainUserId(); + } AccountItemVO accountItemVO = new AccountItemVO(); accountItemVO.setMode(1); // 入账 accountItemVO.setType(( @@ -144,9 +179,9 @@ public class AccountItemResourceController extends DefaultBaseController { accountItemOrderVO.getType() == AccountItemTypeEnum.PAYMENT_SPLIT.getValue() || accountItemOrderVO.getType() == AccountItemTypeEnum.REFUND.getValue() ) ? accountItemOrderVO.getType() : AccountItemTypeEnum.PAYMENT_SPLIT.getValue()); // 收入类型 充值 | 分账入账 | 退款入账 - accountItemVO.setAccountId(accountItemOrderVO.getUserId()); + accountItemVO.setAccountId(userId1); accountItemVO.setAccountMoney(accountItemOrderVO.getAccountMoney()); - accountItemVO.setDescription(accountItemOrderVO.getDescription()); + accountItemVO.setDescription(accountItemOrderVO.getDescription() + msg); accountItemVO.setOrderId(accountItemOrderVO.getOrderId()); accountItemVO.setOrderType(type); accountItemService.saveReturnId(accountItemVO); @@ -178,6 +213,16 @@ public class AccountItemResourceController extends DefaultBaseController { if (!money.equals(accountItemOrderVO.getAccountMoney()) || !userId.equals(accountItemOrderVO.getUserId()) || !orderId.equals(accountItemOrderVO.getOrderId())) { throw new SaveException("鉴权失败"); } + String msg = ""; + /** + * 增加子账号 2025年3月13日17:02:07 + */ + String userId1 = accountItemOrderVO.getUserId(); + UserExpandDTO userExpandDTO = userExpandService.get(accountItemOrderVO.getUserId()); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + msg = " / 子账号" + userExpandDTO.getUserUsername(); + userId1 = userExpandDTO.getMainUserId(); + } AccountItemVO accountItemVO = new AccountItemVO(); accountItemVO.setMode(2); // 出账 accountItemVO.setType( @@ -186,9 +231,9 @@ public class AccountItemResourceController extends DefaultBaseController { accountItemOrderVO.getType() == AccountItemTypeEnum.SYSTEM_DEDUCTION.getValue() || accountItemOrderVO.getType() == AccountItemTypeEnum.REFUND_DEDUCTION.getValue() ) ? accountItemOrderVO.getType() : AccountItemTypeEnum.PAY_OUT.getValue()); // 支出类型 系统扣款 | 支出 | 提现 / 退款 - accountItemVO.setAccountId(accountItemOrderVO.getUserId()); + accountItemVO.setAccountId(userId1); accountItemVO.setAccountMoney(accountItemOrderVO.getAccountMoney()); - accountItemVO.setDescription(accountItemOrderVO.getDescription()); + accountItemVO.setDescription(accountItemOrderVO.getDescription() + msg); accountItemVO.setOrderId(accountItemOrderVO.getOrderId()); accountItemVO.setOrderType(type); accountItemVO.setIsPostpaid(accountItemOrderVO.getIsPostpaid()); @@ -203,6 +248,13 @@ public class AccountItemResourceController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("list/{userId}") public List list(@PathVariable("userId") String userId) { + /** + * 增加子账号 2025年3月13日17:02:07 + */ + UserExpandDTO userExpandDTO = userExpandService.get(userId); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + userId = userExpandDTO.getMainUserId(); + } Map params = requestParams(); params.put("accountId", userId); return accountItemService.listBO(params); @@ -218,6 +270,13 @@ public class AccountItemResourceController extends DefaultBaseController { @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("listpage/{userId}") public SuccessResultList> listPage(@PathVariable("userId") String userId, ListPage page) { + /** + * 增加子账号 2025年3月13日17:02:07 + */ + UserExpandDTO userExpandDTO = userExpandService.get(userId); + if(!StringUtils.isEmpty(userExpandDTO.getMainUserId())) { + userId = userExpandDTO.getMainUserId(); + } Map params = requestParams(); params.put("accountId", userId); page.setParams(params); diff --git a/src/main/java/cn/com/tenlion/operator/controller/resource/user/UserCreateResourceController.java b/src/main/java/cn/com/tenlion/operator/controller/resource/user/UserCreateResourceController.java new file mode 100644 index 0000000..55194a5 --- /dev/null +++ b/src/main/java/cn/com/tenlion/operator/controller/resource/user/UserCreateResourceController.java @@ -0,0 +1,124 @@ +package cn.com.tenlion.operator.controller.resource.user; + +import cn.com.tenlion.operator.controller.api.user.SubUserDTO; +import cn.com.tenlion.operator.pojo.dtos.user.expand.UserExpandDTO; +import cn.com.tenlion.operator.pojo.vos.user.UserRegisterVO; +import cn.com.tenlion.operator.service.user.expand.UserExpandServiceImpl; +import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.interfaces.role.IRoleBaseService; +import ink.wgink.module.sms.manager.VerifyCodeManager; +import ink.wgink.pojo.dtos.user.UserDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.service.role.service.IRoleUserService; +import ink.wgink.service.user.enums.UserStateEnum; +import ink.wgink.service.user.pojo.pos.UserPO; +import ink.wgink.service.user.service.IUserService; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * ClassName: UserInfoController + * Description: + * Author: wanggeng + * Date: 2024/7/23 上午10:09 + * Version: 1.0 + */ +@RestController +@RequestMapping(ISystemConstant.RESOURCE_PREFIX + "/user-create") +public class UserCreateResourceController extends DefaultBaseController { + + @Autowired + private IUserService iUserService; + @Autowired + private IRoleBaseService iRoleBaseService; + @Autowired + private IRoleUserService iRoleUserService; + @Autowired + private UserExpandServiceImpl userExpandService; + private static final String REGEX_MOBILE_PHONE = "^1[3-9]\\d{9}$"; + + /** + * 获取当前账号的主账号ID或子账号ID集 + * @param userId + * @return + */ + @GetMapping("get/{userId}") + public SubUserDTO get(@PathVariable("userId") String userId) { + UserExpandDTO userExpandDTO = userExpandService.get(userId); + UserDTO userDTO = iUserService.get(userId); + SubUserDTO dto = new SubUserDTO(); + dto.setUserId(userDTO.getUserId()); + dto.setName(userDTO.getUserName()); + dto.setUsername(userDTO.getUserUsername()); + dto.setPhone(userDTO.getUserPhone()); + dto.setStatus(userDTO.getUserState() + ""); + dto.setMainUserId(userExpandDTO.getMainUserId()); + dto.setSubUserIds(userExpandDTO.getSubUserIds()); + return dto; + } + + /** + * 封禁或解禁子账号 + * @param mainUserId + * @return + */ + @GetMapping("change-status/{mainUserId}/{userId}") + public SuccessResult changeStatus(@PathVariable("mainUserId") String mainUserId, @PathVariable("userId") String userId) { + UserExpandDTO userExpandDTO = userExpandService.get(mainUserId); + if(userExpandDTO.getSubUserIds().contains(userId)) { + UserDTO userDTO = iUserService.get(userId); + iUserService.updateUserState(userId, userDTO.getUserState().equals(0) ? UserStateEnum.LOCK : UserStateEnum.NORMAL); + } + return new SuccessResult(); + } + + /** + * 子账号的列表 + * @param mainUserId + * @return + */ + @GetMapping("list/{mainUserId}") + public List list(@PathVariable("mainUserId") String mainUserId) { + UserExpandDTO userExpandDTO = userExpandService.get(mainUserId); + if(StringUtils.isEmpty(userExpandDTO.getSubUserIds())) { + return new ArrayList<>(); + } + List list = iUserService.listPOByUserIds(Arrays.asList(userExpandDTO.getSubUserIds().split(","))); + List listData = new ArrayList<>(); + for(UserPO po : list) { + SubUserDTO dto = new SubUserDTO(); + dto.setUserId(po.getUserId()); + dto.setName(po.getUserName()); + dto.setUsername(po.getUserUsername()); + dto.setPhone(po.getUserPhone()); + dto.setStatus(po.getUserState() + ""); + dto.setMainUserId(mainUserId); + listData.add(dto); + } + return listData; + } + + + /** + * 子账号的创建 + * @param mainUserId + * @param userRegisterVO + * @return + */ + @PutMapping("register/{mainUserId}") + public SuccessResultData register(@PathVariable("mainUserId") String mainUserId, @RequestBody UserRegisterVO userRegisterVO) { + String userId = userExpandService.saveSub(mainUserId, userRegisterVO); + VerifyCodeManager verifyCodeManager = VerifyCodeManager.getInstance(); + verifyCodeManager.clearUsedVerifyCode(userRegisterVO.getPhone()); + return new SuccessResultData<>(userId); + } + +} diff --git a/src/main/java/cn/com/tenlion/operator/pojo/dtos/user/expand/UserExpandDTO.java b/src/main/java/cn/com/tenlion/operator/pojo/dtos/user/expand/UserExpandDTO.java index d759d0c..b604b1d 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/dtos/user/expand/UserExpandDTO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/dtos/user/expand/UserExpandDTO.java @@ -36,6 +36,30 @@ public class UserExpandDTO extends UserDTO { private Integer relationIcRebateRatio; private String relationIcTime; private String relationIcUserId; + /** + * 子账号ID集合 + */ + private String subUserIds; + /** + * 子账号关联的主账号ID + */ + private String mainUserId; + + public String getSubUserIds() { + return subUserIds == null ? "" : subUserIds.trim(); + } + + public void setSubUserIds(String subUserIds) { + this.subUserIds = subUserIds; + } + + public String getMainUserId() { + return mainUserId == null ? "" : mainUserId.trim(); + } + + public void setMainUserId(String mainUserId) { + this.mainUserId = mainUserId; + } public Long getPriceAdditionalPkg() { return priceAdditionalPkg == null ? 0 : priceAdditionalPkg; diff --git a/src/main/java/cn/com/tenlion/operator/pojo/vos/user/UserRegisterVO.java b/src/main/java/cn/com/tenlion/operator/pojo/vos/user/UserRegisterVO.java new file mode 100644 index 0000000..9450acc --- /dev/null +++ b/src/main/java/cn/com/tenlion/operator/pojo/vos/user/UserRegisterVO.java @@ -0,0 +1,68 @@ +package cn.com.tenlion.operator.pojo.vos.user; + +import cn.com.tenlion.operator.enums.ApplyStatusEnum; +import ink.wgink.annotation.CheckEmptyAnnotation; +import ink.wgink.annotation.CheckNullAnnotation; + +/** + * ClassName: UserIcApplyVO + * Description: + * Author: wanggeng + * Date: 2024/8/8 下午3:53 + * Version: 1.0 + */ +public class UserRegisterVO { + + @CheckEmptyAnnotation(name = "手机号") + private String phone; + @CheckEmptyAnnotation(name = "姓名") + private String name; + @CheckEmptyAnnotation(name = "验证码") + private String verifyCode; + @CheckEmptyAnnotation(name = "密码") + private String password; + @CheckEmptyAnnotation(name = "角色") + private String userRole; + + public String getUserRole() { + return userRole == null ? "" : userRole.trim(); + } + + public void setUserRole(String userRole) { + this.userRole = userRole; + } + + public String getName() { + return name == null ? "" : name.trim(); + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone == null ? "" : phone.trim(); + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getVerifyCode() { + return verifyCode == null ? "" : verifyCode.trim(); + } + + public void setVerifyCode(String verifyCode) { + this.verifyCode = verifyCode; + } + + public String getPassword() { + return password == null ? "" : password.trim(); + } + + public void setPassword(String password) { + this.password = password; + } + + +} diff --git a/src/main/java/cn/com/tenlion/operator/pojo/vos/user/expand/UserExpandVO.java b/src/main/java/cn/com/tenlion/operator/pojo/vos/user/expand/UserExpandVO.java index 8d0864d..08425e4 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/vos/user/expand/UserExpandVO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/vos/user/expand/UserExpandVO.java @@ -40,6 +40,31 @@ public class UserExpandVO { private Double icPriceMaterial; private Integer icRebateRatio; + /** + * 子账号ID集合 + */ + private String subUserIds; + /** + * 子账号关联的主账号ID + */ + private String mainUserId; + + public String getSubUserIds() { + return subUserIds == null ? "" : subUserIds.trim(); + } + + public void setSubUserIds(String subUserIds) { + this.subUserIds = subUserIds; + } + + public String getMainUserId() { + return mainUserId == null ? "" : mainUserId.trim(); + } + + public void setMainUserId(String mainUserId) { + this.mainUserId = mainUserId; + } + public Double getPriceAdditionalPkg() { return priceAdditionalPkg == null ? 0 : priceAdditionalPkg; } diff --git a/src/main/java/cn/com/tenlion/operator/service/accountrecharge/impl/AccountRechargeServiceImpl.java b/src/main/java/cn/com/tenlion/operator/service/accountrecharge/impl/AccountRechargeServiceImpl.java index 60d61e2..3399610 100644 --- a/src/main/java/cn/com/tenlion/operator/service/accountrecharge/impl/AccountRechargeServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/service/accountrecharge/impl/AccountRechargeServiceImpl.java @@ -472,22 +472,7 @@ public class AccountRechargeServiceImpl extends DefaultBaseService implements IA throw new SaveException(result.getData()); } } - if (ThirdPartyEnum.DGZZ.getValue().equals(thirdParty)) { - /** - * 向系统人员发送信息 - */ - JSONArray phoneArray = new JSONArray(); - String[] phones = ProjectConfigUtil.getText("HandleRechargePhones").split(","); - for(String phone : phones) { - com.alibaba.fastjson.JSONObject obj1 = new JSONObject(); - obj1.put("phone", phone); - phoneArray.add(obj1); - } - Map templateParams = new HashMap<>(); - templateParams.put("count", 1 + ""); - templateParams.put("money", PayUtil.buiderMoney(totalMoney) + ""); - TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00005", templateParams, phoneArray); - } + // } return payDTO; } @@ -569,6 +554,23 @@ public class AccountRechargeServiceImpl extends DefaultBaseService implements IA "

备注内容 : " + bankDTO.getBankRemark() + "

"; params.put("selfData", selfData); params.put("rechargeRemark", accountRechargeVO.getRechargeRemark()); + + /** + * 向系统人员发送信息 + */ + AccountRechargeDTO accountRechargeDTO = get(accountRechargeId); + JSONArray phoneArray = new JSONArray(); + String[] phones = ProjectConfigUtil.getText("HandleRechargePhones").split(","); + for(String phone : phones) { + com.alibaba.fastjson.JSONObject obj1 = new JSONObject(); + obj1.put("phone", phone); + phoneArray.add(obj1); + } + Map templateParams = new HashMap<>(); + templateParams.put("count", 1 + ""); + templateParams.put("money", accountRechargeDTO.getRechargeMoney() + ""); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00005", templateParams, phoneArray); + accountRechargeDao.update(params); } diff --git a/src/main/java/cn/com/tenlion/operator/service/user/expand/UserExpandServiceImpl.java b/src/main/java/cn/com/tenlion/operator/service/user/expand/UserExpandServiceImpl.java index a1002b6..b6b50de 100644 --- a/src/main/java/cn/com/tenlion/operator/service/user/expand/UserExpandServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/service/user/expand/UserExpandServiceImpl.java @@ -5,21 +5,32 @@ import cn.com.tenlion.operator.enums.IcWayToGetEnum; import cn.com.tenlion.operator.pojo.dtos.ic.UsericDTO; import cn.com.tenlion.operator.pojo.dtos.user.expand.UserExpandDTO; import cn.com.tenlion.operator.pojo.pos.user.expand.UserExpandPO; +import cn.com.tenlion.operator.pojo.vos.user.UserRegisterVO; import cn.com.tenlion.operator.pojo.vos.user.expand.UserExpandVO; import cn.com.tenlion.operator.pojo.vos.user.expand.ic.UserExpandRelationIcVO; import cn.com.tenlion.operator.properties.SystemApiPathProperties; import cn.com.tenlion.operator.remote.IOperatorPluginRemoteService; +import cn.com.tenlion.operator.util.pay.PayUtil; import com.alibaba.fastjson.JSON; import ink.wgink.app.AppTokenManager; import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.SearchException; +import ink.wgink.interfaces.role.IRoleBaseService; import ink.wgink.interfaces.user.IUserExpandBaseService; import ink.wgink.module.oauth2.manager.OAuth2ClientTokenManager; +import ink.wgink.module.sms.manager.VerifyCodeManager; import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.dtos.role.RoleDTO; import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.role.service.IRoleUserService; +import ink.wgink.service.user.enums.UserStateEnum; +import ink.wgink.service.user.enums.UserTypeEnum; import ink.wgink.service.user.pojo.pos.UserPO; +import ink.wgink.service.user.pojo.vos.UserVO; import ink.wgink.service.user.service.IUserService; +import ink.wgink.util.RegexUtil; import ink.wgink.util.date.DateUtil; import ink.wgink.util.map.HashMapUtil; import org.apache.commons.lang3.StringUtils; @@ -150,6 +161,69 @@ public class UserExpandServiceImpl extends DefaultBaseService implements IUserEx redisTemplate.opsForValue().set("user:expand:" + userExpandPO.getUserId(), JSON.toJSONString(userExpandPO)); } + @Autowired + private IUserService iUserService; + @Autowired + private IRoleBaseService iRoleBaseService; + @Autowired + private IRoleUserService iRoleUserService; + + public String saveSub(String mainUserId, UserRegisterVO userRegisterVO) { + VerifyCodeManager verifyCodeManager = VerifyCodeManager.getInstance(); + String code = verifyCodeManager.getVerifyCode(userRegisterVO.getPhone()); +/* if(!userRegisterVO.getVerifyCode().equals(code)) { + throw new SaveException("验证码错误"); + }*/ + UserVO userVO = new UserVO(); + userVO.setUserUsername(userRegisterVO.getPhone()); + userVO.setUserPassword(userRegisterVO.getPassword()); + userVO.setUserName(userRegisterVO.getName()); + if (RegexUtil.isPhone(userRegisterVO.getPhone())) { + userVO.setUserPhone(userRegisterVO.getPhone()); + } + userVO.setUserState(UserStateEnum.NORMAL.getValue()); + userVO.setUserType(UserTypeEnum.SYSTEM.getValue()); + String userId = iUserService.saveAndReturnId(userVO, true); + + RoleDTO roleDTO = iRoleBaseService.get(userRegisterVO.getUserRole()); + if (roleDTO == null) { + throw new SaveException("子账号角色不存在"); + } + String roleName = roleDTO.getRoleName(); + // 1.修改用户的角色 + iRoleUserService.save(roleDTO.getRoleId(), userId); + + + Map params2 = getHashMap(2); + params2.put("userId", mainUserId); + UserExpandDTO userExpandDTO = userExpandDao.get(params2); + params2.put("subUserIds", userId + "," + userExpandDTO.getSubUserIds()); + userExpandDao.update(params2); + + UserExpandVO userExpandVO = new UserExpandVO(); + userExpandVO.setPriceAdditionalPkg(userExpandDTO.getPriceAdditionalPkg() * 1.0); + userExpandVO.setPriceAdditionalVideoDemo(userExpandDTO.getPriceAdditionalVideoDemo() * 1.0); + userExpandVO.setPriceAdditionalUrgent(userExpandDTO.getPriceAdditionalUrgent() * 1.0); + userExpandVO.setPriceAll(userExpandDTO.getPriceAll() * 1.0); + userExpandVO.setPriceMaterial(userExpandDTO.getPriceMaterial() * 1.0); + userExpandVO.setPriceMaterialAgent(userExpandDTO.getPriceMaterialAgent() * 1.0); + userExpandVO.setPriceMaterialAgentUrgent(userExpandDTO.getPriceMaterialAgentUrgent() * 1.0); + userExpandVO.setIcPriceAll(userExpandDTO.getIcPriceAll() * 1.0); + userExpandVO.setIcPriceMaterial(userExpandDTO.getIcPriceMaterial() * 1.0); + userExpandVO.setIcRebateRatio(userExpandDTO.getIcRebateRatio()); + Map params = HashMapUtil.beanToMap(userExpandVO); + params.put("userId", userId); + params.put("mainUserId", mainUserId); + userExpandDao.save(params); + + updateRedis(userId); + updateRedis(mainUserId); + + updateBatchRelationRebateRatio(userId, userExpandVO.getIcRebateRatio(), userExpandVO.getIcRebateRatio()); + return userId; + } + + public void saveOrUpdate(String userId, UserExpandVO userExpandVO) { userExpandVO.setPriceAdditionalPkg(userExpandVO.getPriceAdditionalPkg() * 100); userExpandVO.setPriceAdditionalVideoDemo(userExpandVO.getPriceAdditionalVideoDemo() * 100); @@ -167,36 +241,43 @@ public class UserExpandServiceImpl extends DefaultBaseService implements IUserEx params = HashMapUtil.beanToMap(userExpandVO); params.put("userId", userId); - if (StringUtils.isNotBlank(userExpandVO.getIc())) { - params.put("icAssignUserId", securityComponent.getCurrentUser().getUserId()); - params.put("icWayToGet", IcWayToGetEnum.ASSIGN); - params.put("icGetTime", DateUtil.getTime()); - } - if (userExpandDTO == null) { - if (StringUtils.isNotBlank(userExpandVO.getIc()) && countIc(userExpandVO.getIc()) > 0) { - throw new SearchException("邀请码已存在,请重新生成"); + + if (!StringUtils.isEmpty(userExpandVO.getMainUserId())) { + if (StringUtils.isNotBlank(userExpandVO.getIc())) { + params.put("icAssignUserId", securityComponent.getCurrentUser().getUserId()); + params.put("icWayToGet", IcWayToGetEnum.ASSIGN); + params.put("icGetTime", DateUtil.getTime()); } - userExpandDao.save(params); - } else { - if (StringUtils.isNotBlank(userExpandDTO.getRelationIc()) && - StringUtils.equals("ACTIVE", userExpandVO.getPostpaid())) { - throw new SearchException("已经绑定邀请码的用户不能设置为后付费用户"); - } - if (StringUtils.isNotBlank(userExpandDTO.getIc())) { - params.remove("ic"); - params.remove("icGetTime"); - params.remove("icAssignUserId"); - params.remove("icPriceAll"); - params.remove("icPriceMaterial"); - } else { + if (userExpandDTO == null) { if (StringUtils.isNotBlank(userExpandVO.getIc()) && countIc(userExpandVO.getIc()) > 0) { throw new SearchException("邀请码已存在,请重新生成"); } + userExpandDao.save(params); + } else { + if (StringUtils.isNotBlank(userExpandDTO.getRelationIc()) && + StringUtils.equals("ACTIVE", userExpandVO.getPostpaid())) { + throw new SearchException("已经绑定邀请码的用户不能设置为后付费用户"); + } + if (StringUtils.isNotBlank(userExpandDTO.getIc())) { + params.remove("ic"); + params.remove("icGetTime"); + params.remove("icAssignUserId"); + params.remove("icPriceAll"); + params.remove("icPriceMaterial"); + } else { + if (StringUtils.isNotBlank(userExpandVO.getIc()) && countIc(userExpandVO.getIc()) > 0) { + throw new SearchException("邀请码已存在,请重新生成"); + } + } + userExpandDao.update(params); } - userExpandDao.update(params); + updateRedis(userId); + updateBatchRelationRebateRatio(userId, userExpandDTO == null ? 0 : userExpandDTO.getIcRebateRatio(), userExpandVO.getIcRebateRatio()); + }else{ + + + } - updateRedis(userId); - updateBatchRelationRebateRatio(userId, userExpandDTO == null ? 0 : userExpandDTO.getIcRebateRatio(), userExpandVO.getIcRebateRatio()); } public void saveOrUpdateWithIc(String userId, UserExpandVO userExpandVO) { diff --git a/src/main/resources/mybatis/mapper/user/expand/user-expand.xml b/src/main/resources/mybatis/mapper/user/expand/user-expand.xml index d0095cd..7351f6e 100644 --- a/src/main/resources/mybatis/mapper/user/expand/user-expand.xml +++ b/src/main/resources/mybatis/mapper/user/expand/user-expand.xml @@ -27,6 +27,8 @@ + + @@ -77,7 +79,9 @@ ic_rebate_ratio, ic_way_to_get, ic_get_time, - ic_assign_user_id + ic_assign_user_id, + sub_user_ids, + main_user_id ) VALUES ( #{userId}, #{priceAdditionalPkg}, @@ -98,7 +102,9 @@ #{icRebateRatio}, #{icWayToGet}, #{icGetTime}, - #{icAssignUserId} + #{icAssignUserId}, + #{subUserIds}, + #{mainUserId} ) @@ -124,6 +130,12 @@ ic_price_material = #{icPriceMaterial}, + + sub_user_ids = #{subUserIds}, + + + main_user_id = #{mainUserId}, + price_additional_pkg = #{priceAdditionalPkg}, price_additional_video_demo = #{priceAdditionalVideoDemo}, price_additional_urgent = #{priceAdditionalUrgent}, @@ -202,7 +214,9 @@ relation_ic, relation_ic_rebate_ratio, relation_ic_time, - relation_ic_user_id + relation_ic_user_id, + sub_user_ids, + main_user_id FROM sys_user_expand WHERE @@ -236,7 +250,9 @@ relation_ic, relation_ic_rebate_ratio, relation_ic_time, - relation_ic_user_id + relation_ic_user_id, + sub_user_ids, + main_user_id FROM sys_user_expand WHERE