From 673f74b32e0b573f9d2ea89a3af78f3b83b1b712 Mon Sep 17 00:00:00 2001 From: zhouxiaofeng <2946471396@qq.com> Date: Wed, 1 Jul 2026 08:49:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E5=82=A8subjectcode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ContractLaunchController.java | 2 +- .../service/ContractLaunchService.java | 3 + .../service/ContractLaunchServiceImpl.java | 55 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java b/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java index a8d1f08..7cb2f95 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java @@ -331,7 +331,7 @@ public class ContractLaunchController { */ @GetMapping("/{id}/counterparty-confirm") public R> getCounterpartyConfirm(@PathVariable("id") Long id) { - return R.success(contractLaunchService.getCounterpartyConfirmMap(id)); + return R.success(contractLaunchService.getCounterpartyConfirmFiltered(id)); } /** diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchService.java b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchService.java index 315354f..4da2500 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchService.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchService.java @@ -59,6 +59,9 @@ public interface ContractLaunchService { /** 获取相对方签署确认状态 Map */ Map getCounterpartyConfirmMap(Long id); + /** 获取相对方签署确认状态(按权限过滤:manage 全量,business 只看自己) */ + Map getCounterpartyConfirmFiltered(Long id); + /** 相对方确认已签署完成 */ Map confirmCounterparty(Long id, String companyName); diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java index 02962ed..da72ce9 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java @@ -30,6 +30,8 @@ import com.nbport.zgwl.contractlaunch.utils.JsonUtils; import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; import com.nbport.zgwl.contractpush.service.DataCollectionPushService; import com.nbport.zgwl.contractpush.service.SettlementPushService; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.service.PartnerManageService; import com.nbport.zgwl.seal.service.SealTokenService; import com.nbport.zgwl.seal.config.SealConfig; import com.nbport.zgwl.seal.utils.SealHttpClient; @@ -81,6 +83,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { private final LocalFileService localFileService; private final SealTokenService sealTokenService; private final SealConfig sealConfig; + private final PartnerManageService partnerManageService; /** * 分页查询,附带合同方/文件/履行计划(列表页不查日志)。 @@ -607,6 +610,33 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { return JsonUtils.parseMap(raw); } + @Override + public Map getCounterpartyConfirmFiltered(Long id) { + Map all = getCounterpartyConfirmMap(id); + SysUserEntity currentUser = adminSecurityManage.getUser(); + boolean canManageAll = authManager.isUserCanAccessSys(currentUser.getId(), SysEnum.MANAGE); + if (canManageAll) { + return all; + } + // business 用户只返回自己组织对应的相对方确认状态 + ContractLaunchDto contract = getDetail(id); + String userOrgId = currentUser.getSysOrgEntity() == null ? "" : String.valueOf(currentUser.getSysOrgEntity().getId()); + String userOrgName = currentUser.getSysOrgEntity() == null ? "" : currentUser.getSysOrgEntity().getOrgName(); + Map filtered = new LinkedHashMap<>(); + if (contract.getPartyList() != null) { + contract.getPartyList().stream() + .filter(this::isOppositeParty) + .filter(p -> userOrgId.equals(p.getOppositeId()) + || userOrgId.equals(p.getSubjectCode()) + || userOrgName.equals(p.getCompanyName())) + .forEach(p -> { + String name = p.getCompanyName(); + filtered.put(name, all.getOrDefault(name, new LinkedHashMap<>())); + }); + } + return filtered; + } + @Override @Transactional(rollbackFor = Exception.class) public Map confirmCounterparty(Long id, String companyName) { @@ -616,6 +646,19 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { String username = currentUser.getUsername(); String mobile = currentUser.getMobilePhone(); + // 权限校验:business 用户只能确认自己组织对应的相对方 + boolean canManageAll = authManager.isUserCanAccessSys(currentUser.getId(), SysEnum.MANAGE); + if (!canManageAll) { + String userOrgId = currentUser.getSysOrgEntity() == null ? "" : String.valueOf(currentUser.getSysOrgEntity().getId()); + boolean matched = (contract.getPartyList() != null) && contract.getPartyList().stream() + .filter(this::isOppositeParty) + .anyMatch(p -> companyName.equals(p.getCompanyName()) + && (userOrgId.equals(p.getOppositeId()) || userOrgId.equals(p.getSubjectCode()))); + if (!matched) { + throw new ServiceException("只能确认本组织对应的相对方"); + } + } + Map confirmMap = getCounterpartyConfirmMap(id); Map entry = new LinkedHashMap<>(); @@ -1074,6 +1117,18 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { party.setId(contractLaunchMapper.selectPartySeqNextVal()); party.setContractId(contract.getId()); party.setSortOrder(i + 1); + // 相对方补充 subjectCode = linkedOrgId,用于确认签署时按组织匹配 + if (isOppositeParty(party) && party.getPartnerId() != null + && (party.getSubjectCode() == null || party.getSubjectCode().isBlank())) { + try { + PartnerManageDto partner = partnerManageService.selectPartnerById(party.getPartnerId()); + if (partner != null && partner.getLinkedOrgId() != null) { + party.setSubjectCode(String.valueOf(partner.getLinkedOrgId())); + } + } catch (Exception ignored) { + // 相对方查询失败不阻塞保存 + } + } } if (!contract.getPartyList().isEmpty()) { contractLaunchMapper.batchInsertParty(contract.getPartyList(), operator, operator);