合同管理相关

This commit is contained in:
guojunyun
2025-09-21 21:01:15 +08:00
parent aa0135707d
commit f014ca7cf3
18 changed files with 1352 additions and 3 deletions

View File

@@ -11,7 +11,8 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
*/ */
public interface ErrorCodeConstants { public interface ErrorCodeConstants {
// ========== 示例模块 1-001-000-000 ========== // ========== 合同模块 1-027-000-000 ==========
ErrorCode EXAMPLE_NOT_EXISTS = new ErrorCode(1_001_000_001, "示例不存在"); ErrorCode CONTRACT_NUM_TRANSFINITE = new ErrorCode(1_027_000_000, "系统合同编号超限最大合同编号999999");
ErrorCode CONTRACT_NAME_EXISTS = new ErrorCode(1_027_000_001, "合同名已存在");
ErrorCode CONTRACT_PAPER_NUMBER_EXISTS = new ErrorCode(1_027_000_002, "合同编号已存在");
} }

View File

@@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.contractorder.enums.contract;
/**
* 合同字典类型常量
*
* @author ZT
*/
public class ContractDictTypeConstants {
// 合同状态
public static String BSE_CTRT_STS = "BSE_CTRT_STS";
// 合同类型(字典名:业务类型)
public static String BSN_TP = "BSN_TP";
}

View File

@@ -0,0 +1,67 @@
package cn.iocoder.yudao.module.contractorder.enums.contract;
/**
* 合同状态枚举
*/
public enum ContractStatusEnum {
/**
* 合同状态-草稿
*/
DRAFT("草稿","DRAFT","可以删除"),
/**
* 合同状态-正在审核
*/
UNDER_REVIEW("正在审核","UNDER_REVIEW","不允许任何操作"),
/**
* 合同状态-执行中
*/
IN_PROGRESS("执行中","IN_PROGRESS","可以终止、归档"),
/**
* 合同状态-已驳回
*/
REJECTED("已驳回","REJECTED","可以删除"),
/**
* 合同状态-已终止
*/
TERMINATED("已终止","TERMINATED","只允许归档"),
/**
* 合同状态-已归档
*/
ARCHIVED("已归档","ARCHIVED","不允许任何操作"),
/**
* 合同状态-已删除
*/
DELETED("已删除","DELETED","不允许任何操作");
ContractStatusEnum(String label, String code, String remark) {
this.label = label;
this.code = code;
this.remark = remark;
}
/**
* 字典标签
*/
private final String label;
/**
* 字典编码
*/
private final String code;
/**
* 备注
*/
private final String remark;
public String getLabel() {
return label;
}
public String getCode() {
return code;
}
public String getRemark() {
return remark;
}
}

View File

@@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.contractorder.enums.contract;
/**
* 合同类型枚举
*/
public enum ContractTypeEnum {
/**
* 采购
*/
PRCH("采购","PRCH",null),
/**
* 销售
*/
SALE("销售","SALE",null),
/**
* 委托加工
*/
ENTT("委托加工","ENTT",null),
/**
* 来料加工
*/
MKE("来料加工","MKE",null);
ContractTypeEnum(String label, String code, String remark) {
this.label = label;
this.code = code;
this.remark = remark;
}
/**
* 字典标签
*/
private final String label;
/**
* 字典编码
*/
private final String code;
/**
* 备注
*/
private final String remark;
public String getLabel() {
return label;
}
public String getCode() {
return code;
}
public String getRemark() {
return remark;
}
}

View File

@@ -0,0 +1,7 @@
package cn.iocoder.yudao.module.contractorder.enums.contract;
public class DateConstants {
// 日期格式
public static final String DATE_FORMAT_YEAR_MONTH_DAY_8_BIT = "yyyyMMdd";
}

View File

