存储subjectcode

This commit is contained in:
2026-07-01 08:49:30 +08:00
parent df7322098e
commit 673f74b32e
3 changed files with 59 additions and 1 deletions
@@ -331,7 +331,7 @@ public class ContractLaunchController {
*/
@GetMapping("/{id}/counterparty-confirm")
public R<Map<String, Object>> getCounterpartyConfirm(@PathVariable("id") Long id) {
return R.success(contractLaunchService.getCounterpartyConfirmMap(id));
return R.success(contractLaunchService.getCounterpartyConfirmFiltered(id));
}
/**
@@ -59,6 +59,9 @@ public interface ContractLaunchService {
/** 获取相对方签署确认状态 Map */
Map<String, Object> getCounterpartyConfirmMap(Long id);
/** 获取相对方签署确认状态(按权限过滤:manage 全量,business 只看自己) */
Map<String, Object> getCounterpartyConfirmFiltered(Long id);
/** 相对方确认已签署完成 */
Map<String, Object> confirmCounterparty(Long id, String companyName);
@@ -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<String, Object> getCounterpartyConfirmFiltered(Long id) {
Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> confirmMap = getCounterpartyConfirmMap(id);
Map<String, Object> 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);