feat(crm): 添加合同管理功能模块
- 新增合同信息实体类、业务对象和视图对象 - 创建合同产品明细相关的实体、业务对象和视图对象 - 实现合同信息的增删改查和分页查询功能 - 实现合同产品明细的增删改查和分页查询功能 - 添加合同信息和产品明细的导出Excel功能 - 创建合同信息和产品明细的数据库映射配置 - 实现合同服务层业务逻辑和数据校验功能 - 配置合同相关控制器接口和请求映射关系
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user