diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf8e36c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +acs2/.idea/ +acs2/nladmin-ui/dist.zip diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 91bf3d9..e89e651 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -232,6 +232,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic luceneExecuteLogService.deviceExecuteLog(logDto); standardOrdinarySiteDeviceDriver.setOption(0); } else if (device.getDeviceDriver() instanceof BeltConveyorDeviceDriver) { + //到达取货点 入库 beltConveyorDeviceDriver = (BeltConveyorDeviceDriver) device.getDeviceDriver(); if (beltConveyorDeviceDriver.getAction() == 1 && beltConveyorDeviceDriver.getMode() == 2 && beltConveyorDeviceDriver.getError() == 0&& beltConveyorDeviceDriver.getMove() == 1) { data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java index 5db31bc..db120e6 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/conveyor/belt_conveyor/BeltConveyorDeviceDriver.java @@ -297,7 +297,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements if (move == 1 && !requireSucess) { boolean b = instruction_require(); if (b) { - requireSucess = false; + log.info(this.device_code + ",任务申请成功!"); } } else { String remark = ""; @@ -326,18 +326,10 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements synchronized(this) { // 添加同步锁 if (!requireSucess) { // 双重检查锁定 try { - // 1. 查询设备 - Device device = deviceAppService.findDeviceByCode(device_code); - Integer result = updateOutboundTaskNum(-1,true); - - // 2. 更新任务数 - device.setOutbound_task_num(result); - - // 3. 保存更新(假设需要显式保存) - deviceservice.update(new UpdateWrapper() - .set("outbound_task_num",result) - .eq("device_code",device.getDevice_code())); + // 使用统一方法更新出库任务数并同步数据库 + updateAndSyncOutboundTaskNum(-1, true, true); + Integer result = this.outbound_task_num; // 更新task的出库完成数 TaskDto taskDto = new TaskDto(); @@ -355,7 +347,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements map2.put("value", result); this.writing(list1); - // 5. 只有成功后才设置标记 + // 只有成功后才设置标记 requireSucess = true; log.info(this.device_code + ",成功更新出库任务数"); @@ -445,8 +437,10 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements } else { this.instruction_require_time = date; Device device = deviceAppService.findDeviceByCode(device_code); + log.info("device_code"+ device_code); List list = device.getDeviceDriver().getExtraDeviceCodes("link_device_code"); - if (CollUtil.isNotEmpty(getDeviceCodeList)) { + log.info("link_device_code_list"+ JSONObject.toJSONString(list)); + if (CollUtil.isNotEmpty(list)) { //关联的RFID设备 String linkDeviceCode = list.get(0); BmVehicleRfid bmVehicleRfid = ibmVehicleRfidService.findByDeviceCode(linkDeviceCode); @@ -558,6 +552,32 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements } return this.outbound_task_num; } + + /** + * 统一更新出库任务数的方法,确保数据一致性 + * @param num 任务数 + * @param addFlag 是否累加 + * @param syncDb 是否同步数据库 + * @throws Exception 异常信息 + */ + public synchronized void updateAndSyncOutboundTaskNum(Integer num, Boolean addFlag, boolean syncDb) throws Exception { + try { + Integer result = updateOutboundTaskNum(num, addFlag); + // 更新device对象 + if (this.device != null) { + this.device.setOutbound_task_num(result); + } + // 如需同步数据库 + if (syncDb) { + deviceservice.update(new UpdateWrapper() + .set("outbound_task_num", result) + .eq("device_code", device_code)); + } + } catch (Exception e) { + log.error("更新出库任务数失败: {}", e.getMessage()); + throw new RuntimeException(e); + } + } @Override public JSONObject getDeviceStatusName() { diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index cb1bd72..8880ece 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -371,8 +371,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { } if (ObjectUtil.isEmpty(errArr)) { response.setStatus(200); + response.setCode(200); response.setMessage("success"); } else { + response.setCode(400); response.setStatus(400); if (ObjectUtil.isNotEmpty(errArr)) { response.setMessage(errArr.getJSONObject(0).getString("message")); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java index 4d155b2..b2dc752 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/controller/BmVehicleRfidController.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.rfid_manage.service.IbmVehicleRfidService; import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.acs.rfid_manage.service.dto.UpdateRfidParam; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.springframework.http.HttpStatus; @@ -107,4 +108,16 @@ public class BmVehicleRfidController { bmVehicleRfidService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + + /** + * 条件查询 + * + * @param params 查询条件 + */ + @PostMapping("/updateRfid") + //@SaCheckPermission("@el.check(BmVehicleRfid:list") + public ResponseEntity updateRfid(@RequestBody UpdateRfidParam params) { + return new ResponseEntity<>(bmVehicleRfidService.updateRfid(params), HttpStatus.OK); + } + } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java index 08acc56..4459599 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/IbmVehicleRfidService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.acs.rfid_manage.service.dto.UpdateRfidParam; import org.nl.common.domain.query.PageQuery; import java.util.List; @@ -54,6 +55,8 @@ public interface IbmVehicleRfidService extends IService { void connectRfid(BmVehicleRfidParam params); + Boolean updateRfid(UpdateRfidParam params); + void writeEpc(String id); BmVehicleRfid findByDeviceCode(String linkDeviceCode); diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidEventDataParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidEventDataParam.java new file mode 100644 index 0000000..c2579fc --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidEventDataParam.java @@ -0,0 +1,33 @@ +package org.nl.acs.rfid_manage.service.dto; + +import lombok.*; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.common.domain.query.BaseQuery; + +import java.util.List; + +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class UpdateRfidEventDataParam extends BaseQuery { + /** + * reader_name + */ + private String ep; + /** + * event_type + */ + private String bd; + /** + * reader_name + */ + private Integer at; + /** + * event_type + */ + private Integer rc; + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidParam.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidParam.java new file mode 100644 index 0000000..0c9b90b --- /dev/null +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/dto/UpdateRfidParam.java @@ -0,0 +1,27 @@ +package org.nl.acs.rfid_manage.service.dto; + +import lombok.*; +import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.common.domain.query.BaseQuery; + +import java.util.List; + +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class UpdateRfidParam extends BaseQuery { + /** + * reader_name + */ + private String reader_name; + /** + * event_type + */ + private String event_type; + + private Object event_data; + +} diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java index bda1148..52d6f71 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.acs.rfid_manage.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -12,14 +13,20 @@ import com.gg.reader.api.dal.GClient; import com.gg.reader.api.dal.HandlerTagEpcLog; import com.gg.reader.api.dal.HandlerTcpDisconnected; import com.gg.reader.api.protocol.gx.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nl.acs.rfid_manage.service.IbmVehicleRfidService; import org.nl.acs.rfid_manage.service.dao.BmVehicleRfid; import org.nl.acs.rfid_manage.service.dao.mapper.BmVehicleRfidMapper; import org.nl.acs.rfid_manage.service.dto.BmVehicleRfidParam; import org.nl.acs.rfid_manage.service.dto.EpcRecord; +import org.nl.acs.rfid_manage.service.dto.UpdateRfidEventDataParam; +import org.nl.acs.rfid_manage.service.dto.UpdateRfidParam; import org.nl.acs.utils.StructUtil; +import org.nl.common.domain.constant.DictConstantPool; import org.nl.common.domain.query.PageQuery; +import org.nl.system.service.user.dao.SysUser; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -27,12 +34,14 @@ import javax.annotation.Resource; import java.time.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @Service("bmVehicleRfidService") +@Slf4j public class BmVehicleRfidServiceImpl extends ServiceImpl implements IbmVehicleRfidService { @Resource @@ -72,6 +81,7 @@ public class BmVehicleRfidServiceImpl extends ServiceImpl + Object eventDataObj = params.getEvent_data(); + List updateRfidEventDataParamList = new ArrayList<>(); + + if (eventDataObj != null) { + try { + // 使用JSON转换将Object转为List + String jsonStr = JSON.toJSONString(eventDataObj); + updateRfidEventDataParamList = JSON.parseArray(jsonStr, UpdateRfidEventDataParam.class); + } catch (Exception e) { + log.error("类型转换失败: {}", e.getMessage()); + } + } + + if (CollectionUtils.isNotEmpty(updateRfidEventDataParamList)) { + UpdateRfidEventDataParam updateRfidEventDataParam = updateRfidEventDataParamList.get(0); + if (updateRfidEventDataParam != null && StringUtils.isNotBlank(updateRfidEventDataParam.getEp()) && StringUtils.isNotBlank(params.getReader_name())) { + update(new UpdateWrapper().set("rfid", updateRfidEventDataParam.getEp()).eq("device_code", params.getReader_name())); + } + } + } + else if(!"heart_beat".equals(params.getEvent_type())) { + update(new UpdateWrapper().set("rfid", null).eq("device_code", params.getReader_name())); + } + return true; + } + @Override public void writeEpc(String id) { GClient client = getClient("1"); @@ -184,6 +231,7 @@ public class BmVehicleRfidServiceImpl extends ServiceImpl new ConcurrentHashMap<>()) @@ -385,6 +443,7 @@ public class BmVehicleRfidServiceImpl extends ServiceImpl