|
|
|
|
@ -33,12 +33,14 @@ import org.dromara.oa.erp.domain.bo.ErpProjectInfoBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpContractInfoVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpContractMaterialVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectTypeVo;
|
|
|
|
|
import org.dromara.oa.erp.enums.ProjectCategoryEnum;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpContractInfoMapper;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectContractsMapper;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectInfoMapper;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpContractInfoService;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpProjectInfoService;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpProjectTypeService;
|
|
|
|
|
import org.dromara.wms.api.RemoteWmsShippingBillService;
|
|
|
|
|
import org.dromara.wms.api.domain.RemoteWmsShippingDraft;
|
|
|
|
|
import org.dromara.wms.api.domain.RemoteWmsShippingDraftItem;
|
|
|
|
|
@ -71,6 +73,8 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
|
|
|
|
|
|
|
|
|
|
private final ErpContractInfoMapper erpContractInfoMapper;
|
|
|
|
|
|
|
|
|
|
private final IErpProjectTypeService projectTypeService;
|
|
|
|
|
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private RemoteWorkflowService remoteWorkflowService;
|
|
|
|
|
|
|
|
|
|
@ -240,7 +244,17 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
|
|
|
|
|
* 保存前的数据校验
|
|
|
|
|
*/
|
|
|
|
|
private void validEntityBeforeSave(ErpProjectInfo entity) {
|
|
|
|
|
//TODO 做一些数据校验,如唯一约束
|
|
|
|
|
// 项目编号不能重复(编辑时排除自身)
|
|
|
|
|
if (entity != null && StringUtils.isNotBlank(entity.getProjectCode())) {
|
|
|
|
|
LambdaQueryWrapper<ErpProjectInfo> lqw = new LambdaQueryWrapper<ErpProjectInfo>()
|
|
|
|
|
.eq(ErpProjectInfo::getProjectCode, entity.getProjectCode())
|
|
|
|
|
.eq(ErpProjectInfo::getDelFlag, "0")
|
|
|
|
|
.ne(entity.getProjectId() != null, ErpProjectInfo::getProjectId, entity.getProjectId());
|
|
|
|
|
Long cnt = baseMapper.selectCount(lqw);
|
|
|
|
|
if (cnt != null && cnt > 0) {
|
|
|
|
|
throw new ServiceException("项目编号【" + entity.getProjectCode() + "】已存在,请勿重复");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -269,13 +283,12 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
|
|
|
|
|
public ErpProjectInfoVo projectSubmitAndFlowStart(ErpProjectInfoBo bo) {
|
|
|
|
|
ErpProjectInfo add = MapstructUtils.convert(bo, ErpProjectInfo.class);
|
|
|
|
|
validEntityBeforeSave(add);
|
|
|
|
|
populateProjectFlowStartPayload(bo);
|
|
|
|
|
if (StringUtils.isNull(bo.getProjectId())) {
|
|
|
|
|
this.insertByBo(bo);
|
|
|
|
|
} else {
|
|
|
|
|
this.updateByBo(bo);
|
|
|
|
|
}
|
|
|
|
|
// 后端发起需要忽略权限
|
|
|
|
|
bo.getVariables().put("ignore", true);
|
|
|
|
|
RemoteStartProcess startProcess = new RemoteStartProcess();
|
|
|
|
|
startProcess.setBusinessId(bo.getProjectId().toString());
|
|
|
|
|
startProcess.setFlowCode(bo.getFlowCode());
|
|
|
|
|
@ -289,6 +302,61 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
|
|
|
|
|
return MapstructUtils.convert(add, ErpProjectInfoVo.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void populateProjectFlowStartPayload(ErpProjectInfoBo bo) {
|
|
|
|
|
if (bo == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String, Object> variables = bo.getVariables();
|
|
|
|
|
variables.put("ignore", true);
|
|
|
|
|
|
|
|
|
|
variables.putIfAbsent("projectId", bo.getProjectId());
|
|
|
|
|
variables.putIfAbsent("projectCode", bo.getProjectCode());
|
|
|
|
|
variables.putIfAbsent("projectName", bo.getProjectName());
|
|
|
|
|
variables.putIfAbsent("contractFlag", Convert.toInt(bo.getContractFlag()));
|
|
|
|
|
variables.putIfAbsent("chargeId", bo.getChargeId());
|
|
|
|
|
variables.putIfAbsent("deputyId", bo.getDeputyId());
|
|
|
|
|
|
|
|
|
|
Long projectTypeParentId = resolveProjectTypeParentId(bo.getProjectTypeId());
|
|
|
|
|
variables.putIfAbsent("projectTypeParentId", projectTypeParentId);
|
|
|
|
|
|
|
|
|
|
bo.setProjectStatus(OAStatusEnum.APPROVING.getStatus());
|
|
|
|
|
bo.setFlowStatus(BusinessStatusEnum.WAITING.getStatus());
|
|
|
|
|
|
|
|
|
|
String approvalTitleSuffix = resolveProjectApprovalTitleSuffix(bo.getFlowCode());
|
|
|
|
|
String businessTitle = StringUtils.isNotBlank(bo.getProjectName())
|
|
|
|
|
? bo.getProjectName() + approvalTitleSuffix
|
|
|
|
|
: approvalTitleSuffix;
|
|
|
|
|
|
|
|
|
|
bo.getBizExt().setBusinessId(String.valueOf(bo.getProjectId()));
|
|
|
|
|
bo.getBizExt().setBusinessCode(bo.getProjectCode());
|
|
|
|
|
bo.getBizExt().setBusinessTitle(businessTitle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Long resolveProjectTypeParentId(Long projectTypeId) {
|
|
|
|
|
if (projectTypeId == null) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
ErpProjectTypeVo projectTypeVo = projectTypeService.queryById(projectTypeId);
|
|
|
|
|
if (projectTypeVo == null) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return projectTypeVo.getParentId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String resolveProjectApprovalTitleSuffix(String flowCode) {
|
|
|
|
|
if (flowCode.startsWith("xmsq")) {
|
|
|
|
|
if ("xmsqf".equals(flowCode)) {
|
|
|
|
|
return "研发项目审批";
|
|
|
|
|
}
|
|
|
|
|
if ("xmsqt".equals(flowCode)) {
|
|
|
|
|
return "预投项目审批";
|
|
|
|
|
}
|
|
|
|
|
return "市场项目审批";
|
|
|
|
|
}
|
|
|
|
|
return "项目审批";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成等)
|
|
|
|
|
*
|
|
|
|
|
|