1. 提交代码
This commit is contained in:
@@ -40,8 +40,9 @@ public class AiChatController {
|
||||
String user = "system";
|
||||
try {
|
||||
Long userId = SecurityFrameworkUtils.getLoginUserId();
|
||||
String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
|
||||
if (userId != null) {
|
||||
user = "user_" + userId;
|
||||
user = "user_" + userId+"_"+userNickname;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.debug("获取登录用户失败,使用默认 user: {}", e.getMessage());
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
package cn.iocoder.yudao.module.ydoyun.controller.admin.storeuser;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -50,7 +46,7 @@ public class StoreUserController {
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新门店-用户绑定")
|
||||
@Operation(summary = "更新用户及门店绑定(传 storeIds 时全量替换绑定;否则按绑定主键 id 更新单条)")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:update')")
|
||||
public CommonResult<Boolean> updateStoreUser(@Valid @RequestBody StoreUserSaveReqVO updateReqVO) {
|
||||
storeUserService.updateStoreUser(updateReqVO);
|
||||
@@ -58,23 +54,49 @@ public class StoreUserController {
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除门店-用户绑定")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@Operation(summary = "删除单条门店绑定记录(不删除系统用户账号)")
|
||||
@Parameter(name = "id", description = "绑定记录编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')")
|
||||
public CommonResult<Boolean> deleteStoreUser(@RequestParam("id") Long id) {
|
||||
storeUserService.deleteStoreUser(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-binding")
|
||||
@Operation(summary = "按用户与门店解除绑定(不删除账号)")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')")
|
||||
public CommonResult<Boolean> deleteStoreUserBinding(@RequestParam("userId") Long userId,
|
||||
@RequestParam("storeId") Long storeId) {
|
||||
storeUserService.deleteStoreUserBinding(userId, storeId);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-user")
|
||||
@Operation(summary = "删除用户账号及全部门店绑定")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')")
|
||||
public CommonResult<Boolean> deleteStoreUserAccount(@RequestParam("userId") Long userId) {
|
||||
storeUserService.deleteStoreUserAccount(userId);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-list")
|
||||
@Parameter(name = "ids", description = "编号", required = true)
|
||||
@Operation(summary = "批量删除门店-用户绑定")
|
||||
@Parameter(name = "ids", description = "绑定记录编号", required = true)
|
||||
@Operation(summary = "批量删除绑定记录(不删除系统用户账号)")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')")
|
||||
public CommonResult<Boolean> deleteStoreUserList(@RequestParam("ids") List<Long> ids) {
|
||||
storeUserService.deleteStoreUserListByIds(ids);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-user-list")
|
||||
@Parameter(name = "userIds", description = "系统用户编号", required = true)
|
||||
@Operation(summary = "批量删除用户账号及绑定")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')")
|
||||
public CommonResult<Boolean> deleteStoreUserAccountList(@RequestParam("userIds") List<Long> userIds) {
|
||||
storeUserService.deleteStoreUserAccountList(userIds);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得门店-用户绑定")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@@ -84,6 +106,14 @@ public class StoreUserController {
|
||||
return success(BeanUtils.toBean(storeUser, StoreUserRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get-edit")
|
||||
@Operation(summary = "获得门店用户编辑信息(账号与已绑定门店列表)")
|
||||
@Parameter(name = "userId", description = "系统用户编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:query')")
|
||||
public CommonResult<StoreUserEditRespVO> getStoreUserForEdit(@RequestParam("userId") Long userId) {
|
||||
return success(storeUserService.getStoreUserForEdit(userId));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得门店-用户绑定分页")
|
||||
@PreAuthorize("@ss.hasPermission('ydoyun:store-user:query')")
|
||||
|
||||
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 门店-用户绑定新增/修改 Request VO")
|
||||
@Data
|
||||
public class StoreUserSaveReqVO {
|
||||
@@ -33,4 +35,10 @@ public class StoreUserSaveReqVO {
|
||||
@TableField(exist = false)
|
||||
@Schema(description = "手机号")
|
||||
private String mobile;
|
||||
|
||||
/**
|
||||
* 编辑用户时传入:全量替换门店绑定(与 {@link #id} 单条更新二选一,优先本字段非 null 时走批量同步)
|
||||
*/
|
||||
@Schema(description = "门店编号列表(编辑时全量替换绑定;空列表表示解除全部门店绑定)")
|
||||
private List<Long> storeIds;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
package cn.iocoder.yudao.module.ydoyun.dal.mysql.storeuser;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.ydoyun.controller.admin.storeuser.vo.StoreUserPageReqVO;
|
||||
import cn.iocoder.yudao.module.ydoyun.dal.dataobject.store.StoreDO;
|
||||
import cn.iocoder.yudao.module.ydoyun.dal.dataobject.storeuser.StoreUserDO;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 门店-用户绑定 Mapper
|
||||
@@ -22,42 +25,34 @@ import java.util.Objects;
|
||||
public interface StoreUserMapper extends BaseMapperX<StoreUserDO> {
|
||||
|
||||
/**
|
||||
* 门店-用户绑定分页(连带查询 AdminUser 信息)
|
||||
* 门店-用户绑定分页:以用户表 system_users 为主表,关系表 ydoyun_store_user、门店表 ydoyun_store 为从表
|
||||
*/
|
||||
Page<StoreUserDO> selectUserMainPage(Page<StoreUserDO> page, @Param("reqVO") StoreUserPageReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 同上,不分页(例如 pageSize = -1 时导出全量)
|
||||
*/
|
||||
List<StoreUserDO> selectUserMainPageList(@Param("reqVO") StoreUserPageReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 按用户分组后的总用户数(GROUP BY 场景下禁用 MP 自动 count,改用手动统计)
|
||||
*/
|
||||
Long selectUserMainPageCount(@Param("reqVO") StoreUserPageReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 门店-用户分页(入口:与 /ydoyun/store-user/page 一致;列表每用户一行)
|
||||
*/
|
||||
default PageResult<StoreUserDO> selectPage(StoreUserPageReqVO reqVO) {
|
||||
|
||||
MPJLambdaWrapper<StoreUserDO> wrapper = new MPJLambdaWrapper<StoreUserDO>()
|
||||
.selectAll(StoreUserDO.class)
|
||||
// 关联字段映射到 StoreUserDO 冗余字段
|
||||
.selectAs(AdminUserDO::getUsername, StoreUserDO::getUsername)
|
||||
.selectAs(AdminUserDO::getNickname, StoreUserDO::getNickname)
|
||||
.selectAs(AdminUserDO::getMobile, StoreUserDO::getMobile)
|
||||
.selectAs(StoreDO::getStoreCode, StoreUserDO::getStoreCode)
|
||||
.selectAs(StoreDO::getStoreName, StoreUserDO::getStoreName)
|
||||
.leftJoin(AdminUserDO.class,
|
||||
AdminUserDO::getId,
|
||||
StoreUserDO::getUserId)
|
||||
.leftJoin(StoreDO.class,
|
||||
StoreDO::getId,
|
||||
StoreUserDO::getStoreId);
|
||||
if (Objects.nonNull(reqVO.getRoleId())) {
|
||||
wrapper.innerJoin(UserRoleDO.class, UserRoleDO::getUserId, StoreUserDO::getUserId)
|
||||
.eq(UserRoleDO::getRoleId, reqVO.getRoleId());
|
||||
if (PageParam.PAGE_SIZE_NONE.equals(reqVO.getPageSize())) {
|
||||
List<StoreUserDO> list = selectUserMainPageList(reqVO);
|
||||
return new PageResult<>(list, (long) list.size());
|
||||
}
|
||||
wrapper
|
||||
// 条件
|
||||
.eq(Objects.nonNull(reqVO.getStoreId()), StoreUserDO::getStoreId, reqVO.getStoreId())
|
||||
.eq(Objects.nonNull(reqVO.getUserId()), StoreUserDO::getUserId, reqVO.getUserId())
|
||||
.like(Objects.nonNull(reqVO.getUsername()), AdminUserDO::getUsername, reqVO.getUsername())
|
||||
.like(Objects.nonNull(reqVO.getNickname()), AdminUserDO::getNickname, reqVO.getNickname())
|
||||
.like(Objects.nonNull(reqVO.getMobile()), AdminUserDO::getMobile, reqVO.getMobile())
|
||||
.like(Objects.nonNull(reqVO.getStoreName()), StoreDO::getStoreName, reqVO.getStoreName())
|
||||
.orderByDesc(StoreUserDO::getId);
|
||||
|
||||
if (reqVO.getCreateTime() != null && reqVO.getCreateTime().length == 2) {
|
||||
wrapper.between(AdminUserDO::getCreateTime, reqVO.getCreateTime()[0], reqVO.getCreateTime()[1]);
|
||||
}
|
||||
return selectJoinPage(reqVO, StoreUserDO.class, wrapper);
|
||||
Page<StoreUserDO> page = MyBatisUtils.buildPage(reqVO);
|
||||
page.setSearchCount(false);
|
||||
Long total = selectUserMainPageCount(reqVO);
|
||||
page.setTotal(total != null ? total : 0L);
|
||||
selectUserMainPage(page, reqVO);
|
||||
return new PageResult<>(page.getRecords(), page.getTotal());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@ public interface ErrorCodeConstants {
|
||||
|
||||
ErrorCode STORE_NOT_EXISTS = new ErrorCode(1_024_000_008, "门店不存在");
|
||||
ErrorCode STORE_USER_NOT_EXISTS = new ErrorCode(1_024_000_009, "门店用户记录不存在");
|
||||
ErrorCode STORE_USER_BIND_NOT_EXISTS = new ErrorCode(1_024_000_011, "该用户与门店的绑定关系不存在");
|
||||
|
||||
ErrorCode CUSTOM_TAG_NOT_EXISTS = new ErrorCode(1_024_000_010, "自定义标签不存在");
|
||||
ErrorCode TAG_NOT_EXISTS = new ErrorCode(1_001_001_001, "标准标签不存在");
|
||||
ErrorCode TAG_CONFIG_NOT_EXISTS = new ErrorCode(1_001_001_002, "标签同步配置不存在");
|
||||
|
||||
@@ -30,16 +30,31 @@ public interface StoreUserService {
|
||||
void updateStoreUser(@Valid StoreUserSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除门店-用户绑定
|
||||
* 删除单条门店-用户绑定(不删除系统用户账号)
|
||||
*
|
||||
* @param id 编号
|
||||
* @param id 绑定记录编号
|
||||
*/
|
||||
void deleteStoreUser(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除门店-用户绑定
|
||||
* 按用户 + 门店解除绑定(不删除系统用户账号)
|
||||
*/
|
||||
void deleteStoreUserBinding(Long userId, Long storeId);
|
||||
|
||||
/**
|
||||
* 删除用户账号及其全部门店绑定(同步删除系统用户及权限等关联数据)
|
||||
*/
|
||||
void deleteStoreUserAccount(Long userId);
|
||||
|
||||
/**
|
||||
* 批量删除用户账号(同 {@link #deleteStoreUserAccount(Long)})
|
||||
*/
|
||||
void deleteStoreUserAccountList(List<Long> userIds);
|
||||
|
||||
/**
|
||||
* 批量删除绑定记录(不删除系统用户账号)
|
||||
*
|
||||
* @param ids 编号
|
||||
* @param ids 绑定记录编号列表
|
||||
*/
|
||||
void deleteStoreUserListByIds(List<Long> ids);
|
||||
|
||||
@@ -51,6 +66,11 @@ public interface StoreUserService {
|
||||
*/
|
||||
StoreUserDO getStoreUser(Long id);
|
||||
|
||||
/**
|
||||
* 获得编辑弹窗所需信息(系统用户 + 已绑定门店列表)
|
||||
*/
|
||||
StoreUserEditRespVO getStoreUserForEdit(Long userId);
|
||||
|
||||
/**
|
||||
* 获得门店-用户绑定分页
|
||||
*
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
|
||||
@@ -24,6 +25,7 @@ import cn.iocoder.yudao.module.ydoyun.dal.mysql.storeuser.StoreUserMapper;
|
||||
import cn.iocoder.yudao.module.ydoyun.dal.mysql.user.YdoyunUserExtMapper;
|
||||
import cn.iocoder.yudao.module.ydoyun.service.store.StoreService;
|
||||
import cn.iocoder.yudao.module.ydoyun.service.storeuser.vo.E3StoreUserVO;
|
||||
import cn.iocoder.yudao.module.ydoyun.support.ErpReportDatabaseBuilder;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -35,7 +37,11 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.STORE_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.STORE_USER_BIND_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.STORE_USER_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
@@ -89,44 +95,101 @@ public class StoreUserServiceImpl implements StoreUserService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新:AdminUser + StoreUser
|
||||
* 更新:AdminUser + 门店绑定(支持全量替换 storeIds 或单条绑定字段更新)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateStoreUser(StoreUserSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateStoreUserExists(updateReqVO.getId());
|
||||
|
||||
// 1. 同步更新 AdminUser
|
||||
if (updateReqVO.getStoreIds() != null) {
|
||||
if (updateReqVO.getUserId() == null) {
|
||||
throw exception(BAD_REQUEST);
|
||||
}
|
||||
if (adminUserService.getUser(updateReqVO.getUserId()) == null) {
|
||||
throw exception(USER_NOT_EXISTS);
|
||||
}
|
||||
UserSaveReqVO userReqVO = buildUserSaveReqVO(updateReqVO);
|
||||
userReqVO.setId(updateReqVO.getUserId());
|
||||
adminUserService.updateUser(userReqVO);
|
||||
|
||||
List<Long> distinctStores = updateReqVO.getStoreIds().stream()
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
storeUserMapper.delete(new LambdaQueryWrapperX<StoreUserDO>()
|
||||
.eq(StoreUserDO::getUserId, updateReqVO.getUserId()));
|
||||
for (Long storeId : distinctStores) {
|
||||
if (storeService.getStore(storeId) == null) {
|
||||
throw exception(STORE_NOT_EXISTS);
|
||||
}
|
||||
StoreUserDO row = new StoreUserDO();
|
||||
row.setUserId(updateReqVO.getUserId());
|
||||
row.setStoreId(storeId);
|
||||
storeUserMapper.insert(row);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
validateStoreUserExists(updateReqVO.getId());
|
||||
|
||||
UserSaveReqVO userReqVO = buildUserSaveReqVO(updateReqVO);
|
||||
userReqVO.setId(updateReqVO.getUserId());
|
||||
adminUserService.updateUser(userReqVO);
|
||||
|
||||
// 2. 更新绑定关系
|
||||
StoreUserDO updateObj = BeanUtils.toBean(updateReqVO, StoreUserDO.class);
|
||||
storeUserMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除:StoreUser + 禁用 AdminUser
|
||||
* 删除单条绑定记录(不删除系统用户)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteStoreUser(Long id) {
|
||||
StoreUserDO storeUser = storeUserMapper.selectById(id);
|
||||
if (storeUser == null) {
|
||||
if (storeUserMapper.selectById(id) == null) {
|
||||
throw exception(STORE_USER_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 1. 删除绑定关系
|
||||
storeUserMapper.deleteById(id);
|
||||
}
|
||||
|
||||
// 2. 禁用用户
|
||||
adminUserService.updateUserStatus(storeUser.getUserId(), 0);
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteStoreUserBinding(Long userId, Long storeId) {
|
||||
StoreUserDO row = storeUserMapper.selectOne(new LambdaQueryWrapperX<StoreUserDO>()
|
||||
.eq(StoreUserDO::getUserId, userId)
|
||||
.eq(StoreUserDO::getStoreId, storeId));
|
||||
if (row == null) {
|
||||
throw exception(STORE_USER_BIND_NOT_EXISTS);
|
||||
}
|
||||
storeUserMapper.deleteById(row.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteStoreUserAccount(Long userId) {
|
||||
if (userId == null) {
|
||||
return;
|
||||
}
|
||||
if (adminUserService.getUser(userId) == null) {
|
||||
throw exception(USER_NOT_EXISTS);
|
||||
}
|
||||
storeUserMapper.delete(new LambdaQueryWrapperX<StoreUserDO>()
|
||||
.eq(StoreUserDO::getUserId, userId));
|
||||
adminUserService.deleteUser(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteStoreUserAccountList(List<Long> userIds) {
|
||||
if (CollUtil.isEmpty(userIds)) {
|
||||
return;
|
||||
}
|
||||
for (Long userId : userIds) {
|
||||
deleteStoreUserAccount(userId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除:StoreUser + 禁用 AdminUser
|
||||
* 批量删除绑定记录(不删除系统用户)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -134,15 +197,7 @@ public class StoreUserServiceImpl implements StoreUserService {
|
||||
if (CollUtil.isEmpty(ids)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<StoreUserDO> list = storeUserMapper.selectBatchIds(ids);
|
||||
|
||||
// 1. 删除绑定
|
||||
storeUserMapper.deleteByIds(ids);
|
||||
|
||||
// 2. 批量禁用用户
|
||||
list.forEach(item ->
|
||||
adminUserService.updateUserStatus(item.getUserId(), 0));
|
||||
}
|
||||
|
||||
private void validateStoreUserExists(Long id) {
|
||||
@@ -156,6 +211,29 @@ public class StoreUserServiceImpl implements StoreUserService {
|
||||
return storeUserMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreUserEditRespVO getStoreUserForEdit(Long userId) {
|
||||
AdminUserDO user = adminUserService.getUser(userId);
|
||||
if (user == null) {
|
||||
throw exception(USER_NOT_EXISTS);
|
||||
}
|
||||
List<StoreUserDO> binds = storeUserMapper.selectList(new LambdaQueryWrapperX<StoreUserDO>()
|
||||
.eq(StoreUserDO::getUserId, userId));
|
||||
List<Long> storeIds = binds.stream()
|
||||
.map(StoreUserDO::getStoreId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
StoreUserEditRespVO vo = new StoreUserEditRespVO();
|
||||
vo.setUserId(userId);
|
||||
vo.setUsername(user.getUsername());
|
||||
vo.setNickname(user.getNickname());
|
||||
vo.setMobile(user.getMobile());
|
||||
vo.setStoreIds(storeIds);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<StoreUserDO> getStoreUserPage(StoreUserPageReqVO pageReqVO) {
|
||||
PageResult<StoreUserDO> pageResult = storeUserMapper.selectPage(pageReqVO);
|
||||
@@ -227,16 +305,26 @@ public class StoreUserServiceImpl implements StoreUserService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean e3SyncStoreAndUser() {
|
||||
|
||||
Long tenantId = TenantContextHolder.getTenantId();
|
||||
ReportDatabaseDO reportDatabase = null;
|
||||
String prefix = null;
|
||||
if (tenantId.intValue() == 162) {
|
||||
prefix = "lj";
|
||||
reportDatabase = buildErpDatabaseLJSM();
|
||||
}else if (tenantId.intValue() == 164) {
|
||||
prefix = "wbl";
|
||||
reportDatabase = ErpReportDatabaseBuilder.buildErpDatabaseWBL();
|
||||
}else {
|
||||
throw new RuntimeException("当前租户不支持e3同步账号");
|
||||
}
|
||||
try {
|
||||
// 1. 构建数据源配置
|
||||
ReportDatabaseDO reportDatabase = buildErpDatabase();
|
||||
|
||||
// 2. SQL(Java 8 写法)
|
||||
String sql =
|
||||
"SELECT " +
|
||||
" CASE " +
|
||||
" WHEN a.USERID IS NOT NULL AND LTRIM(RTRIM(a.USERID)) <> '' " +
|
||||
" THEN 'lj' + a.USERID " +
|
||||
" THEN '"+prefix+"' + a.USERID " +
|
||||
" ELSE a.USERID " +
|
||||
" END AS username, " +
|
||||
" a.NAME AS nickname, " +
|
||||
@@ -662,15 +750,15 @@ public class StoreUserServiceImpl implements StoreUserService {
|
||||
return allBindings;
|
||||
}
|
||||
|
||||
private ReportDatabaseDO buildErpDatabase() {
|
||||
private ReportDatabaseDO buildErpDatabaseLJSM() {
|
||||
ReportDatabaseDO db = new ReportDatabaseDO();
|
||||
db.setDbName("ERPLJSM 数据源");
|
||||
db.setDbType("sqlserver");
|
||||
db.setHost("106.15.62.63");
|
||||
db.setPort(9943);
|
||||
db.setUsername("bsai");
|
||||
db.setPassword("ljsm@bsAI");
|
||||
db.setDatabaseName("ERPLJSM");
|
||||
// db.setDbName("ERPLJSM 数据源");
|
||||
// db.setDbType("sqlserver");
|
||||
// db.setHost("106.15.62.63");
|
||||
// db.setPort(9943);
|
||||
// db.setUsername("bsai");
|
||||
// db.setPassword("ljsm@bsAI");
|
||||
// db.setDatabaseName("ERPLJSM");
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,10 +3,94 @@
|
||||
<mapper namespace="cn.iocoder.yudao.module.ydoyun.dal.mysql.storeuser.StoreUserMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
用户管理视角:以 system_users 为主表,按用户分组,每用户一行。
|
||||
未传门店 id 条件时 LEFT JOIN 关系表,无门店绑定的用户也会查出;指定门店 id 时 INNER JOIN 仅看该门店下的用户。
|
||||
多门店绑定时门店名称/编码用 GROUP_CONCAT 合并;仅绑定一家门店时回填 storeId。
|
||||
id 取 MIN(su.id),无绑定时为 NULL。
|
||||
-->
|
||||
<sql id="userMainPageSelectColumnsGrouped">
|
||||
MIN(su.id) AS id,
|
||||
IF(COUNT(DISTINCT su.store_id) = 1, MAX(su.store_id), NULL) AS storeId,
|
||||
u.id AS userId,
|
||||
u.create_time AS createTime,
|
||||
u.update_time AS updateTime,
|
||||
NULL AS creator,
|
||||
NULL AS updater,
|
||||
0 AS deleted,
|
||||
u.username AS username,
|
||||
u.nickname AS nickname,
|
||||
u.mobile AS mobile,
|
||||
GROUP_CONCAT(DISTINCT s.store_code ORDER BY s.store_code SEPARATOR '、') AS storeCode,
|
||||
GROUP_CONCAT(DISTINCT s.store_name ORDER BY s.store_name SEPARATOR '、') AS storeName
|
||||
</sql>
|
||||
|
||||
<sql id="userMainPageFromJoin">
|
||||
FROM system_users u
|
||||
<choose>
|
||||
<when test="reqVO.storeId != null">
|
||||
INNER JOIN ydoyun_store_user su ON su.user_id = u.id AND su.deleted = 0 AND su.store_id = #{reqVO.storeId}
|
||||
</when>
|
||||
<otherwise>
|
||||
LEFT JOIN ydoyun_store_user su ON su.user_id = u.id AND su.deleted = 0
|
||||
</otherwise>
|
||||
</choose>
|
||||
LEFT JOIN ydoyun_store s ON s.id = su.store_id AND s.deleted = 0
|
||||
<if test="reqVO.roleId != null">
|
||||
INNER JOIN system_user_role ur ON ur.user_id = u.id AND ur.deleted = 0 AND ur.role_id = #{reqVO.roleId}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<sql id="userMainPageWhere">
|
||||
WHERE u.deleted = 0
|
||||
<if test="reqVO.userId != null">
|
||||
AND u.id = #{reqVO.userId}
|
||||
</if>
|
||||
<if test="reqVO.username != null and reqVO.username != ''">
|
||||
AND u.username LIKE CONCAT('%', #{reqVO.username}, '%')
|
||||
</if>
|
||||
<if test="reqVO.nickname != null and reqVO.nickname != ''">
|
||||
AND u.nickname LIKE CONCAT('%', #{reqVO.nickname}, '%')
|
||||
</if>
|
||||
<if test="reqVO.mobile != null and reqVO.mobile != ''">
|
||||
AND u.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
|
||||
</if>
|
||||
<if test="reqVO.storeName != null and reqVO.storeName != ''">
|
||||
AND s.store_name LIKE CONCAT('%', #{reqVO.storeName}, '%')
|
||||
</if>
|
||||
<if test="reqVO.createTime != null and reqVO.createTime.length == 2">
|
||||
AND u.create_time BETWEEN #{reqVO.createTime[0]} AND #{reqVO.createTime[1]}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<sql id="userMainPageGroupBy">
|
||||
GROUP BY u.id, u.username, u.nickname, u.mobile, u.create_time, u.update_time
|
||||
</sql>
|
||||
|
||||
<select id="selectUserMainPageCount" resultType="java.lang.Long">
|
||||
SELECT COUNT(*) FROM (
|
||||
SELECT u.id
|
||||
<include refid="userMainPageFromJoin"/>
|
||||
<include refid="userMainPageWhere"/>
|
||||
<include refid="userMainPageGroupBy"/>
|
||||
) t
|
||||
</select>
|
||||
|
||||
<select id="selectUserMainPage" resultType="cn.iocoder.yudao.module.ydoyun.dal.dataobject.storeuser.StoreUserDO">
|
||||
SELECT
|
||||
<include refid="userMainPageSelectColumnsGrouped"/>
|
||||
<include refid="userMainPageFromJoin"/>
|
||||
<include refid="userMainPageWhere"/>
|
||||
<include refid="userMainPageGroupBy"/>
|
||||
ORDER BY u.id DESC
|
||||
</select>
|
||||
|
||||
<select id="selectUserMainPageList" resultType="cn.iocoder.yudao.module.ydoyun.dal.dataobject.storeuser.StoreUserDO">
|
||||
SELECT
|
||||
<include refid="userMainPageSelectColumnsGrouped"/>
|
||||
<include refid="userMainPageFromJoin"/>
|
||||
<include refid="userMainPageWhere"/>
|
||||
<include refid="userMainPageGroupBy"/>
|
||||
ORDER BY u.id DESC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user