1.0.90 项目提交流程变量统一走后端

dev
yinq 2 days ago
parent c04e5d1caa
commit 7b52d2c3d3

@ -191,7 +191,7 @@ public class ErpProjectInfoBo extends BaseEntity {
public Map<String, Object> getVariables() { public Map<String, Object> getVariables() {
if (variables == null) { if (variables == null) {
return new HashMap<>(16); variables = new HashMap<>(16);
} }
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
return variables; return variables;

@ -174,8 +174,6 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
validEntityBeforeSave(projectInfo); validEntityBeforeSave(projectInfo);
if (StringUtils.isNotNull(bo.getOssId()) && StringUtils.isNotNull(bo.getContractId())) { if (StringUtils.isNotNull(bo.getOssId()) && StringUtils.isNotNull(bo.getContractId())) {
// 若本合同为由内容变更产生的新合同,激活时继承原合同关联项目并作废原合同(幂等)
erpContractChangeService.onActivateNewContractFromChange(bo.getContractId());
ErpContractInfoVo contractInfoVo = contractInfoMapper.selectVoById(bo.getContractId()); ErpContractInfoVo contractInfoVo = contractInfoMapper.selectVoById(bo.getContractId());
ErpContractInfo contractInfo = new ErpContractInfo(); ErpContractInfo contractInfo = new ErpContractInfo();
contractInfo.setContractId(contractInfoVo.getContractId()); contractInfo.setContractId(contractInfoVo.getContractId());
@ -330,6 +328,9 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
throw new ServiceException("流程发起异常"); throw new ServiceException("流程发起异常");
} }
// 若本合同为由内容变更产生的新合同,激活时继承原合同关联项目并作废原合同
erpContractChangeService.onActivateNewContractFromChange(bo.getContractId());
// 关联项目:仅新增项目走项目申请流程;选择已有项目不走 xzxm仅走主流程variables 含 hasExistProject // 关联项目:仅新增项目走项目申请流程;选择已有项目不走 xzxm仅走主流程variables 含 hasExistProject
List<ErpProjectContractsBo> projectContractsList = bo.getProjectContractsList(); List<ErpProjectContractsBo> projectContractsList = bo.getProjectContractsList();
if (CollUtil.isNotEmpty(projectContractsList)) { if (CollUtil.isNotEmpty(projectContractsList)) {
@ -349,28 +350,6 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService {
projectBo.setContractFlag(projectVo.getContractFlag()); projectBo.setContractFlag(projectVo.getContractFlag());
projectBo.setProjectTypeId(projectVo.getProjectTypeId()); projectBo.setProjectTypeId(projectVo.getProjectTypeId());
projectBo.setFlowCode(FLOW_CODE_PROJECT); projectBo.setFlowCode(FLOW_CODE_PROJECT);
Map<String, Object> variables = projectBo.getVariables();
variables.put("ignore", true);
variables.put("projectId", projectVo.getProjectId());
variables.put("projectCode", projectVo.getProjectCode());
variables.put("projectName", projectVo.getProjectName());
variables.put("contractFlag", Convert.toInt(projectVo.getContractFlag()));
Long projectTypeParentId = null;
if (projectVo.getProjectTypeId() != null) {
ErpProjectTypeVo projectTypeVo = projectTypeService.queryById(projectVo.getProjectTypeId());
if (projectTypeVo != null) {
projectTypeParentId = projectTypeVo.getParentId();
}
}
variables.put("projectTypeParentId", projectTypeParentId);
RemoteFlowInstanceBizExt projectBizExt = projectBo.getBizExt();
projectBizExt.setBusinessId(String.valueOf(projectVo.getProjectId()));
projectBizExt.setBusinessCode(projectVo.getProjectCode());
projectBizExt.setBusinessTitle(projectVo.getProjectName() != null ? projectVo.getProjectName() + "市场项目审批" : "市场项目审批");
projectBo.setProjectStatus(OAStatusEnum.APPROVING.getStatus());
projectBo.setFlowStatus(BusinessStatusEnum.WAITING.getStatus());
projectBo.setVariables(variables);
projectBo.setBizExt(projectBizExt);
projectInfoService.projectSubmitAndFlowStart(projectBo); projectInfoService.projectSubmitAndFlowStart(projectBo);
} }
} }

@ -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.ErpContractInfoVo;
import org.dromara.oa.erp.domain.vo.ErpContractMaterialVo; import org.dromara.oa.erp.domain.vo.ErpContractMaterialVo;
import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo; 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.enums.ProjectCategoryEnum;
import org.dromara.oa.erp.mapper.ErpContractInfoMapper; import org.dromara.oa.erp.mapper.ErpContractInfoMapper;
import org.dromara.oa.erp.mapper.ErpProjectContractsMapper; import org.dromara.oa.erp.mapper.ErpProjectContractsMapper;
import org.dromara.oa.erp.mapper.ErpProjectInfoMapper; import org.dromara.oa.erp.mapper.ErpProjectInfoMapper;
import org.dromara.oa.erp.service.IErpContractInfoService; import org.dromara.oa.erp.service.IErpContractInfoService;
import org.dromara.oa.erp.service.IErpProjectInfoService; 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.RemoteWmsShippingBillService;
import org.dromara.wms.api.domain.RemoteWmsShippingDraft; import org.dromara.wms.api.domain.RemoteWmsShippingDraft;
import org.dromara.wms.api.domain.RemoteWmsShippingDraftItem; import org.dromara.wms.api.domain.RemoteWmsShippingDraftItem;
@ -71,6 +73,8 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
private final ErpContractInfoMapper erpContractInfoMapper; private final ErpContractInfoMapper erpContractInfoMapper;
private final IErpProjectTypeService projectTypeService;
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@ -240,7 +244,17 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
* *
*/ */
private void validEntityBeforeSave(ErpProjectInfo entity) { 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) { public ErpProjectInfoVo projectSubmitAndFlowStart(ErpProjectInfoBo bo) {
ErpProjectInfo add = MapstructUtils.convert(bo, ErpProjectInfo.class); ErpProjectInfo add = MapstructUtils.convert(bo, ErpProjectInfo.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
populateProjectFlowStartPayload(bo);
if (StringUtils.isNull(bo.getProjectId())) { if (StringUtils.isNull(bo.getProjectId())) {
this.insertByBo(bo); this.insertByBo(bo);
} else { } else {
this.updateByBo(bo); this.updateByBo(bo);
} }
// 后端发起需要忽略权限
bo.getVariables().put("ignore", true);
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(bo.getProjectId().toString()); startProcess.setBusinessId(bo.getProjectId().toString());
startProcess.setFlowCode(bo.getFlowCode()); startProcess.setFlowCode(bo.getFlowCode());
@ -289,6 +302,61 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
return MapstructUtils.convert(add, ErpProjectInfoVo.class); 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 "项目审批";
}
/** /**
* (: 稿退) * (: 稿退)
* *

Loading…
Cancel
Save