@@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract;
import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractPageReqVO;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractRespVO;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractSaveReqVO;
import cn.iocoder.yudao.module.contractorder.dal.dataobject.contract.ContractMainDO;
import cn.iocoder.yudao.module.contractorder.service.contract.ContractService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Slf4j
@Tag(name = "管理后台 - 合同管理")
@RestController
@RequestMapping("/base/contract-order/contract")
@Validated
public class ContractController implements BusinessControllerMarker {
@Resource
private ContractService contractService;
@GetMapping("/page")
@Operation(summary = "获得合同分页列表")
@PreAuthorize("@ss.hasPermission('base:contract-main:query')")
public CommonResult<PageResult<ContractRespVO>> getContractPage(@Valid ContractPageReqVO pageReqVO) {
PageResult<ContractMainDO> pageResult = contractService.getContractPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ContractRespVO.class));
}
@PostMapping("/create")
@Operation(summary = "新增合同")
@PreAuthorize("@ss.hasPermission('system:contract-main:create')")
public CommonResult<Long> createContract(@Valid @RequestBody ContractSaveReqVO reqVO) {
Long id = contractService.createContract(reqVO);
return success(id);
}
}

View File

@@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Schema(description = "管理后台 - 合同明细新增/修改 Request VO")
@Data
public class ContractDetailSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32609")
private Long id;
@Schema(description = "合同主信息主键", example = "13595")
private Long contractMainId;
@Schema(description = "物料名称", example = "张三")
private String materialName;
@Schema(description = "物料编码")
private String materialNumber;
@Schema(description = "数量")
private BigDecimal quantity;
@Schema(description = "计量单位")
private String unit;
@Schema(description = "含税单价", example = "28579")
private BigDecimal inTaxUnitPrice;
@Schema(description = "金属元素缩写")
private String elementAbbreviation;
@Schema(description = "金属元素名称", example = "赵六")
private String elementName;
@Schema(description = "金属元素编码")
private String elementNumber;
// 交货计划
private List<ContractPlanSaveReqVO> plans;
}

View File

@@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 合同信息分页 Request VO")
@Data
public class ContractPageReqVO extends PageParam {
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿")
private String contractName;
@Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一")
private String contractPaperNumber;
@Schema(description = "甲方公司名称", example = "王五")
private String purchaseCompanyName;
@Schema(description = "乙方公司名称", example = "王五")
private String salesCompanyName;
@Schema(description = "收支性质;与ERP(SZXZ)对应")
private String direction;
@Schema(description = "签署日期;与ERP(HTQDRQ)对应")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] signDate;
@Schema(description = "本币金额;与ERP(HTBWBZJE)对应")
private BigDecimal basicAmount;
}

View File

