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 062ccc4..f876c70 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java @@ -2,6 +2,7 @@ package com.nbport.zgwl.contractlaunch.service; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; import com.nbport.zgwl.common.PageResult; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchApproveDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveDto; @@ -16,6 +17,7 @@ import com.nbport.zgwl.contractlaunch.service.ContractLaunchLegalFileBridgeServi import com.nbport.zgwl.contractlaunch.mapper.ContractLaunchMapper; import com.nbport.zgwl.contractlaunch.utils.ContractLaunchCodeUtils; import com.nbport.zgwl.contractlaunch.utils.ContractLaunchConstants; +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; @@ -194,6 +196,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { @Override @Transactional(rollbackFor = Exception.class) public ContractLaunchDto submitToLaw(Long id) { + ContractLaunchDto contract = getDetail(id); if (!canSubmit(contract.getStatus())) { throw new ServiceException("当前状态不允许提交法务"); @@ -207,6 +210,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { contractLaunchMapper.updateContract(contract); Map settlementPayload = buildSettlementPushPayload(contract); + log.info("结算参数 JSON:{}", JsonUtils.toJson(settlementPayload)); insertLog(id, ContractLaunchConstants.ACTION_SUBMIT, "提交法务", ContractLaunchConstants.ACTION_STATUS_PENDING, "合同已提交法务接口,当前先保留 mock 流程", settlementPayload, currentUser); // TODO: 法务接口当前不可用,真实联调时打开下面调用即可 @@ -428,7 +432,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { SysUserEntity currentUser = adminSecurityManage.getUser(); Map payload = buildDataCollectionContractPayload(contract); insertLog(id, ContractLaunchConstants.ACTION_COLLECT, "模拟合同采集", ContractLaunchConstants.ACTION_STATUS_PENDING, "合同采集接口当前先注释,使用测试按钮流转", payload, currentUser); - + log.info("测试采集提交参数:{}", JsonUtils.toJson(payload)); // TODO: 法务接口当前不可用,真实联调时打开下面调用即可 // PushPayloadDTO requestDTO = new PushPayloadDTO(); // requestDTO.setPayload(payload); @@ -1090,9 +1094,9 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { map.put("planSubjectName", plan.getPlanSubjectName()); return map; }).collect(Collectors.toList())); - payload.put("contractText", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_BODY)); - payload.put("otherAttach", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_OTHER)); - payload.put("contractGistFile", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_GIST)); +// payload.put("contractText", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_BODY)); +// payload.put("otherAttach", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_OTHER)); +// payload.put("contractGistFile", buildSettlementFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_GIST)); return payload; } @@ -1101,39 +1105,72 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { Map payload = new LinkedHashMap<>(); payload.put("c_name", contract.getContractName()); payload.put("c_code", contract.getLawContractCode() == null || contract.getLawContractCode().isBlank() ? contract.getContractCode() : contract.getLawContractCode()); - payload.put("c_weNames", contract.getCompanyName()); + // TODO: c_weNames 传机构编码,当前用 signingSubjectCode(签约主体编码),若为空则用 orgId + payload.put("c_weNames", contract.getSigningSubjectCode() != null && !contract.getSigningSubjectCode().isBlank() + ? contract.getSigningSubjectCode() + : contract.getOrgId()); + // TODO: c_oppositeNames 应传集团返回的相对方ID,多个用逗号分隔,当前暂时传摘要占位 payload.put("c_oppositeNames", contract.getCounterpartySummary()); payload.put("c_textSource", contract.getTextSource()); + // c_needAmendments(是否需修订条款):DTO 暂无此字段,默认传 0(否) + payload.put("c_needAmendments", "0"); payload.put("c_mainContent", contract.getPrimaryContent()); payload.put("c_direction", contract.getPaymentDirection()); payload.put("c_method", contract.getValuationMode()); - payload.put("c_subjectAMT", contract.getContractAmount()); + // 合同标的额:计价方式=固定总价时必填 + if ("1".equals(contract.getValuationMode()) && contract.getContractAmount() != null) { + payload.put("c_subjectAMT", contract.getContractAmount()); + } else { + payload.put("c_subjectAMT", null); + } payload.put("c_currency", contract.getCurrencyName()); + // TODO: c_estimatedAMT(预估金额)DTO 暂无此字段,计价方式=预估总价时需传 + payload.put("c_estimatedAMT", null); payload.put("c_amountExplain", contract.getAmountExplain()); + // 额外金额 + payload.put("c_additional", contract.getEwAmountType()); + if (contract.getDjAmount() != null) payload.put("c_dAMT", contract.getDjAmount()); + if (contract.getYjAmount() != null) payload.put("c_yAMT", contract.getYjAmount()); + if (contract.getYfkAmount() != null) payload.put("c_yfkAMT", contract.getYfkAmount()); + if (contract.getBzjAmount() != null) payload.put("c_bzjAMT", contract.getBzjAmount()); payload.put("c_type", contract.getContractTypeCode()); payload.put("c_termType", contract.getContractPeriodType()); payload.put("c_termExplain", contract.getPeriodExplain()); payload.put("c_termStart", contract.getEffectiveStart()); payload.put("c_termEnd", contract.getEffectiveEnd()); payload.put("c_qyztGAT", contract.getIsSgat()); + payload.put("c_qyztSW", contract.getContractNature()); payload.put("c_executor", contract.getExecutorAccount()); payload.put("c_openBidding", contract.getIsOpenBidding()); + // 关联招标号:公开招标选是时必填 + if (Integer.valueOf(1).equals(contract.getIsOpenBidding()) && contract.getBiddingNo() != null) { + payload.put("c_biddingNo", contract.getBiddingNo()); + } else { + payload.put("c_biddingNo", null); + } payload.put("c_currentBudget", contract.getIsYearBudget()); payload.put("c_major", contract.getIsMajorContract()); payload.put("c_signMethod", contract.getSealType()); + // TODO: c_authAttachs(授权委托书附件)当前暂无此数据,传空数组 + payload.put("c_authAttachs", Collections.emptyList()); payload.put("c_creator", contract.getInitiator()); payload.put("c_creatorPhone", contract.getCreatorPhone()); payload.put("c_createDept", contract.getInitiatorDept()); + payload.put("c_creationTime", contract.getCreateTime()); + payload.put("c_signExplain", contract.getContractGistRemark()); payload.put("c_zw", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_BODY)); payload.put("c_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_OTHER)); payload.put("c_signAttachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_GIST)); payload.put("c_lxPlan", contract.getPerformancePlans()); + // 用印信息 Map seal = new LinkedHashMap<>(); seal.put("seal_isSeal", "1"); seal.put("seal_approveSame", "1"); seal.put("seal_type", contract.getSealType()); + seal.put("seal_quantity", "1"); seal.put("seal_date", contract.getSignDate()); payload.put("c_seal", seal); + // 签订信息 Map sign = new LinkedHashMap<>(); sign.put("sign_isSign", "1"); sign.put("sign_date", contract.getSignDate()); @@ -1141,6 +1178,8 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { sign.put("sign_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_SIGNED)); sign.put("sign_executor", contract.getExecutorAccount()); payload.put("c_sign", sign); + // 时间戳 + payload.put("timeStamp", String.valueOf(System.currentTimeMillis())); return payload; } diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/utils/JsonUtils.java b/src/main/java/com/nbport/zgwl/contractlaunch/utils/JsonUtils.java new file mode 100644 index 0000000..1ea4b05 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractlaunch/utils/JsonUtils.java @@ -0,0 +1,36 @@ +package com.nbport.zgwl.contractlaunch.utils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class JsonUtils { + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + static { + // 注册 Java8 时间模块,解决 LocalDateTime 序列化失败 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + // 配置 LocalDateTime 格式化输出:yyyy-MM-dd HH:mm:ss + javaTimeModule.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + OBJECT_MAPPER.registerModule(javaTimeModule); + // 美化输出(可选,让日志更好看) + OBJECT_MAPPER.writerWithDefaultPrettyPrinter(); + } + + public static String toJson(Object obj) { + if (obj == null) { + return "null"; + } + try { + return OBJECT_MAPPER.writeValueAsString(obj); + } catch (Exception e) { + // 序列化失败时返回 toString,保证不报错 + return obj.toString(); + } + } +} \ No newline at end of file diff --git a/upload-files/20260603/bd0666db0d104212a40febf733fd8e96.pdf b/upload-files/20260603/bd0666db0d104212a40febf733fd8e96.pdf new file mode 100644 index 0000000..394ae38 Binary files /dev/null and b/upload-files/20260603/bd0666db0d104212a40febf733fd8e96.pdf differ