From bb95487a69ce5b15c6109f88bc0238efe083b308 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Thu, 13 Mar 2025 21:12:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(organization):=20=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7=E6=BF=80=E6=B4=BB=E7=9A=84?= =?UTF-8?q?=E6=9C=BA=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Ctx.activeOrganizationId() 方法获取当前激活的机构 ID - 更新相关服务和控制器,使用新的激活机构 ID - 添加 OrganizationTreeDto 类用于组织树结构返回 - 实现 orgTree 方法获取组织树 - 新增 SwitchActiveOrgRequest 类用于切换激活机构请求 - 在 SessionService 中实现 switchActiveOrg 方法 --- .../service/AcDeviceDataService.java | 2 +- .../cn/lihongjie/coal/aop/OrgScopeAop.java | 4 +- .../coal/base/entity/OrgBaseEntity.java | 2 +- .../coal/base/entity/OrgCommonEntity.java | 4 +- .../service/CoalAnalysisService.java | 2 +- .../service/CoalParameterDefService.java | 2 +- .../CoalWashingDailyAnalysisService.java | 10 +-- .../java/cn/lihongjie/coal/common/Ctx.java | 32 +++++++++ .../cn/lihongjie/coal/common/JpaUtils.java | 4 +- .../department/service/DepartmentService.java | 2 +- .../coal/device/service/DeviceService.java | 2 +- .../service/EmpSalaryBatchService.java | 2 +- .../controller/EmpSalaryItemController.java | 6 +- .../service/EmpSalaryItemService.java | 4 +- .../controller/EmployeeController.java | 2 +- .../coal/file/service/FileService.java | 4 +- .../coal/invoice/service/InvoiceService.java | 4 +- .../coal/jobPost/service/JobPostService.java | 2 +- .../coal/loginUser/dto/LoginUserDto.java | 2 + .../loginUser/entity/LoginUserEntity.java | 2 + .../loginUser/service/LoginUserService.java | 22 ++++++ .../meterLog/service/MeterLogService.java | 2 +- .../coal/netDisk/service/NetDiskService.java | 14 ++-- .../service/OrderNoRuleService.java | 8 +-- .../controller/OrganizationController.java | 11 +-- .../dto/CreateOrganizationDto.java | 2 +- .../organization/dto/OrganizationDto.java | 2 +- .../organization/dto/OrganizationTreeDto.java | 21 ++++++ .../dto/UpdateOrganizationDto.java | 2 +- .../mapper/OrganizationMapper.java | 6 +- .../service/OrganizationService.java | 13 ++-- .../service/OrganizationConfigService.java | 2 +- .../pdcDevice/service/PdcDeviceService.java | 2 +- .../service/PdcDeviceDataService.java | 6 +- .../service/PdcDeviceRealTimeDataService.java | 2 +- .../service/PurchaseOrderService.java | 8 +-- .../saleOrder/service/SaleOrderService.java | 10 +-- .../session/dto/SwitchActiveOrgRequest.java | 14 ++++ .../coal/session/service/SessionService.java | 70 +++++++++++++++++-- .../coal/sms/service/SmsService.java | 2 +- .../coal/user/service/UserService.java | 4 +- .../coal/validator/OrgUniqValidator.java | 2 +- .../service/WarehouseGoodsService.java | 4 +- .../service/WarehouseReceiptService.java | 8 +-- .../WeightColumnConfigController.java | 2 +- .../service/WeightColumnConfigService.java | 4 +- .../service/WeightDeviceDataService.java | 10 +-- 47 files changed, 257 insertions(+), 90 deletions(-) create mode 100644 src/main/java/cn/lihongjie/coal/organization/dto/OrganizationTreeDto.java create mode 100644 src/main/java/cn/lihongjie/coal/session/dto/SwitchActiveOrgRequest.java diff --git a/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java b/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java index c082e900..f820c21d 100644 --- a/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/acDeviceData/service/AcDeviceDataService.java @@ -92,7 +92,7 @@ public class AcDeviceDataService extends BaseService parameters = coalParameterDefRepository.findByOrganizationId( - Ctx.currentUser().getOrganizationId()); + Ctx.activeOrganizationId()); List toCalculate = parameters.stream() diff --git a/src/main/java/cn/lihongjie/coal/coalParameterDef/service/CoalParameterDefService.java b/src/main/java/cn/lihongjie/coal/coalParameterDef/service/CoalParameterDefService.java index a9f4a93f..a7e49d8a 100644 --- a/src/main/java/cn/lihongjie/coal/coalParameterDef/service/CoalParameterDefService.java +++ b/src/main/java/cn/lihongjie/coal/coalParameterDef/service/CoalParameterDefService.java @@ -144,7 +144,7 @@ public class CoalParameterDefService this.repository.deleteAllById(request.getIds()); List allDef = - this.repository.findByOrganizationId(Ctx.currentUser().getOrganizationId()); + this.repository.findByOrganizationId(Ctx.activeOrganizationId()); Optional type1 = allDef.stream() diff --git a/src/main/java/cn/lihongjie/coal/coalWashingDailyAnalysis/service/CoalWashingDailyAnalysisService.java b/src/main/java/cn/lihongjie/coal/coalWashingDailyAnalysis/service/CoalWashingDailyAnalysisService.java index 45b86d4f..94fe109c 100644 --- a/src/main/java/cn/lihongjie/coal/coalWashingDailyAnalysis/service/CoalWashingDailyAnalysisService.java +++ b/src/main/java/cn/lihongjie/coal/coalWashingDailyAnalysis/service/CoalWashingDailyAnalysisService.java @@ -66,7 +66,7 @@ public class CoalWashingDailyAnalysisService public CoalWashingDailyAnalysisDto create(CreateCoalWashingDailyAnalysisDto request) { CoalWashingDailyAnalysisEntity entity = mapper.toEntity(request); - entity.setOrganizationId(Ctx.currentUser().getOrganizationId()); + entity.setOrganizationId(Ctx.activeOrganizationId()); validate(entity); if (entity.getProduct() != null) { @@ -118,7 +118,7 @@ public class CoalWashingDailyAnalysisService } this.mapper.updateEntity(entity, request); - entity.setOrganizationId(Ctx.currentUser().getOrganizationId()); + entity.setOrganizationId(Ctx.activeOrganizationId()); validate(entity); if (entity.getProduct() != null) { @@ -146,7 +146,7 @@ public class CoalWashingDailyAnalysisService entity.setKfItems(request.getKfItems()); - entity.setOrganizationId(Ctx.currentUser().getOrganizationId()); + entity.setOrganizationId(Ctx.activeOrganizationId()); validate(entity); if (entity.getProduct() != null) { @@ -175,7 +175,7 @@ public class CoalWashingDailyAnalysisService entity.setKfItems(kfItems); - entity.setOrganizationId(Ctx.currentUser().getOrganizationId()); + entity.setOrganizationId(Ctx.activeOrganizationId()); validate(entity); if (entity.getProduct() != null) { @@ -249,7 +249,7 @@ public class CoalWashingDailyAnalysisService public Object report(CoalWashingDailyAnalysisCoalReportRequest request) { - request.setOrganizationId(Ctx.currentUser().getOrganizationId()); + request.setOrganizationId(Ctx.activeOrganizationId()); String sql = FreeMakerUtils.render( """ diff --git a/src/main/java/cn/lihongjie/coal/common/Ctx.java b/src/main/java/cn/lihongjie/coal/common/Ctx.java index ec413acd..9a2de5d8 100644 --- a/src/main/java/cn/lihongjie/coal/common/Ctx.java +++ b/src/main/java/cn/lihongjie/coal/common/Ctx.java @@ -1,5 +1,6 @@ package cn.lihongjie.coal.common; +import cn.lihongjie.coal.loginUser.dto.LoginUserDto; import cn.lihongjie.coal.session.service.SessionService; import cn.lihongjie.coal.user.dto.UserDto; @@ -7,6 +8,7 @@ import lombok.Getter; import lombok.experimental.UtilityClass; import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -72,4 +74,34 @@ public class Ctx { public static void setContext(ConfigurableApplicationContext context) { Ctx.context = context; } + + public static String activeOrganizationId() { + + + if (!isLoggedIn()) { + return null; + } + LoginUserDto user = getAuthentication().getDto(); + + + return StringUtils.firstNonBlank(user.getActiveOrganizationId(), getAuthentication().getUser().getOrganizationId()); + + + + } + + + public static String currentOrganizationId() { + + + if (!isLoggedIn()) { + return null; + } + + + return getAuthentication().getUser().getOrganizationId(); + + + + } } diff --git a/src/main/java/cn/lihongjie/coal/common/JpaUtils.java b/src/main/java/cn/lihongjie/coal/common/JpaUtils.java index 6747e864..6557db13 100644 --- a/src/main/java/cn/lihongjie/coal/common/JpaUtils.java +++ b/src/main/java/cn/lihongjie/coal/common/JpaUtils.java @@ -221,7 +221,7 @@ public class JpaUtils { clazz, fieldName, value, - Ctx.currentUser().getOrganizationId(), + Ctx.activeOrganizationId(), null); } @@ -231,7 +231,7 @@ public class JpaUtils { String fieldName, Object value, String selfId) { - return hasDuplicate(entityManager, clazz, fieldName, value, Ctx.currentUser().getOrganizationId(), selfId); + return hasDuplicate(entityManager, clazz, fieldName, value, Ctx.activeOrganizationId(), selfId); } public static boolean hasDuplicate( diff --git a/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java b/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java index 79fdb276..f54fad94 100644 --- a/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java +++ b/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java @@ -180,7 +180,7 @@ class DepartmentService extends BaseService { switch (genRule) { case "0": - String key = "device.global." + Ctx.currentUser().getOrganizationId(); + String key = "device.global." + Ctx.activeOrganizationId(); sequenceService.createSequence(key, 0); Long next = sequenceService.nextVal(key); diff --git a/src/main/java/cn/lihongjie/coal/empSalaryBatch/service/EmpSalaryBatchService.java b/src/main/java/cn/lihongjie/coal/empSalaryBatch/service/EmpSalaryBatchService.java index 8621a832..76873ee0 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryBatch/service/EmpSalaryBatchService.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryBatch/service/EmpSalaryBatchService.java @@ -109,7 +109,7 @@ public class EmpSalaryBatchService root.get("batchNo"), entity.getBatchNo()), criteriaBuilder.equal( root.get("organizationId"), - Ctx.currentUser().getOrganizationId())); + Ctx.activeOrganizationId())); } }) > 0) { diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java index d87b71d9..58d646dd 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/controller/EmpSalaryItemController.java @@ -49,17 +49,17 @@ public class EmpSalaryItemController { @PostMapping("/genScript") public Object genScript() { - return R.success(this.service.genScript(Ctx.currentUser().getOrganizationId())); + return R.success(this.service.genScript(Ctx.activeOrganizationId())); } @PostMapping("/genScriptWithCompileResult") public Object genScriptWithCompileResult(GenScriptRequest request) { - return R.success(this.service.genScriptWithCompileResult(Ctx.currentUser().getOrganizationId(), request.isDebug())); + return R.success(this.service.genScriptWithCompileResult(Ctx.activeOrganizationId(), request.isDebug())); } @PostMapping("/init") public Object init() { - this.service.initOrg(Ctx.currentUser().getOrganizationId()); + this.service.initOrg(Ctx.activeOrganizationId()); return true; } diff --git a/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java b/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java index b6f21032..1ea0b9f7 100644 --- a/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java +++ b/src/main/java/cn/lihongjie/coal/empSalaryItem/service/EmpSalaryItemService.java @@ -541,7 +541,7 @@ public class EmpSalaryItemService criteriaBuilder.and( criteriaBuilder.equal( root.get("organizationId"), - Ctx.currentUser().getOrganizationId()), + Ctx.activeOrganizationId()), criteriaBuilder.equal( root.get("name"), request.getName()))) != 0) { @@ -570,7 +570,7 @@ public class EmpSalaryItemService criteriaBuilder.and( criteriaBuilder.equal( root.get("organizationId"), - Ctx.currentUser().getOrganizationId()), + Ctx.activeOrganizationId()), criteriaBuilder.equal(root.get("name"), newName), criteriaBuilder.notEqual( root.get("id"), request.getId()))) diff --git a/src/main/java/cn/lihongjie/coal/employee/controller/EmployeeController.java b/src/main/java/cn/lihongjie/coal/employee/controller/EmployeeController.java index fbfbd77c..2767faff 100644 --- a/src/main/java/cn/lihongjie/coal/employee/controller/EmployeeController.java +++ b/src/main/java/cn/lihongjie/coal/employee/controller/EmployeeController.java @@ -70,7 +70,7 @@ public class EmployeeController { } @PostMapping("/refreshAge") public Object refreshAge() { - this.service.refreshAge(Ctx.currentUser().getOrganizationId()); + this.service.refreshAge(Ctx.activeOrganizationId()); return true; } diff --git a/src/main/java/cn/lihongjie/coal/file/service/FileService.java b/src/main/java/cn/lihongjie/coal/file/service/FileService.java index 2095cc8d..ea192681 100644 --- a/src/main/java/cn/lihongjie/coal/file/service/FileService.java +++ b/src/main/java/cn/lihongjie/coal/file/service/FileService.java @@ -157,7 +157,7 @@ public class FileService extends BaseService { "%s/%s/%s" .formatted( activateProfile, - Ctx.currentUser().getOrganizationId(), + Ctx.activeOrganizationId(), StringUtils.defaultIfBlank(dir, "public"))); InputStream inputStream = fis; String extension = FilenameUtils.getExtension(name.replace(":", "_")); @@ -269,7 +269,7 @@ public class FileService extends BaseService { "%s/%s/%s" .formatted( activateProfile, - Ctx.currentUser().getOrganizationId(), + Ctx.activeOrganizationId(), StringUtils.defaultIfBlank(dir, "public"))); InputStream inputStream = file; fileEntity.setObjectId( diff --git a/src/main/java/cn/lihongjie/coal/invoice/service/InvoiceService.java b/src/main/java/cn/lihongjie/coal/invoice/service/InvoiceService.java index 4fe61f77..46cae685 100644 --- a/src/main/java/cn/lihongjie/coal/invoice/service/InvoiceService.java +++ b/src/main/java/cn/lihongjie/coal/invoice/service/InvoiceService.java @@ -136,7 +136,7 @@ public class InvoiceService extends BaseService 0; diff --git a/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java b/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java index 99e488e3..479c1af8 100644 --- a/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java +++ b/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java @@ -114,7 +114,7 @@ public class JobPostService extends BaseService new BizException("未找到对应的设备: " + y)); }) .memoized() - .apply(Ctx.currentUser().getOrganizationId()); + .apply(Ctx.activeOrganizationId()); List logEntities = ExcelUtils.readFirstSheetToObjectList( diff --git a/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java b/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java index 8275c8df..e8afa694 100644 --- a/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java +++ b/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java @@ -85,7 +85,7 @@ public class NetDiskService extends BaseService 0) { throw new BizException("根目录已经存在同名文件/文件夹"); @@ -724,7 +724,7 @@ public class NetDiskService extends BaseService children; + + + +} diff --git a/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java b/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java index bf79c02b..ea349878 100644 --- a/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java +++ b/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java @@ -12,7 +12,7 @@ import java.util.List; @Data public class UpdateOrganizationDto extends CommonDto { - private String parentId; + private String parent; @Comment("最大用户数量") diff --git a/src/main/java/cn/lihongjie/coal/organization/mapper/OrganizationMapper.java b/src/main/java/cn/lihongjie/coal/organization/mapper/OrganizationMapper.java index a08973e0..5998805f 100644 --- a/src/main/java/cn/lihongjie/coal/organization/mapper/OrganizationMapper.java +++ b/src/main/java/cn/lihongjie/coal/organization/mapper/OrganizationMapper.java @@ -3,6 +3,7 @@ package cn.lihongjie.coal.organization.mapper; import cn.lihongjie.coal.base.mapper.BaseMapper; import cn.lihongjie.coal.organization.dto.CreateOrganizationDto; import cn.lihongjie.coal.organization.dto.OrganizationDto; +import cn.lihongjie.coal.organization.dto.OrganizationTreeDto; import cn.lihongjie.coal.organization.dto.UpdateOrganizationDto; import cn.lihongjie.coal.organization.entity.OrganizationEntity; @@ -19,4 +20,7 @@ public interface OrganizationMapper OrganizationEntity, OrganizationDto, CreateOrganizationDto, - UpdateOrganizationDto> {} + UpdateOrganizationDto> { + OrganizationTreeDto toTreeDto(OrganizationEntity organizationEntity); + +} diff --git a/src/main/java/cn/lihongjie/coal/organization/service/OrganizationService.java b/src/main/java/cn/lihongjie/coal/organization/service/OrganizationService.java index 7d268dbf..23981db7 100644 --- a/src/main/java/cn/lihongjie/coal/organization/service/OrganizationService.java +++ b/src/main/java/cn/lihongjie/coal/organization/service/OrganizationService.java @@ -5,12 +5,10 @@ import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.coalParameterDef.service.CoalParameterDefService; import cn.lihongjie.coal.common.Constants; +import cn.lihongjie.coal.common.Ctx; import cn.lihongjie.coal.common.JpaUtils; import cn.lihongjie.coal.exception.BizException; -import cn.lihongjie.coal.organization.dto.CreateOrganizationDto; -import cn.lihongjie.coal.organization.dto.OrganizationDto; -import cn.lihongjie.coal.organization.dto.ResetAdminPasswordRequest; -import cn.lihongjie.coal.organization.dto.UpdateOrganizationDto; +import cn.lihongjie.coal.organization.dto.*; import cn.lihongjie.coal.organization.entity.OrganizationEntity; import cn.lihongjie.coal.organization.mapper.OrganizationMapper; import cn.lihongjie.coal.organization.repository.OrganizationRepository; @@ -235,5 +233,12 @@ public class OrganizationService extends BaseService deviceGroups() { - return repository.deviceGroups(Ctx.currentUser().getOrganizationId()); + return repository.deviceGroups(Ctx.activeOrganizationId()); } } diff --git a/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java b/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java index 894dcf45..b702d4f0 100644 --- a/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/pdcDeviceData/service/PdcDeviceDataService.java @@ -96,7 +96,7 @@ public class PdcDeviceDataService request.setTd("1 " + request.getTimeDimension()); - request.setOrganizationId(Ctx.currentUser().getOrganizationId()); + request.setOrganizationId(Ctx.activeOrganizationId()); return JpaUtils.execNativeQuery( em, @@ -164,7 +164,7 @@ public class PdcDeviceDataService ? LocalDateTime.now() : request.getEndTime()) .setParameter("deviceGroup", request.getDeviceGroup()) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .setParameter("organizationId", Ctx.activeOrganizationId()) .getSingleResult(); if (minMaxTime == null) { @@ -240,7 +240,7 @@ public class PdcDeviceDataService var maxBucket = Math.max(10, duration.getSeconds() / 100); nativeQuery.setParameter("bucket", maxBucket + " second"); - nativeQuery.setParameter("organizationId", Ctx.currentUser().getOrganizationId()); + nativeQuery.setParameter("organizationId", Ctx.activeOrganizationId()); List list = JpaUtils.convertTuplesToMap( diff --git a/src/main/java/cn/lihongjie/coal/pdcDeviceRealTimeData/service/PdcDeviceRealTimeDataService.java b/src/main/java/cn/lihongjie/coal/pdcDeviceRealTimeData/service/PdcDeviceRealTimeDataService.java index 28e2bc6b..dd2bbbd0 100644 --- a/src/main/java/cn/lihongjie/coal/pdcDeviceRealTimeData/service/PdcDeviceRealTimeDataService.java +++ b/src/main/java/cn/lihongjie/coal/pdcDeviceRealTimeData/service/PdcDeviceRealTimeDataService.java @@ -122,7 +122,7 @@ public class PdcDeviceRealTimeDataService public List getRealTimeReport( GetRealTImeReportRequest request) { - List deviceIds = this.repository.findDeviceIdsByGroup(request.getDeviceGroup(), Ctx.currentUser().getOrganizationId()); + List deviceIds = this.repository.findDeviceIdsByGroup(request.getDeviceGroup(), Ctx.activeOrganizationId()); if (deviceIds.isEmpty()){ return List.of(); diff --git a/src/main/java/cn/lihongjie/coal/purchaseOrder/service/PurchaseOrderService.java b/src/main/java/cn/lihongjie/coal/purchaseOrder/service/PurchaseOrderService.java index ce410843..473727e7 100644 --- a/src/main/java/cn/lihongjie/coal/purchaseOrder/service/PurchaseOrderService.java +++ b/src/main/java/cn/lihongjie/coal/purchaseOrder/service/PurchaseOrderService.java @@ -103,7 +103,7 @@ public class PurchaseOrderService if (StringUtils.isNotEmpty(request.getCode())) { if (repository.existsByCodeAndOrganizationId( - request.getCode(), Ctx.currentUser().getOrganizationId())) { + request.getCode(), Ctx.activeOrganizationId())) { throw new RuntimeException("采购单号已存在"); } } @@ -127,7 +127,7 @@ public class PurchaseOrderService "select count(p) from PurchaseOrderEntity p where p.code = :code and p.id != :id and p.organizationId = :organizationId", Long.class) .setParameter("code", request.getCode()) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .setParameter("organizationId", Ctx.activeOrganizationId()) .setParameter("id", request.getId()) .getSingleResult() > 0L) { @@ -274,7 +274,7 @@ public class PurchaseOrderService switch (currentOrgConfig.getPurchaseOrderNoRule()) { case "1" -> { return sequenceService.genSeq( - "purchaseOrderNo." + Ctx.currentUser().getOrganizationId(), + "purchaseOrderNo." + Ctx.activeOrganizationId(), currentOrgConfig.getPurchaseOrderNoPrefix(), currentOrgConfig.getPurchaseOrderNoAutoIncrLength(), currentOrgConfig.getPurchaseOrderNoStart(), @@ -283,7 +283,7 @@ public class PurchaseOrderService case "2" -> { return sequenceService.genSeq( "purchaseOrderNo." - + Ctx.currentUser().getOrganizationId() + + Ctx.activeOrganizationId() + ObjectUtils.defaultIfNull(dto.getPurchaseDate(), LocalDate.now()) .format(DateTimeFormatter.ofPattern("yyyyMMdd")), currentOrgConfig.getPurchaseOrderNoPrefix(), diff --git a/src/main/java/cn/lihongjie/coal/saleOrder/service/SaleOrderService.java b/src/main/java/cn/lihongjie/coal/saleOrder/service/SaleOrderService.java index 38c37f9b..5810ad7b 100644 --- a/src/main/java/cn/lihongjie/coal/saleOrder/service/SaleOrderService.java +++ b/src/main/java/cn/lihongjie/coal/saleOrder/service/SaleOrderService.java @@ -99,7 +99,7 @@ public class SaleOrderService extends BaseService 0L) { @@ -263,7 +263,7 @@ public class SaleOrderService extends BaseService { return sequenceService.genSeq( - "SaleOrderNo." + Ctx.currentUser().getOrganizationId(), + "SaleOrderNo." + Ctx.activeOrganizationId(), currentOrgConfig.getSaleOrderNoPrefix(), currentOrgConfig.getSaleOrderNoAutoIncrLength(), currentOrgConfig.getSaleOrderNoStart(), @@ -272,7 +272,7 @@ public class SaleOrderService extends BaseService { return sequenceService.genSeq( "SaleOrderNo." - + Ctx.currentUser().getOrganizationId() + + Ctx.activeOrganizationId() + ObjectUtils.defaultIfNull(dto.getSaleDate(), LocalDate.now()) .format(DateTimeFormatter.ofPattern("yyyyMMdd")), currentOrgConfig.getSaleOrderNoPrefix(), @@ -300,7 +300,7 @@ public class SaleOrderService extends BaseService()); } - request.setOrganizationId(Ctx.currentUser().getOrganizationId()); + request.setOrganizationId(Ctx.activeOrganizationId()); String sql = FreeMakerUtils.render( diff --git a/src/main/java/cn/lihongjie/coal/session/dto/SwitchActiveOrgRequest.java b/src/main/java/cn/lihongjie/coal/session/dto/SwitchActiveOrgRequest.java new file mode 100644 index 00000000..333e926d --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/session/dto/SwitchActiveOrgRequest.java @@ -0,0 +1,14 @@ +package cn.lihongjie.coal.session.dto; + +import lombok.Data; + +import java.util.*; + +@Data +public class SwitchActiveOrgRequest { + + + + private String newOrgId; + +} diff --git a/src/main/java/cn/lihongjie/coal/session/service/SessionService.java b/src/main/java/cn/lihongjie/coal/session/service/SessionService.java index a55e95a7..c0c9df0e 100644 --- a/src/main/java/cn/lihongjie/coal/session/service/SessionService.java +++ b/src/main/java/cn/lihongjie/coal/session/service/SessionService.java @@ -2,6 +2,7 @@ package cn.lihongjie.coal.session.service; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.common.Constants; +import cn.lihongjie.coal.common.Ctx; import cn.lihongjie.coal.common.RequestUtils; import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.ip.IpQueryService; @@ -15,6 +16,7 @@ import cn.lihongjie.coal.organization.service.OrganizationService; import cn.lihongjie.coal.ratelimit.RateLimiterService; import cn.lihongjie.coal.session.dto.CaptchaDto; import cn.lihongjie.coal.session.dto.LoginDto; +import cn.lihongjie.coal.session.dto.SwitchActiveOrgRequest; import cn.lihongjie.coal.sms.service.SmsService; import cn.lihongjie.coal.smsTemplate.entity.SmsTemplateEntity; import cn.lihongjie.coal.smsTemplate.service.SmsTemplateService; @@ -40,6 +42,8 @@ import lombok.Data; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -56,10 +60,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; @@ -116,6 +117,67 @@ public class SessionService { @Autowired SmsService smsService; + + + public void switchActiveOrg(SwitchActiveOrgRequest request){ + + String id = Ctx.currentUser().getId(); + + UserEntity userEntity = userService.get(id); + + String organizationId = userEntity.getOrganizationId(); + + if (StringUtils.equals(request.getNewOrgId(), organizationId)){ + return; + } + + if (!BooleanUtils.isTrue(userEntity.getOrgAdmin())){ + + throw new BizException("noPermission", "无权限切换机构"); + } + + + OrganizationEntity organization = organizationService.get(organizationId); + + + if (CollectionUtils.isEmpty(organization.getChildren())) { + + throw new BizException("noChildOrg", "无可用机构"); + } + + Stack stack = new Stack<>(); + stack.push(organization); + Boolean find = false; + while (CollectionUtils.isNotEmpty(stack)){ + + OrganizationEntity pop = stack.pop(); + + if (StringUtils.equals(pop.getId(), request.getNewOrgId())){ + + find = true; + break; + }else { + + if (CollectionUtils.isNotEmpty(pop.getChildren())){ + + stack.addAll(pop.getChildren()); + } + } + + } + + + if (!find){ + + throw new BizException("noChildOrg", "无可用机构"); + } + + loginUserService.switchActiveOrg(Ctx.getSessionId(), request); + + + + } + @SneakyThrows public void rebuildSession(String sessionId) { diff --git a/src/main/java/cn/lihongjie/coal/sms/service/SmsService.java b/src/main/java/cn/lihongjie/coal/sms/service/SmsService.java index 10ff32a3..06a119e9 100644 --- a/src/main/java/cn/lihongjie/coal/sms/service/SmsService.java +++ b/src/main/java/cn/lihongjie/coal/sms/service/SmsService.java @@ -54,7 +54,7 @@ public class SmsService extends BaseService { @SneakyThrows public void sendSmsMessage(String phone, String templateParam, String sysTemplateCode) { - sendSmsMessage(phone, templateParam, sysTemplateCode, Ctx.currentUser().getOrganizationId()); + sendSmsMessage(phone, templateParam, sysTemplateCode, Ctx.activeOrganizationId()); } @SneakyThrows diff --git a/src/main/java/cn/lihongjie/coal/user/service/UserService.java b/src/main/java/cn/lihongjie/coal/user/service/UserService.java index 71696586..0bd322ad 100644 --- a/src/main/java/cn/lihongjie/coal/user/service/UserService.java +++ b/src/main/java/cn/lihongjie/coal/user/service/UserService.java @@ -93,7 +93,7 @@ public class UserService extends BaseService { public UserDto create(CreateUserDto request) { - String organizationId = Ctx.currentUser().getOrganizationId(); + String organizationId = Ctx.activeOrganizationId(); OrganizationEntity organization = organizationService.get(organizationId); @@ -226,7 +226,7 @@ public class UserService extends BaseService { this.repository.deleteAllById(request.getIds()); request.getIds().forEach(this::clearUserCache); - this.assertAdmin(Ctx.currentUser().getOrganizationId()); + this.assertAdmin(Ctx.activeOrganizationId()); } public UserDto getById(String id) { diff --git a/src/main/java/cn/lihongjie/coal/validator/OrgUniqValidator.java b/src/main/java/cn/lihongjie/coal/validator/OrgUniqValidator.java index 24c859d4..4616bff6 100644 --- a/src/main/java/cn/lihongjie/coal/validator/OrgUniqValidator.java +++ b/src/main/java/cn/lihongjie/coal/validator/OrgUniqValidator.java @@ -82,7 +82,7 @@ public class OrgUniqValidator implements ConstraintValidator { query.setParameter("organizationId", PropertyUtils.getProperty(value, "organizationId")); }catch (NoSuchMethodException e){ - query.setParameter("organizationId", Ctx.currentUser().getOrganizationId()); + query.setParameter("organizationId", Ctx.activeOrganizationId()); } if (StringUtils.isNotBlank(id)) { diff --git a/src/main/java/cn/lihongjie/coal/warehouseGoods/service/WarehouseGoodsService.java b/src/main/java/cn/lihongjie/coal/warehouseGoods/service/WarehouseGoodsService.java index 05b7403b..0d537e84 100644 --- a/src/main/java/cn/lihongjie/coal/warehouseGoods/service/WarehouseGoodsService.java +++ b/src/main/java/cn/lihongjie/coal/warehouseGoods/service/WarehouseGoodsService.java @@ -121,12 +121,12 @@ public class WarehouseGoodsService criteriaBuilder.equal(root.get("code"), id), criteriaBuilder.equal( root.get("organizationId"), - Ctx.currentUser().getOrganizationId())), + Ctx.activeOrganizationId())), criteriaBuilder.and( criteriaBuilder.equal(root.get("barCode"), id), criteriaBuilder.equal( root.get("organizationId"), - Ctx.currentUser().getOrganizationId()))); + Ctx.activeOrganizationId()))); } }); diff --git a/src/main/java/cn/lihongjie/coal/warehouseReceipt/service/WarehouseReceiptService.java b/src/main/java/cn/lihongjie/coal/warehouseReceipt/service/WarehouseReceiptService.java index 1c1180b6..f412719d 100644 --- a/src/main/java/cn/lihongjie/coal/warehouseReceipt/service/WarehouseReceiptService.java +++ b/src/main/java/cn/lihongjie/coal/warehouseReceipt/service/WarehouseReceiptService.java @@ -210,7 +210,7 @@ public class WarehouseReceiptService request.setRuleCode(RuleCodeConstant.KF_RKD); request.setTime(receipt0.getReceiptDate()); receipt0.setReceiptNo( - orderNoRuleService.genOrderNo(request, Ctx.currentUser().getOrganizationId())); + orderNoRuleService.genOrderNo(request, Ctx.activeOrganizationId())); entity.setReceipt0(receipt0); this.warehouseReceiptDetailRepository.saveAll(receipt0.getDetail()); @@ -234,7 +234,7 @@ public class WarehouseReceiptService request.setRuleCode(RuleCodeConstant.KF_CKD); request.setTime(receipt1.getReceiptDate()); receipt1.setReceiptNo( - orderNoRuleService.genOrderNo(request, Ctx.currentUser().getOrganizationId())); + orderNoRuleService.genOrderNo(request, Ctx.activeOrganizationId())); entity.setReceipt1(receipt1); this.save(receipt1); @@ -544,7 +544,7 @@ public class WarehouseReceiptService public Object report(WarehouseReportRequest request) { - request.setOrganizationId(Ctx.currentUser().getOrganizationId()); + request.setOrganizationId(Ctx.activeOrganizationId()); String sql = FreeMakerUtils.render( @@ -945,7 +945,7 @@ from ( public Object supplierReport(WarehouseReportRequest request) { - request.setOrganizationId(Ctx.currentUser().getOrganizationId()); + request.setOrganizationId(Ctx.activeOrganizationId()); String sql = FreeMakerUtils.render( diff --git a/src/main/java/cn/lihongjie/coal/weightColumnConfig/controller/WeightColumnConfigController.java b/src/main/java/cn/lihongjie/coal/weightColumnConfig/controller/WeightColumnConfigController.java index b21cc80b..d6f270a5 100644 --- a/src/main/java/cn/lihongjie/coal/weightColumnConfig/controller/WeightColumnConfigController.java +++ b/src/main/java/cn/lihongjie/coal/weightColumnConfig/controller/WeightColumnConfigController.java @@ -45,7 +45,7 @@ public class WeightColumnConfigController { @PostMapping("/initDefault") public Object initDefault() { - this.service.initDefault(Ctx.currentUser().getOrganizationId()); + this.service.initDefault(Ctx.activeOrganizationId()); return true; } diff --git a/src/main/java/cn/lihongjie/coal/weightColumnConfig/service/WeightColumnConfigService.java b/src/main/java/cn/lihongjie/coal/weightColumnConfig/service/WeightColumnConfigService.java index b7024c4b..221753be 100644 --- a/src/main/java/cn/lihongjie/coal/weightColumnConfig/service/WeightColumnConfigService.java +++ b/src/main/java/cn/lihongjie/coal/weightColumnConfig/service/WeightColumnConfigService.java @@ -102,7 +102,7 @@ public class WeightColumnConfigService Long cnt = (Long) em.createQuery("select count(*) from WeightColumnConfigEntity where code = :variable and status = 1 and organizationId = :organizationId") .setParameter("variable", variable) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .setParameter("organizationId", Ctx.activeOrganizationId()) .getSingleResult(); if ( cnt == null || cnt == 0) { @@ -146,7 +146,7 @@ public class WeightColumnConfigService Sort.by(query.getOrders()))); if (!page.hasContent()) { - initDefault(Ctx.currentUser().getOrganizationId()); + initDefault(Ctx.activeOrganizationId()); return list(query); } diff --git a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java index c8664edc..c37ece90 100644 --- a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java @@ -103,7 +103,7 @@ public class WeightDeviceDataService em.createQuery( " from WeightDeviceEntity d where d.organizationId = :organizationId", WeightDeviceEntity.class) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .setParameter("organizationId", Ctx.activeOrganizationId()) .getResultList(); List result = new ArrayList<>(); @@ -214,7 +214,7 @@ where 二次过磅时间>='%s' and 二次过磅时间<='%s' em.createQuery( " from WeightDeviceEntity d where d.organizationId = :organizationId", WeightDeviceEntity.class) - .setParameter("organizationId", Ctx.currentUser().getOrganizationId()) + .setParameter("organizationId", Ctx.activeOrganizationId()) .getResultList(); List result = new ArrayList<>(); @@ -368,7 +368,7 @@ where 二次过磅时间>='%s' and 二次过磅时间<='%s' } public void recalculate(IdRequest id) { - List configs = getConfigs(Ctx.currentUser().getOrganizationId()); + List configs = getConfigs(Ctx.activeOrganizationId()); if (CollectionUtils.isEmpty(configs)) { @@ -611,8 +611,8 @@ where 二次过磅时间>='%s' and 二次过磅时间<='%s' Query selectQuery = em.createNativeQuery(selectSql, Tuple.class); Query countQuery = em.createNativeQuery(countSql, Integer.class); - selectQuery.setParameter("organizationId", Ctx.currentUser().getOrganizationId()); - countQuery.setParameter("organizationId", Ctx.currentUser().getOrganizationId()); + selectQuery.setParameter("organizationId", Ctx.activeOrganizationId()); + countQuery.setParameter("organizationId", Ctx.activeOrganizationId()); if (request.getStartTime() != null) { selectQuery.setParameter("startTime", request.getStartTime());