hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -37,7 +37,7 @@ int type =Integer.parseInt(map.get("type").toString()); int status =Integer.parseInt(map.get("status").toString()); String workingProcedure =map.get("workingProcedure").toString(); return Result.build(200,"查询成功",damageService.selectDamage(startTime,endTime,type, workingProcedure)); return Result.build(200,"查询成功",damageService.selectDamage(startTime,endTime,type,status, workingProcedure)); } @ApiOperation("报工") hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -18,11 +18,11 @@ */ public interface DamageService extends MPJBaseService<Damage> { List<Damage> selectDamage(String startTime, String endTime, int type, String workingProcedure); List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure); void submitDamage(List<Damage> damageList); void submitReport(Damage damage); Boolean submitReport(Damage damage); /** * 单个破损 @@ -44,5 +44,5 @@ void deleteByGlassId(String glassId); void sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails); Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -13,6 +13,7 @@ import com.mes.damage.service.DamageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.pp.entity.DamageDetails; import com.mes.pp.entity.ReportingWork; import com.mes.pp.entity.ReportingWorkDetail; import com.mes.work_assignment.entity.WorkAssignment; @@ -86,47 +87,55 @@ List<ReportingWorkDetail> reportingWorkDetails = new ArrayList<>(); String key = entry.getKey(); List<Damage> damages = entry.getValue(); for (Damage damage:damages ) { reportingWork.setOrderId(damage.getProcessId().substring(0, 10)); reportingWork.setProductionId(damage.getProcessId().substring(0,11)); reportingWork.setProcessId(damage.getProcessId()+"/"+damage.getTechnologyNumber()); reportingWork.setDeviceName(damage.getDeviceName()); reportingWork.setThisProcess(damage.getWorkingProcedure()); reportingWork.setThisCompletedQuantity(1); reportingWork.setOrderId(damages.get(0).getProcessId().substring(0, 10)); reportingWork.setProductionId(damages.get(0).getProcessId().substring(0, 11)); reportingWork.setProcessId(damages.get(0).getProcessId() + "/" + damages.get(0).getTechnologyNumber()); reportingWork.setDeviceName(damages.get(0).getDeviceName()); reportingWork.setThisProcess(damages.get(0).getWorkingProcedure()); reportingWork.setThisCompletedQuantity(0); reportingWork.setThisWornQuantity(0); reportingWork.setClasses("早班"); reportingWork.setReportingWorkTime(LocalDateTime.now()); reportingWork.setTeamsGroupsName(damage.getTeamsGroupsName()); reportingWork.setTeamsGroupsName(damages.get(0).getTeamsGroupsName()); reportingWork.setCreator("auto"); System.out.println("Key: " + key); } Map<String, List<Damage>> secondMap = damageList.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":" + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName())); for (Map.Entry<String, List<Damage>> entrys : secondMap.entrySet()) { List<Damage> damagesdetail = entrys.getValue(); for (Damage damage:damagesdetail ) { ReportingWorkDetail reportingWorkDetail = new ReportingWorkDetail(); reportingWorkDetail.setTechnologyNumber(damage.getTechnologyNumber()); reportingWorkDetail.setOrderNumber(damage.getOrderNumber()); reportingWorkDetail.setCompletedQuantity(1); reportingWorkDetail.setTechnologyNumber(damages.get(0).getTechnologyNumber()); reportingWorkDetail.setOrderNumber(damages.get(0).getOrderNumber()); reportingWorkDetail.setCompletedQuantity(0); reportingWorkDetail.setBreakageQuantity(0); reportingWorkDetails.add(reportingWorkDetail); Map<String, List<Damage>> secondMap = damages.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":" + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName())); List<DamageDetails> damageDetailses = new ArrayList<>(); for (Map.Entry<String, List<Damage>> entrys : secondMap.entrySet()) { List<Damage> damagesdetails = entrys.getValue(); if (damagesdetails.get(0).getType() != 8 && damagesdetails.get(0).getType() != 9) { reportingWorkDetail.setCompletedQuantity(damagesdetails.size()); reportingWork.setThisCompletedQuantity(damagesdetails.size() + reportingWork.getThisCompletedQuantity()); } else { reportingWork.setThisWornQuantity(damagesdetails.size() + reportingWork.getThisWornQuantity()); DamageDetails damageDetails = new DamageDetails(); damageDetails.setBreakageQuantity(damagesdetails.size()); damageDetails.setBreakageType(damagesdetails.get(0).getBreakageType()); damageDetails.setBreakageReason(damagesdetails.get(0).getBreakageReason()); damageDetails.setResponsibleProcess(damagesdetails.get(0).getResponsibleProcess()); damageDetails.setResponsibleEquipment(damagesdetails.get(0).getResponsibleEquipment()); damageDetails.setResponsibleTeam(damagesdetails.get(0).getResponsibleTeam()); damageDetails.setResponsiblePersonnel(null); damageDetailses.add(damageDetails); } } reportingWorkDetail.setDamageDetailsList(damageDetailses); sendToERP(reportingWork,reportingWorkDetails); } } @Override public void submitReport(Damage damage) { public Boolean submitReport(Damage damage) { ReportingWork reportingWork = new ReportingWork(); reportingWork.setOrderId(damage.getProcessId().substring(0, 10)); reportingWork.setProductionId(damage.getProcessId().substring(0,11)); @@ -148,7 +157,7 @@ reportingWorkDetail.setCompletedQuantity(1); reportingWorkDetail.setBreakageQuantity(0); reportingWorkDetails.add(reportingWorkDetail); sendToERP(reportingWork,reportingWorkDetails); return sendToERP(reportingWork, reportingWorkDetails); } /** @@ -156,6 +165,14 @@ */ @Override public void insertDamage(Damage damage) { List<Damage> damage1 = baseMapper.selectList( new LambdaQueryWrapper<Damage>() .ne(Damage::getType, Const.GLASS_STATE_DAMAGE) .ne(Damage::getType, Const.GLASS_STATE_TAKE) .eq(Damage::getLine, damage.getLine()) .eq(Damage::getWorkingProcedure, damage.getWorkingProcedure()) ); if (damage1 == null || damage1.size() == 0) { LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper = new LambdaQueryWrapper<>(); glassInfoSelectWrapper.eq(GlassInfo::getGlassId, damage.getGlassId()); GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoSelectWrapper); @@ -178,10 +195,12 @@ damage.setType(1); } if (damage.getType() == 1) { if (submitReport(damage)) { damage.setStatus(2); submitReport(damage); } } baseMapper.insert(damage); } } /** @@ -253,10 +272,10 @@ } @Override public void sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails){ public Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails) { try { // 目标系统的API URL String url = "http://192.168.3.119:8086/reportingWork/mesSaveReportingWorkWorn"; String url = "http://192.168.1.199:8086/reportingWork/mesSaveReportingWorkWorn"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); @@ -305,11 +324,24 @@ while ((inputLine = in.readLine()) != null) { response.append(inputLine); } System.out.println("Response Body: " + response.toString()); // 解析响应内容 JSONObject jsonResponse = new JSONObject(response.toString()); // 提取 code 和 message int code = jsonResponse.getInt("code"); String message = jsonResponse.getStr("data"); if (code == 200 && message.equals("true")) { return true; } else { return false; } } } catch (Exception e) { e.printStackTrace(); return false; } } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; import java.util.List; import lombok.Data; import lombok.EqualsAndHashCode; @@ -147,5 +149,6 @@ */ private LocalDateTime reworkUpdateTime; private List<DamageDetails> damageDetailsList; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -210,13 +210,6 @@ S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1); log.info("7、发送确认字完成"); Damage damage=new Damage(); damage.setGlassId(glassInfo.getGlassId()); damage.setWorkingProcedure("切割"); damage.setLine(1001); damage.setType(1); damage.setRemark("进卧式理片"); damageService.insertDamage(damage); } @@ -665,7 +658,7 @@ damage.setWorkingProcedure("切割"); damage.setLine(1001); damage.setType(1); damage.setRemark("进卧式理片"); damage.setRemark("过卧式理片"); damageService.insertDamage(damage); return Boolean.TRUE; } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -666,6 +666,13 @@ bigStorageCageFeedTask.setCreateTime(new Date()); //删除理片笼表拿走/破损数据数据 damageService.deleteByGlassId(glassId); Damage damage=new Damage(); damage.setGlassId(glassId); damage.setWorkingProcedure("磨边"); damage.setLine(line); damage.setType(1); damage.setRemark("进大理片"); damageService.insertDamage(damage); return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -29,6 +29,8 @@ LEFT JOIN DAMAGE T1 ON T.ENGINEER_ID = T1.ENGINEER_ID AND T.GLASS_ID = T1.GLASS_ID AND (T1.TYPE = 8 OR T1.TYPE = 9 ) WHERE T1.GLASS_ID IS NULL GROUP BY @@ -37,7 +39,7 @@ ) T2 INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE in (100, 101, 102, 103) WHERE STATE in (100) GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID AND T2.COUNT = T3.COUNT hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -130,25 +130,30 @@ public List<DownWorkstation> queryWorkStationIsFull() { //查询可以落架的玻璃信息且已绑定流程卡的工位信息 List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getEnableState, Const.SLOT_ON) .isNotNull(DownWorkstation::getFlowCardId).ne(DownWorkstation::getFlowCardId, "")); List<DownWorkstation> workstationFull = new ArrayList<>(); if (CollectionUtils.isNotEmpty(list)) { //都有玻璃的工位信息(包括绑定流程卡) List<Integer> workstationList = list.stream().map(DownWorkstation::getWorkstationId).collect(Collectors.toList()); //按照符合条件的工位获取未落架的流程卡玻璃,如果返回为空,则表明所有都已落架完成 List<DownGlassInfoDTO> downGlassInfoDTOList = queryWorkStationIsIn(workstationList, Boolean.FALSE); //获取工位上的未满的流程卡及层数 List<String> flowCardIdList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList()); //可以落架的玻璃信息且已绑定流程卡的所有的工位 - 玻璃未满流程卡及层数的工位 = 已满工位 workstationFull = list.stream().filter(item -> !flowCardIdList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList()); //是否需要将已满的工位置为不可落架 // if (CollectionUtils.isNotEmpty(workstationFull)) { // List<Integer> workstationIds = workstationFull.stream().map(DownWorkstation::getWorkstationId).collect(Collectors.toList()); // downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>().set(DownWorkstation::getEnableState, Const.SLOT_OFF) // .in(DownWorkstation::getWorkstationId, workstationIds)); // List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getEnableState, Const.SLOT_ON) // .isNotNull(DownWorkstation::getFlowCardId).ne(DownWorkstation::getFlowCardId, "")); // List<DownWorkstation> workstationFull = new ArrayList<>(); // if (CollectionUtils.isNotEmpty(list)) { // //都有玻璃的工位信息(包括绑定流程卡) // List<Integer> workstationList = list.stream().map(DownWorkstation::getWorkstationId).collect(Collectors.toList()); // //按照符合条件的工位获取未落架的流程卡玻璃,如果返回为空,则表明所有都已落架完成 // List<DownGlassInfoDTO> downGlassInfoDTOList = queryWorkStationIsIn(workstationList, Boolean.FALSE); // //获取工位上的未满的流程卡及层数 // List<String> flowCardIdList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList()); // //可以落架的玻璃信息且已绑定流程卡的所有的工位 - 玻璃未满流程卡及层数的工位 = 已满工位 // workstationFull = list.stream().filter(item -> !flowCardIdList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList()); // //是否需要将已满的工位置为不可落架 //// if (CollectionUtils.isNotEmpty(workstationFull)) { //// List<Integer> workstationIds = workstationFull.stream().map(DownWorkstation::getWorkstationId).collect(Collectors.toList()); //// downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>().set(DownWorkstation::getEnableState, Const.SLOT_OFF) //// .in(DownWorkstation::getWorkstationId, workstationIds)); //// } // } } List<DownWorkstation> workstationFull = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>() .eq(DownWorkstation::getEnableState, Const.SLOT_ON) .isNotNull(DownWorkstation::getFlowCardId) .ne(DownWorkstation::getFlowCardId, "") .apply("total_quantity = racks_number + other_number")); return workstationFull; } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -707,6 +707,14 @@ downGlassTask.setTaskStatus(0); downGlassTask.setCreateTime(new Date()); downGlassTaskService.save(downGlassTask); //添加报工数据 Damage damage=new Damage(); damage.setGlassId(glassInfo.getGlassId()); damage.setWorkingProcedure("钢化"); damage.setLine(4001); damage.setType(1); damage.setRemark("钢化后卧式理片"); damageService.insertDamage(damage); //向plc发送命令 return sendMessageToPlc((int) glassInfo.getWidth(), (int) glassInfo.getHeight(), (int) glassInfo.getThickness(), startCell, endCell, taskType);