|
|
|
|
@@ -3,6 +3,7 @@ package com.zt.plat.module.contractorder.service.contract;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.zt.plat.framework.common.pojo.PageResult;
|
|
|
|
|
import com.zt.plat.framework.common.util.object.BeanUtils;
|
|
|
|
|
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
|
|
import com.zt.plat.framework.tenant.core.context.CompanyContextHolder;
|
|
|
|
|
import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceDataRespVO;
|
|
|
|
|
import com.zt.plat.module.base.controller.admin.templtp.vo.TemplateInstanceItemRespVO;
|
|
|
|
|
@@ -11,14 +12,24 @@ import com.zt.plat.module.base.dal.dataobject.tmpltp.TemplateInstanceItemDO;
|
|
|
|
|
import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceDataMapper;
|
|
|
|
|
import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceItemMapper;
|
|
|
|
|
import com.zt.plat.module.base.service.tmpltp.TemplateInstanceDataService;
|
|
|
|
|
import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi;
|
|
|
|
|
import com.zt.plat.module.bpm.api.task.BpmTaskApi;
|
|
|
|
|
import com.zt.plat.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
|
|
|
|
import com.zt.plat.module.bpm.api.task.dto.BpmTaskRespDTO;
|
|
|
|
|
import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.*;
|
|
|
|
|
import com.zt.plat.module.contractorder.dal.dataobject.contract.*;
|
|
|
|
|
import com.zt.plat.module.contractorder.dal.mysql.contract.*;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.DateConstants;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.ProcessConstants;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.TableFieldConstants;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.contract.ContractStatusEnum;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.DateConstants;
|
|
|
|
|
import com.zt.plat.module.contractorder.enums.contract.ErpCtrtYesNoEnum;
|
|
|
|
|
import com.zt.plat.module.system.api.user.AdminUserApi;
|
|
|
|
|
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
|
|
import jakarta.annotation.Resource;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -64,6 +75,12 @@ public class ContractServiceImpl implements ContractService {
|
|
|
|
|
private ContractPriceMapper contractPriceMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private ContractNotMapper contractNotMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private AdminUserApi adminUserApi;
|
|
|
|
|
@Resource
|
|
|
|
|
private BpmProcessInstanceApi bpmProcessInstanceApi;
|
|
|
|
|
@Resource
|
|
|
|
|
private BpmTaskApi bpmTaskApi;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public PageResult<ContractMainDO> getContractPage(ContractPageReqVO pageReqVO) {
|
|
|
|
|
@@ -315,7 +332,7 @@ public class ContractServiceImpl implements ContractService {
|
|
|
|
|
|
|
|
|
|
// 查询合同是否存在
|
|
|
|
|
ContractMainDO oldContractMainDO = contractMainMapper.selectById(id);
|
|
|
|
|
if (contractMainMapper.selectById(id) == null) {
|
|
|
|
|
if (oldContractMainDO == null) {
|
|
|
|
|
throw exception(CONTRACT_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -512,6 +529,211 @@ public class ContractServiceImpl implements ContractService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String submitApproval(Long id) {
|
|
|
|
|
|
|
|
|
|
// 判断主键
|
|
|
|
|
if (ObjectUtils.isEmpty(id)) {
|
|
|
|
|
throw exception(CONTRACT_ID_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询合同是否存在
|
|
|
|
|
ContractMainDO contractMainDO = contractMainMapper.selectById(id);
|
|
|
|
|
if (contractMainDO == null) {
|
|
|
|
|
throw exception(CONTRACT_NOT_EXISTS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 合同内容校验 TODO
|
|
|
|
|
verifyContract(get(id));
|
|
|
|
|
|
|
|
|
|
// 查询用户
|
|
|
|
|
AdminUserRespDTO adminUserRespDTO = adminUserApi
|
|
|
|
|
.getUser(SecurityFrameworkUtils.getLoginUserId()).getData();
|
|
|
|
|
|
|
|
|
|
// 先创建流程,后更新状态
|
|
|
|
|
BpmProcessInstanceCreateReqDTO pidto = new BpmProcessInstanceCreateReqDTO();
|
|
|
|
|
pidto.setProcessDefinitionKey(ProcessConstants.CONTRACT_APPROVAL_PROCESS);
|
|
|
|
|
pidto.setBusinessKey(String.valueOf(id));
|
|
|
|
|
String data = bpmProcessInstanceApi.createProcessInstance(adminUserRespDTO.getId(), pidto).getData();
|
|
|
|
|
if (StringUtils.isNotBlank(data)) {
|
|
|
|
|
// 获取流程当前审批的任务节点
|
|
|
|
|
List<BpmTaskRespDTO> taskList = bpmTaskApi.getTaskListByProcessInstanceId(data).getData();
|
|
|
|
|
contractMainDO.setProcessInstanceId(data);
|
|
|
|
|
if (CollectionUtils.isNotEmpty(taskList)) {
|
|
|
|
|
BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);
|
|
|
|
|
contractMainDO.setTaskNodeId(undoTask.getId());
|
|
|
|
|
}
|
|
|
|
|
contractMainDO.setStatus(ContractStatusEnum.UNDER_REVIEW.getCode());
|
|
|
|
|
contractMainMapper.updateById(contractMainDO);
|
|
|
|
|
return "提交审批成功";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "提交审批失败";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void verifyContract(ContractViewRespVO contract) {
|
|
|
|
|
|
|
|
|
|
/* 合同基本信息 */
|
|
|
|
|
// 甲方公司编号不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getPurchaseCompanyNumber())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PRCH_CPN_NUM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 甲方公司名称不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getPurchaseCompanyName())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PRCH_CPN_NAME_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 甲方地址不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getPurchaseAddress())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PRCH_ADR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 甲方法定代表人能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getPurchaseLeader())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PRCH_LDR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 乙方公司编号不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getSalesCompanyNumber())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SALE_CPN_NUM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 乙方公司名称不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getSalesCompanyName())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SALE_CPN_NAME_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 乙方地址不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getSalesAddress())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SALE_ADR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 乙方法定代表人能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getSalesPurchaseLeader())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SALE_PRCH_LDR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 合同名称不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getContractName())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CTRT_NAME_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 合同编号不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getContractPaperNumber())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CTRT_PPR_NUM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 类别不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getCategory())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CTGR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 收支性质不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getDirection())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_DRCT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 签署日期不能为空
|
|
|
|
|
if (contract.getSignDate() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SGN_DT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 开始日期不能为空
|
|
|
|
|
if (contract.getStartDate() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_STRT_DT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 结束日期不能为空
|
|
|
|
|
if (contract.getEndDate() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_END_DT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 签署地不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getSignPlace())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SGN_PLCE_LABEL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 金额信息 */
|
|
|
|
|
// 币种不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getCurrency())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CUR_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 本币金额不能为空
|
|
|
|
|
if (contract.getBasicAmount() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_BSC_AMT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 原币金额不能为空
|
|
|
|
|
if (contract.getCooAmount() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_COO_AMT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 是否有履约保证金不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getHasDeposit())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_DPST_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 是否有履约保证金为是的情况
|
|
|
|
|
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasDeposit())) {
|
|
|
|
|
// 原币履约保证金不能为空
|
|
|
|
|
if (contract.getCooAmountDeposit() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_COO_AMT_DPST_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 本币履约保证金不能为空
|
|
|
|
|
if (contract.getBasicAmountDeposit() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_BSC_AMT_DPST_LABEL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 是否有预付款不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getHasPrepayment())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_PPYM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 是否有预付款为是的情况
|
|
|
|
|
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) {
|
|
|
|
|
// 预付款比例不能为空
|
|
|
|
|
if (contract.getPrepaymentRatio() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PPYM_RTIO_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 预付款金额不能为空
|
|
|
|
|
if (contract.getPrepaymentAmount() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PPYM_AMT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 是否有质保金不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getHasQualityAmount())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_QLT_AMT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 是否有质保金为是的情况
|
|
|
|
|
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) {
|
|
|
|
|
// 质保金比例不能为空
|
|
|
|
|
if (contract.getQualityRatio() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_QLT_RTIO_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 质保金金额不能为空
|
|
|
|
|
if (contract.getQualityAmount() != null) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_QLT_AMT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 是否先款后货不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getHasPayable())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_PYBL_LABEL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 物料信息 */
|
|
|
|
|
// 物料名称不能为空
|
|
|
|
|
// 数量不能为空
|
|
|
|
|
// 计量单位不能为空
|
|
|
|
|
|
|
|
|
|
/* 扩展信息 */
|
|
|
|
|
// 是否框架合同不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getIsFramework())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_IS_FMWK_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 境内/境外不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getIsDomestic())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_IS_DOM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 施工类型编号不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getConstructionTypeNumber())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CON_TP_NUM_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 施工类型名称不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getConstructionTypeName())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CON_TP_NAME_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 代理方不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getAgent())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_AGT_LABEL);
|
|
|
|
|
}
|
|
|
|
|
// 是否虚拟合同不能为空
|
|
|
|
|
if (StringUtils.isBlank(contract.getContractVirtual())) {
|
|
|
|
|
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CTRT_VRTL_LABEL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成系统合同编号
|
|
|
|
|
*
|
|
|
|
|
|