diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/BaseKnifeServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/BaseKnifeServiceImpl.java index da980e3..dcf3620 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/BaseKnifeServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/BaseKnifeServiceImpl.java @@ -124,28 +124,29 @@ public class BaseKnifeServiceImpl implements IBaseKnifeService { hashMap.put("wmStorageAreaCode", wmsOutPlanDetail.getWmStorageAreaCode()); // 库位编码 hashMap.put("wmStorageAreaName", wmsOutPlanDetail.getWmStorageAreaName()); // 库位名称 hashMap.put("detailStatus", wmsOutPlanDetail.getDetailState()); // 明细状态 - hashMap.put("isToolSetting", 0); // 是否对刀 + hashMap.put("isToolSetting", nowWmsOutPlanDetailEntity.getIsToolSetting()); // 是否对刀 + hashMap.put("toolSettingParam", nowWmsOutPlanDetailEntity.getToolSettingParam()); // 对刀参数 - // 读取xml配置文件 - if ("PRODUCT".equals(nowWmsOutPlanDetailEntity.getItemOrProduct())) { - try { - // 抓取远程文件 - this.getRemoteFile(); - - // 读取本地文件 - File xmlFile = new File(myConfig.getToolSettingXmlPath() + CalendarUtil.getDateTimeStrForFile() + "/TSP1203.xml"); - JAXBContext jaxbContext = JAXBContext.newInstance(Tools.class); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - Tools paramXml = (Tools) unmarshaller.unmarshal(xmlFile); - - hashMap.put("isToolSetting", 1); // 是否对刀 - hashMap.put("toolSettingParam", JSON.toJSONString(paramXml)); // 对刀参数 - - } catch (Exception e) { - System.out.println("系统找不到指定文件!"); -// throw new RuntimeException(e); - } - } +// // 读取xml配置文件 +// if ("PRODUCT".equals(nowWmsOutPlanDetailEntity.getItemOrProduct())) { +// try { +// // 抓取远程文件 +// this.getRemoteFile(); +// +// // 读取本地文件 +// File xmlFile = new File(myConfig.getToolSettingXmlPath() + CalendarUtil.getDateTimeStrForFile() + "/TSP1203.xml"); +// JAXBContext jaxbContext = JAXBContext.newInstance(Tools.class); +// Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); +// Tools paramXml = (Tools) unmarshaller.unmarshal(xmlFile); +// +// hashMap.put("isToolSetting", 1); // 是否对刀 +// hashMap.put("toolSettingParam", JSON.toJSONString(paramXml)); // 对刀参数 +// +// } catch (Exception e) { +// System.out.println("系统找不到指定文件!"); +//// throw new RuntimeException(e); +// } +// } /* 实体 */ String outTime = null; diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutPlanServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutPlanServiceImpl.java index 6997dda..7a9b6ce 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutPlanServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutPlanServiceImpl.java @@ -261,10 +261,12 @@ public class WmsOutPlanServiceImpl implements IWmsOutPlanService { hashMap.put("wmStorageAreaCode", wmsOutPlanDetail.getWmStorageAreaCode()); // 库位编码 hashMap.put("wmStorageAreaName", wmsOutPlanDetail.getWmStorageAreaName()); // 库位名称 hashMap.put("detailStatus", wmsOutPlanDetail.getDetailState()); // 明细状态 - /* 来自台账明细 */ + /* 来自物料 */ hashMap.put("itemId", mdItem.getItemId()); // 物料ID hashMap.put("itemName", mdItem.getItemName()); // 物料名称 hashMap.put("itemCode", mdItem.getItemCode()); // 物料编码 + /* 来自台账 */ + hashMap.put("baseKnife", baseKnifeMapper.selectBaseKnifeByBaseKnifeId(nowWmsOutPlanDetailEntity.getBaseKnifeId())); /* 实体 */ String outTime = null; if (nowWmsOutPlanDetailEntity.getCreateTime() != null) diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutTaskServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutTaskServiceImpl.java index 246d159..829bcfc 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutTaskServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/WmsOutTaskServiceImpl.java @@ -1,6 +1,8 @@ package com.ktg.mes.md.service.impl; +import com.alibaba.fastjson.JSON; import com.ktg.common.utils.DateUtils; +import com.ktg.mes.cal.utils.CalendarUtil; import com.ktg.mes.md.domain.*; import com.ktg.mes.md.mapper.*; import com.ktg.mes.md.service.IWmsOutTaskService; @@ -9,6 +11,9 @@ import com.ktg.mes.wm.domain.WmsZdTask; import com.ktg.mes.wm.mapper.WmStorageAreaMapper; import com.ktg.mes.wm.mapper.WmsZdTaskMapper; import com.ktg.mes.wm.service.IWmStorageAreaService; +import jcifs.smb.NtlmPasswordAuthentication; +import jcifs.smb.SmbFile; +import jcifs.smb.SmbFileInputStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,7 +21,13 @@ import org.springframework.transaction.annotation.Transactional; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; -import java.io.File; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.FileTime; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -222,7 +233,9 @@ public class WmsOutTaskServiceImpl implements IWmsOutTaskService { 1 ); -// this.toolSetting(wmsOutPlanDetailEntity); + // 获取台账实体,如果为整刀,则开始读取对刀仪数据 + BaseKnife baseKnife = baseKnifeMapper.selectBaseKnifeByBaseKnifeId(wmsOutPlanDetailEntity.getBaseKnifeId()); + if (Objects.equals("PRODUCT", baseKnife.getItemOrProduct())) this.readToolSettingRemoteFile(wmsOutPlanDetailEntity); } // 更新出库任务状态 @@ -260,6 +273,157 @@ public class WmsOutTaskServiceImpl implements IWmsOutTaskService { return true; } + public void readToolSettingRemoteFile(WmsOutPlanDetailEntity wmsOutPlanDetailEntity) { + // 当前时间 + String currentDate = CalendarUtil.getDateTimeStr(); + + // 配置每十秒执行扫描文件 + Timer timer = new Timer(); + TimerTask task = new TimerTask() { + @Override + public void run() { + try { + // 创建认证用户 + NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", myConfig.getRemoteUser(), myConfig.getRemotePass()); + + // 构建远程文件对象 + SmbFile remoteFile = new SmbFile(myConfig.getRemoteUrl(), auth); + // 尝试链接 + remoteFile.connect(); + if(remoteFile.exists()){ + // 获取共享文件夹中文件列表 + SmbFile[] smbFiles = remoteFile.listFiles(); + for (SmbFile smbFile : smbFiles){ + if (smbFile.isFile()){ +// Path path = Paths.get(smbFile.getPath()); // 根据文件的绝对路径获取文件 +// BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class); // 根据path获取文件的基本属性 +// FileTime fileTime = attributes.creationTime(); // 从基本属性中获取文件的创建时间 +// long millis = fileTime.toMillis(); // 将创建时间转换成毫秒 + + // 时间戳比较 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if (dateFormat.parse(currentDate).getTime() < smbFile.lastModified()){ + // 停止扫描 + this.cancel(); + + // 保存到本地 + createFile(smbFile); + + // 读取本地文件 + File xmlFile = new File(myConfig.getToolSettingXmlPath() + CalendarUtil.getDateTimeStrForFile() + "/" + smbFile.getName()); + JAXBContext jaxbContext = JAXBContext.newInstance(Tools.class); + Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + Tools paramXml = (Tools) unmarshaller.unmarshal(xmlFile); + + // 更新对刀参数 + wmsOutPlanDetailEntity.setIsToolSetting(1); + wmsOutPlanDetailEntity.setToolSettingParam(JSON.toJSONString(paramXml)); + wmsOutPlanDetailEntityMapper.updateWmsOutPlanDetailEntity(wmsOutPlanDetailEntity); + } + } + } + } else { + throw new RuntimeException("远程共享文件夹不存在或无法连接!"); + } + } catch (Exception e){ + throw new RuntimeException(e); + } + } + }; + timer.schedule(task, 0, 10000); + } + + /** + * 创建本地文件 + */ + public void createFile(SmbFile remoteFile) { + InputStream in = null; + OutputStream out = null; + try { + // 创建本地文件 +// File localFile = new File("E:/xml_wjj/" + CalendarUtil.getDateTimeStrForFile() + "/" + remoteFile.getName()); + File localFile = new File(myConfig.getToolSettingXmlPath() + CalendarUtil.getDateTimeStrForFile() + "/" + remoteFile.getName()); + if (!localFile.getParentFile().exists()) localFile.getParentFile().mkdirs(); + if (!localFile.exists()) localFile.createNewFile(); + else { + localFile.delete(); + localFile.createNewFile(); + } + in = new BufferedInputStream(new SmbFileInputStream(remoteFile)); + // 获取远程输出流 + out = new BufferedOutputStream(new FileOutputStream(localFile)); + byte[] buffer = new byte[4096]; + int len = 0; + // 写入 + while ((len = in.read(buffer, 0, buffer.length)) != -1) { + out.write(buffer, 0, len); + } + out.flush(); // 刷新缓冲 + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + try { + if (out != null) out.close(); + if (in != null) in.close(); + } catch (Exception e){ + System.out.println("==============START================="); + System.out.println("关闭资源发生错误!"); + System.out.println("===============END=================="); + } + } + } + + public void readToolSettingFile(BaseKnife baseKnife) { + // 当前时间 + String currentDate = CalendarUtil.getDateTimeStr(); + + // 配置每十秒执行扫描文件 + Timer timer = new Timer(); + TimerTask task = new TimerTask() { + @Override + public void run() { + File folder = new File(myConfig.getRemoteUrl()); + File[] files = folder.listFiles(); + for (File file : files){ + if (file.isFile()) { + try { + // 根据文件的绝对路径获取文件 + Path path = Paths.get(file.getAbsolutePath()); + + // 根据path获取文件的基本属性 + BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class); + + // 从基本属性中获取文件的创建时间 + FileTime fileTime = attributes.creationTime(); + + // 将创建时间转换成毫秒 + long millis = fileTime.toMillis(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + date.setTime(millis); + + // 毫秒转换成时间字符串 + String fileCreateTime = dateFormat.format(date); + + // 时间戳比较 + if (dateFormat.parse(currentDate).getTime() < dateFormat.parse(fileCreateTime).getTime()){ + System.out.println("文件创建时间:" + fileCreateTime); + System.out.println("文件名:" + file.getName()); + + // 停止扫描 + this.cancel(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } + }; + timer.schedule(task, 0, 10000); + + } + public void wmsZdTaskFinish(String planCode){ WmsZdTask wmsZdTaskWrapper = new WmsZdTask(); wmsZdTaskWrapper.setCode(planCode); diff --git a/ktg-mes/src/main/resources/mapper/md/BaseKnifeMapper.xml b/ktg-mes/src/main/resources/mapper/md/BaseKnifeMapper.xml index 1c8e252..ba5d125 100644 --- a/ktg-mes/src/main/resources/mapper/md/BaseKnifeMapper.xml +++ b/ktg-mes/src/main/resources/mapper/md/BaseKnifeMapper.xml @@ -577,6 +577,7 @@ FROM BASE_KNIFE BK WHERE MBB_BD_MRL_ID = #{mbbBdMrlId} AND (KNIFE_FINE_STATE = 0 OR KNIFE_FINE_STATE = 1) + AND IS_VALID = 0