数据权限的修改

This commit is contained in:
1745237360-cloud
2026-01-10 16:39:33 +08:00
parent 29b24e8450
commit 4b427e1b2e
97 changed files with 3056 additions and 466 deletions
@@ -124,11 +124,51 @@ public class BusinessDocumentApplicationService {
public List<BusinessDocumentPO> queryList(BusinessDocumentDO businessDocumentDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser == null || loginUser.getUserPo() == null) {
log.warn("运单管理查询 - 未获取到登录用户信息,跳过数据权限过滤");
return businessDocumentDomainService.queryList(businessDocumentDO);
}
UserPo userPo = loginUser.getUserPo();
if (userPo.getUserAccountType() == 3){
businessDocumentDO.setTopOrganizationId(userPo.getTopOrganizationId());
}else {
businessDocumentDO.setOrganizationId(userPo.getOrganizationId());
Long loginUserOrganizationId = userPo.getOrganizationId();
Long topOrganizationId = userPo.getTopOrganizationId();
// 先保存前端传递的 organizationId(如果存在)
Long frontendOrganizationId = businessDocumentDO.getOrganizationId();
// 数据权限:根据organizationId来设置查询权限
// organizationId等于2827时查询全部,其他仅查询各自组织的信息
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
// 南光组织(organizationId=2827):可以查询所有组织的数据
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
if (frontendOrganizationId != null) {
businessDocumentDO.setOrganizationId(frontendOrganizationId);
businessDocumentDO.setTopOrganizationId(null);
} else {
businessDocumentDO.setOrganizationId(null);
businessDocumentDO.setTopOrganizationId(null);
}
} else {
// 其他组织:根据userAccountType设置组织过滤
if (userPo.getUserAccountType() == 3){
// 租户管理员:使用topOrganizationId
if (topOrganizationId != null) {
businessDocumentDO.setTopOrganizationId(topOrganizationId);
}
businessDocumentDO.setOrganizationId(null);
} else {
// 其他用户:使用organizationId
if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
// 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
log.warn("运单管理查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
frontendOrganizationId, loginUserOrganizationId);
businessDocumentDO.setOrganizationId(loginUserOrganizationId);
} else if (frontendOrganizationId == null) {
businessDocumentDO.setOrganizationId(loginUserOrganizationId);
}
businessDocumentDO.setTopOrganizationId(null);
}
}
return businessDocumentDomainService.queryList(businessDocumentDO);
}
@@ -1347,6 +1387,21 @@ public class BusinessDocumentApplicationService {
detail.setUpdateBy(loginUser.getUserid());
detail.setUpdateByName(loginUser.getUsername());
detail.setUpdateTime(now);
// 设置审核人的组织ID和组织名称
if (loginUser.getUserPo() != null) {
Long organizationId = loginUser.getUserPo().getOrganizationId();
String organizationName = loginUser.getUserPo().getOrganizationName();
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (organizationId != null) {
detail.setOrganizationId(organizationId);
}
if (organizationName != null) {
detail.setOrganizationName(organizationName);
}
if (topOrganizationId != null) {
detail.setTopOrganizationId(topOrganizationId);
}
}
businessDocumentDetaliUpdateList.add(detail);
BusinessDocumentDetaliDTO detailDto = new BusinessDocumentDetaliDTO();
@@ -1401,6 +1456,7 @@ public class BusinessDocumentApplicationService {
Verification verification = new Verification();
verification.setOrganizationId(businessDocumentDetaliDTO.getOrganizationId());
verification.setTopOrganizationId(businessDocumentDetaliDTO.getTopOrganizationId());
verification.setOrganizationName(businessDocumentDetaliDTO.getOrganizationName());
verification.setVerificationStatus(1);//未支付
verification.setBusinessDocumentDetaliId(businessDocumentDetaliDTO.getBusinessDocumentDetaliId());
verification.setBusinessDocumentDetaliNumber(businessDocumentDetaliDTO.getBusinessDocumentDetaliNumber());
@@ -56,7 +56,7 @@ public class ReceivingAccountApplicationService {
}
/**
* 批量新增收款账户(先删除所有,再新增
* 批量新增收款账户(追加式新增,不删除旧数据
*
* @param receivingAccountDTOList 收款账户DTO列表
* @return 是否成功
@@ -65,9 +65,10 @@ public class ReceivingAccountApplicationService {
public Boolean batchInsert(List<ReceivingAccountDO> receivingAccountDTOList) {
log.info("批量新增收款账户,数量:{}", receivingAccountDTOList.size());
// 先删除所有现有数据
int deleteCount = receivingAccountRepository.deleteAll();
log.info("已删除现有收款账户数量:{}", deleteCount);
if (receivingAccountDTOList == null || receivingAccountDTOList.isEmpty()) {
log.warn("批量新增收款账户:数据列表为空");
return false;
}
List<ReceivingAccount> receivingAccountList = new ArrayList<>();
Date now = new Date();
@@ -75,17 +75,68 @@ public class ReconciliationApplicationService {
public List<ReconciliationPO> queryList(ReconciliationDO reconciliationDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
UserPo userPo = loginUser.getUserPo();
if (userPo.getUserAccountType() == 3) {
reconciliationDO.setTopOrganizationId(userPo.getTopOrganizationId());
} else if (userPo.getUserAccountType() == 2){
reconciliationDO.setOrganizationId(userPo.getOrganizationId());
// 先保存前端传递的 organizationId(如果存在)
Long frontendOrganizationId = reconciliationDO.getOrganizationId();
// 获取当前登录用户的组织信息
Long loginUserOrganizationId = userPo.getOrganizationId();
Long topOrganizationId = userPo.getTopOrganizationId();
// 数据权限:根据organizationId来设置查询权限
// organizationId等于2827时查询全部,其他仅查询各自组织的信息
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
// 南光组织(organizationId=2827):可以查询所有组织的数据
// 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,使用前端传递的值进行过滤
reconciliationDO.setOrganizationId(frontendOrganizationId);
reconciliationDO.setTopOrganizationId(null);
} else {
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
reconciliationDO.setOrganizationId(null);
reconciliationDO.setTopOrganizationId(null);
}
} else {
if (loginUser.getRoleList().contains(RoleEnum.SHIPPER.getCode()) || loginUser.getRoleList().contains(RoleEnum.COMPANY.getCode())){
reconciliationDO.setUserId(userPo.getUserId());
}else {
reconciliationDO.setOrganizationId(userPo.getOrganizationId());
// 其他组织:设置organizationId,只查询当前组织的数据
// 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
// 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
if (frontendOrganizationId.equals(2827L)) {
// 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
reconciliationDO.setOrganizationId(-1L);
reconciliationDO.setTopOrganizationId(null);
} else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
reconciliationDO.setOrganizationId(loginUserOrganizationId);
if (topOrganizationId != null) {
reconciliationDO.setTopOrganizationId(topOrganizationId);
}
} else {
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
reconciliationDO.setOrganizationId(frontendOrganizationId);
if (topOrganizationId != null) {
reconciliationDO.setTopOrganizationId(topOrganizationId);
}
}
} else {
// 前端没有传递 organizationId,根据用户账号类型设置组织过滤条件
if (userPo.getUserAccountType() == 3) {
reconciliationDO.setTopOrganizationId(topOrganizationId);
} else if (userPo.getUserAccountType() == 2){
reconciliationDO.setOrganizationId(loginUserOrganizationId);
} else {
if (loginUser.getRoleList().contains(RoleEnum.SHIPPER.getCode()) || loginUser.getRoleList().contains(RoleEnum.COMPANY.getCode())){
reconciliationDO.setUserId(userPo.getUserId());
}else {
reconciliationDO.setOrganizationId(loginUserOrganizationId);
}
}
}
}
return reconciliationDomainService.queryList(reconciliationDO);
}
@@ -50,13 +50,80 @@ public class TmsReceiptApplicationService {
public List<TmsReceiptPO> queryList(TmsReceiptDO tmsReceiptDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
tmsReceiptDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
if (loginUser == null || loginUser.getUserPo() == null) {
log.warn("收款单查询 - 未获取到登录用户信息,跳过数据权限过滤");
return tmsReceiptDomainService.queryList(tmsReceiptDO);
}
// 先保存前端传递的 organizationId(如果存在)
Long frontendOrganizationId = tmsReceiptDO.getOrganizationId();
// 获取当前登录用户的组织信息
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
log.info("收款单查询 - 开始数据权限处理 - 登录用户组织ID: {}, topOrganizationId: {}, 前端传递组织ID: {}",
loginUserOrganizationId, topOrganizationId, frontendOrganizationId);
// 数据权限:根据organizationId来设置查询权限
// organizationId等于2827时查询全部,其他仅查询各自组织的信息
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
// 南光组织(organizationId=2827):可以查询所有组织的数据
// 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,使用前端传递的值进行过滤
tmsReceiptDO.setOrganizationId(frontendOrganizationId);
tmsReceiptDO.setTopOrganizationId(null);
} else {
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
tmsReceiptDO.setOrganizationId(null);
tmsReceiptDO.setTopOrganizationId(null);
}
} else {
// 其他组织:设置organizationId,只查询当前组织的数据
// 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
// 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
if (frontendOrganizationId.equals(2827L)) {
// 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
tmsReceiptDO.setOrganizationId(-1L);
tmsReceiptDO.setTopOrganizationId(null);
} else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
tmsReceiptDO.setOrganizationId(loginUserOrganizationId);
if (topOrganizationId != null && topOrganizationId != 1) {
tmsReceiptDO.setTopOrganizationId(topOrganizationId);
}
} else {
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
tmsReceiptDO.setOrganizationId(frontendOrganizationId);
if (topOrganizationId != null && topOrganizationId != 1) {
tmsReceiptDO.setTopOrganizationId(topOrganizationId);
}
}
} else {
// 前端没有传递 organizationId,根据用户组织信息设置过滤条件
// 优先使用 topOrganizationId(如果存在且不等于1),否则使用 organizationId
if (topOrganizationId != null && topOrganizationId != 1) {
tmsReceiptDO.setTopOrganizationId(topOrganizationId);
tmsReceiptDO.setOrganizationId(null);
} else if (loginUserOrganizationId != null) {
tmsReceiptDO.setOrganizationId(loginUserOrganizationId);
tmsReceiptDO.setTopOrganizationId(null);
}
}
}
return tmsReceiptDomainService.queryList(tmsReceiptDO);
// 调试日志:打印设置的查询条件
log.info("收款单查询 - 数据权限处理完成 - 登录用户组织ID: {}, 前端传递组织ID: {}, 最终查询条件 - organizationId: {}, topOrganizationId: {}, 是否为南光组织: {}",
loginUserOrganizationId, frontendOrganizationId, tmsReceiptDO.getOrganizationId(), tmsReceiptDO.getTopOrganizationId(),
(loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)));
List<TmsReceiptPO> result = tmsReceiptDomainService.queryList(tmsReceiptDO);
log.info("收款单查询 - 查询完成,返回数据条数: {}", result != null ? result.size() : 0);
return result;
}
@@ -351,6 +351,12 @@ public class InvoiceInfoManageApplicationService {
//数据装配
InvoiceInfo invoiceInfo = new InvoiceAssembler().toDo(invoiceInfoDto);
// 设置当前登录用户的组织信息
com.mhd.system.api.model.LoginUser loginUser = com.mhd.common.security.utils.SecurityUtils.getLoginUser();
if (loginUser != null && loginUser.getUserPo() != null) {
invoiceInfo.setOrganizationId(loginUser.getUserPo().getOrganizationId());
invoiceInfo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
invoiceInfo.setInvoiceStatus(1);
invoiceInfo.setInvoiceHeader(invoiceInfoManagePo.getInvoiceHeader());
invoiceInfo.setWaybillAmount(new BigDecimal(invoiceInfoDto.getInvoiceOrderIds().length));
@@ -137,6 +137,12 @@ public class RevenueExpensesRecordApplicationService
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// 设置当前登录用户的组织信息
if (loginUser.getUserPo() != null) {
revenueExpensesRecord.setOrganizationId(loginUser.getUserPo().getOrganizationId());
revenueExpensesRecord.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
//支付通道
if(StringUtils.isNotEmpty(revenueExpensesRecord.getPayChannel())){
List<SysDictDataVo> timeTagEndVos = selectListByDictType(DictCode.pay_channel.getCode());
@@ -151,44 +151,58 @@ public class VerificationApplicationService
* @return 收入核销集合
*/
public List<VerificationPo> selectVerificationList(VerificationPo verificationPo){
List<VerificationPo> list = new ArrayList<>();
List<Long> organizationIdList = new ArrayList<>();
//获取登录人信息
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser == null || loginUser.getUserPo() == null) {
log.warn("应付账单查询 - 未获取到登录用户信息,跳过数据权限过滤");
return verificationDomainService.selectVerificationList(verificationPo);
}
UserPo userPo = loginUser.getUserPo();
//当前组织id
Long organizationId = new Long("2");
OrganizationPo organizationPo = loginUser.getOrganizationPo();
if (organizationPo == null){
organizationIdList.add(userPo.getOrganizationId());
}else {
List<Long> organizationIdList1 = organizationPo.getOrganizationIdList();
if (organizationIdList1 != null && organizationIdList1.size() > 0){
organizationIdList.addAll(organizationIdList1);
}else {
organizationIdList.add(organizationPo.getOrganizationId());
// 先保存前端传递的 organizationId(如果存在)
Long frontendOrganizationId = verificationPo.getOrganizationId();
// 获取当前登录用户的组织信息
Long loginUserOrganizationId = userPo.getOrganizationId();
Long topOrganizationId = userPo.getTopOrganizationId();
// 数据权限:根据organizationId来设置查询权限
// topOrganizationId为null时,为顶级组织(南光组织),查所有;其他组织查自己
if (topOrganizationId == null) {
// 南光组织:可以查询所有组织的数据
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,使用前端传递的值进行过滤
verificationPo.setOrganizationId(frontendOrganizationId);
verificationPo.setTopOrganizationId(null);
} else {
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
verificationPo.setOrganizationId(null);
verificationPo.setTopOrganizationId(null);
}
} else {
// 其他组织:设置organizationId,只查询当前组织的数据
// 其他组织只能查询自己组织的数据
if (frontendOrganizationId != null) {
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
verificationPo.setOrganizationId(loginUserOrganizationId);
} else {
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
verificationPo.setOrganizationId(frontendOrganizationId);
}
verificationPo.setTopOrganizationId(topOrganizationId);
} else {
// 前端没有传递 organizationId,使用当前登录用户的组织ID
verificationPo.setOrganizationId(loginUserOrganizationId);
verificationPo.setTopOrganizationId(topOrganizationId);
}
}
if(loginUser != null){
// if(loginUser.getUserPo() != null && loginUser.getUserPo().getOrganizationId() != null){
// organizationId = loginUser.getUserPo().getOrganizationId();
// AjaxResult info = specialLogisticsServiceFeign.getBranchByOrganizationId(organizationId);
// if("200".equals(String.valueOf(info.get("code")))){
// BranchPo branchPo = JSONObject.parseObject(JSONObject.toJSONString(info.get("data")), BranchPo.class);
// verificationPo.setBranchId(branchPo.getBranchId());
// }
// }
}
if (organizationIdList != null && organizationIdList.size() > 0){
organizationIdList.add(userPo.getOrganizationId());
}
// verificationPo.setOrganizationIdList(organizationIdList);
// verificationPo.setVerificationType(2);
// if (StringUtils.isNotBlank(verificationPo.getWaybillNumbers())){
// verificationPo.setWaybillNumberList(CollectionUtil.toList(verificationPo.getWaybillNumbers().split(",")));
// }
return verificationDomainService.selectOutVerificationList(verificationPo);
// return verificationDomainService.selectVerificationList(verificationPo);
}
/**