新增了子账号的功能(初版底层逻辑后期待完善) , 修改了充值待处理短信的发送步骤 , sys_user_expand 增加字段2个 , sub_user_ids varchar 2000 子账号ID集合 , main_user_id varchar 36 子账号关联的主账号ID 。 新增后需要更新sys_user_expand表的相关视图

This commit is contained in:
1215525055@qq.com 2025-03-20 17:06:16 +08:00
parent 603d5c8624
commit dd56d1415f
11 changed files with 697 additions and 52 deletions

View File

@ -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;
}
}

View File

@ -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<SubUserDTO> list(@PathVariable("mainUserId") String mainUserId) {
UserExpandDTO userExpandDTO = userExpandService.get(mainUserId);
if(StringUtils.isEmpty(userExpandDTO.getSubUserIds())) {
return new ArrayList<>();
}
List<UserPO> list = iUserService.listPOByUserIds(Arrays.asList(userExpandDTO.getSubUserIds().split(",")));
List<SubUserDTO> 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<String> 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);
}
}

View File

@ -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;
}

View File

@ -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<AccountItemBO> 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<String, Object> 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<List<AccountItemDTO>> 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<String, Object> params = requestParams();
params.put("accountId", userId);
page.setParams(params);

View File

@ -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<SubUserDTO> list(@PathVariable("mainUserId") String mainUserId) {
UserExpandDTO userExpandDTO = userExpandService.get(mainUserId);
if(StringUtils.isEmpty(userExpandDTO.getSubUserIds())) {
return new ArrayList<>();
}
List<UserPO> list = iUserService.listPOByUserIds(Arrays.asList(userExpandDTO.getSubUserIds().split(",")));
List<SubUserDTO> 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<String> 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);
}
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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<String, String> 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
" <p style=\"text-align: center;\"><span style=\"color: rgb(194, 79, 74);\">备注内容 : <span style=\"text-decoration: underline;\" id=\"bankRemark\">" + bankDTO.getBankRemark() + "</span></span></p>";
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<String, String> templateParams = new HashMap<>();
templateParams.put("count", 1 + "");
templateParams.put("money", accountRechargeDTO.getRechargeMoney() + "");
TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00005", templateParams, phoneArray);
accountRechargeDao.update(params);
}

View File

@ -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<String, Object> 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<String, Object> 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) {

View File

@ -27,6 +27,8 @@
<result column="relation_ic_rebate_ratio" property="relationIcRebateRatio"/>
<result column="relation_ic_time" property="relationIcTime"/>
<result column="relation_ic_user_id" property="relationIcUserId"/>
<result column="sub_user_ids" property="subUserIds"/>
<result column="main_user_id" property="mainUserId"/>
</resultMap>
<resultMap id="userExpandPO" type="cn.com.tenlion.operator.pojo.pos.user.expand.UserExpandPO">
@ -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}
)
</insert>
@ -124,6 +130,12 @@
<if test="icPriceMaterial != null">
ic_price_material = #{icPriceMaterial},
</if>
<if test="subUserIds != null">
sub_user_ids = #{subUserIds},
</if>
<if test="mainUserId != null">
main_user_id = #{mainUserId},
</if>
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