yangys
2025-09-07 56f5157ae8dba22eb30fb6c7cb132f80b7161932
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -7,14 +7,18 @@
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
import org.springblade.mdm.commons.service.UserCommonService;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.FlowStartResult;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NodeDeptQueryService;
import org.springblade.mdm.program.service.ProgramSeqService;
import org.springblade.mdm.utils.EntityUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,28 +33,41 @@
@Service("startDispatcher")
public class StartDispatcher  {
   private final RuntimeService runtimeService;
   private final ProgramSeqService programSeqService;
   private final IdentityService identityService;
   private final NcNodeService ncNodeService;
   private final FlowProgramFileService flowProgramFileService;
   private final NodeDeptQueryService nodeDeptQueryService;
   private final FlowCommonService flowCommonService;
   private final ProduceDivisionService produceDivisionService;
   private final UserCommonService userCommonService;
   /**
    * 启动派工流程
    * @param startVO 表单数据
    * @return 流程实例id
    */
   @Transactional
   public String start(TaskAssignVO startVO){
   public FlowStartResult start(TaskAssignVO startVO){
      if(!FlowContants.Y.equals(startVO.getIsTempFlow())){
         startVO.setIsTempFlow(FlowContants.N);
      }
      Map<String, Object> vars = new HashMap<>();
      ProduceDivision div = flowCommonService.putDefaultAssignees(vars,startVO.getDrawingNo(),null);
      ProduceDivision div;
      if(startVO.getProducePlanId() != null && startVO.getProducePlanId()!=0){
         //界面上选择了分工表的情况,直接根据id获取
         div = produceDivisionService.getById(startVO.getProducePlanId());
         vars.put(FlowContants.TEAM_LEADER,div.getTeamLeaderId());
         vars.put(FlowContants.PROGRAMMER,div.getProgrammerId());
         vars.put(FlowContants.CHECKER,div.getCheckerId());
         vars.put(FlowContants.SENIOR,div.getSeniorId());
         vars.put(FlowContants.PROGRAMMER_NAME, userCommonService.getUserNameById(div.getProgrammerId()));
      }else {
         div = flowCommonService.putDefaultAssignees(vars, startVO.getDrawingNo(), null);
      }
      vars.put(FlowContants.TITLE,startVO.getTitle());
      //机床编号
@@ -110,7 +127,7 @@
      vars.put(FlowContants.MY_PROCESS_NAME, myProcessName);
      String businessKey = "0";//业务表key
      String businessKey = Func.toStr(startVO.getTaskDispatchId());//业务表key
      identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置流程发起人
      ProcessInstance inst;
      if(startVO.isTemporaryFlow()){
@@ -120,13 +137,20 @@
         vars.put(FlowContants.ASSIGNEE,div.getTeamLeaderId());//第一个用户组长
         inst = runtimeService.startProcessInstanceByKey(FlowContants.TRY_PROCESS_KEY,businessKey,vars);
      }
      FlowStartResult result = new FlowStartResult();
      result.setProcessInstanceId(inst.getProcessInstanceId());
      //生成程序编号
      String programNo = programSeqService.generageProgramNo();
      runtimeService.setVariable(inst.getProcessInstanceId(),FlowContants.PROGRAM_NO,programNo);
      result.setProgramNo(programNo);
      if(curedProgramPackage != null) {//存在已固化程序,复制原来的程序文件。
         copyFlowProgramFiles(curedProgramPackage.getId(),inst.getProcessInstanceId());
         curedProgramPackage.setProcessInstanceId(inst.getProcessInstanceId());
         ncNodeService.updateById(curedProgramPackage);
      }
      return inst.getProcessInstanceId();
      return result;
   }