合同主信息字段添加、合同提交审核校验、合同新增接口修改

This commit is contained in:
guojunyun
2025-09-29 16:19:38 +08:00
parent db23f63cbf
commit a596b6f320
8 changed files with 232 additions and 73 deletions

View File

@@ -1,5 +1,6 @@
package com.zt.plat.module.contractorder.controller.admin.contract;
import cn.hutool.json.JSONObject;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.pojo.PageResult;
@@ -43,9 +44,9 @@ public class ContractController implements BusinessControllerMarker {
@PostMapping("/create")
@Operation(summary = "新增合同")
@PreAuthorize("@ss.hasPermission('system:contract:create')")
public CommonResult<Long> create(@Valid @RequestBody ContractSaveReqVO reqVO) {
public CommonResult<JSONObject> create(@Valid @RequestBody ContractSaveReqVO reqVO) {
Long id = contractService.createContract(reqVO);
return success(id);
return success(new JSONObject().putOnce("id", id));
}
@GetMapping("/get")
@@ -101,7 +102,6 @@ public class ContractController implements BusinessControllerMarker {
public void archive() {
}
// TODO
@GetMapping("/submit/approval")
@Operation(summary = "合同提交审批")
@PreAuthorize("@ss.hasPermission('system:contract:approval')")

View File

@@ -20,6 +20,9 @@ public class ContractPageReqVO extends PageParam {
@Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一")
private String contractPaperNumber;
@Schema(description = "状态", example = "DRAFT")
private String status;
@Schema(description = "甲方公司名称", example = "王五")
private String purchaseCompanyName;

View File

@@ -21,132 +21,144 @@ public class ContractSaveReqVO {
@NotNull(message = "步骤不能为空")
@Schema(description = "步骤", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("步骤")
private Integer step;
@Schema(description = "交货地点")
private String deliveryAddress;
@Schema(description = "交货方式(字典:FRCST_ASN)")
private String deliveryWay;
// 基础信息
@Schema(description = "附件对象存储")
private String fileObject;
@Schema(description = "其它附件对象存储")
private String fileObjectOther;
// 合同基本信息
@Schema(description = "甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。", example = "甲方公司编号")
@ExcelProperty("甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
private String purchaseCompanyNumber;
@Schema(description = "甲方公司名称", example = "甲方公司名称")
@ExcelProperty("甲方公司名称")
private String purchaseCompanyName;
@Schema(description = "甲方地址", example = "甲方地址")
@ExcelProperty("甲方地址")
private String purchaseAddress;
@Schema(description = "甲方法定代表人", example = "甲方法定代表人")
@ExcelProperty("甲方法定代表人")
private String purchaseLeader;
@Schema(description = "甲方联系人", example = "甲方联系人")
private String purchaseHuman;
@Schema(description = "甲方电话", example = "甲方电话")
private String purchaseTel;
@Schema(description = "甲方邮箱", example = "甲方邮箱")
private String purchaseEmail;
@Schema(description = "甲方传真", example = "甲方传真")
private String purchaseFax;
@Schema(description = "甲方联系地址", example = "甲方联系地址")
private String purchaseContactAddress;
@Schema(description = "乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。", example = "乙方公司编号")
@ExcelProperty("乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
private String salesCompanyNumber;
@Schema(description = "乙方公司名称", example = "乙方公司名称")
@ExcelProperty("乙方公司名称")
private String salesCompanyName;
@Schema(description = "乙方地址", example = "乙方地址")
@ExcelProperty("乙方地址")
private String salesAddress;
@Schema(description = "乙方企业负责人", example = "乙方企业负责人")
@ExcelProperty("乙方企业负责人")
private String salesPurchaseLeader;
@Schema(description = "乙方联系人", example = "乙方联系人")
private String salesHuman;
@Schema(description = "乙方电话", example = "乙方电话")
private String salesTel;
@Schema(description = "乙方邮箱", example = "乙方邮箱")
private String salesEmail;
@Schema(description = "乙方传真", example = "乙方传真")
private String salesFax;
@Schema(description = "乙方联系地址", example = "乙方联系地址")
private String salesContactAddress;
@NotBlank(message = "合同名称不能为空")
@Size(max = 90, message = "合同名称长度不能超过90个字符")
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "合同名称")
@ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一")
private String contractName;
@Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一", example = "合同编号")
@ExcelProperty("合同编号;与ERP(HTBH)对应,校验唯一")
private String contractPaperNumber;
@NotBlank(message = "合同类型不能为空")
// @NotBlank(message = "合同类型不能为空")
@Schema(description = "合同类型", example = "PRCH")
@ExcelProperty("合同类型")
private String contractType;
@Schema(description = "收支性质;与ERP(SZXZ)对应", example = "EXPENSES")
@ExcelProperty("收支性质;与ERP(SZXZ)对应")
private String direction;
@Schema(description = "签署日期;与ERP(HTQDRQ)对应")
@ExcelProperty("签署日期;与ERP(HTQDRQ)对应")
private String signDate;
@Schema(description = "开始日期;与ERP(HTQSRQ)对应")
@ExcelProperty("开始日期;与ERP(HTQSRQ)对应")
private String startDate;
@Schema(description = "结束日期;与ERP(HTZZRQ)对应")
@ExcelProperty("结束日期;与ERP(HTZZRQ)对应")
private String endDate;
@Schema(description = "签署地", example = "签署地")
@ExcelProperty("签署地")
private String signPlace;
// 金额信息
@Schema(description = "币种;与ERP(BZBH)对应", example = "CNY")
@ExcelProperty("币种;与ERP(BZBH)对应")
private String currency;
@Schema(description = "本币金额;与ERP(HTBWBZJE)对应")
@ExcelProperty("本币金额;与ERP(HTBWBZJE)对应")
private BigDecimal basicAmount;
@Schema(description = "原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
@ExcelProperty("原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
private BigDecimal cooAmount;
@Schema(description = "是否有履约保证金;为是,则保证金必填。", example = "1")
@ExcelProperty("是否有履约保证金;为是,则保证金必填。")
private String hasDeposit;
@Schema(description = "原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
@ExcelProperty("原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
private BigDecimal cooAmountDeposit;
@Schema(description = "本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息")
@ExcelProperty("本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息")
private BigDecimal changeBasicAmountDeposit;
@Schema(description = "是否有预付款;与ERP(SFYYFK)对应", example = "1")
@ExcelProperty("是否有预付款;与ERP(SFYYFK)对应")
private String hasPrepayment;
@Schema(description = "预付款比例;与ERP(YFKBL)对应")
@ExcelProperty("预付款比例;与ERP(YFKBL)对应")
private BigDecimal prepaymentRatio;
@Schema(description = "预付款金额;与ERP(YFKJE)对应")
@ExcelProperty("预付款金额;与ERP(YFKJE)对应")
private BigDecimal prepaymentAmount;
@Schema(description = "是否有质保金;与ERP(SFHZBJ)对应", example = "1")
@ExcelProperty("是否有质保金;与ERP(SFHZBJ)对应")
private String hasQualityAmount;
@Schema(description = "质保金比例;与ERP(ZBJBL)对应")
@ExcelProperty("质保金比例;与ERP(ZBJBL)对应")
private BigDecimal qualityRatio;
@Schema(description = "质保金金额;与ERP(BZJJE)对应")
@ExcelProperty("质保金金额;与ERP(BZJJE)对应")
private BigDecimal qualityAmount;
@Schema(description = "是否先款后货", example = "1")
@ExcelProperty("是否先款后货")
private String hasPayable;
@Schema(description = "备注;与ERP(BZXX)对应", example = "备注")
@ExcelProperty("备注;与ERP(BZXX)对应")
private String remark;
// 物料信息
@@ -154,72 +166,49 @@ public class ContractSaveReqVO {
// 扩展信息
@Schema(description = "原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息")
@ExcelProperty("原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息")
private BigDecimal changeCooAmount;
@Schema(description = "本币金额-变更后;与ERP(BGHHTBWBZJE)对应,拓展信息")
@ExcelProperty("本币金额-变更后;与ERP(BGHHTBWBZJE)对应,拓展信息")
private BigDecimal changeBasicAmount;
@Schema(description = "原币履约保证金-变更后;与ERP(LYBZJBGHYB)对应,拓展信息")
@ExcelProperty("原币履约保证金-变更后;与ERP(LYBZJBGHYB)对应,拓展信息")
private BigDecimal changeCooAmountDeposit;
@Schema(description = "本币履约保证金;与ERP(LYBZJBGQBWB)对应")
@ExcelProperty("本币履约保证金;与ERP(LYBZJBGQBWB)对应")
private BigDecimal basicAmountDeposit;
@Schema(description = "是否框架合同;与ERP(SFKJHT)对应,拓展信息", example = "1")
@ExcelProperty("是否框架合同;与ERP(SFKJHT)对应,拓展信息")
private String isFramework;
@Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息", example = "DOMESTIC")
@ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息")
private String isDomestic;
@Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息", example = "施工类型编号")
@ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息")
private String constructionTypeNumber;
@Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "施工类型名称")
@ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息")
private String constructionTypeName;
@Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息", example = "代理方")
@ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息")
private String agent;
@Schema(description = "类别;与ERP(HTLB)对应,拓展信息", example = "PROCESSING")
@ExcelProperty("类别;与ERP(HTLB)对应,拓展信息")
private String category;
@Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应", example = "1")
@ExcelProperty("是否虚拟合同;与ERP(SFXNHT)对应")
private String contractVirtual;
@Schema(description = "补充协议类型;变更协议/增加条款", example = "补充协议类型")
@ExcelProperty("补充协议类型;变更协议/增加条款")
private String replenishAgreementType;
@Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填", example = "建筑服务发生地")
@ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填")
private String architectureServicePlace;
@Schema(description = "达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
@ExcelProperty("达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
private BigDecimal payeeConditionAmount;
@Schema(description = "附件对象存储")
@ExcelProperty("附件对象存储")
private String fileObject;
@Schema(description = "其它附件对象存储")
@ExcelProperty("其它附件对象存储")
private String fileObjectOther;
// 模板部分查询
// 模板部分
@Schema(description = "模板实例主键", example = "10196")
@ExcelProperty("模板实例主键")
private Long instanceId;
// 合同动态表单

View File

@@ -16,11 +16,11 @@ import java.util.List;
@ExcelIgnoreUnannotated
public class ContractViewRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2090")
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2476")
@ExcelProperty("主键")
private Long id;
@Schema(description = "模板实例主键", example = "10196")
@Schema(description = "模板实例主键", example = "5352")
@ExcelProperty("模板实例主键")
private Long instanceId;
@@ -28,11 +28,11 @@ public class ContractViewRespVO {
@ExcelProperty("系统合同编号;自动生成,校验唯一")
private String systemContractNumber;
@Schema(description = "状态", example = "1")
@Schema(description = "状态", example = "2")
@ExcelProperty("状态")
private String status;
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿")
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "李四")
@ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一")
private String contractName;
@@ -52,7 +52,7 @@ public class ContractViewRespVO {
@ExcelProperty("收支性质;与ERP(SZXZ)对应")
private String direction;
@Schema(description = "合同类型", example = "1")
@Schema(description = "合同类型", example = "2")
@ExcelProperty("合同类型")
private String contractType;
@@ -76,7 +76,7 @@ public class ContractViewRespVO {
@ExcelProperty("甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
private String purchaseCompanyNumber;
@Schema(description = "甲方公司名称", example = "王五")
@Schema(description = "甲方公司名称", example = "芋艿")
@ExcelProperty("甲方公司名称")
private String purchaseCompanyName;
@@ -92,7 +92,7 @@ public class ContractViewRespVO {
@ExcelProperty("乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
private String salesCompanyNumber;
@Schema(description = "乙方公司名称", example = "王五")
@Schema(description = "乙方公司名称", example = "赵六")
@ExcelProperty("乙方公司名称")
private String salesCompanyName;
@@ -152,7 +152,7 @@ public class ContractViewRespVO {
@ExcelProperty("质保金金额;与ERP(BZJJE)对应")
private BigDecimal qualityAmount;
@Schema(description = "补充协议类型;变更协议/增加条款", example = "1")
@Schema(description = "补充协议类型;变更协议/增加条款", example = "2")
@ExcelProperty("补充协议类型;变更协议/增加条款")
private String replenishAgreementType;
@@ -164,7 +164,7 @@ public class ContractViewRespVO {
@ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息")
private String constructionTypeNumber;
@Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "张三")
@Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "李四")
@ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息")
private String constructionTypeName;
@@ -216,6 +216,82 @@ public class ContractViewRespVO {
@ExcelProperty("步骤")
private Integer step;
@Schema(description = "ERP请求状态", example = "1")
@ExcelProperty("ERP请求状态")
private String erpStatus;
@Schema(description = "ERP请求失败原因")
@ExcelProperty("ERP请求失败原因")
private String cause;
@Schema(description = "流程实例编号", example = "27511")
@ExcelProperty("流程实例编号")
private String processInstanceId;
@Schema(description = "审批意见")
@ExcelProperty("审批意见")
private String reviewOpinion;
@Schema(description = "任务节点主键", example = "26040")
@ExcelProperty("任务节点主键")
private String taskNodeId;
@Schema(description = "模板附件对象存储")
@ExcelProperty("模板附件对象存储")
private String fileObject;
@Schema(description = "其它附件对象存储")
@ExcelProperty("其它附件对象存储")
private String fileObjectOther;
@Schema(description = "交货地点")
@ExcelProperty("交货地点")
private String deliveryAddress;
@Schema(description = "交货方式(字典:FRCST_ASN)")
@ExcelProperty("交货方式(字典:FRCST_ASN)")
private String deliveryWay;
@Schema(description = "甲方联系人")
@ExcelProperty("甲方联系人")
private String purchaseHuman;
@Schema(description = "甲方电话")
@ExcelProperty("甲方电话")
private String purchaseTel;
@Schema(description = "甲方邮箱")
@ExcelProperty("甲方邮箱")
private String purchaseEmail;
@Schema(description = "甲方传真")
@ExcelProperty("甲方传真")
private String purchaseFax;
@Schema(description = "甲方联系地址")
@ExcelProperty("甲方联系地址")
private String purchaseContactAddress;
@Schema(description = "乙方联系人")
@ExcelProperty("乙方联系人")
private String salesHuman;
@Schema(description = "乙方电话")
@ExcelProperty("乙方电话")
private String salesTel;
@Schema(description = "乙方邮箱")
@ExcelProperty("乙方邮箱")
private String salesEmail;
@Schema(description = "乙方传真")
@ExcelProperty("乙方传真")
private String salesFax;
@Schema(description = "乙方联系地址")
@ExcelProperty("乙方联系地址")
private String salesContactAddress;
// 物料信息
private List<ContractViewDetailRespVO> detail;

View File

@@ -304,4 +304,64 @@ public class ContractMainDO extends BusinessBaseDO {
*/
@TableField("FILE_OBJ_OTH")
private String fileObjectOther;
/**
* 交货地点
*/
@TableField("DLVY_ADR")
private String deliveryAddress;
/**
* 交货方式(字典:FRCST_ASN)
*/
@TableField("DLVY_WY")
private String deliveryWay;
/**
* 甲方联系人
*/
@TableField("PRCH_HMN")
private String purchaseHuman;
/**
* 甲方电话
*/
@TableField("PRCH_TEL")
private String purchaseTel;
/**
* 甲方邮箱
*/
@TableField("PRCH_EM")
private String purchaseEmail;
/**
* 甲方传真
*/
@TableField("PRCH_FAX")
private String purchaseFax;
/**
* 甲方联系地址
*/
@TableField("PRCH_CTCT_ADR")
private String purchaseContactAddress;
/**
* 乙方联系人
*/
@TableField("SALE_HMN")
private String salesHuman;
/**
* 乙方电话
*/
@TableField("SALE_TEL")
private String salesTel;
/**
* 乙方邮箱
*/
@TableField("SALE_EM")
private String salesEmail;
/**
* 乙方传真
*/
@TableField("SALE_FAX")
private String salesFax;
/**
* 乙方联系地址
*/
@TableField("SALE_CTCT_ADR")
private String salesContactAddress;
}

View File

@@ -22,6 +22,7 @@ public interface ContractMainMapper extends BaseMapperX<ContractMainDO> {
.betweenIfPresent(ContractMainDO::getSignDate, reqVO.getSignDate())
.likeIfPresent(ContractMainDO::getPurchaseCompanyName, reqVO.getPurchaseCompanyName())
.eqIfPresent(ContractMainDO::getBasicAmount, reqVO.getBasicAmount())
.eqIfPresent(ContractMainDO::getStatus, reqVO.getStatus())
.orderByDesc(ContractMainDO::getCreateTime));
}
}

View File

@@ -543,10 +543,21 @@ public class ContractServiceImpl implements ContractService {
throw exception(CONTRACT_NOT_EXISTS);
}
// 合同内容校验 TODO
// 合同状态校验
if (ContractStatusEnum.UNDER_REVIEW.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.IN_PROGRESS.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.TERMINATED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.ARCHIVED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.DELETED.getCode().equals(contractMainDO.getStatus())) {
throw exception(CONTRACT_STATUS_NOT_SUBMIT_APPROVAL,
ContractStatusEnum.valueOf(contractMainDO.getStatus()).getLabel());
}
// 合同内容校验
verifyContract(get(id));
// 查询用户
// 查询登陆用户
AdminUserRespDTO adminUserRespDTO = adminUserApi
.getUser(SecurityFrameworkUtils.getLoginUserId()).getData();
@@ -571,6 +582,11 @@ public class ContractServiceImpl implements ContractService {
return "提交审批失败";
}
/**
* 校验合同内容
*
* @param contract 合同数据
*/
private void verifyContract(ContractViewRespVO contract) {
/* 合同基本信息 */
@@ -703,9 +719,22 @@ public class ContractServiceImpl implements ContractService {
}
/* 物料信息 */
// 物料名称不能为空
// 数量不能为空
// 计量单位不能为空
if (contract.getDetail() != null && !contract.getDetail().isEmpty()) {
contract.getDetail().forEach(detail -> {
// 物料名称不能为空
if (StringUtils.isBlank(detail.getMaterialName())) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_MTRL_NAME_LABEL);
}
// 数量不能为空
if (detail.getQuantity() != null) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_QTY_LABEL);
}
// 计量单位不能为空
if (StringUtils.isBlank(detail.getUnit())) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_UNT_LABEL);
}
});
}
/* 扩展信息 */
// 是否框架合同不能为空