package com.jcdm.main.da.paramCollection.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.db.Db; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.Gson; import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.common.utils.DateUtils; import com.jcdm.common.utils.SecurityUtils; import com.jcdm.common.utils.StringUtils; import com.jcdm.framework.websocket.WebSocketUsers; import com.jcdm.main.bs.formula.service.IBsFormulaInfoService; import com.jcdm.main.bs.formula.service.impl.BsFormulaInfoServiceImpl; import com.jcdm.main.bs.formulaChild.domain.BsFormulaChildInfo; import com.jcdm.main.bs.formulaChild.mapper.BsFormulaChildInfoMapper; import com.jcdm.main.bs.formulaChild.service.IBsFormulaChildInfoService; import com.jcdm.main.constant.Constants; import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; import com.jcdm.main.da.collectionParamConf.mapper.DaCollectionParamConfMapper; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.paramCollection.domain.DaParamCollection; import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper; import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; import com.jcdm.main.da.paramCollectionTemp.domain.DaParamCollectionTemp; import com.jcdm.main.da.paramCollectionTemp.service.IDaParamCollectionTempService; import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection; import com.jcdm.main.da.passingStationCollection.mapper.DaPassingStationCollectionMapper; import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.plcserver.sub.OPCUaSubscription; import com.jcdm.main.restful.factoryMes.service.RestfulService; import com.jcdm.main.restful.qingYan.doman.ChildVO; import com.jcdm.main.restful.qingYan.doman.ParentVO; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.websocket.Session; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** * 设备产品过程参数采集Service业务层处理 * * @author yyt * @date 2023-12-13 */ @Slf4j @Service public class DaParamCollectionServiceImpl extends ServiceImpl implements IDaParamCollectionService { private static final Logger logger = LoggerFactory.getLogger("sys-user"); @Autowired private DaParamCollectionMapper daParamCollectionMapper; @Autowired private DaCollectionParamConfMapper daCollectionParamConfMapper; @Autowired private BsFormulaChildInfoMapper bsFormulaChildInfoMapper; @Autowired private IBsFormulaChildInfoService bsFormulaChildInfoService; @Autowired private MiloService miloService; @Autowired private DaPassingStationCollectionMapper daPassingStationCollectionMapper; @Resource private SqlSessionFactory sqlSessionFactory; @Autowired private IDaParamCollectionService daParamCollectionService; @Autowired private IDaCollectionParamConfService daCollectionParamConfService; @Autowired private IDaParamCollectionTempService daParamCollectionTempService; @Autowired private IOmProductionOrdeInfoService omProductionOrdeInfoService; @Autowired private IDaPassingStationCollectionService daPassingStationCollectionService; public SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map map = WebSocketUsers.getUsers(); /** * 查询设备产品过程参数采集 * * @param id 设备产品过程参数采集主键 * @return 设备产品过程参数采集 */ @Override public DaParamCollection selectDaParamCollectionById(Long id) { return daParamCollectionMapper.selectDaParamCollectionById(id); } /** * 查询设备产品过程参数采集列表 * * @param daParamCollection 设备产品过程参数采集 * @return 设备产品过程参数采集 */ @Override public List selectDaParamCollectionList(DaParamCollection daParamCollection) { return daParamCollectionMapper.selectDaParamCollectionList(daParamCollection); } @Override public void saveBeachDaParamCollection(List list) { // ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。 // ExecutorType.REUSE: 这个执行器类型会复用预处理语句。 // ExecutorType.BATCH: 这个执行器会批量执行所有更新语句,如果 SELECT 在它们中间执行还会标定它们是 必须的,来保证一个简单并易于理解的行为。 logger.info("进入乐工批量方法saveBeachDaParamCollection"); // 关闭session的自动提交 SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); try { DaParamCollectionMapper userMapper = sqlSession.getMapper(DaParamCollectionMapper.class); list.stream().forEach(DaParamCollection -> userMapper.insertDaParamCollection(DaParamCollection)); // 提交数据 sqlSession.commit(); sqlSession.rollback(); logger.info("结束乐工批量方法saveBeachDaParamCollection"); } catch (Exception e) { sqlSession.rollback(); } finally { sqlSession.close(); } } /** * 新增设备产品过程参数采集 * * @param daParamCollection 设备产品过程参数采集 * @return 结果 */ @Override public int insertDaParamCollection(DaParamCollection daParamCollection) { daParamCollection.setCreateTime(DateUtils.getNowDate()); return daParamCollectionMapper.insertDaParamCollection(daParamCollection); } /** * 修改设备产品过程参数采集 * * @param daParamCollection 设备产品过程参数采集 * @return 结果 */ @Override public int updateDaParamCollection(DaParamCollection daParamCollection) { daParamCollection.setUpdateTime(DateUtils.getNowDate()); return daParamCollectionMapper.updateDaParamCollection(daParamCollection); } /** * 批量删除设备产品过程参数采集 * * @param ids 需要删除的设备产品过程参数采集主键 * @return 结果 */ @Override public int deleteDaParamCollectionByIds(Long[] ids) { return daParamCollectionMapper.deleteDaParamCollectionByIds(ids); } /** * 删除设备产品过程参数采集信息 * * @param id 设备产品过程参数采集主键 * @return 结果 */ @Override public int deleteDaParamCollectionById(Long id) { return daParamCollectionMapper.deleteDaParamCollectionById(id); } @Override public void addBasicParameters(DaParamCollection daParamCollection) { // 假设这是从数据库或其他地方获取的参数数据 Map map = new HashMap<>(); map.put("GC", "南浔工厂"); map.put("CXBH", "Pack线"); map.put("SBBH", "设备001"); map.put("YGBH", "员工001"); map.put("GDBH", daParamCollection.getWorkOrderNo()); map.put("CPXH", daParamCollection.getModel()); map.put("INT", DateUtil.formatDateTime(new Date())); map.forEach((key, value) -> { DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); daCollectionParamConf.setProcessesCode(daParamCollection.getLocationCode()); daCollectionParamConf.setCollectParameterId(key); List daCollectionParamConfs = daCollectionParamConfMapper.selectDaCollectionParamConfList(daCollectionParamConf); DaParamCollection saveData = new DaParamCollection(); saveData.setWorkOrderNo(daParamCollection.getWorkOrderNo()); saveData.setProductCode(daParamCollection.getProductCode()); saveData.setLocationCode(daParamCollection.getLocationCode()); saveData.setSfcCode(daParamCollection.getProductBarcode()); saveData.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); saveData.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); saveData.setCollectionTime(new Date()); saveData.setParamValue(value); daParamCollectionMapper.insertDaParamCollection(saveData); }); } @Override public void addTighteningParameters(DaParamCollection daParamCollection) { String paramCode = daParamCollection.getParamCode(); String tightenData = daParamCollection.getTightenTheArray(); if(StringUtils.isNotBlank(paramCode)&&StringUtils.isNotBlank(tightenData)){ tightenData = tightenData.replace("[", "").replace("]", "").replace(" ", ""); String[] tightenDataParts = tightenData.split(","); String[] paramCodeParts = paramCode.split(","); for (int i = 0; i < paramCodeParts.length; i++) { daParamCollection.setParamValue(tightenDataParts[i]); daParamCollection.setParamCode(paramCodeParts[i]); daParamCollection.setCollectionTime(new Date()); daParamCollection.setSfcCode(daParamCollection.getProductBarcode()); daParamCollectionMapper.insertDaParamCollection(daParamCollection); DaParamCollectionTemp daParamCollectionTemp = new DaParamCollectionTemp(); daParamCollectionTemp.setParamValue(tightenDataParts[i]); daParamCollectionTemp.setParamCode(paramCodeParts[i]); daParamCollectionTemp.setCollectionTime(new Date()); daParamCollectionTemp.setSfcCode(daParamCollection.getProductBarcode()); daParamCollectionTemp.setLocationCode(daParamCollection.getLocationCode()); daParamCollectionTemp.setProductCode(daParamCollection.getProductCode()); daParamCollectionTemp.setWorkOrderNo(daParamCollection.getWorkOrderNo()); daParamCollectionTempService.save(daParamCollectionTemp); } } } @Override public void saveCampaignTimeParameters(DaParamCollection daParamCollection) { // List list = bsFormulaChildInfoService.list(new LambdaQueryWrapper() // .eq(BsFormulaChildInfo::getProcessesCode, daParamCollection.getLocationCode()) // .eq(BsFormulaChildInfo::getSpareField4, "1") // ); BsFormulaChildInfo childInfo = daParamCollection.getFormulaChildEntity(); if(StringUtils.isNotBlank(childInfo.getResults())){ if(!childInfo.getResults().equals("OK")){ try { miloService.writeToOpcShort(ReadWriteEntity.builder().identifier("PACK."+daParamCollection.getLocationCode()+".RecordDataDone").value(22).build()); } catch (Exception e) { throw new RuntimeException(e); } return; } }else { try { miloService.writeToOpcShort(ReadWriteEntity.builder().identifier("PACK."+daParamCollection.getLocationCode()+".RecordDataDone").value(22).build()); } catch (Exception e) { throw new RuntimeException(e); } return; } // BsFormulaChildInfo bsFormulaChildInfo = new BsFormulaChildInfo(); // bsFormulaChildInfo.setProcessesCode(daParamCollection.getLocationCode()); // bsFormulaChildInfo.setProductCode(daParamCollection.getProductCode()); // bsFormulaChildInfo.setSpareField4("1"); // List bsFormulaChildInfos = bsFormulaChildInfoMapper.selectBsFormulaChildInfoList(bsFormulaChildInfo); String result = childInfo.getResults(); if(result != null && !result.isEmpty()){ try { // //更新参数采集配置表 // DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); // daCollectionParamConf.setProcessesCode(daParamCollection.getLocationCode()); // daCollectionParamConf.setCollectParameterId("OUTT"); // List daCollectionParamConfs = daCollectionParamConfMapper.selectDaCollectionParamConfList(daCollectionParamConf); // DaParamCollection saveData = new DaParamCollection(); // saveData.setWorkOrderNo(daParamCollection.getWorkOrderNo()); // saveData.setProductCode(daParamCollection.getProductCode()); // saveData.setLocationCode(daParamCollection.getLocationCode()); // saveData.setSfcCode(daParamCollection.getProductBarcode()); // saveData.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); // saveData.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); // saveData.setCollectionTime(new Date()); // saveData.setParamValue(DateUtil.formatDateTime(new Date())); // daParamCollectionMapper.insertDaParamCollection(saveData); //增加过站记录 DaPassingStationCollection daPassingStationCollection = new DaPassingStationCollection(); daPassingStationCollection.setWorkOrderNo(daParamCollection.getWorkOrderNo()); daPassingStationCollection.setSfcCode(daParamCollection.getProductBarcode()); daPassingStationCollection.setProductCode(daParamCollection.getProductCode()); daPassingStationCollection.setLocationCode(daParamCollection.getLocationCode()); daPassingStationCollection.setInboundTime(daParamCollection.getInboundTime()); daPassingStationCollection.setOutboundTime(new Date()); daPassingStationCollection.setCreateTime(new Date()); daPassingStationCollection.setOutRsSign("1"); boolean save = daPassingStationCollectionService.save(daPassingStationCollection); //添加基础参数 this.manualWorkstationsAddBasicParameters(daParamCollection); // //更新过站记录表出站时间 // DaPassingStationCollection daPassingStationCollection = new DaPassingStationCollection(); // daPassingStationCollection.setWorkOrderNo(daParamCollection.getWorkOrderNo()); // daPassingStationCollection.setLocationCode(daParamCollection.getLocationCode()); // List daPassingStationCollections = daPassingStationCollectionMapper.selectDaPassingStationCollectionList(daPassingStationCollection); // daPassingStationCollections.get(0).setOutboundTime(new Date()); // int i = daPassingStationCollectionMapper.updateDaPassingStationCollection(daPassingStationCollections.get(0)); // OPCUaSubscription.SaveParamData(daParamCollection.getProductBarcode(),"OP",daParamCollection.getLocationCode(),daParamCollection.getWorkOrderNo(),daParamCollection.getProductCode()); //给opc发21 miloService.writeToOpcShort(ReadWriteEntity.builder().identifier("PACK."+daParamCollection.getLocationCode()+".RecordDataDone").value(21).build()); if(daParamCollection.getLocationCode().equals("POP240")){ try{ CompletableFuture cp1 = CompletableFuture.runAsync(() -> { logger.info("OP230报工开始-工厂MES异步方法"); String reportResult = RestfulService.getWorkReportResultFeedback(daParamCollection.getProductBarcode(), "POP230", format.format(new Date())); JSONObject jsonObject = new JSONObject(reportResult); String code = jsonObject.getStr("code"); if("success".equals(code)){ //如果成功,执行报工成功方法,修改是否报工为1,添加报工时间 omProductionOrdeInfoService.updateOrderByProductNum("1",daParamCollection.getProductBarcode(),"POP230"); }else{ //解析工厂mes返回结果,如果失败,执行报工失败方法,修改是否报工为2,添加报工时间 omProductionOrdeInfoService.updateOrderByProductNum("2",daParamCollection.getProductBarcode(),"POP230"); } logger.info("OP230报工结束-工厂MES异步方法{}"+reportResult); }); }catch (Exception e){ System.out.println(e.getMessage()); } // RestfulService.getWorkReportResultFeedback(daParamCollection.getProductBarcode(),"OP230",format.format(new Date())); } if(daParamCollection.getLocationCode().equals("POP430")){ this.enterWeighing(daParamCollection); } } catch (Exception e) { throw new RuntimeException(e); } } } @Override public void insertBatch(List confList){ try{ this.saveBatch(confList); }catch (Exception e){ return; } } @Override public void replaceAssemblyCode(DaParamCollection daParamCollection) { List list = daParamCollectionService.list(new LambdaQueryWrapper() .eq(DaParamCollection::getSfcCode, daParamCollection.getYzSfcCode()) ); if(list.size() > 0){ for (DaParamCollection paramCollection : list) { paramCollection.setSfcCode(daParamCollection.getSfcCode()); daParamCollectionService.saveOrUpdate(paramCollection); } } } @Override public void yzAddBasicParameters(DaParamCollection daParamCollection) { // 假设这是从数据库或其他地方获取的参数数据 Map map = new HashMap<>(); // map.put("GC", "南浔工厂"); // map.put("CXBH", "Pack线"); // map.put("SBBH", "设备001"); // map.put("YGBH", "员工001"); // map.put("GDBH", daParamCollection.getWorkOrderNo()); // map.put("CPXH", daParamCollection.getModel()); map.put("INT", DateUtil.formatDateTime(new Date())); map.forEach((key, value) -> { DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); daCollectionParamConf.setProcessesCode(daParamCollection.getLocationCode()); daCollectionParamConf.setCollectParameterId(key); List daCollectionParamConfs = daCollectionParamConfMapper.selectDaCollectionParamConfList(daCollectionParamConf); DaParamCollection saveData = new DaParamCollection(); saveData.setWorkOrderNo(daParamCollection.getWorkOrderNo()); saveData.setProductCode(daParamCollection.getProductCode()); saveData.setLocationCode(daParamCollection.getLocationCode()); saveData.setSfcCode(daParamCollection.getProductBarcode()); saveData.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); saveData.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); saveData.setCollectionTime(new Date()); saveData.setParamValue(value); daParamCollectionMapper.insertDaParamCollection(saveData); }); } @Override public void jrmSaveCampaignTimeParameters(DaParamCollection daParamCollection) { //增加过站记录 DaPassingStationCollection daPassingStationCollection = new DaPassingStationCollection(); daPassingStationCollection.setWorkOrderNo(daParamCollection.getWorkOrderNo()); daPassingStationCollection.setSfcCode(daParamCollection.getProductBarcode()); daPassingStationCollection.setProductCode(daParamCollection.getProductCode()); daPassingStationCollection.setLocationCode(daParamCollection.getLocationCode()); daPassingStationCollection.setInboundTime(daParamCollection.getInboundTime()); daPassingStationCollection.setOutboundTime(new Date()); daPassingStationCollection.setCreateTime(new Date()); daPassingStationCollection.setOutRsSign("1"); boolean save = daPassingStationCollectionService.save(daPassingStationCollection); //添加基础参数 this.manualWorkstationsAddBasicParameters(daParamCollection); //给opc发21 try { // miloService.writeToOpcShort(ReadWriteEntity.builder().identifier("PACK."+daParamCollection.getLocationCode()+".RecordDataDone").value(21).build()); String str = daParamCollection.getLocationCode(); miloService.writeToOpcShort(ReadWriteEntity.builder().identifier("PACK."+str+".RecordDataDone").value(21).build()); } catch (Exception e) { throw new RuntimeException(e); } } public void sendToFactoryMes(String stationCode,String productNum ){ // String url = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String url = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; ParentVO vo =new ParentVO(); List checkList = new ArrayList<>(); List list = this.list(new LambdaQueryWrapper() .eq(DaParamCollection::getSfcCode, productNum) .eq(DaParamCollection::getLocationCode, stationCode)); vo.setTotalResult("1"); String string = new Random(10).toString(); vo.setRecordId(string); vo.setProductNum(productNum); vo.setSiteCode("3983"); vo.setStationCode(stationCode); if (CollUtil.isNotEmpty(list)){ List collect = list.stream().filter(x -> Constants.NG.equals(x.getParamValue())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)){ vo.setTotalResult("0"); } List bsFormulaChildInfoList = bsFormulaChildInfoService.list(); for (DaParamCollection daParamCollection : list) { ChildVO childVO = new ChildVO(); childVO.setItemCode(daParamCollection.getParamCode()); String time = daParamCollection.getCollectionTime() != null ? daParamCollection.getCollectionTime().toString() : ""; childVO.setCheckResult("1"); if (StrUtil.isNotBlank(daParamCollection.getParamValue())){ if (Constants.NG.equals(daParamCollection.getParamValue())){ childVO.setCheckResult("0"); } } childVO.setCheckTime(time); childVO.setItemValue(daParamCollection.getParamValue()); childVO.setItemType("3"); childVO.setItemText(daParamCollection.getParamName()); if (StrUtil.isNotBlank(daParamCollection.getParamCode())){ List collect1 = bsFormulaChildInfoList.stream().filter(x -> daParamCollection.getParamCode().equals(x.getParamCode())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect1)){ BsFormulaChildInfo bsFormulaChildInfo = collect1.get(0); childVO.setItemType(bsFormulaChildInfo.getOperationType()); } } checkList.add(childVO); } } vo.setCheckList(checkList); HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(vo)).execute(); } @Override public void pushGeelycvMesFeedback(String packID, String stationCode) { logger.info("进入人工工位推送工厂MES数据方法-pushGeelycvMesFeedback-工位{}-pack码{}",stationCode,packID); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // String url = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String url = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String totalResult = "0"; List paramList = daParamCollectionTempService.list(new LambdaQueryWrapper().eq(DaParamCollectionTemp::getSfcCode, packID).eq(DaParamCollectionTemp::getLocationCode, stationCode)); if(paramList.size() > 0){ ParentVO parentVO = new ParentVO(); parentVO.setSiteCode("3983"); parentVO.setRecordId(String.valueOf(Instant.now().toEpochMilli())); parentVO.setStationCode(stationCode); parentVO.setProductNum(packID); parentVO.setTotalResult("1"); List listChildVo = new ArrayList<>(); for (DaParamCollectionTemp daParamCollection : paramList) { ChildVO childVO = new ChildVO(); childVO.setItemCode(daParamCollection.getParamCode()); List paramConfOneList = daCollectionParamConfService.list(new LambdaQueryWrapper() .eq(DaCollectionParamConf::getCollectParameterId, daParamCollection.getParamCode()) .eq(DaCollectionParamConf::getProductModel, "PE01B") ); DaCollectionParamConf paramConfOne = paramConfOneList.get(0); if(paramConfOne!=null){ childVO.setItemType(paramConfOne.getSpareField1()); childVO.setItemText(paramConfOne.getCollectParameterName()); }else { childVO.setItemType("3"); childVO.setItemText(""); } childVO.setItemValue(daParamCollection.getParamValue()); if(daParamCollection.getParamValue().equals("1")){ childVO.setCheckResult("1"); }else if(daParamCollection.getParamValue().equals("2")){ childVO.setCheckResult("0"); parentVO.setTotalResult("0"); totalResult = "1"; }else { childVO.setCheckResult("1"); } childVO.setCheckTime(format.format(daParamCollection.getCollectionTime())); listChildVo.add(childVO); } parentVO.setCheckList(listChildVo); try{ CompletableFuture cp1 = CompletableFuture.runAsync(() -> { logger.info("工位{}---开始执行异步方法---pack码是{}"+stationCode,packID); HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); logger.info("工位{}---异步方法执行结束---pack码是{}"+stationCode,packID); logger.info("手动工位{}传工厂入参VO{}---pack码是{}" + stationCode,new Gson().toJson(parentVO),packID); logger.info("手动工位{}传工厂MES异步方法{}---pack码是{}"+stationCode,execute.body(),packID); DaParamCollectionTemp daParamCollectionTemp = new DaParamCollectionTemp(); daParamCollectionTemp.setSfcCode(packID); daParamCollectionTemp.setLocationCode(stationCode); int i = daParamCollectionTempService.deleteDaParamCollectionTempBySfcCodeAndLocationCode(daParamCollectionTemp); logger.info("删除临时表数据条数{}-工位{}-pack码{}",i,stationCode,packID); }); }catch (Exception e){ System.out.println(e.getMessage()); } logger.info("结束人工工位推送工厂MES数据方法-pushGeelycvMesFeedback-工位{}-pack码{}",stationCode,packID); } } @Override public void automaticWorkstationPushGeelycvMesFeedback(String packID, String stationCode,List paramList) { logger.info("进入工位{}-工厂MES推送数据方法automaticWorkstationPushGeelycvMesFeedback",stationCode); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // String url = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String url = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String totalResult = "0"; if(paramList.size() > 0){ logger.info("进入工位{}-拼数据",stationCode); ParentVO parentVO = new ParentVO(); parentVO.setSiteCode("3983"); parentVO.setRecordId(String.valueOf(Instant.now().toEpochMilli())); parentVO.setStationCode(stationCode); parentVO.setProductNum(packID); parentVO.setTotalResult("1"); List listChildVo = new ArrayList<>(); for (DaParamCollection daParamCollection : paramList) { ChildVO childVO = new ChildVO(); childVO.setItemCode(daParamCollection.getParamCode()); // BsFormulaChildInfo childOne = bsFormulaChildInfoService.getOne(new LambdaQueryWrapper().eq(BsFormulaChildInfo::getParamCode, daParamCollection.getParamCode())); // DaCollectionParamConf paramConfOne = daCollectionParamConfService.getOne(new LambdaQueryWrapper().eq(DaCollectionParamConf::getCollectParameterId, daParamCollection.getParamCode())); List paramConfOneList = daCollectionParamConfService.list(new LambdaQueryWrapper() .eq(DaCollectionParamConf::getCollectParameterId, daParamCollection.getParamCode()) .eq(DaCollectionParamConf::getProductModel, "PE01B") ); DaCollectionParamConf paramConfOne = paramConfOneList.get(0); if(paramConfOne!=null){ childVO.setItemType(paramConfOne.getSpareField1()); childVO.setItemText(paramConfOne.getCollectParameterName()); }else { childVO.setItemType("3"); childVO.setItemText(""); } childVO.setItemValue(daParamCollection.getParamValue()); if(daParamCollection.getParamValue().equals("1")){ childVO.setCheckResult("1"); }else if(daParamCollection.getParamValue().equals("2")){ childVO.setCheckResult("0"); parentVO.setTotalResult("0"); totalResult = "1"; }else { childVO.setCheckResult("1"); } childVO.setCheckTime(format.format(daParamCollection.getCollectionTime())); listChildVo.add(childVO); } parentVO.setCheckList(listChildVo); logger.info("结束工位{}-拼数据",stationCode); logger.info("进入工位{}-工厂MES推送数据方法HttpResponseSend",stationCode); try{ CompletableFuture cp1 = CompletableFuture.runAsync(() -> { logger.info("工位{}---自动工位开始执行异步方法---pack码是{}"+stationCode,packID); HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); logger.info("工位{}---自动工位异步方法执行结束---pack码是{}"+stationCode,packID); logger.info("自动工位{}传工厂入参VO{}" + stationCode,new Gson().toJson(parentVO)); logger.info("自动工位{}传工厂MES异步方法返回{}"+stationCode,execute.body()); }); }catch (Exception e){ System.out.println(e.getMessage()); } // HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); logger.info("结束工位{}-工厂MES推送数据方法HttpResponseSend",stationCode); } logger.info("结束工位{}-工厂MES推送数据方法automaticWorkstationPushGeelycvMesFeedback",stationCode); } @Override public AjaxResult checkRecordDataDone(DaParamCollection daParamCollection) { String result = ""; try { List list = bsFormulaChildInfoService.list(new LambdaQueryWrapper().eq(BsFormulaChildInfo::getSpareField4, "1").eq(BsFormulaChildInfo::getProcessesCode, daParamCollection.getLocationCode())); if(list.size()>0){ String results = list.get(0).getResults(); if(results!= null && !results.equals("") && results.equals("OK")){ result = "21"; } } /*Object recordDataDone = miloService.readFromOpcUa("PACK" + "." + daParamCollection.getLocationCode() + ".RecordDataDone").getValue(); if(ObjectUtil.isNotNull(recordDataDone)){ result = recordDataDone.toString(); }*/ } catch (Exception e) { throw new RuntimeException(e); } return AjaxResult.success(result); } @Override public void enterWeighing(DaParamCollection daParamCollection) { String url = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; // String url = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; try{ daParamCollection.setWeightValue(getRandomNumberBetween(312.5, 313.5)); Object recordDataDone = miloService.readFromOpcUa("PACK" + "." + daParamCollection.getLocationCode() + ".weight").getValue(); if(ObjectUtil.isNotNull(recordDataDone)){ daParamCollection.setWeightValue(recordDataDone.toString()); } long timestampMillis = Instant.now().toEpochMilli(); ParentVO parentVO = new ParentVO(); ChildVO childVO = new ChildVO(); List childVOList = new ArrayList<>(); childVO.setItemCode("PWD_PW"); childVO.setItemType("3"); childVO.setItemText("Pack重量值"); childVO.setItemValue(daParamCollection.getWeightValue()); childVO.setCheckTime(format.format(new Date())); childVO.setCheckResult("1"); childVOList.add(childVO); parentVO.setSiteCode("3983"); parentVO.setRecordId(""+timestampMillis); parentVO.setStationCode("POP430"); parentVO.setProductNum(daParamCollection.getProductBarcode()); parentVO.setTotalResult("1"); parentVO.setCheckList(childVOList); CompletableFuture cp1 = CompletableFuture.runAsync(() -> { logger.info("POP430报工开始-工厂MES异步方法"); HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); logger.info("称重430返回结果"+execute.body()); String reportResult = RestfulService.getWorkReportResultFeedback(daParamCollection.getProductBarcode(), "POP430", format.format(new Date())); JSONObject jsonObject = new JSONObject(reportResult); String code = jsonObject.getStr("code"); String resultCode = jsonObject.getJSONObject("data").getStr("resultCode"); if("success".equals(code)&&"S".equals(resultCode)){ //如果成功,执行报工成功方法,修改是否报工为1,添加报工时间 WebSocketUsers.sendMessageToUserByText(map.get("POP430"), "reportSuccess"); omProductionOrdeInfoService.updateOrderByProductNum("1",daParamCollection.getProductBarcode(),"POP430"); }else{ WebSocketUsers.sendMessageToUserByText(map.get("POP430"), "reportError"); //解析工厂mes返回结果,如果失败,执行报工失败方法,修改是否报工为2,添加报工时间 omProductionOrdeInfoService.updateOrderByProductNum("2",daParamCollection.getProductBarcode(),"POP430"); } logger.info("OP430报工结束-工厂MES异步方法{}"+reportResult); }); }catch (Exception e){ WebSocketUsers.sendMessageToUserByText(map.get("POP430"), "reportError"); System.out.println(e.getMessage()); } // HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); // RestfulService.getWorkReportResultFeedback(daParamCollection.getSfcCode(),"POP430",format.format(new Date())); } @Override public void manualWorkstationsAddBasicParameters(DaParamCollection daParamCollection) { // 假设这是从数据库或其他地方获取的参数数据 Map map = new HashMap<>(); map.put("GC", "南浔工厂"); map.put("CXBH", "Pack线"); map.put("SBBH", "设备001"); map.put("YGBH", SecurityUtils.getUsername()); map.put("GDBH", daParamCollection.getWorkOrderNo()); map.put("CPXH", daParamCollection.getProductCode()); map.put("INT", format.format(daParamCollection.getInboundTime())); map.put("OUTT",format.format(new Date())); map.forEach((key, value) -> { DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); daCollectionParamConf.setProcessesCode(daParamCollection.getLocationCode()); daCollectionParamConf.setCollectParameterId(key); List daCollectionParamConfs = daCollectionParamConfMapper.selectDaCollectionParamConfList(daCollectionParamConf); DaParamCollection saveData = new DaParamCollection(); saveData.setWorkOrderNo(daParamCollection.getWorkOrderNo()); saveData.setProductCode(daParamCollection.getProductCode()); saveData.setLocationCode(daParamCollection.getLocationCode()); saveData.setSfcCode(daParamCollection.getProductBarcode()); saveData.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); saveData.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); saveData.setCollectionTime(new Date()); saveData.setParamValue(value); daParamCollectionMapper.insertDaParamCollection(saveData); DaParamCollectionTemp saveDataTemp = new DaParamCollectionTemp(); saveDataTemp.setWorkOrderNo(daParamCollection.getWorkOrderNo()); saveDataTemp.setProductCode(daParamCollection.getProductCode()); saveDataTemp.setLocationCode(daParamCollection.getLocationCode()); saveDataTemp.setSfcCode(daParamCollection.getProductBarcode()); saveDataTemp.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); saveDataTemp.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); saveDataTemp.setCollectionTime(new Date()); saveDataTemp.setParamValue(value); daParamCollectionTempService.save(saveDataTemp); }); } @Override public void preInstallOut(DaParamCollection daParamCollection) { String locationCode = daParamCollection.getLocationCode(); //增加过站记录 DaPassingStationCollection daPassingStationCollection = new DaPassingStationCollection(); daPassingStationCollection.setSfcCode(daParamCollection.getProductBarcode()); daPassingStationCollection.setLocationCode(locationCode); daPassingStationCollection.setInboundTime(daParamCollection.getInboundTime()); daPassingStationCollection.setOutboundTime(new Date()); daPassingStationCollection.setCreateTime(new Date()); daPassingStationCollection.setOutRsSign("1"); boolean save = daPassingStationCollectionService.save(daPassingStationCollection); //添加基础参数 this.manualWorkstationsAddBasicParameters(daParamCollection); try { String str = "PACK."+locationCode+".RecordDataDone"; miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(str).value(21).build()); logger.info("预装工位写入OPC成功,工位:{},值{}",str,21); } catch (Exception e) { throw new RuntimeException(e); } } @Override public AjaxResult addRepairTighteningData(DaParamCollection daParamCollection) { try { String url = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; // String url = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/deviceResultFeedback"; String processesCode = daParamCollection.getLocationCode(); long timestampMillis = Instant.now().toEpochMilli(); ParentVO parentVO = new ParentVO(); List childVOList = new ArrayList<>(); parentVO.setSiteCode("3983"); parentVO.setRecordId(""+timestampMillis); parentVO.setStationCode(processesCode); parentVO.setProductNum(daParamCollection.getSfcCode()); parentVO.setTotalResult("1"); parentVO.setCheckList(childVOList); String screwNumber = daParamCollection.getScrewNumber(); String torque = daParamCollection.getTorque(); String angle = daParamCollection.getAngle(); String torqueResult = daParamCollection.getTorqueResult(); String angleResult = daParamCollection.getAngleResult(); Map map = new HashMap<>(); map.put("POP320","模组"); map.put("POP400","箱盖"); List nameLikeString = new ArrayList<>(); nameLikeString.add(map.get(processesCode)+"拧紧最终扭矩"); nameLikeString.add(map.get(processesCode)+"拧紧最终角度"); nameLikeString.add(map.get(processesCode)+"拧紧最终扭矩是否在范围内"); nameLikeString.add(map.get(processesCode)+"拧紧最终角度是否在范围内"); if(screwNumber.contains(",")){ String[] screwNumberSplit = screwNumber.split(","); String[] torqueSplit = torque.split(","); String[] angleSplit = angle.split(","); String[] torqueResultSplit = torqueResult.split(","); String[] angleResultSplit = angleResult.split(","); List dataList = new ArrayList(); dataList.add(torqueSplit); dataList.add(angleSplit); dataList.add(torqueResultSplit); dataList.add(angleResultSplit); for (int k = 0; k < nameLikeString.size(); k++) { for (int i = 0; i < screwNumberSplit.length; i++) { String s1 = nameLikeString.get(k)+screwNumberSplit[i]; List confList = daCollectionParamConfService.list(new LambdaQueryWrapper() .eq(DaCollectionParamConf::getProcessesCode, processesCode) .eq(DaCollectionParamConf::getCollectParameterName, s1) ); DaCollectionParamConf daCollectionParamConf = confList.get(0); ChildVO childVO = new ChildVO(); childVO.setItemCode(daCollectionParamConf.getCollectParameterId()); childVO.setItemType(daCollectionParamConf.getSpareField1()); childVO.setItemText(daCollectionParamConf.getCollectParameterName()); String itemValue = dataList.get(k)[i]; childVO.setItemValue(itemValue); childVO.setCheckTime(format.format(new Date())); childVO.setCheckResult("1"); childVOList.add(childVO); } } }else { List dataList = new ArrayList<>(); dataList.add(torque); dataList.add(angle); dataList.add(torqueResult); dataList.add(angleResult); for (int k = 0; k < nameLikeString.size(); k++) { String collectParameterName = nameLikeString.get(k)+screwNumber; List confList = daCollectionParamConfService.list(new LambdaQueryWrapper() .eq(DaCollectionParamConf::getProcessesCode, processesCode) .eq(DaCollectionParamConf::getCollectParameterName, collectParameterName) ); DaCollectionParamConf daCollectionParamConf = confList.get(0); ChildVO childVO = new ChildVO(); childVO.setItemCode(daCollectionParamConf.getCollectParameterId()); childVO.setItemType(daCollectionParamConf.getSpareField1()); childVO.setItemText(daCollectionParamConf.getCollectParameterName()); String itemValue = dataList.get(k); childVO.setItemValue(itemValue); childVO.setCheckTime(format.format(new Date())); childVO.setCheckResult("1"); childVOList.add(childVO); } } System.out.println(childVOList); logger.info("工位{}-----------返修数据上传入参vo:{}",processesCode,new Gson().toJson(parentVO)); HttpResponse execute = HttpRequest.post(url).body(JSONUtil.toJsonStr(parentVO)).execute(); logger.info("工位{}-----------返修数据上传结果:{}",processesCode,execute.body()); return AjaxResult.success("上传成功"); }catch (Exception e){ return AjaxResult.error("上传失败,参数不对请检查!"); } } public static String getRandomNumberBetween(double min, double max) { return String.format("%.1f",min + (Math.random() * (max - min))); } }