diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/aichat/AiChatController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/aichat/AiChatController.java index b947552..ebb6bed 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/aichat/AiChatController.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/aichat/AiChatController.java @@ -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()); diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java index 64c7ae1..17ec0b9 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java @@ -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 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 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 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 deleteStoreUserAccount(@RequestParam("userId") Long userId) { + storeUserService.deleteStoreUserAccount(userId); + return success(true); + } + @DeleteMapping("/delete-list") - @Parameter(name = "ids", description = "编号", required = true) - @Operation(summary = "批量删除门店-用户绑定") - @PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')") + @Parameter(name = "ids", description = "绑定记录编号", required = true) + @Operation(summary = "批量删除绑定记录(不删除系统用户账号)") + @PreAuthorize("@ss.hasPermission('ydoyun:store-user:delete')") public CommonResult deleteStoreUserList(@RequestParam("ids") List 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 deleteStoreUserAccountList(@RequestParam("userIds") List 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 getStoreUserForEdit(@RequestParam("userId") Long userId) { + return success(storeUserService.getStoreUserForEdit(userId)); + } + @GetMapping("/page") @Operation(summary = "获得门店-用户绑定分页") @PreAuthorize("@ss.hasPermission('ydoyun:store-user:query')") diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserSaveReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserSaveReqVO.java index 9caef45..a08ebb9 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserSaveReqVO.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserSaveReqVO.java @@ -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 storeIds; } diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java index 8b1041b..9584289 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java @@ -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 { /** - * 门店-用户绑定分页(连带查询 AdminUser 信息) + * 门店-用户绑定分页:以用户表 system_users 为主表,关系表 ydoyun_store_user、门店表 ydoyun_store 为从表 + */ + Page selectUserMainPage(Page page, @Param("reqVO") StoreUserPageReqVO reqVO); + + /** + * 同上,不分页(例如 pageSize = -1 时导出全量) + */ + List selectUserMainPageList(@Param("reqVO") StoreUserPageReqVO reqVO); + + /** + * 按用户分组后的总用户数(GROUP BY 场景下禁用 MP 自动 count,改用手动统计) + */ + Long selectUserMainPageCount(@Param("reqVO") StoreUserPageReqVO reqVO); + + /** + * 门店-用户分页(入口:与 /ydoyun/store-user/page 一致;列表每用户一行) */ default PageResult selectPage(StoreUserPageReqVO reqVO) { - - MPJLambdaWrapper wrapper = new MPJLambdaWrapper() - .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 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 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()); } diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java index cd65730..eac4221 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java @@ -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, "标签同步配置不存在"); diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserService.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserService.java index 22f680d..882e2b2 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserService.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserService.java @@ -30,17 +30,32 @@ public interface StoreUserService { void updateStoreUser(@Valid StoreUserSaveReqVO updateReqVO); /** - * 删除门店-用户绑定 + * 删除单条门店-用户绑定(不删除系统用户账号) * - * @param id 编号 + * @param id 绑定记录编号 */ void deleteStoreUser(Long id); /** - * 批量删除门店-用户绑定 - * - * @param ids 编号 - */ + * 按用户 + 门店解除绑定(不删除系统用户账号) + */ + void deleteStoreUserBinding(Long userId, Long storeId); + + /** + * 删除用户账号及其全部门店绑定(同步删除系统用户及权限等关联数据) + */ + void deleteStoreUserAccount(Long userId); + + /** + * 批量删除用户账号(同 {@link #deleteStoreUserAccount(Long)}) + */ + void deleteStoreUserAccountList(List userIds); + + /** + * 批量删除绑定记录(不删除系统用户账号) + * + * @param ids 绑定记录编号列表 + */ void deleteStoreUserListByIds(List ids); /** @@ -51,6 +66,11 @@ public interface StoreUserService { */ StoreUserDO getStoreUser(Long id); + /** + * 获得编辑弹窗所需信息(系统用户 + 已绑定门店列表) + */ + StoreUserEditRespVO getStoreUserForEdit(Long userId); + /** * 获得门店-用户绑定分页 * diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java index c505e24..0347bbf 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java @@ -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) { - // 校验存在 + 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 distinctStores = updateReqVO.getStoreIds().stream() + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + storeUserMapper.delete(new LambdaQueryWrapperX() + .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()); - // 1. 同步更新 AdminUser 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() + .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() + .eq(StoreUserDO::getUserId, userId)); + adminUserService.deleteUser(userId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteStoreUserAccountList(List 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 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 binds = storeUserMapper.selectList(new LambdaQueryWrapperX() + .eq(StoreUserDO::getUserId, userId)); + List 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 getStoreUserPage(StoreUserPageReqVO pageReqVO) { PageResult 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; } diff --git a/yudao-module-ydoyun/src/main/resources/mapper/storeuser/StoreUserMapper.xml b/yudao-module-ydoyun/src/main/resources/mapper/storeuser/StoreUserMapper.xml index 672e5af..f5d21a3 100644 --- a/yudao-module-ydoyun/src/main/resources/mapper/storeuser/StoreUserMapper.xml +++ b/yudao-module-ydoyun/src/main/resources/mapper/storeuser/StoreUserMapper.xml @@ -3,10 +3,94 @@ + + 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 + - \ No newline at end of file + + FROM system_users u + + + INNER JOIN ydoyun_store_user su ON su.user_id = u.id AND su.deleted = 0 AND su.store_id = #{reqVO.storeId} + + + LEFT JOIN ydoyun_store_user su ON su.user_id = u.id AND su.deleted = 0 + + + LEFT JOIN ydoyun_store s ON s.id = su.store_id AND s.deleted = 0 + + INNER JOIN system_user_role ur ON ur.user_id = u.id AND ur.deleted = 0 AND ur.role_id = #{reqVO.roleId} + + + + + WHERE u.deleted = 0 + + AND u.id = #{reqVO.userId} + + + AND u.username LIKE CONCAT('%', #{reqVO.username}, '%') + + + AND u.nickname LIKE CONCAT('%', #{reqVO.nickname}, '%') + + + AND u.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%') + + + AND s.store_name LIKE CONCAT('%', #{reqVO.storeName}, '%') + + + AND u.create_time BETWEEN #{reqVO.createTime[0]} AND #{reqVO.createTime[1]} + + + + + GROUP BY u.id, u.username, u.nickname, u.mobile, u.create_time, u.update_time + + + + + + + + +