feat(crm): 添加合同管理功能模块
- 新增合同信息实体类、业务对象和视图对象 - 创建合同产品明细相关的实体、业务对象和视图对象 - 实现合同信息的增删改查和分页查询功能 - 实现合同产品明细的增删改查和分页查询功能 - 添加合同信息和产品明细的导出Excel功能 - 创建合同信息和产品明细的数据库映射配置 - 实现合同服务层业务逻辑和数据校验功能 - 配置合同相关控制器接口和请求映射关系
This commit is contained in:
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.crm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
import com.klp.common.core.controller.BaseController;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.klp.common.core.domain.R;
|
||||||
|
import com.klp.common.core.validate.AddGroup;
|
||||||
|
import com.klp.common.core.validate.EditGroup;
|
||||||
|
import com.klp.common.enums.BusinessType;
|
||||||
|
import com.klp.common.utils.poi.ExcelUtil;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractVo;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractBo;
|
||||||
|
import com.klp.crm.service.ICrmContractService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同信息
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/crm/contract")
|
||||||
|
public class CrmContractController extends BaseController {
|
||||||
|
|
||||||
|
private final ICrmContractService iCrmContractService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<CrmContractVo> list(CrmContractBo bo, PageQuery pageQuery) {
|
||||||
|
return iCrmContractService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出合同信息列表
|
||||||
|
*/
|
||||||
|
@Log(title = "合同信息", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(CrmContractBo bo, HttpServletResponse response) {
|
||||||
|
List<CrmContractVo> list = iCrmContractService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "合同信息", CrmContractVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取合同信息详细信息
|
||||||
|
*
|
||||||
|
* @param contractId 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{contractId}")
|
||||||
|
public R<CrmContractVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long contractId) {
|
||||||
|
return R.ok(iCrmContractService.queryById(contractId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同信息
|
||||||
|
*/
|
||||||
|
@Log(title = "合同信息", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody CrmContractBo bo) {
|
||||||
|
return toAjax(iCrmContractService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同信息
|
||||||
|
*/
|
||||||
|
@Log(title = "合同信息", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CrmContractBo bo) {
|
||||||
|
return toAjax(iCrmContractService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除合同信息
|
||||||
|
*
|
||||||
|
* @param contractIds 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "合同信息", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{contractIds}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] contractIds) {
|
||||||
|
return toAjax(iCrmContractService.deleteWithValidByIds(Arrays.asList(contractIds), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
package com.klp.crm.controller;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import com.klp.common.annotation.RepeatSubmit;
|
||||||
|
import com.klp.common.annotation.Log;
|
||||||
|
import com.klp.common.core.controller.BaseController;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.klp.common.core.domain.R;
|
||||||
|
import com.klp.common.core.validate.AddGroup;
|
||||||
|
import com.klp.common.core.validate.EditGroup;
|
||||||
|
import com.klp.common.enums.BusinessType;
|
||||||
|
import com.klp.common.utils.poi.ExcelUtil;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractProductVo;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractProductBo;
|
||||||
|
import com.klp.crm.service.ICrmContractProductService;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同产品明细
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/crm/contractProduct")
|
||||||
|
public class CrmContractProductController extends BaseController {
|
||||||
|
|
||||||
|
private final ICrmContractProductService iCrmContractProductService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<CrmContractProductVo> list(CrmContractProductBo bo, PageQuery pageQuery) {
|
||||||
|
return iCrmContractProductService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出合同产品明细列表
|
||||||
|
*/
|
||||||
|
@Log(title = "合同产品明细", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(CrmContractProductBo bo, HttpServletResponse response) {
|
||||||
|
List<CrmContractProductVo> list = iCrmContractProductService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "合同产品明细", CrmContractProductVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取合同产品明细详细信息
|
||||||
|
*
|
||||||
|
* @param contractProductId 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{contractProductId}")
|
||||||
|
public R<CrmContractProductVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable Long contractProductId) {
|
||||||
|
return R.ok(iCrmContractProductService.queryById(contractProductId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同产品明细
|
||||||
|
*/
|
||||||
|
@Log(title = "合同产品明细", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody CrmContractProductBo bo) {
|
||||||
|
return toAjax(iCrmContractProductService.insertByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同产品明细
|
||||||
|
*/
|
||||||
|
@Log(title = "合同产品明细", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CrmContractProductBo bo) {
|
||||||
|
return toAjax(iCrmContractProductService.updateByBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除合同产品明细
|
||||||
|
*
|
||||||
|
* @param contractProductIds 主键串
|
||||||
|
*/
|
||||||
|
@Log(title = "合同产品明细", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{contractProductIds}")
|
||||||
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] contractProductIds) {
|
||||||
|
return toAjax(iCrmContractProductService.deleteWithValidByIds(Arrays.asList(contractProductIds), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
127
klp-crm/src/main/java/com/klp/crm/domain/CrmContract.java
Normal file
127
klp-crm/src/main/java/com/klp/crm/domain/CrmContract.java
Normal 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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
143
klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractBo.java
Normal file
143
klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractBo.java
Normal 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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
169
klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractVo.java
Normal file
169
klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractVo.java
Normal 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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.crm.mapper;
|
||||||
|
|
||||||
|
import com.klp.crm.domain.CrmContract;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同信息Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
public interface CrmContractMapper extends BaseMapperPlus<CrmContractMapper, CrmContract, CrmContractVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.klp.crm.mapper;
|
||||||
|
|
||||||
|
import com.klp.crm.domain.CrmContractProduct;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractProductVo;
|
||||||
|
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同产品明细Mapper接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
public interface CrmContractProductMapper extends BaseMapperPlus<CrmContractProductMapper, CrmContractProduct, CrmContractProductVo> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.crm.service;
|
||||||
|
|
||||||
|
import com.klp.crm.domain.CrmContractProduct;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractProductVo;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractProductBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同产品明细Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
public interface ICrmContractProductService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细
|
||||||
|
*/
|
||||||
|
CrmContractProductVo queryById(Long contractProductId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<CrmContractProductVo> queryPageList(CrmContractProductBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细列表
|
||||||
|
*/
|
||||||
|
List<CrmContractProductVo> queryList(CrmContractProductBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同产品明细
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(CrmContractProductBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同产品明细
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(CrmContractProductBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除合同产品明细信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.klp.crm.service;
|
||||||
|
|
||||||
|
import com.klp.crm.domain.CrmContract;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractVo;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractBo;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同信息Service接口
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
public interface ICrmContractService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息
|
||||||
|
*/
|
||||||
|
CrmContractVo queryById(Long contractId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<CrmContractVo> queryPageList(CrmContractBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息列表
|
||||||
|
*/
|
||||||
|
List<CrmContractVo> queryList(CrmContractBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同信息
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(CrmContractBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同信息
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(CrmContractBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并批量删除合同信息信息
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
package com.klp.crm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractProductBo;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractProductVo;
|
||||||
|
import com.klp.crm.domain.CrmContractProduct;
|
||||||
|
import com.klp.crm.mapper.CrmContractProductMapper;
|
||||||
|
import com.klp.crm.service.ICrmContractProductService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同产品明细Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class CrmContractProductServiceImpl implements ICrmContractProductService {
|
||||||
|
|
||||||
|
private final CrmContractProductMapper baseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CrmContractProductVo queryById(Long contractProductId){
|
||||||
|
return baseMapper.selectVoById(contractProductId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<CrmContractProductVo> queryPageList(CrmContractProductBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<CrmContractProduct> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<CrmContractProductVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同产品明细列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CrmContractProductVo> queryList(CrmContractProductBo bo) {
|
||||||
|
LambdaQueryWrapper<CrmContractProduct> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<CrmContractProduct> buildQueryWrapper(CrmContractProductBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<CrmContractProduct> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.eq(bo.getContractId() != null, CrmContractProduct::getContractId, bo.getContractId());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getProductName()), CrmContractProduct::getProductName, bo.getProductName());
|
||||||
|
lqw.eq(bo.getSpecMin() != null, CrmContractProduct::getSpecMin, bo.getSpecMin());
|
||||||
|
lqw.eq(bo.getSpecMax() != null, CrmContractProduct::getSpecMax, bo.getSpecMax());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), CrmContractProduct::getMaterial, bo.getMaterial());
|
||||||
|
lqw.eq(bo.getQuantity() != null, CrmContractProduct::getQuantity, bo.getQuantity());
|
||||||
|
lqw.eq(bo.getTaxInclusiveUnitPrice() != null, CrmContractProduct::getTaxInclusiveUnitPrice, bo.getTaxInclusiveUnitPrice());
|
||||||
|
lqw.eq(bo.getExTaxUnitPrice() != null, CrmContractProduct::getExTaxUnitPrice, bo.getExTaxUnitPrice());
|
||||||
|
lqw.eq(bo.getTaxInclusiveAmount() != null, CrmContractProduct::getTaxInclusiveAmount, bo.getTaxInclusiveAmount());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同产品明细
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(CrmContractProductBo bo) {
|
||||||
|
CrmContractProduct add = BeanUtil.toBean(bo, CrmContractProduct.class);
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setContractProductId(add.getContractProductId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同产品明细
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(CrmContractProductBo bo) {
|
||||||
|
CrmContractProduct update = BeanUtil.toBean(bo, CrmContractProduct.class);
|
||||||
|
validEntityBeforeSave(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeSave(CrmContractProduct entity){
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除合同产品明细
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if(isValid){
|
||||||
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
package com.klp.crm.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.klp.common.core.page.TableDataInfo;
|
||||||
|
import com.klp.common.core.domain.PageQuery;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.klp.common.utils.StringUtils;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import com.klp.crm.domain.bo.CrmContractBo;
|
||||||
|
import com.klp.crm.domain.vo.CrmContractVo;
|
||||||
|
import com.klp.crm.domain.CrmContract;
|
||||||
|
import com.klp.crm.mapper.CrmContractMapper;
|
||||||
|
import com.klp.crm.service.ICrmContractService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合同信息Service业务层处理
|
||||||
|
*
|
||||||
|
* @author klp
|
||||||
|
* @date 2026-03-30
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class CrmContractServiceImpl implements ICrmContractService {
|
||||||
|
|
||||||
|
private final CrmContractMapper baseMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CrmContractVo queryById(Long contractId){
|
||||||
|
return baseMapper.selectVoById(contractId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<CrmContractVo> queryPageList(CrmContractBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<CrmContract> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<CrmContractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询合同信息列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<CrmContractVo> queryList(CrmContractBo bo) {
|
||||||
|
LambdaQueryWrapper<CrmContract> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<CrmContract> buildQueryWrapper(CrmContractBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<CrmContract> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getContractName()), CrmContract::getContractName, bo.getContractName());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getContractNo()), CrmContract::getContractNo, bo.getContractNo());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplier()), CrmContract::getSupplier, bo.getSupplier());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomer()), CrmContract::getCustomer, bo.getCustomer());
|
||||||
|
lqw.eq(bo.getSignTime() != null, CrmContract::getSignTime, bo.getSignTime());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSignLocation()), CrmContract::getSignLocation, bo.getSignLocation());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getProductContent()), CrmContract::getProductContent, bo.getProductContent());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getContractContent()), CrmContract::getContractContent, bo.getContractContent());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierAddress()), CrmContract::getSupplierAddress, bo.getSupplierAddress());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierPhone()), CrmContract::getSupplierPhone, bo.getSupplierPhone());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierBank()), CrmContract::getSupplierBank, bo.getSupplierBank());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierAccount()), CrmContract::getSupplierAccount, bo.getSupplierAccount());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierTaxNo()), CrmContract::getSupplierTaxNo, bo.getSupplierTaxNo());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomerAddress()), CrmContract::getCustomerAddress, bo.getCustomerAddress());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomerPhone()), CrmContract::getCustomerPhone, bo.getCustomerPhone());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomerBank()), CrmContract::getCustomerBank, bo.getCustomerBank());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomerAccount()), CrmContract::getCustomerAccount, bo.getCustomerAccount());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getCustomerTaxNo()), CrmContract::getCustomerTaxNo, bo.getCustomerTaxNo());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getTechAnnex()), CrmContract::getTechAnnex, bo.getTechAnnex());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getBusinessAnnex()), CrmContract::getBusinessAnnex, bo.getBusinessAnnex());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getProductionSchedule()), CrmContract::getProductionSchedule, bo.getProductionSchedule());
|
||||||
|
lqw.eq(bo.getStatus() != null, CrmContract::getStatus, bo.getStatus());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增合同信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(CrmContractBo bo) {
|
||||||
|
CrmContract add = BeanUtil.toBean(bo, CrmContract.class);
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setContractId(add.getContractId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改合同信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(CrmContractBo bo) {
|
||||||
|
CrmContract update = BeanUtil.toBean(bo, CrmContract.class);
|
||||||
|
validEntityBeforeSave(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeSave(CrmContract entity){
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除合同信息
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if(isValid){
|
||||||
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
klp-crm/src/main/resources/mapper/CrmContractMapper.xml
Normal file
40
klp-crm/src/main/resources/mapper/CrmContractMapper.xml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.klp.crm.mapper.CrmContractMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.crm.domain.CrmContract" id="CrmContractResult">
|
||||||
|
<result property="contractId" column="contract_id"/>
|
||||||
|
<result property="contractName" column="contract_name"/>
|
||||||
|
<result property="contractNo" column="contract_no"/>
|
||||||
|
<result property="supplier" column="supplier"/>
|
||||||
|
<result property="customer" column="customer"/>
|
||||||
|
<result property="signTime" column="sign_time"/>
|
||||||
|
<result property="signLocation" column="sign_location"/>
|
||||||
|
<result property="productContent" column="product_content"/>
|
||||||
|
<result property="contractContent" column="contract_content"/>
|
||||||
|
<result property="supplierAddress" column="supplier_address"/>
|
||||||
|
<result property="supplierPhone" column="supplier_phone"/>
|
||||||
|
<result property="supplierBank" column="supplier_bank"/>
|
||||||
|
<result property="supplierAccount" column="supplier_account"/>
|
||||||
|
<result property="supplierTaxNo" column="supplier_tax_no"/>
|
||||||
|
<result property="customerAddress" column="customer_address"/>
|
||||||
|
<result property="customerPhone" column="customer_phone"/>
|
||||||
|
<result property="customerBank" column="customer_bank"/>
|
||||||
|
<result property="customerAccount" column="customer_account"/>
|
||||||
|
<result property="customerTaxNo" column="customer_tax_no"/>
|
||||||
|
<result property="techAnnex" column="tech_annex"/>
|
||||||
|
<result property="businessAnnex" column="business_annex"/>
|
||||||
|
<result property="productionSchedule" column="production_schedule"/>
|
||||||
|
<result property="status" column="status"/>
|
||||||
|
<result property="remark" column="remark"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.klp.crm.mapper.CrmContractProductMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.klp.crm.domain.CrmContractProduct" id="CrmContractProductResult">
|
||||||
|
<result property="contractProductId" column="contract_product_id"/>
|
||||||
|
<result property="contractId" column="contract_id"/>
|
||||||
|
<result property="productName" column="product_name"/>
|
||||||
|
<result property="specMin" column="spec_min"/>
|
||||||
|
<result property="specMax" column="spec_max"/>
|
||||||
|
<result property="material" column="material"/>
|
||||||
|
<result property="quantity" column="quantity"/>
|
||||||
|
<result property="taxInclusiveUnitPrice" column="tax_inclusive_unit_price"/>
|
||||||
|
<result property="exTaxUnitPrice" column="ex_tax_unit_price"/>
|
||||||
|
<result property="taxInclusiveAmount" column="tax_inclusive_amount"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="remark" column="remark"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Reference in New Issue
Block a user