已修改13个文件
已删除1个文件
已添加11个文件
| | |
| | | <artifactId>spring-boot-devtools</artifactId> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springblade</groupId> |
| | | <artifactId>blade-core-test</artifactId> |
| | | <scope>test</scope> |
| | | </dependency> |
| | | <!--<dependency> |
| | | <groupId>org.springblade</groupId> |
| | | <artifactId>blade-starter-transaction</artifactId> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.commons.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | |
| | | import java.util.Date; |
| | | |
| | | @Setter |
| | | @Getter |
| | | public class IdsVO { |
| | | @Schema(description = "idæ°ç»") |
| | | private Long[] ids; |
| | | |
| | | } |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.flowable.engine.TaskService; |
| | | import org.flowable.task.api.Task; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.support.Kv; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springblade.mdm.flow.entity.ApproveRecord; |
| | | import org.springblade.mdm.flow.excution.StartDispatcher; |
| | | import org.springblade.mdm.flow.service.ApproveRecordService; |
| | | import org.springblade.mdm.flow.vo.TaskAssignVO; |
| | | import org.springblade.mdm.program.service.ProcessProgRefService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Slf4j |
| | |
| | | private TaskService taskService; |
| | | @Autowired |
| | | private ProcessProgRefService processProgRefService; |
| | | |
| | | @Autowired |
| | | private ApproveRecordService approveRecordService; |
| | | /** |
| | | * æ°å¢ |
| | | */ |
| | |
| | | |
| | | //å å
¥å®¡æ¹ç¨æ· |
| | | variables.put("approveUserNickName",AuthUtil.getNickName()); |
| | | |
| | | if(variables.containsKey("assignee")){ |
| | | addApproveRecord(taskId,processInstanceId,comment,programIds,variables); |
| | | //æå®äºä¸ä¸æ¥æ§è¡äºº |
| | | taskService.complete(taskId, variables); |
| | | |
| | | return R.success("æµç¨æäº¤æå"); |
| | | }else { |
| | | // 宿任å¡,ç»é»è®¤ç¨æ· |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | void addApproveRecord(String taskId, String processInstanceId, String comment,String programIds,Map<String, Object> variables){ |
| | | List<Long> programIdList = new ArrayList<>(); |
| | | if(programIds != null){ |
| | | programIdList = Func.toLongList(programIds); |
| | | }else{ |
| | | programIdList.add(null); |
| | | } |
| | | Task task = taskService.createTaskQuery() |
| | | .taskId(taskId) |
| | | .singleResult(); |
| | | for(Long programId : programIdList){ |
| | | ApproveRecord rec = new ApproveRecord(); |
| | | rec.setTaskName(task.getName()); |
| | | rec.setComment(comment); |
| | | rec.setNcProgramId(programId); |
| | | rec.setOperateResult(variables.get("approve")+"");//审æ¹ç»æ |
| | | rec.setOperateTime(DateUtil.now()); |
| | | rec.setProcessInstanceId(processInstanceId); |
| | | rec.setUserId(AuthUtil.getUserId()); |
| | | rec.setUserNickname(AuthUtil.getNickName()); |
| | | |
| | | approveRecordService.save(rec); |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.mdm.basesetting.machine.vo.MachineExcelVO; |
| | | import org.springblade.mdm.flow.service.ApproveRecordService; |
| | | import org.springblade.mdm.flow.service.FlowBusinessService; |
| | | import org.springblade.mdm.flow.vo.FlowVO; |
| | | import org.springblade.mdm.flow.vo.OvertimeTaskExcelVO; |
| | |
| | | |
| | | @Autowired |
| | | private HistoryService historyService; |
| | | |
| | | |
| | | @GetMapping("overtime-list") |
| | | @ApiOperationSupport(order = 3) |
| | |
| | | } |
| | | |
| | | |
| | | @Operation(summary = "æµç¨è½¨è¿¹", description = "æµç¨è½¨è¿¹") |
| | | @Operation(summary = "æµç¨æ§è¡è½¨è¿¹", description = "æµç¨æ§è¡è½¨è¿¹") |
| | | @GetMapping("process-trace") |
| | | public R<List<TaskTraceVO>> processTrace(String processInstanceId){ |
| | | List<TaskTraceVO> result = new ArrayList<>(); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.flow.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.util.Date; |
| | | |
| | | /** |
| | | * æ°æ§ç¨åºå®¡æ¹è®°å½ |
| | | */ |
| | | @Setter |
| | | @Getter |
| | | @TableName("mdm_approve_record") |
| | | public class ApproveRecord extends BizEntity { |
| | | |
| | | private String processInstanceId; |
| | | |
| | | /** |
| | | * ä»»å¡åç§° |
| | | */ |
| | | private String taskName; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String comment; |
| | | /** |
| | | * æ°æ§ç¨åºidï¼è¿ä¸ªå¯è½ä¸éè¦ï¼å¯ä»¥æ ¹æ®å
³è表mdm_process_prog_refæ¥è·å |
| | | */ |
| | | private Long ncProgramId; |
| | | |
| | | private Long userId; |
| | | |
| | | /** |
| | | * 审æ¹ç¨æ·å§å |
| | | */ |
| | | private String userNickname; |
| | | |
| | | /** |
| | | * è¿ææ¥æ |
| | | */ |
| | | private Date operateTime; |
| | | |
| | | /** |
| | | * èç¹ç±»åï¼åå
¸ |
| | | */ |
| | | private String operateResult; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.flow.mapper; |
| | | |
| | | import org.springblade.core.mp.mapper.BladeMapper; |
| | | import org.springblade.mdm.flow.entity.ApproveRecord; |
| | | import org.springblade.mdm.flow.vo.ApproveRecordVO; |
| | | import org.springblade.mdm.program.entity.NcNode; |
| | | import org.springblade.mdm.program.vo.NcNodeVO; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface ApproveRecordMapper extends BladeMapper<ApproveRecord> { |
| | | List<ApproveRecordVO> listByNcProgramId(Long ncProgramId); |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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.flow.mapper.ApproveRecordMapper"> |
| | | <resultMap id="BaseResultMap" type="org.springblade.mdm.flow.entity.ApproveRecord"> |
| | | <id column="id" property="id"/> |
| | | <result column="status" property="status"/> |
| | | <result column="create_time" property="createTime"/> |
| | | <result column="update_time" property="updateTime"/> |
| | | <result column="is_deleted" property="isDeleted"/> |
| | | </resultMap> |
| | | |
| | | |
| | | |
| | | <sql id="all_columns">id,tenant_id,nc_program_id,process_instances_id,operate_time,operate_result,user_id,user_nickname,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql> |
| | | <select id="listByNcProgramId" resultType="org.springblade.mdm.flow.vo.ApproveRecordVO"> |
| | | select <include refid="all_columns"/> FROM mdm_approve_record |
| | | WHERE nc_program_id = ${ncProgramId} and is_deleted = 0 order by create_time desc |
| | | |
| | | </select> |
| | | |
| | | </mapper> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | package org.springblade.mdm.flow.service; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springblade.core.mp.base.BizServiceImpl; |
| | | import org.springblade.mdm.flow.entity.ApproveRecord; |
| | | import org.springblade.mdm.flow.mapper.ApproveRecordMapper; |
| | | import org.springblade.mdm.flow.vo.ApproveRecordVO; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 审æ¹è®°å½ï¼ç¨äºæ¥è¯¢æ§è¡è½¨è¿¹ |
| | | * |
| | | * @author yangys |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class ApproveRecordService extends BizServiceImpl<ApproveRecordMapper, ApproveRecord> { |
| | | |
| | | public List<ApproveRecordVO> listByNcProgramId(Long ncProgramId) { |
| | | return this.getBaseMapper().listByNcProgramId(ncProgramId); |
| | | } |
| | | } |
| | |
| | | */ |
| | | public void start(long programId){ |
| | | Map<String, Object> vars = new HashMap<>(); |
| | | //NcProgram prog = ncProgramService.getById(programId); |
| | | NcProgram prog = ncProgramService.getById(programId); |
| | | NcNode progNode = ncNodeService.getById(programId); |
| | | Machine machine = machineService.getByCode(progNode.getMachineCode()); |
| | | vars.put("machineCode",machine.getCode()); |
| | | vars.put("machineMode",machine.getName()); |
| | | vars.put("processEdition",progNode.getProcessEdition()); |
| | | vars.put("processEdition",prog.getProcessEdition()); |
| | | vars.put("programId",programId); |
| | | vars.put("program",progNode); |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.flow.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Getter; |
| | | import lombok.Setter; |
| | | import org.springblade.core.mp.base.BizEntity; |
| | | import org.springblade.mdm.commons.vo.BaseVO; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æ°æ§ç¨åºå®¡æ¹è®°å½ |
| | | */ |
| | | @Setter |
| | | @Getter |
| | | public class ApproveRecordVO extends BaseVO { |
| | | |
| | | private String processInstanceId; |
| | | /** |
| | | * æ°æ§ç¨åºid |
| | | */ |
| | | @Schema(description = "æ°æ§ç¨åºid") |
| | | private Long ncProgramId; |
| | | @Schema(description = "ç¨æ·id") |
| | | private Long userId; |
| | | |
| | | |
| | | @Schema(description = "审æ¹ç¨æ·å§å") |
| | | private String userNickname; |
| | | |
| | | |
| | | @Schema(description = "å®¡æ¹æ¥æ") |
| | | private Date operateTime; |
| | | |
| | | |
| | | @Schema(description = "审æ¹ç»æ") |
| | | private String operateResult; |
| | | |
| | | } |
| | |
| | | private LocalDate planStartTime; |
| | | @Schema(description = "主å¶å工表ID") |
| | | private long producePlanId; |
| | | |
| | | } |
| | |
| | | */ |
| | | @PostMapping("upload") |
| | | @ApiOperationSupport(order = 1) |
| | | @Operation(summary = "ä¸ä¼ æä»¶", description = "ä¸ä¼ DNCåä¼ æä»¶") |
| | | @Operation(summary = "DNCåä¼ æä»¶å¯¼å
¥ï¼ä¸ä¼ æä»¶", description = "ä¸ä¼ DNCåä¼ æä»¶") |
| | | public R<Void> dncSendBackUpload(@RequestParam MultipartFile file) { |
| | | try { |
| | | ncProgramExchangeService.dncSendBackUpload(file); |
| | |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.task.Comment; |
| | | import org.flowable.task.api.history.HistoricTaskInstance; |
| | | import org.springblade.core.tenant.annotation.NonDS; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.mdm.flow.service.ApproveRecordService; |
| | | import org.springblade.mdm.flow.vo.ApproveRecordVO; |
| | | import org.springblade.mdm.flow.vo.TaskTraceVO; |
| | | import org.springblade.mdm.program.entity.NcProgram; |
| | | import org.springblade.mdm.program.service.NcProgramService; |
| | | import org.springblade.mdm.program.service.ProcessProgRefService; |
| | | import org.springblade.mdm.program.vo.NcNodeProgramQueryVO; |
| | | import org.springblade.mdm.program.vo.NcProgramUploadVO; |
| | | import org.springblade.mdm.program.vo.NcProgramVO; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | |
| | | private final NcProgramService ncProgramService; |
| | | private final ProcessProgRefService ncProcessProgRefService; |
| | | |
| | | private final ApproveRecordService approveRecordService; |
| | | |
| | | @PostMapping("/upload") |
| | | @Operation(summary = "ä¸ä¼ æä»¶", description = "ä¸ä¼ ç¨åº/éä»¶æä»¶") |
| | | public R<Boolean> upload(NcProgramUploadVO uploadVO) { |
| | |
| | | public R<List<NcProgramVO>> listByProcess(@Parameter(description="æå±èç¹ID")@RequestParam String processInstanceId) { |
| | | return R.data(ncProcessProgRefService.listByProcess(processInstanceId)); |
| | | } |
| | | |
| | | @Operation(summary = "æä½æ¥å¿", description = "ç¨åºæä½æ¥å¿ï¼å³å®¡æ¹è®°å½ï¼å¨ä¸»é¡µç¹å»æä¸ä¸ªç¨åºåç䏿¹æ ç¾æ¾ç¤º") |
| | | @GetMapping("approve-records") |
| | | public R<List<ApproveRecordVO>> processTrace1(@Parameter(description = "ç¨åºid") Long ncProgramId){ |
| | | List<TaskTraceVO> result = new ArrayList<>(); |
| | | |
| | | return R.data(approveRecordService.listByNcProgramId(ncProgramId)); |
| | | } |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.core.tenant.annotation.NonDS; |
| | | 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.NcProgramService; |
| | | import org.springblade.mdm.program.vo.NcNodeProgramQueryVO; |
| | | import org.springblade.mdm.program.vo.NcProgramExportDncPageVO; |
| | | import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO; |
| | | import org.springblade.mdm.program.vo.NcProgramVO; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * ç¨åºæ¶å¯ç½-å·¥æ§ç½äº¤æ¢æ¥å£ |
| | |
| | | |
| | | @PostMapping("/export-dnc") |
| | | @Operation(summary = "æ°æ§ç¨åºå¯¼åºdnc", description = "æ°æ§ç¨åºå¯¼åºå°å·¥æ§ç½") |
| | | public void exportDnc(Long nodeId, HttpServletResponse response) { |
| | | public void exportDnc(@RequestBody @Parameter(description = "审æ¹è¡¨idæ°ç»") IdsVO vo, HttpServletResponse response) { |
| | | if(vo.getIds() == null || vo.getIds().length == 0) { |
| | | throw new ServiceException("æªéæ©æä»¶å¯¼åº"); |
| | | } |
| | | try { |
| | | ncProgramApprovedService.exportDnc(vo.getIds(),response.getOutputStream()); |
| | | } catch (IOException e) { |
| | | log.error("导åºDNCå¼å¸¸", e); |
| | | throw new RuntimeException(e); |
| | | } |
| | | |
| | | //return R.<Boolean>status(true); |
| | | } |
| | | |
| | | } |
| | |
| | | /** |
| | | * å·¥åºç次 |
| | | */ |
| | | private String processEdition; |
| | | //private String processEdition; |
| | | |
| | | /** |
| | | * å·¥èºç次 |
| | | */ |
| | | private String craftEdition; |
| | | //private String craftEdition; |
| | | /** |
| | | * é¶ç»ä»¶å·/å¾å· |
| | | */ |
| | |
| | | /** |
| | | * å¾å·ç次 |
| | | */ |
| | | private String partNoEdition; |
| | | //private String partNoEdition; |
| | | |
| | | /** |
| | | * æ¯å¦åºå |
| | |
| | | /** |
| | | * è¿ææ¥æ |
| | | */ |
| | | private LocalDate expireDate; |
| | | //private LocalDate expireDate; |
| | | /** |
| | | * æ¯å¦éå® |
| | | */ |
| | | private Integer isLocked; |
| | | //private Integer isLocked; |
| | | /** |
| | | * èç¹ç±»åï¼åå
¸ |
| | | */ |
| | |
| | | |
| | | 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.ZipUtil; |
| | | 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.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.mapper.NcProgramApprovedMapper; |
| | | import org.springblade.mdm.program.vo.DncSendBackData; |
| | | import org.springblade.mdm.program.vo.NcProgramExportDncPageVO; |
| | | import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO; |
| | | import org.springblade.mdm.utils.CustomBinaryWriter; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.OutputStream; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.zip.ZipEntry; |
| | | import java.util.zip.ZipOutputStream; |
| | | |
| | | /** |
| | | * ä¸å/åä¼ ç¨åºç»è®¡ |
| | |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class NcProgramApprovedService extends BizServiceImpl<NcProgramApprovedMapper, NcProgramApproved> { |
| | | |
| | | |
| | | private final NcProgramService progService; |
| | | private final OssTemplate ossTemplate; |
| | | private final ApproveRecordService approvedService; |
| | | private final NcNodeService ncNodeService; |
| | | /** |
| | | * å页æ¥è¯¢ |
| | | * @param query æ¥è¯¢åæ° |
| | |
| | | return page; |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 导åº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 { |
| | | // |
| | | addApproveRecordDataJson(zipOut, programIdList); |
| | | |
| | | addNcNodeDataJson(zipOut, programIdList); |
| | | } |
| | | |
| | | /** |
| | | * 导å
¥å®¡æ¹è®°å½ |
| | | * @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<NcNode> nodeList = new ArrayList<>(); |
| | | for(NcProgram program : programs){ |
| | | JSONObject recObj = new JSONObject(); |
| | | NcNode ncNode = ncNodeService.getById(program.getNcNodeId()); |
| | | |
| | | nodeList.add(ncNode); |
| | | |
| | | } |
| | | |
| | | for(NcNode node : nodeList){ |
| | | JSONObject recObj = new JSONObject(); |
| | | |
| | | recObj.put("id", node.getId()); |
| | | recObj.put("nodeType", node.getNodeType()); |
| | | recObj.put("machineCode",node.getMachineCode()); |
| | | |
| | | addSuperProperties(recObj,node); |
| | | } |
| | | addInputStreamToZip(zipOut,new ByteArrayInputStream(jsonArray.toJSONString().getBytes(StandardCharsets.UTF_8)),"exp_mdm_nc_node.json"); |
| | | } |
| | | |
| | | void addSuperProperties(JSONObject recObj, BizEntity entity){ |
| | | 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(); |
| | | } |
| | | } |
| | | |
| | |
| | | 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.springblade.mdm.utils.CustomBinaryReader; |
| | | import org.springblade.mdm.utils.FileExchangeUtil; |
| | | 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.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; |
| | | |
| | | /** |
| | | * ä¸å/åä¼ ç¨åºç»è®¡ |
| | | * ç¨åºäº¤æ¢ï¼dnc导å
¥/导åºï¼ |
| | | * |
| | | * @author yangys |
| | | */ |
| | |
| | | |
| | | /** |
| | | * dncåä¼ æä»¶ä¸ä¼ |
| | | * @param file |
| | | * @param file æä»¶ |
| | | * @return |
| | | */ |
| | | public void dncSendBackUpload(MultipartFile file) { |
| | | List<DncSendBackData> list=new ArrayList<>(); |
| | | public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { |
| | | List<DncSendBackData> list ; |
| | | try { |
| | | String fileName = file.getOriginalFilename(); |
| | | InputStream fileInputStream = file.getInputStream(); |
| | | |
| | | byte[] bytes = FileUtil.copyToByteArray(fileInputStream); |
| | | //InputStream fileInputStream = file.getInputStream(); |
| | | InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); |
| | | byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); |
| | | list = parseDncZipFromByteArray(bytes); |
| | | for(DncSendBackData dncSendBackData:list){ |
| | | NcProgramExchange exchange=new NcProgramExchange(); |
| | |
| | | |
| | | } catch (IOException e) { |
| | | log.error("ä¸ä¼ dncæä»¶å¤±è´¥",e); |
| | | list = Collections.emptyList(); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | InputStream convertFileToZip(InputStream inputStream) throws IOException { |
| | | |
| | | File tempFile = createTempFile(); |
| | | FileOutputStream fos = new FileOutputStream(tempFile); |
| | | CustomBinaryReader.read(inputStream,fos); |
| | | |
| | | |
| | | FileInputStream dInstream = new FileInputStream(tempFile); |
| | | |
| | | return dInstream; |
| | | } |
| | | |
| | | /** |
| | | * å建ä¸ä¸ªä¸´æ¶æä»¶ |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | | File createTempFile() throws IOException { |
| | | Path tempDir = Paths.get(System.getProperty("java.io.tmpdir")); |
| | | // å¨ä¸´æ¶ç®å½ä¸å建æä»¶ |
| | | String tfilename = "t"+System.currentTimeMillis(); |
| | | Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp"); |
| | | System.out.println("å建çä¸´æ¶æä»¶: " + tempFile); |
| | | return tempFile.toFile(); |
| | | } |
| | | public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { |
| | | //List<DncSendBackData> datas = new ArrayList<>(); |
| | | List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); |
| | |
| | | * @param query æ¥è¯¢åæ° |
| | | * @return |
| | | */ |
| | | |
| | | public IPage<DncSendBackData> dncSendBackPageQuery(Query query) { |
| | | |
| | | IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.utils; |
| | | |
| | | import java.io.*; |
| | | import java.util.Arrays; |
| | | |
| | | public class CustomBinaryReader { |
| | | /** |
| | | * ä»è¾å
¥æµè¯»åæ°æ®å°è¾åºæµ |
| | | * @param inputStream |
| | | * @param os |
| | | * @throws IOException |
| | | */ |
| | | public static void read(InputStream inputStream, OutputStream os) throws IOException { |
| | | byte[] buffer = new byte[1024]; |
| | | try (DataInputStream in = new DataInputStream( |
| | | new BufferedInputStream(inputStream))) { |
| | | |
| | | // 读åå¹¶éªè¯Magic Number |
| | | byte[] magic = new byte[4]; |
| | | in.readFully(magic); |
| | | if (!Arrays.equals(magic, CustomBinaryWriter.MAGIC_NUMBER)) { |
| | | throw new RuntimeException("䏿¯ææçèªå®ä¹æä»¶æ ¼å¼"); |
| | | } |
| | | |
| | | // 读åçæ¬å· |
| | | short version = in.readShort(); |
| | | if (version > CustomBinaryWriter.VERSION) { |
| | | throw new RuntimeException("䏿¯æççæ¬: " + version); |
| | | } |
| | | |
| | | while(in.read(buffer) != -1){ |
| | | os.write(buffer); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.utils; |
| | | import java.io.*; |
| | | import java.nio.ByteBuffer; |
| | | import java.nio.ByteOrder; |
| | | public class CustomBinaryWriter { |
| | | static final byte[] MAGIC_NUMBER = {'M', 'D', 'M', '1'}; |
| | | static final short VERSION = 1; |
| | | |
| | | /** |
| | | * å°è¾å
¥æµä¸çå
容åå
¥è¾åºæµ |
| | | * @param outputStream |
| | | * @param ins |
| | | * @throws IOException |
| | | */ |
| | | public static void write(OutputStream outputStream, InputStream ins) throws IOException { |
| | | byte[] buffer = new byte[1024]; |
| | | try (DataOutputStream out = new DataOutputStream(outputStream)) { |
| | | |
| | | // åå
¥æä»¶å¤´ |
| | | out.write(MAGIC_NUMBER); |
| | | out.writeShort(VERSION); |
| | | |
| | | while(ins.read(buffer) != -1) { |
| | | out.write(buffer); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.utils; |
| | | |
| | | import java.io.*; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | |
| | | public class FileExchangeUtil { |
| | | |
| | | public static InputStream convertFileToZip(InputStream inputStream) throws IOException { |
| | | |
| | | File tempFile = createTempFile(); |
| | | FileOutputStream fos = new FileOutputStream(tempFile); |
| | | CustomBinaryReader.read(inputStream,fos); |
| | | |
| | | |
| | | FileInputStream dInstream = new FileInputStream(tempFile); |
| | | |
| | | return dInstream; |
| | | } |
| | | |
| | | public static File createTempFile() throws IOException { |
| | | Path tempDir = Paths.get(System.getProperty("java.io.tmpdir")); |
| | | // å¨ä¸´æ¶ç®å½ä¸å建æä»¶ |
| | | String tfilename = "t"+System.currentTimeMillis(); |
| | | Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp"); |
| | | System.out.println("å建çä¸´æ¶æä»¶: " + tempFile); |
| | | return tempFile.toFile(); |
| | | } |
| | | } |
| | |
| | | <process id="dispatch" name="任塿´¾å·¥" isExecutable="true"> |
| | | <startEvent id="start" name="å¼å§"/> |
| | | <sequenceFlow id="sid-c1619263-d1ff-4106-9315-f9ab9a3bee71" sourceRef="start" targetRef="teamLeaderTask"/> |
| | | <userTask id="teamLeaderTask" name="ä¸ä¸ç»é¿" flowable:assignee="${teamLeader}"/> |
| | | <userTask id="programmingTask" name="ç¼å¶" flowable:assignee="${assignee}"/> |
| | | <userTask id="check" name="æ ¡å¯¹" flowable:assignee="${assignee}"/> |
| | | <userTask id="approveTask" name="é«å¸å®¡æ¹" flowable:assignee="${assignee}"/> |
| | | <userTask id="teamLeaderTask" name="ä»»å¡åæ´¾" flowable:assignee="${teamLeader}"> |
| | | <documentation>ä¸ä¸ç»é¿ä»»å¡åæ´¾</documentation> |
| | | </userTask> |
| | | <userTask id="programmingTask" name="æ°æ§ç¨åºç¼å" flowable:assignee="${assignee}"/> |
| | | <userTask id="check" name="æ°æ§ç¨åºæ ¡å¯¹" flowable:assignee="${assignee}"/> |
| | | <userTask id="approveTask" name="æ°æ§ç¨åºå®¡æ¹" flowable:assignee="${assignee}"> |
| | | <documentation>é«å¸æ°æ§ç¨åºå®¡æ¹</documentation> |
| | | </userTask> |
| | | <endEvent id="approveEnd" name="审æ¹å®æ"> |
| | | <extensionElements> |
| | | <flowable:executionListener expression="${dispatchFinishListener.handle(execution)}" event="end"/> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.utils; |
| | | |
| | | import org.junit.jupiter.api.Test; |
| | | |
| | | import java.io.FileInputStream; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | |
| | | public class CustomBinaryReaderTest { |
| | | //@Test |
| | | public void testRead() throws IOException { |
| | | FileInputStream fis = new FileInputStream("d:/myd.bin"); |
| | | FileOutputStream fos = new FileOutputStream("d:/ddddreadout.zip"); |
| | | |
| | | CustomBinaryReader.read(fis,fos); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.springblade.mdm.utils; |
| | | |
| | | import org.junit.jupiter.api.Test; |
| | | |
| | | import java.io.FileInputStream; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | |
| | | public class CustomBinaryWriterTest { |
| | | //@Test |
| | | public void testWrite() throws IOException { |
| | | FileOutputStream fos = new FileOutputStream("d:/myd.bin"); |
| | | FileInputStream fis = new FileInputStream("d:/dddd.zip"); |
| | | CustomBinaryWriter.write(fos,fis); |
| | | } |
| | | } |
| | |
| | | `code` varchar(100) NULL COMMENT 'ç¨åºç¼å·', |
| | | `name` varchar(100) NOT NULL COMMENT 'ç¨åºåç§°', |
| | | `oss_name` varchar(100) NULL COMMENT 'ossä¸çæä»¶å', |
| | | `category` varchar(2) NULL COMMENT 'æä»¶åç±»', |
| | | `category` varchar(20) NULL COMMENT 'æä»¶åç±»', |
| | | `process_name` varchar(20) NULL COMMENT 'å·¥åºåç§°', |
| | | `remark` varchar(100) NULL COMMENT '夿³¨', |
| | | `is_text_file` int DEFAULT NULL COMMENT 'æ¯å¦ææ¬æä»¶', |
| | | `url` varchar(400) NOT NULL COMMENT 'æä»¶å°å', |
| | | `machine_code` varchar(100) DEFAULT NULL COMMENT '设å¤ç¼å·/æºåºç¼å·', |
| | | `part_no` varchar(100) NULL COMMENT 'é¶ç»ä»¶ç¼å·/å¾å·', |
| | | `part_no_edition` varchar(100) NULL COMMENT 'å¾å·ç次', |
| | | `craft_edition` varchar(20) NULL COMMENT 'è®¾è®¡çæ¬¡', |
| | | `description` varchar(100) NULL COMMENT 'æè¿°', |
| | | `is_cured` int DEFAULT NULL COMMENT 'æ¯å¦åºå,1æ¯;0å¦', |
| | | `expire_date` date DEFAULT NULL COMMENT 'å°ææ¶é´,æ ¹æ®ææææ¶é¿è®¡ç®èæ¥', |
| | | `process_edition` varchar(40) DEFAULT NULL COMMENT 'å·¥åºç次ï¼åçå°±æ¯åæ´æ¹è¯¥å段ï¼éè¦ä¿çåå²è®°å½', |
| | |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='æ°æ§ç¨åº'; |
| | | |
| | | /** |
| | | æµç¨å®¡æ¹è®°å½è¡¨ï¼å®¡æ¹è¿ç¨ä¸è®°å½ |
| | | */ |
| | | DROP TABLE IF EXISTS `mdm_approve_record`; |
| | | CREATE TABLE `mdm_approve_record` ( |
| | | `id` bigint NOT NULL, |
| | | `tenant_id` varchar(6) DEFAULT NULL COMMENT 'æå±ç§æ·', |
| | | `nc_program_id` bigint NULL COMMENT 'ç¨åºidãæªéæ©ç¨åºä¹åæ¯null', |
| | | `process_instance_id` varchar(64) DEFAULT NULL COMMENT 'æµç¨å®ä¾id', |
| | | `task_name` varchar(100) DEFAULT NULL COMMENT 'ä»»å¡åç§°', |
| | | `operate_time` datetime DEFAULT NULL COMMENT 'å®¡æ¹æ¶é´', |
| | | `operate_result` varchar(20) DEFAULT NULL COMMENT '审æ¹ç»æ', |
| | | `user_id` bigint NOT NULL COMMENT '审æ¹ç¨æ·id', |
| | | `user_nickname` varchar(100) NOT NULL COMMENT '审æ¹ç¨æ·å§å', |
| | | `comment` varchar(100) NOT NULL COMMENT '审æ¹å¤æ³¨', |
| | | `status` int DEFAULT NULL COMMENT 'ä¸å¡ç¶æ', |
| | | `create_dept` bigint DEFAULT NULL COMMENT 'å建åä½', |
| | | `is_deleted` int DEFAULT NULL, |
| | | `create_time` datetime DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | `create_user` bigint DEFAULT NULL COMMENT 'å建人', |
| | | `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='æ°æ§ç¨åºå®¡æ¹è®°å½'; |
| | | |
| | | |
| | | DROP TABLE IF EXISTS `mdm_nc_program_approved`; |
| | | CREATE TABLE `mdm_nc_program_approved` ( |
| | | `id` bigint NOT NULL, |
| | | `tenant_id` varchar(6) DEFAULT NULL COMMENT 'æå±ç§æ·', |
| | | `program_name` varchar(100) NOT NULL COMMENT 'ç¨åºåç§°', |
| | | `program_id` bigint NOT NULL COMMENT 'ç¨åºid,æåææ°çç¨åºè®°å½', |
| | | `nc_program_id` bigint NOT NULL COMMENT 'ç¨åºid,æåææ°çç¨åºè®°å½', |
| | | `status` int DEFAULT NULL COMMENT 'ä¸å¡ç¶æ', |
| | | `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 'å建æ¶é´', |