package com.xy.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yitter.idgen.YitIdHelper;
import com.xy.annotation.Lock;
import com.xy.dto.SysWorkUser.AddDto;
import com.xy.dto.SysWorkUser.DelDto;
import com.xy.dto.SysWorkUser.UpdateDto;
import com.xy.dto.UserInfoDto;
import com.xy.entity.UserInfo;
import com.xy.mapper.UserInfoMapper;
import com.xy.utils.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import static com.xy.utils.Beans.copy;
import static com.xy.utils.PlusBeans.toIPage;
import static com.xy.utils.PlusBeans.toPageBean;
/**
*
* 用户表 服务实现类
*
*
* @author lijin
* @since 2023-01-12
*/
@Service
@AllArgsConstructor
@Api(tags = "用户表")
public class UserInfoServiceImpl extends ServiceImpl implements UserInfoService {
private SysWorkUserService sysWorkUserService;
@Override
@ApiOperation("集合查询")
public R> list(UserInfoDto.SelectListDto selectList) {
List userIds = selectList.getUserIds();
UserInfoDto.Vo userVo = selectList.getUserVo();
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (userVo != null) {
lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList.getUserVo(), UserInfo.class).build();
}
lambdaQueryWrapper.in(CollUtil.isNotEmpty(userIds), UserInfo::getUserId, userIds);
List list = list(lambdaQueryWrapper);
return R.ok(copy(UserInfoDto.Vo.class, list));
}
@Override
@ApiOperation("对象查询")
public R obj(UserInfoDto.Vo vo) {
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(vo, UserInfo.class).build();
List list = list(lambdaQueryWrapper);
if (Emptys.check(list)) {
return R.ok(copy(UserInfoDto.Vo.class, list.get(0)));
}
return R.ok();
}
@PostMapping("page")
@ApiOperation("分页查询")
public R> page(@RequestBody UserInfoDto.Page page) {
PageBean pageBean = page.getPage();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, UserInfo.class)
.like(UserInfo::getTel, page.getTel())
.like(UserInfo::getMail, page.getMail())
.like(UserInfo::getUnionid, page.getUnionid())
.ge(UserInfo::getCreateTime, page.getBeginCreateTime())
.le(UserInfo::getCreateTime, page.getEndCreateTime())
.build()
.orderByDesc(!Emptys.check(pageBean.getOrders()), UserInfo::getCreateTime);
IPage iPage = page(toIPage(pageBean), lambdaQueryWrapper);
return R.ok(toPageBean(UserInfoDto.Vo.class, iPage));
}
@Override
@ApiOperation("添加")
@Lock(value = "save.tel", prefix = "user_save_")
public R save(UserInfoDto.Save save) {
//校验
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper()
.eq(UserInfo::getMail, save.getMail());
if (Emptys.check(save.getUnionid())) {
lambdaQueryWrapper
.or()
.eq(UserInfo::getUnionid, save.getUnionid());
}
if (Emptys.check(save.getSysId())) {
lambdaQueryWrapper
.or(userInfoLambdaQueryWrapper -> userInfoLambdaQueryWrapper
.eq(UserInfo::getTel, save.getTel())
.eq(UserInfo::getSysId, save.getSysId()));
}
UserInfo userInfo = getOne(lambdaQueryWrapper);
if (userInfo != null) {
return R.fail("账号已存在");
}
//添加权限用户
AddDto addDto = copy(AddDto.class, save)
.setEmail(save.getMail())
.setPhone(save.getTel())
.setAccount(save.getAccount());
R register = sysWorkUserService.register(addDto);
if (register.getCode() != R.Enum.SUCCESS.getCode()) {
return R.fail(register.getMsg());
}
Long authorizeUserId = register.getData();
//添加用户
Long loginId = AuthorizeUtils.getLoginId(Long.class);
UserInfo saveInfo = copy(UserInfo.class, save)
.createUserTime(loginId)
.setUserId(YitIdHelper.nextId())
.setAuthorizeUserId(authorizeUserId)
.createUserTime(loginId);
save(saveInfo);
return R.ok(copy(UserInfoDto.Vo.class, saveInfo));
}
@Override
@ApiOperation("修改")
@Lock(value = "update.userId", prefix = "user_update_")
public R update(UserInfoDto.Update update) {
UserInfo byId = getById(update.getUserId());
if (!StringUtils.isEmpty(update.getTel())) {
if (!byId.getTel().equals(update.getTel())) {
long count = count(new LambdaQueryWrapper().eq(UserInfo::getTel, update.getTel()));
if (count > 0) {
return R.fail("手机已存在");
}
}
}
if (!StringUtils.isEmpty(update.getMail())) {
if (!byId.getMail().equals(update.getMail())) {
long count = count(new LambdaQueryWrapper().eq(UserInfo::getMail, update.getMail()));
if (count > 0) {
return R.fail("邮箱已存在");
}
}
}
UserInfo updateInfo = copy(UserInfo.class, update)
.updateUserTime(AuthorizeUtils.getLoginId(Long.class));
//修改权限用户
if (Emptys.check(update.getTel()) || Emptys.check(update.getMail()) || Emptys.check(update.getStatus()) || Emptys.check(update.getPassword())) {
UpdateDto updateDto = new UpdateDto()
.setId(byId.getAuthorizeUserId())
.setPhone(update.getTel())
.setEmail(update.getMail())
.setAccount(update.getTel())
.setPassword(update.getPassword())
.setStatus(update.getStatus())
.setRoleIds(update.getRoleIds());
sysWorkUserService.update(updateDto);
}
//修改用户
updateById(updateInfo);
return R.ok();
}
@ApiOperation("删除用户")
@Override
public R del(@RequestBody @Validated UserInfoDto.DelDto dto) {
//sys_work_user 权限用户表
R r = sysWorkUserService.del(copy(DelDto.class, dto));
if (R.Enum.SUCCESS.getCode() != r.getCode()) {
return R.fail(r.getMsg());
}
//user_info 用户表
return R.ok(removeBatchByIds(dto.getId()));
}
}