diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java index 4d626fb..10d11c9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java @@ -97,7 +97,6 @@ public class ToWcsServiceImpl implements IToWcsService { MydoJob mydoJobParam = new MydoJob(); mydoJobParam.setInOrOut("1"); mydoJobParam.setStatus("1"); - mydoJobParam.setEntranceId("fluent"); List mydoJobs = mydoJobService.selectMydoJobListApi(mydoJobParam); if (CollUtil.isNotEmpty(mydoJobs)){ for (MydoJob mydoJob : mydoJobs) { @@ -108,6 +107,17 @@ public class ToWcsServiceImpl implements IToWcsService { } } } + mydoJobParam.setEntranceId("fluent"); + mydoJobs = mydoJobService.selectMydoJobListApi(mydoJobParam); + if (CollUtil.isNotEmpty(mydoJobs)){ + for (MydoJob mydoJob : mydoJobs) { + RequestLog requestLog = requestLogService.getRequestLog(PUSH_IN_MYDO_JOB, JSONUtil.toJsonStr(mydoJob), "推送出库任务"); + if ("1".equals(requestLog.getIsSuccessful())){ + mydoJob.setStatus("2"); + mydoJobService.updateMydoJob(mydoJob); + } + } + } } @Override diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java index c63cfd8..9affd06 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java @@ -105,7 +105,7 @@ public class ToWmsServiceImpl implements IToWmsService { return AjaxResult.error(MessageUtils.message("warn.message")); } MydoJob inMydoJob = inMydoJobs.get(0); - mydoJobService.manualCompleted(inMydoJob); + mydoJobService.manualCompleted(inMydoJob,1); break; case "2": if (StrUtil.isEmpty(wmsJobRequest.getPickSsj())){ @@ -151,7 +151,7 @@ public class ToWmsServiceImpl implements IToWmsService { tagTaskService.insertTagTask(tagTask); } //开启线程 - new Thread(new TagOutReadThread(basTag)).start(); + //new Thread(new TagOutReadThread(basTag.getIp())).start(); } break; case "3": diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/InMydoJobController.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/InMydoJobController.java index c4aac1f..cd18bbe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/InMydoJobController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/controller/InMydoJobController.java @@ -132,6 +132,6 @@ public class InMydoJobController extends BaseController @PostMapping("/manualCompleted") public AjaxResult manualCompleted(@RequestBody MydoJob mydoJob) { - return mydoJobService.manualCompleted(mydoJob); + return mydoJobService.manualCompleted(mydoJob,0); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java index fed00fe..9f598ae 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/IMydoJobService.java @@ -80,7 +80,7 @@ public interface IMydoJobService * @param mydoJob * @return */ - AjaxResult manualCompleted(MydoJob mydoJob); + AjaxResult manualCompleted(MydoJob mydoJob,int type); /** * 出库手动完成 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index cde2ed8..e14a3b2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -235,15 +235,17 @@ public class MydoJobServiceImpl implements IMydoJobService { */ @Override @Transactional(rollbackFor = Exception.class) - public AjaxResult manualCompleted(MydoJob mydoJob) { + public AjaxResult manualCompleted(MydoJob mydoJob,int type) { String jobId = mydoJob.getJobId(); MydoJob job = selectMydoJobByJobId(jobId); if (job == null) { return AjaxResult.warn(MessageUtils.message("warn.message")); } - AjaxResult ajaxResult = iToWcsService.cancelTaskByTaskNo(job.getTaskNo()); - if (!ajaxResult.isSuccess()){ - return AjaxResult.error(MessageUtils.message("error.message17")); + if (type == 0){ + AjaxResult ajaxResult = iToWcsService.cancelTaskByTaskNo(job.getTaskNo()); + if (!ajaxResult.isSuccess()){ + return AjaxResult.error(MessageUtils.message("error.message17")); + } } BasWarehouse basWarehouse = basWarehouseService.selectBasWarehouseByWarehouseId(job.getWarehouseId()); if("2".equals(basWarehouse.getWarehouseType())) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/controller/TagTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/controller/TagTaskController.java index 72ff23e..13f992c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/controller/TagTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/controller/TagTaskController.java @@ -2,6 +2,7 @@ package com.ruoyi.out.tagTask.controller; import java.io.IOException; import java.util.List; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletResponse; import org.springframework.scheduling.annotation.Scheduled; @@ -109,12 +110,14 @@ public class TagTaskController extends BaseController * 传入电子标签信息 */ //@Scheduled(fixedDelay = 2000) + @PostConstruct public void tagOutManager() throws IOException { tagTaskService.tagOutManager(); } - @Scheduled(fixedDelay = 2000) + //@Scheduled(fixedDelay = 2000) + @PostConstruct public void tagInManager(){ tagTaskService.tagInManager(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/service/impl/TagTaskServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/service/impl/TagTaskServiceImpl.java index 86b51b5..e05b307 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/service/impl/TagTaskServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/service/impl/TagTaskServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.out.tagTask.domain.TagTask; import com.ruoyi.out.tagTask.mapper.TagTaskMapper; import com.ruoyi.out.tagTask.service.ITagTaskService; import com.ruoyi.out.tagTask.thread.TagInReadThread; +import com.ruoyi.out.tagTask.thread.TagOutReadThread; import com.ruoyi.out.tagTask.util.ElectronicTagClient; import com.ruoyi.pda.domain.TrayCodeMsg; import com.ruoyi.pda.service.PdaService; @@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import java.io.IOException; import java.net.Socket; import java.util.HashMap; @@ -114,56 +116,23 @@ public class TagTaskServiceImpl implements ITagTaskService { @Override public void tagOutManager() throws IOException { - //查询所有的电子标签任务 - TagTask tagTaskParam = new TagTask(); - //tagTaskParam.setStatus("0"); - List allTagTasks = tagTaskMapper.selectTagTaskList(tagTaskParam); - if (CollUtil.isNotEmpty(allTagTasks)) { - //按标签分组 - Map> tagGroup = allTagTasks.stream().collect(Collectors.groupingBy(TagTask::getTagId)); - for (Long tagId : tagGroup.keySet()) { - BasTag basTag = basTagService.selectBasTagById(tagId); - List tagTaskList = tagGroup.get(tagId); - if (CollUtil.isNotEmpty(tagTaskList)) { - - if (!tagTaskList.stream().allMatch(x -> "2".equals(x.getStatus()))) { - Optional first = tagTaskList.stream().filter(x -> "1".equals(x.getStatus())).findFirst(); - if (first.isPresent()) { - TagTask tagTask = first.get(); - log.info("正在处理任务:{},id:{}", tagTask.getProductId(), tagTask.getId()); - } else { - TagTask tagTask = tagTaskList.get(0); - try { - boolean b = sendMsgDzbq(basTag,tagTask); - log.info("下发电子标签:ip:{},id:{}数量:{}", basTag.getIp(), basTag.getId(), tagTask.getNum()); - if (b) { - basTag.setSendCompleted("1"); - basTagService.updateBasTag(basTag); - tagTask.setStatus("1"); - tagTaskMapper.updateTagTask(tagTask); - log.info("下发电子标签:ip:" + basTag.getIp() + ",id:" + basTag.getId() + "数量:" + basTag.getCurNum()); - //开线程一直读取电子标签数据 - - } - } catch (Exception e) { - log.info(e.getMessage(), e.getMessage()); - } - } - } - } - } + BasTag param = new BasTag(); + param.setSpare3("1"); + List basTags = basTagService.selectBasTagList(param); + Map> collect = basTags.stream().collect(Collectors.groupingBy(BasTag::getIp)); + for (String ip : collect.keySet()) { + new Thread(new TagOutReadThread(ip)).start(); } - } @Override public void tagInManager() { BasTag param = new BasTag(); - param.setSendCompleted("0"); param.setSpare3("2"); List basTags = basTagService.selectBasTagList(param); - for (BasTag basTag : basTags) { - new Thread(new TagInReadThread(basTag.getId())).start(); + Map> collect = basTags.stream().collect(Collectors.groupingBy(BasTag::getIp)); + for (String ip : collect.keySet()) { + new Thread(new TagInReadThread(ip)).start(); } } @@ -173,12 +142,12 @@ public class TagTaskServiceImpl implements ITagTaskService { * * @param basTag */ - public boolean sendDzbqOff(BasTag basTag) throws IOException { + /*public boolean sendDzbqOff(BasTag basTag) throws IOException { int address = Convert.toInt(basTag.getId()); Socket socket = ElectronicTagClient.getSocket(basTag.getIp()); int x7 = (address + 0x10 + 0x03 + 0xe8 + 0x03 + 0xe8) % 256;//累加 校验 return ElectronicTagClient.sendHexData( socket,"FA " + String.format("%02x", address) + " 10 00 03 e8 03 e8 " + String.format("%02x", x7) + " AF"); - } + }*/ /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagInReadThread.java b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagInReadThread.java index 3375573..313be35 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagInReadThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagInReadThread.java @@ -21,6 +21,9 @@ import java.io.IOException; import java.math.BigInteger; import java.net.Socket; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; import static com.ruoyi.out.tagTask.util.ElectronicTagClient.getSocket; @@ -33,42 +36,61 @@ public class TagInReadThread implements Runnable { private IBasTagService basTagService; private PdaService pdaService; private ToWcsServiceImpl toWcsService; - private Long tagId; + private String ip; - public TagInReadThread(Long tagId) { + public TagInReadThread(String ip) { this.tagTaskMapper = SpringUtils.getBean(TagTaskMapper.class); this.mydoJobService = SpringUtils.getBean(IMydoJobService.class); this.tagTaskService = SpringUtils.getBean(ITagTaskService.class); this.basTagService = SpringUtils.getBean(IBasTagService.class); this.pdaService = SpringUtils.getBean(PdaService.class); this.toWcsService = SpringUtils.getBean(ToWcsServiceImpl.class); - this.tagId = tagId; + this.ip = ip; } @Override public void run() { - BasTag basTag = basTagService.selectBasTagById(tagId); - basTag.setSendCompleted("1"); - basTagService.updateBasTag(basTag); - while (true) { - try (Socket socket = getSocket(basTag.getIp())) { - basTag = basTagService.selectBasTagById(tagId); - if (basTag == null) { - break; - } - switch (basTag.getSpare2()) { - case "0": - String content = ElectronicTagClient.receiveHexData(socket, 0); - if (StrUtil.isNotEmpty(content)) { - //将拍灯指令整理成数组 - String[] split = content.split("5A"); - for (String s : split) { - if (s.length() == 10) { + try (Socket socket = getSocket(ip)) { - String type = s.substring(4, 6);//指令类型 01是下发成功反馈 12是拍灭绿灯指令 - if ("12".equals(type)) { - int address = new BigInteger(s.substring(2, 4), 16).intValue(); + BasTag param = new BasTag(); + param.setIp(ip); + param.setSpare3("2"); + List tagList = basTagService.selectBasTagList(param); + Map> collect = tagList.stream().collect(Collectors.groupingBy(BasTag::getSpare2)); + if (collect.containsKey("2")) { + List basTags = collect.get("2"); + for (BasTag basTag : basTags) { + //亮灯 下发ctu入库任务 + boolean b = ElectronicTagClient.sendMsgDzbq(socket, Convert.toInt(basTag.getId()), 1, 0); + if (b) { + basTag.setSpare2("0"); + basTagService.updateBasTag(basTag); + log.info("亮灯提示空料箱任务已完成,下发电子标签:ip:{},id:{}", basTag.getIp(), basTag.getId()); + + } + } + + } + + tagList = basTagService.selectBasTagList(param); + collect = tagList.stream().collect(Collectors.groupingBy(BasTag::getSpare2)); + if (collect.containsKey("0")) { + List basTags = collect.get("0"); + String content = ElectronicTagClient.receiveHexData(socket); + if (StrUtil.isNotEmpty(content)) { + //将拍灯指令整理成数组 + String[] split = content.split("5A"); + for (String s : split) { + if (s.length() == 10) { + + String type = s.substring(4, 6);//指令类型 01是下发成功反馈 12是拍灭绿灯指令 + if ("12".equals(type)) { + int address = new BigInteger(s.substring(2, 4), 16).intValue(); + log.info("90收到指令:{}", address); + Optional first = basTags.stream().filter(x -> x.getId().intValue() == address).findFirst(); + if (first.isPresent()){ + BasTag basTag = first.get(); if (address == basTag.getId()) { //12为 绿色拍灯指令 MydoJob mydoJobParam = new MydoJob(); @@ -76,7 +98,7 @@ public class TagInReadThread implements Runnable { mydoJobParam.setExitId("fluent"); mydoJobParam.setStatus("1"); List mydoJobs = mydoJobService.selectMydoJobListApi(mydoJobParam); - if (CollUtil.isEmpty(mydoJobs)){ + if (CollUtil.isEmpty(mydoJobs)) { //生成agv空料箱入库作业 TrayCodeMsg trayCodeMsg = new TrayCodeMsg(); trayCodeMsg.setTrayCode(IdUtil.fastSimpleUUID()); @@ -84,7 +106,7 @@ public class TagInReadThread implements Runnable { trayCodeMsg.setEntranceId(basTag.getPickAdd()); pdaService.emptyBoxIn(trayCodeMsg); toWcsService.pushInMydoJob(); - }else { + } else { MydoJob mydoJob = mydoJobs.get(0); mydoJob.setEntranceId(basTag.getPickAdd()); mydoJobService.updateMydoJob(mydoJob); @@ -98,34 +120,21 @@ public class TagInReadThread implements Runnable { log.info("灭灯提示空料箱任务已下发"); } } - } + //BasTag currentBasTag = basTags.stream().filter(x -> x.getId().intValue() == address).findFirst().get(); + + } } } - break; - case "1": - //ctu 取货阶段 - Thread.sleep(2000); - break; - case "2": - - //亮灯 下发ctu入库任务 - boolean b = ElectronicTagClient.sendMsgDzbq(socket, Convert.toInt(basTag.getId()), 1, 0); - if (b) { - basTag.setSpare2("0"); - basTagService.updateBasTag(basTag); - log.info("亮灯提示空料箱任务已完成,下发电子标签:ip:{},id:{}", basTag.getIp(), basTag.getId()); - - } - break; + } } - - } catch (IOException | InterruptedException e) { + } catch (IOException e) { log.error(e.getMessage(), e); } } + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagOutReadThread.java b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagOutReadThread.java index ae4ebd7..e8550da 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagOutReadThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/thread/TagOutReadThread.java @@ -1,5 +1,6 @@ package com.ruoyi.out.tagTask.thread; +import cn.hutool.core.collection.CollUtil; import com.ruoyi.bas.tag.domain.BasTag; import com.ruoyi.bas.tag.service.IBasTagService; import com.ruoyi.common.core.domain.AjaxResult; @@ -16,7 +17,9 @@ import java.io.IOException; import java.math.BigInteger; import java.net.Socket; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import static com.ruoyi.out.tagTask.util.ElectronicTagClient.*; @@ -26,98 +29,116 @@ public class TagOutReadThread implements Runnable { private TagTaskMapper tagTaskMapper; private IBasTagService basTagService; private PdaService pdaService; - private BasTag basTag; + private String ip; - public TagOutReadThread(BasTag bastag) { + public TagOutReadThread(String ip) { this.tagTaskMapper = SpringUtils.getBean(TagTaskMapper.class); this.basTagService = SpringUtils.getBean(IBasTagService.class); this.pdaService = SpringUtils.getBean(PdaService.class); - this.basTag = bastag; + this.ip = ip; } @Override public void run() { - //查询所有下发的任务 - TagTask tagTaskParam = new TagTask(); - tagTaskParam.setTagId(basTag.getId()); - List allTagTasks = null; - try (Socket socket = getSocket(basTag.getIp())) { + while (true) { + //查询所有下发的任务 + TagTask tagTaskParam = new TagTask(); + List tagTasks = tagTaskMapper.selectTagTaskList(tagTaskParam); + if (CollUtil.isEmpty(tagTasks)){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; + } + Map> collect = tagTasks.stream().collect(Collectors.groupingBy(TagTask::getTagId)); - - allTagTasks = tagTaskMapper.selectTagTaskList(tagTaskParam); - if (allTagTasks.stream().allMatch(x -> "2".equals(x.getStatus()))) { - //全部拣选完成 灭灯逻辑 - //灭灯 - boolean b = sendDzbqOff(socket, Convert.toInt(basTag.getId())); - if (b) { - //出库确认 - TrayCodeMakeSure trayCodeMakeSure = new TrayCodeMakeSure(); - trayCodeMakeSure.setTrayCode(basTag.getTrayCode()); - AjaxResult ajaxResult = pdaService.outMakeSure(trayCodeMakeSure); - if (ajaxResult.isSuccess()) { - //删除标签绑定信息 - basTag.setSendCompleted("0"); - basTag.setTrayCode(""); + try (Socket socket = getSocket(ip)) { + //下发标签 + for (Long tagId : collect.keySet()) { + List allTagTasks = collect.get(tagId); + Optional first = allTagTasks.stream().filter(x -> "0".equals(x.getStatus())).findFirst(); + if (first.isPresent()) { + TagTask tagTask = first.get(); + BasTag basTag = basTagService.selectBasTagById(tagId); + boolean b = sendMsgDzbq(socket, Convert.toInt(basTag.getId()), Convert.toInt(tagTask.getNum()), Convert.toInt(tagTask.getNum())); + if (b) { + basTag.setSendCompleted("1"); + basTag.setCurNum(tagTask.getNum()); basTagService.updateBasTag(basTag); - //删除tagList - tagTaskMapper.deleteTagTaskByIds(allTagTasks.stream().map(TagTask::getId).toArray(Long[]::new)); - log.info("下发电子标签灭灯:ip:{},id:{}", basTag.getIp(), basTag.getId()); - break; + tagTask.setStatus("1"); + tagTaskMapper.updateTagTask(tagTask); + log.info("下发电子标签:ip:{},id:{}数量:{}", basTag.getIp(), basTag.getId(), tagTask.getNum()); } } - } else { - if (allTagTasks.stream().anyMatch(x -> "1".equals(x.getStatus()))) { - Optional first = allTagTasks.stream().filter(x -> "1".equals(x.getStatus())).findFirst(); - if (first.isPresent()) { - TagTask tagTask = first.get(); - /* 接收电子标签指令 */ - String content = ElectronicTagClient.receiveHexData(socket, 0);//读取值 - if (!content.isEmpty()) { - log.info("读取电子标签值:{}", content); - } - //将拍灯指令整理成数组 - String[] split = content.split("5A"); - for (String s : split) { - if (s.length() == 10) { - String type = s.substring(4, 6);//指令类型 01是下发成功反馈 12是拍灭绿灯指令 - if ("12".equals(type)) { - //12为 绿色拍灯指令 - int address = new BigInteger(s.substring(2, 4), 16).intValue(); - if (address == basTag.getId()) { - //更新当前子任务状态 - tagTask.setStatus("2"); - tagTaskMapper.updateTagTask(tagTask); - log.info("更新任务状态:{},id:{}", tagTask.getProductId(), tagTask.getId()); - } - } - } - } - } - - } else { - Optional first = allTagTasks.stream().filter(x -> "0".equals(x.getStatus())).findFirst(); - if (first.isPresent()) { - TagTask tagTask = first.get(); - boolean b = sendMsgDzbq(socket, Convert.toInt(basTag.getId()), Convert.toInt(tagTask.getNum()), Convert.toInt(tagTask.getNum())); - if (b) { - basTag.setSendCompleted("1"); - basTag.setCurNum(tagTask.getNum()); - basTagService.updateBasTag(basTag); - tagTask.setStatus("1"); - tagTaskMapper.updateTagTask(tagTask); - log.info("下发电子标签:ip:{},id:{}数量:{}", basTag.getIp(), basTag.getId(), tagTask.getNum()); - } - } - - } } + tagTasks = tagTaskMapper.selectTagTaskList(tagTaskParam); + collect = tagTasks.stream().collect(Collectors.groupingBy(TagTask::getTagId)); + for (Long tagId : collect.keySet()) { + List allTagTasks = collect.get(tagId); + if (allTagTasks.stream().allMatch(x -> "2".equals(x.getStatus()))) { + //全部拣选完成 灭灯逻辑 + //灭灯 + BasTag basTag = basTagService.selectBasTagById(tagId); + boolean b = sendDzbqOff(socket, Convert.toInt(basTag.getId())); + if (b) { + //出库确认 + TrayCodeMakeSure trayCodeMakeSure = new TrayCodeMakeSure(); + trayCodeMakeSure.setTrayCode(basTag.getTrayCode()); + AjaxResult ajaxResult = pdaService.outMakeSure(trayCodeMakeSure); + if (ajaxResult.isSuccess()) { + //删除标签绑定信息 + basTag.setSendCompleted("0"); + basTag.setTrayCode(""); + basTagService.updateBasTag(basTag); + //删除tagList + tagTaskMapper.deleteTagTaskByIds(allTagTasks.stream().map(TagTask::getId).toArray(Long[]::new)); + log.info("下发电子标签灭灯:ip:{},id:{}", basTag.getIp(), basTag.getId()); + } + } + } + } + tagTaskParam.setStatus("1"); + tagTasks = tagTaskMapper.selectTagTaskList(tagTaskParam); + if (CollUtil.isNotEmpty(tagTasks)) { + /* 接收电子标签指令 */ + String content = ElectronicTagClient.receiveHexData(socket);//读取值 + //将拍灯指令整理成数组 + String[] split = content.split("5A"); + for (String s : split) { + if (s.length() == 10) { + String type = s.substring(4, 6);//指令类型 01是下发成功反馈 12是拍灭绿灯指令 + if ("12".equals(type)) { + //12为 绿色拍灯指令 + int address = new BigInteger(s.substring(2, 4), 16).intValue(); + log.info("119收到指令:{}", address); + Optional first = tagTasks.stream().filter(x -> address == x.getTagId()).findFirst(); + if(first.isPresent()){ + TagTask tagTask = first.get(); + BasTag basTag = basTagService.selectBasTagById(tagTask.getTagId()); + if (address == basTag.getId()) { + //更新当前子任务状态 + tagTask.setStatus("2"); + tagTaskMapper.updateTagTask(tagTask); + log.info("更新任务状态:{},id:{}", tagTask.getProductId(), tagTask.getId()); + } + } + + } + } + } + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + } - } catch (IOException e) { - throw new RuntimeException(e); - } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/util/ElectronicTagClient.java b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/util/ElectronicTagClient.java index 12f1ceb..a00c480 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/util/ElectronicTagClient.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/out/tagTask/util/ElectronicTagClient.java @@ -71,24 +71,30 @@ public class ElectronicTagClient { * @return 接收到的16进制字符串 * @throws IOException 如果发生I/O错误或超时 */ - public static String receiveHexData(Socket socket, int timeoutMillis) throws IOException { - InputStream input = socket.getInputStream(); - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - byte[] temp = new byte[1024]; - int bytesRead; + public static String receiveHexData(Socket socket){ + try { + InputStream input = socket.getInputStream(); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + byte[] temp = new byte[1024]; + int bytesRead; - while ((bytesRead = input.read(temp)) != -1) { - buffer.write(temp, 0, bytesRead); - if (input.available() == 0) { - break; // 没有更多数据可读 + while ((bytesRead = input.read(temp)) != -1) { + buffer.write(temp, 0, bytesRead); + if (input.available() == 0) { + break; // 没有更多数据可读 + } } - } - byte[] responseBytes = buffer.toByteArray(); - if (responseBytes.length == 0) { - return "无响应数据"; + byte[] responseBytes = buffer.toByteArray(); + if (responseBytes.length == 0) { + return "无响应数据"; + } + return byteArrayToHexString(responseBytes); + }catch (IOException e){ + log.error("e: {}", e.getMessage()); } - return byteArrayToHexString(responseBytes); + return ""; + } // 16进制字符串转字节数组 @@ -147,6 +153,7 @@ public class ElectronicTagClient { try { String[] split = ip.split(":"); Socket socket = new Socket(split[0], Convert.toInt(split[1])); + socket.setSoTimeout(3000); log.info("成功连接到电子标签服务器: " + split[0] + ":" + split[1]); return socket; } catch (Exception e) {