员工账号接口实现

This commit is contained in:
张松 2025-02-12 15:14:55 +08:00
parent 7000892d9b
commit 119ef4397d
16 changed files with 392 additions and 24 deletions

View File

@ -4,6 +4,7 @@ import com.czg.account.service.CommonService;
import com.czg.resp.CzgResult;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@ -11,7 +12,8 @@ import org.springframework.web.bind.annotation.RestController;
* 公共接口
* @author Administrator
*/
@RestController("/admin/common")
@RestController
@RequestMapping("/admin/common")
public class CommonController {
@Resource
private CommonService commonService;
@ -21,7 +23,7 @@ public class CommonController {
* @param type 验证码类型
* @return 是否成功
*/
@PostMapping
@PostMapping("/sms")
public CzgResult<Boolean> sendSms(@RequestParam String type) {
return CzgResult.success(commonService.sendSms(type));
}

View File

@ -0,0 +1,75 @@
package com.czg.controller;
import com.czg.account.dto.staff.ShopStaffAddDTO;
import com.czg.account.dto.staff.ShopStaffEditDTO;
import com.czg.account.dto.staff.ShopStaffRemoveDTO;
import com.czg.account.entity.ShopStaff;
import com.czg.account.service.ShopStaffService;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.resp.CzgResult;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 店铺员工管理
*
* @author Administrator
*/
@RestController
@RequestMapping("/admin/shopStaff")
public class ShopStaffController {
@Resource
private ShopStaffService shopStaffService;
/**
* 员工列表
* 权限标识: shopStaff:list
* @param name 账号名
* @param code 员工编号
* @return 分页数据
*/
@SaAdminCheckPermission("shopStaff:list")
@GetMapping
public CzgResult<Page<ShopStaff>> list(String name, String code) {
return CzgResult.success(shopStaffService.get(name, code));
}
/**
* 员工添加
* 权限标识: shopStaff:add
* @param shopStaffAddDTO 添加信息
* @return 是否成功
*/
@SaAdminCheckPermission("shopStaff:add")
@PostMapping
public CzgResult<Boolean> add(@RequestBody @Validated ShopStaffAddDTO shopStaffAddDTO) {
return CzgResult.success(shopStaffService.add(shopStaffAddDTO));
}
/**
* 员工修改
* 权限标识: shopStaff:edit
* @param shopStaffEditDTO 添加信息
* @return 是否成功
*/
@SaAdminCheckPermission("shopStaff:edit")
@PutMapping
public CzgResult<Boolean> edit(@RequestBody @Validated ShopStaffEditDTO shopStaffEditDTO) {
return CzgResult.success(shopStaffService.edit(shopStaffEditDTO));
}
/**
* 员工删除
* 权限标识: shopStaff:del
* @param shopStaffRemoveDTO 删除信息
* @return 是否成功
*/
@SaAdminCheckPermission("shopStaff:del")
@DeleteMapping
public CzgResult<Boolean> delete(@RequestBody @Validated ShopStaffRemoveDTO shopStaffRemoveDTO) {
return CzgResult.success(shopStaffService.delete(shopStaffRemoveDTO));
}
}

View File

@ -0,0 +1,63 @@
package com.czg.account.dto.staff;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author Administrator
*/
@Data
public class ShopStaffAddDTO {
/**
* 角色id
*/
@NotNull(message = "角色id不为空")
private Long roleId;
/**
* 员工姓名
*/
private String name;
/**
* 登录账号
*/
@NotEmpty(message = "登录账号不为空")
private String accountName;
/**
* 登录密码
*/
@NotEmpty(message = "登录密码不为空")
private String accountPwd;
/**
* 手机号
*/
@NotEmpty(message = "手机号不为空")
private String phone;
/**
* 员工编号
*/
@NotEmpty(message = "员工编号不为空")
private String code;
/**
* 优惠类型 1 折扣 0 金额
*/
private Integer discountType = 1;
/**
* 最大优惠金额
*/
private BigDecimal maxDiscountAmount;
/**
* 1启用0不启用
*/
private Integer status = 1;
/**
* 是否允许管理端登录
*/
private Integer isManage = 1;
/**
* 是否允许pc登录
*/
private Integer isPc = 1;
}

View File

@ -0,0 +1,56 @@
package com.czg.account.dto.staff;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author Administrator
*/
@Data
public class ShopStaffEditDTO {
@NotNull(message = "id不为空")
private Long id;
/**
* 角色id
*/
private Long roleId;
/**
* 员工姓名
*/
private String name;
/**
* 登录密码
*/
private String accountPwd;
/**
* 手机号
*/
private String phone;
/**
* 员工编号
*/
private String code;
/**
* 优惠类型 1 折扣 0 金额
*/
private Integer discountType;
/**
* 最大优惠金额
*/
private BigDecimal maxDiscountAmount;
/**
* 1启用0不启用
*/
private Integer status;
/**
* 是否允许管理端登录
*/
private Integer isManage;
/**
* 是否允许pc登录
*/
private Integer isPc;
}

View File

@ -0,0 +1,15 @@
package com.czg.account.dto.staff;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author Administrator
*/
@Data
public class ShopStaffRemoveDTO {
@NotNull(message = "id不为空")
private Long id;
}

View File

@ -64,7 +64,7 @@ public class ShopStaff implements Serializable {
/**
* shopId
*/
private String shopId;
private Long shopId;
@Column(onInsertValue = "now()")
private LocalDateTime createTime;

View File

@ -4,5 +4,19 @@ package com.czg.account.service;
* @author Administrator
*/
public interface CommonService {
/**
* 发送验证码
* @param type 验证码类型
* @return 是否成功
*/
Boolean sendSms(String type);
/**
* 校验短信验证码是否正常
* @param type 验证码类型
* @param code 验证码
* @return 是否正确
*/
Boolean checkSmsCode(String type, String code);
}

View File

@ -1,6 +1,10 @@
package com.czg.account.service;
import com.czg.account.dto.staff.ShopStaffAddDTO;
import com.czg.account.dto.staff.ShopStaffEditDTO;
import com.czg.account.dto.staff.ShopStaffRemoveDTO;
import com.czg.account.entity.ShopStaff;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
/**
@ -11,4 +15,11 @@ import com.mybatisflex.core.service.IService;
*/
public interface ShopStaffService extends IService<ShopStaff> {
Boolean add(ShopStaffAddDTO shopStaffAddDTO);
Boolean edit(ShopStaffEditDTO shopStaffEditDTO);
Page<ShopStaff> get(String name, String code);
Boolean delete(ShopStaffRemoveDTO shopStaffRemoveDTO);
}

View File

@ -11,4 +11,9 @@ import com.mybatisflex.core.service.IService;
*/
public interface SysUserService extends IService<SysUser> {
SysUser addUser(String nickname, String accountName, String accountPwd, String phone, Long roleId);
Boolean updateSysUserPwd(long sysUserId, String accountPwd);
Boolean removeUserAndRole(Integer id);
}

View File

@ -11,4 +11,5 @@ import com.mybatisflex.core.service.IService;
*/
public interface SysUsersRolesService extends IService<SysUsersRoles> {
Boolean updateRole(long sysUserId, Long roleId);
}

View File

@ -53,8 +53,8 @@ public class PageUtil {
*/
public <T> Page<T> buildPage() {
HttpServletRequest request = ServletUtil.getRequest();
Integer pageNum = Convert.toInt(request, DEFAULT_PAGE);
Integer pageSize = Convert.toInt(request, DEFAULT_SIZE);
Integer pageNum = Convert.toInt(request.getParameter(PAGE), DEFAULT_PAGE);
Integer pageSize = Convert.toInt(request.getParameter(SIZE), DEFAULT_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE;
}

View File

@ -37,4 +37,14 @@ public class CommonServiceImpl implements CommonService {
smsUtil.sendCode(sysUser.getPhone(), String.valueOf(code));
return true;
}
@Override
public Boolean checkSmsCode(String type, String code) {
SysUser sysUser = sysUserService.queryChain().eq(SysUser::getId, StpKit.ADMIN.getLoginIdAsLong()).one();
if (StrUtil.isBlank(sysUser.getPhone())) {
throw new ApiNotPrintException("账号未绑定手机号");
}
Object value = redisService.get(RedisCst.SMS_CODE + sysUser.getPhone() + ":" + type);
return code.equals(value);
}
}

View File

@ -64,25 +64,7 @@ public class ShopInfoServiceImpl extends ServiceImpl<ShopInfoMapper, ShopInfo> i
}
// 添加系统账号
SysUser sysUser = new SysUser();
sysUser.setAccount(shopInfoAddDTO.getAccountName());
sysUser.setNickName(shopInfoAddDTO.getShopName());
sysUser.setPhone(shopInfoAddDTO.getPhone());
sysUser.setStauts(1);
sysUser.setCreateUserId(StpKit.ADMIN.getLoginIdAsLong());
sysUserService.save(sysUser);
sysUser.setPassword(SecureUtil.md5(sysUser.getId() + shopInfoAddDTO.getAccountPwd()));
sysUserService.updateById(sysUser);
// 绑定角色
long roleCount = sysRoleService.queryChain().eq(SysRole::getId, shopInfoAddDTO.getRoleId()).count();
if (roleCount == 0) {
throw new CzgException("角色不存在");
}
SysUsersRoles usersRoles = new SysUsersRoles();
usersRoles.setUserId(sysUser.getId());
usersRoles.setRoleId(shopInfoAddDTO.getRoleId());
sysUsersRolesService.save(usersRoles);
SysUser sysUser = sysUserService.addUser(shopInfoAddDTO.getShopName(), shopInfoAddDTO.getAccountName(), shopInfoAddDTO.getAccountPwd(), shopInfoAddDTO.getPhone(), shopInfoAddDTO.getRoleId());
// 保存店铺信息
ShopInfo shopInfo = BeanUtil.copyProperties(shopInfoAddDTO, ShopInfo.class);

View File

@ -1,9 +1,25 @@
package com.czg.service.account.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.czg.account.dto.staff.ShopStaffAddDTO;
import com.czg.account.dto.staff.ShopStaffEditDTO;
import com.czg.account.dto.staff.ShopStaffRemoveDTO;
import com.czg.account.entity.ShopStaff;
import com.czg.account.entity.SysRole;
import com.czg.account.entity.SysUser;
import com.czg.account.service.ShopStaffService;
import com.czg.account.service.SysRoleService;
import com.czg.account.service.SysUserService;
import com.czg.account.service.SysUsersRolesService;
import com.czg.exception.ApiNotPrintException;
import com.czg.sa.StpKit;
import com.czg.service.account.mapper.ShopStaffMapper;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
@ -14,5 +30,58 @@ import org.springframework.stereotype.Service;
*/
@Service
public class ShopStaffServiceImpl extends ServiceImpl<ShopStaffMapper, ShopStaff> implements ShopStaffService {
@Resource
private SysUserService sysUserService;
@Resource
private SysRoleService sysRoleService;
@Resource
private SysUsersRolesService sysUsersRolesService;
@Override
public Boolean add(ShopStaffAddDTO shopStaffAddDTO) {
SysUser sysUser = sysUserService.addUser(shopStaffAddDTO.getName(), shopStaffAddDTO.getAccountName(), shopStaffAddDTO.getAccountPwd(), shopStaffAddDTO.getPhone(), shopStaffAddDTO.getRoleId());
ShopStaff shopStaff = BeanUtil.copyProperties(shopStaffAddDTO, ShopStaff.class);
shopStaff.setShopId(StpKit.ADMIN.getLoginIdAsLong());
return save(shopStaff);
}
@Override
public Boolean edit(ShopStaffEditDTO shopStaffEditDTO) {
long sysUserId = StpKit.ADMIN.getLoginIdAsLong();
ShopStaff shopStaff = queryChain().eq(ShopStaff::getShopId, sysUserId).eq(ShopStaff::getId, shopStaffEditDTO.getId()).one();
if (shopStaffEditDTO.getRoleId() != null) {
sysUsersRolesService.updateRole(shopStaff.getId(), shopStaffEditDTO.getRoleId());
}
sysUserService.updateSysUserPwd(shopStaff.getId(), shopStaffEditDTO.getAccountPwd());
BeanUtil.copyProperties(shopStaffEditDTO, shopStaff);
return updateById(shopStaff);
}
@Override
public Page<ShopStaff> get(String name, String code) {
QueryWrapper queryWrapper = new QueryWrapper();
if (StrUtil.isNotBlank(name)) {
queryWrapper.like(ShopStaff::getName, name);
}
if (StrUtil.isNotBlank(code)) {
queryWrapper.like(ShopStaff::getCode, name);
}
queryWrapper.eq(ShopStaff::getShopId, StpKit.ADMIN.getLoginIdAsLong());
return page(PageUtil.buildPage(), queryWrapper);
}
@Override
public Boolean delete(ShopStaffRemoveDTO shopStaffRemoveDTO) {
long sysUserId = StpKit.ADMIN.getLoginIdAsLong();
ShopStaff shopStaff = queryChain().eq(ShopStaff::getShopId, sysUserId).eq(ShopStaff::getId, shopStaffRemoveDTO.getId()).one();
if (shopStaff == null) {
throw new ApiNotPrintException("员工账号不存在");
}
sysUserService.removeUserAndRole(shopStaff.getId());
return removeById(shopStaff.getId());
}
}

View File

@ -1,9 +1,19 @@
package com.czg.service.account.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.crypto.SecureUtil;
import com.czg.account.entity.SysRole;
import com.czg.account.entity.SysUser;
import com.czg.account.entity.SysUsersRoles;
import com.czg.account.service.SysUserService;
import com.czg.exception.CzgException;
import com.czg.sa.StpKit;
import com.czg.service.account.mapper.SysRoleMapper;
import com.czg.service.account.mapper.SysUserMapper;
import com.czg.service.account.mapper.SysUsersRolesMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
@ -15,4 +25,50 @@ import org.springframework.stereotype.Service;
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
@Resource
private SysRoleMapper sysRoleMapper;
@Resource
private SysUsersRolesMapper sysUsersRolesMapper;
@Override
public SysUser addUser(String nickname, String accountName, String accountPwd, String phone, Long roleId) {
// 添加系统账号
SysUser sysUser = new SysUser();
sysUser.setAccount(accountName);
sysUser.setNickName(nickname);
sysUser.setPhone(phone);
sysUser.setStauts(1);
sysUser.setCreateUserId(StpKit.ADMIN.getLoginIdAsLong());
save(sysUser);
sysUser.setPassword(SecureUtil.md5(sysUser.getId() + accountPwd));
updateById(sysUser);
// 绑定角色
long roleCount = sysRoleMapper.selectCountByQuery(new QueryWrapper().eq(SysRole::getId, roleId).eq(SysRole::getCreateUserId, StpKit.ADMIN.getLoginIdAsLong()));
if (roleCount == 0) {
throw new CzgException("角色不存在");
}
SysUsersRoles usersRoles = new SysUsersRoles();
usersRoles.setUserId(sysUser.getId());
usersRoles.setRoleId(roleId);
sysUsersRolesMapper.insert(usersRoles);
return sysUser;
}
@Override
public Boolean updateSysUserPwd(long sysUserId, String accountPwd) {
SysUser sysUser = new SysUser();
sysUser.setId(sysUserId);
sysUser.setPassword(SecureUtil.md5(sysUser.getId() + accountPwd));
sysUser.setUpdateUserId(sysUserId);
sysUser.setUpdateTime(DateUtil.date().toLocalDateTime());
return updateById(sysUser);
}
@Override
public Boolean removeUserAndRole(Integer id) {
sysUsersRolesMapper.deleteByQuery(new QueryWrapper().eq(SysUsersRoles::getUserId, id));
return removeById(id);
}
}

View File

@ -3,6 +3,7 @@ package com.czg.service.account.service.impl;
import com.czg.account.entity.SysUsersRoles;
import com.czg.account.service.SysUsersRolesService;
import com.czg.service.account.mapper.SysUsersRolesMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@ -14,5 +15,13 @@ import org.springframework.stereotype.Service;
*/
@Service
public class SysUsersRolesServiceImpl extends ServiceImpl<SysUsersRolesMapper, SysUsersRoles> implements SysUsersRolesService {
@Override
public Boolean updateRole(long sysUserId, Long roleId) {
remove(new QueryWrapper().eq(SysUsersRoles::getUserId, sysUserId));
SysUsersRoles usersRoles = new SysUsersRoles();
usersRoles.setUserId(sysUserId);
usersRoles.setRoleId(roleId);
return save(usersRoles);
}
}