校验问题
This commit is contained in:
+45
-22
@@ -41,6 +41,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -62,6 +63,9 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ContractLaunchServiceImpl implements ContractLaunchService {
|
public class ContractLaunchServiceImpl implements ContractLaunchService {
|
||||||
|
|
||||||
|
/** 法务接口要求的日期时间格式:yyyy-MM-dd HH:mm:ss */
|
||||||
|
private static final DateTimeFormatter LAW_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
private final ContractLaunchMapper contractLaunchMapper;
|
private final ContractLaunchMapper contractLaunchMapper;
|
||||||
private final AdminSecurityManage adminSecurityManage;
|
private final AdminSecurityManage adminSecurityManage;
|
||||||
private final SettlementPushService settlementPushService;
|
private final SettlementPushService settlementPushService;
|
||||||
@@ -1266,6 +1270,9 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
if (contract.getCurrencyName() == null || contract.getCurrencyName().isBlank()) {
|
if (contract.getCurrencyName() == null || contract.getCurrencyName().isBlank()) {
|
||||||
throw new ServiceException("币种不能为空");
|
throw new ServiceException("币种不能为空");
|
||||||
}
|
}
|
||||||
|
if (contract.getPaymentMethod() == null || contract.getPaymentMethod().isBlank()) {
|
||||||
|
throw new ServiceException("付款方式不能为空");
|
||||||
|
}
|
||||||
if (contract.getSealType() == null || contract.getSealType().isBlank()) {
|
if (contract.getSealType() == null || contract.getSealType().isBlank()) {
|
||||||
throw new ServiceException("签订方式不能为空");
|
throw new ServiceException("签订方式不能为空");
|
||||||
}
|
}
|
||||||
@@ -1408,8 +1415,8 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
payload.put("contractSysId", contract.getContractSysId());
|
payload.put("contractSysId", contract.getContractSysId());
|
||||||
payload.put("selfCode", contract.getSelfCode());
|
payload.put("selfCode", contract.getSelfCode());
|
||||||
payload.put("contractName", contract.getContractName());
|
payload.put("contractName", contract.getContractName());
|
||||||
payload.put("startTime", contract.getEffectiveStart());
|
payload.put("startTime", formatLawDate(contract.getEffectiveStart()));
|
||||||
payload.put("endTime", contract.getEffectiveEnd());
|
payload.put("endTime", formatLawDate(contract.getEffectiveEnd()));
|
||||||
payload.put("amountExplain", contract.getAmountExplain());
|
payload.put("amountExplain", contract.getAmountExplain());
|
||||||
payload.put("isText", contract.getTextSource());
|
payload.put("isText", contract.getTextSource());
|
||||||
payload.put("primaryContent", contract.getPrimaryContent());
|
payload.put("primaryContent", contract.getPrimaryContent());
|
||||||
@@ -1438,10 +1445,18 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
.filter(this::isOppositeParty)
|
.filter(this::isOppositeParty)
|
||||||
.map(item -> {
|
.map(item -> {
|
||||||
Map<String, Object> map = new LinkedHashMap<>();
|
Map<String, Object> map = new LinkedHashMap<>();
|
||||||
map.put("oppCharacter", "2".equals(item.getOppositeCharacter()) || "4".equals(item.getOppositeCharacter()) ? "ZZR" : "QY");
|
String oppChar = item.getOppositeCharacter();
|
||||||
|
// V9.5 要求 oppCharacter: ZZR(自然人) / QY(企业)
|
||||||
|
// 默认按境内组织处理,但若明确为个人则传 ZZR
|
||||||
|
if (oppChar == null || oppChar.isBlank()) {
|
||||||
|
map.put("oppCharacter", "QY");
|
||||||
|
} else {
|
||||||
|
map.put("oppCharacter", "2".equals(oppChar) || "4".equals(oppChar) ? "ZZR" : "QY");
|
||||||
|
}
|
||||||
map.put("credirCode", item.getCreditCode());
|
map.put("credirCode", item.getCreditCode());
|
||||||
map.put("idCard", item.getNaturalPersonIdNumber());
|
map.put("idCard", item.getNaturalPersonIdNumber());
|
||||||
map.put("oppositeName", item.getCompanyName());
|
// V9.5 contractOpposites 参数表无 oppositeName 字段,只有 contractName(合同名称,顶层字段)
|
||||||
|
// 此处不传 oppositeName
|
||||||
return map;
|
return map;
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
payload.put("contractKxPlans", contract.getPerformancePlans().stream().map(plan -> {
|
payload.put("contractKxPlans", contract.getPerformancePlans().stream().map(plan -> {
|
||||||
@@ -1449,7 +1464,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
map.put("planWhere", plan.getPlanWhere());
|
map.put("planWhere", plan.getPlanWhere());
|
||||||
map.put("planMoney", plan.getPlanMoney());
|
map.put("planMoney", plan.getPlanMoney());
|
||||||
map.put("planDetail", plan.getPlanDetail());
|
map.put("planDetail", plan.getPlanDetail());
|
||||||
map.put("planTime", plan.getPlanTime());
|
map.put("planTime", formatLawDate(plan.getPlanTime()));
|
||||||
map.put("planMatter", plan.getPlanMatter());
|
map.put("planMatter", plan.getPlanMatter());
|
||||||
map.put("planDay", plan.getPlanDay());
|
map.put("planDay", plan.getPlanDay());
|
||||||
map.put("planSubjectCode", plan.getPlanSubjectCode());
|
map.put("planSubjectCode", plan.getPlanSubjectCode());
|
||||||
@@ -1484,28 +1499,29 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
payload.put("c_method", contract.getValuationMode());
|
payload.put("c_method", contract.getValuationMode());
|
||||||
// 合同标的额:计价方式=固定总价时必填
|
// 合同标的额:计价方式=固定总价时必填
|
||||||
if ("1".equals(contract.getValuationMode()) && contract.getContractAmount() != null) {
|
if ("1".equals(contract.getValuationMode()) && contract.getContractAmount() != null) {
|
||||||
payload.put("c_subjectAMT", contract.getContractAmount());
|
payload.put("c_subjectAMT", String.valueOf(contract.getContractAmount()));
|
||||||
} else {
|
} else {
|
||||||
payload.put("c_subjectAMT", "");
|
payload.put("c_subjectAMT", "");
|
||||||
}
|
}
|
||||||
payload.put("c_currency", contract.getCurrencyName());
|
payload.put("c_currency", contract.getCurrencyName());
|
||||||
payload.put("c_estimatedAMT", "2".equals(contract.getValuationMode()) ? contract.getEstimatedAmount() : "");
|
payload.put("c_estimatedAMT", "2".equals(contract.getValuationMode()) && contract.getEstimatedAmount() != null
|
||||||
|
? String.valueOf(contract.getEstimatedAmount()) : "");
|
||||||
payload.put("c_amountExplain", contract.getAmountExplain());
|
payload.put("c_amountExplain", contract.getAmountExplain());
|
||||||
// 额外金额
|
// 额外金额
|
||||||
payload.put("c_additional", contract.getEwAmountType());
|
payload.put("c_additional", contract.getEwAmountType());
|
||||||
if (contract.getDjAmount() != null) payload.put("c_dAMT", contract.getDjAmount());
|
if (contract.getDjAmount() != null) payload.put("c_dAMT", String.valueOf(contract.getDjAmount()));
|
||||||
if (contract.getYjAmount() != null) payload.put("c_yAMT", contract.getYjAmount());
|
if (contract.getYjAmount() != null) payload.put("c_yAMT", String.valueOf(contract.getYjAmount()));
|
||||||
if (contract.getYfkAmount() != null) payload.put("c_yfkAMT", contract.getYfkAmount());
|
if (contract.getYfkAmount() != null) payload.put("c_yfkAMT", String.valueOf(contract.getYfkAmount()));
|
||||||
if (contract.getBzjAmount() != null) payload.put("c_bzjAMT", contract.getBzjAmount());
|
if (contract.getBzjAmount() != null) payload.put("c_bzjAMT", String.valueOf(contract.getBzjAmount()));
|
||||||
payload.put("c_type", contract.getContractTypeCode());
|
payload.put("c_type", contract.getContractTypeCode());
|
||||||
payload.put("c_termType", contract.getContractPeriodType());
|
payload.put("c_termType", contract.getContractPeriodType());
|
||||||
payload.put("c_termExplain", contract.getPeriodExplain());
|
payload.put("c_termExplain", contract.getPeriodExplain());
|
||||||
payload.put("c_termStart", contract.getEffectiveStart());
|
payload.put("c_termStart", formatLawDate(contract.getEffectiveStart()));
|
||||||
payload.put("c_termEnd", contract.getEffectiveEnd());
|
payload.put("c_termEnd", formatLawDate(contract.getEffectiveEnd()));
|
||||||
payload.put("c_qyztGAT", contract.getIsSgat());
|
payload.put("c_qyztGAT", contract.getIsSgat());
|
||||||
payload.put("c_qyztSW", contract.getContractNature());
|
payload.put("c_qyztSW", contract.getContractNature());
|
||||||
payload.put("c_executor", contract.getExecutorAccount());
|
payload.put("c_executor", contract.getExecutorAccount());
|
||||||
payload.put("c_openBidding", contract.getIsOpenBidding());
|
payload.put("c_openBidding", contract.getIsOpenBidding() == null ? "0" : String.valueOf(contract.getIsOpenBidding()));
|
||||||
// 关联招标号:公开招标选是时必填
|
// 关联招标号:公开招标选是时必填
|
||||||
if (Integer.valueOf(1).equals(contract.getIsOpenBidding()) && contract.getBiddingNo() != null) {
|
if (Integer.valueOf(1).equals(contract.getIsOpenBidding()) && contract.getBiddingNo() != null) {
|
||||||
payload.put("c_biddingNo", contract.getBiddingNo());
|
payload.put("c_biddingNo", contract.getBiddingNo());
|
||||||
@@ -1514,15 +1530,15 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
}
|
}
|
||||||
// c_currentBudget 仅在收支方向为付款(1)时传,与 V3.0 文档一致
|
// c_currentBudget 仅在收支方向为付款(1)时传,与 V3.0 文档一致
|
||||||
if ("1".equals(contract.getPaymentDirection())) {
|
if ("1".equals(contract.getPaymentDirection())) {
|
||||||
payload.put("c_currentBudget", contract.getIsYearBudget());
|
payload.put("c_currentBudget", contract.getIsYearBudget() == null ? "0" : String.valueOf(contract.getIsYearBudget()));
|
||||||
}
|
}
|
||||||
payload.put("c_major", contract.getIsMajorContract());
|
payload.put("c_major", contract.getIsMajorContract() == null ? "0" : String.valueOf(contract.getIsMajorContract()));
|
||||||
payload.put("c_signMethod", contract.getSealType());
|
payload.put("c_signMethod", contract.getSealType());
|
||||||
// payload.put("c_authAttachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_AUTH));
|
// payload.put("c_authAttachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_AUTH));
|
||||||
payload.put("c_creator", contract.getInitiator());
|
payload.put("c_creator", contract.getInitiator());
|
||||||
payload.put("c_creatorPhone", contract.getCreatorPhone());
|
payload.put("c_creatorPhone", contract.getCreatorPhone());
|
||||||
payload.put("c_createDept", contract.getInitiatorDept());
|
payload.put("c_createDept", contract.getOrgId());
|
||||||
payload.put("c_creationTime", contract.getCreateTime());
|
payload.put("c_creationTime", formatLawDate(contract.getCreateTime()));
|
||||||
payload.put("c_signExplain", contract.getContractGistRemark());
|
payload.put("c_signExplain", contract.getContractGistRemark());
|
||||||
// payload.put("c_zw", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_BODY));
|
// payload.put("c_zw", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_BODY));
|
||||||
// payload.put("c_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_OTHER));
|
// payload.put("c_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_OTHER));
|
||||||
@@ -1534,13 +1550,13 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
seal.put("seal_approveSame", contract.getSealApproveSame() != null ? contract.getSealApproveSame() : "1");
|
seal.put("seal_approveSame", contract.getSealApproveSame() != null ? contract.getSealApproveSame() : "1");
|
||||||
seal.put("seal_type", contract.getSealType());
|
seal.put("seal_type", contract.getSealType());
|
||||||
seal.put("seal_quantity", contract.getSealQuantity() == null ? "1" : String.valueOf(contract.getSealQuantity()));
|
seal.put("seal_quantity", contract.getSealQuantity() == null ? "1" : String.valueOf(contract.getSealQuantity()));
|
||||||
seal.put("seal_date", contract.getSealDate());
|
seal.put("seal_date", formatLawDate(contract.getSealDate()));
|
||||||
payload.put("c_seal", seal);
|
payload.put("c_seal", seal);
|
||||||
// 签订信息
|
// 签订信息
|
||||||
Map<String, Object> sign = new LinkedHashMap<>();
|
Map<String, Object> sign = new LinkedHashMap<>();
|
||||||
sign.put("sign_isSign", "1");
|
sign.put("sign_isSign", "1");
|
||||||
sign.put("sign_date", contract.getSignDate());
|
sign.put("sign_date", formatLawDate(contract.getSignDate()));
|
||||||
sign.put("sign_activeDate", contract.getActiveDate());
|
sign.put("sign_activeDate", formatLawDate(contract.getActiveDate()));
|
||||||
// sign.put("sign_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_SIGNED));
|
// sign.put("sign_attachs", buildCollectionFilePayloadList(contract, ContractLaunchConstants.FILE_CATEGORY_SIGNED));
|
||||||
sign.put("sign_executor", contract.getExecutorAccount());
|
sign.put("sign_executor", contract.getExecutorAccount());
|
||||||
payload.put("c_sign", sign);
|
payload.put("c_sign", sign);
|
||||||
@@ -1556,7 +1572,7 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
map.put("lx_id", plan.getId() == null ? null : String.valueOf(plan.getId()));
|
map.put("lx_id", plan.getId() == null ? null : String.valueOf(plan.getId()));
|
||||||
map.put("lx_item", plan.getPlanMatter());
|
map.put("lx_item", plan.getPlanMatter());
|
||||||
map.put("lx_condition", plan.getPlanWhere());
|
map.put("lx_condition", plan.getPlanWhere());
|
||||||
map.put("lx_nodeDate", plan.getPlanTime());
|
map.put("lx_nodeDate", formatLawDate(plan.getPlanTime()));
|
||||||
map.put("lx_remindDays", plan.getPlanDay() == null ? null : String.valueOf(plan.getPlanDay()));
|
map.put("lx_remindDays", plan.getPlanDay() == null ? null : String.valueOf(plan.getPlanDay()));
|
||||||
if (amountRequired && plan.getPlanMoney() != null) {
|
if (amountRequired && plan.getPlanMoney() != null) {
|
||||||
map.put("lx_amount", plan.getPlanMoney());
|
map.put("lx_amount", plan.getPlanMoney());
|
||||||
@@ -1934,6 +1950,13 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化日期为法务接口要求的格式:yyyy-MM-dd HH:mm:ss
|
||||||
|
*/
|
||||||
|
private String formatLawDate(LocalDateTime dateTime) {
|
||||||
|
return dateTime == null ? null : dateTime.format(LAW_DATE_FORMATTER);
|
||||||
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
private final <T> T firstNonNull(T... values) {
|
private final <T> T firstNonNull(T... values) {
|
||||||
if (values == null) {
|
if (values == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user