From 9064866a2c0c2988cba1d321d7af088d2647a4bc Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期日, 06 七月 2025 23:59:50 +0800 Subject: [PATCH] 增加固化流程 --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java | 3 blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml | 8 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java | 215 +++++++++++++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java | 111 ++++++- doc/sql/mdm/mdm.mysql.all.create.sql | 1 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java | 27 - blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java | 17 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java | 4 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java | 7 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java | 7 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java | 183 ------------- blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java | 19 + blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java | 15 + blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java | 162 ++++++----- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java | 10 15 files changed, 461 insertions(+), 328 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java index f464779..911f2cc 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java @@ -55,7 +55,7 @@ @Operation(summary = "瀹屾垚浠诲姟", description = "娴佸悜涓嬩竴涓妭鐐�") @PostMapping("completeTask") - public R<Void> completeTask(String taskId, String processInstanceId, String comment,@Parameter(description = "瀵瑰簲鐨勭▼搴廼d,閫楀彿鍒嗛殧") String programIds, @Parameter(name = "variables", description = "浠诲姟鍙橀噺") @RequestBody Map<String, Object> variables) { + public R<Void> completeTask(String taskId, String processInstanceId, String comment,@Parameter(name = "variables", description = "浠诲姟鍙橀噺") @RequestBody Map<String, Object> variables) { // 澧炲姞璇勮 if (StringUtil.isNoneBlank(processInstanceId, comment)) { taskService.addComment(taskId, processInstanceId, comment); @@ -63,6 +63,10 @@ // 闈炵┖鍒ゆ柇 if (Func.isEmpty(variables)) { variables = Kv.create(); + } + String programIds = null; + if(variables.containsKey("programIds")){ + programIds = variables.get("programIds").toString(); } if(StringUtils.isNotEmpty(programIds)) { processProgRefService.addRelations(processInstanceId,Func.toLongList(programIds)); @@ -72,6 +76,7 @@ variables.put("approveUserNickName",AuthUtil.getNickName()); if(variables.containsKey("assignee")){ + addApproveRecord(taskId,processInstanceId,comment,programIds,variables); //鎸囧畾浜嗕笅涓�姝ユ墽琛屼汉 taskService.complete(taskId, variables); diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java index 15b4550..0b4c7d0 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java @@ -1,8 +1,11 @@ package org.springblade.mdm.flow.service; +import lombok.AllArgsConstructor; +import org.flowable.engine.HistoryService; import org.flowable.engine.IdentityService; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.history.HistoricTaskInstance; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; @@ -10,33 +13,38 @@ import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; +import org.springblade.mdm.program.entity.ProcessProgRef; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramService; +import org.springblade.mdm.program.service.ProcessProgRefService; +import org.springblade.mdm.program.vo.DncSendBackData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 鍥哄寲娴佺▼鏈嶅姟 */ @Service +@AllArgsConstructor public class CureFlowService { - @Autowired - private RuntimeService runtimeService; - @Autowired - private AutoAssignUsersService autoAssignUsersService; - @Autowired - private IdentityService identityService; + private final RuntimeService runtimeService; - @Autowired - private NcProgramService ncProgramService; - @Autowired - private NcNodeService ncNodeService; - @Autowired - private MachineService machineService; + private final HistoryService historyService; + + private final IdentityService identityService; + + private final NcProgramService ncProgramService; + + private final MachineService machineService; + + private final ProcessProgRefService processProgRefService; /** * 鍥哄寲娴佺▼鐨刱ey */ @@ -47,24 +55,87 @@ * @param programId 绋嬪簭id */ public void start(long programId){ + + + //pinst.getProcessInstanceId(); + int a=1; + //log.info() + } + + @Transactional + public void startCure(List<NcProgram> programs) { + //DncSendBackData sendBackData; + //List<Long> ncProgramIdList = dataList.stream().map(DncSendBackData::getId).toList(); + //Map<String,List<NcProgram>> groupedProgram = groupProgramsByMachineCode(ncProgramIdList); + //List<NcProgram> programs = ncProgramService.listByIds(ncProgramIdList); + //鏍规嵁鍒嗙粍鍚姩娴佺▼锛屽苟鎻掑叆鍏宠仈琛� + programs.forEach(this::startOne); + } + + /** + * 鍚姩涓�涓暟鎺х▼搴忕殑鍥哄寲娴佺▼ + * @param prog 鏁版帶绋嬪簭瀹炰綋 + */ + void startOne(NcProgram prog){ Map<String, Object> vars = new HashMap<>(); - NcProgram prog = ncProgramService.getById(programId); - NcNode progNode = ncNodeService.getById(programId); - Machine machine = machineService.getByCode(progNode.getMachineCode()); - vars.put("machineCode",machine.getCode()); + + //NcProgram prog = programs.get(0); + Machine machine = machineService.getByCode(prog.getMachineCode()); + vars.put("machineCode",prog.getMachineCode()); vars.put("machineMode",machine.getName()); vars.put("processEdition",prog.getProcessEdition()); - vars.put("programId",programId); - vars.put("program",progNode); + //璇ョ▼搴忓湪璁″垝浠诲姟鏃� 鑾峰彇缂栧埗锛屾牎瀵癸紝瀹℃壒鐨勪汉鍛橈紝浣滀负榛樿鐢ㄦ埛锛屽叾涓紪鍒舵椂绗竴涓浐瀹氱殑鐢ㄦ埛 + ProcessProgRef preRef = processProgRefService.lastDispatchDataByNcProgramId(prog.getId()); + //鑾峰彇瀹℃壒鐢ㄦ埛 + List<HistoricTaskInstance> historicTasks = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(preRef.getProcessInstanceId()) + .orderByHistoricTaskInstanceEndTime().desc() + .list(); + + String programmer = null; + String checker = null; + String senior = null; + + for (HistoricTaskInstance task : historicTasks) { + // 鑾峰彇浠诲姟鐨勫姙鐞嗕汉 + if(task.getTaskDefinitionKey().equals("programmingTask")){ + //缂栧埗 + programmer = task.getAssignee(); + }else if(task.getTaskDefinitionKey().equals("check")){ + //鏍″ + checker = task.getAssignee(); + }else if(task.getTaskDefinitionKey().equals("senior")){ + //瀹℃牳 + senior = task.getAssignee(); + } + + } + vars.put("programmer",programmer); + vars.put("checker",checker); + vars.put("senior",senior); String businessKey = "0";//涓氬姟琛╧ey identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜� ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars); - int a=1; - //log.info() + ProcessProgRef ref = new ProcessProgRef(); + ref.setProcessInstanceId(pinst.getId()); + ref.setNcProgramId(prog.getId()); + + processProgRefService.save(ref); + } + /** + * 灏嗙▼搴忔寜鐓ф満鍣ㄤ唬鐮佸垎缁� + * @param ncProgramIdList + * @return + */ + /* + Map<String,List<NcProgram>> groupProgramsByMachineCode(List<Long> ncProgramIdList){ + List<NcProgram> programs = ncProgramService.listByIds(ncProgramIdList); + return programs.stream().collect(Collectors.groupingBy(NcProgram::getMachineCode)); + }*/ } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java new file mode 100644 index 0000000..78864a6 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java @@ -0,0 +1,19 @@ +package org.springblade.mdm.flow.task.cure; + +import lombok.extern.slf4j.Slf4j; +import org.flowable.engine.delegate.DelegateExecution; +import org.springblade.mdm.program.entity.NcProgram; +import org.springframework.stereotype.Component; + +@Slf4j +@Component("cureFinishOperateTask") +public class CureFinishOperateTask { + + public void execute(DelegateExecution execution) { + //鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛� + String hasCuredProgram = (String)execution.getVariable("hasCuredProgram"); + NcProgram ncProgram = (NcProgram)execution.getVariable("curedNcProgram"); + + System.out.println("鎵ц鍥哄寲绋嬪簭浠诲姟鏈嶅姟"); + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java index a5bb5b7..8a48d27 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java @@ -33,7 +33,7 @@ @Slf4j public class DncSendBackController { - private final DncSendBackService dncSendBackService; + //private final DncSendBackService dncSendBackService; private final NcProgramExchangeService ncProgramExchangeService; /** * 涓婁紶DNC鍥炰紶鏂囦欢 @@ -42,30 +42,29 @@ */ @PostMapping("upload") @ApiOperationSupport(order = 1) - @Operation(summary = "DNC鍥炰紶鏂囦欢瀵煎叆锛屼笂浼犳枃浠�", description = "涓婁紶DNC鍥炰紶鏂囦欢") - public R<Void> dncSendBackUpload(@RequestParam MultipartFile file) { + @Operation(summary = "DNC鍥炰紶鏂囦欢瀵煎叆锛屼笂浼犳枃浠�", description = "涓婁紶DNC鍥炰紶鏂囦欢,骞惰繑鍥炶В鏋愮粨鏋�") + public R<List<DncSendBackData>> dncSendBackUpload(@RequestParam MultipartFile file) { try { - ncProgramExchangeService.dncSendBackUpload(file); + return R.data(ncProgramExchangeService.dncSendBackUpload(file)); }catch (Exception e){ log.error("瀵煎叆閿欒",e); return R.fail(e.getMessage()); } - return R.success(); } - + /* @Operation(summary = "dnc鍥炰紶鏁版嵁鍒嗛〉", description = "dnc鍥炰紶鏁版嵁鍒嗛〉") @GetMapping("/page") public R<IPage<DncSendBackData>> page(Query query) { IPage<DncSendBackData> pages = ncProgramExchangeService.dncSendBackPageQuery(query); return R.data(pages); } - + */ @PostMapping("accept") @ApiOperationSupport(order = 2) - @Operation(summary = "DNC鍥炰紶鏁版嵁鍏ュ簱", description = "鍏ュ簱锛屽悓鏃跺惎鍔ㄥ浐鍖栨祦绋�") + @Operation(summary = "DNC鍥炰紶鏁版嵁鍏ュ簱", description = "鍏ュ簱锛屽悓鏃跺惎鍔ㄥ浐鍖栨祦绋�,鍏ュ弬涓轰笂浼犳槸瑙f瀽鐨勬暟鎹垪琛�") public R<Void> dncSendBackAccept(@RequestParam String ids) { try { - dncSendBackService.dncFileAccept(ids); + ncProgramExchangeService.dncFileAccept(ids); }catch (Exception e){ log.error("鍏ュ簱閿欒",e); return R.fail(e.getMessage()); diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java index 90f6c17..5321f90 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java @@ -13,6 +13,7 @@ import org.springblade.core.tool.api.R; import org.springblade.mdm.commons.vo.IdsVO; import org.springblade.mdm.program.service.NcProgramApprovedService; +import org.springblade.mdm.program.service.NcProgramExportDNCService; import org.springblade.mdm.program.service.NcProgramService; import org.springblade.mdm.program.vo.NcNodeProgramQueryVO; import org.springblade.mdm.program.vo.NcProgramExportDncPageVO; @@ -37,6 +38,7 @@ private final NcProgramService ncProgramService; private final NcProgramApprovedService ncProgramApprovedService; + private final NcProgramExportDNCService ncProgramExportDNCService; @Operation(summary = "绋嬪簭瀵煎嚭DNC鍒嗛〉鏌ヨ", description = "鍒嗛〉鏌ヨ锛屼緵鐢ㄦ埛閫夋嫨鏁版嵁") @GetMapping("/export-dnc-page") public R<IPage<NcProgramExportDncPageVO>> page(NcProgramExportDncQueryVO query) { @@ -51,7 +53,7 @@ throw new ServiceException("鏈�夋嫨鏂囦欢瀵煎嚭"); } try { - ncProgramApprovedService.exportDnc(vo.getIds(),response.getOutputStream()); + ncProgramExportDNCService.exportDnc(vo.getIds(),response.getOutputStream()); } catch (IOException e) { log.error("瀵煎嚭DNC寮傚父", e); throw new RuntimeException(e); diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java index 5e8d91e..484ed0f 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java @@ -12,7 +12,17 @@ @Getter @TableName("mdm_nc_program_exchange") public class NcProgramExchange extends BizEntity { + /** + * 绋嬪簭鍚嶇О + */ private String name; + /** + * 浜ゆ崲绫诲瀷,1:涓嬪彂;2:鍥哄寲(dnc鍥炰紶) + */ private int exchangeType; + /** + * 鏁版帶绋嬪簭id + */ + private Long ncProgramId; } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java index db55b9c..2a93aba 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProcessProgRef.java @@ -7,16 +7,19 @@ import java.time.LocalDateTime; +/** + * 娴佺▼瀹炰緥涓庣▼搴廼d鐨勫叧鑱� + */ @Setter @Getter @TableName("mdm_process_prog_ref") public class ProcessProgRef extends BizEntity { /** - * 鏂囦欢鍚� + * 娴佺▼瀹炰緥id */ private String processInstanceId; /** - * 瀵硅薄瀛樺偍涓殑鍚嶇О + * 鏁版帶绋嬪簭id */ private Long ncProgramId; diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java index 8e4d686..8a9381d 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java @@ -13,9 +13,9 @@ import java.util.List; /** - * 宸ヤ綔娴佹湇鍔″疄鐜扮被 + * DNC鍥炰紶 * - * @author Chill + * @author yangys */ @Slf4j @Service @@ -28,30 +28,7 @@ - /** - * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋� - * @param ids - * @return - */ - public void dncFileAccept(String ids) { - List<Long> idList = Func.toLongList(ids); - NcProgramExchange exchange; - //NcProgram program; - NcNode programNode; - for (Long id : idList) { - exchange = ncProgramExchangeMapper.selectById(id); - exchange.setStatus(2);//宸插叆搴撶姸鎬� - programNode = ncNodeService.getLastProgramNode(exchange.getName()); - - //濡傛灉鏄凡缁忓浐鍖栫殑鍒欎笉闇�瑕佸惎鍔ㄦ祦绋� - //鍚姩鍥哄寲娴佺▼ - if(programNode.getIsCured() !=1) {//鏈浐鍖栫殑绋嬪簭锛屽惎鍔ㄥ浐鍖栨祦绋� - cureFlowService.start(programNode.getId()); - } - } - - } } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java index 3b5791f..4fa1d83 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java @@ -63,190 +63,7 @@ } - /** - * 瀵煎嚭dnc - * @param approvedIdArr 寰呭鍑哄鎵硅〃id鏁扮粍 - */ - public void exportDnc(Long[] approvedIdArr, OutputStream os) throws IOException { - ZipOutputStream zipOut = new ZipOutputStream(os); - ArrayList<Long> programIdList = new ArrayList<Long>(); - for (Long approvedId : approvedIdArr) { - NcProgramApproved approved = this.getById(approvedId); - programIdList.add(approved.getNcProgramId()); - - NcProgram prog = progService.getById(approved.getNcProgramId()); - - String filename = prog.getOssName(); - InputStream inputStream = ossTemplate.statFileStream(filename); - - addInputStreamToZip(zipOut, inputStream, prog.getName()); - - } - addDataJson(zipOut, programIdList); - - } - - /** - * 瀵煎叆鏁版嵁鏂囦欢 - * @param zipOut - */ - void addDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { - addProgramDataJson(zipOut, programIdList); - addApproveRecordDataJson(zipOut, programIdList); - - addNcNodeDataJson(zipOut, programIdList); - } - - /** - * 瀵煎叆绋嬪簭璁板綍 - * @param zipOut - * @param programIdList - */ - void addProgramDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { - LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(NcProgram::getId, programIdList); - List<NcProgram> programList = progService.list(queryWrapper); - JSONArray jsonArray = new JSONArray(); - for(NcProgram program : programList){ - JSONObject recObj = new JSONObject(); - recObj.put("id", program.getId()); - recObj.put("code", program.getCode()); - recObj.put("ossName",program.getOssName()); - recObj.put("isTextFile",program.getIsTextFile()); - recObj.put("category",program.getCategory()); - recObj.put("description",program.getDescription()); - recObj.put("name",program.getName()); - recObj.put("partNo",program.getPartNo()); - recObj.put("ncNodeId",program.getNcNodeId()); - recObj.put("url",program.getUrl()); - recObj.put("isCured",program.getIsCured()); - recObj.put("isLocked",program.getIsLocked()); - recObj.put("isTest",program.getIsTest()); - recObj.put("machineCode",program.getMachineCode()); - recObj.put("processEdition",program.getProcessEdition()); - recObj.put("taskAssignTime",program.getTaskAssignTime()); - - addSuperProperties(recObj,program); - - jsonArray.add(recObj); - } - addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_nc_program.json"); - - } - - /** - * 瀵煎叆瀹℃壒璁板綍 - * @param zipOut - * @param programIdList - */ - void addApproveRecordDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { - LambdaQueryWrapper<ApproveRecord> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(ApproveRecord::getNcProgramId, programIdList); - List<ApproveRecord> records = approvedService.list(queryWrapper); - JSONArray jsonArray = new JSONArray(); - for(ApproveRecord record : records){ - JSONObject recObj = new JSONObject(); - recObj.put("id", record.getId()); - recObj.put("comment", record.getComment()); - recObj.put("userId",record.getUserId()); - recObj.put("userNickname",record.getUserNickname()); - recObj.put("operateTime",record.getOperateTime()); - recObj.put("operateResult",record.getOperateResult()); - recObj.put("taskName",record.getTaskName()); - recObj.put("ncProgramId",record.getNcProgramId()); - recObj.put("processInstanceId",record.getProcessInstanceId()); - - addSuperProperties(recObj,record); - - jsonArray.add(recObj); - } - addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_approve_record.json"); - - } - - /** - * 瀵煎叆鑺傜偣 - * @param zipOut - * @param programIdList - */ - void addNcNodeDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { - LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(NcProgram::getId, programIdList); - - List<NcProgram> programs = progService.list(queryWrapper); - JSONArray jsonArray = new JSONArray(); - - ArrayList<Long> exportNodeIdList = new ArrayList<>(); - for(NcProgram program : programs){ - JSONObject recObj = new JSONObject(); - if(!exportNodeIdList.contains(program.getNcNodeId())){ - exportNodeIdList.add(program.getNcNodeId()); - } - NcNode ncNode = ncNodeService.getById(program.getNcNodeId()); - - if(StringUtils.isNotEmpty(ncNode.getParentIds())){ - List<Long> pids = Func.toLongList(ncNode.getParentIds()); - for(Long nodeId : pids){ - if(!exportNodeIdList.contains(nodeId)){ - exportNodeIdList.add(nodeId); - } - } - - } - - } - - LambdaQueryWrapper<NcNode> nodeQueryWrapper = new LambdaQueryWrapper<>(); - nodeQueryWrapper.in(NcNode::getId, exportNodeIdList); - List<NcNode> nodeList =ncNodeService.list(nodeQueryWrapper); - for(NcNode node : nodeList){ - JSONObject recObj = new JSONObject(); - - recObj.put("id", node.getId()); - recObj.put("nodeType", node.getNodeType()); - recObj.put("machineCode",node.getMachineCode()); - recObj.put("parentId",node.getParentId()); - recObj.put("description",node.getDescription()); - recObj.put("name",node.getName()); - recObj.put("remark",node.getRemark()); - recObj.put("partNo",node.getPartNo()); - recObj.put("parentIds",node.getParentIds()); - recObj.put("processName",node.getProcessName()); - - addSuperProperties(recObj,node); - - jsonArray.add(recObj); - } - addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_nc_node.json"); - } - - void addSuperProperties(JSONObject recObj, BizEntity entity){ - recObj.put("tenantId",entity.getTenantId()); - recObj.put("createTime",entity.getCreateTime()); - recObj.put("updateTime",entity.getUpdateTime()); - recObj.put("createUser",entity.getCreateUser()); - recObj.put("updateUser",entity.getUpdateUser()); - recObj.put("status",entity.getStatus()); - recObj.put("createDept",entity.getCreateDept()); - } - - public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName) - throws IOException { - // 鍒涘缓鏂扮殑 ZIP 鏉$洰 - ZipEntry zipEntry = new ZipEntry(entryName); - zipOut.putNextEntry(zipEntry); - - // 灏嗚緭鍏ユ祦鍐欏叆 ZIP 杈撳嚭娴� - byte[] buffer = new byte[1024]; - int length; - while ((length = inputStream.read(buffer)) >= 0) { - zipOut.write(buffer, 0, length); - } - - // 鍏抽棴褰撳墠鏉$洰 - zipOut.closeEntry(); - } } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java index d4c2b6a..7ead897 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java @@ -1,16 +1,25 @@ package org.springblade.mdm.program.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; +import org.apache.commons.io.IOUtils; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.utils.FileUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.core.tool.utils.IoUtil; +import org.springblade.mdm.flow.service.CureFlowService; +import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.vo.DncSendBackData; @@ -23,10 +32,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; +import java.time.LocalDateTime; +import java.util.*; /** * 绋嬪簭浜ゆ崲锛坉nc瀵煎叆/瀵煎嚭锛� @@ -37,30 +44,26 @@ @Service @AllArgsConstructor public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { - + private final CureFlowService cureFlowService; + private final NcProgramService ncProgramService; /** - * dnc鍥炰紶鏂囦欢涓婁紶 - * @param file 鏂囦欢 + * dnc鍥炰紶鏂囦欢涓婁紶锛堣В鏋愬悗淇濆瓨鍏pload琛級 + * @param file DNC鍥炰紶鏂囦欢 * @return */ public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { - List<DncSendBackData> list ; + List<DncSendBackData> list; try { - String fileName = file.getOriginalFilename(); - //InputStream fileInputStream = file.getInputStream(); - InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); + //String fileName = file.getOriginalFilename(); + //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); + InputStream zipFileInputStream = file.getInputStream();//test + byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseDncZipFromByteArray(bytes); - for(DncSendBackData dncSendBackData:list){ - NcProgramExchange exchange=new NcProgramExchange(); - exchange.setName(dncSendBackData.getProgramName()); - exchange.setStatus(1);//宸插鍏� - this.save(exchange); - } } catch (IOException e) { - log.error("涓婁紶dnc鏂囦欢澶辫触",e); + log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e); list = Collections.emptyList(); } return list; @@ -92,90 +95,93 @@ return tempFile.toFile(); } public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { - //List<DncSendBackData> datas = new ArrayList<>(); - List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); + List<DncSendBackData> list = new ArrayList<>(); + //List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); - - - /* - try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); - ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { - + Map<String,String> fileMd5Map = new HashMap<>(); + Map<String,DncSendBackData> fileDataMap = new HashMap<>(); + try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); + ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; - while ((entry = zis.getNextZipEntry()) != null) { + Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); + while (entries.hasMoreElements()) { + //while ((entry = zis.getNextZipEntry()) != null) { + entry = entries.nextElement(); DncSendBackData prog = new DncSendBackData(); - prog.setProgramName(entry.getName()); + String entryName = entry.getName(); + if (!entry.isDirectory()) { + //鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢 + if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){ + + try (InputStream inputStream = zipFile.getInputStream(entry)) { + String jsonStr = IoUtil.readToString(inputStream); + + JSONArray jsonArray = JSONArray.parseArray(jsonStr); + for(int i=0;i<jsonArray.size();i++){ + JSONObject jsonObject = jsonArray.getJSONObject(i); + DncSendBackData d = new DncSendBackData(); + d.setProgramName(jsonObject.getString("name")); + d.setId(jsonObject.getLong("id")); + d.setProgramNo(jsonObject.getString("code")); + d.setFileBackTime(LocalDateTime.now());//鍒拌揪鏃堕棿 + + fileDataMap.put(d.getProgramName(),d); + list.add(d); + } + + } + }else{ + try (InputStream inputStream = zipFile.getInputStream(entry)) { + fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5 + } + + } System.out.println("鏂囦欢鍚�: " + entry.getName()); System.out.println("澶у皬: " + entry.getSize()); // 璇诲彇鏂囦欢鍐呭鍒板瓧鑺傛暟缁� ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - IOUtils.copy(zis, outputStream); - byte[] fileContent = outputStream.toByteArray(); - // 澶勭悊鏂囦欢鍐呭... - System.out.println("鍐呭闀垮害: " + fileContent.length); - }else{ - //鏂囦欢澶癸紝璇诲唴閮ㄦ枃浠讹紝鑾峰彇鏂囦欢鍒楄〃 - - System.out.println("鏂囦欢澶圭▼搴忥細"+entry.getName()); - List<String> children = new ArrayList<>(); - prog.setChildren(children); } - datas.add(prog); } - - }*/ - return datas; + } + //璁剧疆md5鍊� + fileDataMap.forEach((k,v)->{ + if(fileMd5Map.containsKey(k)){ + v.setMd5(fileMd5Map.get(k)); + } + }); + return list; } + + /** - * 绋嬪簭涓嬪彂缁熻鍒嗛〉鏌ヨ - * @param query 鏌ヨ鍙傛暟 + * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋� + * @param ids id鍒楄〃閫楀彿鍒嗛殧 * @return */ + public void dncFileAccept(String ids) { + List<Long> idList = Func.toLongList(ids); + List<NcProgram> progList = ncProgramService.listByIds(idList); + NcProgramExchange exchange; + //NcProgram program; + //NcNode programNode; - public IPage<DncSendBackData> dncSendBackPageQuery(Query query) { + for(NcProgram prog:progList){ + exchange = new NcProgramExchange(); + exchange.setName(prog.getName()); + exchange.setExchangeType(2);//鍥炰紶 + exchange.setNcProgramId(prog.getId()); - IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query); + this.save(exchange); - return page; - - } -} - - -class ZipFileDirectoryScanner { - - public static List<DncSendBackData> getFilesInDirectoryRecursive(byte[] zipData, String dirPath) throws IOException { - List<DncSendBackData> list = new ArrayList<>(); - - if (!dirPath.endsWith("/")) { - dirPath += "/"; } - try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); - ZipFile zipFile = new ZipFile(channel)) { + cureFlowService.startCure(progList); - Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); - while (entries.hasMoreElements()) { - ZipArchiveEntry entry = entries.nextElement(); - String entryName = entry.getName(); - DncSendBackData d = new DncSendBackData(); - d.setProgramName(entryName); - if(entry.isDirectory()){ - d.setHasChildren(true); - } - list.add(d); - - //if (entryName.startsWith(dirPath) && !entry.isDirectory()) { - // fileList.add(entryName); - //} - } - } - return list; } } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java index 88f5aa2..69849a5 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java @@ -1,27 +1,41 @@ package org.springblade.mdm.program.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.mp.base.BizEntity; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.utils.FileUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.mdm.flow.entity.ApproveRecord; +import org.springblade.mdm.flow.service.ApproveRecordService; +import org.springblade.mdm.program.entity.NcNode; +import org.springblade.mdm.program.entity.NcProgram; +import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.vo.DncSendBackData; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * 涓嬪彂/鍥炰紶绋嬪簭缁熻 @@ -32,8 +46,13 @@ @Service @AllArgsConstructor public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { + private final NcProgramService progService; + private final NcProgramApprovedService approvedService; + private final ApproveRecordService approveRecordService; + private final NcNodeService ncNodeService; + private final OssTemplate ossTemplate; - + public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json"; /** * 鍒嗛〉鏌ヨ * @param query 鏌ヨ鍙傛暟 @@ -46,5 +65,195 @@ return page; } + + + /** + * 瀵煎嚭dnc鍘嬬缉鍖� + * @param approvedIdArr 寰呭鍑哄鎵硅〃id鏁扮粍 + */ + public void exportDnc(Long[] approvedIdArr, OutputStream os) throws IOException { + //FileOutputStream fos = new FileOutputStream("d:/exportDnc.zip"); + try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os + + ArrayList<Long> programIdList = new ArrayList<Long>(); + + for (Long approvedId : approvedIdArr) { + NcProgramApproved approved = approvedService.getById(approvedId); + programIdList.add(approved.getNcProgramId()); + + NcProgram prog = progService.getById(approved.getNcProgramId()); + + String filename = prog.getOssName(); + InputStream inputStream = ossTemplate.statFileStream(filename); + + addInputStreamToZip(zipOut, inputStream, prog.getName()); + + } + addDataJson(zipOut, programIdList); + } + + } + + + /** + * 瀵煎叆鏁版嵁鏂囦欢 + * @param zipOut + */ + void addDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { + addProgramDataJson(zipOut, programIdList); + addApproveRecordDataJson(zipOut, programIdList); + + addNcNodeDataJson(zipOut, programIdList); + } + + /** + * 瀵煎叆绋嬪簭璁板綍 + * @param zipOut + * @param programIdList + */ + void addProgramDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { + LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(NcProgram::getId, programIdList); + List<NcProgram> programList = progService.list(queryWrapper); + JSONArray jsonArray = new JSONArray(); + for(NcProgram program : programList){ + JSONObject recObj = new JSONObject(); + recObj.put("id", program.getId()); + recObj.put("code", program.getCode()); + recObj.put("ossName",program.getOssName()); + recObj.put("isTextFile",program.getIsTextFile()); + recObj.put("category",program.getCategory()); + recObj.put("description",program.getDescription()); + recObj.put("name",program.getName()); + recObj.put("partNo",program.getPartNo()); + recObj.put("ncNodeId",program.getNcNodeId()); + recObj.put("url",program.getUrl()); + recObj.put("isCured",program.getIsCured()); + recObj.put("isLocked",program.getIsLocked()); + recObj.put("isTest",program.getIsTest()); + recObj.put("machineCode",program.getMachineCode()); + recObj.put("processEdition",program.getProcessEdition()); + recObj.put("taskAssignTime",program.getTaskAssignTime()); + + addSuperProperties(recObj,program); + + jsonArray.add(recObj); + } + addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),PROGRAM_JSON_FILE); + + } + + /** + * 瀵煎叆瀹℃壒璁板綍 + * @param zipOut + * @param programIdList + */ + void addApproveRecordDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { + LambdaQueryWrapper<ApproveRecord> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ApproveRecord::getNcProgramId, programIdList); + List<ApproveRecord> records = approveRecordService.list(queryWrapper); + JSONArray jsonArray = new JSONArray(); + for(ApproveRecord record : records){ + JSONObject recObj = new JSONObject(); + recObj.put("id", record.getId()); + recObj.put("comment", record.getComment()); + recObj.put("userId",record.getUserId()); + recObj.put("userNickname",record.getUserNickname()); + recObj.put("operateTime",record.getOperateTime()); + recObj.put("operateResult",record.getOperateResult()); + recObj.put("taskName",record.getTaskName()); + recObj.put("ncProgramId",record.getNcProgramId()); + recObj.put("processInstanceId",record.getProcessInstanceId()); + + addSuperProperties(recObj,record); + + jsonArray.add(recObj); + } + addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_approve_record.json"); + + } + + /** + * 瀵煎叆鑺傜偣 + * @param zipOut + * @param programIdList + */ + void addNcNodeDataJson(ZipOutputStream zipOut, List<Long> programIdList) throws IOException { + LambdaQueryWrapper<NcProgram> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(NcProgram::getId, programIdList); + + List<NcProgram> programs = progService.list(queryWrapper); + JSONArray jsonArray = new JSONArray(); + + ArrayList<Long> exportNodeIdList = new ArrayList<>(); + for(NcProgram program : programs){ + JSONObject recObj = new JSONObject(); + if(!exportNodeIdList.contains(program.getNcNodeId())){ + exportNodeIdList.add(program.getNcNodeId()); + } + NcNode ncNode = ncNodeService.getById(program.getNcNodeId()); + + if(StringUtils.isNotEmpty(ncNode.getParentIds())){ + List<Long> pids = Func.toLongList(ncNode.getParentIds()); + for(Long nodeId : pids){ + if(!exportNodeIdList.contains(nodeId)){ + exportNodeIdList.add(nodeId); + } + } + + } + + } + + LambdaQueryWrapper<NcNode> nodeQueryWrapper = new LambdaQueryWrapper<>(); + nodeQueryWrapper.in(NcNode::getId, exportNodeIdList); + List<NcNode> nodeList =ncNodeService.list(nodeQueryWrapper); + for(NcNode node : nodeList){ + JSONObject recObj = new JSONObject(); + + recObj.put("id", node.getId()); + recObj.put("nodeType", node.getNodeType()); + recObj.put("machineCode",node.getMachineCode()); + recObj.put("parentId",node.getParentId()); + recObj.put("description",node.getDescription()); + recObj.put("name",node.getName()); + recObj.put("remark",node.getRemark()); + recObj.put("partNo",node.getPartNo()); + recObj.put("parentIds",node.getParentIds()); + recObj.put("processName",node.getProcessName()); + + addSuperProperties(recObj,node); + + jsonArray.add(recObj); + } + addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_nc_node.json"); + } + + void addSuperProperties(JSONObject recObj, BizEntity entity){ + recObj.put("tenantId",entity.getTenantId()); + recObj.put("createTime",entity.getCreateTime()); + recObj.put("updateTime",entity.getUpdateTime()); + recObj.put("createUser",entity.getCreateUser()); + recObj.put("updateUser",entity.getUpdateUser()); + recObj.put("status",entity.getStatus()); + recObj.put("createDept",entity.getCreateDept()); + } + + public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName) + throws IOException { + // 鍒涘缓鏂扮殑 ZIP 鏉$洰 + ZipEntry zipEntry = new ZipEntry(entryName); + zipOut.putNextEntry(zipEntry); + + // 灏嗚緭鍏ユ祦鍐欏叆 ZIP 杈撳嚭娴� + byte[] buffer = new byte[1024]; + int length; + while ((length = inputStream.read(buffer)) >= 0) { + zipOut.write(buffer, 0, length); + } + + // 鍏抽棴褰撳墠鏉$洰 + zipOut.closeEntry(); + } } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java index 69cf391..55ce39d 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProcessProgRefService.java @@ -25,6 +25,7 @@ */ package org.springblade.mdm.program.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; @@ -94,11 +95,23 @@ } /** - * 鏌ヨ娴佺▼鍏宠仈鐨勭▼搴廼浜屾爣 + * 鏌ヨ娴佺▼鍏宠仈鐨勭▼搴� * @param processInstanceId * @return */ public List<NcProgramVO> listByProcess(String processInstanceId) { return this.getBaseMapper().listByProcess(processInstanceId); } + + /** + *鑾峰彇鏈�鍚庝竴璋冧换鍔″垎娲剧殑鏁版嵁锛屾牴鎹▼搴廼d + * @param ncProgramId 鏁版帶绋嬪簭id + */ + public ProcessProgRef lastDispatchDataByNcProgramId(Long ncProgramId) { + LambdaQueryWrapper<ProcessProgRef> query = Wrappers.lambdaQuery(); + query.eq(ProcessProgRef::getNcProgramId, ncProgramId).orderByDesc(ProcessProgRef::getCreateTime).last("LIMIT 10");; + + List<ProcessProgRef> list = this.list(query); + return list.isEmpty() ? null : list.get(0); + } } diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java index 473f2cf..d9654ff 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java @@ -11,8 +11,9 @@ @Getter @Schema(description = "DNC鍥炰紶鏁版嵁") public class DncSendBackData { - @Schema(description = "鏂囦欢鏁版嵁搴撶紪鍙�") + @Schema(description = "鏂囦欢鏁版嵁搴撶紪鍙�(鏁版帶绋嬪簭鐨刬d)") private Long id; + @Schema(description = "绋嬪簭缂栧彿") private String programNo; @Schema(description = "绋嬪簭鍚嶇О") diff --git a/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml index f253164..50220a9 100644 --- a/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml +++ b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml @@ -2,18 +2,18 @@ <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> <process id="program-cure" name="鍥哄寲娴佺▼" isExecutable="true"> <startEvent id="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7"/> - <userTask id="cureProgramTask" name="鍥哄寲缂栧埗"/> + <userTask id="cureProgramTask" name="鍥哄寲缂栧埗" flowable:assignee="${programmer}"/> <sequenceFlow id="sid-910649a5-8dac-48a2-b42d-9f1132d61b26" sourceRef="cureProgramTask" targetRef="cureProgramTask"/> <sequenceFlow id="sid-09c7cf44-bb1a-40f4-b231-919afae5c02f" sourceRef="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7" targetRef="cureProgramTask"/> <endEvent id="end" name="鍥哄寲缁撴潫"/> - <userTask id="seniorApproveTask" name="楂樺笀瀹℃牳"/> + <userTask id="seniorApproveTask" name="楂樺笀瀹℃牳" flowable:assignee="${assignee}"/> <sequenceFlow id="sid-8dd21f02-ac10-4318-b897-19b4cdc558c7" sourceRef="cureProgramTask" targetRef="cureCheckTask"> <conditionExpression>${approve=='Y'}</conditionExpression> </sequenceFlow> <sequenceFlow id="sid-504610fe-2b87-4df4-8f42-f10c8bf3ce01" sourceRef="seniorApproveTask" targetRef="cureOKOperateTask"> <conditionExpression>${approve=='Y'</conditionExpression> </sequenceFlow> - <userTask id="cureCheckTask" name="鍥哄寲鏍″"/> + <userTask id="cureCheckTask" name="鍥哄寲鏍″" flowable:assignee="${assignee}"/> <sequenceFlow id="sid-b4ad2b36-5fcc-4449-924b-55b0425b1278" sourceRef="cureCheckTask" targetRef="cureProgramTask"> <conditionExpression>${approve=='N'</conditionExpression> </sequenceFlow> @@ -27,7 +27,7 @@ <sequenceFlow id="sid-c04cc547-0baf-4514-8056-54b1612cdefd" sourceRef="seniorApproveTask" targetRef="cureCheckTask"> <conditionExpression>${approve=='N'}</conditionExpression> </sequenceFlow> - <serviceTask id="cureOKOperateTask" flowable:exclusive="true" name="鍥哄寲澶勭悊浠诲姟"> + <serviceTask id="cureOKOperateTask" flowable:exclusive="true" name="鍥哄寲澶勭悊浠诲姟" flowable:expression="cureFinishOperateTask.execute(execution)"> <documentation>璁剧疆鏁版嵁鐨勫浐鍖栨爣蹇楋紝鐢熸垚鍥哄寲绋嬪簭鍒楄〃</documentation> </serviceTask> <sequenceFlow id="sid-253f5be1-3275-47d6-a3a1-5d1eaf01ec79" sourceRef="cureOKOperateTask" targetRef="end"/> diff --git a/doc/sql/mdm/mdm.mysql.all.create.sql b/doc/sql/mdm/mdm.mysql.all.create.sql index eada037..1218e1d 100644 --- a/doc/sql/mdm/mdm.mysql.all.create.sql +++ b/doc/sql/mdm/mdm.mysql.all.create.sql @@ -186,6 +186,7 @@ `id` bigint NOT NULL, `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�', `name` varchar(100) NOT NULL COMMENT '绋嬪簭鍚嶇О', + `nc_program_id` bigint DEFAULT NULL COMMENT '绋嬪簭鏂囦欢id', `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��', `exchange_type` int DEFAULT NULL COMMENT '浜ゆ崲绫诲瀷,1:涓嬪彂;2:鍥哄寲(dnc鍥炰紶)', `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅', -- Gitblit v1.9.3