feat(crm): 初始化客户与订单模块基础代码

- 新增客户信息实体类及对应业务对象、控制器、服务实现
- 新增正式订单主表与明细表相关实体类和业务逻辑
- 新增订单操作追溯表结构定义
- 配置MyBatis映射文件及基础CRUD接口
- 实现客户与订单的分页查询、导出、新增、修改、删除功能
- 添加Excel导入导出支持及相关VO转换配置
This commit is contained in:
2025-12-15 16:11:16 +08:00
parent d809fc489d
commit e67bb0525b
51 changed files with 3409 additions and 1 deletions

View File

@@ -0,0 +1,69 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 客户信息对象 crm_customer
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_customer")
public class CrmCustomer extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 客户ID主键
*/
@TableId(value = "customer_id")
private String customerId;
/**
* 客户统一编码
*/
private String customerCode;
/**
* 公司名称
*/
private String companyName;
/**
* 联系人
*/
private String contactPerson;
/**
* 联系方式(电话/微信等)
*/
private String contactWay;
/**
* 所属行业
*/
private String industry;
/**
* 客户等级VIP/普通)
*/
private String customerLevel;
/**
* 客户地址(需权限查看)
*/
private String address;
/**
* 银行信息多条需权限查看JSON格式存储
*/
private String bankInfo;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,87 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 正式订单主对象 crm_order
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_order")
public class CrmOrder extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 订单ID主键
*/
@TableId(value = "order_id")
private String orderId;
/**
* 订单编号
*/
private String orderCode;
/**
* 订单类型pre-预订单formal-正式订单
*/
private Long orderType;
/**
* 关联客户ID
*/
private String customerId;
/**
* 订单总金额
*/
private BigDecimal orderAmount;
/**
* 销售员
*/
private String salesman;
/**
* 交货日期
*/
private Date deliveryDate;
/**
* 预订单状态
*/
private Long preOrderStatus;
/**
* 审核人
*/
private String auditUser;
/**
* 审核时间
*/
private Date auditTime;
/**
* 订单状态
*/
private Long orderStatus;
/**
* 财务状态
*/
private Long financeStatus;
/**
* 未结款数额
*/
private BigDecimal unpaidAmount;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,61 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 正式订单明细对象 crm_order_item
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_order_item")
public class CrmOrderItem extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 正式订单明细ID主键
*/
@TableId(value = "item_id")
private String itemId;
/**
* 关联正式订单ID外键
*/
private String orderId;
/**
* 产品类型
*/
private String productType;
/**
* 规格要求
*/
private String specRequire;
/**
* 产品数量
*/
private Long productNum;
/**
* 特殊要求
*/
private String specialRequire;
/**
* 明细金额(单商品金额)
*/
private BigDecimal itemAmount;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,66 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 订单操作追溯对象 crm_order_operation_trace
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_order_operation_trace")
public class CrmOrderOperationTrace extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 追溯ID主键
*/
@TableId(value = "trace_id")
private String traceId;
/**
* 关联订单ID外键
*/
private String orderId;
/**
* 操作类型(如:创建/修改/审核/取消/发货等)
*/
private String operationType;
/**
* 操作前状态
*/
private String oldStatus;
/**
* 操作后状态
*/
private String newStatus;
/**
* 操作内容(如:修改了交货日期)
*/
private String operationContent;
/**
* 操作人
*/
private String operator;
/**
* 操作时间
*/
private Date operationTime;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,91 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 销售合同对象 crm_sales_contract
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_sales_contract")
public class CrmSalesContract extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 合同ID主键
*/
@TableId(value = "contract_id")
private String contractId;
/**
* 合同编号
*/
private String contractCode;
/**
* 合同类型
*/
private Long contractType;
/**
* 关联客户ID外键
*/
private String customerId;
/**
* 合同总金额
*/
private BigDecimal totalAmount;
/**
* 交货日期
*/
private Date deliveryDate;
/**
* 合同状态
*/
private Long contractStatus;
/**
* 录入人
*/
private String createUser;
/**
* 评审人
*/
private String reviewUser;
/**
* 评审时间
*/
private Date reviewTime;
/**
* 审核人
*/
private String auditUser;
/**
* 审核时间
*/
private Date auditTime;
/**
* 下发人
*/
private String issueUser;
/**
* 下发时间
*/
private Date issueTime;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,78 @@
package com.klp.crm.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 销售异议管理对象 crm_sales_objection
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("crm_sales_objection")
public class CrmSalesObjection extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 异议ID主键
*/
@TableId(value = "objection_id")
private String objectionId;
/**
* 异议编号
*/
private String objectionCode;
/**
* 关联订单ID外键
*/
private String orderId;
/**
* 关联客户ID外键
*/
private String customerId;
/**
* 异议类型(如:质量异议)
*/
private String objectionType;
/**
* 异议内容
*/
private String objectionContent;
/**
* 异议状态
*/
private Long objectionStatus;
/**
* 处理内容
*/
private String handleContent;
/**
* 处理人
*/
private String handleUser;
/**
* 处理时间
*/
private Date handleTime;
/**
* 结案时间
*/
private Date closeTime;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,71 @@
package com.klp.crm.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 客户信息业务对象 crm_customer
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmCustomerBo extends BaseEntity {
/**
* 客户ID主键
*/
private String customerId;
/**
* 客户统一编码
*/
private String customerCode;
/**
* 公司名称
*/
private String companyName;
/**
* 联系人
*/
private String contactPerson;
/**
* 联系方式(电话/微信等)
*/
private String contactWay;
/**
* 所属行业
*/
private String industry;
/**
* 客户等级VIP/普通)
*/
private String customerLevel;
/**
* 客户地址(需权限查看)
*/
private String address;
/**
* 银行信息多条需权限查看JSON格式存储
*/
private String bankInfo;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,94 @@
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;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 正式订单主业务对象 crm_order
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmOrderBo extends BaseEntity {
/**
* 订单ID主键
*/
private String orderId;
/**
* 订单编号
*/
private String orderCode;
/**
* 订单类型pre-预订单formal-正式订单
*/
private Long orderType;
/**
* 关联客户ID
*/
private String customerId;
/**
* 订单总金额
*/
private BigDecimal orderAmount;
/**
* 销售员
*/
private String salesman;
/**
* 交货日期
*/
private Date deliveryDate;
/**
* 预订单状态
*/
private Long preOrderStatus;
/**
* 审核人
*/
private String auditUser;
/**
* 审核时间
*/
private Date auditTime;
/**
* 订单状态
*/
private Long orderStatus;
/**
* 财务状态
*/
private Long financeStatus;
/**
* 未结款数额
*/
private BigDecimal unpaidAmount;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,62 @@
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_order_item
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmOrderItemBo extends BaseEntity {
/**
* 正式订单明细ID主键
*/
private String itemId;
/**
* 关联正式订单ID外键
*/
private String orderId;
/**
* 产品类型
*/
private String productType;
/**
* 规格要求
*/
private String specRequire;
/**
* 产品数量
*/
private Long productNum;
/**
* 特殊要求
*/
private String specialRequire;
/**
* 明细金额(单商品金额)
*/
private BigDecimal itemAmount;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,68 @@
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_order_operation_trace
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmOrderOperationTraceBo extends BaseEntity {
/**
* 追溯ID主键
*/
private String traceId;
/**
* 关联订单ID外键
*/
private String orderId;
/**
* 操作类型(如:创建/修改/审核/取消/发货等)
*/
private String operationType;
/**
* 操作前状态
*/
private String oldStatus;
/**
* 操作后状态
*/
private String newStatus;
/**
* 操作内容(如:修改了交货日期)
*/
private String operationContent;
/**
* 操作人
*/
private String operator;
/**
* 操作时间
*/
private Date operationTime;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,99 @@
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;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 销售合同业务对象 crm_sales_contract
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmSalesContractBo extends BaseEntity {
/**
* 合同ID主键
*/
private String contractId;
/**
* 合同编号
*/
private String contractCode;
/**
* 合同类型
*/
private Long contractType;
/**
* 关联客户ID外键
*/
private String customerId;
/**
* 合同总金额
*/
private BigDecimal totalAmount;
/**
* 交货日期
*/
private Date deliveryDate;
/**
* 合同状态
*/
private Long contractStatus;
/**
* 录入人
*/
private String createUser;
/**
* 评审人
*/
private String reviewUser;
/**
* 评审时间
*/
private Date reviewTime;
/**
* 审核人
*/
private String auditUser;
/**
* 审核时间
*/
private Date auditTime;
/**
* 下发人
*/
private String issueUser;
/**
* 下发时间
*/
private Date issueTime;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,83 @@
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_sales_objection
*
* @author klp
* @date 2025-12-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CrmSalesObjectionBo extends BaseEntity {
/**
* 异议ID主键
*/
private String objectionId;
/**
* 异议编号
*/
private String objectionCode;
/**
* 关联订单ID外键
*/
private String orderId;
/**
* 关联客户ID外键
*/
private String customerId;
/**
* 异议类型(如:质量异议)
*/
private String objectionType;
/**
* 异议内容
*/
private String objectionContent;
/**
* 异议状态
*/
private Long objectionStatus;
/**
* 处理内容
*/
private String handleContent;
/**
* 处理人
*/
private String handleUser;
/**
* 处理时间
*/
private Date handleTime;
/**
* 结案时间
*/
private Date closeTime;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,88 @@
package com.klp.crm.domain.vo;
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_customer
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmCustomerVo {
private static final long serialVersionUID = 1L;
/**
* 客户ID主键
*/
@ExcelProperty(value = "客户ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String customerId;
/**
* 客户统一编码
*/
@ExcelProperty(value = "客户统一编码")
private String customerCode;
/**
* 公司名称
*/
@ExcelProperty(value = "公司名称")
private String companyName;
/**
* 联系人
*/
@ExcelProperty(value = "联系人")
private String contactPerson;
/**
* 联系方式(电话/微信等)
*/
@ExcelProperty(value = "联系方式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "电=话/微信等")
private String contactWay;
/**
* 所属行业
*/
@ExcelProperty(value = "所属行业")
private String industry;
/**
* 客户等级VIP/普通)
*/
@ExcelProperty(value = "客户等级", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=VIP/普通")
private String customerLevel;
/**
* 客户地址(需权限查看)
*/
@ExcelProperty(value = "客户地址", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "需=权限查看")
private String address;
/**
* 银行信息多条需权限查看JSON格式存储
*/
@ExcelProperty(value = "银行信息", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=条需权限查看JSON格式存储")
private String bankInfo;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,75 @@
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_order_item
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmOrderItemVo {
private static final long serialVersionUID = 1L;
/**
* 正式订单明细ID主键
*/
@ExcelProperty(value = "正式订单明细ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String itemId;
/**
* 关联正式订单ID外键
*/
@ExcelProperty(value = "关联正式订单ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键")
private String orderId;
/**
* 产品类型
*/
@ExcelProperty(value = "产品类型")
private String productType;
/**
* 规格要求
*/
@ExcelProperty(value = "规格要求")
private String specRequire;
/**
* 产品数量
*/
@ExcelProperty(value = "产品数量")
private Long productNum;
/**
* 特殊要求
*/
@ExcelProperty(value = "特殊要求")
private String specialRequire;
/**
* 明细金额(单商品金额)
*/
@ExcelProperty(value = "明细金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "单=商品金额")
private BigDecimal itemAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,83 @@
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_order_operation_trace
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmOrderOperationTraceVo {
private static final long serialVersionUID = 1L;
/**
* 追溯ID主键
*/
@ExcelProperty(value = "追溯ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String traceId;
/**
* 关联订单ID外键
*/
@ExcelProperty(value = "关联订单ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键")
private String orderId;
/**
* 操作类型(如:创建/修改/审核/取消/发货等)
*/
@ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=:创建/修改/审核/取消/发货等")
private String operationType;
/**
* 操作前状态
*/
@ExcelProperty(value = "操作前状态")
private String oldStatus;
/**
* 操作后状态
*/
@ExcelProperty(value = "操作后状态")
private String newStatus;
/**
* 操作内容(如:修改了交货日期)
*/
@ExcelProperty(value = "操作内容", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=:修改了交货日期")
private String operationContent;
/**
* 操作人
*/
@ExcelProperty(value = "操作人")
private String operator;
/**
* 操作时间
*/
@ExcelProperty(value = "操作时间")
private Date operationTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,111 @@
package com.klp.crm.domain.vo;
import java.math.BigDecimal;
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_order
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmOrderVo {
private static final long serialVersionUID = 1L;
/**
* 订单ID主键
*/
@ExcelProperty(value = "订单ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String orderId;
/**
* 订单编号
*/
@ExcelProperty(value = "订单编号")
private String orderCode;
/**
* 订单类型pre-预订单formal-正式订单
*/
@ExcelProperty(value = "订单类型pre-预订单formal-正式订单")
private Long orderType;
/**
* 关联客户ID
*/
@ExcelProperty(value = "关联客户ID")
private String customerId;
/**
* 订单总金额
*/
@ExcelProperty(value = "订单总金额")
private BigDecimal orderAmount;
/**
* 销售员
*/
@ExcelProperty(value = "销售员")
private String salesman;
/**
* 交货日期
*/
@ExcelProperty(value = "交货日期")
private Date deliveryDate;
/**
* 预订单状态
*/
@ExcelProperty(value = "预订单状态")
private Long preOrderStatus;
/**
* 审核人
*/
@ExcelProperty(value = "审核人")
private String auditUser;
/**
* 审核时间
*/
@ExcelProperty(value = "审核时间")
private Date auditTime;
/**
* 订单状态
*/
@ExcelProperty(value = "订单状态")
private Long orderStatus;
/**
* 财务状态
*/
@ExcelProperty(value = "财务状态")
private Long financeStatus;
/**
* 未结款数额
*/
@ExcelProperty(value = "未结款数额")
private BigDecimal unpaidAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,118 @@
package com.klp.crm.domain.vo;
import java.math.BigDecimal;
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_sales_contract
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmSalesContractVo {
private static final long serialVersionUID = 1L;
/**
* 合同ID主键
*/
@ExcelProperty(value = "合同ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String contractId;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private String contractCode;
/**
* 合同类型
*/
@ExcelProperty(value = "合同类型")
private Long contractType;
/**
* 关联客户ID外键
*/
@ExcelProperty(value = "关联客户ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键")
private String customerId;
/**
* 合同总金额
*/
@ExcelProperty(value = "合同总金额")
private BigDecimal totalAmount;
/**
* 交货日期
*/
@ExcelProperty(value = "交货日期")
private Date deliveryDate;
/**
* 合同状态
*/
@ExcelProperty(value = "合同状态")
private Long contractStatus;
/**
* 录入人
*/
@ExcelProperty(value = "录入人")
private String createUser;
/**
* 评审人
*/
@ExcelProperty(value = "评审人")
private String reviewUser;
/**
* 评审时间
*/
@ExcelProperty(value = "评审时间")
private Date reviewTime;
/**
* 审核人
*/
@ExcelProperty(value = "审核人")
private String auditUser;
/**
* 审核时间
*/
@ExcelProperty(value = "审核时间")
private Date auditTime;
/**
* 下发人
*/
@ExcelProperty(value = "下发人")
private String issueUser;
/**
* 下发时间
*/
@ExcelProperty(value = "下发时间")
private Date issueTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,101 @@
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_sales_objection
*
* @author klp
* @date 2025-12-15
*/
@Data
@ExcelIgnoreUnannotated
public class CrmSalesObjectionVo {
private static final long serialVersionUID = 1L;
/**
* 异议ID主键
*/
@ExcelProperty(value = "异议ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String objectionId;
/**
* 异议编号
*/
@ExcelProperty(value = "异议编号")
private String objectionCode;
/**
* 关联订单ID外键
*/
@ExcelProperty(value = "关联订单ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键")
private String orderId;
/**
* 关联客户ID外键
*/
@ExcelProperty(value = "关联客户ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键")
private String customerId;
/**
* 异议类型(如:质量异议)
*/
@ExcelProperty(value = "异议类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=:质量异议")
private String objectionType;
/**
* 异议内容
*/
@ExcelProperty(value = "异议内容")
private String objectionContent;
/**
* 异议状态
*/
@ExcelProperty(value = "异议状态")
private Long objectionStatus;
/**
* 处理内容
*/
@ExcelProperty(value = "处理内容")
private String handleContent;
/**
* 处理人
*/
@ExcelProperty(value = "处理人")
private String handleUser;
/**
* 处理时间
*/
@ExcelProperty(value = "处理时间")
private Date handleTime;
/**
* 结案时间
*/
@ExcelProperty(value = "结案时间")
private Date closeTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}