@@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 交货计划条款新增/修改 Request VO")
@Data
public class ContractPlanSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "27474")
private Long id;
@Schema(description = "合同明细主键", example = "32763")
private Long contractDetailId;
@Schema(description = "交货年份", requiredMode = Schema.RequiredMode.REQUIRED)
private Long contractDeliveryYear;
@Schema(description = "交货月份")
private Long contractPlanDeliveryMonth;
@Schema(description = "计划交货数量", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal contractPlanDeliveryQuantity;
@Schema(description = "交货开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime contractDeliveryStartDate;
@Schema(description = "交货结束日期", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime contractDeliveryEndDate;
}

View File

@@ -0,0 +1,215 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 合同信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ContractRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2090")
@ExcelProperty("主键")
private Long id;
@Schema(description = "模板实例主键", example = "10196")
@ExcelProperty("模板实例主键")
private Long instanceId;
@Schema(description = "系统合同编号;自动生成,校验唯一")
@ExcelProperty("系统合同编号;自动生成,校验唯一")
private String systemContractNumber;
@Schema(description = "状态", example = "1")
@ExcelProperty("状态")
private String status;
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿")
@ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一")
private String contractName;
@Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一")
@ExcelProperty("合同编号;与ERP(HTBH)对应,校验唯一")
private String contractPaperNumber;
@Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应")
@ExcelProperty("是否虚拟合同;与ERP(SFXNHT)对应")
private String contractVirtual;
@Schema(description = "是否先款后货")
@ExcelProperty("是否先款后货")
private String hasPayable;
@Schema(description = "收支性质;与ERP(SZXZ)对应")
@ExcelProperty("收支性质;与ERP(SZXZ)对应")
private String direction;
@Schema(description = "合同类型", example = "1")
@ExcelProperty("合同类型")
private String contractType;
@Schema(description = "签署日期;与ERP(HTQDRQ)对应")
@ExcelProperty("签署日期;与ERP(HTQDRQ)对应")
private LocalDateTime signDate;
@Schema(description = "开始日期;与ERP(HTQSRQ)对应")
@ExcelProperty("开始日期;与ERP(HTQSRQ)对应")
private LocalDateTime startDate;
@Schema(description = "结束日期;与ERP(HTZZRQ)对应")
@ExcelProperty("结束日期;与ERP(HTZZRQ)对应")
private LocalDateTime endDate;
@Schema(description = "签署地")
@ExcelProperty("签署地")
private String signPlace;
@Schema(description = "甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
@ExcelProperty("甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
private String purchaseCompanyNumber;
@Schema(description = "甲方公司名称", example = "王五")
@ExcelProperty("甲方公司名称")
private String purchaseCompanyName;
@Schema(description = "甲方地址")
@ExcelProperty("甲方地址")
private String purchaseAddress;
@Schema(description = "甲方法定代表人")
@ExcelProperty("甲方法定代表人")
private String purchaseLeader;
@Schema(description = "乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
@ExcelProperty("乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
private String salesCompanyNumber;
@Schema(description = "乙方公司名称", example = "王五")
@ExcelProperty("乙方公司名称")
private String salesCompanyName;
@Schema(description = "乙方地址")
@ExcelProperty("乙方地址")
private String salesAddress;
@Schema(description = "乙方企业负责人")
@ExcelProperty("乙方企业负责人")
private String salesPurchaseLeader;
@Schema(description = "币种;与ERP(BZBH)对应")
@ExcelProperty("币种;与ERP(BZBH)对应")
private String currency;
@Schema(description = "原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
@ExcelProperty("原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
private BigDecimal cooAmount;
@Schema(description = "本币金额;与ERP(HTBWBZJE)对应")
@ExcelProperty("本币金额;与ERP(HTBWBZJE)对应")
private BigDecimal basicAmount;
@Schema(description = "是否有履约保证金;为是,则保证金必填。")
@ExcelProperty("是否有履约保证金;为是,则保证金必填。")
private String hasDeposit;
@Schema(description = "原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
@ExcelProperty("原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额")
private BigDecimal cooAmountDeposit;
@Schema(description = "本币履约保证金;与ERP(LYBZJBGQBWB)对应")
@ExcelProperty("本币履约保证金;与ERP(LYBZJBGQBWB)对应")
private BigDecimal basicAmountDeposit;
@Schema(description = "是否有预付款;与ERP(SFYYFK)对应")
@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)对应")
@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 replenishAgreementType;
@Schema(description = "备注;与ERP(BZXX)对应")
@ExcelProperty("备注;与ERP(BZXX)对应")
private String remark;
@Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息")
@ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息")
private String constructionTypeNumber;
@Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "张三")
@ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息")
private String constructionTypeName;
@Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息")
@ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息")
private String zlifnr;
@Schema(description = "类别;与ERP(HTLB)对应,拓展信息")
@ExcelProperty("类别;与ERP(HTLB)对应,拓展信息")
private String category;
@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(LYBZJBGHBWB)对应,拓展信息")
@ExcelProperty("本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息")
private BigDecimal changeBasicAmountDeposit;
@Schema(description = "是否框架合同;与ERP(SFKJHT)对应,拓展信息")
@ExcelProperty("是否框架合同;与ERP(SFKJHT)对应,拓展信息")
private String isFramework;
@Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息")
@ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息")
private String jnjw;
@Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填")
@ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填")
private String architectureServicePlace;
@Schema(description = "达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
@ExcelProperty("达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
private BigDecimal payeeConditionAmount;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "步骤")
@ExcelProperty("步骤")
private Integer step;
}

View File

@@ -0,0 +1,230 @@
package cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
@Schema(description = "管理后台 - 合同信息新增/修改 Request VO")
@Data
public class ContractSaveReqVO {
@Schema(description = "主键")
@ExcelProperty("主键")
private Long id;
@NotNull(message = "步骤不能为空")
@Schema(description = "步骤", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@ExcelProperty("步骤")
private Integer step;
// 合同基本信息
@Schema(description = "甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
@ExcelProperty("甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。")
private String purchaseCompanyNumber;
@Schema(description = "甲方公司名称", example = "王五")
@ExcelProperty("甲方公司名称")
private String purchaseCompanyName;
@Schema(description = "甲方地址")
@ExcelProperty("甲方地址")
private String purchaseAddress;
@Schema(description = "甲方法定代表人")
@ExcelProperty("甲方法定代表人")
private String purchaseLeader;
@Schema(description = "乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
@ExcelProperty("乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。")
private String salesCompanyNumber;
@Schema(description = "乙方公司名称", example = "王五")
@ExcelProperty("乙方公司名称")
private String salesCompanyName;
@Schema(description = "乙方地址")
@ExcelProperty("乙方地址")
private String salesAddress;
@Schema(description = "乙方企业负责人")
@ExcelProperty("乙方企业负责人")
private String salesPurchaseLeader;
@NotBlank(message = "合同名称不能为空")
@Size(max = 90, message = "合同名称长度不能超过90个字符")
@Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿")
@ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一")
private String contractName;
@Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一")
@ExcelProperty("合同编号;与ERP(HTBH)对应,校验唯一")
private String contractPaperNumber;
@NotBlank(message = "合同类型不能为空")
@Schema(description = "合同类型", example = "PRCH")
@ExcelProperty("合同类型")
private String contractType;
@Schema(description = "收支性质;与ERP(SZXZ)对应")
@ExcelProperty("收支性质;与ERP(SZXZ)对应")
private String direction;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@Schema(description = "签署日期;与ERP(HTQDRQ)对应")
@ExcelProperty("签署日期;与ERP(HTQDRQ)对应")
private LocalDateTime signDate;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@Schema(description = "开始日期;与ERP(HTQSRQ)对应")
@ExcelProperty("开始日期;与ERP(HTQSRQ)对应")
private LocalDateTime startDate;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(timezone = TIME_ZONE_DEFAULT, pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@Schema(description = "结束日期;与ERP(HTZZRQ)对应")
@ExcelProperty("结束日期;与ERP(HTZZRQ)对应")
private LocalDateTime endDate;
@Schema(description = "签署地")
@ExcelProperty("签署地")
private String signPlace;
// 金额信息
@Schema(description = "币种;与ERP(BZBH)对应")
@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 = "是否有履约保证金;为是,则保证金必填。")
@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)对应")
@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)对应")
@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 = "是否先款后货")
@ExcelProperty("是否先款后货")
private String hasPayable;
@Schema(description = "备注;与ERP(BZXX)对应")
@ExcelProperty("备注;与ERP(BZXX)对应")
private String remark;
// 物料信息
private List<ContractDetailSaveReqVO> detail;
// 扩展信息
@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)对应,拓展信息")
@ExcelProperty("是否框架合同;与ERP(SFKJHT)对应,拓展信息")
private String isFramework;
@Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息")
@ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息")
private String jnjw;
@Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息")
@ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息")
private String constructionTypeNumber;
@Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "张三")
@ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息")
private String constructionTypeName;
@Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息")
@ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息")
private String zlifnr;
@Schema(description = "类别;与ERP(HTLB)对应,拓展信息")
@ExcelProperty("类别;与ERP(HTLB)对应,拓展信息")
private String category;
// 模板部分查询
@Schema(description = "模板实例主键", example = "10196")
@ExcelProperty("模板实例主键")
private Long instanceId;
// 合同动态表单
// 合同动态条款
// TODO 未确认字段
@Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应")
@ExcelProperty("是否虚拟合同;与ERP(SFXNHT)对应")
private String contractVirtual;
@Schema(description = "补充协议类型;变更协议/增加条款", example = "1")
@ExcelProperty("补充协议类型;变更协议/增加条款")
private String replenishAgreementType;
@Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填")
@ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填")
private String architectureServicePlace;
@Schema(description = "达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
@ExcelProperty("达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填")
private BigDecimal payeeConditionAmount;
}

View File

@@ -0,0 +1,76 @@
package cn.iocoder.yudao.module.contractorder.dal.dataobject.contract;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import java.math.BigDecimal;
/**
* 合同明细 DO
*
* @author 后台管理
*/
@TableName("bse_ctrt_dtl")
@KeySequence("bse_ctrt_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ContractDetailDO extends BusinessBaseDO {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 合同主信息主键
*/
@TableField("CTRT_MAIN_ID")
private Long contractMainId;
/**
* 物料名称
*/
@TableField("MTRL_NAME")
private String materialName;
/**
* 物料编码
*/
@TableField("MTRL_NUM")
private String materialNumber;
/**
* 数量
*/
@TableField("QTY")
private BigDecimal quantity;
/**
* 计量单位
*/
@TableField("UNT")
private String unit;
/**
* 含税单价
*/
@TableField("IN_TAX_UPRC")
private BigDecimal inTaxUnitPrice;
/**
* 金属元素缩写
*/
@TableField("ELEM_ABBR")
private String elementAbbreviation;
/**
* 金属元素名称
*/
@TableField("ELEM_NAME")
private String elementName;
/**
* 金属元素编码
*/
@TableField("ELEM_NUM")
private String elementNumber;
}

View File

@@ -0,0 +1,273 @@
package cn.iocoder.yudao.module.contractorder.dal.dataobject.contract;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 合同主信息 DO
*
* @author 后台管理
*/
@TableName("bse_ctrt_main")
@KeySequence("bse_ctrt_main_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ContractMainDO extends BusinessBaseDO {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 模板实例主键
*/
@TableField("INSC_ID")
private Long instanceId;
/**
* 系统合同编号;自动生成,校验唯一
*/
@TableField("SYS_CTRT_NUM")
private String systemContractNumber;
/**
* 状态
*/
@TableField("STS")
private String status;
/**
* 合同名称;与ERP(HTMC)对应,校验唯一
*/
@TableField("CTRT_NAME")
private String contractName;
/**
* 合同编号;与ERP(HTBH)对应,校验唯一
*/
@TableField("CTRT_PPR_NUM")
private String contractPaperNumber;
/**
* 是否虚拟合同;与ERP(SFXNHT)对应
*/
@TableField("CTRT_VRTL")
private String contractVirtual;
/**
* 是否先款后货
*/
@TableField("HS_PYBL")
private String hasPayable;
/**
* 收支性质;与ERP(SZXZ)对应
*/
@TableField("DRCT")
private String direction;
/**
* 合同类型
*/
@TableField("CTRT_TP")
private String contractType;
/**
* 签署日期;与ERP(HTQDRQ)对应
*/
@TableField("SGN_DT")
private LocalDateTime signDate;
/**
* 开始日期;与ERP(HTQSRQ)对应
*/
@TableField("STRT_DT")
private LocalDateTime startDate;
/**
* 结束日期;与ERP(HTZZRQ)对应
*/
@TableField("END_DT")
private LocalDateTime endDate;
/**
* 签署地
*/
@TableField("SGN_PLCE")
private String signPlace;
/**
* 甲方公司编号;如果是采购合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是销售合同手动选择且与ERP(WLDWBH)对应。
*/
@TableField("PRCH_CPN_NUM")
private String purchaseCompanyNumber;
/**
* 甲方公司名称
*/
@TableField("PRCH_CPN_NAME")
private String purchaseCompanyName;
/**
* 甲方地址
*/
@TableField("PRCH_ADR")
private String purchaseAddress;
/**
* 甲方法定代表人
*/
@TableField("PRCH_LDR")
private String purchaseLeader;
/**
* 乙方公司编号;如果是销售合同查询组织机构自动带出且与ERP(HTQDZTBH)对应如果是采购合同手动选择且与ERP(WLDWBH)对应。
*/
@TableField("SALE_CPN_NUM")
private String salesCompanyNumber;
/**
* 乙方公司名称
*/
@TableField("SALE_CPN_NAME")
private String salesCompanyName;
/**
* 乙方地址
*/
@TableField("SALE_ADR")
private String salesAddress;
/**
* 乙方企业负责人
*/
@TableField("SALE_PRCH_LDR")
private String salesPurchaseLeader;
/**
* 币种;与ERP(BZBH)对应
*/
@TableField("CUR")
private String currency;
/**
* 原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额
*/
@TableField("COO_AMT")
private BigDecimal cooAmount;
/**
* 本币金额;与ERP(HTBWBZJE)对应
*/
@TableField("BSC_AMT")
private BigDecimal basicAmount;
/**
* 是否有履约保证金;为是,则保证金必填。
*/
@TableField("HS_DPST")
private String hasDeposit;
/**
* 原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额
*/
@TableField("COO_AMT_DPST")
private BigDecimal cooAmountDeposit;
/**
* 本币履约保证金;与ERP(LYBZJBGQBWB)对应
*/
@TableField("BSC_AMT_DPST")
private BigDecimal basicAmountDeposit;
/**
* 是否有预付款;与ERP(SFYYFK)对应
*/
@TableField("HS_PPYM")
private String hasPrepayment;
/**
* 预付款比例;与ERP(YFKBL)对应
*/
@TableField("PPYM_RTIO")
private BigDecimal prepaymentRatio;
/**
* 预付款金额;与ERP(YFKJE)对应
*/
@TableField("PPYM_AMT")
private BigDecimal prepaymentAmount;
/**
* 是否有质保金;与ERP(SFHZBJ)对应
*/
@TableField("HS_QLT_AMT")
private String hasQualityAmount;
/**
* 质保金比例;与ERP(ZBJBL)对应
*/
@TableField("QLT_RTIO")
private BigDecimal qualityRatio;
/**
* 质保金金额;与ERP(BZJJE)对应
*/
@TableField("QLT_AMT")
private BigDecimal qualityAmount;
/**
* 补充协议类型;变更协议/增加条款
*/
@TableField("RPL_AGR_TP")
private String replenishAgreementType;
/**
* 备注;与ERP(BZXX)对应
*/
@TableField("RMK")
private String remark;
/**
* 施工类型编号;与ERP(HTLXBH)对应,拓展信息
*/
@TableField("CON_TP_NUM")
private String constructionTypeNumber;
/**
* 施工类型名称;与ERP(HTLXMC)对应,拓展信息
*/
@TableField("CON_TP_NAME")
private String constructionTypeName;
/**
* 代理方;与ERP(ZLIFNR)对应,拓展信息
*/
@TableField("ZLIFNR")
private String zlifnr;
/**
* 类别;与ERP(HTLB)对应,拓展信息
*/
@TableField("CTGR")
private String category;
/**
* 原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息
*/
@TableField("CHG_COO_AMT")
private BigDecimal changeCooAmount;
/**
* 本币金额-变更后;与ERP(BGHHTBWBZJE)对应,拓展信息
*/
@TableField("CHG_BSC_AMT")
private BigDecimal changeBasicAmount;
/**
* 原币履约保证金-变更后;与ERP(LYBZJBGHYB)对应,拓展信息
*/
@TableField("CHG_COO_AMT_DPST")
private BigDecimal changeCooAmountDeposit;
/**
* 本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息
*/
@TableField("CHG_BSC_AMT_DPST")
private BigDecimal changeBasicAmountDeposit;
/**
* 是否框架合同;与ERP(SFKJHT)对应,拓展信息
*/
@TableField("IS_FMWK")
private String isFramework;
/**
* 境内/境外;与ERP(JNJW)对应,拓展信息
*/
@TableField("JNJW")
private String jnjw;
/**
* 建筑服务发生地;与ERP(JZFWFSD)对应拓展信息销售合同且类型为SAP02COSR必填
*/
@TableField("ARCH_SVC_PLCE")
private String architectureServicePlace;
/**
* 达到收款条件金额;与ERP(DDSKJE)对应拓展信息销售合同且类型为SAP02COSR必填
*/
@TableField("PYEE_CND_AMT")
private BigDecimal payeeConditionAmount;
/**
* 步骤
*/
@TableField("STP")
private Integer step;
}

View File

@@ -0,0 +1,62 @@
package cn.iocoder.yudao.module.contractorder.dal.dataobject.contract;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 交货计划条款 DO
*
* @author 后台管理
*/
@TableName("bse_ctrt_pln")
@KeySequence("bse_ctrt_pln_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ContractPlanDO extends BusinessBaseDO {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 合同明细主键
*/
@TableField("CTRT_DTL_ID")
private Long contractDetailId;
/**
* 交货年份
*/
@TableField("CTRT_DLVY_YR")
private Long contractDeliveryYear;
/**
* 交货月份
*/
@TableField("CTRT_PLN_DLVY_MNT")
private Long contractPlanDeliveryMonth;
/**
* 计划交货数量
*/
@TableField("CTRT_PLN_DLVY_QTY")
private BigDecimal contractPlanDeliveryQuantity;
/**
* 交货开始日期
*/
@TableField("CTRT_DLVY_STRT_DT")
private LocalDateTime contractDeliveryStartDate;
/**
* 交货结束日期
*/
@TableField("CTRT_DLVY_END_DT")
private LocalDateTime contractDeliveryEndDate;
}

View File

@@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.contractorder.dal.mysql.contract;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.contractorder.dal.dataobject.contract.ContractDetailDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 合同明细 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ContractDetailMapper extends BaseMapperX<ContractDetailDO> {
}

View File

@@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.contractorder.dal.mysql.contract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractPageReqVO;
import cn.iocoder.yudao.module.contractorder.dal.dataobject.contract.ContractMainDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 合同主信息 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ContractMainMapper extends BaseMapperX<ContractMainDO> {
default PageResult<ContractMainDO> selectContractPage(ContractPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ContractMainDO>()
.likeIfPresent(ContractMainDO::getContractName, reqVO.getContractName())
.eqIfPresent(ContractMainDO::getContractPaperNumber, reqVO.getContractPaperNumber())
.eqIfPresent(ContractMainDO::getDirection, reqVO.getDirection())
.betweenIfPresent(ContractMainDO::getSignDate, reqVO.getSignDate())
.likeIfPresent(ContractMainDO::getPurchaseCompanyName, reqVO.getPurchaseCompanyName())
.eqIfPresent(ContractMainDO::getBasicAmount, reqVO.getBasicAmount())
.orderByDesc(ContractMainDO::getCreateTime));
}
}

View File

@@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.contractorder.service.contract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractPageReqVO;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractSaveReqVO;
import cn.iocoder.yudao.module.contractorder.dal.dataobject.contract.ContractMainDO;
import jakarta.validation.Valid;
/**
* 后台合同编制 Service 接口
*
* @author ZT
*/
public interface ContractService {
/**
* 获得合同分页列表
*
* @param pageReqVO 分页条件
* @return 分页列表
*/
PageResult<ContractMainDO> getContractPage(@Valid ContractPageReqVO pageReqVO);
/**
* 新增合同
*
* @param reqVO 用户信息
* @return 合同ID
*/
Long createContract(@Valid ContractSaveReqVO reqVO);
}

View File

@@ -0,0 +1,113 @@
package cn.iocoder.yudao.module.contractorder.service.contract;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.tenant.core.context.CompanyContextHolder;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractPageReqVO;
import cn.iocoder.yudao.module.contractorder.controller.admin.contract.vo.preparaton.ContractSaveReqVO;
import cn.iocoder.yudao.module.contractorder.dal.dataobject.contract.ContractMainDO;
import cn.iocoder.yudao.module.contractorder.dal.mysql.contract.ContractMainMapper;
import cn.iocoder.yudao.module.contractorder.enums.contract.ContractStatusEnum;
import cn.iocoder.yudao.module.contractorder.enums.contract.DateConstants;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.contractorder.enums.ErrorCodeConstants.*;
/**
* 后台合同编制 Service 实现类
*
* @author ZT
*/
@Slf4j
@Service
public class ContractServiceImpl implements ContractService {
@Resource
private ContractMainMapper contractMainMapper;
@Override
public PageResult<ContractMainDO> getContractPage(ContractPageReqVO pageReqVO) {
return contractMainMapper.selectContractPage(pageReqVO);
}
@Override
public Long createContract(ContractSaveReqVO reqVO) {
// 校验合同名称是否存在
ContractMainDO contract = contractMainMapper.selectOne("CTRT_NAME", reqVO.getContractName());
if (contract != null) {
throw exception(CONTRACT_NAME_EXISTS);
}
if (StringUtils.isNotEmpty(reqVO.getContractPaperNumber())) {
// 校验合同编号是否存在
contract = contractMainMapper.selectOne("CTRT_PPR_NUM", reqVO.getContractPaperNumber());
if (contract != null) {
throw exception(CONTRACT_PAPER_NUMBER_EXISTS);
}
}
// 合同主信息
ContractMainDO contractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class);
// 合同状态保存为草稿
contractMainDO.setStatus(ContractStatusEnum.DRAFT.getCode());
// 生成系统合同编号
contractMainDO.setSystemContractNumber(generateSystemContractNumber(reqVO.getContractType()));
// 保存合同主信息
contractMainMapper.insert(contractMainDO);
System.out.println(contractMainDO);
return contractMainDO.getId();
}
/**
* 生成系统合同编号
*
* 单据号生成规则说明
* 单据名称(拼音)-类型-公司编码-年月日-六位编号
* 如请款单: QKD-ZGQK-3000-20250915-00001
*
* @param contractType 合同类型
*
* @return 系统合同编号
*/
private String generateSystemContractNumber(String contractType) {
// 单据名称(拼音)
String documentName = "XTHT";
// 公司编码
String companyId = CompanyContextHolder.getCompanyId().toString();
// 年月日
String yearMounth8Bit = LocalDate.now()
.format(DateTimeFormatter.ofPattern(DateConstants.DATE_FORMAT_YEAR_MONTH_DAY_8_BIT));
// 查询最大编号
String numPrefix = documentName+"-"+contractType+"-"+companyId+"-"+yearMounth8Bit;
QueryWrapper<ContractMainDO> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("SYS_CTRT_NUM", numPrefix);
queryWrapper.orderByDesc("SYS_CTRT_NUM");
queryWrapper.last("limit 1");
ContractMainDO contract = contractMainMapper.selectOne(queryWrapper);
// 获取最大的6位编号+1作为生成的编号
String num = null;
if (contract == null) {
num = "000001";
} else {
String[] systemContractNumberSplit = contract.getSystemContractNumber().split("-");
int numInt = Integer.parseInt(systemContractNumberSplit[systemContractNumberSplit.length - 1]) + 1;
if (numInt > 999999) {
throw exception(CONTRACT_NUM_TRANSFINITE);
}
num = String.format("%06d", numInt);
}
return numPrefix + "-" + num;
}
}