diff --git a/klp-crm/src/main/java/com/klp/crm/controller/CrmContractController.java b/klp-crm/src/main/java/com/klp/crm/controller/CrmContractController.java new file mode 100644 index 00000000..2c768395 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/controller/CrmContractController.java @@ -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 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 list = iCrmContractService.queryList(bo); + ExcelUtil.exportExcel(list, "合同信息", CrmContractVo.class, response); + } + + /** + * 获取合同信息详细信息 + * + * @param contractId 主键 + */ + @GetMapping("/{contractId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long contractId) { + return R.ok(iCrmContractService.queryById(contractId)); + } + + /** + * 新增合同信息 + */ + @Log(title = "合同信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CrmContractBo bo) { + return toAjax(iCrmContractService.insertByBo(bo)); + } + + /** + * 修改合同信息 + */ + @Log(title = "合同信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CrmContractBo bo) { + return toAjax(iCrmContractService.updateByBo(bo)); + } + + /** + * 删除合同信息 + * + * @param contractIds 主键串 + */ + @Log(title = "合同信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{contractIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] contractIds) { + return toAjax(iCrmContractService.deleteWithValidByIds(Arrays.asList(contractIds), true)); + } +} diff --git a/klp-crm/src/main/java/com/klp/crm/controller/CrmContractProductController.java b/klp-crm/src/main/java/com/klp/crm/controller/CrmContractProductController.java new file mode 100644 index 00000000..67d53ed6 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/controller/CrmContractProductController.java @@ -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 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 list = iCrmContractProductService.queryList(bo); + ExcelUtil.exportExcel(list, "合同产品明细", CrmContractProductVo.class, response); + } + + /** + * 获取合同产品明细详细信息 + * + * @param contractProductId 主键 + */ + @GetMapping("/{contractProductId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long contractProductId) { + return R.ok(iCrmContractProductService.queryById(contractProductId)); + } + + /** + * 新增合同产品明细 + */ + @Log(title = "合同产品明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CrmContractProductBo bo) { + return toAjax(iCrmContractProductService.insertByBo(bo)); + } + + /** + * 修改合同产品明细 + */ + @Log(title = "合同产品明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CrmContractProductBo bo) { + return toAjax(iCrmContractProductService.updateByBo(bo)); + } + + /** + * 删除合同产品明细 + * + * @param contractProductIds 主键串 + */ + @Log(title = "合同产品明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{contractProductIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] contractProductIds) { + return toAjax(iCrmContractProductService.deleteWithValidByIds(Arrays.asList(contractProductIds), true)); + } +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmContract.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmContract.java new file mode 100644 index 00000000..dbf77414 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmContract.java @@ -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; + +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmContractProduct.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmContractProduct.java new file mode 100644 index 00000000..ee820890 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmContractProduct.java @@ -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; + +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractBo.java new file mode 100644 index 00000000..8fe63959 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractBo.java @@ -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; + + +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractProductBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractProductBo.java new file mode 100644 index 00000000..5839d492 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmContractProductBo.java @@ -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; + + +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractProductVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractProductVo.java new file mode 100644 index 00000000..6946e63b --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractProductVo.java @@ -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; + + +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractVo.java new file mode 100644 index 00000000..dbb36b1e --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractVo.java @@ -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; + + +} diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractMapper.java new file mode 100644 index 00000000..a2e95764 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractMapper.java @@ -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 { + +} diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractProductMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractProductMapper.java new file mode 100644 index 00000000..2a03b9e2 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmContractProductMapper.java @@ -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 { + +} diff --git a/klp-crm/src/main/java/com/klp/crm/service/ICrmContractProductService.java b/klp-crm/src/main/java/com/klp/crm/service/ICrmContractProductService.java new file mode 100644 index 00000000..d1a66cb8 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/service/ICrmContractProductService.java @@ -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 queryPageList(CrmContractProductBo bo, PageQuery pageQuery); + + /** + * 查询合同产品明细列表 + */ + List queryList(CrmContractProductBo bo); + + /** + * 新增合同产品明细 + */ + Boolean insertByBo(CrmContractProductBo bo); + + /** + * 修改合同产品明细 + */ + Boolean updateByBo(CrmContractProductBo bo); + + /** + * 校验并批量删除合同产品明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-crm/src/main/java/com/klp/crm/service/ICrmContractService.java b/klp-crm/src/main/java/com/klp/crm/service/ICrmContractService.java new file mode 100644 index 00000000..ee1090a2 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/service/ICrmContractService.java @@ -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 queryPageList(CrmContractBo bo, PageQuery pageQuery); + + /** + * 查询合同信息列表 + */ + List queryList(CrmContractBo bo); + + /** + * 新增合同信息 + */ + Boolean insertByBo(CrmContractBo bo); + + /** + * 修改合同信息 + */ + Boolean updateByBo(CrmContractBo bo); + + /** + * 校验并批量删除合同信息信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractProductServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractProductServiceImpl.java new file mode 100644 index 00000000..be5fb30c --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractProductServiceImpl.java @@ -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 queryPageList(CrmContractProductBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询合同产品明细列表 + */ + @Override + public List queryList(CrmContractProductBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CrmContractProductBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractServiceImpl.java new file mode 100644 index 00000000..0c3a790c --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmContractServiceImpl.java @@ -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 queryPageList(CrmContractBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询合同信息列表 + */ + @Override + public List queryList(CrmContractBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CrmContractBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-crm/src/main/resources/mapper/CrmContractMapper.xml b/klp-crm/src/main/resources/mapper/CrmContractMapper.xml new file mode 100644 index 00000000..e198280e --- /dev/null +++ b/klp-crm/src/main/resources/mapper/CrmContractMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-crm/src/main/resources/mapper/CrmContractProductMapper.xml b/klp-crm/src/main/resources/mapper/CrmContractProductMapper.xml new file mode 100644 index 00000000..9191482a --- /dev/null +++ b/klp-crm/src/main/resources/mapper/CrmContractProductMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + +