增加会员增加功能

main
lijun 2026-02-14 22:52:33 +08:00
parent 9d238fe6d0
commit e17411b470
8 changed files with 109 additions and 4 deletions

View File

@ -51,6 +51,14 @@ public class MemberUserController {
@Resource @Resource
private MemberPointRecordService memberPointRecordService; private MemberPointRecordService memberPointRecordService;
@PostMapping("/create")
@Operation(summary = "创建会员用户")
@PreAuthorize("@ss.hasPermission('member:user:create')")
public CommonResult<MemberUserCreateRespVO> createUser(@Valid @RequestBody MemberUserBaseVO createReqVO) {
MemberUserCreateRespVO respVO = memberUserService.createUser(createReqVO);
return success(respVO);
}
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新会员用户") @Operation(summary = "更新会员用户")
@PreAuthorize("@ss.hasPermission('member:user:update')") @PreAuthorize("@ss.hasPermission('member:user:update')")

View File

@ -0,0 +1,23 @@
package com.yanzhu.module.member.controller.admin.user.vo;
import lombok.Data;
/**
* VO
*
* @author
*/
@Data
public class MemberUserCreateRespVO {
/**
*
*/
private Long userId;
/**
*
*/
private String password;
}

View File

@ -3,6 +3,8 @@ package com.yanzhu.module.member.service.user;
import com.yanzhu.framework.common.enums.TerminalEnum; import com.yanzhu.framework.common.enums.TerminalEnum;
import com.yanzhu.framework.common.pojo.PageResult; import com.yanzhu.framework.common.pojo.PageResult;
import com.yanzhu.framework.common.validation.Mobile; import com.yanzhu.framework.common.validation.Mobile;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserBaseVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserCreateRespVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserPageReqVO; import com.yanzhu.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import com.yanzhu.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import com.yanzhu.module.member.controller.app.user.vo.*; import com.yanzhu.module.member.controller.app.user.vo.*;
@ -130,6 +132,14 @@ public interface MemberUserService {
*/ */
boolean isPasswordMatch(String rawPassword, String encodedPassword); boolean isPasswordMatch(String rawPassword, String encodedPassword);
/**
*
*
* @param createReqVO
* @return
*/
MemberUserCreateRespVO createUser(@Valid MemberUserBaseVO createReqVO);
/** /**
* *
* *

View File

@ -6,8 +6,12 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.*; import cn.hutool.core.util.*;
import com.yanzhu.framework.common.enums.CommonStatusEnum; import com.yanzhu.framework.common.enums.CommonStatusEnum;
import com.yanzhu.framework.common.enums.UserTypeEnum; import com.yanzhu.framework.common.enums.UserTypeEnum;
import com.yanzhu.framework.common.enums.TerminalEnum;
import com.yanzhu.framework.common.pojo.PageResult; import com.yanzhu.framework.common.pojo.PageResult;
import com.yanzhu.framework.common.util.object.BeanUtils; import com.yanzhu.framework.common.util.object.BeanUtils;
import com.yanzhu.framework.common.util.servlet.ServletUtils;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserBaseVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserCreateRespVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserPageReqVO; import com.yanzhu.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import com.yanzhu.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import com.yanzhu.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import com.yanzhu.module.member.controller.app.user.vo.*; import com.yanzhu.module.member.controller.app.user.vo.*;
@ -231,6 +235,58 @@ public class MemberUserServiceImpl implements MemberUserService {
return passwordEncoder.encode(password); return passwordEncoder.encode(password);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public MemberUserCreateRespVO createUser(MemberUserBaseVO createReqVO) {
// 校验手机唯一
validateMobileUnique(null, createReqVO.getMobile());
// 创建用户
MemberUserDO user = new MemberUserDO();
user.setMobile(createReqVO.getMobile());
if (createReqVO.getStatus() != null) {
user.setStatus(Integer.valueOf(createReqVO.getStatus()));
}
user.setNickname(createReqVO.getNickname());
user.setAvatar(createReqVO.getAvatar());
user.setName(createReqVO.getName());
user.setSex(createReqVO.getSex());
if (createReqVO.getAreaId() != null) {
user.setAreaId(Math.toIntExact(createReqVO.getAreaId()));
}
user.setBirthday(createReqVO.getBirthday());
user.setMark(createReqVO.getMark());
user.setTagIds(createReqVO.getTagIds());
user.setLevelId(createReqVO.getLevelId());
user.setGroupId(createReqVO.getGroupId());
// 使用手机号码的后6位作为密码
String password = createReqVO.getMobile().substring(createReqVO.getMobile().length() - 6);
user.setPassword(encodePassword(password));
// 设置注册信息
user.setRegisterIp(ServletUtils.getClientIP());
user.setRegisterTerminal(TerminalEnum.H5.getTerminal());
// 插入数据库
memberUserMapper.insert(user);
// 发送 MQ 消息:用户创建
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
memberUserProducer.sendUserCreateMessage(user.getId());
}
});
// 构建返回结果
MemberUserCreateRespVO respVO = new MemberUserCreateRespVO();
respVO.setUserId(user.getId());
respVO.setPassword(password);
return respVO;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateUser(MemberUserUpdateReqVO updateReqVO) { public void updateUser(MemberUserUpdateReqVO updateReqVO) {

View File

@ -32,6 +32,11 @@ export const getUser = async (id: number) => {
return await request.get({ url: `/member/user/get?id=` + id }) return await request.get({ url: `/member/user/get?id=` + id })
} }
// 创建会员用户
export const createUser = async (data: UserVO) => {
return await request.post({ url: `/member/user/create`, data })
}
// 修改会员用户 // 修改会员用户
export const updateUser = async (data: UserVO) => { export const updateUser = async (data: UserVO) => {
return await request.put({ url: `/member/user/update`, data }) return await request.put({ url: `/member/user/update`, data })

View File

@ -138,8 +138,7 @@ const submitForm = async () => {
try { try {
const data = formData.value as unknown as UserApi.UserVO const data = formData.value as unknown as UserApi.UserVO
if (formType.value === 'create') { if (formType.value === 'create') {
// await UserApi.createUser(data)
// await UserApi.createUser(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await UserApi.updateUser(data) await UserApi.updateUser(data)

View File

@ -58,6 +58,10 @@
<MemberGroupSelect v-model="queryParams.groupId" /> <MemberGroupSelect v-model="queryParams.groupId" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button v-hasPermi="['member:user:create']" @click="openForm('create')">
<Icon class="mr-5px" icon="ep:plus" />
新增
</el-button>
<el-button @click="handleQuery"> <el-button @click="handleQuery">
<Icon class="mr-5px" icon="ep:search" /> <Icon class="mr-5px" icon="ep:search" />
搜索 搜索

View File

@ -31,8 +31,8 @@ export const password = {
}, },
{ {
validateFunction: function (rule, value, data, callback) { validateFunction: function (rule, value, data, callback) {
if (!/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/.test(value)) { if (value.length < 6) {
callback('需包含字母和数字,长度在6-12之间'); callback('密码长度至少6位');
} }
return true; return true;
}, },