blade-service/blade-mdm/pom.xml
@@ -44,6 +44,10 @@ </dependency> <dependency> <groupId>org.springblade</groupId> <artifactId>blade-system-api</artifactId> </dependency> <dependency> <groupId>org.springblade</groupId> <artifactId>blade-flow-api</artifactId> </dependency> <!-- 工使µ --> blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -1,6 +1,7 @@ package org.springblade.mdm.flow.excution; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.IdentityService; import org.flowable.engine.runtime.ProcessInstance; @@ -11,7 +12,9 @@ import org.springblade.flow.core.utils.TaskUtil; import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.ProcessProgRef; import org.springblade.mdm.program.service.NcProgramService; import org.springblade.mdm.program.service.ProcessProgRefService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.flowable.engine.RuntimeService; @@ -19,20 +22,23 @@ import java.util.List; import java.util.Map; @AllArgsConstructor @Service("startDispatcher") public class StartDispatcher { @Autowired private RuntimeService runtimeService; @Autowired private AutoAssignUsersService autoAssignUsersService; @Autowired private IdentityService identityService; private final RuntimeService runtimeService; private final AutoAssignUsersService autoAssignUsersService; @Autowired private NcProgramService ncProgramService; private final IdentityService identityService; private final ProcessProgRefService processProgRefService; private final NcProgramService ncProgramService; private static final String PROCESS_KEY = "dispatch"; /** * å¯å¨æ´¾å·¥æµç¨ * @param startVO */ public void start(TaskAssignVO startVO){ Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO.getProducePlanId()); @@ -51,22 +57,27 @@ vars.put("partNoEdition",startVO.getPartNoEdition()); vars.put("planLockDays",startVO.getPlanLockDays()); vars.put("productModel",startVO.getProductModel()); //é¶ç»ä»¶ä»£ç String partNo = generatePartNo(startVO); vars.put("partNo",partNo); List<NcProgram> curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineCode()); //vars.put("curedNcProgram",curedNcProgram); List<NcProgram> curedNcPrograms = ncProgramService.getCuredNcProgram(startVO.getPartNo(),startVO.getMachineCode()); //设置æ¯å¦æåºåç¨åºæ è®° vars.put("hasCuredProgram",!curedNcProgram.isEmpty() ? "Y":"N"); vars.put("hasCuredProgram",!curedNcPrograms.isEmpty() ? "Y":"N"); String businessKey = "0";//ä¸å¡è¡¨key identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//设置æµç¨å起人 ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars); int a=1; //妿æå·²åºåç¨åºï¼åå°ç¨åºidæå ¥æµç å ³è表 for(NcProgram ncProgram : curedNcPrograms){ ProcessProgRef ref = new ProcessProgRef(); ref.setProcessInstanceId(pinst.getId()); ref.setNcProgramId(ncProgram.getId()); processProgRefService.save(ref); } //log.info() } @@ -76,6 +87,7 @@ * @param startVO * @return */ /* String generatePartNo(TaskAssignVO startVO){ //TODO è¿ä¸ªæ ¼å¼æªç¡®å®ï¼éè¦ç¡®è®¤ return String.format("%s-%s-%s-%s-%s-%s", @@ -85,5 +97,5 @@ startVO.getProcessName(), startVO.getCraftEdition(), startVO.getProcessEdition()); } }*/ } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package org.springblade.mdm.program.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.mdm.program.service.NcProgramExchangeService; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.system.feign.ISysClient; import org.springblade.system.feign.IUserClient; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; /** * æµç¨ç®¡çæ¥å£ * * @author Chill */ @NonDS @RestController @RequestMapping("/system/param/") @AllArgsConstructor @Tag(name = "DNCå¯¼å ¥", description = "DNCå¯¼å ¥æ¥å£") @Slf4j public class MdmParamController { private final ISysClient sysClient; @GetMapping("/getValue") @ApiOperationSupport(order = 2) @Operation(summary = "è·ååæ°å¼") public R<String> detail(@Parameter(description = "åæ°Key") @RequestParam String paramKey) { try { return sysClient.getParamValue(paramKey); }catch (Exception e){ log.error("å ¥åºé误",e); return R.fail(e.getMessage()); } } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -35,15 +35,16 @@ </select> <sql id="all_columns">id,tenant_id,name,parent_id,node_type,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql> <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.node_type,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql> <select id="lazyList" resultType="org.springblade.mdm.program.vo.NcNodeVO"> select <include refid="all_columns"/>,( select <include refid="all_columns_n"/>,u.name create_user_name,( SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM mdm_nc_node WHERE parent_id = n.id and is_deleted = 0 ) AS "has_children" from mdm_nc_node n where is_deleted=0 and parent_id=#{parentId} parent_id = id and is_deleted = 0 ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id where n.is_deleted=0 and n.parent_id=#{parentId} </select> blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -9,6 +9,7 @@ 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.springblade.core.mp.base.BizEntity; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.oss.OssTemplate; import org.springblade.core.oss.model.BladeFile; @@ -17,6 +18,8 @@ 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.entity.ApproveRecord; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.flow.service.CureFlowService; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; @@ -48,6 +51,7 @@ private final CureFlowService cureFlowService; private final NcProgramService ncProgramService; private final NcNodeService ncNodeService; private final ApproveRecordService approveRecordService; private final BladeRedis bladeRedis; private final OssTemplate ossTemplate; @@ -214,6 +218,8 @@ List<NcNode> nodeList = new ArrayList<>(); List<NcProgram> progList = new ArrayList<>(); List<ApproveRecord> recordList = new ArrayList<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes); ZipFile zipFile = new ZipFile(channel)) { @@ -249,6 +255,8 @@ d.setPartNo(jsonObject.getString("partNo")); d.setProcessEdition(jsonObject.getString("processEdition")); setBaseProperties(d,jsonObject); progList.add(d); } @@ -271,7 +279,27 @@ node.setParentIds(jsonObject.getString("parentIds")); node.setIsCured(jsonObject.getInteger("isCured")); setBaseProperties(node,jsonObject); nodeList.add(node); } } }else if(entryName.equals(NcProgramExportDNCService.APPROVE_RECORD_JSON_FILE)){ try (InputStream insJson = zipFile.getInputStream(entry)) { String jsonStr = IoUtil.readToString(insJson); JSONArray jsonArray = JSONArray.parseArray(jsonStr); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); ApproveRecord record = new ApproveRecord(); record.setId(jsonObject.getLong("id")); record.setNcProgramId(jsonObject.getLong("ncProgramId")); record.setUserId(jsonObject.getLong("userId")); record.setUserNickname(jsonObject.getString("userNickname")); record.setOperateResult(jsonObject.getString("operateResult")); record.setOperateTime(jsonObject.getDate("operateTime")); setBaseProperties(record,jsonObject); recordList.add(record); } } } @@ -327,5 +355,22 @@ } } for(ApproveRecord record:recordList) { ApproveRecord recordTemp = this.approveRecordService.getById(record.getId()); if (recordTemp == null) { approveRecordService.save(record); } else { approveRecordService.updateById(record); } } } void setBaseProperties(BizEntity entity,JSONObject jsonObject){ entity.setCreateTime(jsonObject.getDate("createTime")); entity.setUpdateTime(jsonObject.getDate("updateTime")); entity.setStatus(jsonObject.getInteger("status")); entity.setCreateUser(jsonObject.getLong("createUser")); entity.setUpdateUser(jsonObject.getLong("updateUser")); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
@@ -12,13 +12,20 @@ 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.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.oss.model.BladeFile; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; 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.entity.ApproveRecord; import org.springblade.mdm.flow.service.CureFlowService; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; @@ -32,6 +39,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; import java.time.LocalDateTime; import java.util.*; @@ -46,6 +54,13 @@ public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { private final CureFlowService cureFlowService; private final NcProgramService ncProgramService; private final NcNodeService ncNodeService; private final OssTemplate ossTemplate; private final BladeRedis bladeRedis; private String getFileKey(){ return "dncexpfile-"+ AuthUtil.getUserId(); } /** * dncåä¼ æä»¶ä¸ä¼ ï¼è§£æåä¿åå ¥uploadè¡¨ï¼ * @param file DNCåä¼ æä»¶ @@ -54,13 +69,15 @@ public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { List<DncSendBackData> list; try { //String fileName = file.getOriginalFilename(); BladeFile bfile = ossTemplate.putFile(file);//ä¸ä¼ ï¼ä¾åç»å ¥åºä½¿ç¨ //设置ä¸ä¸ªç¼åï¼2å°æ¶è¿æ bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2)); //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); InputStream zipFileInputStream = file.getInputStream();//test byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseDncZipFromByteArray(bytes); } catch (IOException e) { log.error("ä¸ä¼ dncåä¼ æä»¶å¤±è´¥",e); @@ -138,11 +155,6 @@ } } System.out.println("æä»¶å: " + entry.getName()); System.out.println("大å°: " + entry.getSize()); // 读åæä»¶å 容å°åèæ°ç» ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); } @@ -164,13 +176,13 @@ * @param ids idå表éå·åé * @return */ public void dncFileAccept(String ids) { public void dncFileAccept(String ids) throws IOException { List<Long> idList = Func.toLongList(ids); List<NcProgram> progList = ncProgramService.listByIds(idList); // NcProgramExchange exchange; //NcProgram program; //NcNode programNode; String pkgFileName = bladeRedis.get(getFileKey()); updateProgramData(pkgFileName,idList); List<NcProgram> progList = ncProgramService.listByIds(idList); for(NcProgram prog:progList){ exchange = new NcProgramExchange(); exchange.setName(prog.getName()); @@ -182,6 +194,143 @@ } cureFlowService.startCure(progList); } void updateProgramData(String pkgFileName,List<Long> idList) throws IOException { InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName); byte[] bytes = FileUtil.copyToByteArray(inputStream); List<NcNode> nodeList = new ArrayList<>(); List<NcProgram> progList = new ArrayList<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes); ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); String entryName = entry.getName(); if (entry.isDirectory()) { continue; } if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){ try (InputStream insJson = zipFile.getInputStream(entry)) { String jsonStr = IoUtil.readToString(insJson); JSONArray jsonArray = JSONArray.parseArray(jsonStr); for(int i=0;i<jsonArray.size();i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); NcProgram program = new NcProgram(); program.setId(jsonObject.getLong("id")); if(!idList.contains(program.getId())){//䏿¯éå®å ¥åºç continue; } program.setName(jsonObject.getString("name")); program.setCode(jsonObject.getString("code")); program.setDescription(jsonObject.getString("description")); program.setCategory(jsonObject.getString("category")); program.setBindNcNodeId(jsonObject.getLong("bindNcNodeId")); program.setIsLastEdition(jsonObject.getInteger("isLastEdition")); program.setIsLocked(jsonObject.getInteger("isLocked")); program.setIsTest(jsonObject.getInteger("isTest")); program.setMachineCode(jsonObject.getString("machineCode")); program.setNcNodeId(jsonObject.getLong("ncNodeId")); program.setPartNo(jsonObject.getString("partNo")); program.setProcessEdition(jsonObject.getString("processEdition")); setBaseProperties(program,jsonObject); progList.add(program); } } }else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){ try (InputStream insJson = zipFile.getInputStream(entry)) { String jsonStr = IoUtil.readToString(insJson); JSONArray jsonArray = JSONArray.parseArray(jsonStr); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); NcNode node = new NcNode(); node.setId(jsonObject.getLong("id")); node.setName(jsonObject.getString("name")); node.setDescription(jsonObject.getString("description")); node.setNodeType(jsonObject.getString("nodeType")); node.setProcessName(jsonObject.getString("processName")); node.setPartNo(jsonObject.getString("partNo")); node.setMachineCode(jsonObject.getString("machineCode")); node.setParentId(jsonObject.getLong("parentId")); node.setParentIds(jsonObject.getString("parentIds")); node.setIsCured(jsonObject.getInteger("isCured")); setBaseProperties(node,jsonObject); nodeList.add(node); } } } } } //ä¸ä¼ å缩å å çç¨åºå¹¶æ´æ°ç¨åºæä»¶å°å try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes); ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); String entryName = entry.getName(); if (!entry.isDirectory() && !NcProgramExportDNCService.isDataFile(entryName)) { for(NcProgram prog:progList){ if(prog.getName().equals(entryName)){ try (InputStream ncFileStream = zipFile.getInputStream(entry)) { BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream); prog.setOssName(bfile.getName()); prog.setUrl(bfile.getLink()); } break; } } } } } for(NcNode node:nodeList){ NcNode nodeTemp = this.ncNodeService.getById(node.getId()); if(nodeTemp == null){ ncNodeService.save(node); }else{ ncNodeService.updateById(node); } } for(NcProgram prog:progList){ NcProgram ncTemp = ncProgramService.getById(prog.getId()); if(ncTemp == null){ ncProgramService.save(prog); }else{ ncProgramService.updateById(prog); } } } void setBaseProperties(BizEntity entity, JSONObject jsonObject){ entity.setCreateTime(jsonObject.getDate("createTime")); entity.setUpdateTime(jsonObject.getDate("updateTime")); entity.setStatus(jsonObject.getInteger("status")); entity.setCreateUser(jsonObject.getLong("createUser")); entity.setUpdateUser(jsonObject.getLong("updateUser")); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -46,6 +46,7 @@ @Service @AllArgsConstructor public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { private final NcProgramService progService; private final NcProgramApprovedService approvedService; private final ApproveRecordService approveRecordService; @@ -54,6 +55,16 @@ public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json"; public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json"; public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json"; /** * æ¯å¦å缩å å çæ°æ®æä»¶ * @param filename æä»¶åç§° * @return */ public static boolean isDataFile(String filename){ return StringUtils.equals(filename, PROGRAM_JSON_FILE) || StringUtils.equals(filename, NODE_JSON_FILE) || StringUtils.equals(filename, APPROVE_RECORD_JSON_FILE); } /** * å页æ¥è¯¢ * @param query æ¥è¯¢åæ° blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -22,4 +22,6 @@ private String description; @Schema(description = "夿³¨") private String remark; @Schema(description = "åå»ºç¨æ·åç§°") private String createUserName; }