| | |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.jcdm.common.core.domain.AjaxResult; |
| | | import com.jcdm.framework.websocket.WebSocketUsers; |
| | | import com.jcdm.main.constant.Constants; |
| | |
| | | import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; |
| | | import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection; |
| | | import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService; |
| | | import com.jcdm.main.da.psConf.domain.DaPsConf; |
| | | import com.jcdm.main.da.psConf.service.IDaPsConfService; |
| | | import com.jcdm.main.da.testDeviceInterfaceTemp.domain.DaTestDeviceInterfaceTemp; |
| | | import com.jcdm.main.da.testDeviceInterfaceTemp.service.IDaTestDeviceInterfaceTempService; |
| | | import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; |
| | |
| | | import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | |
| | | import javax.websocket.Session; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.stream.Collectors; |
| | |
| | | public static IDaTestDeviceInterfaceTempService daTestDeviceInterfaceTempService; |
| | | |
| | | public static IDaCellDataService daCellDataService; |
| | | |
| | | public static IDaPsConfService daPsConfService; |
| | | /* @Value("${orderLineUrl}") |
| | | private static String orderLineUrl;*/ |
| | | |
| | |
| | | IDaParamCollectionService daParamCollectionService, |
| | | IOmProductionOrdeInfoService omProductionOrdeInfoService, |
| | | IDaTestDeviceInterfaceTempService daTestDeviceInterfaceTempService, |
| | | IDaCellDataService daCellDataService) { |
| | | IDaCellDataService daCellDataService, |
| | | IDaPsConfService daPsConfService) { |
| | | OPCUaSubscription.miloService = miloService; |
| | | OPCUaSubscription.daPassingStationCollectionService = daPassingStationCollectionService; |
| | | OPCUaSubscription.collectionParamConfService = collectionParamConfService; |
| | |
| | | OPCUaSubscription.omProductionOrdeInfoService = omProductionOrdeInfoService; |
| | | OPCUaSubscription.daTestDeviceInterfaceTempService = daTestDeviceInterfaceTempService; |
| | | OPCUaSubscription.daCellDataService = daCellDataService; |
| | | OPCUaSubscription.daPsConfService = daPsConfService; |
| | | } |
| | | |
| | | |
| | |
| | | }else if(Constants.OP030.equals(device)){ |
| | | Object value1 = miloService.readFromOpcUa(thoroughfare + "." + device + ".Scaner").getValue();//电芯码 |
| | | if (ObjectUtil.isNotNull(value1)){ |
| | | String cellCode = value1.toString(); |
| | | /*String cellCode = value1.toString();*/ |
| | | scanResult = 11; |
| | | //反馈电芯ocv检测结果,这里不用再进行检测,只要码没问题就可以了 |
| | | /* //反馈电芯ocv检测结果,这里不用再进行检测,只要码没问题就可以了 |
| | | boolean b = OCVResultFeedBack(thoroughfare, device,cellCode);//对替换电芯校验 |
| | | //四个电芯的状态 |
| | | if (b){ |
| | | scanResult = 11; |
| | | }else { |
| | | scanResult = 12; |
| | | } |
| | | }*/ |
| | | }else { |
| | | scanResult = 12; |
| | | } |
| | |
| | | result = 16;//电芯挡位为空 |
| | | }else{ |
| | | String cellGear = cellGearObjcet.toString(); |
| | | List<String> cellCodeList = readCellCodeList(thoroughfare, device); |
| | | result = checkCellGear(thoroughfare, device,cellCodeList,cellGear);//校验电芯挡位和组别 |
| | | /* List<String> cellCodeList = readCellCodeList(thoroughfare, device); |
| | | result = checkCellGear(thoroughfare, device,cellCodeList,cellGear);//校验电芯挡位和组别*/ |
| | | } |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build()); |
| | | |
| | |
| | | |
| | | public synchronized void receivingWorkOrders(String thoroughfare ,String device ,String materialCode) |
| | | { |
| | | String paramProductNum = ""; |
| | | try { |
| | | // 查询最新的工单信息 |
| | | OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder(); |
| | | //先查询表中是否有剩余工单 |
| | | List<OmProductionOrdeInfo> orderList = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>() |
| | | .eq(OmProductionOrdeInfo::getOrderStatus, Constants.ONE) |
| | | .eq(OmProductionOrdeInfo::getStationCode,device)//工位 |
| | | .eq(OmProductionOrdeInfo::getProductCode,materialCode));//产品类型 |
| | | if (CollUtil.isNotEmpty(orderList)){ |
| | | Long id = orderList.get(0).getId(); |
| | | String productNum = orderList.get(0).getProductNum();//模组码 |
| | | String orderNum = orderList.get(0).getWorkOrderNo(); |
| | | |
| | | log.info("请求工厂MES工单:入参device{},materialCode:{}", device, materialCode); |
| | | String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "M2OP100",materialCode); |
| | | JSONObject jsonObject = new JSONObject(orderJsonString); |
| | | // 从JSONObject中获取data对象 |
| | | JSONObject dataObject = jsonObject.getJSONObject("data"); |
| | | String code = jsonObject.getStr("code"); |
| | | // 判断接单是否成功 |
| | | if(code.equals("success")) { |
| | | log.info("请求工厂MES工单:入参pack{}出参pack:{}", paramProductNum, dataObject.getStr("productNum")); |
| | | OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo(); |
| | | omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum")); |
| | | omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum")); |
| | | omProductionOrdeInfo.setStationCode(device); |
| | | omProductionOrdeInfo.setProductCode(dataObject.getStr("materialCode")); |
| | | omProductionOrdeInfo.setPlanQty(Long.valueOf(dataObject.getStr("plannedQuantity"))); |
| | | omProductionOrdeInfo.setOnlineCompletionMark("0"); |
| | | omProductionOrdeInfo.setSfResult("0"); |
| | | omProductionOrdeInfo.setProductModel(dataObject.getStr("model")); |
| | | omProductionOrdeInfo.setCreateTime(new Date()); |
| | | omProductionOrdeInfo.setCreateUser("工厂MES"); |
| | | omProductionOrdeInfoService.save(omProductionOrdeInfo); |
| | | |
| | | String productNum = dataObject.getStr("productNum"); |
| | | String orderNum = dataObject.getStr("productionOrderNum"); |
| | | //下发产品模组码 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ModuleCode").value(productNum).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(orderNum).build()); |
| | |
| | | //将产品SN发送到前台 |
| | | productNum = "productNum,"+ productNum; |
| | | WebSocketUsers.sendMessageToUserByText(map.get(device), productNum); |
| | | }else { |
| | | // 查询最新的工单信息 |
| | | OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder(); |
| | | |
| | | log.info("请求工厂MES工单:入参device{},materialCode:{}", device, materialCode); |
| | | String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "M2OP100", materialCode); |
| | | log.info("请求工厂MES工单:出参pack:{}", orderJsonString); |
| | | JSONObject jsonObject = new JSONObject(orderJsonString); |
| | | // 从JSONObject中获取data对象 |
| | | JSONObject dataObject = jsonObject.getJSONObject("data"); |
| | | String code = jsonObject.getStr("code"); |
| | | // 判断接单是否成功 |
| | | if (code.equals("success")) { |
| | | |
| | | OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo(); |
| | | omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum")); |
| | | omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum")); |
| | | omProductionOrdeInfo.setStationCode(device); |
| | | omProductionOrdeInfo.setProductCode(dataObject.getStr("materialCode")); |
| | | omProductionOrdeInfo.setPlanQty(Long.valueOf(dataObject.getStr("plannedQuantity"))); |
| | | omProductionOrdeInfo.setOnlineCompletionMark("0"); |
| | | omProductionOrdeInfo.setSfResult("0"); |
| | | omProductionOrdeInfo.setProductModel(dataObject.getStr("model")); |
| | | omProductionOrdeInfo.setCreateTime(new Date()); |
| | | omProductionOrdeInfo.setCreateUser("工厂MES"); |
| | | omProductionOrdeInfoService.save(omProductionOrdeInfo); |
| | | |
| | | String productNum = dataObject.getStr("productNum"); |
| | | String orderNum = dataObject.getStr("productionOrderNum"); |
| | | //下发产品模组码 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ModuleCode").value(productNum).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(orderNum).build()); |
| | | |
| | | //将产品SN发送到前台 |
| | | productNum = "productNum," + productNum; |
| | | WebSocketUsers.sendMessageToUserByText(map.get(device), productNum); |
| | | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | |
| | | cellStatus = 1; |
| | | }else { |
| | | cellStatus = 2; |
| | | result = 17;//挡位校验不合格 |
| | | result = 16;//挡位校验不合格 |
| | | } |
| | | }else { |
| | | }/*else { |
| | | cellStatus = 2; |
| | | result = 17;//查不到要校验的挡位 |
| | | } |
| | | }*/ |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_"+(i+1)).value(cellStatus).build()); |
| | | } |
| | | } |
| | |
| | | ); |
| | | if (CollUtil.isNotEmpty(list)){ |
| | | for(DaCollectionParamConf conf:list){ |
| | | //1P1S生成 |
| | | if("1P1S".equals(conf.getCollectParameterId())){ |
| | | String result = get1P1S(sfcCode); |
| | | conf.setParamCentral(result); |
| | | } |
| | | ChildVO childVO = new ChildVO(); |
| | | childVO.setItemCode(conf.getCollectParameterId());//参数 |
| | | childVO.setItemType(conf.getItemType()); |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | /** |
| | | * 生成1P1S码 |
| | | * @param sfcCode |
| | | * @return list |
| | | */ |
| | | public static String get1P1S(String sfcCode) { |
| | | String result = ""; |
| | | LocalDate now = LocalDate.now(); |
| | | String supplierCode = sfcCode.substring(0,3); |
| | | try { |
| | | List<DaPsConf> list = daPsConfService.list(new LambdaQueryWrapper<DaPsConf>() |
| | | .eq(DaPsConf::getSpareField1, supplierCode)//供应商识别码 |
| | | .eq(DaPsConf::getState,"1"));//状态 |
| | | if(!list.isEmpty()){ |
| | | String mfCode = list.get(0).getMfCode();//厂商代码 |
| | | String proTypeCode = list.get(0).getProTypeCode();//产品类型代码 |
| | | String batteryTypeCode = list.get(0).getBatteryTypeCode();//电池类型代码 |
| | | String specificationsCode = list.get(0).getSpecificationsCode();//规格代码 |
| | | String traceInfoCode = list.get(0).getTraceInfoCode();//追溯信息代码 |
| | | String oldDateCode = list.get(0).getProDateCode(); |
| | | String proDateCode = Constants.YEARSMAP.get(now.getYear()) |
| | | + Constants.MONTHSMAP.get(now.getMonthValue()) |
| | | + Constants.DAYMAP.get(now.getDayOfMonth());//生产日期 |
| | | |
| | | String code = ""; |
| | | if(oldDateCode.equals(proDateCode)){ |
| | | code = list.get(0).getSfcCode();//序列号 |
| | | }else { |
| | | code = "0"; |
| | | } |
| | | code = StringUtils.leftPad(String.valueOf(Integer.valueOf(code)+1),7, "0");;//序列号 |
| | | result = mfCode+proTypeCode+batteryTypeCode+specificationsCode+traceInfoCode+proDateCode+code; |
| | | |
| | | log.info("读取到电芯码为:{},1P1S码为:{}",sfcCode,result); |
| | | |
| | | //更新日期和序列号 |
| | | LambdaUpdateWrapper<DaPsConf> lambdaUpdateWrapper = new LambdaUpdateWrapper<DaPsConf>(); |
| | | lambdaUpdateWrapper.set(DaPsConf::getProDateCode,proDateCode);//生产日期 |
| | | lambdaUpdateWrapper.set(DaPsConf::getSfcCode,code);//序列号 |
| | | lambdaUpdateWrapper.eq(DaPsConf::getSpareField1,supplierCode);//供应商识别码 |
| | | lambdaUpdateWrapper.eq(DaPsConf::getState,"1");//状态 |
| | | daPsConfService.update(lambdaUpdateWrapper); |
| | | |
| | | }else{ |
| | | log.info("请先去1P1S配置页面配置规则!"); |
| | | } |
| | | return result; |
| | | }catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |