[fix] 优化合同管理,外部合同管理,外包合同管理功能

This commit is contained in:
wyw 2024-07-29 12:58:16 +08:00
parent 698906fb08
commit a224d73203
11 changed files with 159 additions and 54 deletions

View File

@ -8,13 +8,27 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
* @date 2024/7/3 * @date 2024/7/3
*/ */
public interface ErrorCodeConstants { public interface ErrorCodeConstants {
ErrorCode CUSTOMER_COMPANY_NOT_EXISTS = new ErrorCode(1_020_000_000, "客户公司管理不存在");
ErrorCode PROJECT_NOT_EXISTS = new ErrorCode(1_021_000_000, "项目信息不存在");
ErrorCode PARAM_NOT_EXISTS = new ErrorCode(1_022_000_000, "请求参数错误");
// ========== 外包合同 2_021_000_000 ==========
ErrorCode OUTS_CONTRACT_NOT_EXISTS = new ErrorCode(2_021_000_000, "外包合同不存在");
// ========== 外包合同历史 2_022_000_000 ==========
ErrorCode OUTS_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_022_000_000, "外包合同历史不存在");
// ========== 外包合同关联 2_023_000_000 ==========
ErrorCode CONTRACT_OUTS_NOT_EXISTS = new ErrorCode(2_023_000_000, "外包合同关联不存在");
ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(2_024_000_000, "合同不存在"); ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(2_024_000_000, "合同不存在");
ErrorCode CONTRACT_NAME_NOT_EXISTS = new ErrorCode(2_024_001_000, "合同名称不存在"); ErrorCode CONTRACT_NAME_NOT_EXISTS = new ErrorCode(2_024_001_000, "合同名称不存在");
ErrorCode CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_025_000_000, "历史合同不存在"); ErrorCode CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_025_000_000, "历史合同不存在");
@ -25,19 +39,8 @@ public interface ErrorCodeConstants {
ErrorCode CONTRACT_EXT_NOT_EXISTS = new ErrorCode(2_028_000_000, "外部合同关联不存在"); ErrorCode CONTRACT_EXT_NOT_EXISTS = new ErrorCode(2_028_000_000, "外部合同关联不存在");
// ========== 外包合同 2_021_000_000 ==========
ErrorCode OUTS_CONTRACT_NOT_EXISTS = new ErrorCode(2_021_000_000, "外包合同不存在");
// ========== 外包合同历史 2_022_000_000 ==========
ErrorCode OUTS_CONTRACT_HISTORY_NOT_EXISTS = new ErrorCode(2_022_000_000, "外包合同历史不存在");
// ========== 外包合同关联 2_023_000_000 ==========
ErrorCode CONTRACT_OUTS_NOT_EXISTS = new ErrorCode(2_023_000_000, "外包合同关联不存在");
ErrorCode CUSTOMER_COMPANY_NOT_EXISTS = new ErrorCode(1_020_000_000, "客户公司管理不存在");
ErrorCode PROJECT_NOT_EXISTS = new ErrorCode(1_021_000_000, "项目信息不存在");

View File

@ -23,5 +23,25 @@ public class ContractOutsPageReqVO extends PageParam {
@Schema(description = "外包合同id", example = "9277") @Schema(description = "外包合同id", example = "9277")
private Long outsContractId; private Long outsContractId;
@Schema(description = "创建人")
private String creator;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "更新人")
private String updater;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] updateTime;
@Schema(description = "是否删除")
private Boolean delete;
@Schema(description = "租户id", example = "15943")
private Long tenantId;
} }

View File

@ -24,4 +24,28 @@ public class ContractOutsRespVO {
@ExcelProperty("外包合同id") @ExcelProperty("外包合同id")
private Long outsContractId; private Long outsContractId;
@Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建人")
private String creator;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("更新人")
private String updater;
@Schema(description = "更新时间")
@ExcelProperty("更新时间")
private LocalDateTime updateTime;
@Schema(description = "是否删除", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("是否删除")
private Boolean delete;
@Schema(description = "租户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15943")
@ExcelProperty("租户id")
private Long tenantId;
} }

View File

@ -22,6 +22,27 @@ public class ContractOutsSaveReqVO {
@NotNull(message = "外包合同id不能为空") @NotNull(message = "外包合同id不能为空")
private Long outsContractId; private Long outsContractId;
@Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "创建人不能为空")
private String creator;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "更新人不能为空")
private String updater;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "是否删除", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否删除不能为空")
private Boolean delete;
@Schema(description = "租户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15943")
@NotNull(message = "租户id不能为空")
private Long tenantId;

View File

@ -58,4 +58,12 @@ public interface ContractService {
* @return * @return
*/ */
BigDecimal getProvisionalSettlement(Long id); BigDecimal getProvisionalSettlement(Long id);
/**
* 判断合同是否存在
* @param id 合同id
*/
void validateContractExists(Long id);
} }

View File

@ -47,13 +47,13 @@ public class ContractServiceImpl implements ContractService {
@Override @Override
public Long createContract(ContractSaveReqVO createReqVO) { public Long createContract(ContractSaveReqVO createReqVO) {
if (createReqVO == null){
throw exception(PARAM_NOT_EXISTS);
}
ContractDO contract = BeanUtils.toBean(createReqVO, ContractDO.class); ContractDO contract = BeanUtils.toBean(createReqVO, ContractDO.class);
//校验 //校验
Long projectId = contract.getProjectId(); projectApi.validProjectExist(contract.getProjectId());
ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null) {
throw exception(PROJECT_NOT_EXISTS);
}
contractMapper.insert(contract); contractMapper.insert(contract);
//返回 //返回
return contract.getId(); return contract.getId();
@ -63,11 +63,7 @@ public class ContractServiceImpl implements ContractService {
public void updateContract(ContractSaveReqVO updateReqVO) { public void updateContract(ContractSaveReqVO updateReqVO) {
//校验 //校验
validateContractExists(updateReqVO.getId()); validateContractExists(updateReqVO.getId());
Long projectId = updateReqVO.getProjectId(); projectApi.validProjectExist(updateReqVO.getProjectId());
ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null) {
throw exception(PROJECT_NOT_EXISTS);
}
// 更新 // 更新
ContractDO updateObj = BeanUtils.toBean(updateReqVO, ContractDO.class); ContractDO updateObj = BeanUtils.toBean(updateReqVO, ContractDO.class);
contractMapper.updateById(updateObj); contractMapper.updateById(updateObj);
@ -88,10 +84,12 @@ public class ContractServiceImpl implements ContractService {
if (id == null) { if (id == null) {
throw exception(CONTRACT_NOT_EXISTS); throw exception(CONTRACT_NOT_EXISTS);
} }
ContractDO contractDO = contractMapper.selectById(id); ContractDO contractDO = contractMapper.selectById(id);
if (contractDO == null) { if (contractDO == null) {
throw exception(CONTRACT_NOT_EXISTS); throw exception(CONTRACT_NOT_EXISTS);
} }
Long projectId = contractDO.getProjectId(); Long projectId = contractDO.getProjectId();
if (projectId == null) { if (projectId == null) {
@ -133,9 +131,13 @@ public class ContractServiceImpl implements ContractService {
@Override @Override
public PageResult<ContractRespVO> getContractPage(ContractPageReqVO pageReqVO) { public PageResult<ContractRespVO> getContractPage(ContractPageReqVO pageReqVO) {
//校验 //校验
if (pageReqVO == null){
throw exception(PARAM_NOT_EXISTS);
}
Long projectId = pageReqVO.getProjectId(); Long projectId = pageReqVO.getProjectId();
ProjectRespDTO project = projectApi.getProject(projectId); ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null){ if (project == null) {
throw exception(PROJECT_NOT_EXISTS); throw exception(PROJECT_NOT_EXISTS);
} }
@ -171,11 +173,13 @@ public class ContractServiceImpl implements ContractService {
} }
private void validateContractExists(Long projectId) { @Override
if (contractMapper.selectById(projectId) == null) { public void validateContractExists(Long id) {
if (contractMapper.selectById(id) == null) {
throw exception(CONTRACT_NOT_EXISTS); throw exception(CONTRACT_NOT_EXISTS);
} }
} }
} }

View File

@ -4,9 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.cms.controller.admin.contractouts.vo.ContractOutsPageReqVO; import cn.iocoder.yudao.module.cms.controller.admin.contractouts.vo.ContractOutsPageReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.contractouts.vo.ContractOutsSaveReqVO; import cn.iocoder.yudao.module.cms.controller.admin.contractouts.vo.ContractOutsSaveReqVO;
import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO;
import cn.iocoder.yudao.module.cms.dal.dataobject.contractouts.ContractOutsDO; import cn.iocoder.yudao.module.cms.dal.dataobject.contractouts.ContractOutsDO;
import cn.iocoder.yudao.module.cms.dal.mysql.contract.ContractMapper;
import cn.iocoder.yudao.module.cms.dal.mysql.contractouts.ContractOutsMapper; import cn.iocoder.yudao.module.cms.dal.mysql.contractouts.ContractOutsMapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -28,22 +26,18 @@ public class ContractOutsServiceImpl implements ContractOutsService {
@Resource @Resource
private ContractOutsMapper contractOutsMapper; private ContractOutsMapper contractOutsMapper;
@Resource
private ContractMapper contractMapper;
@Override @Override
public Long createContractOuts(ContractOutsSaveReqVO createReqVO) { public Long createContractOuts(ContractOutsSaveReqVO createReqVO) {
ContractOutsDO outsDO = BeanUtils.toBean(createReqVO, ContractOutsDO.class); ContractOutsDO outsDO = BeanUtils.toBean(createReqVO, ContractOutsDO.class);
Long contractId = createReqVO.getContractId(); Long contractId = createReqVO.getContractId();
Long outsContractId = createReqVO.getOutsContractId(); Long outsContractId = createReqVO.getOutsContractId();
if (contractId == null){ if (contractId == null) {
throw exception(CONTRACT_NOT_EXISTS); throw exception(CONTRACT_NOT_EXISTS);
} }
if (outsContractId == null){ if (outsContractId == null) {
throw exception(CONTRACT_OUTS_NOT_EXISTS); throw exception(CONTRACT_OUTS_NOT_EXISTS);
} }
contractOutsMapper.insert(outsDO); contractOutsMapper.insert(outsDO);
// 返回 // 返回
return createReqVO.getId(); return createReqVO.getId();

View File

@ -22,8 +22,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.EXT_CONTRACT_NOT_EXISTS; import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.cms.enums.ErrorCodeConstants.PROJECT_NOT_EXISTS;
/** /**
* 外部合同 Service 实现类 * 外部合同 Service 实现类
@ -46,13 +45,12 @@ public class ExtContractServiceImpl implements ExtContractService {
@Override @Override
public Long createExtContract(ExtContractSaveReqVO createReqVO) { public Long createExtContract(ExtContractSaveReqVO createReqVO) {
if (createReqVO == null){
throw exception(PARAM_NOT_EXISTS);
}
ExtContractDO contract = BeanUtils.toBean(createReqVO, ExtContractDO.class); ExtContractDO contract = BeanUtils.toBean(createReqVO, ExtContractDO.class);
//校验 //校验
Long projectId = contract.getProjectId(); projectApi.validProjectExist(contract.getProjectId());
ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null) {
throw exception(PROJECT_NOT_EXISTS);
}
extContractMapper.insert(contract); extContractMapper.insert(contract);
//返回 //返回
return contract.getId(); return contract.getId();
@ -61,12 +59,12 @@ public class ExtContractServiceImpl implements ExtContractService {
@Override @Override
public void updateExtContract(ExtContractSaveReqVO updateReqVO) { public void updateExtContract(ExtContractSaveReqVO updateReqVO) {
//校验 //校验
validateExtContractExists(updateReqVO.getId()); if (updateReqVO == null){
Long projectId = updateReqVO.getProjectId(); throw exception(PARAM_NOT_EXISTS);
ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null) {
throw exception(PROJECT_NOT_EXISTS);
} }
validateExtContractExists(updateReqVO.getId());
projectApi.validProjectExist(updateReqVO.getProjectId());
// 更新 // 更新
ExtContractDO updateObj = BeanUtils.toBean(updateReqVO, ExtContractDO.class); ExtContractDO updateObj = BeanUtils.toBean(updateReqVO, ExtContractDO.class);
extContractMapper.updateById(updateObj); extContractMapper.updateById(updateObj);
@ -80,11 +78,6 @@ public class ExtContractServiceImpl implements ExtContractService {
extContractMapper.deleteById(id); extContractMapper.deleteById(id);
} }
private void validateExtContractExists(Long id) {
if (extContractMapper.selectById(id) == null) {
throw exception(EXT_CONTRACT_NOT_EXISTS);
}
}
// 需要联表查询 // 需要联表查询
// 1.项目编号 pms_project 直接 // 1.项目编号 pms_project 直接
@ -140,6 +133,9 @@ public class ExtContractServiceImpl implements ExtContractService {
@Override @Override
public PageResult<ExtContractRespVO> getExtContractPage(ExtContractPageReqVO pageReqVO) { public PageResult<ExtContractRespVO> getExtContractPage(ExtContractPageReqVO pageReqVO) {
if (pageReqVO == null){
throw exception(PARAM_NOT_EXISTS);
}
PageResult<ExtContractDO> extContractDOPageResult = extContractMapper.selectPage(pageReqVO); PageResult<ExtContractDO> extContractDOPageResult = extContractMapper.selectPage(pageReqVO);
List<ExtContractDO> excontractDOList = extContractDOPageResult.getList(); List<ExtContractDO> excontractDOList = extContractDOPageResult.getList();
@ -168,4 +164,11 @@ public class ExtContractServiceImpl implements ExtContractService {
return preAmount.add(designFee).add(surveyFees).add(testingFee).add(other); return preAmount.add(designFee).add(surveyFees).add(testingFee).add(other);
} }
private void validateExtContractExists(Long id) {
if (extContractMapper.selectById(id) == null) {
throw exception(EXT_CONTRACT_NOT_EXISTS);
}
}
} }

View File

@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.cms.controller.admin.contract.vo.ContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractPageReqVO;
import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractRespVO;
import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO; import cn.iocoder.yudao.module.cms.controller.admin.outscontract.vo.OutsContractSaveReqVO;
import cn.iocoder.yudao.module.cms.dal.dataobject.contract.ContractDO;
import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO; import cn.iocoder.yudao.module.cms.dal.dataobject.outscontract.OutsContractDO;
import cn.iocoder.yudao.module.cms.dal.mysql.outscontract.OutsContractMapper; import cn.iocoder.yudao.module.cms.dal.mysql.outscontract.OutsContractMapper;
import cn.iocoder.yudao.module.cms.service.contract.ContractService; import cn.iocoder.yudao.module.cms.service.contract.ContractService;
@ -43,8 +42,13 @@ public class OutsContractServiceImpl implements OutsContractService {
@Override @Override
public Long createOutsContract(OutsContractSaveReqVO createReqVO) { public Long createOutsContract(OutsContractSaveReqVO createReqVO) {
if (createReqVO == null) {
throw exception(PARAM_NOT_EXISTS);
}
OutsContractDO outsContract = BeanUtils.toBean(createReqVO, OutsContractDO.class); OutsContractDO outsContract = BeanUtils.toBean(createReqVO, OutsContractDO.class);
//TODO 待优化 把校验逻辑提取
Long contractId = outsContract.getContractId(); Long contractId = outsContract.getContractId();
ContractRespVO contract = contractService.getContract(contractId); ContractRespVO contract = contractService.getContract(contractId);
@ -72,7 +76,7 @@ public class OutsContractServiceImpl implements OutsContractService {
public void updateOutsContract(OutsContractSaveReqVO updateReqVO) { public void updateOutsContract(OutsContractSaveReqVO updateReqVO) {
// 校验 // 校验
validateOutsContractExists(updateReqVO.getId()); validateOutsContractExists(updateReqVO.getId());
//TODO 待优化 把校验逻辑提取
Long contractId = updateReqVO.getContractId(); Long contractId = updateReqVO.getContractId();
ContractRespVO contract = contractService.getContract(contractId); ContractRespVO contract = contractService.getContract(contractId);
if (contract == null) { if (contract == null) {
@ -122,11 +126,16 @@ public class OutsContractServiceImpl implements OutsContractService {
@Override @Override
public PageResult<OutsContractRespVO> getOutsContractPage(OutsContractPageReqVO pageReqVO) { public PageResult<OutsContractRespVO> getOutsContractPage(OutsContractPageReqVO pageReqVO) {
if (pageReqVO == null) {
throw exception(PARAM_NOT_EXISTS);
}
Long projectId = pageReqVO.getProjectId(); Long projectId = pageReqVO.getProjectId();
ProjectRespDTO project = projectApi.getProject(projectId); ProjectRespDTO project = projectApi.getProject(projectId);
if (project == null) { if (project == null) {
throw exception(PROJECT_NOT_EXISTS); throw exception(PROJECT_NOT_EXISTS);
} }
PageResult<OutsContractDO> outsContractDOPageResult = outsContractMapper.selectPage(pageReqVO); PageResult<OutsContractDO> outsContractDOPageResult = outsContractMapper.selectPage(pageReqVO);
List<OutsContractDO> outsContractDOList = outsContractDOPageResult.getList(); List<OutsContractDO> outsContractDOList = outsContractDOPageResult.getList();
List<OutsContractRespVO> outsContractRespVOList = new ArrayList<>(); List<OutsContractRespVO> outsContractRespVOList = new ArrayList<>();
@ -137,6 +146,7 @@ public class OutsContractServiceImpl implements OutsContractService {
OutsContractRespVO outsContract = getOutsContract(id); OutsContractRespVO outsContract = getOutsContract(id);
outsContractRespVOList.add(outsContract); outsContractRespVOList.add(outsContract);
} }
PageResult<OutsContractRespVO> pageResult = new PageResult<>(); PageResult<OutsContractRespVO> pageResult = new PageResult<>();
pageResult.setList(outsContractRespVOList); pageResult.setList(outsContractRespVOList);
return pageResult; return pageResult;

View File

@ -14,4 +14,10 @@ public interface ProjectApi {
*/ */
ProjectDetailRespDTO getProjectDetailById(Long projectId); ProjectDetailRespDTO getProjectDetailById(Long projectId);
/**
* 判断项目是否存在
* @param projectId
*/
void validProjectExist(Long projectId);
} }

View File

@ -11,10 +11,14 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstants.PROJECT_NOT_EXISTS;
@Service @Service
@Validated @Validated
public class ProjectImpl implements ProjectApi { public class ProjectImpl implements ProjectApi {
@Resource @Resource
private ProjectMapper projectMapper; private ProjectMapper projectMapper;
@ -32,4 +36,12 @@ public class ProjectImpl implements ProjectApi {
ProjectDetailRespDTO detailRespDTO = BeanUtils.toBean(projectMapperDetail, ProjectDetailRespDTO.class); ProjectDetailRespDTO detailRespDTO = BeanUtils.toBean(projectMapperDetail, ProjectDetailRespDTO.class);
return detailRespDTO; return detailRespDTO;
} }
@Override
public void validProjectExist(Long projectId) {
if (projectMapper.selectById(projectId) == null) {
throw exception(PROJECT_NOT_EXISTS);
}
}
} }