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