jcdm-main/src/main/java/com/jcdm/main/bs/technologyRoute/service/impl/BsTechnologyRouteInfoServiceImpl.java
@@ -6,6 +6,7 @@ import com.jcdm.main.bs.technologyRoute.domain.BsTechnologyRouteInfo; import com.jcdm.main.bs.technologyRoute.mapper.BsTechnologyRouteInfoMapper; import com.jcdm.main.bs.technologyRoute.service.IBsTechnologyRouteInfoService; import com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; @@ -26,7 +27,7 @@ @Autowired private com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper bsTechnologyRouteChildInfoMapper; private BsTechnologyRouteChildInfoMapper bsTechnologyRouteChildInfoMapper; /** * 查询工艺流程 jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/controller/BsTechnologyRouteChildInfoController.java
@@ -1,25 +1,19 @@ package com.jcdm.main.bs.controller; package com.jcdm.main.bs.technologyRouteChild.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.jcdm.common.annotation.Log; import com.jcdm.common.core.controller.BaseController; import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.common.enums.BusinessType; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.service.IBsTechnologyRouteChildInfoService; import com.jcdm.common.utils.poi.ExcelUtil; import com.jcdm.common.core.page.TableDataInfo; import com.jcdm.common.enums.BusinessType; import com.jcdm.common.utils.poi.ExcelUtil; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * 工艺路线子信息Controller jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/mapper/BsTechnologyRouteChildInfoMapper.java
@@ -1,7 +1,9 @@ package com.jcdm.main.bs.mapper; package com.jcdm.main.bs.technologyRouteChild.mapper; import java.util.List; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * 工艺路线子信息Mapper接口 @@ -61,4 +63,6 @@ * @return 结果 */ public int deleteBsTechnologyRouteChildInfoByIds(Long[] ids); public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(@Param("productCode") String productCode); } jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/IBsTechnologyRouteChildInfoService.java
@@ -1,4 +1,4 @@ package com.jcdm.main.bs.service; package com.jcdm.main.bs.technologyRouteChild.service; import java.util.List; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; @@ -58,4 +58,9 @@ * @return 结果 */ public int deleteBsTechnologyRouteChildInfoById(Long id); public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(String productCode); } jcdm-main/src/main/java/com/jcdm/main/bs/technologyRouteChild/service/impl/BsTechnologyRouteChildInfoServiceImpl.java
@@ -1,12 +1,13 @@ package com.jcdm.main.bs.service.impl; package com.jcdm.main.bs.technologyRouteChild.service.impl; import java.util.List; import com.jcdm.common.utils.DateUtils; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper; import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.service.IBsTechnologyRouteChildInfoService; import java.util.List; import static org.apache.commons.lang3.SystemUtils.getUserName; @@ -97,4 +98,10 @@ { return bsTechnologyRouteChildInfoMapper.deleteBsTechnologyRouteChildInfoById(id); } @Override public List<BsTechnologyRouteChildInfo> selectAllTechnologyRouteByProductCode(String productCode) { return bsTechnologyRouteChildInfoMapper.selectAllTechnologyRouteByProductCode(productCode); } } jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
@@ -226,8 +226,8 @@ public String SelectSN(String SNcode,String node) { try { Map<String, Object> params = new HashMap<>(); params.put("SNcode",SNcode); params.put("node",node); params.put("SN_CODE",SNcode); params.put("Node",node); params.put("Success",""); daPassingStationCollectionMapper.SelectSN(params); return (String)params.get("Success"); jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
@@ -1,12 +1,15 @@ package com.jcdm.main.plcserver; import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService; import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig; import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService; import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl; import com.jcdm.main.plcserver.sub.OPCUaSubscription; import com.jcdm.main.rm.repairRecord.service.IRmRepairRecordService; import com.kangaroohy.milo.service.MiloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; @@ -35,6 +38,15 @@ @Resource private IDaOpcuaConfigService iDaOpcuaConfigService; @Resource private IBsOrderSchedulingService bsOrderSchedulingService; @Resource private IRmRepairRecordService rmRepairRecordService; @Resource private IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService; @Override public void run(ApplicationArguments args) throws Exception { @@ -43,9 +55,12 @@ OPCUaSubscription opcUaSubscription = new OPCUaSubscription( miloService, collectionParamConfService, daParamCollectionService ,passingStationCollectionServiceImpl, lists); daParamCollectionService, passingStationCollectionServiceImpl, bsOrderSchedulingService, lists, rmRepairRecordService, bsTechnologyRouteChildInfoService); miloService.subscriptionFromOpcUa(collect,opcUaSubscription); @@ -57,6 +72,7 @@ */ public List<DaOpcuaConfig> getSubList(){ DaOpcuaConfig config = new DaOpcuaConfig(); config.setState(1L); List<DaOpcuaConfig> list = iDaOpcuaConfigService.selectDaOpcuaConfigList(config); // List<String> lists = new ArrayList<>(); // if (CollUtil.isNotEmpty(list)){ jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
@@ -27,9 +27,17 @@ public static final String OP020_MesSaveFeed = OP020_ITEM + "MesSaveFeed";//Mes保存完成 public static final String OP120_ZZ_CODE_CHECK = OP120_ITEM_ZZ + "CodeCheck";//请求保存 public static final String OP050_HX_CODE_CHECK = "CFL4HX.OP050.CodeCheck";//请求保存 //返修监听点位-465 public static final String OP465_ZZ_CODE_CHECK = "CFL4ZZ.OP465.CodeCheck"; //返修监听点位-355 public static final String OP355_ZZ_CODE_CHECK = "CFL4ZZ.OP355.CodeCheck"; public static final String SN_CHECK = "SNRetrieval"; public static final String SAVE_DATA = "saveData"; public static final String SAVE_DATA = "SaveData"; public static final String QUALIFIED = "合格"; public static final String UN_QUALIFIED = "不合格"; jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -1,6 +1,13 @@ package com.jcdm.main.plcserver.sub; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling; import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService; import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService; import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig; @@ -9,13 +16,15 @@ import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection; import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl; import com.jcdm.main.plcserver.conf.OPCElement; import com.jcdm.main.rm.repairRecord.domain.RmRepairRecord; import com.jcdm.main.rm.repairRecord.service.IRmRepairRecordService; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; import com.kangaroohy.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.text.Format; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -39,16 +48,28 @@ public static final HashMap<String,Integer> map = new HashMap<>(); public IBsOrderSchedulingService bsOrderSchedulingService; public IRmRepairRecordService rmRepairRecordService; public IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService; public OPCUaSubscription(MiloService miloService, IDaCollectionParamConfService collectionParamConfService, IDaParamCollectionService daParamCollectionService, DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl, List<DaOpcuaConfig> lists) { IBsOrderSchedulingService bsOrderSchedulingService, List<DaOpcuaConfig> lists, IRmRepairRecordService rmRepairRecordService, IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService) { OPCUaSubscription.miloService = miloService; this.collectionParamConfService = collectionParamConfService; this.daParamCollectionService = daParamCollectionService; this.passingStationCollectionServiceImpl = passingStationCollectionServiceImpl; this.bsOrderSchedulingService = bsOrderSchedulingService; this.lists = lists; this.rmRepairRecordService = rmRepairRecordService; this.bsTechnologyRouteChildInfoService = bsTechnologyRouteChildInfoService; } @@ -58,7 +79,7 @@ public void onSubscribe(String identifier, Object value) { String ecpStr = "";//异常记录标记 try { if(null != value) { if(null != value && "1".equals(value.toString())) { //1、检索SN号 //2、过站参数采集 //3、扫码枪数据回传 @@ -72,19 +93,11 @@ if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){ //总装上线扫码传输数据 log.info("-------监听到,{}的扫码枪扫码的CODE_CHECK的信号",identifier); Integer i = map.getOrDefault(identifier + "的扫码枪扫码的CODE_CHECK的信号",0); if (0==i){ map.put(identifier + "的扫码枪扫码的CODE_CHECK的信号",i+1); } String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); if (null != SNCodeObject){ String SNCode = SNCodeObject.toString(); passingStationCollectionServiceImpl.sendMessage(SNCode); scannerGunMessage(); } } } else if (collect2.contains(identifier)){ if (collect2.contains(identifier)){ if ("1".equals(value.toString())){ //save this.SaveData(identifier); //返回plc保存成功 @@ -108,44 +121,29 @@ // miloService.writeToOpcByte(entity); } } } } //OP010保存请求 // if (identifier.equals(OPCElement.OP120_SaveRequestLast) && "1".equals(value.toString())) { // this.SaveData(OPCElement.OP120_SaveRequestLast); // //1、更新工单数据 // //2、保存过站采集数据 // //3、保存参数采集数据 // ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesSaveFeed, 1); // miloService.writeToOpcByte(entity); // } // else if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){ // //总装上线扫码传输数据 // String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]"); // Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); // if (null != SNCodeObject){ // String SNCode = SNCodeObject.toString(); // passingStationCollectionServiceImpl.sendMessage(SNCode); // } // } // //OP010请求检索条码 // else if (identifier.equals(OPCElement.OP010_CodeCheck) && "1".equals(value.toString())) { // ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesCodeCheckFeed, 1); // miloService.writeToOpcByte(entity); // } } } catch (Exception e) { System.out.println(e.getMessage()); } finally { if (!"".equals(ecpStr)) { System.out.println(ecpStr + "\r\n"); } } } private void scannerGunMessage() throws Exception { String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); if (null != SNCodeObject){ String SNCode = SNCodeObject.toString(); passingStationCollectionServiceImpl.sendMessage(SNCode); } } @@ -157,20 +155,83 @@ if(null != SNCodeObject) { String SNCode=SNCodeObject.toString(); String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); // String a="1"; // 1:OK可生产 2:NG不可生产 3:NG可返工 4:PC检索失败(无记录)5:PC检索失败(软件) ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", a); if (StrUtil.isNotBlank(a)){ int input = Integer.parseInt(a); ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input); log.info("-------监听到,{}的CodeCheck的信号",Node); Integer i = map.getOrDefault(Node + "的CodeCheck的信号",0); if (0==i){ map.put(Node + "的CodeCheck的信号",i+1); //首站传输订单号 if (OPCElement.OP050_HX_CODE_CHECK.equals(Node)){ //查询订单号 BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); bsOrderScheduling.setEngineNo(SNCode); List<BsOrderScheduling> tempList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling); String orderNum = ""; if (CollUtil.isNotEmpty(tempList)){ BsOrderScheduling bsOrderScheduling1 = tempList.get(0); orderNum = bsOrderScheduling1.getOrderNo(); } ReadWriteEntity entity2 = new ReadWriteEntity(parts[0]+"."+parts[1]+".OrderNumber", orderNum); // miloService.writeToOpcByte(entity2); } //如果是返修工位需要传输返修工位号 if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node)){ rework(SNCode); } // miloService.writeToOpcByte(entity); DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); PassingStationCollection.setSfcCode(SNCode); PassingStationCollection.setLocationCode(parts[1]); PassingStationCollection.setInboundTime(new Date()); passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection); } } } } private void rework(String SNCode) { BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); bsOrderScheduling.setEngineNo(SNCode); List<String> allProcessCoed = new ArrayList<>(); List<String> collect = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling).stream().map(BsOrderScheduling::getModel).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)){ String s = collect.get(0); //查找次机型的完整工序 List<BsTechnologyRouteChildInfo> bsTechnologyRouteChildInfos = bsTechnologyRouteChildInfoService.selectAllTechnologyRouteByProductCode(SNCode); if (CollUtil.isNotEmpty(bsTechnologyRouteChildInfos)){ allProcessCoed = bsTechnologyRouteChildInfos.stream().map(BsTechnologyRouteChildInfo::getProcessesCode).collect(Collectors.toList()); } } RmRepairRecord rmRepairRecord = new RmRepairRecord(); rmRepairRecord.setBoxCode(SNCode); List<ReadWriteEntity> writeList = new ArrayList<>(); List<RmRepairRecord> rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); //所有反工工位 List<String> collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList()); //所有放行工位 List<String> collect2 = allProcessCoed; if (CollUtil.isNotEmpty(rmRepairRecords)){ //数据库查询出的工位 rmRepairRecords.forEach(x -> { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(x.getProcessesCode()); readWriteEntity.setValue(1); writeList.add(readWriteEntity); }); collect2 = allProcessCoed.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); } if (CollUtil.isNotEmpty(collect2)){ collect2.forEach(x -> { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(x); readWriteEntity.setValue(2); writeList.add(readWriteEntity); }); } if (CollUtil.isNotEmpty(writeList)){ ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier("Repair_sign"); readWriteEntity.setValue(1); writeList.add(readWriteEntity); // miloService.writeToOpcByte(writeList); } } @@ -214,6 +275,24 @@ } daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist); } Object object = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Runtime").getValue(); Long beatTime = 0L; if (ObjectUtil.isNotEmpty(object)){ beatTime = (Long) object; } DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); PassingStationCollection.setSfcCode(SNCode); PassingStationCollection.setLocationCode(parts[1]); PassingStationCollection.setOutboundTime(new Date()); PassingStationCollection.setInboundTime(new Date(new Date().getTime()-beatTime*1000)); PassingStationCollection.setCollectionTime(new Date()); PassingStationCollection.setCreateTime(new Date()); PassingStationCollection.setBeatTime(beatTime.toString()); PassingStationCollection.setOutRsSign("合格"); passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection); } } } jcdm-main/src/main/resources/mapper/bs/technologyRouteChild/BsTechnologyRouteChildInfoMapper.xml
@@ -2,7 +2,7 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jcdm.main.bs.mapper.BsTechnologyRouteChildInfoMapper"> <mapper namespace="com.jcdm.main.bs.technologyRouteChild.mapper.BsTechnologyRouteChildInfoMapper"> <resultMap type="BsTechnologyRouteChildInfo" id="BsTechnologyRouteChildInfoResult"> <result property="id" column="id" /> @@ -161,4 +161,16 @@ #{id} </foreach> </delete> <select id="selectAllTechnologyRouteByProductCode" parameterType="String" resultMap="BsTechnologyRouteChildInfoResult"> <include refid="selectBsTechnologyRouteChildInfoVo"/> left join bs_technology_route_info on bs_technology_route_info.route_code = bs_technology_route_child_info.route_code <where> <if test="productCode != null and productCode != ''"> and bs_technology_route_info.product_code = #{productCode} </if> </where> </select> </mapper>