package com.qianwen.smartman.modules.fms.service.impl; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import org.apache.commons.io.IOUtils; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.redis.cache.BladeRedis; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.constant.ExtCacheConstant; import com.qianwen.smartman.modules.cps.entity.CommonGroup; import com.qianwen.smartman.modules.cps.enums.WorkTypeEnum; import com.qianwen.smartman.modules.cps.service.ICommonGroupService; import com.qianwen.smartman.modules.cps.service.IProductionCraftVersionService; import com.qianwen.smartman.modules.cps.service.IWorkstationService; import com.qianwen.smartman.modules.cps.vo.CraftVersionLineVO; import com.qianwen.smartman.modules.cps.vo.WorkstationVO; import com.qianwen.smartman.modules.dnc.entity.DncArtFile; import com.qianwen.smartman.modules.dnc.service.IDncArtFileService; import com.qianwen.smartman.modules.fms.dto.ProgramDmpStrDto; import com.qianwen.smartman.modules.fms.dto.ProgramIssuanceDTO; import com.qianwen.smartman.modules.fms.entity.FmsOrder; import com.qianwen.smartman.modules.fms.entity.FmsOrderProcess; import com.qianwen.smartman.modules.fms.enums.FmsOrderEnum; import com.qianwen.smartman.modules.fms.forestClient.FmsForestClient; import com.qianwen.smartman.modules.fms.mapper.FmsOrderMapper; import com.qianwen.smartman.modules.fms.mapper.FmsOrderProcessMapper; import com.qianwen.smartman.modules.fms.service.IFmsOrderProcessService; import com.qianwen.smartman.modules.fms.vo.FmsWorkStationProcessVO; import com.qianwen.smartman.modules.fms.vo.FmsWorkStationVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/fms/service/impl/FmsOrderProcessServiceImpl.class */ public class FmsOrderProcessServiceImpl extends BaseServiceImpl implements IFmsOrderProcessService { private final FmsOrderMapper fmsOrderMapper; private final IProductionCraftVersionService productionCraftVersionService; private final IWorkstationService workstationService; private final ICommonGroupService commonGroupService; private final OssBuilder ossBuilder; private final IDncArtFileService artFileService; private final BladeRedis bladeRedis; private final FmsForestClient fmsForestClient; public FmsOrderProcessServiceImpl(final FmsOrderMapper fmsOrderMapper, final IProductionCraftVersionService productionCraftVersionService, final IWorkstationService workstationService, final ICommonGroupService commonGroupService, final OssBuilder ossBuilder, final IDncArtFileService artFileService, final BladeRedis bladeRedis, final FmsForestClient fmsForestClient) { this.fmsOrderMapper = fmsOrderMapper; this.productionCraftVersionService = productionCraftVersionService; this.workstationService = workstationService; this.commonGroupService = commonGroupService; this.ossBuilder = ossBuilder; this.artFileService = artFileService; this.bladeRedis = bladeRedis; this.fmsForestClient = fmsForestClient; } @Override // org.springblade.modules.fms.service.IFmsOrderProcessService public List listWorkstation(String orderId) { List fmsOrderProcesses = this.baseMapper.selectList(Wrappers.query().lambda().eq(FmsOrderProcess::getOrderId, orderId)); /* List fmsOrderProcesses = ((FmsOrderProcessMapper) this.baseMapper).selectList((Wrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getOrderId(); }, orderId));*/ FmsOrder fmsOrder = this.fmsOrderMapper.selectOne(Wrappers.query().lambda().eq(FmsOrder::getId, orderId)); /* FmsOrder fmsOrder = (FmsOrder) this.fmsOrderMapper.selectOne((Wrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getId(); }, orderId));*/ CraftVersionLineVO craftVersionLineVO = this.productionCraftVersionService.detailVersion(fmsOrder.getCraftVersionId()); String groupIds = craftVersionLineVO.getGroupId(); String[] groupSplit = groupIds.split(","); List commonGroupIds = this.commonGroupService.list(Wrappers.query().lambda().in(CommonGroup::getId, (Object[])groupSplit)).stream().filter(commonGroup -> commonGroup.getGroupTag().equals(FmsOrderEnum.FMS_BELTLINE.getCode())).map(CommonGroup::getId).collect(Collectors.toList()); /* List commonGroupIds = (List) this.commonGroupService.list((Wrapper) Wrappers.query().lambda().in((v0) -> { return v0.getId(); }, groupSplit)).stream().filter(commonGroup -> { return commonGroup.getGroupTag().equals(FmsOrderEnum.FMS_BELTLINE.getCode()); }).map((v0) -> { return v0.getId(); }).collect(Collectors.toList());*/ List listGroupIds = new ArrayList<>(); for (Long groupId : commonGroupIds) { listGroupIds.addAll(this.workstationService.productionLineList(groupId)); } List listGroupIdsOfString = listGroupIds.stream().map((v0) -> { return String.valueOf(v0); }).collect(Collectors.toList()); List workstationVOList = this.workstationService.getWorkstationByGroupIds(listGroupIdsOfString); List fmsWorkStationProcessVOList = new ArrayList<>(); fmsOrderProcesses.forEach(fmsOrderProcess -> { List fmsWorkStationVOS = new ArrayList<>(); FmsWorkStationProcessVO fmsWorkStationProcessVO = new FmsWorkStationProcessVO(); if (Func.isNotEmpty(fmsOrderProcess.getProcessType())) { List workstationVOS = workstationVOList.stream().filter(workstationVO -> { if (Objects.equals(fmsOrderProcess.getProcessType(), WorkTypeEnum.MEASURE.getCode())) { return Objects.equals(workstationVO.getDeviceType(), fmsOrderProcess.getProcessType()) || Objects.equals(workstationVO.getDeviceType(), WorkTypeEnum.LOAD_AND_UNLOAD.getCode()); } return Objects.equals(workstationVO.getDeviceType(), fmsOrderProcess.getProcessType()); }).collect(Collectors.toList()); workstationVOS.forEach(workstationVO2 -> { FmsWorkStationVO fmsWorkStationVO = new FmsWorkStationVO(); fmsWorkStationVO.setWorkstationId(workstationVO2.getId()); fmsWorkStationVO.setWorkstationName(workstationVO2.getName()); fmsWorkStationVOS.add(fmsWorkStationVO); }); } fmsWorkStationProcessVO.setProcessId(String.valueOf(fmsOrderProcess.getId())); fmsWorkStationProcessVO.setFmsWorkStationVOList(fmsWorkStationVOS); fmsWorkStationProcessVOList.add(fmsWorkStationProcessVO); }); return fmsWorkStationProcessVOList; } @Override // org.springblade.modules.fms.service.IFmsOrderProcessService public void programIssuanceDmp(ProgramIssuanceDTO programIssuanceDTO) { DncArtFile dncArtFile; String orderProcessId = programIssuanceDTO.getOrderProcessId(); FmsOrderProcess fmsOrderProcess = (FmsOrderProcess) getById(Long.valueOf(Func.toLong(orderProcessId))); if (fmsOrderProcess == null) { return; } Long programId = fmsOrderProcess.getProgramId(); if (!Func.isEmpty(programId) && (dncArtFile = (DncArtFile) this.artFileService.getById(programId)) != null) { String originalFilename = Func.isNotBlank(dncArtFile.getOriginalFilename()) ? dncArtFile.getOriginalFilename() : dncArtFile.getFilename(); this.bladeRedis.set(ExtCacheConstant.PROGRAM_ISSUANCE + programIssuanceDTO.getDeviceCode(), originalFilename); this.bladeRedis.set(ExtCacheConstant.PROGRAM_ISSUANCE_SWITCH + programIssuanceDTO.getDeviceCode(), originalFilename); String objectKey = dncArtFile.getObjectKey(); String backMessage = ""; try { InputStream inputStream = this.ossBuilder.template().getObject(objectKey); if (inputStream != null) { ProgramDmpStrDto programDmpDto = new ProgramDmpStrDto(); String inputStreamString = IOUtils.toString(inputStream, StandardCharsets.UTF_8); programDmpDto.setFileName(originalFilename).setContent(inputStreamString).setDeviceCode(programIssuanceDTO.getDeviceCode()); backMessage = this.fmsForestClient.programIssuanceStrFile(programDmpDto); } JSONObject cncMessage = getCncMessage(backMessage); if (cncMessage != null) { errorCode(cncMessage); } } catch (Exception e) { throw new ServiceException("dmp连接机床失败,请查看dmp是否正常运行再尝试连接"); } } } private static String toUTF8(String str) { String result = str; try { result = changeCharSet(str); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } private static String changeCharSet(String str) throws UnsupportedEncodingException { if (str != null) { byte[] bs = str.getBytes(); return new String(bs, StandardCharsets.UTF_8); } return null; } private JSONObject getCncMessage(String json) { return JSON.parseObject(json); } private void errorCode(JSONObject cncMessage) { String errCode = (String) cncMessage.get("errCode"); if ("0001".equals(errCode)) { throw new ServiceException((String) cncMessage.get("errMsg")); } } public static byte[] inputStreamToByteArray(InputStream inputStream) { try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { byte[] buffer = new byte[1024]; int num; while ((num = inputStream.read(buffer)) != -1) byteArrayOutputStream.write(buffer, 0, num); byteArrayOutputStream.flush(); return byteArrayOutputStream.toByteArray(); } catch (IOException e) { e.printStackTrace(); return new byte[0]; } /* try { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; while (true) { int num = inputStream.read(buffer); if (num == -1) { break; } byteArrayOutputStream.write(buffer, 0, num); } byteArrayOutputStream.flush(); byte[] byteArray = byteArrayOutputStream.toByteArray(); if (byteArrayOutputStream != null) { if (0 != 0) { byteArrayOutputStream.close(); } else { byteArrayOutputStream.close(); } } return byteArray; } catch (IOException e) { e.printStackTrace(); return new byte[0]; }*/ } }