[feat] 新增外部合同管理功能,之前提交到了7.22分支中

This commit is contained in:
wyw 2024-07-26 10:25:01 +08:00
parent 7ec73544f6
commit 9d82236a89
2 changed files with 208 additions and 0 deletions

View File

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.cms.service.extcontract;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO;
import jakarta.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import java.math.BigDecimal;
/**
* 外部合同 Service 接口
*
* @author 管理员
*/
public interface ExtContractService {
/**
* 创建外部合同
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createExtContract(@Valid ExtContractSaveReqVO createReqVO);
/**
* 更新外部合同
*
* @param updateReqVO 更新信息
*/
void updateExtContract(@Valid ExtContractSaveReqVO updateReqVO);
/**
* 删除外部合同
*
* @param id 编号
*/
void deleteExtContract(Long id);
/**
* 获得外部合同
*
* @param id 编号
* @return 外部合同
*/
ExtContractRespVO getExtContract(Long id);
/**
* 获得外部合同分页
*
* @param pageReqVO 分页查询
* @return 外部合同分页
*/
PageResult<ExtContractRespVO> getExtContractPage(ExtContractPageReqVO pageReqVO);
/**
* 合同总金额
* @param id
* @return
*/
BigDecimal getContractAmount(Long id);
}

View File

@ -0,0 +1,145 @@
package cn.iocoder.yudao.module.cms.service.extcontract;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractPageReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.extContract.vo.ExtContractSaveReqVO;
import cn.iocoder.yudao.module.cms.dal.dataobject.customerCompany.CustomerCompanyDO;
import cn.iocoder.yudao.module.cms.dal.dataobject.extContract.ExtContractDO;
import cn.iocoder.yudao.module.cms.dal.mysql.customerCompany.CustomerCompanyMapper;
import cn.iocoder.yudao.module.cms.dal.mysql.extContract.ExtContractMapper;
import cn.iocoder.yudao.module.pms.api.ProjectApi;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectDetailRespDTO;
import cn.iocoder.yudao.module.pms.api.project.dto.ProjectRespDTO;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.EXT_CONTRACT_NOT_EXISTS;
/**
* 外部合同 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class ExtContractServiceImpl implements ExtContractService {
@Resource
private ExtContractMapper extContractMapper;
@Resource
private ProjectApi projectApi;
@Resource
private CustomerCompanyMapper customerCompanyMapper;
@Override
public Long createExtContract(ExtContractSaveReqVO createReqVO) {
// 插入
ExtContractDO extContract = BeanUtils.toBean(createReqVO, ExtContractDO.class);
extContractMapper.insert(extContract);
// 返回
return extContract.getId();
}
@Override
public void updateExtContract(ExtContractSaveReqVO updateReqVO) {
//校验
Long id = updateReqVO.getId();
validateExtContractExists(id);
// 更新
ExtContractDO updateObj = BeanUtils.toBean(updateReqVO, ExtContractDO.class);
extContractMapper.updateById(updateObj);
}
@Override
public void deleteExtContract(Long id) {
// 校验存在
validateExtContractExists(id);
// 删除
extContractMapper.deleteById(id);
}
private void validateExtContractExists(Long id) {
if (extContractMapper.selectById(id) == null) {
throw exception(EXT_CONTRACT_NOT_EXISTS);
}
}
// 需要联表查询
// 1.项目编号 pms_project 直接
// 2.主控部门(跟踪部门) pms_project找到的是id 需要联表
// 3.项目经理 pms_project找到的是id 需要联表
// 4.客户公司名称 pms_project 联表
// 5.合同总金额
// 6.合同商议提示和分包提示不一样
@Override
public ExtContractRespVO getExtContract(Long id) {
ExtContractDO extContractDO = extContractMapper.selectById(id);
Long projectId = extContractDO.getProjectId();
Long customerCompanyId = extContractDO.getCustomerCompanyId();
ExtContractRespVO extContractRespVO = BeanUtils.toBean(extContractDO, ExtContractRespVO.class);
ProjectRespDTO project = projectApi.getProject(projectId);
extContractRespVO.setCode(project.getCode());
ProjectDetailRespDTO projectDetail = projectApi.getProjectDetailById(projectId);
extContractRespVO.setTrackingDep(projectDetail.getTrackingDepName());
extContractRespVO.setProjectManager(projectDetail.getProjectManagerName());
//用客户公司id查询
CustomerCompanyDO customerCompanyDO = customerCompanyMapper.selectById(customerCompanyId);
String name = customerCompanyDO.getName();
extContractRespVO.setCustomerCompanyName(name);
//合同总金额
BigDecimal contractAmount = getContractAmount(id);
extContractRespVO.setAmount(contractAmount);
return extContractRespVO;
}
@Override
public PageResult<ExtContractRespVO> getExtContractPage(ExtContractPageReqVO pageReqVO) {
PageResult<ExtContractDO> extContractDOPageResult = extContractMapper.selectPage(pageReqVO);
List<ExtContractDO> excontractDOList = extContractDOPageResult.getList();
List<ExtContractRespVO> extContractRespVOList = new ArrayList<>();
for (ExtContractDO extContractDO : excontractDOList) {
Long id = extContractDO.getId();
ExtContractRespVO extContractRespVO = getExtContract(id);
extContractRespVOList.add(extContractRespVO);
}
PageResult<ExtContractRespVO> pageResult = new PageResult<>();
pageResult.setList(extContractRespVOList);
return pageResult;
}
@Override
public BigDecimal getContractAmount(Long id) {
//前期+设计+地勘+其他+检测
ExtContractDO extContract = extContractMapper.selectById(id);
BigDecimal preAmount = new BigDecimal(String.valueOf(extContract.getPreAmount()));
BigDecimal designFee = new BigDecimal(String.valueOf(extContract.getDesignFee()));
BigDecimal surveyFees = new BigDecimal(String.valueOf(extContract.getSurveyFees()));
BigDecimal testingFee = new BigDecimal(String.valueOf(extContract.getTestingFee()));
BigDecimal other = new BigDecimal(extContract.getOtherFee());
return preAmount.add(designFee).add(surveyFees).add(testingFee).add(other);
}
}