blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -4,6 +4,8 @@ import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.mdm.basesetting.machine.MachineService; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.flow.excution.AutoAssignUsersService; import org.springblade.mdm.flow.vo.TaskAssignVO; import org.springblade.mdm.program.entity.NcProgram; @@ -29,13 +31,26 @@ @Autowired private NcProgramService ncProgramService; @Autowired private MachineService machineService; /** * åºåæµç¨çkey */ private static final String PROCESS_KEY = "program-cure"; /** * å¯å¨åºåæµç¨ * @param programId ç¨åºid */ public void start(long programId){ Map<String, Object> vars = new HashMap<>(); NcProgram prog = ncProgramService.getById(programId); Machine machine = machineService.getByCode(prog.getMachineCode()); vars.put("machineCode",machine.getCode()); vars.put("machineMode",machine.getName()); vars.put("processEdition",prog.getProcessEdition()); //vars.put("processNo",startVO.getProcessNo());prog.getProcessEdition() //vars.put("processName",startVO.getProcessName()); /* Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO.getProducePlanId()); Map<String, Object> vars = new HashMap<>(preAssignee); blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
@@ -1,15 +1,20 @@ package org.springblade.mdm.program.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.mdm.basesetting.machine.vo.MachineVO; import org.springblade.mdm.program.service.DncSendBackService; import org.springblade.mdm.program.service.NcProgramExchangeService; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.program.vo.ProgramExchangeStatQueryVO; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -22,26 +27,40 @@ */ @NonDS @RestController @RequestMapping("/program") @RequestMapping("/program/dncsendback/") @AllArgsConstructor @Tag(name = "DNCåä¼ ç¨åºæ¥å£", description = "DNCåä¼ ç¨åºæ¥å£") @Slf4j public class DncSendBackController { private final DncSendBackService dncSendBackService; private final NcProgramExchangeService ncProgramExchangeService; /** * ä¸ä¼ DNCåä¼ æä»¶ * * @param file dncç¨åºæå æä»¶ */ @PostMapping("dnc-sendback-upload") @PostMapping("upload") @ApiOperationSupport(order = 1) @Operation(summary = "ä¸ä¼ DNCåä¼ æä»¶", description = "ä¼ å ¥æä»¶") public R<List<DncSendBackData>> dncSendBackUpload(@RequestParam MultipartFile file) { return R.data(dncSendBackService.dncSendBackUpload(file)); @Operation(summary = "ä¸ä¼ DNCåä¼ æä»¶", description = "åä¼ å¯¼å ¥") public R<Void> dncSendBackUpload(@RequestParam MultipartFile file) { try { ncProgramExchangeService.dncSendBackUpload(file); }catch (Exception e){ log.error("å¯¼å ¥é误",e); return R.fail(e.getMessage()); } return R.success(); } @PostMapping("dnc-sendback-accept") @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 = "å ¥åºï¼åæ¶å¯å¨åºåæµç¨") public R<Void> dncSendBackAccept(@RequestParam String ids) { blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgramExchange.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package org.springblade.mdm.program.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; import lombok.Setter; import org.springblade.core.mp.base.BizEntity; import java.time.LocalDate; import java.time.LocalDateTime; @Setter @Getter @TableName("mdm_nc_program_exchange") public class NcProgramExchange extends BizEntity { private String name; private int exchangeType; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramExchangeMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package org.springblade.mdm.program.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.mapper.BladeMapper; import org.springblade.core.mp.support.Query; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.vo.DncSendBackData; import java.util.List; public interface NcProgramExchangeMapper extends BladeMapper<NcProgramExchange> { IPage<DncSendBackData> dncSendBackpageQuery(IPage<Object> page, Query query); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramExchangeMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.springblade.mdm.program.mapper.NcProgramExchangeMapper"> <resultMap id="BaseResultMap" type="org.springblade.mdm.program.entity.NcProgramExchange"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="exchange_type" property="exchangeType"/> <result column="status" property="status"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="is_deleted" property="isDeleted"/> </resultMap> <select id="dncSendBackpageQuery" resultType="org.springblade.mdm.program.vo.DncSendBackData"> select e.id,e.name from mdm_nc_program_exchange e where e.is_deleted=0 and e.exchange_type=2 </select> </mapper> blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java
@@ -18,4 +18,11 @@ * @return */ NcProgram getCuredNcProgram(@Param("partNo")String partNo,@Param("machineGroupCode")String machineGroupCode); /** * æ ¹æ®ç¨åºåç§°ï¼è·åææ°çç¨åºå®ä½ * @param name ç¨åºåç§° * @return ncç¨åº */ NcProgram getLastNcProgram(String name); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml
@@ -43,4 +43,8 @@ order by create_time desc limit 1 </select> <select id="getLastNcProgram" resultType="org.springblade.mdm.program.entity.NcProgram"> select <include refid="all_columns"/> from mdm_nc_program where is_deleted=0 and is_last_edition=1 order by create_time desc limit 1 </select> </mapper> blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java
@@ -34,8 +34,13 @@ import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; import org.flowable.engine.*; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.FileUtil; import org.springblade.core.tool.utils.Func; 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; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -58,81 +63,16 @@ @AllArgsConstructor public class DncSendBackService { private final RepositoryService repositoryService; private final RuntimeService runtimeService; private final HistoryService historyService; private final ProcessEngine processEngine; /** * dncåä¼ æä»¶ä¸ä¼ * @param file * @return */ public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { List<DncSendBackData> list=new ArrayList<>(); try { String fileName = file.getOriginalFilename(); InputStream fileInputStream = file.getInputStream(); byte[] bytes = FileUtil.copyToByteArray(fileInputStream); list = parseDncZipFromByteArray(bytes); //TODO è§£æä¸ºå表æä»¶ DncSendBackData dt = new DncSendBackData(); dt.setId(1L); dt.setProgramName("test.nc"); dt.setProgramNo("001"); list.add(dt); } catch (IOException e) { log.error("ä¸ä¼ dncæä»¶å¤±è´¥",e); } return list; } public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { //List<DncSendBackData> datas = new ArrayList<>(); List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); //private final RepositoryService repositoryService; //private final RuntimeService runtimeService; //private final HistoryService historyService; //private final ProcessEngine processEngine; private final NcProgramService ncProgramService; private final CureFlowService cureFlowService; private final NcProgramExchangeMapper ncProgramExchangeMapper; /* try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { ZipArchiveEntry entry; while ((entry = zis.getNextZipEntry()) != null) { DncSendBackData prog = new DncSendBackData(); prog.setProgramName(entry.getName()); if (!entry.isDirectory()) { 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; } /** * å ¥åºåä¼ æä»¶,å¹¶å¯å¨åºåæµç¨ * @param ids @@ -140,43 +80,22 @@ */ public void dncFileAccept(String ids) { List<Long> idList = Func.toLongList(ids); NcProgramExchange exchange; NcProgram program; for (Long id : idList) { exchange = ncProgramExchangeMapper.selectById(id); exchange.setStatus(2);//å·²å ¥åºç¶æ program = ncProgramService.getLastNcProgram(exchange.getName()); //妿æ¯å·²ç»åºåçåä¸éè¦å¯å¨æµç¨ //å¯å¨åºåæµç¨ } } } 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)) { 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); //} if(program.getIsCured() !=1) {//æªåºåçç¨åºï¼å¯å¨åºåæµç¨ cureFlowService.start(program.getId()); } } return list; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,150 @@ package org.springblade.mdm.program.service; 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.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.mdm.basesetting.machine.vo.MachineVO; 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.util.ArrayList; import java.util.Enumeration; import java.util.List; /** * ä¸å/åä¼ ç¨åºç»è®¡ * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> { /** * dncåä¼ æä»¶ä¸ä¼ * @param file * @return */ public void dncSendBackUpload(MultipartFile file) { List<DncSendBackData> list=new ArrayList<>(); try { String fileName = file.getOriginalFilename(); InputStream fileInputStream = file.getInputStream(); byte[] bytes = FileUtil.copyToByteArray(fileInputStream); 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); } } public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { //List<DncSendBackData> datas = new ArrayList<>(); List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); /* try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { ZipArchiveEntry entry; while ((entry = zis.getNextZipEntry()) != null) { DncSendBackData prog = new DncSendBackData(); prog.setProgramName(entry.getName()); if (!entry.isDirectory()) { 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; } /** * ç¨åºä¸åç»è®¡å页æ¥è¯¢ * @param query æ¥è¯¢åæ° * @return */ public IPage<DncSendBackData> dncSendBackPageQuery(Query query) { IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query); 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)) { 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; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -72,6 +72,15 @@ } /** * æ¥è¯¢ç°æåºåçç¨åºï¼æå®æ¡ä»¶ï¼é¶ç»ä»¶å·ç¸åï¼ä¸æ¯å䏿ºåºç» * @param name ç¨åºåç§° * @return */ public NcProgram getLastNcProgram(String name) { return this.getBaseMapper().getLastNcProgram(name); } /** * ä¸ä¼ ç¨åºæä»¶å°æå®èç¹ * @param file * @param nodeId doc/sql/mdm/mdm.mysql.all.create.sql
@@ -76,8 +76,7 @@ `create_user` bigint DEFAULT NULL COMMENT 'å建人', `update_time` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´', `update_user` bigint DEFAULT NULL COMMENT 'æ´æ°äºº', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uniqueNameIndex` (`parent_id`,`name`,`is_deleted`) USING BTREE PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='ç¨åºèç¹ç®å½'; DROP TABLE IF EXISTS `mdm_nc_program`; @@ -114,7 +113,7 @@ `tenant_id` varchar(6) DEFAULT NULL COMMENT 'æå±ç§æ·', `name` varchar(100) NOT NULL COMMENT 'ç¨åºåç§°', `status` int DEFAULT NULL COMMENT 'ä¸å¡ç¶æ', `exchange_type` int DEFAULT NULL COMMENT '交æ¢ç±»å,1:ä¸å;2:åºå', `exchange_type` int DEFAULT NULL COMMENT '交æ¢ç±»å,1:ä¸å;2:åºå(dncåä¼ )', `create_dept` bigint DEFAULT NULL COMMENT 'å建åä½', `is_deleted` int DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT 'å建æ¶é´', @@ -122,7 +121,7 @@ `update_time` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´', `update_user` bigint DEFAULT NULL COMMENT 'æ´æ°äºº', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='æ°æ§ç¨åºä¸åè®°å½'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='æ°æ§ç¨åºäº¤æ¢è®°å½';