feat(crm): 添加合同管理功能模块

- 新增合同信息实体类、业务对象和视图对象
- 创建合同产品明细相关的实体、业务对象和视图对象
- 实现合同信息的增删改查和分页查询功能
- 实现合同产品明细的增删改查和分页查询功能
- 添加合同信息和产品明细的导出Excel功能
- 创建合同信息和产品明细的数据库映射配置
- 实现合同服务层业务逻辑和数据校验功能
- 配置合同相关控制器接口和请求映射关系
This commit is contained in:
2026-03-30 13:28:37 +08:00
parent d26bdb38ca
commit ca176de4ef
16 changed files with 1321 additions and 0 deletions

View File

@@ -0,0 +1,127 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 合同信息对象 crm_contract
*
* @author klp
* @date 2026-03-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_contract")
public class CrmContract extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 合同主键ID
*/
@TableId(value = "contract_id")
private Long contractId;
/**
* 合同名称
*/
private String contractName;
/**
* 合同编号
*/
private String contractNo;
/**
* 供方
*/
private String supplier;
/**
* 需方
*/
private String customer;
/**
* 签订时间
*/
private Date signTime;
/**
* 签订地点
*/
private String signLocation;
/**
* 产品内容
*/
private String productContent;
/**
* 合同内容
*/
private String contractContent;
/**
* 供方地址
*/
private String supplierAddress;
/**
* 供方电话
*/
private String supplierPhone;
/**
* 供方开户行
*/
private String supplierBank;
/**
* 供方账号
*/
private String supplierAccount;
/**
* 供方税号
*/
private String supplierTaxNo;
/**
* 需方地址
*/
private String customerAddress;
/**
* 需方电话
*/
private String customerPhone;
/**
* 需方开户行
*/
private String customerBank;
/**
* 需方账号
*/
private String customerAccount;
/**
* 需方税号
*/
private String customerTaxNo;
/**
* 技术附件
*/
private String techAnnex;
/**
* 商务附件
*/
private String businessAnnex;
/**
* 排产函
*/
private String productionSchedule;
/**
* 合同状态 0=草稿 1=生效 2=作废 3=已完成
*/
private Long status;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,74 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 合同产品明细对象 crm_contract_product
*
* @author klp
* @date 2026-03-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_contract_product")
public class CrmContractProduct extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 合同产品主键ID
*/
@TableId(value = "contract_product_id")
private Long contractProductId;
/**
* 关联合同ID绑定wms_contract表主键
*/
private Long contractId;
/**
* 产品名称
*/
private String productName;
/**
* 规格最小值(mm)
*/
private BigDecimal specMin;
/**
* 规格最大值(mm)
*/
private BigDecimal specMax;
/**
* 材质
*/
private String material;
/**
* 数量(吨)
*/
private BigDecimal quantity;
/**
* 含税单价(元/吨)
*/
private BigDecimal taxInclusiveUnitPrice;
/**
* 不含税单价(元/吨)
*/
private BigDecimal exTaxUnitPrice;
/**
* 含税总额(元)
*/
private BigDecimal taxInclusiveAmount;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,143 @@
package com.klp.crm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 合同信息业务对象 crm_contract
*
* @author klp
* @date 2026-03-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmContractBo extends BaseEntity {
/**
* 合同主键ID
*/
private Long contractId;
/**
* 合同名称
*/
private String contractName;
/**
* 合同编号
*/
private String contractNo;
/**
* 供方
*/
private String supplier;
/**
* 需方
*/
private String customer;
/**
* 签订时间
*/
private Date signTime;
/**
* 签订地点
*/
private String signLocation;
/**
* 产品内容
*/
private String productContent;
/**
* 合同内容
*/
private String contractContent;
/**
* 供方地址
*/
private String supplierAddress;
/**
* 供方电话
*/
private String supplierPhone;
/**
* 供方开户行
*/
private String supplierBank;
/**
* 供方账号
*/
private String supplierAccount;
/**
* 供方税号
*/
private String supplierTaxNo;
/**
* 需方地址
*/
private String customerAddress;
/**
* 需方电话
*/
private String customerPhone;
/**
* 需方开户行
*/
private String customerBank;
/**
* 需方账号
*/
private String customerAccount;
/**
* 需方税号
*/
private String customerTaxNo;
/**
* 技术附件
*/
private String techAnnex;
/**
* 商务附件
*/
private String businessAnnex;
/**
* 排产函
*/
private String productionSchedule;
/**
* 合同状态 0=草稿 1=生效 2=作废 3=已完成
*/
private Long status;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,77 @@
package com.klp.crm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 合同产品明细业务对象 crm_contract_product
*
* @author klp
* @date 2026-03-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmContractProductBo extends BaseEntity {
/**
* 合同产品主键ID
*/
private Long contractProductId;
/**
* 关联合同ID绑定wms_contract表主键
*/
private Long contractId;
/**
* 产品名称
*/
private String productName;
/**
* 规格最小值(mm)
*/
private BigDecimal specMin;
/**
* 规格最大值(mm)
*/
private BigDecimal specMax;
/**
* 材质
*/
private String material;
/**
* 数量(吨)
*/
private BigDecimal quantity;
/**
* 含税单价(元/吨)
*/
private BigDecimal taxInclusiveUnitPrice;
/**
* 不含税单价(元/吨)
*/
private BigDecimal exTaxUnitPrice;
/**
* 含税总额(元)
*/
private BigDecimal taxInclusiveAmount;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,91 @@
package com.klp.crm.domain.vo;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 合同产品明细视图对象 crm_contract_product
*
* @author klp
* @date 2026-03-30
*/
@Data
@ExcelIgnoreUnannotated
public class CrmContractProductVo {
private static final long serialVersionUID = 1L;
/**
* 合同产品主键ID
*/
@ExcelProperty(value = "合同产品主键ID")
private Long contractProductId;
/**
* 关联合同ID绑定wms_contract表主键
*/
@ExcelProperty(value = "关联合同ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "绑=定wms_contract表主键")
private Long contractId;
/**
* 产品名称
*/
@ExcelProperty(value = "产品名称")
private String productName;
/**
* 规格最小值(mm)
*/
@ExcelProperty(value = "规格最小值(mm)")
private BigDecimal specMin;
/**
* 规格最大值(mm)
*/
@ExcelProperty(value = "规格最大值(mm)")
private BigDecimal specMax;
/**
* 材质
*/
@ExcelProperty(value = "材质")
private String material;
/**
* 数量(吨)
*/
@ExcelProperty(value = "数量(吨)")
private BigDecimal quantity;
/**
* 含税单价(元/吨)
*/
@ExcelProperty(value = "含税单价(元/吨)")
private BigDecimal taxInclusiveUnitPrice;
/**
* 不含税单价(元/吨)
*/
@ExcelProperty(value = "不含税单价(元/吨)")
private BigDecimal exTaxUnitPrice;
/**
* 含税总额(元)
*/
@ExcelProperty(value = "含税总额(元)")
private BigDecimal taxInclusiveAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,169 @@
package com.klp.crm.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 合同信息视图对象 crm_contract
*
* @author klp
* @date 2026-03-30
*/
@Data
@ExcelIgnoreUnannotated
public class CrmContractVo {
private static final long serialVersionUID = 1L;
/**
* 合同主键ID
*/
@ExcelProperty(value = "合同主键ID")
private Long contractId;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private String contractNo;
/**
* 供方
*/
@ExcelProperty(value = "供方")
private String supplier;
/**
* 需方
*/
@ExcelProperty(value = "需方")
private String customer;
/**
* 签订时间
*/
@ExcelProperty(value = "签订时间")
private Date signTime;
/**
* 签订地点
*/
@ExcelProperty(value = "签订地点")
private String signLocation;
/**
* 产品内容
*/
@ExcelProperty(value = "产品内容")
private String productContent;
/**
* 合同内容
*/
@ExcelProperty(value = "合同内容")
private String contractContent;
/**
* 供方地址
*/
@ExcelProperty(value = "供方地址")
private String supplierAddress;
/**
* 供方电话
*/
@ExcelProperty(value = "供方电话")
private String supplierPhone;
/**
* 供方开户行
*/
@ExcelProperty(value = "供方开户行")
private String supplierBank;
/**
* 供方账号
*/
@ExcelProperty(value = "供方账号")
private String supplierAccount;
/**
* 供方税号
*/
@ExcelProperty(value = "供方税号")
private String supplierTaxNo;
/**
* 需方地址
*/
@ExcelProperty(value = "需方地址")
private String customerAddress;
/**
* 需方电话
*/
@ExcelProperty(value = "需方电话")
private String customerPhone;
/**
* 需方开户行
*/
@ExcelProperty(value = "需方开户行")
private String customerBank;
/**
* 需方账号
*/
@ExcelProperty(value = "需方账号")
private String customerAccount;
/**
* 需方税号
*/
@ExcelProperty(value = "需方税号")
private String customerTaxNo;
/**
* 技术附件
*/
@ExcelProperty(value = "技术附件")
private String techAnnex;
/**
* 商务附件
*/
@ExcelProperty(value = "商务附件")
private String businessAnnex;
/**
* 排产函
*/
@ExcelProperty(value = "排产函")
private String productionSchedule;
/**
* 合同状态 0=草稿 1=生效 2=作废 3=已完成
*/
@ExcelProperty(value = "合同状态 0=草稿 1=生效 2=作废 3=已完成")
private Long status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}