From d127e27168d07199b0d4d55c0a5d431761f490d1 Mon Sep 17 00:00:00 2001 From: zhang <zc857179121@qq.com> Date: 星期三, 23 七月 2025 08:36:19 +0800 Subject: [PATCH] 保存一个版本 --- zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportLogServiceImpl.java | 16 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/WorkChartAxis.java | 37 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/LocMapper.java | 13 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensDevpThread.java | 817 ++++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportLogService.java | 9 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/SiteStatusType.java | 46 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnStatusType.java | 68 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/CrnSlave.java | 54 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReportLog.java | 130 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportServiceImpl.java | 18 zy-acs-wcs/src/main/resources/lib/simple-xml-2.7.1.jar | 0 zy-acs-fake/src/main/java/com/zy/acs/fake/FakeProcessor.java | 3 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvDuration.java | 149 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/BasDevpMapper.java | 18 zy-acs-wcs/src/main/resources/lib/rxtx-2.1.7.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteDetailVo.java | 47 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CommandPackage.java | 20 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/MainServiceImpl.java | 465 ++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/AgvDurationType.java | 13 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnLiftPosType.java | 45 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportMapper.java | 7 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/CrnThread.java | 11 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/AxisBean.java | 28 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/TaskStatusType.java | 31 zy-acs-framework/src/main/resources/templates/react-admin/Controller.txt | 12 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ReportThirdScheduler.java | 48 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/SlaveType.java | 21 zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/OpenBusSubmitParam.java | 18 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandStatusType.java | 45 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/ScaleThread.java | 169 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkMastMapper.java | 116 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnFingerPosType.java | 42 zy-acs-wcs/src/main/resources/lib/slf4j-simple-1.7.30.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnListVo.java | 149 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkMast.java | 403 ++ zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/WorkNoType.java | 48 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SlaveProperties.java | 45 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnStateTableVo.java | 65 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtectorHandler.java | 69 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnOperatorParam.java | 38 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkMastService.java | 13 zy-acs-wcs/src/main/resources/application.yml | 47 pom.xml | 1 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReport.java | 130 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDurationService.java | 14 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/StaDesc.java | 107 zy-acs-framework/src/main/resources/templates/react-admin/Entity.txt | 4 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/LedCommand.java | 37 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteLatestDataVo.java | 29 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportLogService.java | 9 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelCache.java | 62 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDurationServiceImpl.java | 21 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnDetailVo.java | 48 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportService.java | 9 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandType.java | 43 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/constant/Constant.java | 15 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/Loc.java | 209 + zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkDetl.java | 351 + zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/StaProtocol.java | 218 + zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReportLog.java | 130 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SystemProperties.java | 17 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteTableVo.java | 41 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/OnlineServer.java | 92 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolDecoder.java | 113 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReport.java | 130 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError5.java | 11 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/Slave.java | 17 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/PackageServerHandler.java | 62 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnProtocol.java | 422 ++ zy-acs-wcs/src/main/resources/lib/stax-api-1.0.1.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnModeType.java | 43 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError2.java | 60 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/HandlerInitializer.java | 77 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/ReportThirdScheduler.java | 41 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/OfflineLogService.java | 10 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/OutputQueue.java | 20 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensCrnThread.java | 720 ++++ zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnForkPosType.java | 44 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/LedSlave.java | 24 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolEncoder.java | 51 zy-acs-wcs/src/main/resources/application-prod.yml | 60 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkDetlService.java | 15 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnDemoParam.java | 20 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnMsgTableVo.java | 90 zy-acs-wcs/src/main/resources/lib/uia-comm-0.5.1.jar | 0 zy-acs-manager/src/main/resources/mapper/manager/AgvDurationMapper.xml | 34 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError4.java | 23 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/DevpThread.java | 13 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/LedThread.java | 420 ++ zy-acs-wcs/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/Boot.java | 30 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportLogServiceImpl.java | 16 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnLatestDataVo.java | 28 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/BasDevpService.java | 53 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OfflineLogServiceImpl.java | 19 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportLogMapper.java | 7 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CrnCommand.java | 125 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError3.java | 60 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError6.java | 11 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/MainProcess.java | 73 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/AbstractInboundHandler.java | 34 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/StaDescMapper.java | 12 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/StaDescServiceImpl.java | 40 zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/utils/HttpHandler.java | 213 + zy-acs-wcs/pom.xml | 281 + zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/StatisticsScheduler.java | 88 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/LocServiceImpl.java | 22 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportLogMapper.java | 7 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/ScaleDataVo.java | 18 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnTaskModeType.java | 44 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BasDevpController.java | 140 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportServiceImpl.java | 16 zy-acs-manager/src/main/resources/mapper/manager/OfflineLogMapper.xml | 35 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ThreadHandler.java | 9 zy-acs-wcs/src/main/resources/lib/stax-1.2.0.jar | 0 zy-acs-framework/src/main/java/com/zy/acs/framework/controller/AbstractBaseController.java | 21 zy-acs-wcs/src/main/resources/lib/uia-message-0.6.0.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError1.java | 60 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/PlcErrorTableVo.java | 20 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportService.java | 9 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/DevpSlave.java | 50 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/Task.java | 22 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportMapper.java | 7 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/IoModeType.java | 32 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/MessageQueue.java | 153 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/OfflineLog.java | 139 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDurationMapper.java | 14 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/BarcodeThread.java | 66 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/ApplyInDevpDto.java | 28 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkDetlMapper.java | 20 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/domain/ChPackage.java | 72 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/CrnStatusType.java | 54 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/SlaveConnection.java | 63 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelAttrKey.java | 18 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkMastServiceImpl.java | 15 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/LocService.java | 12 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/StaDescService.java | 13 zy-acs-wcs/src/main/resources/lib/xpp3-1.1.3.3.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CommandLogVo.java | 20 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/LocChartPie.java | 46 zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar | 0 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/OfflineLogMapper.java | 10 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/SystemSwitchParam.java | 30 zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/TaskDto.java | 23 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnTemp1.java | 47 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/BasDevpServiceImpl.java | 65 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/properties/TcpProperties.java | 45 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/BasDevp.java | 306 + zy-acs-wcs/src/main/resources/lib/slf4j-api-1.7.30.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/BarcodeDataVo.java | 18 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkDetlServiceImpl.java | 15 zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ServerBootstrap.java | 121 zy-acs-wcs/src/main/resources/lib/uia-utils-0.2.0.jar | 0 zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BaseController.java | 38 155 files changed, 10,530 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index e7d2831..10b0c1c 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ <module>zy-acs-gateway</module> <module>zy-acs-manager</module> <module>zy-acs-fake</module> +<!-- <module>zy-acs-wcs</module>--> </modules> <properties> diff --git a/zy-acs-fake/src/main/java/com/zy/acs/fake/FakeProcessor.java b/zy-acs-fake/src/main/java/com/zy/acs/fake/FakeProcessor.java index 87f0314..6cce46b 100644 --- a/zy-acs-fake/src/main/java/com/zy/acs/fake/FakeProcessor.java +++ b/zy-acs-fake/src/main/java/com/zy/acs/fake/FakeProcessor.java @@ -13,7 +13,6 @@ import com.zy.acs.framework.common.Cools; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @@ -102,7 +101,7 @@ /** * 1.AgvDataService.dataProcess [ agvDetail: vol, code, agvAngle, agvStatus ] * 2.MainService.upDataSubscribe - * 3.AgvCmdService.executeRequest {@link com.zy.acs.manager.core.service.AgvCmdService#executeAgvActionCmd} + * 3.AgvCmdService.executeRequest {@link com.zy.acs.wcs.core.service.AgvCmdService#executeAgvActionCmd} * 4.AgvServiceImpl.judgeOnline */ // Simulator diff --git a/zy-acs-framework/src/main/java/com/zy/acs/framework/controller/AbstractBaseController.java b/zy-acs-framework/src/main/java/com/zy/acs/framework/controller/AbstractBaseController.java index c260c2b..859f201 100644 --- a/zy-acs-framework/src/main/java/com/zy/acs/framework/controller/AbstractBaseController.java +++ b/zy-acs-framework/src/main/java/com/zy/acs/framework/controller/AbstractBaseController.java @@ -17,16 +17,16 @@ */ public abstract class AbstractBaseController { - public <T> List exportSupport(List<T> list, List<String> fields){ - if (Cools.isEmpty(list)){ + public <T> List exportSupport(List<T> list, List<String> fields) { + if (Cools.isEmpty(list)) { throw new CoolException(BaseRes.EMPTY); } try { List<List<Object>> result = new ArrayList<>(); Method[] methods = list.get(0).getClass().getMethods(); - for (T t : list){ + for (T t : list) { List<Object> node = new ArrayList<>(); - for (String field : fields){ + for (String field : fields) { for (Method method : methods) { if (("get" + field).toLowerCase().equals(method.getName().toLowerCase())) { Object val = method.invoke(t); @@ -38,22 +38,17 @@ result.add(node); } return result; - } catch (Exception e){ + } catch (Exception e) { throw new RuntimeException(e); } } - public static Map<String, Object> excludeTrash(Map<String, Object> map){ - if (Cools.isEmpty(map)){ + public static Map<String, Object> excludeTrash(Map<String, Object> map) { + if (Cools.isEmpty(map)) { return new HashMap<>(); } - map.entrySet().removeIf(next -> next.getKey().equals("curr") - || next.getKey().equals("limit") - || next.getKey().equals("orderByField") - || next.getKey().equals("orderByType") - || next.getKey().equals("condition") - || Cools.isEmpty(next.getValue())); + map.entrySet().removeIf(next -> next.getKey().equals("curr") || next.getKey().equals("limit") || next.getKey().equals("orderByField") || next.getKey().equals("orderByType") || next.getKey().equals("condition") || Cools.isEmpty(next.getValue())); return map; } diff --git a/zy-acs-framework/src/main/resources/templates/react-admin/Controller.txt b/zy-acs-framework/src/main/resources/templates/react-admin/Controller.txt index 1a112d3..e4a4ea7 100644 --- a/zy-acs-framework/src/main/resources/templates/react-admin/Controller.txt +++ b/zy-acs-framework/src/main/resources/templates/react-admin/Controller.txt @@ -4,14 +4,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.R; -import com.zy.acs.manager.common.utils.ExcelUtil; -import com.zy.acs.manager.common.annotation.OperationLog; -import com.zy.acs.manager.common.domain.BaseParam; -import com.zy.acs.manager.common.domain.KeyValVo; -import com.zy.acs.manager.common.domain.PageParam; +import com.zy.acs.wcs.common.utils.ExcelUtil; +import com.zy.acs.wcs.common.annotation.OperationLog; +import com.zy.acs.wcs.common.domain.BaseParam; +import com.zy.acs.wcs.common.domain.KeyValVo; +import com.zy.acs.wcs.common.domain.PageParam; import @{COMPANYNAME}.entity.@{ENTITYNAME}; import @{COMPANYNAME}.service.@{ENTITYNAME}Service; -import com.zy.acs.manager.system.controller.BaseController; +import com.zy.acs.wcs.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/zy-acs-framework/src/main/resources/templates/react-admin/Entity.txt b/zy-acs-framework/src/main/resources/templates/react-admin/Entity.txt index f20d0e9..b96825a 100644 --- a/zy-acs-framework/src/main/resources/templates/react-admin/Entity.txt +++ b/zy-acs-framework/src/main/resources/templates/react-admin/Entity.txt @@ -10,8 +10,8 @@ import lombok.Data; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.SpringUtils; -import com.zy.acs.manager.system.service.UserService; -import com.zy.acs.manager.system.service.HostService; +import com.zy.acs.wcs.system.service.UserService; +import com.zy.acs.wcs.system.service.HostService; import java.io.Serializable; import java.util.Date; diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/ReportThirdScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/ReportThirdScheduler.java new file mode 100644 index 0000000..1d8ada4 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/ReportThirdScheduler.java @@ -0,0 +1,41 @@ +package com.zy.acs.manager.core.scheduler; + +import com.zy.acs.common.utils.RedisSupport; +import com.zy.acs.framework.common.SnowflakeIdWorker; +import com.zy.acs.manager.core.service.MainLockWrapService; +import com.zy.acs.manager.core.service.MainService; +import com.zy.acs.manager.core.service.TrafficService; +import com.zy.acs.manager.manager.entity.TaskReport; +import com.zy.acs.manager.manager.service.*; +import com.zy.acs.manager.system.service.ConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Slf4j +@Component +public class ReportThirdScheduler { + + + @Autowired + private TaskReportService taskReportService; + + +// @Scheduled(fixedDelay = 1000) + public void execute() { +// List<TaskReport> list = taskReportService.list(); +// for (TaskReport taskReport : list) { +// report(taskReport); +// } + } + + @Transactional + public void report(TaskReport taskReport) { + //TODO 鍘熷厛搴旇璋冪敤鎺ュ彛锛岀幇鍦ㄧ洿鎺ヤ慨鏀规暟鎹� + + } +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/StatisticsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/StatisticsScheduler.java new file mode 100644 index 0000000..0fadee3 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/StatisticsScheduler.java @@ -0,0 +1,88 @@ +package com.zy.acs.manager.core.scheduler; + +import com.zy.acs.common.constant.RedisConstant; +import com.zy.acs.common.enums.AgvStatusType; +import com.zy.acs.common.utils.RedisSupport; +import com.zy.acs.manager.manager.entity.*; +import com.zy.acs.manager.manager.enums.TaskStsType; +import com.zy.acs.manager.manager.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +public class StatisticsScheduler { + + private final RedisSupport redis = RedisSupport.defaultRedisSupport; + + @Autowired + private AgvService agvService; + + @Autowired + private AgvDetailService agvDetailService; + + @Autowired + private TaskService taskService; + + @Autowired + private AgvDurationService agvDurationService; + + @Autowired + private OfflineLogService offlineLogService; + + /** + * 瀹氭椂妫�鏌GV鏄惁鎺夌嚎,骞朵笖淇濆瓨璁板綍 + */ + @Scheduled(cron = "0/5 * * * * ? ") + public void execute() { + List<Agv> list = agvService.list(); + Object object = null; + OfflineLog offlineLog; + for (Agv agv : list) { + if (agv.getStatus() == 1) { + object = redis.getObject(RedisConstant.AGV_ONLINE_FLAG, agv.getUuid()); + if (object == null) { + offlineLog = offlineLogService.getTopOfflineLog(agv.getId()); + if (offlineLog == null) { + offlineLog = new OfflineLog(); + offlineLog.setAgvId(agv.getId()); + offlineLog.setHappenTime(new Date()); + offlineLogService.save(offlineLog); + } + } else { + offlineLog = offlineLogService.getTopOfflineLog(agv.getId()); + if (offlineLog != null) { + offlineLog.setResetTime(new Date()); + offlineLog.setDuration(offlineLog.getResetTime().getTime() - offlineLog.getHappenTime().getTime()); + offlineLogService.updateById(offlineLog); + } + } + } + } + } + + @Scheduled(cron = "0/5 * * * * ? ") + public void execute2() { + List<AgvDuration> agvDurations = agvDurationService.listUnFinish(); + for (AgvDuration agvDuration : agvDurations) { + Task task = taskService.getById(agvDuration.getTaskNo()); + if (task.getTaskSts() == TaskStsType.COMPLETE.val()) { + AgvDetail agvDetail = agvDetailService.selectByAgvId(agvDuration.getAgvId()); + if (agvDetail.getAgvStatus() != AgvStatusType.CHARGE) { + agvDuration.setResetTime(new Date()); + agvDuration.setDuration(agvDuration.getResetTime().getTime() - agvDuration.getHappenTime().getTime()); + agvDurationService.updateById(agvDuration); + } + } else if (task.getTaskSts() == TaskStsType.CANCEL.val()) { + agvDurationService.removeById(agvDuration.getId()); + } else { + + } + } + } +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvDuration.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvDuration.java new file mode 100644 index 0000000..8edbf9d --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/AgvDuration.java @@ -0,0 +1,149 @@ +package com.zy.acs.manager.manager.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.common.SpringUtils; +import com.zy.acs.manager.manager.service.AgvService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_agv_duration") +public class AgvDuration implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value = "浠诲姟鍙�") + private Long taskNo; + /** + * 绫诲瀷 + */ + @ApiModelProperty(value = "绫诲瀷锛�1鍏呯數") + private Integer type; + + /** + * 杞﹁締 + */ + @ApiModelProperty(value = "杞﹁締") + private Long agvId; + + /** + * 鍙戠敓鏃堕棿 + */ + @ApiModelProperty(value = "鍙戠敓鏃堕棿") + private Date happenTime; + + /** + * 鎭㈠鏃堕棿 + */ + @ApiModelProperty(value = "鎭㈠鏃堕棿") + private Date resetTime; + + /** + * 鎸佺画鏃堕棿 + */ + @ApiModelProperty(value = "鎸佺画鏃堕棿") + private Long duration; + + /** + * 鐘舵�� 1: 姝e父 0: 鍐荤粨 + */ + @ApiModelProperty(value = "鐘舵�� 1: 姝e父 0: 鍐荤粨 ") + private Integer status; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + + public String getAgvId$() { + AgvService service = SpringUtils.getBean(AgvService.class); + Agv agv = service.getById(this.agvId); + if (!Cools.isEmpty(agv)) { + return String.valueOf(agv.getUuid()); + } + return null; + } + + public String getStatus$() { + if (null == this.status) { + return null; + } + switch (this.status) { + case 1: + return "姝e父"; + case 0: + return "鍐荤粨"; + default: + return String.valueOf(this.status); + } + } + + + public Boolean getStatusBool() { + if (null == this.status) { + return null; + } + switch (this.status) { + case 1: + return true; + case 0: + return false; + default: + return null; + } + } + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/OfflineLog.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/OfflineLog.java new file mode 100644 index 0000000..0d95cef --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/OfflineLog.java @@ -0,0 +1,139 @@ +package com.zy.acs.manager.manager.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.common.SpringUtils; +import com.zy.acs.manager.manager.service.AgvService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_offline_log") +public class OfflineLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 杞﹁締 + */ + @ApiModelProperty(value = "杞﹁締") + private Long agvId; + + /** + * 鍙戠敓鏃堕棿 + */ + @ApiModelProperty(value = "鍙戠敓鏃堕棿") + private Date happenTime; + + /** + * 鎭㈠鏃堕棿 + */ + @ApiModelProperty(value = "鎭㈠鏃堕棿") + private Date resetTime; + + /** + * 鎸佺画鏃堕棿 + */ + @ApiModelProperty(value = "鎸佺画鏃堕棿") + private Long duration; + + /** + * 鐘舵�� 1: 姝e父 0: 鍐荤粨 + */ + @ApiModelProperty(value = "鐘舵�� 1: 姝e父 0: 鍐荤粨 ") + private Integer status; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + + public String getAgvId$() { + AgvService service = SpringUtils.getBean(AgvService.class); + Agv agv = service.getById(this.agvId); + if (!Cools.isEmpty(agv)) { + return String.valueOf(agv.getUuid()); + } + return null; + } + + public String getStatus$() { + if (null == this.status) { + return null; + } + switch (this.status) { + case 1: + return "姝e父"; + case 0: + return "鍐荤粨"; + default: + return String.valueOf(this.status); + } + } + + + public Boolean getStatusBool() { + if (null == this.status) { + return null; + } + switch (this.status) { + case 1: + return true; + case 0: + return false; + default: + return null; + } + } + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReport.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReport.java new file mode 100644 index 0000000..526c8c8 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReport.java @@ -0,0 +1,130 @@ +package com.zy.acs.manager.manager.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_task_report") +public class TaskReport implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + + /** + * 鎬荤嚎 + */ + @ApiModelProperty(value = "鎬荤嚎") + private String busNo; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value = "浠诲姟鍙�") + private String seqNum; + + + /** + * 浠诲姟杩涘害 + */ + @ApiModelProperty(value = "浠诲姟杩涘害") + private Long taskSts; + + + /** + * AGV + */ + @ApiModelProperty(value = "AGV") + private Long agvId; + + + + + /** + * 璧峰绔� + */ + @ApiModelProperty(value = "璧峰绔�") + private Long oriSta; + + /** + * 璧峰搴撲綅 + */ + @ApiModelProperty(value = "璧峰搴撲綅") + private Long oriLoc; + + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value = "鐩爣绔�") + private Long destSta; + + /** + * 鐩爣搴撲綅 + */ + @ApiModelProperty(value = "鐩爣搴撲綅") + private Long destLoc; + + + /** + * 鎵樼洏鐮� + */ + @ApiModelProperty(value = "鎵樼洏鐮�") + private String zpallet; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReportLog.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReportLog.java new file mode 100644 index 0000000..997b0b1 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/TaskReportLog.java @@ -0,0 +1,130 @@ +package com.zy.acs.manager.manager.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_task_report_log") +public class TaskReportLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + + /** + * 鎬荤嚎 + */ + @ApiModelProperty(value = "鎬荤嚎") + private String busNo; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value = "浠诲姟鍙�") + private String seqNum; + + + /** + * 浠诲姟杩涘害 + */ + @ApiModelProperty(value = "浠诲姟杩涘害") + private Long taskSts; + + + /** + * AGV + */ + @ApiModelProperty(value = "AGV") + private Long agvId; + + + + + /** + * 璧峰绔� + */ + @ApiModelProperty(value = "璧峰绔�") + private Long oriSta; + + /** + * 璧峰搴撲綅 + */ + @ApiModelProperty(value = "璧峰搴撲綅") + private Long oriLoc; + + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value = "鐩爣绔�") + private Long destSta; + + /** + * 鐩爣搴撲綅 + */ + @ApiModelProperty(value = "鐩爣搴撲綅") + private Long destLoc; + + + /** + * 鎵樼洏鐮� + */ + @ApiModelProperty(value = "鎵樼洏鐮�") + private String zpallet; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/AgvDurationType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/AgvDurationType.java new file mode 100644 index 0000000..3175e78 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/AgvDurationType.java @@ -0,0 +1,13 @@ +package com.zy.acs.manager.manager.enums; + +public enum AgvDurationType { + CHARGE(1), + OFFLINE(2), + ; + + public int val; + + AgvDurationType(int val) { + this.val = val; + } +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDurationMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDurationMapper.java new file mode 100644 index 0000000..42a2818 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDurationMapper.java @@ -0,0 +1,14 @@ +package com.zy.acs.manager.manager.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.manager.manager.entity.AgvDuration; +import com.zy.acs.manager.manager.entity.OfflineLog; +import com.zy.acs.manager.manager.entity.VehFaultRec; + +import java.util.List; + +public interface AgvDurationMapper extends BaseMapper<AgvDuration> { + + + List<AgvDuration> listUnFinish(); +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/OfflineLogMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/OfflineLogMapper.java new file mode 100644 index 0000000..5b2e9d6 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/OfflineLogMapper.java @@ -0,0 +1,10 @@ +package com.zy.acs.manager.manager.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.manager.manager.entity.OfflineLog; + +public interface OfflineLogMapper extends BaseMapper<OfflineLog> { + + OfflineLog getTopOfflineLog(Long agvId); + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportLogMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportLogMapper.java new file mode 100644 index 0000000..3f64485 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportLogMapper.java @@ -0,0 +1,7 @@ +package com.zy.acs.manager.manager.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.manager.manager.entity.TaskReportLog; + +public interface TaskReportLogMapper extends BaseMapper<TaskReportLog> { +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportMapper.java new file mode 100644 index 0000000..f87f346 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/TaskReportMapper.java @@ -0,0 +1,7 @@ +package com.zy.acs.manager.manager.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.manager.manager.entity.TaskReport; + +public interface TaskReportMapper extends BaseMapper<TaskReport> { +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDurationService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDurationService.java new file mode 100644 index 0000000..8a2cb29 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDurationService.java @@ -0,0 +1,14 @@ +package com.zy.acs.manager.manager.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.manager.manager.entity.AgvDuration; +import com.zy.acs.manager.manager.entity.OfflineLog; + +import java.util.List; + +public interface AgvDurationService extends IService<AgvDuration> { + + + List<AgvDuration> listUnFinish(); + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/OfflineLogService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/OfflineLogService.java new file mode 100644 index 0000000..fd21335 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/OfflineLogService.java @@ -0,0 +1,10 @@ +package com.zy.acs.manager.manager.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.manager.manager.entity.OfflineLog; + +public interface OfflineLogService extends IService<OfflineLog> { + + OfflineLog getTopOfflineLog(Long agvId); + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportLogService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportLogService.java new file mode 100644 index 0000000..4865d42 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportLogService.java @@ -0,0 +1,9 @@ +package com.zy.acs.manager.manager.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.manager.manager.entity.TaskReportLog; + +public interface TaskReportLogService extends IService<TaskReportLog> { + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportService.java new file mode 100644 index 0000000..647bf68 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TaskReportService.java @@ -0,0 +1,9 @@ +package com.zy.acs.manager.manager.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.manager.manager.entity.TaskReport; + +public interface TaskReportService extends IService<TaskReport> { + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDurationServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDurationServiceImpl.java new file mode 100644 index 0000000..83faf0d --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDurationServiceImpl.java @@ -0,0 +1,21 @@ +package com.zy.acs.manager.manager.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.manager.manager.entity.AgvDuration; +import com.zy.acs.manager.manager.mapper.AgvDurationMapper; +import com.zy.acs.manager.manager.service.AgvDurationService; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +@Service("agvDurationService") +public class AgvDurationServiceImpl extends ServiceImpl<AgvDurationMapper, AgvDuration> implements AgvDurationService { + + + @Override + public List<AgvDuration> listUnFinish() { + + return baseMapper.listUnFinish(); + } +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OfflineLogServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OfflineLogServiceImpl.java new file mode 100644 index 0000000..8244fb8 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/OfflineLogServiceImpl.java @@ -0,0 +1,19 @@ +package com.zy.acs.manager.manager.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.manager.manager.entity.OfflineLog; +import com.zy.acs.manager.manager.mapper.OfflineLogMapper; +import com.zy.acs.manager.manager.service.OfflineLogService; +import org.springframework.stereotype.Service; + +@Service("offlineLogService") +public class OfflineLogServiceImpl extends ServiceImpl<OfflineLogMapper, OfflineLog> implements OfflineLogService { + + + @Override + public OfflineLog getTopOfflineLog(Long agvId) { + return baseMapper.getTopOfflineLog(agvId); + } + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportLogServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportLogServiceImpl.java new file mode 100644 index 0000000..c4b1b22 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportLogServiceImpl.java @@ -0,0 +1,16 @@ +package com.zy.acs.manager.manager.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.manager.manager.entity.TaskReportLog; +import com.zy.acs.manager.manager.mapper.TaskReportLogMapper; +import com.zy.acs.manager.manager.service.TaskReportLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("taskReportLogService") +public class TaskReportLogServiceImpl extends ServiceImpl<TaskReportLogMapper, TaskReportLog> implements TaskReportLogService { + + + +} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportServiceImpl.java new file mode 100644 index 0000000..75e8c79 --- /dev/null +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskReportServiceImpl.java @@ -0,0 +1,18 @@ +package com.zy.acs.manager.manager.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.manager.manager.entity.*; +import com.zy.acs.manager.manager.mapper.TaskReportMapper; +import com.zy.acs.manager.manager.service.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Slf4j +@Service("taskReportService") +public class TaskReportServiceImpl extends ServiceImpl<TaskReportMapper, TaskReport> implements TaskReportService { + + + +} diff --git a/zy-acs-manager/src/main/resources/mapper/manager/AgvDurationMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/AgvDurationMapper.xml new file mode 100644 index 0000000..5ef6df7 --- /dev/null +++ b/zy-acs-manager/src/main/resources/mapper/manager/AgvDurationMapper.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.acs.manager.manager.mapper.AgvDurationMapper"> + + <!-- 鍏宠仈鏌ヨsql --> + <sql id="selectSql"> + SELECT a.* + FROM man_agv_duration a + <where> + AND a.deleted = 0 + <if test="param.id != null"> + AND a.id = #{param.id} + </if> + <if test="param.status != null"> + AND a.status = #{param.status} + </if> + <if test="param.keywords != null"> + AND ( + a.memo LIKE CONCAT('%', #{param.keywords}, '%') + ) + </if> + </where> + </sql> + + + + <select id="listUnFinish" resultType="com.zy.acs.manager.manager.entity.AgvDuration"> + SELECT * + FROM man_agv_duration + WHERE reset_time is null + </select> + +</mapper> + diff --git a/zy-acs-manager/src/main/resources/mapper/manager/OfflineLogMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/OfflineLogMapper.xml new file mode 100644 index 0000000..8a1246c --- /dev/null +++ b/zy-acs-manager/src/main/resources/mapper/manager/OfflineLogMapper.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.acs.manager.manager.mapper.OfflineLogMapper"> + + <!-- 鍏宠仈鏌ヨsql --> + <sql id="selectSql"> + SELECT a.* + FROM man_offline_log a + <where> + AND a.deleted = 0 + <if test="param.id != null"> + AND a.id = #{param.id} + </if> + <if test="param.status != null"> + AND a.status = #{param.status} + </if> + <if test="param.keywords != null"> + AND ( + a.memo LIKE CONCAT('%', #{param.keywords}, '%') + ) + </if> + </where> + </sql> + + + + <select id="getTopOfflineLog" resultType="com.zy.acs.manager.manager.entity.OfflineLog"> + SELECT * + FROM man_offline_log + WHERE agv_id = #{agvId} + and reset_time is null + ORDER BY happen_time DESC LIMIT 1 + </select> + +</mapper> diff --git a/zy-acs-wcs/pom.xml b/zy-acs-wcs/pom.xml new file mode 100644 index 0000000..36e6a31 --- /dev/null +++ b/zy-acs-wcs/pom.xml @@ -0,0 +1,281 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <artifactId>zy-acs-wcs</artifactId> + <version>1.0.0</version> + <packaging>war</packaging> + + <name>wcs</name> + + <parent> + <groupId>com.zy</groupId> + <artifactId>acs</artifactId> + <version>1.0.0</version> + </parent> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <mysql-driver.version>5.1.47</mysql-driver.version> + </properties> + + <dependencies> + <dependency> + <groupId>com.zy</groupId> + <artifactId>acs-common</artifactId> + <version>1.0.0</version> + </dependency> + + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-mail</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-websocket</artifactId> + </dependency> + + <dependency> + <groupId>com.ibeetl</groupId> + <artifactId>beetl</artifactId> + <version>3.6.1.RELEASE</version> + </dependency> + + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>${mysql-driver.version}</version> + </dependency> + <dependency> + <groupId>com.microsoft.sqlserver</groupId> + <artifactId>mssql-jdbc</artifactId> + <version>8.2.2.jre8</version> + </dependency> + + <!-- mybatis-plus --> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-boot-starter</artifactId> + <version>3.4.1</version> + </dependency> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>mybatis-plus-generator</artifactId> + <version>3.4.1</version> + </dependency> + + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + <version>1.9.19</version> <!-- 纭繚浣跨敤鏈�鏂扮増鏈� --> + </dependency> + <dependency> + <groupId>org.aspectj</groupId> + <artifactId>aspectjweaver</artifactId> + <version>1.9.19</version> <!-- 鐢ㄤ簬缁囧叆鍒囬潰 --> + </dependency> + + <!-- swagger --> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-boot-starter</artifactId> + <version>3.0.0</version> + </dependency> + + <!-- jjwt --> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-impl</artifactId> + <version>0.11.2</version> + </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-jackson</artifactId> + <version>0.11.2</version> + </dependency> + + <!-- 鍥惧舰楠岃瘉鐮� --> + <dependency> + <groupId>com.github.whvcse</groupId> + <artifactId>easy-captcha</artifactId> + <version>1.6.2</version> + </dependency> + + <!-- open office, 鐢ㄤ簬鏂囨。杞琾df瀹炵幇鍦ㄧ嚎棰勮 --> + <dependency> + <groupId>com.github.livesense</groupId> + <artifactId>jodconverter-core</artifactId> + <version>1.0.5</version> + </dependency> + + <!-- tika, 鐢ㄤ簬FileServer鑾峰彇content-type --> + <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-core</artifactId> + <version>2.1.0</version> + </dependency> + + <!-- druid --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>druid-spring-boot-starter</artifactId> + <version>1.2.6</version> + </dependency> + + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>easyexcel</artifactId> + <version>2.2.6</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + + <!-- nd4j --> +<!-- <dependency>--> +<!-- <groupId>org.nd4j</groupId>--> +<!-- <artifactId>nd4j-native-platform</artifactId>--> +<!-- <!– java 8 –>--> +<!--<!– <version>1.0.0-M1.1</version>–>--> +<!-- <!– java 11 –>--> +<!-- <version>1.0.0-M2.1</version>--> +<!-- </dependency>--> + + + <dependency> + <groupId>com.github.dathlin</groupId> + <artifactId>HslCommunication</artifactId> + <version>2.0.0</version> + </dependency> + <!-- led sdk --> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>5m3</artifactId> + <scope>system</scope> + <version>0.5.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>5m3message</artifactId> + <scope>system</scope> + <version>0.5.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>5m3doc</artifactId> + <scope>system</scope> + <version>0.5.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>rxtx</artifactId> + <scope>system</scope> + <version>2.1.7</version> + <systemPath>${project.basedir}/src/main/resources/lib/rxtx-2.1.7.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>simple-xml</artifactId> + <scope>system</scope> + <version>2.7.1</version> + <systemPath>${project.basedir}/src/main/resources/lib/simple-xml-2.7.1.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>stax</artifactId> + <scope>system</scope> + <version>1.2.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/stax-1.2.0.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>stax-api</artifactId> + <scope>system</scope> + <version>1.0.1</version> + <systemPath>${project.basedir}/src/main/resources/lib/stax-api-1.0.1.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>uia-comm</artifactId> + <scope>system</scope> + <version>0.5.1</version> + <systemPath>${project.basedir}/src/main/resources/lib/uia-comm-0.5.1.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>uia-message</artifactId> + <scope>system</scope> + <version>0.6.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/uia-message-0.6.0.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>uia-utils</artifactId> + <scope>system</scope> + <version>0.2.0</version> + <systemPath>${project.basedir}/src/main/resources/lib/uia-utils-0.2.0.jar</systemPath> + </dependency> + <dependency> + <groupId>com.wcs.led</groupId> + <artifactId>xpp3</artifactId> + <scope>system</scope> + <version>1.1.3.3</version> + <systemPath>${project.basedir}/src/main/resources/lib/xpp3-1.1.3.3.jar</systemPath> + </dependency> + <dependency> + <groupId>org.yaml</groupId> + <artifactId>snakeyaml</artifactId> + <version>1.33</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.11.0</version> + </dependency> + <dependency> + <groupId>de.schlichtherle.truelicense</groupId> + <artifactId>truelicense-core</artifactId> + <version>1.33</version> + </dependency> + + <!-- okHttp3 --> + <dependency> + <groupId>com.squareup.okhttp3</groupId> + <artifactId>okhttp</artifactId> + <version>3.10.0</version> + </dependency> + </dependencies> + + <build> + <finalName>rcs-wcs</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + +</project> diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/Boot.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/Boot.java new file mode 100644 index 0000000..d3d1961 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/Boot.java @@ -0,0 +1,30 @@ +package com.zy.acs.wcs; + +import com.zy.common.utils.RandomValidateCodeUtil; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableAsync +@EnableScheduling +@SpringBootApplication +public class Boot extends SpringBootServletInitializer { + + public static void main(String[] args) { + RandomValidateCodeUtil.init(); + SpringApplication.run(Boot.class, args); +// new Thread(()-> { +// ServerBootstrap serverBootstrap = SpringUtils.getBean(ServerBootstrap.class); +// serverBootstrap.init(); +// }).start(); + + } + +// @Override +// protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { +// return builder.sources(Boot.class); +// } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BasDevpController.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BasDevpController.java new file mode 100644 index 0000000..7d980d7 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BasDevpController.java @@ -0,0 +1,140 @@ +package com.zy.acs.wcs.asrs.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zy.acs.framework.annotations.ManagerAuth; +import com.zy.acs.framework.common.BaseRes; +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.common.DateUtils; +import com.zy.acs.framework.common.R; +import com.zy.acs.wcs.asrs.entity.BasDevp; +import com.zy.acs.wcs.asrs.service.BasDevpService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@RestController +public class BasDevpController extends BaseController { + + @Autowired + private BasDevpService basDevpService; + + @RequestMapping(value = "/basDevp/{id}/auth") + @ManagerAuth + public R get(@PathVariable("id") Long id) { + return R.ok(basDevpService.getById(String.valueOf(id))); + } + + @RequestMapping(value = "/basDevp/list/auth") + @ManagerAuth + public R list(@RequestParam(defaultValue = "1") Integer curr, + @RequestParam(defaultValue = "10") Integer limit, + @RequestParam(required = false) String orderByField, + @RequestParam(required = false) String orderByType, + @RequestParam Map<String, Object> param) { + excludeTrash(param); + QueryWrapper<BasDevp> wrapper = new QueryWrapper<>(); + convert(param, wrapper); + if (!Cools.isEmpty(orderByField)) { + wrapper.orderBy(false, "asc".equals(orderByType), humpToLine(orderByField)); + } + return R.ok(basDevpService.page(new Page<>(curr, limit), wrapper)); + } + + private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper) { + for (Map.Entry<String, Object> entry : map.entrySet()) { + String val = String.valueOf(entry.getValue()); + if (val.contains(RANGE_TIME_LINK)) { + String[] dates = val.split(RANGE_TIME_LINK); + wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); + wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else { + wrapper.like(entry.getKey(), val); + } + } + } + + @RequestMapping(value = "/basDevp/add/auth") + @ManagerAuth(memo = "绔欑偣娣诲姞") + public R add(BasDevp basDevp) { + basDevp.setModiUser(getUserId()); + basDevp.setModiTime(new Date()); + basDevp.setAppeUser(getUserId()); + basDevp.setAppeTime(new Date()); + basDevpService.save(basDevp); + return R.ok(); + } + + @RequestMapping(value = "/basDevp/update/auth") + @ManagerAuth(memo = "绔欑偣淇敼") + public R update(BasDevp basDevp) { + if (Cools.isEmpty(basDevp) || null == basDevp.getDevNo()) { + return R.error(); + } + basDevp.setModiUser(getUserId()); + basDevp.setModiTime(new Date()); + basDevpService.updateById(basDevp); + return R.ok("淇敼瀹屾垚"); + } + + @RequestMapping(value = "/basDevp/delete/auth") + @ManagerAuth(memo = "绔欑偣鍒犻櫎") + public R delete(@RequestParam String param) { + List<BasDevp> list = JSONArray.parseArray(param, BasDevp.class); + if (Cools.isEmpty(list)) { + return R.error(); + } + for (BasDevp entity : list) { + basDevpService.removeById(entity.getDevNo()); + } + return R.ok(); + } + + @RequestMapping(value = "/basDevp/export/auth") + @ManagerAuth(memo = "绔欑偣瀵煎嚭") + public R export(@RequestBody JSONObject param) { + List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); + QueryWrapper<BasDevp> wrapper = new QueryWrapper<>(); + Map<String, Object> map = excludeTrash(param.getJSONObject("basDevp")); + convert(map, wrapper); + List<BasDevp> list = basDevpService.list(wrapper); + return R.ok(exportSupport(list, fields)); + } + + @RequestMapping(value = "/basDevpQuery/auth") + @ManagerAuth + public R query(String condition) { + QueryWrapper<BasDevp> wrapper = new QueryWrapper<>(); + wrapper.like("dev_no", condition); + Page<BasDevp> page = basDevpService.page(new Page<>(0, 10), wrapper); + List<Map<String, Object>> result = new ArrayList<>(); + for (BasDevp basDevp : page.getRecords()) { + Map<String, Object> map = new HashMap<>(); + map.put("id", basDevp.getDevNo()); + map.put("value", basDevp.getDevNo()); + result.add(map); + } + return R.ok(result); + } + + @RequestMapping(value = "/basDevp/check/column/auth") + @ManagerAuth + public R query(@RequestBody JSONObject param) { + QueryWrapper<BasDevp> wrapper = new QueryWrapper<BasDevp>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val")); + if (null != basDevpService.getOne(wrapper)) { + return R.parse(BaseRes.REPEAT).add(getComment(BasDevp.class, String.valueOf(param.get("key")))); + } + return R.ok(); + } + + @RequestMapping(value = "/basDevp/weigh/auth") + @ManagerAuth(memo = "绔欑偣绉伴噸鏌ヨ") + public Double weigh(Integer dev_no) { + BasDevp basDevp = basDevpService.getById(dev_no); + return basDevp.getGrossWt(); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BaseController.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BaseController.java new file mode 100644 index 0000000..58a814d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/controller/BaseController.java @@ -0,0 +1,38 @@ +package com.zy.acs.wcs.asrs.controller; + +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.controller.AbstractBaseController; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Field; + +/** + * Created by vincent on 2019-09-09 + */ +public class BaseController extends AbstractBaseController { + + protected static final String RANGE_TIME_LINK = " - "; + + @Autowired + protected HttpServletRequest request; + + + protected Long getUserId() { + return Long.parseLong(String.valueOf(request.getAttribute("userId"))); + } + + + protected String getComment(Class<?> cls, String fieldName) { + Field[] fields = Cools.getAllFields(cls); + for (Field field : fields) { + if (fieldName.equals(field.getName())) { + return field.getAnnotation(ApiModelProperty.class).value(); + } + } + return ""; + } + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/AxisBean.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/AxisBean.java new file mode 100644 index 0000000..bcd3226 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/AxisBean.java @@ -0,0 +1,28 @@ +package com.zy.acs.wcs.asrs.domain.dto; + +/** + * 鏇茬嚎鍥捐〃json閿� + * + * @author admin + */ +public class AxisBean { + private String name; + private Integer[] data; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer[] getData() { + return data; + } + + public void setData(Integer[] data) { + this.data = data; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/WorkChartAxis.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/WorkChartAxis.java new file mode 100644 index 0000000..f4bcc8f --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/dto/WorkChartAxis.java @@ -0,0 +1,37 @@ +package com.zy.acs.wcs.asrs.domain.dto; + +/** + * 鍏ュ嚭搴撶粺璁℃洸绾垮浘 + * + * @author admin + * @date 2018骞�12鏈�12鏃� + */ +public class WorkChartAxis { + private String ymd; + private int inqty; + private int outqty; + + public String getYmd() { + return ymd; + } + + public void setYmd(String ymd) { + this.ymd = ymd; + } + + public int getInqty() { + return inqty; + } + + public void setInqty(int inqty) { + this.inqty = inqty; + } + + public int getOutqty() { + return outqty; + } + + public void setOutqty(int outqty) { + this.outqty = outqty; + } +} \ No newline at end of file diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/CrnStatusType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/CrnStatusType.java new file mode 100644 index 0000000..85befb3 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/CrnStatusType.java @@ -0,0 +1,54 @@ +package com.zy.acs.wcs.asrs.domain.enums; + +/** + * 鍫嗗灈鏈虹姸鎬佹灇涓� + */ +public enum CrnStatusType { + + // 鍏ュ簱 + MACHINE_PAKIN("鍏ュ簱"), + // 鍑哄簱 + MACHINE_PAKOUT("鍑哄簱"), + // 搴撳埌搴� + MACHINE_STOCK_MOVE("搴撳埌搴�"), + // 绔欏埌绔� + MACHINE_SITE_MOVE("绔欏埌绔�"), + // p to p + MACHINE_P_MOVE("PToP"), + // 寮傚父 + MACHINE_ERROR("寮傚父"), + // 鑷姩 + MACHINE_AUTO("鑷姩"), + // 闈炶嚜鍔�/鎵嬪姩 + MACHINE_UN_AUTO("闈炶嚜鍔�"), + ; + + private String desc; + + CrnStatusType(String desc) { + this.desc = desc; + } + + public static CrnStatusType process(Integer ioType) { + if (ioType == 2) { + return MACHINE_PAKOUT; + } else if (ioType < 100 && ioType != 3 && ioType != 6 && ioType != 11) { + return MACHINE_PAKIN; + } else if (ioType == 3) { + return MACHINE_SITE_MOVE; + } else if (ioType == 11) { + return MACHINE_STOCK_MOVE; + } else { + return MACHINE_ERROR; + } + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/SiteStatusType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/SiteStatusType.java new file mode 100644 index 0000000..6951c2a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/SiteStatusType.java @@ -0,0 +1,46 @@ +package com.zy.acs.wcs.asrs.domain.enums; + + +import com.zy.core.model.protocol.StaProtocol; + +/** + * 绔欑偣鐘舵�佹灇涓� + */ +public enum SiteStatusType { + + // 鑷姩 + SITE_AUTO, + // 闈炶嚜鍔� + SITE_UNAUTO, + // 鑷姩+鏈夌墿+ID + SITE_AUTO_RUN_ID, + // 鑷姩+鏈夌墿 + SITE_AUTO_RUN, + // 鑷姩+ID + SITE_AUTO_ID, + + ; + + public static SiteStatusType process(StaProtocol staProtocol) { + if (staProtocol == null) { + return null; + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0) { + return SITE_AUTO_RUN_ID; + } + if (staProtocol.isAutoing() && staProtocol.isLoading()) { + return SITE_AUTO_RUN; + } + if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 0) { + return SITE_AUTO_ID; + } + if (staProtocol.isAutoing()) { + return SITE_AUTO; + } + if (!staProtocol.isAutoing()) { + return SITE_UNAUTO; + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/TaskStatusType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/TaskStatusType.java new file mode 100644 index 0000000..722fef0 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/TaskStatusType.java @@ -0,0 +1,31 @@ +package com.zy.acs.wcs.asrs.domain.enums; + +public enum TaskStatusType { + + RECEIVE(1, "鎺ユ敹"), + DISTRIBUTE(2, "娲惧彂"), + //COMPLETE(3, "鍛戒护瀹屾垚"), + CANCEL(4, "鍙栨秷"), + OVER(5, "瀹岀粨"); + + public Integer id; + public String desc; + + TaskStatusType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static String get(Integer id) { + if (null == id) { + return null; + } + for (TaskStatusType type : TaskStatusType.values()) { + if (type.id.equals(id)) { + return type.desc; + } + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/WorkNoType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/WorkNoType.java new file mode 100644 index 0000000..929e09c --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/enums/WorkNoType.java @@ -0,0 +1,48 @@ +package com.zy.acs.wcs.asrs.domain.enums; + +import com.core.exception.CoolException; + +/** + * 宸ヤ綔鍙锋帓搴忚鍒� + */ +public enum WorkNoType { + + PAKIN(0), + PICK(1), + PAKOUT(2), + OTHER(3), + ; + + public Integer type; + + WorkNoType(Integer type) { + this.type = type; + } + + public static Integer getWorkNoType(Integer ioType) { + switch (ioType) { + case 1: + return PAKIN.type; + case 10: + return PAKIN.type; + case 11: + return PICK.type; + case 53: + case 54: + case 57: + return PICK.type; + case 101: + return PAKOUT.type; + case 103: + case 104: + case 107: + return PICK.type; + case 110: + return PAKOUT.type; + default: + break; + } + throw new CoolException(ioType + "鐨勪换鍔$被鍨嬫棤娉曠敓鎴愬伐浣滃彿"); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/ApplyInDevpDto.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/ApplyInDevpDto.java new file mode 100644 index 0000000..f25139c --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/ApplyInDevpDto.java @@ -0,0 +1,28 @@ +package com.zy.acs.wcs.asrs.domain.param; + +import lombok.Data; + +/** + * @author pang.jiabao + * @description 閫氱煡杈撻�佺嚎娴佸姩 + * @createDate 2025/5/15 14:27 + */ +@Data +public class ApplyInDevpDto { + + /** + * 婧愮珯鐐� + */ + private Integer sourceSite; + + /** + * 鐩爣绔欑偣 + */ + private Integer targetSite; + + /** + * 0:1.6, 1:1.8, 2:2.4 + */ + private Integer flag; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnDemoParam.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnDemoParam.java new file mode 100644 index 0000000..0baa40a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnDemoParam.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.asrs.domain.param; + +import lombok.Data; + +/** + * 鍫嗗灈鏈烘紨绀烘搷浣滃叆鍙� + * Created by vincent on 2020-06-03 + */ +@Data +public class CrnDemoParam { + + // 鎿嶄綔绫诲瀷 1: 鎵撳紑; 0: 鍏抽棴 + private Integer crnId; + + // 瀵嗙爜鍙d护 + private String password; + + private Boolean opt; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnOperatorParam.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnOperatorParam.java new file mode 100644 index 0000000..4164ce2 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/CrnOperatorParam.java @@ -0,0 +1,38 @@ +package com.zy.acs.wcs.asrs.domain.param; + +import lombok.Data; + +/** + * Created by vincent on 2020-06-02 + */ +@Data +public class CrnOperatorParam { + + // 鍫嗗灈鏈哄彿 + private Integer crnNo; + + // 婧愮珯 + private Short sourceStaNo; + + // 婧愬簱浣�-鎺� + private Short sourceRow; + + // 婧愬簱浣�-鍒� + private Short sourceBay; + + // 婧愬簱浣�-灞� + private Short sourceLev; + + // 鐩爣绔� + private Short staNo; + + // 鐩爣搴撲綅-鎺� + private Short row; + + // 鐩爣搴撲綅-鍒� + private Short bay; + + // 鐩爣搴撲綅-灞� + private Short lev; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/SystemSwitchParam.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/SystemSwitchParam.java new file mode 100644 index 0000000..f6c592a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/param/SystemSwitchParam.java @@ -0,0 +1,30 @@ +package com.zy.acs.wcs.asrs.domain.param; + +/** + * 绯荤粺杩愯鐘舵�佹搷浣滃叆鍙� + * Created by vincent on 2020-06-03 + */ +public class SystemSwitchParam { + + // 鎿嶄綔绫诲瀷 1: 鎵撳紑; 0: 鍏抽棴 + private Integer operatorType; + + // 瀵嗙爜鍙d护 + private String password; + + public Integer getOperatorType() { + return operatorType; + } + + public void setOperatorType(Integer operatorType) { + this.operatorType = operatorType; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/BarcodeDataVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/BarcodeDataVo.java new file mode 100644 index 0000000..409af2f --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/BarcodeDataVo.java @@ -0,0 +1,18 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * 鎵爜鍣ㄥ疄鏃舵暟鎹鍥惧璞� + * Created by vincent on 2020-06-03 + */ +@Data +public class BarcodeDataVo { + + // 鎵爜鍣ㄧ紪鍙� + private Integer barcodeId; + + // 鎵爜鍣ㄥ唴瀹� + private String codeValue; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CommandLogVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CommandLogVo.java new file mode 100644 index 0000000..43af276 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CommandLogVo.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * Created by vincent on 2020-06-02 + */ +@Data +public class CommandLogVo { + + // 鍫嗗灈鏈虹紪鍙� + private Integer crnNo; + + // 鐘舵�� + private Integer status; + + // 鍛戒护鎶ユ枃 + private String command; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnDetailVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnDetailVo.java new file mode 100644 index 0000000..1b501fe --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnDetailVo.java @@ -0,0 +1,48 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * 鍫嗗灈鏈鸿鎯呰鍥惧璞� + * Created by vincent on 2020-06-03 + */ +@Data +public class CrnDetailVo { + + // 鍫嗗灈鏈哄彿 + private Integer crnNo; + + // 宸ヤ綔鍙� + private Short workNo; + + // 婧愮珯 + private String sourceStaNo = ""; + + // 鐩爣绔� + private String staNo = ""; + + // 宸ヤ綔鐘舵�� + private String wrkSts = ""; + + // 鍑哄叆绫诲瀷 + private String ioType = ""; + + // 婧愬簱浣� + private String sourceLocNo = ""; + + // 鐩爣搴撲綅 + private String locNo = ""; + + // 鍫嗗灈鏈虹姸鎬� + private String crnStatus = ""; + + // 寮傚父 + private String error = ""; + + // 鍙叆 + private String inEnable = ""; + + // 鍙嚭 + private String outEnable = ""; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnLatestDataVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnLatestDataVo.java new file mode 100644 index 0000000..a644e0c --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnLatestDataVo.java @@ -0,0 +1,28 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import com.zy.asrs.domain.enums.CrnStatusType; +import lombok.Data; + +/** + * 鍫嗗灈鏈烘渶鏂版暟鎹鍥惧璞� + * Created by vincent on 2020-06-01 + */ +@Data +public class CrnLatestDataVo { + + // 鍫嗗灈鏈虹紪鍙� + private Integer crnId; + + // 鍋忕Щ閲� + private Double offset; + + // 褰撳墠鍒� + private Short bay; + + private CrnStatusType crnStatus; + + public String getCrnStatus() { + return crnStatus.toString().toLowerCase().replaceAll("_", "-"); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnListVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnListVo.java new file mode 100644 index 0000000..be8d1a1 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnListVo.java @@ -0,0 +1,149 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import com.zy.asrs.utils.Utils; +import com.zy.core.enums.CrnStatusType; +import lombok.Data; + +@Data +public class CrnListVo { + + // 鍫嗗灈鏈哄彿 + private Integer crnNo; + + // 妯″紡 + private String statusType = "-"; + + // 鏈夌墿 + private String loading = "-"; + + // 鍒� + private Short bay; + + // 灞� + private Short lev; + + // 璧拌鍘熺偣 + private String xOrigin = "-"; + + // 鍗囬檷鍘熺偣 + private String yOrigin = "-"; + + // 璐у弶浣嶇疆 + private String forkOffset = "-"; + + // 杞借揣鍙颁綅缃� + private String liftPos = "-"; + + // 璧拌瀹氫綅 + private String walkPos = "-"; + + // 鎬ュ仠 + private String stop = "-"; + + // 鍒楀潗鏍� + private String bayCoor = "-"; + + // 灞傚潗鏍� + private String levCoor = "-"; + + // 瀹屾垚 + private String complete = "-"; + + // 浠诲姟鍙� + private Short workNo = 0; + + // 浠诲姟鐘舵�� + private Integer wrkStatus; + + // 寮傚父鐮� + private String warnCode = "-"; + + // 鍨傜洿鏁呴殰鐮� + private String alarm = "-"; + + // 婧愮珯 + private String sourceStaNo = "-"; + + // 鐩爣绔� + private String staNo = "-"; + + // 婧愬簱浣� + private String sourceLocNo = "-"; + + // 鐩爣搴撲綅 + private String locNo = "-"; + + // 寮傚父 + private String error = ""; + + // 鍘熺偣 + private String origin = ""; + + // 鍛戒护 + private String command = ""; + + // 璧拌閫熷害锛坢/min) + private Float xspeed = 0.0F; + + // 鍗囬檷閫熷害锛坢/min) + private Float yspeed = 0.0F; + + // 鍙夌墮閫熷害锛坢/min) + private Float zspeed = 0.0F; + + // 璧拌璺濈(Km) + private Float xdistance = 0.0F; + + // 鍗囬檷璺濈(Km) + private Float ydistance = 0.0F; + + // 璧拌鏃堕暱(H) + private Float xduration = 0.0F; + + // 鍗囬檷鏃堕暱(H) + private Float yduration = 0.0F; + + // 璁惧鐘舵�� + private String deviceStatus = "-"; + + // 鍙叆 + private String inEnable; + + // 鍙嚭 + private String outEnable; + + public void setXspeed(Float xspeed) { + this.xspeed = Utils.scale(xspeed); + } + + public void setYspeed(Float yspeed) { + this.yspeed = Utils.scale(yspeed); + } + + public void setZspeed(Float zspeed) { + this.zspeed = Utils.scale(zspeed); + } + + public void setXdistance(Float xdistance) { + this.xdistance = Utils.scale(xdistance); + } + + public void setYdistance(Float ydistance) { + this.ydistance = Utils.scale(ydistance); + } + + public void setXduration(Float xduration) { + this.xduration = Utils.scale(xduration); + } + + public void setYduration(Float yduration) { + this.yduration = Utils.scale(yduration); + } + + public String getWrkStatus$() { + if (this.wrkStatus == null) { + return "-"; + } + return CrnStatusType.get(this.wrkStatus.shortValue()).desc; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnMsgTableVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnMsgTableVo.java new file mode 100644 index 0000000..2820dfd --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnMsgTableVo.java @@ -0,0 +1,90 @@ +//package com.zy.acs.wcs.asrs.domain.vo; +// +//import com.zy.asrs.utils.Utils; +//import lombok.Data; +// +///** +// * Created by vincent on 2020-06-02 +// */ +//@Data +//public class CrnMsgTableVo { +// +// // 鍫嗗灈鏈哄彿 +// private Integer crnNo; +// +// // 宸ヤ綔鍙� +// private Short workNo = 0; +// +// // 鐘舵�� +// private String status = "-"; +// +// // 婧愮珯 +// private String sourceStaNo = "-"; +// +// // 鐩爣绔� +// private String staNo = "-"; +// +// // 婧愬簱浣� +// private String sourceLocNo = "-"; +// +// // 鐩爣搴撲綅 +// private String locNo = "-"; +// +// // 寮傚父 +// private String error = ""; +// +// // 鍘熺偣 +// private String origin = ""; +// +// // 鍛戒护 +// private String command = ""; +// +// // 璧拌閫熷害锛坢/min) +// private Float xspeed = 0.0F; +// +// // 鍗囬檷閫熷害锛坢/min) +// private Float yspeed = 0.0F; +// +// // 鍙夌墮閫熷害锛坢/min) +// private Float zspeed = 0.0F; +// +// // 璧拌璺濈(Km) +// private Float xdistance = 0.0F; +// +// // 鍗囬檷璺濈(Km) +// private Float ydistance = 0.0F; +// +// // 璧拌鏃堕暱(H) +// private Float xduration = 0.0F; +// +// // 鍗囬檷鏃堕暱(H) +// private Float yduration = 0.0F; +// +// public void setXspeed(Float xspeed) { +// this.xspeed = Utils.scale(xspeed); +// } +// +// public void setYspeed(Float yspeed) { +// this.yspeed = Utils.scale(yspeed); +// } +// +// public void setZspeed(Float zspeed) { +// this.zspeed = Utils.scale(zspeed); +// } +// +// public void setXdistance(Float xdistance) { +// this.xdistance = Utils.scale(xdistance); +// } +// +// public void setYdistance(Float ydistance) { +// this.ydistance = Utils.scale(ydistance); +// } +// +// public void setXduration(Float xduration) { +// this.xduration = Utils.scale(xduration); +// } +// +// public void setYduration(Float yduration) { +// this.yduration = Utils.scale(yduration); +// } +//} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnStateTableVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnStateTableVo.java new file mode 100644 index 0000000..4f3686b --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/CrnStateTableVo.java @@ -0,0 +1,65 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * Created by vincent on 2020-06-02 + */ +@Data +public class CrnStateTableVo { + + // 鍫嗗灈鏈哄彿 + private Integer crnNo; + + // 妯″紡 + private String statusType = "-"; + + // 鏈夌墿 + private String loading = "-"; + + // 鍒� + private Short bay; + + // 灞� + private Short lev; + + // 璧拌鍘熺偣 + private String xOrigin = "-"; + + // 鍗囬檷鍘熺偣 + private String yOrigin = "-"; + + // 璐у弶浣嶇疆 + private String forkOffset = "-"; + + // 杞借揣鍙颁綅缃� + private String liftPos = "-"; + + // 璧拌瀹氫綅 + private String walkPos = "-"; + + // 鎬ュ仠 + private String stop = "-"; + + // 鍒楀潗鏍� + private String bayCoor = "-"; + + // 灞傚潗鏍� + private String levCoor = "-"; + + // 瀹屾垚 + private String complete = "-"; + + // 浠诲姟鍙� + private Short workNo = 0; + + // 鐘舵�� + private String status = "-"; + + // 寮傚父鐮� + private String warnCode = "-"; + + // 鍨傜洿鏁呴殰鐮� + private String alarm = "-"; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/LocChartPie.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/LocChartPie.java new file mode 100644 index 0000000..11fae5e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/LocChartPie.java @@ -0,0 +1,46 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +/** + * 搴撲綅鍗犵敤鐧惧垎姣� + * + * @author admin + * @date 2018骞�12鏈�12鏃� + */ +public class LocChartPie { + private int fqty; + private int oqty; + private int uqty; + private int xqty; + + public int getFqty() { + return fqty; + } + + public void setFqty(int fqty) { + this.fqty = fqty; + } + + public int getOqty() { + return oqty; + } + + public void setOqty(int oqty) { + this.oqty = oqty; + } + + public int getUqty() { + return uqty; + } + + public void setUqty(int uqty) { + this.uqty = uqty; + } + + public int getXqty() { + return xqty; + } + + public void setXqty(int xqty) { + this.xqty = xqty; + } +} \ No newline at end of file diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/PlcErrorTableVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/PlcErrorTableVo.java new file mode 100644 index 0000000..9767217 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/PlcErrorTableVo.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * Created by vincent on 2020-06-02 + */ +@Data +public class PlcErrorTableVo { + + // 搴忓彿 + private Integer no; + + // plc寮傚父鎻忚堪 + private String plcDesc; + + // 寮傚父 + private String error; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/ScaleDataVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/ScaleDataVo.java new file mode 100644 index 0000000..02309b1 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/ScaleDataVo.java @@ -0,0 +1,18 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * 纾呯Г瀹炴椂鏁版嵁瑙嗗浘瀵硅薄 + * Created by vincent on 2020-06-03 + */ +@Data +public class ScaleDataVo { + + // 纾呯Г缂栧彿 + private Integer scaleId; + + // 纾呯Г鍐呭 + private String value; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteDetailVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteDetailVo.java new file mode 100644 index 0000000..d9c686d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteDetailVo.java @@ -0,0 +1,47 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * 杈撻�佽澶囪鎯呰鍥惧璞� + * Created by vincent on 2020-06-03 + */ +@Data +public class SiteDetailVo { + + // 绔欑偣缂栧彿 + private Integer siteId; + + // 宸ヤ綔鍙� + private Short workNo; + + // 宸ヤ綔鐘舵�� + private String wrkSts = ""; + + // 鑷姩 + private String autoing; + + // 鏈夌墿 + private String loading; + + // 鑳藉叆 + private String canining; + + // 鑳藉嚭 + private String canouting; + + // 鍑哄叆绫诲瀷 + private String ioType = ""; + + // 婧愮珯 + private String sourceStaNo = ""; + + // 鐩爣绔� + private String staNo = ""; + + // 婧愬簱浣� + private String sourceLocNo = ""; + + // 鐩爣搴撲綅 + private String locNo = ""; +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteLatestDataVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteLatestDataVo.java new file mode 100644 index 0000000..b80e099 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteLatestDataVo.java @@ -0,0 +1,29 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import com.zy.asrs.domain.enums.SiteStatusType; +import lombok.Data; + +/** + * 绔欑偣鏈�鏂版暟鎹鍥惧璞� + * Created by vincent on 2020-06-01 + */ +@Data +public class SiteLatestDataVo { + + // 绔欑偣缂栧彿 + private String siteId; + + // 宸ヤ綔鍙� + private Short workNo; + + // 绔欑偣鐘舵�� + private SiteStatusType siteStatus; + + // 闅斿绔欑偣锛堝彴杞︾壒鎬э級 + private String nearbySta; + + public String getSiteStatus() { + return siteStatus.toString().toLowerCase().replaceAll("_", "-"); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteTableVo.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteTableVo.java new file mode 100644 index 0000000..b611150 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/domain/vo/SiteTableVo.java @@ -0,0 +1,41 @@ +package com.zy.acs.wcs.asrs.domain.vo; + +import lombok.Data; + +/** + * Created by vincent on 2020-06-02 + */ +@Data +public class SiteTableVo { + + // 绔欏彿 + private Integer devNo; + + // 宸ヤ綔鍙� + private Short workNo = 0; + + // 鑷姩 + private String autoing = "-"; + + // 鏈夌墿 + private String loading = "-"; + + // 鍙叆 + private String inEnable = "-"; + + // 鍙嚭 + private String outEnable = "-"; + + // 闇�姹�1 + private String pakMk = "-"; + + // 绌烘澘淇″彿 + private String emptyMk = "-"; + + // 鐩爣绔� + private Short staNo = 0; + + //楂樹綆搴撲綅 + private String locType1 = "-"; + private String car = "-"; +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/BasDevp.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/BasDevp.java new file mode 100644 index 0000000..03a5818 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/BasDevp.java @@ -0,0 +1,306 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("asr_bas_devp") +public class BasDevp implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 缂栧彿 + */ + @ApiModelProperty(value = "缂栧彿") + @TableId(value = "dev_no", type = IdType.INPUT) + @TableField("dev_no") + private Integer devNo; + + /** + * 璁惧鎻忚堪 + */ + @ApiModelProperty(value = "璁惧鎻忚堪") + @TableField("dec_desc") + private String decDesc; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + @TableField("dev_mk") + private String devMk; + + /** + * 鍙叆 + */ + @ApiModelProperty(value = "鍙叆") + @TableField("in_enable") + private String inEnable; + + /** + * 鍙嚭 + */ + @ApiModelProperty(value = "鍙嚭") + @TableField("out_enable") + private String outEnable; + + /** + * 鑷姩 + */ + @ApiModelProperty(value = "鑷姩") + private String autoing; + + /** + * 鏈夌墿 + */ + @ApiModelProperty(value = "鏈夌墿") + private String loading; + + /** + * 鑳藉叆 + */ + @ApiModelProperty(value = "鑳藉叆") + private String canining; + + /** + * 鑳藉嚭 + */ + @ApiModelProperty(value = "鑳藉嚭") + private String canouting; + + @ApiModelProperty(value = "") + private String fronting; + + @ApiModelProperty(value = "") + private String rearing; + + @ApiModelProperty(value = "") + private String uping; + + @ApiModelProperty(value = "") + private String downing; + + /** + * 闇�姹�1 + */ + @ApiModelProperty(value = "闇�姹�1") + private String inreq1; + + /** + * 闇�姹�2 + */ + @ApiModelProperty(value = "闇�姹�2") + private String inreq2; + + /** + * 宸ヤ綔鍙� + */ + @ApiModelProperty(value = "宸ヤ綔鍙�") + @TableField("wrk_no") + private Integer wrkNo; + + @ApiModelProperty(value = "") + @TableField("wrk_no1") + private Integer wrkNo1; + + /** + * 瀹瑰櫒绫诲瀷 + */ + @ApiModelProperty(value = "瀹瑰櫒绫诲瀷") + @TableField("ctn_type") + private Integer ctnType; + + /** + * 鏉″舰鐮� + */ + @ApiModelProperty(value = "鏉″舰鐮�") + private String barcode; + + @ApiModelProperty(value = "鍏ュ簱鏆傚瓨鏁�") + @TableField("in_qty") + private Integer inQty; + + @ApiModelProperty(value = "") + private Integer row1; + + @ApiModelProperty(value = "") + @TableField("io_time") + private Date ioTime; + + @ApiModelProperty(value = "") + private String area; + + @ApiModelProperty(value = "") + @TableField("in_ok") + private String inOk; + + @ApiModelProperty(value = "") + @TableField("out_ok") + private String outOk; + + @ApiModelProperty(value = "楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿") + @TableField("loc_type1") + private Short locType1; + + @ApiModelProperty(value = "瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿") + @TableField("loc_type2") + private Short locType2; + + @ApiModelProperty(value = "杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿") + @TableField("loc_type3") + private Short locType3; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + /** + * 鍒涘缓鑰� + */ + @ApiModelProperty(value = "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + @ApiModelProperty(value = "") + @TableField("std_qty") + private Double stdQty; + + @ApiModelProperty(value = "") + @TableField("min_wt") + private Double minWt; + + @ApiModelProperty(value = "") + @TableField("max_wt") + private Double maxWt; + + /** + * 閲嶉噺 + */ + @ApiModelProperty(value = "閲嶉噺") + @TableField("gross_wt") + private Double grossWt; + + @ApiModelProperty(value = "") + @TableField("cart_pos") + private Integer cartPos; + + @ApiModelProperty(value = "") + @TableField("agv_start_pick") + private Integer agvStartPick; + + @ApiModelProperty(value = "") + @TableField("agv_target_pick") + private Integer agvTargetPick; + + @ApiModelProperty(value = "") + @TableField("agv_start_place") + private Integer agvStartPlace; + + @ApiModelProperty(value = "") + @TableField("agv_target_place") + private Integer agvTargetPlace; + + @ApiModelProperty(value = "寮傚父鐮�") + @TableField("sta_err") + private Integer staErr; + + + public String getIoTime$() { + if (Cools.isEmpty(this.ioTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime); + } + + public String getLocType1$() { + if (null == this.locType1) { + return null; + } + switch (this.locType1) { + case 0: + return "鏈煡"; + case 1: + return "浣庡簱浣�"; + case 2: + return "楂樺簱浣�"; + default: + return String.valueOf(this.locType1); + } + } + + public String getLocType2$() { + if (null == this.locType2) { + return null; + } + switch (this.locType2) { + case 0: + return "鏈煡"; + case 1: + return "绐勫簱浣�"; + case 2: + return "瀹藉簱浣�"; + default: + return String.valueOf(this.locType2); + } + } + + public String getLocType3$() { + if (null == this.locType3) { + return null; + } + switch (this.locType3) { + case 0: + return "鏈煡"; + case 1: + return "杞诲簱浣�"; + case 2: + return "閲嶅簱浣�"; + default: + return String.valueOf(this.locType3); + } + } + + + public String getModiTime$() { + if (Cools.isEmpty(this.modiTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + + public String getAppeTime$() { + if (Cools.isEmpty(this.appeTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/Loc.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/Loc.java new file mode 100644 index 0000000..42a1176 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/Loc.java @@ -0,0 +1,209 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.common.SpringUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_loc") +public class Loc implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value= "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 缂栧彿 + */ + @ApiModelProperty(value= "缂栧彿") + private String uuid; + + /** + * 搴撳尯 + */ + @ApiModelProperty(value= "搴撳尯") + private Long zoneId; + + /** + * 搴撲綅缂栧彿 + */ + @ApiModelProperty(value= "搴撲綅缂栧彿") + private String locNo; + + /** + * 鍚嶇О + */ + @ApiModelProperty(value= "鍚嶇О") + private String name; + + /** + * 鏉$爜 + */ + @ApiModelProperty(value= "鏉$爜") + private Long code; + + /** + * 姣旂爜鏂瑰悜闃� 1: 澶т簬 0 灏忎簬 + */ + @ApiModelProperty(value= "姣旂爜鏂瑰悜闃� 1: 澶т簬 0 灏忎簬") + private Integer compDirect; + + /** + * 搴撲綅鐘舵�� + */ + @ApiModelProperty(value= "搴撲綅鐘舵��") + private Long locSts; + + /** + * 鍋忕Щ閲� + */ + @ApiModelProperty(value= "鍋忕Щ閲�") + private Double offset; + + /** + * 鎺� + */ + @ApiModelProperty(value= "鎺�") + private Integer row; + + /** + * 鍒� + */ + @ApiModelProperty(value= "鍒�") + private Integer bay; + + /** + * 灞� + */ + @ApiModelProperty(value= "灞�") + private Integer lev; + + /** + * 搴撲綅鐮� + */ + @ApiModelProperty(value= "搴撲綅鐮�") + private String barcode; + + /** + * 鎵樼洏鐮� + */ + @ApiModelProperty(value= "鎵樼洏鐮�") + private String zpallet; + + /** + * 搴撲綅绫诲瀷 + */ + @ApiModelProperty(value= "搴撲綅绫诲瀷") + private Long locType; + + /** + * 鐘舵�� 1: 姝e父 0: 鍐荤粨 + */ + @ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 鍐荤粨 ") + private Integer status; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value= "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value= "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value= "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value= "澶囨敞") + private String memo; + + public Loc() {} + + public Loc(String uuid, Long zoneId, String locNo, String name, Long code, Long locSts, Double offset, Integer row, Integer bay, Integer lev, String zpallet, Long locType, Integer status, Integer deleted, Long tenantId, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) { + this.uuid = uuid; + this.zoneId = zoneId; + this.locNo = locNo; + this.name = name; + this.code = code; + this.locSts = locSts; + this.offset = offset; + this.row = row; + this.bay = bay; + this.lev = lev; + this.zpallet = zpallet; + this.locType = locType; + this.status = status; + this.deleted = deleted; + this.tenantId = tenantId; + this.createBy = createBy; + this.createTime = createTime; + this.updateBy = updateBy; + this.updateTime = updateTime; + this.memo = memo; + } + +// Loc loc = new Loc( +// null, // 缂栧彿 +// null, // 搴撳尯 +// null, // 搴撲綅缂栧彿 +// null, // 鍚嶇О +// null, // 鏉$爜 +// null, // 搴撲綅鐘舵�� +// null, // 鍋忕Щ閲� +// null, // 鎺� +// null, // 鍒� +// null, // 灞� +// null, // 鎵樼洏鐮� +// null, // 搴撲綅绫诲瀷 +// null, // 鐘舵�乕闈炵┖] +// null, // 鏄惁鍒犻櫎[闈炵┖] +// null, // 绉熸埛 +// null, // 娣诲姞浜哄憳 +// null, // 娣诲姞鏃堕棿[闈炵┖] +// null, // 淇敼浜哄憳 +// null, // 淇敼鏃堕棿 +// null // 澶囨敞 +// ); + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/StaDesc.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/StaDesc.java new file mode 100644 index 0000000..a96a3c3 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/StaDesc.java @@ -0,0 +1,107 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("asr_sta_desc") +public class StaDesc implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 璺緞ID + */ + @ApiModelProperty(value = "璺緞ID") + @TableId(value = "type_id", type = IdType.AUTO) + @TableField("type_id") + private Long typeId; + + /** + * 鍏ュ嚭搴撶被鍨� + */ + @ApiModelProperty(value = "鍏ュ嚭搴撶被鍨�") + @TableId(value = "type_no", type = IdType.INPUT) + @TableField("type_no") + private Integer typeNo; + + /** + * 浣滀笟绫诲瀷 + */ + @ApiModelProperty(value = "浣滀笟绫诲瀷") + @TableField("type_desc") + private String typeDesc; + + /** + * 浣滀笟绔欑偣 + */ + @ApiModelProperty(value = "浣滀笟绔欑偣") + @TableId(value = "stn_no", type = IdType.INPUT) + @TableField("stn_no") + private Integer stnNo; + + /** + * 绔欑偣鍚嶇О + */ + @ApiModelProperty(value = "绔欑偣鍚嶇О") + @TableField("stn_desc") + private String stnDesc; + + /** + * 鍦板浘鍙� + */ + @ApiModelProperty(value = "鍦板浘鍙�") + @TableId(value = "zone_id", type = IdType.INPUT) + @TableField("zone_id") + private Integer zoneId; + + /** + * 鍫嗗灈鏈虹珯鐐� + */ + @ApiModelProperty(value = "鍫嗗灈鏈虹珯鐐�") + @TableField("crn_stn") + private Integer crnStn; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + /** + * 鍒涘缓鑰� + */ + @ApiModelProperty(value = "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReport.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReport.java new file mode 100644 index 0000000..abe7b17 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReport.java @@ -0,0 +1,130 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_task_report") +public class TaskReport implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + + /** + * 鎬荤嚎 + */ + @ApiModelProperty(value = "鎬荤嚎") + private String busNo; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value = "浠诲姟鍙�") + private String seqNum; + + + /** + * 浠诲姟杩涘害 + */ + @ApiModelProperty(value = "浠诲姟杩涘害") + private Long taskSts; + + + /** + * AGV + */ + @ApiModelProperty(value = "AGV") + private Long agvId; + + + + + /** + * 璧峰绔� + */ + @ApiModelProperty(value = "璧峰绔�") + private Long oriSta; + + /** + * 璧峰搴撲綅 + */ + @ApiModelProperty(value = "璧峰搴撲綅") + private Long oriLoc; + + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value = "鐩爣绔�") + private Long destSta; + + /** + * 鐩爣搴撲綅 + */ + @ApiModelProperty(value = "鐩爣搴撲綅") + private Long destLoc; + + + /** + * 鎵樼洏鐮� + */ + @ApiModelProperty(value = "鎵樼洏鐮�") + private String zpallet; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReportLog.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReportLog.java new file mode 100644 index 0000000..e24d2dc --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/TaskReportLog.java @@ -0,0 +1,130 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("man_task_report_log") +public class TaskReportLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + + /** + * 鎬荤嚎 + */ + @ApiModelProperty(value = "鎬荤嚎") + private String busNo; + + /** + * 浠诲姟鍙� + */ + @ApiModelProperty(value = "浠诲姟鍙�") + private String seqNum; + + + /** + * 浠诲姟杩涘害 + */ + @ApiModelProperty(value = "浠诲姟杩涘害") + private Long taskSts; + + + /** + * AGV + */ + @ApiModelProperty(value = "AGV") + private Long agvId; + + + + + /** + * 璧峰绔� + */ + @ApiModelProperty(value = "璧峰绔�") + private Long oriSta; + + /** + * 璧峰搴撲綅 + */ + @ApiModelProperty(value = "璧峰搴撲綅") + private Long oriLoc; + + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value = "鐩爣绔�") + private Long destSta; + + /** + * 鐩爣搴撲綅 + */ + @ApiModelProperty(value = "鐩爣搴撲綅") + private Long destLoc; + + + /** + * 鎵樼洏鐮� + */ + @ApiModelProperty(value = "鎵樼洏鐮�") + private String zpallet; + + /** + * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ") + private Integer deleted; + + /** + * 绉熸埛 + */ + @ApiModelProperty(value = "绉熸埛") + private Long tenantId; + + /** + * 娣诲姞浜哄憳 + */ + @ApiModelProperty(value = "娣诲姞浜哄憳") + private Long createBy; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + private Date createTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + private Long updateBy; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + private Date updateTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkDetl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkDetl.java new file mode 100644 index 0000000..307324d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkDetl.java @@ -0,0 +1,351 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("asr_wrk_detl") +public class WrkDetl implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 宸ヤ綔鍙� + */ + @ApiModelProperty(value = "宸ヤ綔鍙�") + @TableField("wrk_no") + private Integer wrkNo; + + /** + * 宸ヤ綔鏃堕棿 + */ + @ApiModelProperty(value = "宸ヤ綔鏃堕棿") + @TableField("io_time") + private Date ioTime; + + /** + * 鏁伴噺 + */ + @ApiModelProperty(value = "鏁伴噺") + private Double anfme; + + /** + * 鎵樼洏鏉$爜 + */ + @ApiModelProperty(value = "鎵樼洏鏉$爜") + private String zpallet; + + /** + * 鐗╂枡 + */ + @ApiModelProperty(value = "鍟嗗搧缂栧彿") + private String matnr; + + /** + * 鐗╂枡鎻忚堪 + */ + @ApiModelProperty(value = "鍟嗗搧鍚嶇О") + private String maktx; + + /** + * 鎵瑰彿 + */ + @ApiModelProperty(value = "鎵瑰彿") + private String batch; + + /** + * 鍗曟嵁缂栧彿 + */ + @ApiModelProperty(value = "鍗曟嵁缂栧彿") + @TableField("order_no") + private String orderNo; + + /** + * 瑙勬牸 + */ + @ApiModelProperty(value = "瑙勬牸") + private String specs; + + /** + * 鍨嬪彿 + */ + @ApiModelProperty(value = "鍨嬪彿") + private String model; + + /** + * 棰滆壊 + */ + @ApiModelProperty(value = "棰滆壊") + private String color; + + /** + * 鍝佺墝 + */ + @ApiModelProperty(value = "鍝佺墝") + private String brand; + + /** + * 鍗曚綅 + */ + @ApiModelProperty(value = "鍗曚綅") + private String unit; + + /** + * 鍗曚环 + */ + @ApiModelProperty(value = "鍗曚环") + private Double price; + + /** + * sku + */ + @ApiModelProperty(value = "sku") + private String sku; + + /** + * 鍗曚綅閲� + */ + @ApiModelProperty(value = "鍗曚綅閲�") + private Double units; + + /** + * 鏉$爜 + */ + @ApiModelProperty(value = "鏉$爜") + private String barcode; + + /** + * 浜у湴 + */ + @ApiModelProperty(value = "浜у湴") + private String origin; + + /** + * 鍘傚 + */ + @ApiModelProperty(value = "鍘傚") + private String manu; + + /** + * 鐢熶骇鏃ユ湡 + */ + @ApiModelProperty(value = "鐢熶骇鏃ユ湡") + @TableField("manu_date") + private String manuDate; + + /** + * 鍝侀」鏁� + */ + @ApiModelProperty(value = "鍝侀」鏁�") + @TableField("item_num") + private String itemNum; + + /** + * 瀹夊叏搴撳瓨閲� + */ + @ApiModelProperty(value = "瀹夊叏搴撳瓨閲�") + @TableField("safe_qty") + private Double safeQty; + + /** + * 閲嶉噺 + */ + @ApiModelProperty(value = "閲嶉噺") + private Double weight; + + /** + * 闀垮害 + */ + @ApiModelProperty(value = "闀垮害") + @TableField("man_length") + private Double manLength; + + /** + * 浣撶Н + */ + @ApiModelProperty(value = "浣撶Н") + private Double volume; + + /** + * 涓夋柟缂栫爜 + */ + @ApiModelProperty(value = "涓夋柟缂栫爜") + @TableField("three_code") + private String threeCode; + + /** + * 渚涘簲鍟� + */ + @ApiModelProperty(value = "渚涘簲鍟�") + private String supp; + + /** + * 渚涘簲鍟嗙紪鐮� + */ + @ApiModelProperty(value = "渚涘簲鍟嗙紪鐮�") + @TableField("supp_code") + private String suppCode; + + /** + * 鏄惁鎵规 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鏄惁鎵规 1: 鏄� 0: 鍚� ") + @TableField("be_batch") + private Integer beBatch; + + /** + * 淇濊川鏈� + */ + @ApiModelProperty(value = "淇濊川鏈�") + @TableField("dead_time") + private String deadTime; + + /** + * 棰勮澶╂暟 + */ + @ApiModelProperty(value = "棰勮澶╂暟") + @TableField("dead_warn") + private Integer deadWarn; + + /** + * 鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 + */ + @ApiModelProperty(value = "鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 ") + private Integer source; + + /** + * 瑕佹眰妫�楠� 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "瑕佹眰妫�楠� 1: 鏄� 0: 鍚� ") + private Integer inspect; + + /** + * 鍗遍櫓鍝� 1: 鏄� 0: 鍚� + */ + @ApiModelProperty(value = "鍗遍櫓鍝� 1: 鏄� 0: 鍚� ") + private Integer danger; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + /** + * 鍒涘缓鑰� + */ + @ApiModelProperty(value = "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + public String getIoTime$() { + if (Cools.isEmpty(this.ioTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime); + } + + public String getBeBatch$() { + if (null == this.beBatch) { + return null; + } + switch (this.beBatch) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.beBatch); + } + } + + public String getSource$() { + if (null == this.source) { + return null; + } + switch (this.source) { + case 1: + return "鍒堕��"; + case 2: + return "閲囪喘"; + case 3: + return "澶栧崗"; + default: + return String.valueOf(this.source); + } + } + + public String getInspect$() { + if (null == this.inspect) { + return null; + } + switch (this.inspect) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.inspect); + } + } + + public String getDanger$() { + if (null == this.danger) { + return null; + } + switch (this.danger) { + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.danger); + } + } + + + public String getModiTime$() { + if (Cools.isEmpty(this.modiTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + + public String getAppeTime$() { + if (Cools.isEmpty(this.appeTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkMast.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkMast.java new file mode 100644 index 0000000..d24c34a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/entity/WrkMast.java @@ -0,0 +1,403 @@ +package com.zy.acs.wcs.asrs.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.zy.acs.framework.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("asr_wrk_mast") +public class WrkMast implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 宸ヤ綔鍙� + */ + @ApiModelProperty(value = "宸ヤ綔鍙�") + @TableId(value = "wrk_no", type = IdType.INPUT) + @TableField("wrk_no") + private Integer wrkNo; + + @ApiModelProperty(value = "") + @TableField("inv_wh") + private String invWh; + + @ApiModelProperty(value = "") + private Date ymd; + + @ApiModelProperty(value = "") + private String mk; + + @ApiModelProperty(value = "") + @TableField("whs_type") + private Integer whsType; + + /** + * 宸ヤ綔鐘舵�� + */ + @ApiModelProperty(value = "宸ヤ綔鐘舵��") + @TableField("wrk_sts") + private Long wrkSts; + + /** + * 鍏ュ嚭搴撶被鍨� + */ + @ApiModelProperty(value = "鍏ュ嚭搴撶被鍨�") + @TableField("io_type") + private Integer ioType; + + /** + * 鍫嗗灈鏈� + */ + @ApiModelProperty(value = "鍫嗗灈鏈�") + @TableField("crn_no") + private Integer crnNo; + + @ApiModelProperty(value = "") + @TableField("sheet_no") + private String sheetNo; + + /** + * 浼樺厛绾� + */ + @ApiModelProperty(value = "浼樺厛绾�") + @TableField("io_pri") + private Double ioPri; + + @ApiModelProperty(value = "") + @TableField("wrk_date") + private Date wrkDate; + + /** + * 鐩爣搴撲綅 + */ + @ApiModelProperty(value = "鐩爣搴撲綅") + @TableField("loc_no") + private String locNo; + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value = "鐩爣绔�") + @TableField("sta_no") + private Integer staNo; + + /** + * 婧愮珯 + */ + @ApiModelProperty(value = "婧愮珯") + @TableField("source_sta_no") + private Integer sourceStaNo; + + /** + * 婧愬簱浣� + */ + @ApiModelProperty(value = "婧愬簱浣�") + @TableField("source_loc_no") + private String sourceLocNo; + + @ApiModelProperty(value = "") + @TableField("loc_sts") + private String locSts; + + /** + * 鎷f枡 + */ + @ApiModelProperty(value = "鎷f枡") + private String picking; + + @ApiModelProperty(value = "") + @TableField("link_mis") + private String linkMis; + + @ApiModelProperty(value = "") + @TableField("online_yn") + private String onlineYn; + + @ApiModelProperty(value = "") + @TableField("upd_mk") + private String updMk; + + /** + * 閫�鍑� + */ + @ApiModelProperty(value = "閫�鍑�") + @TableField("exit_mk") + private String exitMk; + + @ApiModelProperty(value = "") + @TableField("plt_type") + private Integer pltType; + + /** + * 绌烘澘 + */ + @ApiModelProperty(value = "绌烘澘") + @TableField("empty_mk") + private String emptyMk; + + /** + * 宸ヤ綔鏃堕棿 + */ + @ApiModelProperty(value = "宸ヤ綔鏃堕棿") + @TableField("io_time") + private Date ioTime; + + @ApiModelProperty(value = "") + @TableField("ctn_type") + private Integer ctnType; + + @ApiModelProperty(value = "") + private String packed; + + @ApiModelProperty(value = "") + @TableField("ove_mk") + private String oveMk; + + @ApiModelProperty(value = "") + @TableField("mtn_type") + private Double mtnType; + + @ApiModelProperty(value = "") + @TableField("user_no") + private String userNo; + + /** + * 鍫嗗灈鏈哄惎鍔ㄦ椂闂� + */ + @ApiModelProperty(value = "鍫嗗灈鏈哄惎鍔ㄦ椂闂�") + @TableField("crn_str_time") + private Date crnStrTime; + + /** + * 鍫嗗灈鏈哄仠姝㈡椂闂� + */ + @ApiModelProperty(value = "鍫嗗灈鏈哄仠姝㈡椂闂�") + @TableField("crn_end_time") + private Date crnEndTime; + + @ApiModelProperty(value = "") + @TableField("plc_str_time") + private Date plcStrTime; + + @ApiModelProperty(value = "") + @TableField("crn_pos_time") + private Date crnPosTime; + + @ApiModelProperty(value = "") + @TableField("load_time") + private Double loadTime; + + @ApiModelProperty(value = "") + @TableField("exp_time") + private Double expTime; + + @ApiModelProperty(value = "") + @TableField("ref_wrkno") + private Double refWrkno; + + /** + * 鎷f枡鏃堕棿 + */ + @ApiModelProperty(value = "鎷f枡鏃堕棿") + @TableField("ref_iotime") + private Date refIotime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value = "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + /** + * 鍒涘缓鑰� + */ + @ApiModelProperty(value = "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value = "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + @ApiModelProperty(value = "") + @TableField("pause_mk") + private String pauseMk; + + @ApiModelProperty(value = "") + @TableField("error_time") + private Date errorTime; + + @ApiModelProperty(value = "") + @TableField("error_memo") + private String errorMemo; + + @ApiModelProperty(value = "") + @TableField("ctn_kind") + private Integer ctnKind; + + @ApiModelProperty(value = "") + @TableField("manu_type") + private String manuType; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value = "澶囨敞") + private String memo; + + @ApiModelProperty(value = "") + @TableField("sc_weight") + private Double scWeight; + + @ApiModelProperty(value = "") + @TableField("log_mk") + private String logMk; + + @ApiModelProperty(value = "") + @TableField("log_err_time") + private Date logErrTime; + + @ApiModelProperty(value = "") + @TableField("log_err_memo") + private String logErrMemo; + + /** + * 鏉$爜 + */ + @ApiModelProperty(value = "鏉$爜") + private String barcode; + + @ApiModelProperty(value = "") + @TableField("Pdc_type") + private String PdcType; + + @ApiModelProperty(value = "") + @TableField("ctn_no") + private String ctnNo; + + /** + * 婊℃澘 + */ + @ApiModelProperty(value = "婊℃澘") + @TableField("full_plt") + private String fullPlt; + + + public String getYmd$() { + if (Cools.isEmpty(this.ymd)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ymd); + } + + public String getWrkDate$() { + if (Cools.isEmpty(this.wrkDate)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.wrkDate); + } + + + public String getIoTime$() { + if (Cools.isEmpty(this.ioTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime); + } + + public String getCrnStrTime$() { + if (Cools.isEmpty(this.crnStrTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnStrTime); + } + + public String getCrnEndTime$() { + if (Cools.isEmpty(this.crnEndTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnEndTime); + } + + public String getPlcStrTime$() { + if (Cools.isEmpty(this.plcStrTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.plcStrTime); + } + + public String getCrnPosTime$() { + if (Cools.isEmpty(this.crnPosTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.crnPosTime); + } + + public String getRefIotime$() { + if (Cools.isEmpty(this.refIotime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.refIotime); + } + + + public String getModiTime$() { + if (Cools.isEmpty(this.modiTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + public Date getAppeTime() { + return appeTime; + } + + public String getAppeTime$() { + if (Cools.isEmpty(this.appeTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + + public String getErrorTime$() { + if (Cools.isEmpty(this.errorTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime); + } + + public void setErrorMemo(String errorMemo) { + if (errorMemo.length() > 255) { + errorMemo = errorMemo.substring(0, 150); + } + this.errorMemo = errorMemo; + } + + public String getLogErrTime$() { + if (Cools.isEmpty(this.logErrTime)) { + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.logErrTime); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/BasDevpMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/BasDevpMapper.java new file mode 100644 index 0000000..6384f9e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/BasDevpMapper.java @@ -0,0 +1,18 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.BasDevp; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface BasDevpMapper extends BaseMapper<BasDevp> { + + List<Integer> getAvailableInSite(@Param("typeNo") Integer typeNo); + + List<Integer> getAvailableOutSite(@Param("typeNo") Integer typeNo); +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/LocMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/LocMapper.java new file mode 100644 index 0000000..43bb9a4 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/LocMapper.java @@ -0,0 +1,13 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.Loc; + +import java.util.List; +import java.util.Map; + +public interface LocMapper extends BaseMapper<Loc> { + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/StaDescMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/StaDescMapper.java new file mode 100644 index 0000000..0af66de --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/StaDescMapper.java @@ -0,0 +1,12 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.StaDesc; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface StaDescMapper extends BaseMapper<StaDesc> { + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportLogMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportLogMapper.java new file mode 100644 index 0000000..7c1d924 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportLogMapper.java @@ -0,0 +1,7 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.TaskReportLog; + +public interface TaskReportLogMapper extends BaseMapper<TaskReportLog> { +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportMapper.java new file mode 100644 index 0000000..a3d117d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/TaskReportMapper.java @@ -0,0 +1,7 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.TaskReport; + +public interface TaskReportMapper extends BaseMapper<TaskReport> { +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkDetlMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkDetlMapper.java new file mode 100644 index 0000000..77bfdfd --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkDetlMapper.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.WrkDetl; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; + +@Mapper +@Repository +public interface WrkDetlMapper extends BaseMapper<WrkDetl> { + + List<WrkDetl> findByWorkNo(Integer workNo); + + int updateIoTime(@Param("workNo") Integer workNo, @Param("ioTime") Date ioTime); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkMastMapper.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkMastMapper.java new file mode 100644 index 0000000..92f11cf --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/mapper/WrkMastMapper.java @@ -0,0 +1,116 @@ +package com.zy.acs.wcs.asrs.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zy.acs.wcs.asrs.entity.WrkMast; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface WrkMastMapper extends BaseMapper<WrkMast> { + + WrkMast selectByLocNo(@Param("sourceLocNo") String sourceLocNo); + + WrkMast selectByLocNo1(@Param("sourceLocNo") String sourceLocNo); + +// @Select("select * from asr_wrk_mast where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type <> 103 and io_type <> 104 and io_type <> 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,io_time,wrk_no") + List<WrkMast> selectToBeCompleteData(); + + List<WrkMast> selectToBeHistoryData(); + + // wcs --------------------------------------------- + // 鍏ュ簱绗竴姝ワ紝鎵爜浠幏鍙栨潯鐮佷俊鎭椂鏌ヨ +// @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC") + WrkMast selectPakInStep1(@Param("sourceStaNo")Integer sourceStaNo, @Param("barcode")String barcode); + + WrkMast selectPakInStepBarcode(@Param("barcode")String barcode); + + WrkMast selectPakInStep11(@Param("sourceStaNo")Integer sourceStaNo); + + // 鍏ュ簱绗簩姝ワ紝褰撴墭鐩樼墿鏂欏湪鍫嗗灈鏈哄叆搴撶珯鏃舵椂鏌ヨ +// @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC") + WrkMast selectPakInStep2(@Param("crnNo")Integer crnNo, @Param("workNo")Integer workNo, @Param("staNo")Integer staNo); + + // 鍏ュ簱绗笁姝ワ紝褰撳爢鍨涙満鎶婅揣鏀惧叆搴撲綅鏃� +// @Select("select top 1 from dbo.asr_wrk_mast where wrk_no=#{workNo}") + WrkMast selectPakInStep3(@Param("workNo")Integer workNo); + + // 鎷f枡鍐嶅叆搴撴椂锛岀珯鐐规湁鐗╀笖闇�姹傛椂鏌ヨ +// @Select("select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)") + WrkMast selectPickStep(@Param("barcode")String barcode); + + // 鍑哄簱绗竴姝ワ紝浠庡簱浣嶅埌鍫嗗灈鏈哄嚭搴撶珯 +// @Select("select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc") + WrkMast selectPakOutStep1(@Param("crnNo")Integer crnNO, @Param("sourceStaNo")Integer sourceStaNo); + + // 鍑哄簱绗簩姝ワ紝浠庡爢鍨涙満鍑哄簱绔欏埌鐩爣鍑哄簱绔欙紝鍫嗗灈鏈哄嚭搴撶珯鏈夌墿鏃舵墽琛� +// @Select("select top 1 * from dbo.asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=12 and io_type>100 order by io_pri desc,io_time desc,wrk_no ASC") + WrkMast selectPakOutStep2(@Param("sourceStaNo")Integer sourceStaNo); + + // 搴撲綅绉昏浆宸ヤ綔妗o紝鍦ㄨ繘琛屼竴娆″叆鍑哄簱浣滀笟鍚庣揣璺熷簱浣嶇Щ杞� +// @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=11 and (io_type=11 or io_type=110) and crn_no=#{crnNo} order by io_time,wrk_no") + WrkMast selectLocMove(@Param("crnNo")Integer crnNo); + WrkMast selectLocMove111(@Param("crnNo")Integer crnNo); + + WrkMast selectLocMoving(@Param("crnNo")Integer crnNo); + + WrkMast selectWorking(@Param("crnNo")Integer crnNo); + + // work log ------------------------------------------------------- + @Insert("insert into asr_wrk_mast_log select * from asr_wrk_mast where wrk_no=#{workNo}") + int saveWrkMastLog(Integer workNo); + + @Insert("insert into asr_wrk_detl_log select * from asr_wrk_detl where wrk_no=#{workNo}") + int saveWrkDetlLog(Integer workNo); + + // 閫氱煡妗� ---------------------------------------------------------------------- + + // update 鍏ュ簱閫氱煡妗� -- Y + @Update("update cust_wait_pakin set io_status='Y' where zpallet = #{barcode}") + int updateWaitPakInStep1(String barcode); + + // update 鍏ュ簱閫氱煡妗� -- F + @Update("update cust_wait_pakin set io_status='F' where zpallet = #{barcode}") + int updateWaitPakInStep2(String barcode); + +// WrkMast selectWorkingPakin(); +// +// WrkMast selectWorkingPakout(); + + /** + * 鍫嗗灈鏈烘槸鍚﹀瓨鍦ㄥ嚭搴撲换鍔� + * @param crnNo + * @return + */ + WrkMast selectCrnWorking(@Param("crnNo")Integer crnNo); + + /** + * 杈撻�佺嚎鏄惁瀛樺湪鍏ュ簱浠诲姟 + * @param crnNo + * @return + */ + WrkMast selectDevWorking(@Param("crnNo")Integer crnNo); + + + List<WrkMast> selectPick(); + + /** + * 鏌ユ壘鍫嗗灈鏈哄彿瀵瑰簲鎵�鏈夊緟鍑哄簱宸ヤ綔妗� + * @param crnNO + * @param sourceStaNo + * @return + */ + List<WrkMast> selectPakOutStep11(@Param("crnNo")Integer crnNO, @Param("sourceStaNo")Integer sourceStaNo); + + WrkMast selectWorkingPakin(@Param("sourceStaNo")Integer sourceStaNo); + WrkMast selectWorkingPakout(@Param("sourceStaNo")Integer sourceStaNo); + + WrkMast selectPakoutEmpty(@Param("staNo")Integer outSite); + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/BasDevpService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/BasDevpService.java new file mode 100644 index 0000000..6d94651 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/BasDevpService.java @@ -0,0 +1,53 @@ +package com.zy.acs.wcs.asrs.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.BasDevp; + +import java.util.List; + +public interface BasDevpService extends IService<BasDevp> { + + /** + * 鍏ュ簱绔� + * + * @return + */ + List<Integer> getAvailableInSite(); + + /** + * 绌烘澘鍏ュ簱绔� + * + * @return + */ + List<Integer> getAvailableEmptyInSite(); + + /** + * 鍑哄簱绔� + * + * @return + */ + List<Integer> getAvailableOutSite(Integer typeNo); + + /** + * 绌烘澘鍑哄簱绔� + * + * @return + */ + List<Integer> getAvailableEmptyOutSite(); + + /** + * 鐩爣绔欑偣鐘舵�佹娴� + * + * @param devpNo + */ + BasDevp checkSiteStatus(Integer devpNo); + + /** + * 鐩爣绔欑偣鐘舵�佹娴� + * + * @param devpNo + * @param put 鏄惁鍏ュ簱鎿嶄綔 true 鏄� 锛� false 涓嶆槸 + */ + BasDevp checkSiteStatus(Integer devpNo, boolean put); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/LocService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/LocService.java new file mode 100644 index 0000000..699cf2e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/LocService.java @@ -0,0 +1,12 @@ +package com.zy.acs.wcs.asrs.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.Loc; + +import java.util.List; +import java.util.Map; + +public interface LocService extends IService<Loc> { + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/StaDescService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/StaDescService.java new file mode 100644 index 0000000..8be4aeb --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/StaDescService.java @@ -0,0 +1,13 @@ +package com.zy.acs.wcs.asrs.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.StaDesc; + +public interface StaDescService extends IService<StaDesc> { + + StaDesc queryCrnStn(Integer typeNo, Integer crnNo, Integer stnNo); + + StaDesc queryCrn(Integer typeNo, Integer stnNo, Integer crnNo); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportLogService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportLogService.java new file mode 100644 index 0000000..51940d9 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportLogService.java @@ -0,0 +1,9 @@ +package com.zy.acs.wcs.asrs.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.TaskReportLog; + +public interface TaskReportLogService extends IService<TaskReportLog> { + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportService.java new file mode 100644 index 0000000..2bf5d81 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/TaskReportService.java @@ -0,0 +1,9 @@ +package com.zy.acs.wcs.asrs.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.TaskReport; + +public interface TaskReportService extends IService<TaskReport> { + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkDetlService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkDetlService.java new file mode 100644 index 0000000..c1c94ed --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkDetlService.java @@ -0,0 +1,15 @@ +package com.zy.acs.wcs.asrs.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.WrkDetl; + +import java.util.Date; +import java.util.List; + +public interface WrkDetlService extends IService<WrkDetl> { + + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkMastService.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkMastService.java new file mode 100644 index 0000000..571faae --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/WrkMastService.java @@ -0,0 +1,13 @@ +package com.zy.acs.wcs.asrs.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.zy.acs.wcs.asrs.entity.WrkMast; + +import java.util.List; + +public interface WrkMastService extends IService<WrkMast> { + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/BasDevpServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/BasDevpServiceImpl.java new file mode 100644 index 0000000..665f702 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/BasDevpServiceImpl.java @@ -0,0 +1,65 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.core.exception.CoolException; +import com.zy.acs.wcs.asrs.entity.BasDevp; +import com.zy.acs.wcs.asrs.mapper.BasDevpMapper; +import com.zy.acs.wcs.asrs.service.BasDevpService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("basDevpService") +public class BasDevpServiceImpl extends ServiceImpl<BasDevpMapper, BasDevp> implements BasDevpService { + + + + @Override + public List<Integer> getAvailableInSite() { + return this.baseMapper.getAvailableInSite(1); + } + + @Override + public List<Integer> getAvailableEmptyInSite() { + return this.baseMapper.getAvailableInSite(10); + } + + @Override + public List<Integer> getAvailableOutSite(Integer typeNo) { + return this.baseMapper.getAvailableOutSite(typeNo); + } + + @Override + public List<Integer> getAvailableEmptyOutSite() { + return this.baseMapper.getAvailableOutSite(110); + } + + @Override + public BasDevp checkSiteStatus(Integer devpNo) { + return checkSiteStatus(devpNo, false); + } + + @Override + public BasDevp checkSiteStatus(Integer devpNo, boolean put) { + BasDevp station = this.getById(devpNo); + if (station == null) { + throw new CoolException(devpNo + "绔欑偣涓嶅瓨鍦�"); + } + if (put) { + if (station.getAutoing() == null || !station.getAutoing().equals("Y")) { + throw new CoolException(devpNo + "绔欑偣涓嶆槸鑷姩鐘舵��"); + } + if (station.getLoading() == null || !station.getLoading().equals("Y")) { + throw new CoolException(devpNo + "绔欑偣鏃犵墿"); + } + if (station.getWrkNo() != null && station.getWrkNo() > 0) { + throw new CoolException(devpNo + "绔欑偣宸叉湁宸ヤ綔鍙�"); + } + if (wrkMastService.getWorkingMast(devpNo) > 0) { + throw new CoolException(devpNo + "绔欑偣涓嶈兘鍚屾椂鐢熸垚涓ょ瑪鍏ュ簱宸ヤ綔妗�"); + } + } + return station; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/LocServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/LocServiceImpl.java new file mode 100644 index 0000000..efd2d33 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/LocServiceImpl.java @@ -0,0 +1,22 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.wcs.asrs.entity.Loc; +import com.zy.acs.wcs.asrs.mapper.LocMapper; +import com.zy.acs.wcs.asrs.service.LocService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Slf4j +@Service("locService") +public class LocServiceImpl extends ServiceImpl<LocMapper, Loc> implements LocService { + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/MainServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/MainServiceImpl.java new file mode 100644 index 0000000..3375d3e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/MainServiceImpl.java @@ -0,0 +1,465 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zy.acs.wcs.asrs.entity.Loc; +import com.zy.acs.wcs.asrs.entity.WrkMast; +import com.zy.acs.wcs.asrs.service.BasDevpService; +import com.zy.acs.wcs.asrs.service.LocService; +import com.zy.acs.wcs.asrs.service.StaDescService; +import com.zy.acs.wcs.asrs.service.WrkMastService; +import com.zy.acs.wcs.common.OpenBusSubmitParam; +import com.zy.acs.wcs.common.TaskDto; +import com.zy.acs.wcs.common.utils.HttpHandler; +import com.zy.acs.wcs.core.DevpThread; +import com.zy.acs.wcs.core.cache.MessageQueue; +import com.zy.acs.wcs.core.cache.SlaveConnection; +import com.zy.acs.wcs.core.enums.SlaveType; +import com.zy.acs.wcs.core.model.DevpSlave; +import com.zy.acs.wcs.core.model.Task; +import com.zy.acs.wcs.core.model.protocol.StaProtocol; +import com.zy.acs.wcs.core.properties.SlaveProperties; +import com.zy.acs.wcs.core.thread.BarcodeThread; +import com.zy.acs.wcs.core.thread.SiemensDevpThread; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +/** + * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� + * Created by vincent on 2020/8/6 + */ +@Slf4j +@Service("mainService") +@Transactional +public class MainServiceImpl { + + public static final long COMMAND_TIMEOUT = 5 * 1000; + + @Autowired + private SlaveProperties slaveProperties; + + @Autowired + private WrkMastService wrkMastService; + + @Autowired + private BasDevpService basDevpService; + + @Autowired + private StaDescService staDescService; + + @Autowired + private LocService locService; + + public static final ArrayList<Integer> locRow = new ArrayList<Integer>() {{ + add(49); + add(50); + add(51); + add(52); + add(53); + add(54); + add(55); + add(56); + add(57); + add(58); + add(59); + }}; + + private short workNo = 1000; + + private short workNo2 = 3000; + + private Short getWorkNo() { + if (workNo > 2000) { + workNo = 1000; + } else { + workNo++; + } + return workNo; + } + + private Short getOutWorkNo() { + if (workNo2 > 4000) { + workNo2 = 3000; + } else { + workNo2++; + } + return workNo2; + } + + + public synchronized void generateStoreWrkFile() { + try { + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + for (DevpSlave devp : slaveProperties.getDevp()) { + // 閬嶅巻鍏ュ簱鍙� + for (DevpSlave.Sta inSta : devp.getInSta()) { + // 鑾峰彇鍏ュ簱绔欎俊鎭� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + Short workNo = staProtocol.getWorkNo(); + // 灏哄妫�娴嬪紓甯� + boolean back = false; + String errMsg = ""; + if (staProtocol.isFrontErr()) { + errMsg = "鍓嶈秴闄�"; + back = true; + } + if (!back && staProtocol.isBackErr()) { + errMsg = "鍚庤秴闄�"; + back = true; + } + if (!back && staProtocol.isHighErr()) { + errMsg = "楂樿秴闄�"; + back = true; + } + if (!back && staProtocol.isLeftErr()) { + errMsg = "宸﹁秴闄�"; + back = true; + } + if (!back && staProtocol.isRightErr()) { + errMsg = "鍙宠秴闄�"; + back = true; + } + if (!back && staProtocol.isWeightErr()) { + errMsg = "瓒呴噸"; + back = true; + } + if (!back && staProtocol.isBarcodeErr()) { + errMsg = "鎵爜澶辫触"; + back = true; + } + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() + && !staProtocol.isEmptyMk() && workNo >= 9000 && staProtocol.isPakMk()) { +// // 鑾峰彇鏉$爜鎵弿浠俊鎭� + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); + if (barcodeThread == null) { + continue; + } + String BoxNo = barcodeThread.getBarcode(); +// if (Cools.isEmpty(BoxNo)) { +// log.error("{}鍙锋潯鐮佹壂鎻忓け璐ワ紝鍊硷細{}", inSta.getBarcode(), BoxNo); +// continue; +// } + if (back) { + staProtocol.setStaNo(inSta.getBackSta().shortValue()); + devpThread.setPakMk(staProtocol.getSiteId(), false); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.info("缁勬墭鍏ュ簱鎵樼洏閫�鍥炲懡浠ゆ帹閫佽緭閫佺嚎闃熷垪鎴愬姛==>{}锛寋}锛寋}", BoxNo, errMsg); + } else { + // TODO + OpenBusSubmitParam data = getData(inSta.getStaNo()); + String response = new HttpHandler.Builder() + .setUri("10.10.10.200:8088") + .setPath("/api/open/bus/submit") + .setJson(JSON.toJSONString(data)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.getInteger("code").equals(200)) { + createInWrk(); + staProtocol.setWorkNo(getWorkNo()); + staProtocol.setStaNo((short) 102); + MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); + log.info("缁勬墭鍏ュ簱鍛戒护鎺ㄩ�佽緭閫佺嚎闃熷垪鎴愬姛:{}", staProtocol); + } + } + } + } + } + } catch (Exception e) { + log.error("generateStoreWrkFile e", e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + } + + private Loc getLoc() { + List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, 15).in(Loc::getRow, locRow)); + Collections.shuffle(list); + return list.get(0); + } + + + private OpenBusSubmitParam getData(Integer stnNo) { + OpenBusSubmitParam param = new OpenBusSubmitParam(); + param.setBatch(String.valueOf(System.currentTimeMillis())); + + TaskDto taskDto = new TaskDto(); + taskDto.setOriSta(stnNo + ""); + taskDto.setDestLoc(getLoc().getLocNo()); + taskDto.setPriority(100); + taskDto.setSeqNum(String.valueOf(System.currentTimeMillis()).substring(15, 19)); + param.getTaskList().add(taskDto); + return param; + } + + + private WrkMast createInWrk() { + Date date = new Date(); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(getWorkNo().intValue()); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoPri(13D); // 浼樺厛绾� + wrkMast.setCrnNo(1); + wrkMast.setSourceStaNo(101); + wrkMast.setStaNo(103); + wrkMast.setLocNo(getLoc().getLocNo()); + wrkMast.setBarcode(""); // 鎵樼洏鐮� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("Y"); + // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(date); + wrkMast.setModiTime(date); + boolean res = wrkMastService.save(wrkMast); + return wrkMast; + } + + + private WrkMast createOutWrk() { + Date date = new Date(); + // 鐢熸垚宸ヤ綔妗� + WrkMast wrkMast = new WrkMast(); + wrkMast.setWrkNo(getOutWorkNo().intValue()); + wrkMast.setIoTime(new Date()); + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID + wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 + wrkMast.setIoPri(13D); // 浼樺厛绾� + wrkMast.setCrnNo(1); + wrkMast.setSourceStaNo(101); + wrkMast.setStaNo(103); + wrkMast.setLocNo(getLoc().getLocNo()); + wrkMast.setBarcode(""); // 鎵樼洏鐮� + wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 + wrkMast.setPicking("N"); // 鎷f枡 + wrkMast.setExitMk("N"); // 閫�鍑� + wrkMast.setEmptyMk("N"); // 绌烘澘 + wrkMast.setLinkMis("Y"); + // 鎿嶄綔浜哄憳鏁版嵁 + wrkMast.setAppeTime(date); + wrkMast.setModiTime(date); + boolean res = wrkMastService.save(wrkMast); + return wrkMast; + } + + /** + * 鍑哄簱 + */ + public synchronized void out() throws IOException { + for (DevpSlave devpSlave : slaveProperties.getDevp()) { + for (DevpSlave.Sta sta : devpSlave.getOutSta()) { + try { + // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅 + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId()); + StaProtocol staProtocol = devpThread.getStation().get(sta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } + if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) { + WrkMast one = wrkMastService.getOne(new QueryWrapper<WrkMast>().eq("sta_no", sta.getStaNo()).eq("wrk_sts", 14)); + if (one != null) { + // 鏌ヨ宸ヤ綔妗� + staProtocol.setWorkNo(getOutWorkNo()); + staProtocol.setStaNo((short) 101); + MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol)); + one.setWrkSts(15L); + wrkMastService.updateById(one); + } + } + } catch (Exception e) { + log.error("鍑哄簱鍒板嚭搴撶珯寮傚父:寮傚父淇℃伅锛�" + e); + } + } + } + } + + + /** + * 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁� + */ + public synchronized void ioConvert() { + try { + // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + for (DevpSlave devp : slaveProperties.getDevp()) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); +// for (DevpSlave.Sta inSta : devp.getInSta()) { +// TaskWrk taskWrk = taskWrkService.selectByTargetPoint(inSta.getBackSta() + ""); +// switch (inSta.getBackSta()) { +// case 101: +// if (taskWrk != null) { +// if (devpThread.ioModeOf1F1 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf1F1 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf1F1 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf1F1 = IoModeType.PAKIN_MODE; +// } +// break; +// case 104: +// if (taskWrk != null) { +// if (devpThread.ioModeOf1F2 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf1F2 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf1F2 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf1F2 = IoModeType.PAKIN_MODE; +// } +// break; +// case 107: +// if (taskWrk != null) { +// if (devpThread.ioModeOf1F3 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf1F3 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf1F3 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf1F3 = IoModeType.PAKIN_MODE; +// } +// break; +// case 110: +// if (taskWrk != null) { +// if (devpThread.ioModeOf1F4 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf1F4 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf1F4 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf1F4 = IoModeType.PAKIN_MODE; +// } +// break; +// case 113: +// if (taskWrk != null) { +// if (devpThread.ioModeOf1F5 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf1F5 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf1F5 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf1F5 = IoModeType.PAKIN_MODE; +// } +// break; +// case 203: +// if (taskWrk != null) { +// if (devpThread.ioModeOf2F1 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf2F1 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf2F1 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf2F1 = IoModeType.PAKIN_MODE; +// } +// break; +// +// case 207: +// if (taskWrk != null) { +// if (devpThread.ioModeOf2F2 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf2F2 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf2F2 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf2F2 = IoModeType.PAKIN_MODE; +// } +// break; +// +// case 212: +// if (taskWrk != null) { +// if (devpThread.ioModeOf2F3 != IoModeType.PAKOUT_MODE) { +// // 鍑哄簱鍒囨崲涓� +// devpThread.ioModeOf2F3 = IoModeType.PAKOUT_BOOTING; +// TaskWrk pakin = taskWrkService.selectByStartPoint(inSta.getStaNo() + ""); +// if (pakin == null && !devpThread.getStation().get(inSta.getStaNo()).isLoading() +// && !devpThread.getStation().get(inSta.getBackSta()).isLoading() +// && devpThread.getStation().get(inSta.getBackSta()).getWorkNo() == 0) { +// // 鍑哄簱妯″紡 +// devpThread.ioModeOf2F3 = IoModeType.PAKOUT_MODE; +// } +// } +// } else { +// // 鍏ュ簱妯″紡 +// devpThread.ioModeOf2F3 = IoModeType.PAKIN_MODE; +// } +// break; +// } +// } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/StaDescServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/StaDescServiceImpl.java new file mode 100644 index 0000000..f503add --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/StaDescServiceImpl.java @@ -0,0 +1,40 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.framework.exception.CoolException; +import com.zy.acs.wcs.asrs.entity.StaDesc; +import com.zy.acs.wcs.asrs.mapper.StaDescMapper; +import com.zy.acs.wcs.asrs.service.StaDescService; +import org.springframework.stereotype.Service; + +@Service("staDescService") +public class StaDescServiceImpl extends ServiceImpl<StaDescMapper, StaDesc> implements StaDescService { + + @Override + public StaDesc queryCrnStn(Integer typeNo, Integer crnNo, Integer stnNo) { + Wrapper<StaDesc> wrapper = new QueryWrapper<StaDesc>() + .eq("type_no", typeNo) + .eq("stn_no", stnNo) + .eq("crn_no", crnNo); + StaDesc staDesc = this.getOne(wrapper); + if (staDesc == null) { + throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�"); + } + return staDesc; + } + + @Override + public StaDesc queryCrn(Integer typeNo, Integer stnNo, Integer crnNo) { + Wrapper<StaDesc> wrapper = new QueryWrapper<StaDesc>() + .eq("type_no", typeNo) + .eq("stn_no", stnNo) + .eq("crn_no", crnNo); + StaDesc staDesc = this.getOne(wrapper); + if (staDesc == null) { + return null; + } + return staDesc; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportLogServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportLogServiceImpl.java new file mode 100644 index 0000000..f34472a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportLogServiceImpl.java @@ -0,0 +1,16 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.wcs.asrs.entity.TaskReportLog; +import com.zy.acs.wcs.asrs.mapper.TaskReportLogMapper; +import com.zy.acs.wcs.asrs.service.TaskReportLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("taskReportLogService") +public class TaskReportLogServiceImpl extends ServiceImpl<TaskReportLogMapper, TaskReportLog> implements TaskReportLogService { + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportServiceImpl.java new file mode 100644 index 0000000..231244e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/TaskReportServiceImpl.java @@ -0,0 +1,16 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.wcs.asrs.entity.TaskReport; +import com.zy.acs.wcs.asrs.mapper.TaskReportMapper; +import com.zy.acs.wcs.asrs.service.TaskReportService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("taskReportService") +public class TaskReportServiceImpl extends ServiceImpl<TaskReportMapper, TaskReport> implements TaskReportService { + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkDetlServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkDetlServiceImpl.java new file mode 100644 index 0000000..c08d2d9 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkDetlServiceImpl.java @@ -0,0 +1,15 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.wcs.asrs.entity.WrkDetl; +import com.zy.acs.wcs.asrs.mapper.WrkDetlMapper; +import com.zy.acs.wcs.asrs.service.WrkDetlService; +import org.springframework.stereotype.Service; + + +@Service("wrkDetlService") +public class WrkDetlServiceImpl extends ServiceImpl<WrkDetlMapper, WrkDetl> implements WrkDetlService { + + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkMastServiceImpl.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkMastServiceImpl.java new file mode 100644 index 0000000..9804d75 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/asrs/service/impl/WrkMastServiceImpl.java @@ -0,0 +1,15 @@ +package com.zy.acs.wcs.asrs.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.wcs.asrs.entity.WrkMast; +import com.zy.acs.wcs.asrs.mapper.WrkMastMapper; +import com.zy.acs.wcs.asrs.service.WrkMastService; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service("wrkMastService") +public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService { + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/OpenBusSubmitParam.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/OpenBusSubmitParam.java new file mode 100644 index 0000000..f8ffb14 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/OpenBusSubmitParam.java @@ -0,0 +1,18 @@ +package com.zy.acs.wcs.common; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vincent on 2023/6/12 + */ +@Data +public class OpenBusSubmitParam { + + private String batch; + + private List<TaskDto> taskList = new ArrayList<>(); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/TaskDto.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/TaskDto.java new file mode 100644 index 0000000..e3821ac --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/TaskDto.java @@ -0,0 +1,23 @@ +package com.zy.acs.wcs.common; + +import lombok.Data; + +/** + * Created by vincent on 2023/6/12 + */ +@Data +public class TaskDto { + + private String seqNum; + + private String oriLoc; + + private String oriSta; + + private String destLoc; + + private String destSta; + + private Integer priority = 1; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/utils/HttpHandler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/utils/HttpHandler.java new file mode 100644 index 0000000..93665d1 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/common/utils/HttpHandler.java @@ -0,0 +1,213 @@ +package com.zy.acs.wcs.common.utils; + + +import okhttp3.*; + +import java.io.IOException; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +/** + * Http鍗忚瀹㈡埛绔� + * @author luxiaotao + * @date 2018-9-27 + */ +public class HttpHandler { + + private static final Integer DEFAULT_TIMEOUT_SECONDS = 5; + private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8"); + + private String uri; + private String path; + private String json; + private Map<String, Object> params; + private Map<String, Object> headers; + private boolean https; + private Integer timeout; + private TimeUnit timeUnit; + + public HttpHandler(Builder builder){ + this.uri = builder.uri; + this.path = builder.path; + this.json = builder.json; + this.params = builder.params; + this.headers = builder.headers; + this.https = builder.https; + this.timeout = builder.timeout; + this.timeUnit = builder.timeUnit; + } + + /** + * GET璇锋眰鎵ц + * @return the HttpHandler response + */ + public String doGet() throws IOException { + String url = paramsToUrl(uri, path, params, https); + Request.Builder headerBuilder = new Request.Builder(); + if (headers != null && headers.size()>0){ + for (Map.Entry<String, Object> entry : headers.entrySet()){ + headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } + Request request = headerBuilder.url(url).build(); + Response response = getClient(timeout, timeUnit).newCall(request).execute(); + return response.isSuccessful() ? response.body().string() : null; + } + + /** + * POST璇锋眰鎵ц + * @return the HttpHandler response + */ + public String doPost() throws IOException { + Request request; + Request.Builder headerBuilder = new Request.Builder(); + if (headers != null && headers.size()>0){ + for (Map.Entry<String, Object> entry : headers.entrySet()){ + headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } + if (json == null || "".equals(json)){ + FormBody.Builder builder = new FormBody.Builder(); + for (Map.Entry<String, Object> entry : params.entrySet()){ + builder.add(entry.getKey(), String.valueOf(entry.getValue())); + } + FormBody body = builder.build(); + request = headerBuilder + .url((https?"https://":"http://")+uri+path) + .post(body) + .build(); + } else { + RequestBody body = RequestBody.create(MEDIA_TYPE, json); + Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path); + builder.header("Content-Type", "application/json;charset=UTF-8"); + request = builder.post(body).build(); + + } + Call call = getClient(timeout, timeUnit).newCall(request); + Response response = call.execute(); + return response.body().string(); + + } + + /** + * get璇锋眰鍙傛暟鎷兼帴鏂规硶 + * @return 璇锋眰琛� + */ + private String paramsToUrl(String uri, String path, Map<String, Object> params, boolean isHttps) { + StringBuilder res = new StringBuilder(); + res.append(isHttps ? "https://" : "http://"); + res.append(uri); + if (path.length() > 0 && !(path.charAt(0) == '/')){ + res.append("/"); + } + res.append(path); + Optional.ofNullable(params).ifPresent( + args -> { + res.append("?"); + args.forEach((key, value) -> { + res.append(key); + res.append("="); + res.append(value); + res.append("&"); + }); + } + ); + String url = res.toString(); + if ("&".equals(url.substring(url.length()-1, url.length()))){ + url = url.substring(0, url.length()-1); + } + return url; + } + + /** + * 鑾峰彇 okHttpClient + * @return the HttpHandler instance + */ + private OkHttpClient getClient(Integer timeout, TimeUnit timeUnit){ + return new OkHttpClient + .Builder() + .connectTimeout(timeout, timeUnit) + .readTimeout(timeout, timeUnit) + .build(); + } + + /** + * Http鍗忚鎶ユ枃寤洪�犺�� + */ + public static class Builder { + + private String uri; + private String path; + private String json; + private Map<String, Object> params; + private Map<String, Object> headers; + private boolean https; + private Integer timeout; + private TimeUnit timeUnit; + + { + // 榛樿5s瓒呮椂 + timeout = DEFAULT_TIMEOUT_SECONDS; + timeUnit = TimeUnit.SECONDS; + path = ""; + } + + /** + * 寤洪�犲櫒 + * @return the HttpHandler instance + */ + public HttpHandler build(){ + if (null == this.uri || "".equals(this.uri)){ + throw new RuntimeException("uri is null"); + } + if (this.uri.startsWith("http://")){ + this.uri = this.uri.substring(6,uri.length()); + } else if (this.uri.startsWith("https://")){ + this.uri = this.uri.substring(7,uri.length()); + } + return new HttpHandler(this); + } + + public Builder setUri(String uri) { + this.uri = uri; + return this; + } + + public Builder setPath(String path) { + if (!path.startsWith("/")){ + path = "/" + path; + } + this.path = path; + return this; + } + + public Builder setTimeout(Integer timeout, TimeUnit timeUnit) { + this.timeout = timeout; + this.timeUnit = timeUnit; + return this; + } + + public Builder setParams(Map<String, Object> params) { + this.params = params; + return this; + } + + public Builder setHeaders(Map<String, Object> headers) { + this.headers = headers; + return this; + } + + public Builder setHttps(boolean https) { + this.https = https; + return this; + } + + public Builder setJson(String json) { + this.json = json; + return this; + } + + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/CrnThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/CrnThread.java new file mode 100644 index 0000000..1bc3e42 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/CrnThread.java @@ -0,0 +1,11 @@ +package com.zy.acs.wcs.core; + +import com.zy.acs.wcs.core.model.protocol.CrnProtocol; + +public interface CrnThread extends ThreadHandler { + + CrnProtocol getCrnProtocol(); + + void setResetFlag(boolean flag); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/DevpThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/DevpThread.java new file mode 100644 index 0000000..e601983 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/DevpThread.java @@ -0,0 +1,13 @@ +package com.zy.acs.wcs.core; + +import com.zy.acs.wcs.core.model.protocol.StaProtocol; + +import java.util.Map; + +public interface DevpThread extends ThreadHandler { + + Map<Integer, StaProtocol> getStation(); + + void setPakMk(Integer siteId, boolean pakMk); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/MainProcess.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/MainProcess.java new file mode 100644 index 0000000..260194c --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/MainProcess.java @@ -0,0 +1,73 @@ +package com.zy.acs.wcs.core; + +import com.zy.acs.wcs.asrs.service.impl.MainServiceImpl; +import com.zy.acs.wcs.core.properties.SystemProperties; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +/** + * WCS涓绘祦绋� + * Created by vincent on 2020/8/6 + */ +@Data +@Slf4j +@Component +public class MainProcess { + + @Autowired + private MainServiceImpl mainService; + // 鎵�灞炵嚎绋� + private Thread thread; + // 棰戠巼 + private int i = 0; + + /** + * =====>> 寮�濮嬪伐浣� + */ + public void start() { + thread = new Thread(() -> { + while (!Thread.currentThread().isInterrupted()) { + try { + // 闂撮殧 + Thread.sleep(1000); + + // 绯荤粺杩愯鐘舵�佸垽鏂� + if (!SystemProperties.WCS_RUNNING_STATUS.get()) { + continue; + } + + + // 鍏ュ簱 + mainService.generateStoreWrkFile(); + // 鍑哄簱 + mainService.out(); + + + + + // 鍏朵粬 ===>> // 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁� + i++; + if (i > 1) { + mainService.ioConvert(); + i = 0; + } + + + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } + + @PreDestroy + public void shutDown() { + if (thread != null) thread.interrupt(); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ReportThirdScheduler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ReportThirdScheduler.java new file mode 100644 index 0000000..7651b3a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ReportThirdScheduler.java @@ -0,0 +1,48 @@ +package com.zy.acs.wcs.core; + +import com.zy.acs.common.utils.RedisSupport; +import com.zy.acs.wcs.asrs.entity.TaskReport; +import com.zy.acs.wcs.asrs.entity.WrkMast; +import com.zy.acs.wcs.asrs.service.TaskReportService; +import com.zy.acs.wcs.asrs.service.WrkMastService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +public class ReportThirdScheduler { + + private final RedisSupport redis = RedisSupport.defaultRedisSupport; + + + @Autowired + private TaskReportService taskReportService; + + @Autowired + private WrkMastService wrkMastService; + + + // @Scheduled(fixedDelay = 1000) + public void execute() { + List<TaskReport> list = taskReportService.list(); + for (TaskReport taskReport : list) { + report(taskReport); + } + } + + @Transactional + public void report(TaskReport taskReport) { + //TODO 鍘熷厛搴旇璋冪敤鎺ュ彛锛岀幇鍦ㄧ洿鎺ヤ慨鏀规暟鎹� + WrkMast wrkMast = wrkMastService.getById(taskReport.getSeqNum()); + if (wrkMast != null) { + wrkMast.setWrkSts(14L); + wrkMast.setModiTime(new Date()); + wrkMastService.updateById(wrkMast); + } + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ServerBootstrap.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ServerBootstrap.java new file mode 100644 index 0000000..d33f644 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ServerBootstrap.java @@ -0,0 +1,121 @@ +package com.zy.acs.wcs.core; + +import com.zy.acs.wcs.core.cache.MessageQueue; +import com.zy.acs.wcs.core.cache.SlaveConnection; +import com.zy.acs.wcs.core.enums.SlaveType; +import com.zy.acs.wcs.core.model.DevpSlave; +import com.zy.acs.wcs.core.properties.SlaveProperties; +import com.zy.acs.wcs.core.thread.SiemensDevpThread; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +/** + * Created by vincent on 2020/8/4 + */ +@Slf4j +@Component +public class ServerBootstrap { + + @Autowired + private SlaveProperties slaveProperties; + @Autowired + private MainProcess mainProcess; + + + /** + * PostConstruct浼氬湪鍔犺浇servlet鐨勬椂鍊欒繍琛屼竴娆� + * + * @throws InterruptedException + */ + @PostConstruct + @Async + public void init() throws InterruptedException { + log.info("鏍稿績鎺у埗灞傚紑濮嬪垵濮嬪寲..............................................."); + Thread.sleep(2000); + // 鍒濆鍖栨秷鎭槦鍒� + initMq(); + // 鍒濆鍖栦笅浣嶆満绾跨▼ + initThread(); + // 寮�濮嬩富娴佺▼杩涚▼ + mainProcess.start(); + + log.info("鏍稿績鎺у埗灞傚凡鍚姩..............................................."); + } + + private void initMq() { + // 鍒濆鍖栧爢鍨涙満mq +// for (Slave crn : slaveProperties.getCrn()) { +// MessageQueue.init(SlaveType.Crn, crn); +// } + // 鍒濆鍖栬緭閫佺嚎mq + for (Slave devp : slaveProperties.getDevp()) { + MessageQueue.init(SlaveType.Devp, devp); + } +// // 鍒濆鍖栨潯鐮佹壂鎻忎华mq +// for (Slave barcode : slaveProperties.getBarcode()) { +// MessageQueue.init(SlaveType.Barcode, barcode); +// } +// // 鍒濆鍖朙ed鐏痬q +// for (Slave led : slaveProperties.getLed()) { +// MessageQueue.init(SlaveType.Led, led); +// } +// // 鍒濆鍖栫绉癿q +// for (Slave scale : slaveProperties.getScale()) { +// MessageQueue.init(SlaveType.Scale, scale); +// } +// // 鍒濆鍖栧彴杞q +// for (Slave car : slaveProperties.getCar()) { +// MessageQueue.init(SlaveType.Car, car); +// } + } + + private void initThread() { + // 鍒濆鍖栧爢鍨涙満绾跨▼ +// log.info("鍒濆鍖栧爢鍨涙満绾跨▼..................................................."); +// for (CrnSlave crn : slaveProperties.getCrn()) { +// CrnThread crnThread = new SiemensCrnThread(crn); +// new Thread((Runnable) crnThread).start(); +// SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread); +// } + // 鍒濆鍖栬緭閫佺嚎绾跨▼ + log.info("鍒濆鍖栬緭閫佺嚎绾跨▼..................................................."); + for (DevpSlave devp : slaveProperties.getDevp()) { + DevpThread devpThread = new SiemensDevpThread(devp); + new Thread((Runnable) devpThread).start(); + SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); + } + // 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼ +// log.info("鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼..................................................."); +// for (Slave barcode : slaveProperties.getBarcode()) { +// BarcodeThread barcodeThread = new BarcodeThread(barcode); +//// new Thread(barcodeThread).start(); +// SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread); +// } +// // 鍒濆鍖朙ED绾跨▼ +// log.info("鍒濆鍖朙ED绾跨▼..................................................."); +// for (LedSlave led : slaveProperties.getLed()) { +// LedThread ledThread = new LedThread(led); +// new Thread(ledThread).start(); +// SlaveConnection.put(SlaveType.Led, led.getId(), ledThread); +// } +// // 鍒濆鍖栫绉ょ嚎绋� +// log.info("鍒濆鍖栫绉ょ嚎绋�..................................................."); +// for (Slave scale : slaveProperties.getScale()) { +// ScaleThread scaleThread = new ScaleThread(scale); +// new Thread(scaleThread).start(); +// SlaveConnection.put(SlaveType.Scale, scale.getId(), scaleThread); +// } + } + + + @PreDestroy + public void destroy() { + } + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/Slave.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/Slave.java new file mode 100644 index 0000000..d1fc063 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/Slave.java @@ -0,0 +1,17 @@ +package com.zy.acs.wcs.core; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/4 + */ +@Data +public class Slave { + + private Integer id; + + private String ip; + + private Integer port; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ThreadHandler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ThreadHandler.java new file mode 100644 index 0000000..b6d7655 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/ThreadHandler.java @@ -0,0 +1,9 @@ +package com.zy.acs.wcs.core; + +public interface ThreadHandler { + + boolean connect(); + + void close(); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/MessageQueue.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/MessageQueue.java new file mode 100644 index 0000000..11b4da3 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/MessageQueue.java @@ -0,0 +1,153 @@ +package com.zy.acs.wcs.core.cache; + +import com.zy.acs.wcs.core.Slave; +import com.zy.acs.wcs.core.enums.SlaveType; +import com.zy.acs.wcs.core.model.Task; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.LinkedBlockingQueue; + +/** + * 娑堟伅闃熷垪 + * Created by vincent on 2020/8/5 + */ +public class MessageQueue { + + // 鍫嗗灈鏈簃q浜ゆ崲鏈� + private static final Map<Integer, LinkedBlockingQueue<Task>> CRN_EXCHANGE = new ConcurrentHashMap<>(); + // 杈撻�佺嚎mq浜ゆ崲鏈� + private static final Map<Integer, ConcurrentLinkedQueue<Task>> DEVP_EXCHANGE = new ConcurrentHashMap<>(); + // 鏉$爜鎵弿浠猰q浜ゆ崲鏈� + private static final Map<Integer, ConcurrentLinkedQueue<Task>> BARCODE_EXCHANGE = new ConcurrentHashMap<>(); + // Led鐏� mq浜ゆ崲鏈� + private static final Map<Integer, LinkedBlockingQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>(); + // 纾呯Оmq浜ゆ崲鏈� + private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>(); + // 鍙拌溅mq浜ゆ崲鏈� + private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>(); + + /** + * mq 浜ゆ崲鏈哄垵濮嬪寲 + */ + public static void init(SlaveType type, Slave slave) { + switch (type) { + case Crn: + CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); + break; + case Devp: + DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); + break; + case Barcode: + BARCODE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); + break; + case Led: + LED_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); + break; + case Scale: + SCALE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); + break; + case Car: + CAR_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); + break; + default: + break; + } + } + + /** + * 娣诲姞鍏冪礌 + * 濡傛灉鍙戠幇闃熷垪宸叉弧鏃犳硶娣诲姞鐨勮瘽锛屼細鐩存帴杩斿洖false銆� + */ + public static boolean offer(SlaveType type, Integer id, Task task) { + switch (type) { + case Crn: + return CRN_EXCHANGE.get(id).offer(task); + case Devp: + return DEVP_EXCHANGE.get(id).offer(task); + case Barcode: + return BARCODE_EXCHANGE.get(id).offer(task); + case Led: + return LED_EXCHANGE.get(id).offer(task); + case Scale: + return SCALE_EXCHANGE.get(id).offer(task); + case Car: + return CAR_EXCHANGE.get(id).offer(task); + default: + return false; + } + } + + /** + * 绉婚櫎鍏冪礌 + * 鑻ラ槦鍒椾负绌猴紝杩斿洖null銆� + */ + public static Task poll(SlaveType type, Integer id) { + switch (type) { + case Crn: + return CRN_EXCHANGE.get(id).poll(); + case Devp: + return DEVP_EXCHANGE.get(id).poll(); + case Barcode: + return BARCODE_EXCHANGE.get(id).poll(); + case Led: + return LED_EXCHANGE.get(id).poll(); + case Scale: + return SCALE_EXCHANGE.get(id).poll(); + case Car: + return CAR_EXCHANGE.get(id).poll(); + default: + return null; + } + } + + /** + * 鍙栧嚭鍏冪礌锛屽苟涓嶅垹闄�. + */ + public static Task peek(SlaveType type, Integer id) { + switch (type) { + case Crn: + return CRN_EXCHANGE.get(id).peek(); + case Devp: + return DEVP_EXCHANGE.get(id).peek(); + case Barcode: + return BARCODE_EXCHANGE.get(id).peek(); + case Led: + return LED_EXCHANGE.get(id).peek(); + case Scale: + return SCALE_EXCHANGE.get(id).peek(); + case Car: + return CAR_EXCHANGE.get(id).peek(); + default: + return null; + } + } + + public static void clear(SlaveType type, Integer id) { + switch (type) { + case Crn: + + CRN_EXCHANGE.get(id).clear(); + break; + case Devp: + DEVP_EXCHANGE.get(id).clear(); + break; + case Barcode: + BARCODE_EXCHANGE.get(id).clear(); + break; + case Led: + LED_EXCHANGE.get(id).clear(); + break; + case Scale: + SCALE_EXCHANGE.get(id).clear(); + break; + case Car: + CAR_EXCHANGE.get(id).clear(); + break; + default: + break; + } + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/OutputQueue.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/OutputQueue.java new file mode 100644 index 0000000..e09fb39 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/OutputQueue.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.core.cache; + +import com.alibaba.fastjson.JSONObject; + +import java.util.concurrent.ArrayBlockingQueue; + +/** + * Created by vincent on 2020/8/17 + */ +public class OutputQueue { + + // 鍫嗗灈鏈鸿緭鍑烘棩蹇� + public static ArrayBlockingQueue<String> CRN = new ArrayBlockingQueue<>(32); + // 杈撻�佺嚎杈撳嚭鏃ュ織 + public static ArrayBlockingQueue<String> DEVP = new ArrayBlockingQueue<>(32); + // 鏉$爜鍣ㄨ緭鍑烘棩蹇� + public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32); + // 纾呯Г杈撳嚭鏃ュ織 + public static ArrayBlockingQueue<JSONObject> SCALE = new ArrayBlockingQueue<>(32); +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/SlaveConnection.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/SlaveConnection.java new file mode 100644 index 0000000..d62d55f --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/cache/SlaveConnection.java @@ -0,0 +1,63 @@ +package com.zy.acs.wcs.core.cache; + +import com.zy.acs.wcs.core.ThreadHandler; +import com.zy.acs.wcs.core.enums.SlaveType; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 绾跨▼缂撳瓨瀹瑰櫒 + * Created by vincent on 2020/8/4 + */ +public class SlaveConnection { + + private static final String _LINK = "_"; + + private static final Map<String, ThreadHandler> conContain = new ConcurrentHashMap<>(); + + public static void put(SlaveType type, Integer id, ThreadHandler threadHandler) { + String key = toKey(type, id); + remove(type, id); + conContain.put(key, threadHandler); + } + + public static ThreadHandler get(SlaveType type, Integer id) { + return conContain.get(toKey(type, id)); + } + + public static void remove(SlaveType type, Integer id) { + ThreadHandler threadHandler = get(type, id); + if (null == threadHandler) { + return; + } + conContain.remove(toKey(type, id)); + threadHandler.close(); + } + + public static Integer remove(ThreadHandler threadHandler) { + if (null == threadHandler) { + return null; + } + String key = null; + for (Map.Entry<String, ThreadHandler> entry : conContain.entrySet()) { + if (entry.getValue() == threadHandler) { + key = entry.getKey(); + break; + } + } + if (null != key) { + SlaveType type = SlaveType.findInstance(key); + Integer id = Integer.parseInt(key.split(_LINK)[1]); + remove(type, id); + return id; + } else { + return null; + } + } + + private static String toKey(SlaveType type, Integer id) { + return type.toString() + _LINK + id; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandStatusType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandStatusType.java new file mode 100644 index 0000000..3bc08c6 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandStatusType.java @@ -0,0 +1,45 @@ +package com.zy.acs.wcs.core.enums; + +/** + * 鎸囦护绫诲瀷鏋氫妇 + */ +public enum CommandStatusType { + + CREATE(1, "鎸囦护鍒涘缓"), //鍒涘缓 + EXECUTE(2, "鎸囦护鎵ц涓�"), //鎵ц + COMPLETE(3, "鎸囦护瀹屾垚"), //瀹屾垚 + ; + + public Integer id; + public String desc; + + CommandStatusType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CommandStatusType get(Integer id) { + if (null == id) { + return null; + } + for (CommandStatusType type : CommandStatusType.values()) { + if (type.id.equals(id)) { + return type; + } + } + return null; + } + + public static CommandStatusType get(CommandStatusType type) { + if (null == type) { + return null; + } + for (CommandStatusType type1 : CommandStatusType.values()) { + if (type1 == type) { + return type1; + } + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandType.java new file mode 100644 index 0000000..b9b41a2 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CommandType.java @@ -0,0 +1,43 @@ +package com.zy.acs.wcs.core.enums; + +public enum CommandType { + + + AUTO(1, "鑷姩鍛戒护"), //鑷姩鍛戒护 + MANUAL(2, "鎵嬪姩鍛戒护"), //鎵嬪姩鍛戒护 + ; + + public Integer id; + public String desc; + + CommandType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CommandType get(Integer id) { + if (null == id) { + return null; + } + for (CommandType type : CommandType.values()) { + if (type.id.equals(id)) { + return type; + } + } + return null; + } + + public static CommandType get(CommandType type) { + if (null == type) { + return null; + } + for (CommandType type1 : CommandType.values()) { + if (type1 == type) { + return type1; + } + } + return null; + } + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnFingerPosType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnFingerPosType.java new file mode 100644 index 0000000..c699773 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnFingerPosType.java @@ -0,0 +1,42 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnFingerPosType { + + DOWN(2, "涓嬪畾浣�"), // 涓嬪畾浣� + UP(1, "涓婂畾浣�"), // 涓婂畾浣� + NONE(0, "涓嶅湪瀹氫綅"), // 涓嶅湪瀹氫綅 + ; + + public Integer id; + public String desc; + + CrnFingerPosType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CrnFingerPosType get(Short id) { + if (null == id) { + return null; + } + for (CrnFingerPosType type : CrnFingerPosType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnFingerPosType get(CrnFingerPosType type) { + if (null == type) { + return null; + } + for (CrnFingerPosType crnLiftPosType : CrnFingerPosType.values()) { + if (crnLiftPosType == type) { + return crnLiftPosType; + } + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnForkPosType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnForkPosType.java new file mode 100644 index 0000000..33ebc20 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnForkPosType.java @@ -0,0 +1,44 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnForkPosType { + + NONE(-1, "涓嶅湪瀹氫綅"), // 璐у弶鍘熶綅 + HOME(0, "璐у弶鍘熶綅"), // 璐у弶鍘熶綅 + LEFT(1, "璐у弶鍦ㄥ乏渚�"), // 璐у弶鍦ㄥ乏渚� + RIGHT(2, "璐у弶鍦ㄥ彸渚�"), // 璐у弶鍦ㄥ彸渚� + _LEFT(3, "璐у弶鍦ㄥ乏渚ц繙"), // 璐у弶鍦ㄥ彸渚ц繙 + _RIGHT(4, "璐у弶鍦ㄥ彸渚ц繙"), // 璐у弶鍦ㄥ彸渚ц繙 + ; + + public Integer id; + public String desc; + + CrnForkPosType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CrnForkPosType get(Short id) { + if (null == id) { + return null; + } + for (CrnForkPosType type : CrnForkPosType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnForkPosType get(CrnForkPosType type) { + if (null == type) { + return null; + } + for (CrnForkPosType crnForkPosType : CrnForkPosType.values()) { + if (crnForkPosType == type) { + return crnForkPosType; + } + } + return null; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnLiftPosType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnLiftPosType.java new file mode 100644 index 0000000..cfde067 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnLiftPosType.java @@ -0,0 +1,45 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnLiftPosType { + + _DOWN(4, "鍙屼几浣嶄綆浣�"), + _UP(3, "鍙屼几浣嶉珮浣�"), + DOWN(2, "鍗曚几浣嶄綆浣�"), // 涓嬪畾浣� + UP(1, "鍗曚几浣嶉珮浣�"), // 涓婂畾浣� + NONE(0, "涓嶅湪瀹氫綅"), // 涓嶅湪瀹氫綅 + ERROR(-1, "鏈煡"), // 涓嶅湪瀹氫綅 + ; + + public Integer id; + public String desc; + + CrnLiftPosType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CrnLiftPosType get(Short id) { + if (null == id) { + return null; + } + for (CrnLiftPosType type : CrnLiftPosType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnLiftPosType get(CrnLiftPosType type) { + if (null == type) { + return null; + } + for (CrnLiftPosType crnLiftPosType : CrnLiftPosType.values()) { + if (crnLiftPosType == type) { + return crnLiftPosType; + } + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnModeType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnModeType.java new file mode 100644 index 0000000..1a211a2 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnModeType.java @@ -0,0 +1,43 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnModeType { + + NONE(0, "鍏虫満"), + AUTO(3, "鑷姩"), + HALF_AUTO(2, "鍗婅嚜鍔�"), + HAND(1, "鎵嬪姩"), + STOP(4, "缁翠慨"), + ; + + public Integer id; + public String desc; + + CrnModeType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CrnModeType get(Short id) { + if (null == id) { + return null; + } + for (CrnModeType type : CrnModeType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnModeType get(CrnModeType type) { + if (null == type) { + return null; + } + for (CrnModeType crnModeType : CrnModeType.values()) { + if (crnModeType == type) { + return crnModeType; + } + } + return null; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnStatusType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnStatusType.java new file mode 100644 index 0000000..e1b3ea8 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnStatusType.java @@ -0,0 +1,68 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnStatusType { + +// NONE(-1, "绂荤嚎"), +// IDLE(0, "绌洪棽"), +// FETCH_MOVING(1, "鍙栬揣琛岃蛋"), +// FETCH_WAITING(2, "鍙栬揣绛夊緟"), +// FETCHING(3, "鍙栬揣涓�"), +// PUT_MOVING(4, "鏀捐揣璧拌"), +// PUT_WAITING(5, "鏀捐揣绛夊緟"), +// PUTTING(6, "鏀捐揣涓�"), +// ORIGIN_GO(7, "鍥炲師鐐�"), +// ORIGIN_BACK(8, "鍥炲弽鍘熺偣"), +// MOVING(9, "璧拌涓�"), +// WAITING(10, "浠诲姟瀹屾垚绛夊緟WCS纭"), +// PAUSE(11, "浠诲姟鏆傚仠"), +// SOS(99, "鎶ヨ"), +// ; + + IDLE(0, "绌洪棽锛屾棤浠诲姟"), + NONE_MOVING(1, "鍙栬揣瀹氫綅"), + FETCHING(2, "鍙栬揣绛夊緟"), + MOVING(3, "鍙栬揣涓�"), + PUTTING(4, "鏀捐揣璧拌"), + HOMING(5, "鏀捐揣绛夊緟"), + ANTI_ORIGIN(6, "鏀捐揣涓�"), + PUT_COMPLETE(7, "鍥炲師鐐�"), + // MOVE_THE_SHIPPING_LOCATION(8, "绉诲姩鍒版斁璐т綅缃�"), +// PUTTING(9, "鏀捐揣涓�"), + HANDLING_COMPLETED(10, "鎼繍瀹屾垚绛夊緟WCS纭"), + EMPTY_AVOIDANCE(11, "绌鸿浇閬胯"), + SOS(99, "鎶ヨ"), + OTHER(100, "鍏朵粬"), + ; + + public Integer id; + public String desc; + + CrnStatusType(Integer id, String desc) { + this.id = id; + this.desc = desc; + } + + public static CrnStatusType get(Short id) { + if (null == id) { + return null; + } + for (CrnStatusType type : CrnStatusType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnStatusType get(CrnStatusType type) { + if (null == type) { + return null; + } + for (CrnStatusType crnStatusType : CrnStatusType.values()) { + if (crnStatusType == type) { + return crnStatusType; + } + } + return null; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnTaskModeType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnTaskModeType.java new file mode 100644 index 0000000..818e054 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/CrnTaskModeType.java @@ -0,0 +1,44 @@ +package com.zy.acs.wcs.core.enums; + +public enum CrnTaskModeType { + + NONE(0), // 鏃� + PAKIN(1), // 鍏ュ簱 + PAKOUT(2), // 鍑哄簱 + LOC_MOVE(3), // 搴撲綅绉昏浆 + SITE_MOVE(4), // 绔欎綅绉昏浆 + GO_ORIGIN(5), // 鍥炲師鐐� + CLEAR(7), // 娓呴敊 + ; + + public Integer id; + + CrnTaskModeType(Integer id) { + this.id = id; + } + + public static CrnTaskModeType get(Short id) { + if (null == id) { + return null; + } + for (CrnTaskModeType type : CrnTaskModeType.values()) { + if (type.id.equals(id.intValue())) { + return type; + } + } + return null; + } + + public static CrnTaskModeType get(CrnTaskModeType type) { + if (null == type) { + return null; + } + for (CrnTaskModeType crnTaskModeType : CrnTaskModeType.values()) { + if (crnTaskModeType == type) { + return crnTaskModeType; + } + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/IoModeType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/IoModeType.java new file mode 100644 index 0000000..71120c6 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/IoModeType.java @@ -0,0 +1,32 @@ +package com.zy.acs.wcs.core.enums; + +/** + * 鍏ュ嚭搴撴ā寮忔灇涓� + */ +public enum IoModeType { + + NONE((short) 0, "鏈煡"), + PAKIN_BOOTING((short) 1, "鍏ュ簱鍚姩涓�"), + PAKIN_MODE((short) 2, "鍏ュ簱妯″紡"), + PAKOUT_BOOTING((short) 3, "鍑哄簱鍚姩涓�"), + PAKOUT_MODE((short) 4, "鍑哄簱妯″紡"), + ; + + public Short id; + public String desc; + + IoModeType(Short id, String desc) { + this.id = id; + this.desc = desc; + } + + public static IoModeType get(Short id) { + for (IoModeType type : IoModeType.values()) { + if (id.equals(type.id)) { + return type; + } + } + return IoModeType.NONE; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/SlaveType.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/SlaveType.java new file mode 100644 index 0000000..8e372e8 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/enums/SlaveType.java @@ -0,0 +1,21 @@ +package com.zy.acs.wcs.core.enums; + +public enum SlaveType { + + Crn, + Devp, + Barcode, + Led, + Scale, + Car, + ; + + public static SlaveType findInstance(String s) { + for (SlaveType type : SlaveType.values()) { + if (type.toString().equals(s)) { + return type; + } + } + return null; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/CrnSlave.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/CrnSlave.java new file mode 100644 index 0000000..444e0f6 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/CrnSlave.java @@ -0,0 +1,54 @@ +package com.zy.acs.wcs.core.model; + +import com.zy.acs.wcs.core.Slave; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vincent on 2020/8/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class CrnSlave extends Slave { + + private Integer rack; + + private Integer slot; + + private Integer offset; + + private Boolean demo; + + // 鍫嗗灈鏈哄叆搴撶珯鐐� + private List<CrnStn> crnInStn = new ArrayList<>(); + + // 鍫嗗灈鏈哄嚭搴撶珯鐐� + private List<CrnStn> crnOutStn = new ArrayList<>(); + + @Data + public static class CrnStn { + + // 杈撻�佺嚎plc缂栧彿 + private Integer devpPlcId; + + // 鍫嗗灈鏈虹珯鐐圭紪鍙� + private Integer staNo; + + // 鎺� + private Integer row; + + // 鍒� + private Integer bay; + + // 灞� + private Integer lev; + + //閫�鍥炵珯鐐� + private Integer backSta; + + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/DevpSlave.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/DevpSlave.java new file mode 100644 index 0000000..605bd22 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/DevpSlave.java @@ -0,0 +1,50 @@ +package com.zy.acs.wcs.core.model; + +import com.zy.acs.wcs.core.Slave; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * 杈撻�佺嚎閰嶇疆 + * Created by vincent on 2020/8/6 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DevpSlave extends Slave { + + private Integer rack; + + private Integer slot; + + private List<Sta> inSta = new ArrayList<>(); + + private List<Sta> emptyInSta = new ArrayList<>(); + + private List<Sta> outSta = new ArrayList<>(); + + private List<Sta> pickSta = new ArrayList<>(); + + private List<Sta> deviceSta = new ArrayList<>(); + + + @Data + public static class Sta { + + private Integer zoneId; + + private Integer staNo; + + private Integer barcode; + + private Integer scale; + + private Integer backSta; + + private Integer overSta; + + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/LedSlave.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/LedSlave.java new file mode 100644 index 0000000..aa3f9b3 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/LedSlave.java @@ -0,0 +1,24 @@ +package com.zy.acs.wcs.core.model; + +import com.zy.acs.wcs.core.Slave; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * LED閰嶇疆 + * Created by vincent on 2020/8/6 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class LedSlave extends Slave { + + // 杈撻�佺嚎plc缂栧彿 + private Integer devpPlcId; + + // 鍙夎溅绔欑偣鏁扮粍 + private List<Integer> staArr = new ArrayList<>(); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/Task.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/Task.java new file mode 100644 index 0000000..262a6d1 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/Task.java @@ -0,0 +1,22 @@ +package com.zy.acs.wcs.core.model; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/5 + */ +@Data +public class Task { + + private Integer step; + + private Object data; + + public Task() { + } + + public Task(Integer step, Object data) { + this.step = step; + this.data = data; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CommandPackage.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CommandPackage.java new file mode 100644 index 0000000..a44e6a4 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CommandPackage.java @@ -0,0 +1,20 @@ +package com.zy.acs.wcs.core.model.command; + +import lombok.Data; + +/** + * 鎸囦护鏁版嵁鍖� + */ +@Data +public class CommandPackage<T> { + + //宸ヤ綔鍙� + private Integer wrkNo; + + //鎵ц璁惧 + private String device; + + //鎸囦护 + private T command; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CrnCommand.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CrnCommand.java new file mode 100644 index 0000000..3193036 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/CrnCommand.java @@ -0,0 +1,125 @@ +package com.zy.acs.wcs.core.model.command; + +import com.alibaba.fastjson.annotation.JSONField; +import com.zy.acs.wcs.core.enums.CrnTaskModeType; +import lombok.Data; + +import java.util.Calendar; +import java.util.Date; + +/** + * 鍫嗗灈鏈哄懡浠ゆ姤鏂� + * Created by vincent on 2020/8/11 + */ +@Data +public class CrnCommand { + + // 鍫嗗灈鏈哄彿 + private Integer crnNo = 0; + + // 浠诲姟瀹屾垚纭浣� + private Short ackFinish = 0; + + // 浠诲姟鍙� + private Short taskNo = 0; + + /** + * 浠诲姟妯″紡锛� + * 0 = 鏃� + * 1 = 鍏ュ簱 婧愬拰鐩爣閮藉彂 + * 2 = 鍑哄簱 婧愬拰鐩爣閮藉彂 + * 3 = 搴撲綅绉昏浆 婧愬拰鐩爣閮藉彂 + * 4 = 绔欎綅绉昏浆 婧愬拰鐩爣閮藉彂 + * 5 = 鍥炲師鐐� 涓嶇敤鍙� + * 6 = 鍘诲弽鍘熺偣 鐩爣鍙� + * 7 = 鍧愭爣绉昏 鐩爣鍙� + * 90 = 璁剧疆鏃堕棿 + * 99 = 鍙栨秷褰撳墠浠诲姟 + */ + private Short taskMode = 0; + + @JSONField(serialize = false) + private CrnTaskModeType taskModeType; + + // 婧愪綅缃垪鍙� + private Short sourcePosX = 0; + + // 婧愪綅缃眰鍙� + private Short sourcePosY = 0; + + // 婧愪綅缃帓鍙� + private Short sourcePosZ = 0; + + // 婧愮珯 + private Short sourceStaNo = 0; + + // 婧愬贩閬� + private Short sourceLane = 0; + + // 鐩爣浣嶇疆鎺掑彿 + private Short destinationPosX = 0; + + // 鐩爣浣嶇疆鍒楀彿 + private Short destinationPosY = 0; + + // 鐩爣浣嶇疆灞傚彿 + private Short destinationPosZ = 0; + + // 鐩爣绔� + private Short destinationStaNo = 0; + + // 鐩爣宸烽亾 + private Short destinationLane = 0; + + //鑱旀満妯″紡 + private Short auto = 0; + + //鐢宠瀹屾垚浠诲姟 + private Short onlineWrk1 = 0; + //鐢宠鍙栨秷浠诲姟 + private Short onlineWrk2 = 0; + //娓呴櫎鑱旀満浠诲姟 + private Short onlineWrk3 = 0; + //鎭㈠鑱旀満浠诲姟 + private Short onlineWrk4 = 0; + private Short reset = 0; + + // 浠诲姟纭 0锛氭湭纭 1锛氬凡纭 + private Short command = 0; + + //鎸囦护ID + private Integer commandId; + + public static void main(String[] args) { + Date date = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + System.out.println(cal.get(Calendar.YEAR)); + //榛樿浠�0-11 + System.out.println(cal.get(Calendar.MONTH) + 1); + System.out.println(cal.get(Calendar.DATE)); + int hour = cal.get(Calendar.HOUR_OF_DAY); + System.out.println("鏃�"); + System.out.println(hour); + int minute = cal.get(Calendar.MINUTE); + System.out.println("鍒�"); + System.out.println(minute); + int second = cal.get(Calendar.SECOND); + System.out.println("绉�"); + System.out.println(second); + int mm = cal.get(Calendar.DAY_OF_WEEK) - 1; // 鏄熸湡锛�0(鏃�)锝�6(鍏�) + System.out.println("绀兼嫓"); + System.out.println(mm); + } + + public void setTaskMode(Short taskMode) { + this.taskMode = taskMode; + this.taskModeType = CrnTaskModeType.get(taskModeType); + } + + public void setTaskMode(CrnTaskModeType type) { + this.taskModeType = type; + this.taskMode = CrnTaskModeType.get(type).id.shortValue(); + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/LedCommand.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/LedCommand.java new file mode 100644 index 0000000..22f3106 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/command/LedCommand.java @@ -0,0 +1,37 @@ +//package com.zy.acs.wcs.core.model.command; +// +//import com.zy.asrs.entity.CommandInfo; +//import com.zy.common.model.MatDto; +//import lombok.Data; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * led鍛戒护鎶ユ枃 +// * Created by vincent on 2020/8/11 +// */ +//@Data +//public class LedCommand extends Object { +// +// private String title; +// +// private Integer workNo; +// +// private Integer staNo; +// +// private Integer sourceStaNo; +// +// private String locNo; +// +// private String sourceLocNo; +// +// private List<MatDto> matDtos = new ArrayList<>(); +// +// private boolean emptyMk = false; +// +// private Integer ioType; +// +// //鎸囦护淇℃伅 +// private CommandInfo commandInfo; +//} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError1.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError1.java new file mode 100644 index 0000000..9df80fb --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError1.java @@ -0,0 +1,60 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError1 { + + // 閬ユ帶鍣ㄦ�ュ仠 + public boolean remoteStop; + + // 涓绘帶鐩樻�ュ仠 + public boolean mainStop; + + // 鎿嶄綔鐩樻�ュ仠 + public boolean controlStop; + + // X琛岃蛋鍙橀鍣ㄦ晠闅� + public boolean xCoverErr; + + // Y鍗囬檷鍙橀鍣ㄦ晠闅� + public boolean yCoverErr; + + // Z璐у弶鍙橀鍣ㄦ晠闅� + public boolean zCoverErr; + + // 婵�鍏夋晠闅� + public boolean laserErr; + + // 鏉$爜闃呰鍣ㄦ晠闅� + public boolean barcodeErr; + + // X鍓嶆瀬闄� + public boolean xFrontLimitErr; + + // X鍚庢瀬闄� + public boolean xBackLimitErr; + + // Y涓婃瀬闄� + public boolean yUpLimitErr; + + // Y涓嬫瀬闄� + public boolean yDownLimitErr; + + // Z宸︽瀬闄� + public boolean zLeftLimitErr; + + // Z鍙虫瀬闄� + public boolean zRightLimitErr; + + // 宸﹁秴瀹�1 + public boolean leftOverWidthErr1; + + // 宸﹁秴瀹�2 + public boolean leftOverWidthErr2; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError2.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError2.java new file mode 100644 index 0000000..15169a2 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError2.java @@ -0,0 +1,60 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError2 { + + // 宸﹁秴闀�1 + public boolean leftOverLenErr1; + + // 宸﹁秴闀�2 + public boolean leftOverLenErr2; + + // 宸﹁秴楂� + public boolean leftOverHighErr; + + // 鍙宠秴瀹�1 + public boolean rightOverWidthErr1; + + // 鍙宠秴瀹�2 + public boolean rightOverWidthErr2; + + // 鍙宠秴闀�1 + public boolean rightOverLenErr1; + + // 鍙宠秴闀�2 + public boolean rightOverLenErr2; + + // 鍙宠秴楂� + public boolean rightOverHighErr; + + // 宸︽澗缁� + public boolean leftLooseRopeErr; + + // 鍙虫澗缁� + public boolean rightLooseRopeErr; + + // 鍓嶅畨鍏ㄩ棬鏁呴殰 + public boolean frontDoorErr; + + // 鍚庡畨鍏ㄩ棬鏁呴殰 + public boolean backDoorErr; + + // 鍚姩閿欒 + public boolean startupErr; + + // X鍚戝墠瀹氫綅瓒呬笂闄� + public boolean xFrontLocaUpErr; + + // X鍚戝墠瀹氫綅瓒呬笅闄� + public boolean xFrontLocaDownErr; + + // X鍚戝悗瀹氫綅瓒呬笂闄� + public boolean xBackLocaUpErr; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError3.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError3.java new file mode 100644 index 0000000..aa1e21a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError3.java @@ -0,0 +1,60 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError3 { + + // X鍚戝悗瀹氫綅瓒呬笅闄� + public boolean xBackLocaDownErr; + + // Y鍚戜笂瀹氫綅瓒呬笂闄� + public boolean yUpLocaUpErr; + + // Y鍚戜笂瀹氫綅瓒呬笅闄� + public boolean yUpLocaDownErr; + + // Y鍚戜笅瀹氫綅瓒呬笂闄� + public boolean yDownLocaUpErr; + + // Y鍚戜笅瀹氫綅瓒呬笅闄� + public boolean yDownLocaDownErr; + + // Z鍚戝乏瀹氫綅瓒呬笂闄� + public boolean zLeftLocaUpErr; + + // Z鍚戝乏瀹氫綅瓒呬笅闄� + public boolean zLeftLocaDownErr; + + // Z鍚戝彸瀹氫綅瓒呬笂闄� + public boolean zRightLocaUpErr; + + // Z鍚戝彸瀹氫綅瓒呬笅闄� + public boolean zRightLocaDownErr; + + // 宸﹀彇璐ф椂搴撲綅鏃犺揣 + public boolean leftTakeNoneErr; + + // 鍙冲彇璐ф椂搴撲綅鏃犺揣 + public boolean rightTakeNoneErr; + + // 宸﹀彇璐у悗搴撲綅鏈夎揣 + public boolean leftTakeThenLoadErr; + + // 鍙冲彇璐у悗搴撲綅鏈夎揣 + public boolean rightTakeThenLoadErr; + + // 宸︽斁璐ф椂搴撲綅鏈夎揣 + public boolean leftPutAndLoadErr; + + // 鍙冲彇璐у悗搴撲綅鏈夎揣 + public boolean rightPutAndLoadErr; + + // 宸︽斁璐у悗搴撲綅鏃犺揣 + public boolean leftPutThenNoneErr; + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError4.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError4.java new file mode 100644 index 0000000..522a905 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError4.java @@ -0,0 +1,23 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError4 { + + // 鍙虫斁璐у悗搴撲綅鏃犺揣 + public boolean rightPutThenNoneErr; + + // X鏉鹃椄瓒呮椂 + public boolean xLooseBrakeTimeout; + + // Y鏉鹃椄瓒呮椂 + public boolean yLooseBrakeTimeout; + + // Z鏉鹃椄瓒呮椂 + public boolean zLooseBrakeTimeout; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError5.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError5.java new file mode 100644 index 0000000..2ca65d9 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError5.java @@ -0,0 +1,11 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError5 { + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError6.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError6.java new file mode 100644 index 0000000..f23b17e --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnError6.java @@ -0,0 +1,11 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnError6 { + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnProtocol.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnProtocol.java new file mode 100644 index 0000000..f5b32c6 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnProtocol.java @@ -0,0 +1,422 @@ +package com.zy.acs.wcs.core.model.protocol; + +import com.zy.asrs.entity.BasCrnp; +import com.zy.acs.wcs.core.enums.*; +import lombok.Data; + +/** + * Created by vincent on 2020/8/7 + */ +@Data +public class CrnProtocol { + + /** + * 1 = 鎵嬪姩妯″紡 + * 2 = 鑷姩妯″紡 + * 3 = 鐢佃剳妯″紡 + */ + public Short mode; + + public CrnModeType modeType; + + /** + * 鍫嗗灈鏈轰换鍔″畬鎴� + */ + public Short taskFinish; + + /** + * 鏍¢獙缁撴灉 1琛ㄧず妫�楠屾垚鍔� + */ + public Short valid; + + /** + * 1 = 鎬ュ仠 + */ + public Short eStop; + + /** + * 浠诲姟鍙� + */ + public Short taskNo = 0; + + /** + * 鍫嗗灈鏈哄綋鍓嶇姸鎬� + * 0锛氱┖闂诧紝鏃犱换鍔� + * 1锛氬彇璐у畾浣嶄腑 + * 2锛氬彇璐т腑 + * 3锛氬彇璐у畬鎴愶紝鏀捐揣瀹氫綅涓� + * 4锛氭斁璐т腑 + * 5锛氬洖鍘熺偣涓� + * 6锛氬弽鍘熺偣 + * 7锛氬簱浣嶇Щ浣� + * 90锛氫换鍔″畬鎴愮瓑寰匴CS纭 + * 99锛氭姤璀� + */ + public Short status; + + public Short alarm = 0; + + /** + * 鐘舵�佹灇涓� + */ + public CrnStatusType statusType; + + /** + * 鍫嗗灈鏈哄綋鍓嶅垪鍙� + */ + public Short bay; + + /** + * 鍫嗗灈鏈哄綋鍓嶅眰鍙� + */ + public Short level; + + /** + * 鍫嗗灈鏈哄綋鍓嶆帓 + */ + public Short row; + + /** + * 鍫嗗灈鏈哄綋鍓嶅贩閬撳彿 + */ + public Short lane; + + /** + * 鍫嗗灈鏈洪�氳鐘舵�� + */ + public Boolean connStatus; + + /** + * 鐢宠鍏ュ簱淇 + */ + public Boolean correction; + + /** + * 鎵樼洏鍙烽敊 + */ + public Boolean tuError; + + /** + * 鍙栬揣鏃犵 + */ + public Boolean noneError; + + /** + * 鍙岄噸鍏ュ簱 + */ + public Boolean stockError; + + /** + * 浣滀笟鏁版嵁鏃犳晥 + */ + public Boolean jobInvalid; + + /** + * 绌洪棽鐘舵�� + */ + public Boolean idle; + + /** + * 鎺у埗鏌滀娇鑳� + */ + public Boolean control; + + /** + * 鍋滃噯 + */ + public Boolean stopQuasi; + + /** + * 杩愯 + */ + public Boolean running; + + /** + * 鏁呴殰 + */ + public Boolean fault; + + /** + * 璐у弶涓綅 + */ + public Boolean forkHome; + /** + * 鍗曚几浣嶈揣鍙夊乏浣� + */ + public Boolean forkSingleLeft; + /** + * 鍗曚几浣嶈揣鍙夊彸浣� + */ + public Boolean forkSingleRight; + /** + * 鍙屼几浣嶈揣鍙夊乏浣� + */ + public Boolean forkDoubleLeft; + /** + * 鍙屼几浣嶈揣鍙夊彸浣� + */ + public Boolean forkDoubleRight; + /** + * 鍗曚几浣嶉珮浣� + */ + public Boolean singleHigh; + /** + * 鍗曚几浣嶄綆浣� + */ + public Boolean singleLow; + /** + * 鍙屼几浣嶉珮浣� + */ + public Boolean doubleHigh; + /** + * 鍙屼几浣嶄綆浣� + */ + public Boolean doubleLow; + /** + * 绔欏彴楂樹綅 + */ + public Boolean platformHigh; + /** + * 绔欏彴浣庝綅 + */ + public Boolean platformLow; + + /** + * 褰撳墠璐у弶浣嶇疆 + * 0 = 璐у弶鍘熶綅 + * 1 = 璐у弶鍦ㄥ乏渚� + * 2 = 璐у弶鍦ㄥ彸渚� + */ + public Short forkPos = -1; + + public CrnForkPosType forkPosType = CrnForkPosType.NONE; + + /** + * 褰撳墠杞借揣鍙颁綅缃� + * 0 = 涓嬪畾浣� + * 1 = 涓婂畾浣� + */ + public Short liftPos = -1; + + public CrnLiftPosType liftPosType = CrnLiftPosType.ERROR; + + /** + * 璧拌鍦ㄥ畾浣� + * 0 = 鍦ㄥ畾浣� + * 1 = 涓嶅湪瀹氫綅 + */ + public Short walkPos = 0; + + /** + * 鎷ㄦ寚浣嶇疆 + * 0 = 涓嶅湪瀹氫綅 + * 1 = 涓婂畾浣� + * 2 = 涓嬪畾浣� + */ + public Short fingerPos; + + public CrnFingerPosType fingerPosType; + + /** + * 杞借揣鍙版湁鐗� + */ + public Short loaded; + /** + * 鍫嗗灈鏈虹疮璁¤蛋琛岃窛绂籯m + */ + public Float xDistance = 0F; + /** + * 鍫嗗灈鏈虹疮璁″崌闄嶈窛绂籯m + */ + public Float yDistance = 0F; + ; + /** + * 鍫嗗灈鏈虹疮璁¤蛋琛屾椂闀縣 + */ + public Float xDuration = 0F; + ; + /**w + * 鍫嗗灈鏈虹疮璁″崌闄嶆椂闀縣 + */ + public Float yDuration = 0F; + ; + /** + * 鍫嗗灈鏈哄瀭鐩存晠闅滀唬鐮侊紙鏁板�兼樉绀猴級 + */ + private Integer alarm1 = 0; + /** + * 鍫嗗灈鏈烘按骞虫晠闅滀唬鐮侊紙鏁板�兼樉绀猴級 + */ + private Integer alarm2 = 0; + /** + * 鍫嗗灈鏈鸿揣鍙夋晠闅滀唬鐮侊紙鏁板�兼樉绀猴級 + */ + private Integer alarm3 = 0; + /** + * 鍫嗗灈鏈虹姸鎬佹晠闅滀唬鐮侊紙鏁板�兼樉绀猴級 + */ + private Integer alarm4 = 0; + /** + * 寮傚父1 + */ + private boolean[] error1; + private CrnError1 crnError1; + /** + * 寮傚父2 + */ + private boolean[] error2; + private CrnError2 crnError2; + /** + * 寮傚父3 + */ + private boolean[] error3; + private CrnError3 crnError3; + /** + * 寮傚父4 + */ + private boolean[] error4; + private CrnError4 crnError4; + /** + * X琛岃蛋绾块�熷害m/min + */ + private Float xSpeed = 0F; + /** + * Y琛岃蛋绾块�熷害m/min + */ + private Float ySpeed = 0F; + /** + * Z琛岃蛋绾块�熷害m/min + */ + private Float zSpeed = 0F; + //鎸囦护ID + private Integer commandId; + /** + * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷 + * I:鍏ュ簱 + * O:鍑哄簱 + */ + private String lastIo = "I"; + + public void setMode(Short mode) { + this.mode = mode; + this.modeType = CrnModeType.get(mode); + } + + public void setMode(CrnModeType type) { + this.modeType = type; + this.mode = CrnModeType.get(type).id.shortValue(); + } + + public void setForkPos(Short forkPos) { + this.forkPos = forkPos; + this.forkPosType = CrnForkPosType.get(forkPos); + } + + public void setForkPos(CrnForkPosType type) { + this.forkPosType = type; + this.forkPos = CrnForkPosType.get(type).id.shortValue(); + } + + public void setLiftPos(Short liftPos) { + this.liftPos = liftPos; + this.liftPosType = CrnLiftPosType.get(liftPos); + } + + public void setLiftPos(CrnLiftPosType type) { + this.liftPosType = type; + this.liftPos = CrnLiftPosType.get(type).id.shortValue(); + } + + public void setStatus(Short status) { + this.status = status; + this.statusType = CrnStatusType.get(status); + } + + public void setStatus(CrnStatusType type) { + this.statusType = type; + this.status = CrnStatusType.get(type).id.shortValue(); + } + + public void setFingerPos(Short type) { + this.fingerPos = type; + this.fingerPosType = CrnFingerPosType.get(type); + } + + public void setError1(boolean[] error1) { + this.error1 = error1; + this.crnError1 = new CrnError1(); + this.crnError1.remoteStop = error1[0]; + this.crnError1.mainStop = error1[1]; + this.crnError1.controlStop = error1[2]; + this.crnError1.xCoverErr = error1[3]; + this.crnError1.yCoverErr = error1[4]; + this.crnError1.zCoverErr = error1[5]; + this.crnError1.laserErr = error1[6]; + this.crnError1.barcodeErr = error1[7]; + this.crnError1.xFrontLimitErr = error1[8]; + this.crnError1.xBackLimitErr = error1[9]; + this.crnError1.yUpLimitErr = error1[10]; + this.crnError1.yDownLimitErr = error1[11]; + this.crnError1.zLeftLimitErr = error1[12]; + this.crnError1.zRightLimitErr = error1[13]; + this.crnError1.leftOverWidthErr1 = error1[14]; + this.crnError1.leftOverWidthErr2 = error1[15]; + } + + public void setError2(boolean[] error2) { + this.error2 = error2; + this.crnError2 = new CrnError2(); + this.crnError2.leftOverLenErr1 = error2[0]; + this.crnError2.leftOverLenErr2 = error2[1]; + this.crnError2.leftOverHighErr = error2[2]; + this.crnError2.rightOverWidthErr1 = error2[3]; + this.crnError2.rightOverWidthErr2 = error2[4]; + this.crnError2.rightOverLenErr1 = error2[5]; + this.crnError2.rightOverLenErr2 = error2[6]; + this.crnError2.rightOverHighErr = error2[7]; + this.crnError2.leftLooseRopeErr = error2[8]; + this.crnError2.rightLooseRopeErr = error2[9]; + this.crnError2.frontDoorErr = error2[10]; + this.crnError2.backDoorErr = error2[11]; + this.crnError2.startupErr = error2[12]; + this.crnError2.xFrontLocaUpErr = error2[13]; + this.crnError2.xFrontLocaDownErr = error2[14]; + this.crnError2.xBackLocaUpErr = error2[15]; + } + + public void setError3(boolean[] error3) { + this.error3 = error3; + this.crnError3 = new CrnError3(); + this.crnError3.xBackLocaDownErr = error3[0]; + this.crnError3.yUpLocaUpErr = error3[1]; + this.crnError3.yUpLocaDownErr = error3[2]; + this.crnError3.yDownLocaUpErr = error3[3]; + this.crnError3.yDownLocaDownErr = error3[4]; + this.crnError3.zLeftLocaUpErr = error3[5]; + this.crnError3.zLeftLocaDownErr = error3[6]; + this.crnError3.zRightLocaUpErr = error3[7]; + this.crnError3.zRightLocaDownErr = error3[8]; + this.crnError3.leftTakeNoneErr = error3[9]; + this.crnError3.rightTakeNoneErr = error3[10]; + this.crnError3.leftTakeThenLoadErr = error3[11]; + this.crnError3.rightTakeThenLoadErr = error3[12]; + this.crnError3.leftPutAndLoadErr = error3[13]; + this.crnError3.rightPutAndLoadErr = error3[14]; + this.crnError3.leftPutThenNoneErr = error3[15]; + } + + public void setError4(boolean[] error4) { + this.error4 = error4; + this.crnError4 = new CrnError4(); + this.crnError4.rightPutThenNoneErr = error4[0]; + this.crnError4.xLooseBrakeTimeout = error4[1]; + this.crnError4.yLooseBrakeTimeout = error4[2]; + this.crnError4.zLooseBrakeTimeout = error4[3]; + } + + public BasCrnp toSqlModel(BasCrnp basCrnp) { + basCrnp.setCrnErr(alarm.longValue()); + basCrnp.setWrkNo(taskNo.intValue()); + return basCrnp; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnTemp1.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnTemp1.java new file mode 100644 index 0000000..1c4c7cd --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/CrnTemp1.java @@ -0,0 +1,47 @@ +package com.zy.acs.wcs.core.model.protocol; + +import lombok.Data; + +/** + * Created by vincent on 2020/8/17 + */ +@Data +public class CrnTemp1 { + + // 鍗囬檷闄愪綅寮�鍏宠Е鍙� + public boolean liftLimitSwitchErr; + + // 琛岃蛋鍒跺姩搴忓垪寮傚父 + public boolean liftBrakeErr; + + // 琛岃蛋娴嬭窛鍣ㄦ晠闅� + public boolean liftDiastimeterFau; + + // 鎬ュ仠 + public boolean stop; + + // 鐩稿簭鎶ヨ + public boolean warn; + + // 瓒呴珮 + public boolean overHighErr; + + // 宸﹁秴瀹� + public boolean leftOverWidthErr; + + // 鍙宠秴瀹� + public boolean rightOverWidthErr; + + // 宸﹁秴闀� + public boolean leftOverLenErr; + + // 鍙宠秴闀� + public boolean rightOverLenErr; + + // 鏈夌墿鍏� + public boolean pakinThenLoadedErr; + + // 鏃犵墿鍑� + public boolean pakOutThenNoneErr; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/StaProtocol.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/StaProtocol.java new file mode 100644 index 0000000..e16d548 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/model/protocol/StaProtocol.java @@ -0,0 +1,218 @@ +package com.zy.acs.wcs.core.model.protocol; + +import com.zy.asrs.entity.BasDevp; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 杈撻�佺嚎plc鍗曚釜绔欑偣璇︾粏淇℃伅 + * Created by vincent on 2020/8/6 + */ +@Data +public class StaProtocol implements Cloneable { + + // 绔欑偣缂栧彿 + private Integer siteId; + + // ---------------------------------------------------------------- + // 宸ヤ綔鍙� + private Short workNo = 0; + + // ---------------------------------------------------------------- + // 鐩爣绔� + private Short staNo; + + // ---------------------------------------------------------------- + // 鑷姩 + private boolean autoing; + + // 鏈夌墿 + private boolean loading; + + // 鍙叆 + private boolean inEnable; + + // 鍙嚭 + private boolean outEnable; + + // 绌烘澘淇″彿 + private boolean emptyMk; + + // 婊℃墭鐩� + private boolean fullPlt; + + // 楂� + private boolean high = false; + + // 浣� + private boolean low; + + //agv + private boolean car; + + // 閿佸畾鏍囪 + private boolean pakMk = true; + + // 鍏ュ簱鏆傚瓨鏁� + private Short inQty; + + // 闅斿绔欑偣锛堝彴杞︿綅缃級 + private String nearbySta; + + //鎸囦护ID + private Integer commandId; + + // 鐗╂枡鍙峰垪琛� + private List<String> matIdList; + + // 楂樺害 + private String height; + + // 澶栧舰妫�娴� ------------------------------------------------------------------------ + + // 鍓嶈秴闄� + private boolean frontErr = false; + + // 鍚庤秴闄� + private boolean backErr = false; + + // 楂樿秴闄� + private boolean highErr = false; + + // 宸﹁秴闄� + private boolean leftErr = false; + + // 鍙宠秴闄� + private boolean rightErr = false; + + // 瓒呴噸 + private boolean weightErr = false; + + // 鎵爜澶辫触 + private boolean barcodeErr = false; + + //鏁呴殰----------------------------------------------------------------------- + private Boolean breakerErr = false; //鏂矾鍣ㄦ晠闅� + + private Boolean infraredErr = false; //鍏夌數寮傚父 + + private Boolean outTimeErr = false; //杩愯瓒呮椂 + + private Boolean seizeSeatErr = false; //鍗犱綅瓒呮椂 + + private Boolean wrkYgoodsN = false;//鏈変换鍔℃棤璐ф晠闅� + + private Boolean inverterErr = false; //鍙橀鍣ㄦ晠闅� + + private Boolean contactErr = false; //鐢垫満鎺ヨЕ鍣ㄦ晠闅� + + private Boolean upcontactErr = false; //椤跺崌鐢垫満鎺ヨЕ鍣ㄦ晠闅� + + + private Short agvStartPick; //鍏佽鍙栬揣 + private Short agvStartPlace; //鍏佽鏀捐揣 + private Short agvTypeSign; //鍏佽鏀捐揣 + + private Short agvTargetPick; //鍙栬揣瀹屾垚 + private Short agvTargetPlace; //鏀捐揣瀹屾垚 + private Short agvTypeSignEnd; //鏀捐揣瀹屾垚 + + private List<Integer> alarm; + + + public List<Integer> getAlarm() { + List<Integer> alarm = new ArrayList<>(); + if (breakerErr) { + alarm.add(1); + } + if (infraredErr) { + alarm.add(2); + } + if (outTimeErr) { + alarm.add(3); + } + if (seizeSeatErr) { + alarm.add(4); + } + if (wrkYgoodsN) { + alarm.add(5); + } + if (inverterErr) { + alarm.add(6); + } + if (contactErr) { + alarm.add(7); + } + if (upcontactErr) { + alarm.add(8); + } + return alarm; + } + + + public BasDevp toSqlModel() { + BasDevp basDevp = new BasDevp(); + basDevp.setDevNo(siteId); + basDevp.setWrkNo(workNo.intValue()); + basDevp.setAutoing(autoing ? "Y" : "N"); + basDevp.setLoading(loading ? "Y" : "N"); + if (frontErr) { + basDevp.setStaErr(11); + } else if (backErr) { + basDevp.setStaErr(12); + } else if (highErr) { + basDevp.setStaErr(13); + } else if (leftErr) { + basDevp.setStaErr(14); + } else if (rightErr) { + basDevp.setStaErr(15); + } else if (weightErr) { + basDevp.setStaErr(16); + } else if (barcodeErr) { + basDevp.setStaErr(17); + } else if (breakerErr) { + basDevp.setStaErr(18); + } else if (infraredErr) { + basDevp.setStaErr(19); + } else if (outTimeErr) { + basDevp.setStaErr(110); + } else if (seizeSeatErr) { + basDevp.setStaErr(111); + } else if (wrkYgoodsN) { + basDevp.setStaErr(112); + } else if (inverterErr) { + basDevp.setStaErr(113); + } else if (contactErr) { + basDevp.setStaErr(114); + } else if (upcontactErr) { + basDevp.setStaErr(115); + } else { + if (!loading) { + basDevp.setStaErr(0); + } + } + basDevp.setInEnable(inEnable ? "Y" : "N"); + basDevp.setOutEnable(outEnable ? "Y" : "N"); + basDevp.setLocType1((short) 0); // 楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿 + basDevp.setLocType2((short) 0); // 瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿 + basDevp.setLocType3((short) 0); // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿 + basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2); + basDevp.setInQty(inQty != null ? (int) inQty : 0); +// basDevp.setAgvStartPick(agvStartPick.intValue()); +// basDevp.setAgvStartPlace(agvStartPlace.intValue()); + return basDevp; + } + + @Override + public StaProtocol clone() { + try { + return (StaProtocol) super.clone(); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/AbstractInboundHandler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/AbstractInboundHandler.java new file mode 100644 index 0000000..f4eceec --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/AbstractInboundHandler.java @@ -0,0 +1,34 @@ +package com.zy.acs.wcs.core.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.util.ReferenceCountUtil; + +/** + * netty handler澧炲己鍣� + * 璁捐妯″紡: 閫傞厤鍣ㄦā寮� + * Created by vincent on 2019-04-02 + */ +public abstract class AbstractInboundHandler<T> extends ChannelInboundHandlerAdapter { + + @Override + public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception { + @SuppressWarnings("unchecked") + T t = (T) obj; + if (channelRead0(ctx, t)) { + ctx.fireChannelRead(t); + } else { + // 绠¢亾涓柇锛宖ireChannelRead鏈墽琛岋紝闇�瑕佹墜鍔ㄩ噴鏀惧爢澶栧唴瀛� + if (obj instanceof ByteBuf) { + ReferenceCountUtil.release(obj); + } +// if (obj instanceof GBPackage){ +// GBPackage pac = (GBPackage) obj; +// ReferenceCountUtil.release(pac.getSourceBuff()); +// } + } + } + + protected abstract boolean channelRead0(ChannelHandlerContext ctx, T t) throws Exception; +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/HandlerInitializer.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/HandlerInitializer.java new file mode 100644 index 0000000..237110d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/HandlerInitializer.java @@ -0,0 +1,77 @@ +package com.zy.acs.wcs.core.netty; + +import com.core.common.SnowflakeIdWorker; +import com.zy.acs.wcs.core.netty.cache.ChannelAttrKey; +import com.zy.acs.wcs.core.netty.handle.PackageServerHandler; +import com.zy.acs.wcs.core.netty.handle.ProtectorHandler; +import com.zy.acs.wcs.core.netty.handle.ProtocolDecoder; +import com.zy.acs.wcs.core.netty.handle.ProtocolEncoder; +import com.zy.acs.wcs.core.netty.properties.TcpProperties; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInitializer; +import io.netty.handler.timeout.IdleStateHandler; +import io.netty.util.Attribute; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + + +/** + * handler绠¢亾 + * 鎺у埗鎵�鏈塶etty handler娴佸悜 + * 寰呭畬鎴�: 鍔ㄦ�佺鐞唄andler + * Created by vincent on 2019-04-02 + */ +@Component +@ChannelHandler.Sharable +public class HandlerInitializer extends ChannelInitializer<Channel> { + + @Autowired + private SnowflakeIdWorker snowflakeIdWorker; + @Autowired + private TcpProperties tcpProperties; + @Autowired + private ProtocolEncoder protocolEncoder; + @Autowired + private PackageServerHandler packageServerHandler; + @Autowired + private ProtectorHandler protectorHandler; + + /** + * Set some channel handlers on channel pipeline + */ + @Override + protected void initChannel(Channel channel) { + channel.pipeline() + // 蹇冭烦 + .addLast(new IdleStateHandler(tcpProperties.getHeartSeconds(), 0, 0)) + // 缂栫爜鍣� + .addLast(protocolEncoder) + // 瑙g爜鍣� + .addLast(new ProtocolDecoder(snowflakeIdWorker)) + // 鏍¢獙鐮佸鐞嗗櫒 +// .addLast(validateHandler) + // 璁よ瘉澶勭悊鍣� +// .addLast(vehAuthHandler) + // 涓氬姟澶勭悊鍣� + .addLast(packageServerHandler) + // 閫氶亾淇濇姢鍣� + .addLast(protectorHandler); + + // Channel灞�閮ㄥ彉閲忥紝鐩稿綋浜庣嚎绋嬬殑ThreadLocal +// initAttrTrack(channel); + } + + /** + * Init channel attr track + */ + private void initAttrTrack(Channel channel) { + Attribute<Map<String, Object>> coolTrackAttr = channel.attr(ChannelAttrKey.DATA_MAP_ATTR); + Map<String, Object> trackMap = new HashMap<>(); + coolTrackAttr.setIfAbsent(trackMap); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/OnlineServer.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/OnlineServer.java new file mode 100644 index 0000000..44aeced --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/OnlineServer.java @@ -0,0 +1,92 @@ +package com.zy.acs.wcs.core.netty; + + +import com.zy.acs.wcs.core.netty.properties.TcpProperties; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.util.ResourceLeakDetector; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +/** + * TCP/IP鍗忚绔彛 + * Netty Server 寮曞绫� + * @author Vincent + */ +@Slf4j +@Component +public class OnlineServer { + + private final HandlerInitializer handlerInitializer; + private final TcpProperties tcpProperties; + private Channel channel; + private ServerBootstrap bootstrap; + private EventLoopGroup bossGroup; + private EventLoopGroup workerGroup; + + { + bootstrap = new ServerBootstrap(); + bossGroup = new NioEventLoopGroup(1); + workerGroup = new NioEventLoopGroup(); + } + + @Autowired + public OnlineServer(TcpProperties tcpProperties, HandlerInitializer handlerInitializer) { + ; + this.tcpProperties = tcpProperties; + this.handlerInitializer = handlerInitializer; + } + + /** + * tcp server init + */ + @PostConstruct + public void serverStart() throws Exception { + // 寮�鍚ぇ绔ā寮� +// CStruct.reverse = false; + + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(handlerInitializer) + .option(ChannelOption.SO_BACKLOG, tcpProperties.getBacklog()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.SO_KEEPALIVE, tcpProperties.isKeepAlive()) + .childOption(ChannelOption.SO_SNDBUF, tcpProperties.getSndbuf()) + .childOption(ChannelOption.SO_RCVBUF, tcpProperties.getRcvbuf()); + + ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.ADVANCED); + + log.info("TCP server started successfully, port锛歿}", tcpProperties.getPort()); + + channel = bootstrap.bind(tcpProperties.getPort()).sync().channel(); + } + + + /** + * tcp server stop + */ + @PreDestroy + public void destroy() { + if (channel != null && channel.isActive()) { + channel.close(); + } + if (bossGroup != null) { + bossGroup.shutdownGracefully(); + } + if (workerGroup != null) { + workerGroup.shutdownGracefully(); + } + log.info("TCP server stopped successfully, port: {}", tcpProperties.getPort()); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelAttrKey.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelAttrKey.java new file mode 100644 index 0000000..d2b93c0 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelAttrKey.java @@ -0,0 +1,18 @@ +package com.zy.acs.wcs.core.netty.cache; + + +import io.netty.util.AttributeKey; + +import java.util.Map; + +/** + * Channel灞�閮ㄥ彉閲忕紦瀛� ==>> 绾跨▼瀹夊叏 + * Created by vincent on 2019-04-02 + */ +public final class ChannelAttrKey { + + private static String CHANNEL_ATTR_KEY_VC_TRACK = "channel.attr.vc.track"; + + public static AttributeKey<Map<String, Object>> DATA_MAP_ATTR = AttributeKey.newInstance(CHANNEL_ATTR_KEY_VC_TRACK); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelCache.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelCache.java new file mode 100644 index 0000000..2d51c46 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/cache/ChannelCache.java @@ -0,0 +1,62 @@ +package com.zy.acs.wcs.core.netty.cache; + +import io.netty.channel.Channel; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Channel缂撳瓨 ==>> { + * key: uuid + * value: Channel + * } + * Created by vincent on 2019-04-02 + */ +@Slf4j +@RestController +public class ChannelCache { + + private static Map<String, Channel> channelGroup = new ConcurrentHashMap<>(); + + public static void setChannel(String uuid, Channel channel) { + // todo 缂撳瓨鏍囪 ===>> 鍒嗗竷寮忕郴缁� +// String hostName = SystemProperties.HOST_NAME; + if (getChannel(uuid) == channel) { + return; + } + removeChannel(uuid); + channelGroup.put(uuid, channel); + } + + public static Channel getChannel(String uuid) { + return channelGroup.get(uuid); + } + + public static void removeChannel(String uuid) { + Channel channel = getChannel(uuid); + if (null == channel) { + return; + } + channelGroup.remove(uuid); + channel.close(); + } + + public static String removeChannel(Channel channel) { + String key = null; + for (Map.Entry<String, Channel> entry : channelGroup.entrySet()) { + if (entry.getValue() == channel) { + key = entry.getKey(); + break; + } + } + if (null != key) { + channelGroup.remove(key); + return key; + } + return null; + } + + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/constant/Constant.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/constant/Constant.java new file mode 100644 index 0000000..309f4ad --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/constant/Constant.java @@ -0,0 +1,15 @@ +package com.zy.acs.wcs.core.netty.constant; + +import java.nio.charset.Charset; + +/** + * 閰嶇疆甯搁噺 + * Created by vincent on 2019-04-03 + */ +public class Constant { + + public static final String SYMBOL = "##"; + + public static final Charset CHARSET_GBK = Charset.forName("GBK"); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/domain/ChPackage.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/domain/ChPackage.java new file mode 100644 index 0000000..f7faa48 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/domain/ChPackage.java @@ -0,0 +1,72 @@ +package com.zy.acs.wcs.core.netty.domain; + +import io.netty.buffer.ByteBuf; +import lombok.Data; + +/** + * 鎶ユ枃妯″瀷 + * Created by vincent on 2019-04-03 + */ +@Data +public class ChPackage { + + /** + * 鍞竴缂栫爜 + */ + private String uuid; + + /** + * 婧愭暟鎹寘缂撳啿鍖�(寮曠敤) + */ + private ByteBuf sourceBuff; + + /** + * 鍘熷娑堟伅瀵瑰簲鐨�16杩涘埗瀛楃涓� + */ + private String sourceHexStr; + + /** + * 璇锋眰浣� + */ + private ByteBuf content; + + private byte[] bytes; + + private String ascii; + + private String ip; + + /** + * 娑堟伅鐨勬牎姝g爜 + */ + private byte validCode; + + /** + * 鏄惁涓烘牎楠屽紓甯稿寘 + */ + private boolean errorPac; + + public static ChPackage valueOfEmpty(String uuid, String ip) { + ChPackage chPackage = new ChPackage(); + chPackage.setUuid(uuid); + chPackage.setIp(ip); + return chPackage; + } + +// public ByteBuf convert(ByteBuf byteBuf){ +// byteBuf.writeBytes(this.getHeader().getStartSymbol().getBytes(Constant.CHARSET_GBK)) +// .writeByte(this.getHeader().getCommandMark().getCode()) +// .writeByte(this.getHeader().getAckMark().getCode()) +// .writeBytes(this.getHeader().getUniqueNo().getBytes()) +// .writeByte(this.getHeader().getEncryptType().getCode()) +// .writeShort(this.getHeader().getContentLength()) +// .writeBytes(this.getBody().getContent()) +// .writeByte(this.getValidCode()); +// // 璁$畻骞惰缃牎楠岀爜 +// this.setValidCode(ValidUtil.caculateValidByteFromBuff(byteBuf)); +// byteBuf.resetReaderIndex(); +// byteBuf.writerIndex(byteBuf.readableBytes() - 1).writeByte(this.getValidCode()); +// return byteBuf; +// } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/PackageServerHandler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/PackageServerHandler.java new file mode 100644 index 0000000..6530556 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/PackageServerHandler.java @@ -0,0 +1,62 @@ +package com.zy.acs.wcs.core.netty.handle; + +import com.zy.acs.wcs.core.netty.AbstractInboundHandler; +import com.zy.acs.wcs.core.netty.cache.ChannelCache; +import com.zy.acs.wcs.core.netty.domain.ChPackage; +import com.zy.acs.wcs.core.netty.properties.TcpProperties; +import com.zy.acs.wcs.core.properties.SlaveProperties; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 鍥芥爣涓氬姟澶勭悊handler + * Created by vincent on 2019-04-02 + */ +@Slf4j +@Component +@ChannelHandler.Sharable +public class PackageServerHandler extends AbstractInboundHandler<ChPackage> { + + @Autowired + private SlaveProperties slaveProperties; + @Autowired + private TcpProperties tcpProperties; + + /** + * 鏁版嵁涓嬭 + */ + public static void write(ChPackage chPackage) { + String uuid = chPackage.getUuid(); + Channel channel = ChannelCache.getChannel(uuid); + if (null == channel) { + log.warn("閫氶亾uuid={} 涓嶅湪绾�", uuid); + return; + } + channel.writeAndFlush(chPackage); + } + + @Override + protected boolean channelRead0(ChannelHandlerContext ctx, ChPackage pac) { +// log.info("璇荤爜鍣ㄣ�怚P:{}銆� 涓婅鏁版嵁 ===>> {}", pac.getIp(), pac.getAscii()); +// //鎵爜涓婁紶鏁版嵁鏍煎紡蹇呴』2涓�#寮�澶达紝濡�:##12345678 +// String msg = pac.getAscii().replaceAll("#", ""); +// if(!Cools.isEmpty(msg) && msg.length()>=tcpProperties.getBarcodeLen()){ +// msg = msg.substring(0,tcpProperties.getBarcodeLen()); +// +// for (Slave slave : slaveProperties.getBarcode()) { +// if (slave.getIp().equals(pac.getIp())) { +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, slave.getId()); +// if (barcodeThread == null) { continue; } +// barcodeThread.setBarcode(msg); +// break; +// } +// } +// } + + return true; + } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtectorHandler.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtectorHandler.java new file mode 100644 index 0000000..f49137d --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtectorHandler.java @@ -0,0 +1,69 @@ +package com.zy.acs.wcs.core.netty.handle; + +import com.core.common.Cools; +import com.zy.acs.wcs.core.netty.AbstractInboundHandler; +import com.zy.acs.wcs.core.netty.cache.ChannelCache; +import com.zy.acs.wcs.core.netty.domain.ChPackage; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 閫氶亾缁存姢handler + * Created by vincent on 2019-04-11 + */ +@Slf4j +@Component("protectorHandler") +@ChannelHandler.Sharable +public class ProtectorHandler extends AbstractInboundHandler<ChPackage> { + + @Override + protected boolean channelRead0(ChannelHandlerContext ctx, ChPackage pac) throws Exception { + // jvm鍫嗗鍐呭瓨闇�瑕佹墜鍔ㄩ噴鏀� +// ReferenceCountUtil.release(pac.getSourceBuff()); + return true; + } + + /** + * 绌洪棽鍓旈櫎 + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof IdleStateEvent) { + IdleStateEvent e = (IdleStateEvent) evt; + if (IdleState.READER_IDLE == e.state()) { + String uuid = ChannelCache.removeChannel(ctx.channel()); + ctx.close(); + if (!Cools.isEmpty(uuid)) { + log.info("uuid={} 绌洪棽鍓旈櫎", uuid); + } + } + } + } + + /** + * 鏂紑杩炴帴 + */ + @Override + public void channelInactive(ChannelHandlerContext ctx) { + String uuid = ChannelCache.removeChannel(ctx.channel()); + ctx.close(); + if (!Cools.isEmpty(uuid)) { + log.info("閫氶亾 uuid={} 澶卞幓杩炴帴", uuid); + } + } + + /** + * 绠¢亾寮傚父 + */ + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ChannelCache.removeChannel(ctx.channel()); + ctx.close(); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolDecoder.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolDecoder.java new file mode 100644 index 0000000..2cc96cf --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolDecoder.java @@ -0,0 +1,113 @@ +package com.zy.acs.wcs.core.netty.handle; + +import com.core.common.SnowflakeIdWorker; +import com.zy.acs.wcs.core.netty.constant.Constant; +import com.zy.acs.wcs.core.netty.domain.ChPackage; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * Created by vincent on 2019-04-10 + */ +public class ProtocolDecoder extends ByteToMessageDecoder { + + private final SnowflakeIdWorker snowflakeIdWorker; + + public ProtocolDecoder(SnowflakeIdWorker snowflakeIdWorker) { + this.snowflakeIdWorker = snowflakeIdWorker; + } + + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> list) throws Exception { + int startMark = indexOfStartMark(in); + if (startMark == -1) { + return; + } + // 鍘婚櫎鏃犵敤鍓嶇紑鎶ユ枃 + if (startMark != 0) { + in.readerIndex(startMark); + in.discardReadBytes(); + } + // 鐢熸垚鍜屽垵濮嬪寲娑堟伅鍖呰绫� + + String ip = ((InetSocketAddress) ctx.channel().remoteAddress()).getAddress().getHostAddress(); + ChPackage pac = ChPackage.valueOfEmpty(String.valueOf(snowflakeIdWorker.nextId()), ip); + + pac.setSourceBuff(in); + + // 瑙f瀽 + list.add(analyzeProtocol(pac)); + } + + public ChPackage analyzeProtocol(ChPackage pac) { + + ByteBuf byteBuf = pac.getSourceBuff(); + + // 澶囦唤缂撳啿鍖� + ByteBuf body = byteBuf.duplicate(); + if (null != body && body.readableBytes() >= 0) { + pac.setContent(body); + } else { + return null; + } + + // 瀛楄妭鏁扮粍 + body.resetReaderIndex(); + byte[] bytes = new byte[body.readableBytes()]; + body.readBytes(bytes); + body.resetReaderIndex(); + pac.setBytes(bytes); + + // ascii + if (bytes.length > 0) { + pac.setAscii(new String(pac.getBytes(), StandardCharsets.US_ASCII)); + } + + // 澶囦唤瀛楃涓� + if (null != pac.getSourceBuff() && null == pac.getSourceHexStr()) { + pac.getSourceBuff().resetReaderIndex(); + pac.setSourceHexStr(ByteBufUtil.hexDump(pac.getSourceBuff())); + pac.getSourceBuff().resetReaderIndex(); + } + + byteBuf.skipBytes(byteBuf.readableBytes()); +// pac.getSourceBuff().readByte(); + + return pac; + } + + // 鑾峰彇鏍囪瘑浣嶄笅鏍� + private int indexOfStartMark(ByteBuf inputBuffer) { + int length = inputBuffer.writerIndex(); + // 鎶ユ枃闀垮害鑷冲皯澶т簬2 + if (length < 2) { + return -1; + } + int readerIndex = inputBuffer.readerIndex(); + for (int i = readerIndex; i < length - 1; i++) { + byte b1 = inputBuffer.getByte(i); + // "#" = b1 + if (0x23 == b1) { + // "#" = b2 + if (i + 1 <= length && 0x23 == inputBuffer.getByte(i + 1)) { + return i; + } + } + } + return -1; + } + + private String byte2Str(ByteBuf buf, int len) { + byte[] bytes = new byte[len]; + buf.readBytes(bytes); + return new String(bytes, Constant.CHARSET_GBK); + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolEncoder.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolEncoder.java new file mode 100644 index 0000000..06d14fc --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/handle/ProtocolEncoder.java @@ -0,0 +1,51 @@ +package com.zy.acs.wcs.core.netty.handle; + +import com.zy.acs.wcs.core.netty.domain.ChPackage; +import com.zy.acs.wcs.core.netty.properties.TcpProperties; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 鍥芥爣缂栫爜鍣� + * 姝よВ鐮佸櫒灏嗕細鐢熸垚鏍¢獙鐮� + * 澶勭悊鏂瑰紡: 寮傛垨鍜� + * Created by vincent on 2019-04-02 + */ +@Slf4j +@Component +@ChannelHandler.Sharable +public class ProtocolEncoder extends MessageToByteEncoder<Object> { + + @Autowired + private TcpProperties tcpProperties; + + @Override + protected void encode(ChannelHandlerContext ctx, Object obj, ByteBuf out) { + boolean upgradeLog = true; + if (obj instanceof ByteBuf) { + out.writeBytes((ByteBuf) obj); + } else if (obj instanceof byte[]) { + out.writeBytes((byte[]) obj); + } else if (obj instanceof ChPackage) { + + } +// if (tcpProperties.isPrintPacLog() || upgradeLog){ +// log.info("uuid={} 涓嬭 >>> {}", getVin(out), ByteBufUtil.hexDump(out)); +// } + + } + +// private String getVin(ByteBuf byteBuf){ +// byte[] bytes = new byte[PackagePart.UNIQUENO.getLen()]; +// byteBuf.markReaderIndex(); +// byteBuf.readerIndex(PackagePart.UNIQUENO.getStartIndex()); +// byteBuf.readBytes(bytes); +// byteBuf.resetReaderIndex(); +// return RadixTools.bytesToStr(bytes); +// } +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/properties/TcpProperties.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/properties/TcpProperties.java new file mode 100644 index 0000000..970821a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/netty/properties/TcpProperties.java @@ -0,0 +1,45 @@ +package com.zy.acs.wcs.core.netty.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * vc绯荤粺閰嶇疆 + * Created by luxiaotao on 2018/10/15 + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "tcp") +public class TcpProperties { + + public static String HOST_NAME; + + static { + try { + HOST_NAME = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + System.err.println("find hostname err"); + } + } + + private int port; + + private int heartSeconds; + + private int backlog; + + private boolean keepAlive; + + private int sndbuf; + + private int rcvbuf; + + private boolean printPacLog; + + private int barcodeLen; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SlaveProperties.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SlaveProperties.java new file mode 100644 index 0000000..fd04e37 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SlaveProperties.java @@ -0,0 +1,45 @@ +package com.zy.acs.wcs.core.properties; + +import com.zy.acs.wcs.core.Slave; +import com.zy.acs.wcs.core.model.CrnSlave; +import com.zy.acs.wcs.core.model.DevpSlave; +import com.zy.acs.wcs.core.model.LedSlave; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vincent on 2020/8/4 + * + */ + +/** + * 璇ョ被鏁翠釜灏辨槸涓�涓�氳繃閰嶇疆鏂囦欢鏉ュ疄浣撳寲瀵硅薄绫� + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "wcs-slave") +public class SlaveProperties { + + private boolean doubleDeep; + + private List<Integer> doubleLocs = new ArrayList<>(); + + private int groupCount; + + private List<CrnSlave> crn = new ArrayList<>(); + + private List<DevpSlave> devp = new ArrayList<>(); + + private List<Slave> barcode = new ArrayList<>(); + + private List<LedSlave> led = new ArrayList<>(); + + private List<Slave> scale = new ArrayList<>(); + + private List<Slave> car = new ArrayList<>(); + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SystemProperties.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SystemProperties.java new file mode 100644 index 0000000..d5b6292 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/properties/SystemProperties.java @@ -0,0 +1,17 @@ +package com.zy.acs.wcs.core.properties; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Created by vincent on 2020-06-03 + */ +public class SystemProperties { + + public static final String WCS_PASSWORD = "root"; + + // 绯荤粺杩愯鐘舵�� + public static final AtomicBoolean WCS_RUNNING_STATUS = new AtomicBoolean(Boolean.TRUE); + + public static final String WMS_URL = "localhost"; + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/BarcodeThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/BarcodeThread.java new file mode 100644 index 0000000..5f5df4a --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/BarcodeThread.java @@ -0,0 +1,66 @@ +package com.zy.acs.wcs.core.thread; + +import com.alibaba.fastjson.JSONObject; +import com.zy.acs.framework.common.Cools; +import com.zy.acs.framework.common.DateUtils; +import com.zy.acs.wcs.core.Slave; +import com.zy.acs.wcs.core.ThreadHandler; +import com.zy.acs.wcs.core.cache.OutputQueue; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +/** + * 鏉$爜鎵弿浠嚎绋� + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class BarcodeThread implements Runnable, ThreadHandler { + + private Slave slave; + private StringBuffer barcode = new StringBuffer(); + + private String lastBarcode = ""; + + public BarcodeThread(Slave slave) { + this.slave = slave; + } + + public String getBarcode() { + return barcode.toString(); + } + + public void setBarcode(String barcode) { + this.barcode.delete(0, this.barcode.length()); + this.barcode.append(barcode); + if (!Cools.isEmpty(barcode) && !lastBarcode.equals(barcode)) { + lastBarcode = barcode; + log.info("{}鍙锋潯鐮佸櫒锛屾绱㈡暟鎹細{}", slave.getId(), this.barcode); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); + jsonObject.put("barcode", barcode); + if (OutputQueue.BARCODE.size() >= 32) { + OutputQueue.BARCODE.poll(); + } + OutputQueue.BARCODE.offer(jsonObject); + } + } + + @Override + public boolean connect() { + return false; + } + + @Override + public void close() { + + } + + @Override + public void run() { + + } + +} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/LedThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/LedThread.java new file mode 100644 index 0000000..80a0a51 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/LedThread.java @@ -0,0 +1,420 @@ +//package com.zy.acs.wcs.core.thread; +// +//import com.core.common.SpringUtils; +//import com.zy.asrs.entity.CommandInfo; +//import com.zy.asrs.service.CommandInfoService; +//import com.zy.asrs.service.DeviceErrorService; +//import com.zy.common.model.MatDto; +//import com.zy.acs.wcs.core.Slave; +//import com.zy.acs.wcs.core.ThreadHandler; +//import com.zy.acs.wcs.core.cache.MessageQueue; +//import com.zy.acs.wcs.core.enums.CommandStatusType; +//import com.zy.acs.wcs.core.enums.SlaveType; +//import com.zy.acs.wcs.core.model.Task; +//import com.zy.acs.wcs.core.model.command.LedCommand; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +//import onbon.bx05.Bx5GEnv; +//import onbon.bx05.Bx5GException; +//import onbon.bx05.Bx5GScreen; +//import onbon.bx05.Bx5GScreenClient; +//import onbon.bx05.area.TextCaptionBxArea; +//import onbon.bx05.area.page.TextBxPage; +//import onbon.bx05.file.ProgramBxFile; +//import onbon.bx05.message.led.ReturnControllerStatus; +//import onbon.bx05.utils.DisplayStyleFactory; +// +//import java.awt.*; +//import java.util.HashSet; +//import java.util.List; +//import java.util.Set; +// +///** +// * Created by vincent on 2020/9/1 +// */ +//@Data +//@Slf4j +//public class LedThread implements Runnable, ThreadHandler { +// +// ProgramBxFile pf; +// TextCaptionBxArea area; +// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]); +// private Slave slave; +// private Bx5GScreenClient screen; +// private Set<Integer> workNos = new HashSet<>(); +// private boolean ledMk = false; +// private boolean resetStatus = false; // 澶嶄綅鐘舵�� +// +// public LedThread(Slave slave) { +// this.slave = slave; +// try { +// Bx5GEnv.initial(3000); +// screen = new Bx5GScreenClient("my"); +// } catch (Exception e) { +// e.printStackTrace(); +// log.info("led杩炴帴鏋勯�犲櫒閿欒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// } +// } +// +// public static void main(String[] args) throws Exception { +// String strQty = "1234"; +// int index = strQty.lastIndexOf("."); +// if (index >= 0) { +// strQty = strQty.substring(0, index); +// } +// System.out.println("2==>>" + strQty); +// +// Bx5GEnv.initial(3000); +// Bx5GScreenClient screen = new Bx5GScreenClient("my"); +// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]); +// if (!screen.connect("192.168.10.101", 5005)) { +// System.err.println("杩炴帴澶辫触锛侊紒锛侊紒"); +// return; +// } +// screen.turnOn(); +// +// +// while (true) { +// Thread.sleep(5000L); +// +// ProgramBxFile pf = new ProgramBxFile(0, screen.getProfile()); +// pf.setFrameShow(false); +// // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eigth +// TextCaptionBxArea area = new TextCaptionBxArea(0, 0, 192, 96, screen.getProfile()); +// +// // 鍒涘缓涓�涓暟鎹〉 +// // 绗竴琛屾暟鎹� +// TextBxPage page = new TextBxPage("鍑哄簱浠诲姟锛�303锛�"); +// page.newLine("婧愬簱浣嶏細0100204"); +// page.newLine("鐩爣绔欙細1000"); +// // 璁剧疆瀛椾綋 +// page.setFont(new Font("瀹嬩綋", Font.PLAIN, 15)); +// // 璁剧疆鏂囨湰棰滆壊 +// page.setForeground(Color.red); +// // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑� +// page.setDisplayStyle(styles[6]); +// area.clearPages(); +// area.addPage(page); +// pf.addArea(area); +// +// // 鏇存柊鑺傜洰 +// // 鏇存柊鑺傜洰 +// if (pf.validate() != null) { +// System.out.println("pf out of range"); +// log.info("pf out of range"); +// } else { +// // 鏇存柊鑺傜洰 +// screen.writeProgram(pf); +// } +// } +// +// // 缁у紑涓庢帶鍒跺櫒涔嬮棿鐨勯摼鎺� +//// screen.disconnect(); +// } +// +// public static void main1(String[] args) throws Exception { +// Bx5GEnv.initial(3000); +// // 鍒涘缓screen瀵硅薄锛岀敤浜庡鎺у埗鍣ㄨ繘琛岃闂紝瀹㈡埛绔ā寮� +// Bx5GScreenClient screen = new Bx5GScreenClient("my"); +// // 鍒涘缓screen瀵硅薄锛岀敤浜庡鎺у埗鍣ㄨ繘琛岃闂紝涓插彛妯″紡 +// // Bx5GScreenRS screen = new Bx5GScreenRS("MyScreen"); +// +// // 鍦ㄥ鎺у埗鍣ㄤ氦浜掍箣鍓嶏紝闇�瑕佸厛涓庢帶鍒跺櫒寤虹珛杩炴帴 +// boolean conn = screen.connect("192.168.10.61", 5005); +// System.out.println(conn); +// // 涓庢帶鍒跺櫒浜や簰瀹屾垚鍚庯紝闇�鏂紑涓庢帶鍒跺櫒涔嬮棿鐨勮繛鎺� +//// screen.disconnect(); +// +// // 浠ヤ笅涓轰竴浜涚畝鍗曟帶鍒跺懡浠ょ殑浣跨敤鏂规硶 +// // 寮�鍏虫満鍛戒护 +//// screen.turnOff();// 鍏虫満 +// screen.turnOn();// 寮�鏈� +//// screen.syncTime();// 鏍℃椂 +//// screen.ping();// ping鍛戒护 +//// // 鏌ヨ鎺у埗鍣ㄧ姸鎬� +//// screen.checkControllerStatus(); +//// // 鏌ヨ鎺у埗鍣ㄥ綋鍓嶅浐浠剁増鏈� +//// screen.checkFirmware(); +//// // 鏌ヨ鎺у埗鍣ㄥ唴瀛� +//// screen.checkMemVolumes(); +//// // 閿佸畾灞忓箷褰撳墠鐢婚潰 +//// screen.lock(); +//// // 瑙i櫎閿佸畾灞忓箷褰撳墠鐢婚潰 +//// screen.unlock(); +// +// Bx5GScreen.Result<ReturnControllerStatus> result1 = +// screen.checkControllerStatus(); +// if (result1.isOK()) { +// ReturnControllerStatus status = result1.reply; +// System.out.println(status.getBrightness()); +// System.out.println(status.getRtcDay()); +// System.out.println(status.getScreenOnOff()); +// // +// // status 杩樻湁寰堝鍏朵粬鎺ュ彛锛屽彲浠ユ牴鎹疄闄呴渶姹傚啀娆¤皟鐢ㄤ互鑾峰彇鐩稿簲鐘舵�� +// } +// +//// +// // 浠ヤ笅鏄潤鎬佸尯閮ㄥ垎 Demo +// +// // 鍒涘缓鑺傜洰鏂囦欢 +// ProgramBxFile pf = new ProgramBxFile(0, screen.getProfile()); +//// 鏄惁鏄剧ず鑺傜洰杈规 +// pf.setFrameShow(true); +//// 鑺傜洰杈规鐨勭Щ鍔ㄩ�熷害 +// pf.setFrameSpeed(20); +//// 浣跨敤绗嚑涓唴缃竟妗� +// pf.loadFrameImage(13); +// +// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]); +//// 鍒涘缓涓�涓枃鏈尯 +// // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eigth +// // 娉ㄦ剰鍖哄煙鍧愭爣鍜屽搴﹂珮搴︼紝涓嶈瓒婄晫 +// TextCaptionBxArea area = new TextCaptionBxArea(0, 0, 160, 64, screen.getProfile()); +// +// // 鍒涘缓涓�涓暟鎹〉 +// // 绗竴琛屾暟鎹� +// TextBxPage page = new TextBxPage("鍏ュ簱"); +// // 绗簩琛屾暟鎹� +// page.newLine("鐗╂枡锛�"); +// page.newLine("鎺ユ敹鍣� RX18 XH 6V 锛堟暟閲忥細2锛�"); +// page.newLine("涓帶 BM钃濈墮 鑻辨枃 6V 锛堟暟閲忥細1锛�"); +// page.newLine("绾挎潫 S2588-1-XX 鏃犲疄鐗╋紙鏁伴噺锛�5锛�"); +// page.newLine("鐩爣搴撲綅锛�0100204"); +// // 璁剧疆瀛椾綋 +// page.setFont(new Font("瀹嬩綋", Font.PLAIN, 12)); +// // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑� +// page.setDisplayStyle(styles[2]); +// +// // 鏁版嵁椤靛彲浠ユ槸鍥剧墖 +//// ImageFileBxPage iPage = new ImageFileBxPage( "E;a/001.bmp" ); +//// +//// // 鏁版嵁椤靛彲浠ユ槸txt鏂囦欢 +//// TextFileBxPage tPage = new TextFileBxPage("E:a/001.txt"); +// +// // 灏嗗墠闈㈢殑page娣诲姞鍒癮rea涓� area涓彲浠ユ坊鍔犲涓猵age 鍏朵腑page鍙互鏄瓧绗︿覆锛屽彲浠ユ槸txt鏂囦欢锛屽彲浠ユ槸鍥剧墖锛屼笉鍙互鏄〃鏍硷紝濡傛灉闇�瑕丩ed灞忎笂鏄剧ず琛ㄦ牸锛岃鍏堝皢琛ㄦ牸缁樺埗鎴愬浘鐗� +// area.addPage(page); +//// area.addPage( iPage ); +//// area.addPage( tPage ); +// // 灏哸rea娣诲姞鍒拌妭鐩腑 鑺傜洰涓彲浠ユ坊鍔犲涓猘rea +// pf.addArea(area); +// +// // 鏇存柊鑺傜洰 +// screen.writeProgram(pf); +// +// +// // +// // 浠ヤ笅鏄姩鎬佸尯閮ㄥ垎 Demo +// // 鍔ㄦ�佸尯鐨勭壒鐐� +// +// // DynamicBxAreaRule(id, runMode, immediatePlay, timeout) +// // runMode 杩愯妯″紡锛� +// // 0锛氬惊鐜樉绀恒�� +// // 1锛氭樉绀哄畬鎴愬悗闈欐鏄剧ず鏈�鍚庝竴椤垫暟鎹�� +// // 2锛氬惊鐜樉绀猴紝瓒呰繃璁惧畾鏃堕棿鍚庢暟鎹粛鏈洿鏂版椂涓嶅啀鏄剧ず銆� +// // 3锛氬惊鐜樉绀猴紝瓒呰繃璁惧畾鏃堕棿鍚庢暟鎹粛鏈洿鏂版椂鏄剧ず Logo 淇℃伅銆� +// // 4锛氬惊鐜樉绀猴紝鏄剧ず瀹屾渶鍚庝竴椤靛悗灏变笉鍐嶆樉绀恒�� +// // immediatePlay 鏄惁绔嬪嵆鎾斁锛� +// // 0锛氫笌寮傛鑺傜洰涓�璧锋挱鏀俱�� +// // 1锛氬紓姝ヨ妭鐩仠姝㈡挱鏀撅紝浠呮挱鏀惧姩鎬佸尯鍩熴�� +// // 2锛氬綋鎾斁瀹岃妭鐩紪鍙锋渶楂樼殑寮傛鑺傜洰鍚庢挱鏀捐鍔ㄦ�佸尯鍩熴�� +// +// // +// // 瀹氫箟涓�涓姩鎬佸尯 +// // 鍙互閫氳繃ID鏉ユ洿鏂颁笉鍚岀殑鍔ㄦ�佸尯鍐呭, 姝ゅ ID 涓� 0 +//// DynamicBxAreaRule dynRule = new DynamicBxAreaRule(0, (byte) 0, (byte) 1, 0); +// //dArea.addProgram("P000"); +// //dArea.addProgram("P001"); +// +//// int posX = 440; +//// int posY = 4; +//// TextCaptionBxArea dAreaContent = new TextCaptionBxArea(posX, posY, 64, 16, screen.getProfile()); +//// TextBxPage page = new TextBxPage("鍔ㄦ�佺涓�娆″皾璇�"); +//// page.setDisplayStyle(DisplayStyleFactory.getStyle(4)); +//// dAreaContent.addPage(page); +//// +//// // 鍙戦�佸姩鎬佸尯涔嬪墠锛屽鏋滈渶瑕佸垹闄や箣鍓嶇殑鍔ㄦ�佸尯锛屽彲浠ヨ皟鐢ㄤ互涓嬫帴鍙� +//// // 閫氬父濡傛灉鍔ㄦ�佸尯鐨勪綅缃垨澶у皬娌℃湁鍙戠敓鏀瑰彉锛屼笉鐢ㄥ垹闄� +//// screen.deleteAllDynamic(); +//// +//// // 鏇存柊鍔ㄦ�佸尯 +//// screen.writeDynamic(dynRule, dAreaContent); +//// Thread.sleep(15000); +//// +//// // +//// // 涓嬮潰妯℃嫙鍐嶆鏇存柊鍔ㄦ�佸尯 +//// page = new TextBxPage("鍐嶆灏濊瘯"); +//// TextBxPage page2 = new TextBxPage("鎴愬姛"); +//// +//// dAreaContent.clearPages(); +//// dAreaContent.addPage(page); +//// dAreaContent.addPage(page2); +//// +//// // 鏇存柊鍔ㄦ�佸尯 +//// screen.writeDynamic(dynRule, dAreaContent); +// +// // +// // 缁у紑涓庢帶鍒跺櫒涔嬮棿鐨勯摼鎺� +// screen.disconnect(); +// +// +// } +// +// @Override +// @SuppressWarnings({"InfiniteLoopStatement", "unchecked"}) +// public void run() { +// connect(); +// close(); +// while (true) { +// try { +// Task task = MessageQueue.poll(SlaveType.Led, slave.getId()); +// if (task != null) { +// switch (task.getStep()) { +// // 鍐欐暟鎹� +// case 1: +// write((List<LedCommand>) task.getData()); +// break; +// // 澶嶄綅 +// case 2: +// reset(); +// break; +// default: +// break; +// } +// } +// +// Thread.sleep(400); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// } +// +// private void write(List<LedCommand> list) throws Bx5GException { +// if (!connect()) { +// return; +// } +// pf = new ProgramBxFile(0, screen.getProfile()); +// pf.setFrameShow(false); +// // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eight +// area = new TextCaptionBxArea(0, 0, 96, 48, screen.getProfile()); +// // 鍒涘缓涓�涓暟鎹〉 +// TextBxPage page = new TextBxPage(); +// for (LedCommand command : list) { +// page.newLine(command.getTitle() + "锛�" + command.getWorkNo() + ")"); +// page.newLine("搴撲綅锛�" + (command.getIoType() < 100 ? command.getLocNo() : command.getSourceLocNo())); +// page.newLine("鐩爣绔欙細" + command.getStaNo()); +// if (!command.isEmptyMk()) { +// for (MatDto matDto : command.getMatDtos()) { +// //鍘绘帀灏忔暟鐐� +// String strQty = matDto.getCount().toString(); +// int idx = strQty.lastIndexOf("."); +// if (idx >= 0) { +// strQty.substring(0, idx); +// } +// page.newLine(matDto.getMaknx() + "[鏁伴噺" + strQty + "]"); +//// page.newLine(matDto.getMaknx() + "銆愭暟閲�" + matDto.getCount() +"銆�"); +// } +// } +// page.newLine("\n"); +// +// //鏇存柊鎸囦护鐘舵�� +// CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class); +// CommandInfo commandInfo = command.getCommandInfo(); +// commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id); +// commandInfoService.updateById(commandInfo); +// } +// +// // 璁剧疆瀛椾綋 +// page.setFont(new Font("瀹嬩綋", Font.PLAIN, 12)); +// // 璁剧疆鏂囨湰棰滆壊 +// page.setForeground(Color.red); +// // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑� +// page.setDisplayStyle(styles[6]); +// area.clearPages(); +// area.addPage(page); +// pf.addArea(area); +// if (pf.validate() != null) { +// log.info("pf out of range"); +// } else { +// // 鏇存柊鑺傜洰 +// screen.writeProgram(pf); +//// resetStatus = false; +// } +// close(); +// } +// +// private void reset() throws Bx5GException { +// if (!connect()) { +// return; +// } +//// if (resetStatus) { +//// return; +//// } +// pf = new ProgramBxFile(0, screen.getProfile()); +// pf.setFrameShow(false); +// // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eight +// area = new TextCaptionBxArea(0, 0, 96, 48, screen.getProfile()); +// // 鍒涘缓涓�涓暟鎹〉 +// TextBxPage page = new TextBxPage(); +// +//// List<String> list = null; +//// try { +//// String ledDefaultMsg = Parameter.get().getLedDefaultMsg(); +//// list = JSON.parseArray(ledDefaultMsg, String.class); +//// } catch (Exception ignore) { +//// } +//// if (!Cools.isEmpty(list)) { +//// for (String str : list) { +//// page.newLine(str); +//// } +//// } else { +//// page.newLine("鑷姩鍖栫珛浣撲粨搴�"); +//// page.newLine("瑗挎牸杩堣偂浠芥湁闄愬叕鍙�"); +//// } +// page.newLine("鍔涙簮鏅鸿兘浠撳偍"); +// +// // 璁剧疆瀛椾綋 +// page.setFont(new Font("瀹嬩綋", Font.PLAIN, 13)); +// // 璁剧疆鏂囨湰棰滆壊 +// page.setForeground(Color.red); +// // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑� +// page.setDisplayStyle(styles[6]); +// area.clearPages(); +// area.addPage(page); +// pf.addArea(area); +// // 鏇存柊鑺傜洰 +// if (pf.validate() != null) { +// log.info("pf out of range"); +// } else { +// // 鏇存柊鑺傜洰 +// screen.writeProgram(pf); +//// resetStatus = true; +// } +// close(); +// } +// +// @Override +// public boolean connect() { +// boolean connRes = false; +// try { +// connRes = screen.connect(slave.getIp(), slave.getPort()); +// screen.turnOn(); +// } catch (Exception ignore) { +// } +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// if (connRes) { +// log.info("led杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// deviceErrorService.deleteDeviceError("led", slave.getId()); +// } else { +// log.error("led杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// deviceErrorService.addDeviceError("led", slave.getId(), "led杩炴帴澶辫触"); +// } +// return connRes; +// } +// +// @Override +// public void close() { +// screen.disconnect(); +// } +// +//} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/ScaleThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/ScaleThread.java new file mode 100644 index 0000000..87025d7 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/ScaleThread.java @@ -0,0 +1,169 @@ +//package com.zy.acs.wcs.core.thread; +// +//import com.alibaba.fastjson.JSONObject; +//import com.core.common.Cools; +//import com.core.common.DateUtils; +//import com.core.common.SpringUtils; +//import com.zy.asrs.entity.BasDevp; +//import com.zy.asrs.service.BasDevpService; +//import com.zy.asrs.service.DeviceErrorService; +//import com.zy.acs.wcs.core.Slave; +//import com.zy.acs.wcs.core.ThreadHandler; +//import com.zy.acs.wcs.core.cache.OutputQueue; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +// +//import java.io.DataInputStream; +//import java.io.DataOutputStream; +//import java.io.IOException; +//import java.net.InetSocketAddress; +//import java.net.Socket; +//import java.net.SocketAddress; +//import java.net.SocketTimeoutException; +//import java.util.Date; +// +///** +// * 纾呯Г绾跨▼ +// * Created by vincent on 2020/8/4 +// */ +//@Data +//@Slf4j +//public class ScaleThread implements Runnable, ThreadHandler { +// +// private Slave slave; +// private Double scale = 0.0D; +// private Socket socket; +// private DataOutputStream dataOutputStream; +// private DataInputStream dataInputStream; +// +// public ScaleThread(Slave slave) { +// this.slave = slave; +// } +// +// @Override +// @SuppressWarnings("InfiniteLoopStatement") +// public void run() { +// connect(); +// while (true) { +// try { +// byte[] read = read(8, 100); +// if (null != read) { +// String s = new String(read); +// if (!Cools.isEmpty(s) && s.startsWith("=")) { +// scale = Double.parseDouble(s.substring(1)); +// +// //灏嗙О閲嶉噸閲忓啓鍏ヨ澶囧熀纭�鏁版嵁涓殑gross_wt瀛楁 +// if (scale > 20) { +// BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); +// Integer staNo = slave.getId() == 1 ? 101 : 201; +// BasDevp basDevp = basDevpService.selectById(staNo); +// if (!Cools.isEmpty(basDevp)) { +// basDevp.setGrossWt(scale); +// if (null != basDevpService && !basDevpService.updateById(basDevp)) { +// throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); +// } +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("time", DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F)); +// jsonObject.put("id", staNo); +// jsonObject.put("scale", scale); +// if (OutputQueue.SCALE.size() >= 32) { +// OutputQueue.SCALE.poll(); +// } +// OutputQueue.SCALE.offer(jsonObject); +// } +// } +// } +// } +// Thread.sleep(100); +// } catch (SocketTimeoutException ignore) { +// } catch (Exception e) { +//// e.printStackTrace(); +// } +// } +// } +// +// @Override +// public boolean connect() { +// +// try { +// close(); //1.涓诲姩閲婃斁杩炴帴 //2.鏌愪簺鏈嶅姟鍣ㄥ鎸囧畾ip鏈夐摼璺暟闄愬埗 +// socket = new Socket(); +// //socket.setKeepAlive(true); +// SocketAddress socketAddress = new InetSocketAddress(slave.getIp(), slave.getPort()); +// socket.connect(socketAddress, 1000); //鏌愪簺鏈嶅姟鍣╬ing寤惰繜楂樻椂瑕佸鍔�,鍚﹀垯浼氭姤閿檆onnect timeout +// dataOutputStream = new DataOutputStream(socket.getOutputStream()); +// dataInputStream = new DataInputStream(socket.getInputStream()); +//// log.info("鏉$爜鎵弿浠繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// deviceErrorService.deleteDeviceError("scale", slave.getId()); +// } catch (Exception e) { +// socket = null; +// log.error("纾呯Г杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// deviceErrorService.addDeviceError("scale", slave.getId(), "纾呯Г杩炴帴澶辫触"); +// return false; +// } +// return true; +// } +// +// @Override +// public void close() { +// try { +// if (null != dataOutputStream) { +// dataOutputStream.close(); +// } +// if (null != dataInputStream) { +// dataInputStream.close(); +// } +//// if (null != socket && !socket.isClosed()) { +//// socket.close(); +//// } +// if (null != socket) { +// socket.close(); +// } +// socket = null; +// } catch (IOException e) { +// log.error("SocketClient close Exception:" + e.getMessage()); +// } +// } +// +// public void write(byte[] msg, int len) throws IOException { +// if (null != dataInputStream) { +// dataOutputStream.write(msg, 0, len); +// dataOutputStream.flush(); +// } +// } +// +// public byte[] read(int bufferSize, int timeOut) throws IOException { +//// if (socket == null) { +//// connect(); +//// } +// connect(); +// socket.setSoTimeout(timeOut); +// byte[] bytes = new byte[bufferSize]; +// int len = dataInputStream.read(bytes); +// byte[] tempBytes = null; +// if (len > 0) { +// tempBytes = new byte[len]; +// System.arraycopy(bytes, 0, tempBytes, 0, len); +// } +// return tempBytes; +// } +// +// public boolean valid() throws Exception { +// if (null == socket || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) { +// if (dataInputStream != null) { +// dataInputStream.close(); +// } +// if (dataOutputStream != null) { +// dataOutputStream.close(); +// } +// if (socket != null) { +// socket.close(); +// } +// return false; +// } +// return true; +// } +// +//} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensCrnThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensCrnThread.java new file mode 100644 index 0000000..f3b1af0 --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensCrnThread.java @@ -0,0 +1,720 @@ +//package com.zy.acs.wcs.core.thread; +// +//import HslCommunication.Core.Types.OperateResult; +//import HslCommunication.Core.Types.OperateResultExOne; +//import HslCommunication.Profinet.Siemens.SiemensPLCS; +//import HslCommunication.Profinet.Siemens.SiemensS7Net; +//import com.alibaba.fastjson.JSON; +//import com.baomidou.mybatisplus.mapper.EntityWrapper; +//import com.core.common.Cools; +//import com.core.common.DateUtils; +//import com.core.common.SpringUtils; +//import com.zy.asrs.entity.*; +//import com.zy.asrs.service.*; +//import com.zy.acs.wcs.core.CrnThread; +//import com.zy.acs.wcs.core.cache.MessageQueue; +//import com.zy.acs.wcs.core.cache.OutputQueue; +//import com.zy.acs.wcs.core.enums.CommandStatusType; +//import com.zy.acs.wcs.core.enums.CrnTaskModeType; +//import com.zy.acs.wcs.core.enums.SlaveType; +//import com.zy.acs.wcs.core.model.CrnSlave; +//import com.zy.acs.wcs.core.model.Task; +//import com.zy.acs.wcs.core.model.command.CrnCommand; +//import com.zy.acs.wcs.core.model.protocol.CrnProtocol; +//import lombok.Data; +//import lombok.extern.slf4j.Slf4j; +// +//import java.text.MessageFormat; +//import java.util.Date; +// +///** +// * 鍫嗗灈鏈虹嚎绋� +// * Created by vincent on 2020/8/4 +// */ +//@Data +//@Slf4j +//public class SiemensCrnThread implements Runnable, CrnThread { +// +// private SiemensS7Net siemensNet; +// private CrnSlave slave; +// private CrnProtocol crnProtocol; +// private boolean resetFlag = false; +// +// +// +// public SiemensCrnThread(CrnSlave slave) { +// this.slave = slave; +// } +// +// /*****************************************************************************************/ +// public static void main(String[] args) throws InterruptedException { +// CrnSlave slave = new CrnSlave(); +// slave.setId(1); +// slave.setIp("192.168.6.9"); +// slave.setRack(0); +// slave.setSlot(0); +// SiemensCrnThread crnThread = new SiemensCrnThread(slave); +// crnThread.connect(); +// crnThread.readStatus(); +// System.out.println(JSON.toJSONString(crnThread.crnProtocol)); +// Thread.sleep(3000L); +// +// // 1.鍏ュ簱 婧愬拰鐩爣閮藉彂 +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡 +//// command.setSourcePosX((short) 1); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short) 1); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short) 2); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short) 3); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +// // 2.鍑哄簱 婧愬拰鐩爣閮藉彂 +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.PAKOUT); // 浠诲姟妯″紡 +//// command.setSourcePosX((short) 2); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short) 4); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short) 3); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short) 1); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +// +//// // 3.搴撲綅绉昏浆 婧愬拰鐩爣閮藉彂 pass +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 +//// command.setSourcePosX((short)2); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short)2); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short)3); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short)2); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short)4); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short)4); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +// // 4.绔欎綅绉昏浆 婧愬拰鐩爣閮藉彂 +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.SITE_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆 +//// command.setSourcePosX((short)1); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short)0); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short)1); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short)2); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short)0); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short)1); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +//// // 5.鍥炲師鐐� 涓嶇敤鍙� pass +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡 +//// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +//// // 7.鍧愭爣绉昏 鐩爣鍙� pass +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙� +//// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +//// command.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.OFFSET_MOVE); // 浠诲姟妯″紡 +//// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 +//// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +//// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 +//// command.setDestinationPosX((short) 2); // 鐩爣搴撲綅鎺� +//// command.setDestinationPosY((short) 1); // 鐩爣搴撲綅鍒� +//// command.setDestinationPosZ((short) 1); // 鐩爣搴撲綅灞� +//// crnThread.write(command); +// +// // 鍙湁鍑虹幇鎸囧畾寮傚父鎵嶈繘琛屽浣� +//// if (crnThread.crnProtocol.getCrnError2().leftTakeNoneErr +//// || crnThread.crnProtocol.getCrnError2().rightTakeNoneErr +//// || crnThread.crnProtocol.getCrnError2().leftPutLoadErr +//// || crnThread.crnProtocol.getCrnError2().rightPutLoadErr) { +//// CrnCommand command = new CrnCommand(); +//// command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙� +//// command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣� +//// command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡 +//// Thread.sleep(3000L); +//// crnThread.write(command); +//// } +// +// } +// +// @Override +// @SuppressWarnings("InfiniteLoopStatement") +// public void run() { +// initCrnProtocol(); +// this.connect(); +// while (true) { +// try { +// int step = 1; +// Task task = MessageQueue.poll(SlaveType.Crn, slave.getId()); +// if (task != null) { +// step = task.getStep(); +// } +// switch (step) { +// // 璇绘暟鎹� +// case 1: +// readStatus(); +// break; +// // 鍐欏叆鏁版嵁 +// case 2: +// write5((CrnCommand) task.getData()); +// break; +// // 澶嶄綅 +// case 3: +// CrnCommand command = (CrnCommand) task.getData(); +// if (null == command) { +// command = new CrnCommand(); +// } +// command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� +// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +// command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣� +// command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡 +// command.setSourcePosX((short) 0); // 婧愬簱浣嶆帓 +// command.setSourcePosY((short) 0); // 婧愬簱浣嶅垪 +// command.setSourcePosZ((short) 0); // 婧愬簱浣嶅眰 +// command.setDestinationPosX((short) 0); // 鐩爣搴撲綅鎺� +// command.setDestinationPosY((short) 0); // 鐩爣搴撲綅鍒� +// command.setDestinationPosZ((short) 0); // 鐩爣搴撲綅灞� +// write(command); +// break; +// case 4: +// writeAuto((CrnCommand) task.getData()); +// break; +// case 5: +// write((CrnCommand) task.getData()); +// break; +// default: +// break; +// } +// Thread.sleep(500); +// } catch (Exception e) { +//// e.printStackTrace(); +// } +// +// } +// } +// +// /** +// * 鍒濆鍖栧爢鍨涙満 +// */ +// private void initCrnProtocol() { +// crnProtocol = new CrnProtocol(); +// crnProtocol.setMode((short) 0); +// crnProtocol.setStatus((short) 0); +// crnProtocol.setTaskNo((short) 0); +// crnProtocol.setTaskFinish((short) 0); +// crnProtocol.setValid((short) 0); +// crnProtocol.setBay((short) 0); +// crnProtocol.setLevel((short) 0); +// crnProtocol.setRow((short) 0); +// crnProtocol.setLane((short) 0); +// } +// +// @Override +// public boolean connect() { +// boolean result = false; +// siemensNet = new SiemensS7Net(SiemensPLCS.S1500, slave.getIp()); +// siemensNet.setRack(slave.getRack().byteValue()); +// siemensNet.setSlot(slave.getSlot().byteValue()); +// OperateResult connect = siemensNet.ConnectServer(); +// if (connect.IsSuccess) { +// result = true; +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝爢鍨涙満plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝爢鍨涙満plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +//// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +//// deviceErrorService.addDeviceError("crn", slave.getId(), "鍫嗗灈鏈簆lc杩炴帴澶辫触"); +// initCrnProtocol(); +// } +//// siemensNet.ConnectClose(); +// return result; +// } +// +// /** +// * 璇诲彇鐘舵�� +// */ +// private void readStatus() { +// +// OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56); +// if (result.IsSuccess) { +// if (null == crnProtocol) { +// crnProtocol = new CrnProtocol(); +// } +// crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0)); +// crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2)); +// crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4)); +// crnProtocol.setBay(siemensNet.getByteTransform().TransInt16(result.Content, 6)); +// crnProtocol.setLevel(siemensNet.getByteTransform().TransInt16(result.Content, 8)); +// crnProtocol.setForkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10)); +// crnProtocol.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 12)); +// crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 14)); +// crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 16)); +// crnProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 18)); +//// crnProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 20)); +//// crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22)); +//// crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24)); +//// crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26)); +// crnProtocol.setXSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 28)); +// crnProtocol.setYSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 32)); +// crnProtocol.setZSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 36)); +// crnProtocol.setXDistance(siemensNet.getByteTransform().TransSingle(result.Content, 40)); +// crnProtocol.setYDistance(siemensNet.getByteTransform().TransSingle(result.Content, 44)); +// crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48)); +// crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52)); +// +// +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId())); +// +// // 澶嶄綅淇″彿 +// if (crnProtocol.getTaskFinish() == 0) { +// if (resetFlag) { +// CrnCommand crnCommand = new CrnCommand(); +// crnCommand.setAckFinish((short) 1); +// if (write(crnCommand)) { +// resetFlag = false; +// +// //鍫嗗灈鏈轰换鍔″畬鎴愬悗璁块棶wms璇锋眰浠诲姟瀹屾垚 locationDone 璐т綅澶勭悊瀹屾垚 +// TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class); +// TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("wrk_no", crnProtocol.getTaskNo())); +//// String tasktype = null; +//// switch (taskWrk.getIoType()) { +//// case 1: +//// tasktype = "RK"; +//// break; +//// case 2: +//// tasktype = "CK"; +//// break; +//// case 3: +//// tasktype = "YK"; +//// break; +//// default: +//// tasktype = "鏈煡"; +//// } +//// Map<String, Object> map = new HashMap<>(); +//// map.put("x-api-key", "7a15b5db-29b6-552c-8cff-0cfec3756da2"); +//// TaskOverToWms taskOverToWms = new TaskOverToWms(); +//// taskOverToWms.setFeedbackFrom("WCS"); //鏉ユ簮 +//// taskOverToWms.setWarehouseId("1688469798893297665"); //浠撳簱鏍囪瘑 +//// taskOverToWms.setTaskNo(taskWrk.getTaskNo()); //浠诲姟鍙� +//// taskOverToWms.setTaskType(tasktype); // 浠诲姟绫诲瀷 +//// taskOverToWms.setContainerCode(taskWrk.getBarcode()); // 瀹瑰櫒缂栫爜 +//// if (taskWrk.getIoType() == 1) { +//// taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //璁惧缂栫爜 +//// taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //鐩爣搴撲綅 +//// } else if (taskWrk.getIoType() == 2) { +//// Map<Integer, String> map1 = new HashMap<>(); +//// map1.put(102, "J-1101"); +//// map1.put(106, "J-1103"); +//// map1.put(110, "J-1105"); +//// map1.put(114, "J-1107"); +//// map1.put(118, "J-1109"); +//// map1.put(122, "J-1111"); +//// map1.put(305, "H-1101"); +//// map1.put(405, "G-1101"); +//// taskOverToWms.setEquipmentCode(map1.get(taskWrk.getTargetPoint())); //璁惧缂栫爜 +//// taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); //婧愬簱浣� +//// } else if (taskWrk.getIoType() == 3) { +//// taskOverToWms.setEquipmentCode(String.valueOf(taskWrk.getCrnNo())); //璁惧缂栫爜 +//// taskOverToWms.setSourceLocationCode(taskWrk.getOriginStartPoint()); +//// taskOverToWms.setTargetLocationCode(taskWrk.getOriginTargetPoint()); //鐩爣搴撲綅 +//// } +//// taskOverToWms.setTaskStatus("location_done"); //浠诲姟鐘舵�� +//// String response = null; +//// try { +//// response = new HttpHandler.Builder() +//// .setHeaders(map) +//// .setUri("10.32.53.195:8080") +//// .setPath("wcsManager/wcsInterface/taskStatusFeedback") +//// .setJson(JSON.toJSONString(taskOverToWms)) +//// .build() +//// .doPost(); +//// } catch (Exception e) { +//// log.error("鍫嗗灈鏈轰换鍔″畬鎴愶紝璇锋眰wms浠诲姟瀹屾垚鎺ュ彛澶辫触"); +//// } +//// ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); +//// apiLogService.save("Wms浠诲姟瀹屾垚鎺ュ彛" +//// , "10.32.53.195:8080" + "/wcsManager/wcsInterface/taskStatusFeedback" +//// , null +//// , "127.0.0.1" +//// , JSON.toJSONString(taskOverToWms) +//// , response +//// , true +//// ); +//// JSONObject jsonObject = JSON.parseObject(response); +//// if (jsonObject.getInteger("code").equals(200)) { +// if (taskWrk.getIoType() == 3) { +// taskWrk.setWrkSts(4); +// } +// taskWrk.setStatus(5); +// if (!taskWrkService.update(taskWrk, new EntityWrapper<TaskWrk>().eq("wrk_no", crnProtocol.getTaskNo()))) { +// log.error("鍫嗗灈鏈轰换鍔″畬鎴愶紝鏀瑰彉浠诲姟鐘舵�佸け璐�"); +// } +// +// log.info("鍫嗗灈鏈轰换鍔″畬鎴愶紝璇锋眰wms浠诲姟瀹屾垚鎺ュ彛鎴愬姛"); +// } else { +// log.error("鍫嗗灈鏈轰换鍔″畬鎴愶紝璇锋眰wms浠诲姟瀹屾垚鎺ュ彛瀹屾垚锛屼絾杩斿洖澶辫触"); +// } +// +//// } +// +// +// } +// } +// +// try { +// // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� +// BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); +// BasCrnp basCrnp = new BasCrnp(); +// basCrnp.setCrnNo(slave.getId()); +// basCrnp.setCrnSts((int) crnProtocol.getMode()); +// if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))) { +// log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// } +// } catch (Exception ignore) { +// } +// +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// deviceErrorService.deleteDeviceError("crn", slave.getId()); +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// deviceErrorService.addDeviceError("crn", slave.getId(), "璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐�"); +// } +// } +// +// /** +// * 鍐欏叆鏁版嵁 +// */ +// private boolean write(CrnCommand command) { +// if (null == command) { +// log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); +// return false; +// } +// //杞崲鍓嶅厠闅嗕竴浠� +// CrnCommand crnCommand = new CrnCommand(); +// crnCommand.setCrnNo(command.getCrnNo()); +// crnCommand.setAckFinish(command.getAckFinish()); +// crnCommand.setTaskNo(command.getTaskNo()); +// crnCommand.setTaskMode(command.getTaskMode()); +// crnCommand.setSourcePosX(command.getSourcePosX()); +// crnCommand.setSourcePosY(command.getSourcePosY()); +// crnCommand.setSourcePosZ(command.getSourcePosZ()); +// crnCommand.setDestinationPosX(command.getDestinationPosX()); +// crnCommand.setDestinationPosY(command.getDestinationPosY()); +// crnCommand.setDestinationPosZ(command.getDestinationPosZ()); +//// crnCommand.setSourceStaNo(command.getSourceStaNo()); +//// crnCommand.setDestinationStaNo(command.getDestinationStaNo()); +// crnCommand.setCommand(command.getCommand()); +// if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) { +// command.setTaskNo((short) 999); +// } +// +// command.setCrnNo(slave.getId()); +// short[] array = new short[10]; +// array[0] = command.getAckFinish(); +// array[1] = command.getTaskNo(); +// array[2] = command.getTaskMode(); +// array[3] = command.getSourcePosX(); +// array[4] = command.getSourcePosY(); +// array[5] = command.getSourcePosZ(); +// array[6] = command.getDestinationPosX(); +// array[7] = command.getDestinationPosY(); +// array[8] = command.getDestinationPosZ(); +// array[9] = command.getCommand(); +// +// // 浣滀笟淇℃伅 +// OperateResult result = siemensNet.Write("DB100.0", array); +// +// +// if (result.IsSuccess) { +// log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command)); +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); +// return true; +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// return false; +// } +// } +// +// /** +// * 鍐欏叆鏁版嵁 +// */ +// private boolean write5(CrnCommand command) throws InterruptedException { +// String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); +// +// if (null == command) { +// log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); +// return false; +// } +//// convertRow(command); +// command.setCrnNo(slave.getId()); +// short[] array = new short[10]; +// array[0] = command.getAckFinish(); +// array[1] = command.getTaskNo(); +// array[2] = command.getTaskMode(); +// array[3] = command.getSourcePosX(); +// array[4] = command.getSourcePosY(); +// array[5] = command.getSourcePosZ(); +// array[6] = command.getDestinationPosX(); +// array[7] = command.getDestinationPosY(); +// array[8] = command.getDestinationPosZ(); +//// array[9] = command.getSourceStaNo(); +//// array[10] = command.getDestinationStaNo(); +// array[9] = command.getCommand(); +// +// OperateResult result = siemensNet.Write("DB100.0", array); +// +// int i = 0; +// do { +// //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔� +// Thread.sleep(200); +// OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); +// if (resultRead.IsSuccess) { +// CrnCommand one = new CrnCommand(); +// one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); +// one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4)); +// one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6)); +// one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); +// one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10)); +// one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12)); +// one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14)); +// one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16)); +// if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode()) +// || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY()) +// || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX()) +// || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ()) +// ) { +// i++; +// log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}]>>>>閲嶅啓[{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), i, JSON.toJSON(command), JSON.toJSON(one)); +// result = siemensNet.Write("DB100.0", array); +// } else { +// i = 5; +// } +// } +// } while (i < 5); +// +// +// try { +// // 鏃ュ織璁板綍 +// BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); +// BasCrnOpt basCrnOpt = new BasCrnOpt( +// command.getTaskNo().intValue(), // 浠诲姟鍙� +// command.getCrnNo(), // 鍫嗗灈鏈篬闈炵┖] +// new Date(), // 涓嬪彂鏃堕棿 +// command.getTaskModeType().toString(), // 妯″紡 +// command.getSourcePosX().intValue(), // 婧愭帓 +// command.getSourcePosY().intValue(), // 婧愬垪 +// command.getSourcePosZ().intValue(), // 婧愬眰 +// null, // 婧愮珯 +// command.getDestinationPosX().intValue(), // 鐩爣鎺� +// command.getDestinationPosY().intValue(), // 鐩爣鍒� +// command.getDestinationPosZ().intValue(), // 鐩爣灞� +// null, // 鐩爣绔� +// null, // 鍝嶅簲缁撴灉 +// null, // 淇敼鏃堕棿 +// null // 淇敼浜哄憳 +// ); +// bean.insert(basCrnOpt); +// } catch (Exception ignore) { +// } +// +// if (result != null && result.IsSuccess) { +// Thread.sleep(200); +// this.readStatus(); +// log.info(methodName + ":鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); +// return true; +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); +// log.error(methodName + ":鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// return false; +// } +// } +// +// /** +// * 鍐欏叆鏁版嵁 +// */ +// private boolean write2(CrnCommand command) { +// if (null == command) { +// log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); +// return false; +// } +// //杞崲鍓嶅厠闅嗕竴浠� +// CrnCommand crnCommand = new CrnCommand(); +// crnCommand.setCrnNo(command.getCrnNo()); +// crnCommand.setAckFinish(command.getAckFinish()); +// crnCommand.setTaskNo(command.getTaskNo()); +// crnCommand.setTaskMode(command.getTaskMode()); +// crnCommand.setSourcePosX(command.getSourcePosX()); +// crnCommand.setSourcePosY(command.getSourcePosY()); +// crnCommand.setSourcePosZ(command.getSourcePosZ()); +// crnCommand.setDestinationPosX(command.getDestinationPosX()); +// crnCommand.setDestinationPosY(command.getDestinationPosY()); +// crnCommand.setDestinationPosZ(command.getDestinationPosZ()); +//// crnCommand.setSourceStaNo(command.getSourceStaNo()); +//// crnCommand.setDestinationStaNo(command.getDestinationStaNo()); +// crnCommand.setCommand(command.getCommand()); +// if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) { +// command.setTaskNo((short) 999); +// } +// +// command.setCrnNo(slave.getId()); +// short[] array = new short[10]; +// if (Cools.isEmpty(command.getAckFinish())) { +// array[0] = 5; +// } else { +// array[0] = command.getAckFinish(); +// } +// array[1] = command.getTaskNo(); +// array[2] = command.getTaskMode(); +// array[3] = command.getSourcePosX(); +// array[4] = command.getSourcePosY(); +// array[5] = command.getSourcePosZ(); +// array[6] = command.getDestinationPosX(); +// array[7] = command.getDestinationPosY(); +// array[8] = command.getDestinationPosZ(); +// array[9] = command.getCommand(); +// // 浣滀笟淇℃伅 +// OperateResult result = siemensNet.Write("DB100.0", array); +// // 鏃ュ織璁板綍 +// if (command.getAckFinish() != 1) { +// BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); +// BasCrnOpt basCrnOpt = new BasCrnOpt( +// command.getTaskNo().intValue(), // 浠诲姟鍙� +// command.getCrnNo(), // 鍫嗗灈鏈篬闈炵┖] +// new Date(), // 涓嬪彂鏃堕棿 +// command.getTaskModeType() == null ? null : command.getTaskModeType().toString(), // 妯″紡 +// command.getSourcePosX().intValue(), // 婧愭帓 +// command.getSourcePosY().intValue(), // 婧愬垪 +// command.getSourcePosZ().intValue(), // 婧愬眰 +// null, // 婧愮珯 +// command.getDestinationPosX().intValue(), // 鐩爣鎺� +// command.getDestinationPosY().intValue(), // 鐩爣鍒� +// command.getDestinationPosZ().intValue(), // 鐩爣灞� +// null, // 鐩爣绔� +// null, // 鍝嶅簲缁撴灉 +// null, // 淇敼鏃堕棿 +// null // 淇敼浜哄憳 +// ); +// bean.insert(basCrnOpt); +// } +//// } catch (Exception ignore) {} +// +// //鏇存柊鍛戒护鏃ュ織 +// CommandInfoLogService commandInfoLogService = SpringUtils.getBean(CommandInfoLogService.class); +// CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class); +// CommandInfo commandInfo = commandInfoService.selectById(command.getCommandId()); +// if (Cools.isEmpty(commandInfo)) { +// commandInfo = commandInfoService.selectOne(new EntityWrapper<CommandInfo>() +// .eq("wrk_no", crnProtocol.getTaskNo()) +// .eq("device", "Crn")); +// } +// CommandInfoLog commandInfoLog = JSON.parseObject(JSON.toJSONString(commandInfo), CommandInfoLog.class); +// commandInfoLog.setId(null); +// if (result.IsSuccess) { +// Date now = new Date(); +// //鏇存柊鎸囦护鏃ュ織 +// commandInfoLog.setDeviceLog("鎸囦护涓嬪彂鎴愬姛"); +// commandInfoLogService.insert(commandInfoLog); +// +// //绾跨▼鏆傚瓨鎸囦护ID +// crnProtocol.setCommandId(command.getCommandId()); +// +// //鏇存柊鎸囦护鐘舵�� +// commandInfo.setCommandStatus(CommandStatusType.EXECUTE.id);//鎵ц涓� +// commandInfo.setExecuteTime(now); +// commandInfoService.updateById(commandInfo); +// +// //鏇存柊浠诲姟姝ュ簭 +// TaskWrkService taskWrkService = SpringUtils.getBean(TaskWrkService.class); +// TaskWrk taskWrk = taskWrkService.selectByWrkNo(command.getTaskNo().intValue()); +// if (taskWrk != null) { +// taskWrk.setCommandStep(taskWrk.getCommandStep() + 1);//鏇存柊鎸囦护姝ュ簭 +// taskWrkService.updateById(taskWrk); +// } +// +// +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// } +// return true; +// } +// +// private boolean writeAuto(CrnCommand command) { +// if (null == command) { +// log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); +// return false; +// } +// OperateResult result = new OperateResult(); +// short[] array = new short[1]; +// array[0] = command.getAuto(); +// if (command.getAuto() != 0) { +// array[0] = command.getAuto(); +// result = siemensNet.Write("DB103.0", array); +// } else if (command.getOnlineWrk1() != 0) { +// array[0] = command.getOnlineWrk1(); +// result = siemensNet.Write("DB103.2", array); +// } else if (command.getOnlineWrk2() != 0) { +// array[0] = command.getOnlineWrk2(); +// result = siemensNet.Write("DB103.4", array); +// } else if (command.getOnlineWrk3() != 0) { +// array[0] = command.getOnlineWrk3(); +// result = siemensNet.Write("DB103.6", array); +// } else if (command.getOnlineWrk4() != 0) { +// array[0] = command.getOnlineWrk4(); +// result = siemensNet.Write("DB103.8", array); +// } else if (command.getReset() != 0) { +// array[0] = command.getReset(); +// result = siemensNet.Write("DB103.10", array); +// } +// +// +// if (result.IsSuccess) { +// log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command)); +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); +// +// +// return true; +// } else { +// OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// +// return false; +// } +// } +// +// /******************************************************************************************/ +// /**************************************** 娴嬭瘯涓撶敤 *****************************************/ +// +// @Override +// public void close() { +// siemensNet.ConnectClose(); +// } +// +//} diff --git a/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensDevpThread.java b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensDevpThread.java new file mode 100644 index 0000000..9d311aa --- /dev/null +++ b/zy-acs-wcs/src/main/java/com/zy/acs/wcs/core/thread/SiemensDevpThread.java @@ -0,0 +1,817 @@ +package com.zy.acs.wcs.core.thread; + +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Core.Types.OperateResultExOne; +import HslCommunication.Profinet.Siemens.SiemensPLCS; +import HslCommunication.Profinet.Siemens.SiemensS7Net; +import com.alibaba.fastjson.JSON; +import com.core.common.Cools; +import com.core.common.DateUtils; +import com.core.common.SpringUtils; +import com.core.exception.CoolException; +import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.service.BasDevpService; +import com.zy.asrs.service.DeviceErrorService; +import com.zy.acs.wcs.core.DevpThread; +import com.zy.acs.wcs.core.cache.MessageQueue; +import com.zy.acs.wcs.core.cache.OutputQueue; +import com.zy.acs.wcs.core.cache.SlaveConnection; +import com.zy.acs.wcs.core.enums.IoModeType; +import com.zy.acs.wcs.core.enums.SlaveType; +import com.zy.acs.wcs.core.model.DevpSlave; +import com.zy.acs.wcs.core.model.Task; +import com.zy.acs.wcs.core.model.protocol.StaProtocol; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.text.MessageFormat; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 杈撻�佺嚎绾跨▼ + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class SiemensDevpThread implements Runnable, DevpThread { + + public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ + add(101); + add(102); + add(103); + add(104); + add(105); + add(106); + add(107); + add(108); + add(109); + add(110); + add(111); + add(112); + add(113); + add(114); + add(115); + add(116); // 渚ч潰浠� index 16寮�濮� 闀垮害12 + add(201); + add(202); + add(203); + add(204); + add(205); + add(206); + add(207); + add(208); + add(209); + add(210); + add(211); + add(212); + }}; + + public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ + add(301); + add(302); + add(303); + add(304); + add(305); + add(306); + add(307); + add(308); + }}; + + // 姝i潰5涓潯鐮佹壂鎻忕珯 + public static final ArrayList<Integer> barcodeSite2 = new ArrayList<Integer>() {{ + add(102); + add(105); + add(108); + add(111); + add(114); + }}; + + // 渚ч潰涓変釜鏉$爜鎵弿绔� + public static final ArrayList<Integer> barcodeSite = new ArrayList<Integer>() {{ + add(202); + add(206); + add(211); + }}; + + /** + * 鍏ュ嚭搴撴ā寮� + * 0锛氭湭鐭� + * 1锛氬叆搴撳惎鍔ㄤ腑 + * 2.鍏ュ簱妯″紡 + * 3.鍑哄簱鍚姩涓� 锛堜笉鑳界敓鎴愬叆搴撳伐浣滄。锛� + * 4.鍑哄簱妯″紡 + */ + public IoModeType ioModeOf1F1 = IoModeType.NONE; + public IoModeType ioModeOf1F2 = IoModeType.NONE; + public IoModeType ioModeOf1F3 = IoModeType.NONE; + public IoModeType ioModeOf1F4 = IoModeType.NONE; + public IoModeType ioModeOf1F5 = IoModeType.NONE; + + public IoModeType ioModeOf2F1 = IoModeType.NONE; + public IoModeType ioModeOf2F2 = IoModeType.NONE; + public IoModeType ioModeOf2F3 = IoModeType.NONE; + + private DevpSlave slave; + private SiemensS7Net siemensS7Net; + private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); + + /** + * 鏉$爜鏁伴噺 + */ + private int barcodeSize = 8; + + public SiemensDevpThread(DevpSlave slave) { + this.slave = slave; + } + + + private ArrayList<Integer> getStaNo() { + switch (slave.getId()) { + case 1: + return staNos1; + case 2: + return staNos2; + default: + throw new CoolException("鏈嶅姟鍣ㄥ紓甯�"); + } + } + + @Override + @SuppressWarnings("InfiniteLoopStatement") + public void run() { + connect(); + while (true) { + try { + int step = 1; + Task task = MessageQueue.poll(SlaveType.Devp, slave.getId()); + if (task != null) { + step = task.getStep(); + } + switch (step) { + // 璇绘暟鎹� + case 1: + read(); + break; + // 鍐欐暟鎹� ID+鐩爣绔� + case 2: + write((StaProtocol) task.getData()); + read(); + break; + default: + break; + } + Thread.sleep(400); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + /** + * 鍒濆鍖栫珯鐐圭姸鎬� + */ + private void initSite() { + ArrayList<Integer> staNos = getStaNo(); + // 绔欑偣缂栧彿 + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo((short) 0); // ID + staProtocol.setAutoing(false); // 鑷姩 + staProtocol.setLoading(false); // 鏈夌墿 + staProtocol.setInEnable(false); // 鍙叆 + staProtocol.setOutEnable(false); // 鍙嚭 + staProtocol.setEmptyMk(false); // 绌烘澘淇″彿 + staProtocol.setStaNo((short) 0); // 鐩爣绔� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + + @Override + public boolean connect() { + boolean result = false; + siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); + siemensS7Net.setRack(slave.getRack().byteValue()); + siemensS7Net.setSlot(slave.getSlot().byteValue()); + OperateResult connect = siemensS7Net.ConnectServer(); + if (connect.IsSuccess) { + result = true; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + log.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); +// deviceErrorService.addDeviceError("devp", slave.getId(), "杈撻�佺嚎plc杩炴帴澶辫触"); + initSite(); + } + siemensS7Net.ConnectClose(); + return result; + } + + /** + * 璇诲彇鐘舵�� ====> 鏁村潡plc + */ + private void read() throws InterruptedException { + // 鏇存柊鍏ュ嚭搴撴ā寮� + updateIoMode(); + + ArrayList<Integer> staNos = getStaNo(); + int staNoSize = staNos.size(); + OperateResultExOne<byte[]> result; + if (slave.getId() == 1) { + // 璇绘闈㈣揣浣嶄俊鎭弽棣� + result = siemensS7Net.Read("DB101.0", (short) (16 * 8)); + if (result.IsSuccess) { + for (int i = 0; i < 16; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 宸ヤ綔鍙� + + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4)); // 鐩爣绔� + + boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 2); + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 + staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� + staProtocol.setHigh(status[6]); // 楂樺簱浣� + staProtocol.setLow(status[7]); // 浣庡簱浣� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + // 璇讳晶闈㈣揣浣嶄俊鎭弽棣� + OperateResultExOne<byte[]> resultCm = siemensS7Net.Read("DB101.800", (short) (12 * 8)); + if (resultCm.IsSuccess) { + for (int i = 16; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(resultCm.Content, (i - 16) * 8)); // 宸ヤ綔鍙� + + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(resultCm.Content, (i - 16) * 8 + 4)); // 鐩爣绔� + + boolean[] status = siemensS7Net.getByteTransform().TransBool(resultCm.Content, (i - 16) * 8 + 6, 2); + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 + staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� + staProtocol.setHigh(status[6]); // 楂樺簱浣� + staProtocol.setLow(status[7]); // 浣庡簱浣� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + // 璇诲彇姝i潰鏉$爜 + OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB103.0", (short) (5 * 40)); + if (result3.IsSuccess) { + for (int i = 0; i < 5; i++) { + String barcode = siemensS7Net.getByteTransform().TransString(result3.Content, i * 40, 40, "UTF-8"); + if (!Cools.isEmpty()) { + barcode = barcode.trim(); + } + List<String> barcodeList = Arrays.stream(barcode.split(";")).collect(Collectors.toList()); + Iterator<String> iterator = barcodeList.iterator(); + while (iterator.hasNext()) { + String next = iterator.next(); + if (next.length() == 6) { + barcode = next; + iterator.remove(); + break; + } + } + + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + StaProtocol staProtocol = station.get(barcodeSite2.get(i)); + if (staProtocol != null) { + while (iterator.hasNext()) { + String next = iterator.next(); + if (next.length() < 7 || next.length() > 10 || !next.matches("[0-9]*")) { + iterator.remove(); + } + } + staProtocol.setMatIdList(barcodeList); + } + } + } + + // 璇诲彇姝i潰鏉$爜 +// OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.1404", (short) (16 * 8)); +// if (result2.IsSuccess) { +// for (int i = 0; i < 16; i++) { +// int barcodeId = 0; +// switch (i) { +// case 1: +// barcodeId = 1; +// break; +// case 4: +// barcodeId = 2; +// break; +// case 7: +// barcodeId = 3; +// break; +// case 10: +// barcodeId = 4; +// break; +// case 13: +// barcodeId = 5; +// break; +// default: +// } +// if (barcodeId != 0) { +// String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 6, "UTF-8"); +// BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcodeId); +// if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { +// barcodeThread.setBarcode(barcode); +// } +// } +// } +// } + + // 璇诲彇渚ч潰鏉$爜 + OperateResultExOne<byte[]> resultCM2 = siemensS7Net.Read("DB101.2574", (short) (3 * 4 * 6)); + if (resultCM2.IsSuccess) { + for (int i = 8; i >= 6; i--) { + BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i); + List<String> barcodes = new ArrayList<>(); + for (int j = 0; j < 4; j++) { + String barcode1 = siemensS7Net.getByteTransform().TransString(resultCM2.Content, (8 - i) * 24 + j * 6, 6, "UTF-8"); + if (!Cools.isEmpty(barcode1) && !barcode1.equals("000000") && !barcode1.equals("NoRead")) { + barcodes.add(barcode1); + } + } + String barcode = String.join("#", barcodes); + if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { + barcodeThread.setBarcode(barcode); + } + } + } + + // 璇诲彇姝i潰澶栧舰妫�娴� + OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.936", (short) (16 * 8)); + if (resultErr1.IsSuccess) { + for (int i = 0; i < 16; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, i * 2, 1); + staProtocol.setFrontErr(status1[0]); + staProtocol.setBackErr(status1[1]); + staProtocol.setHighErr(status1[2]); + staProtocol.setLeftErr(status1[3]); + staProtocol.setRightErr(status1[4]); + staProtocol.setWeightErr(status1[5]); + staProtocol.setBarcodeErr(status1[6]); + } + } + + // 璇诲彇渚ч潰澶栧舰妫�娴� + OperateResultExOne<byte[]> resultErrCM1 = siemensS7Net.Read("DB101.1336", (short) (12 * 8)); + if (resultErrCM1.IsSuccess) { + for (int i = 16; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErrCM1.Content, (i - 16) * 2, 1); + staProtocol.setFrontErr(status1[0]); + staProtocol.setBackErr(status1[1]); + staProtocol.setHighErr(status1[2]); + staProtocol.setLeftErr(status1[3]); + staProtocol.setRightErr(status1[4]); + staProtocol.setWeightErr(status1[5]); + staProtocol.setBarcodeErr(status1[6]); + } + } + + // 璇绘闈㈡晠闅滃弽棣� + OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (16 * 4)); + if (resultErr.IsSuccess) { + for (int i = 0; i < 16; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1); + StaProtocol staProtocol = station.get(siteId); + staProtocol.setBreakerErr(status[0]); + staProtocol.setInfraredErr(status[1]); + staProtocol.setOutTimeErr(status[2]); + staProtocol.setSeizeSeatErr(status[3]); + staProtocol.setWrkYgoodsN(status[4]); + staProtocol.setInverterErr(status[5]); + staProtocol.setContactErr(status[6]); + staProtocol.setUpcontactErr(status[7]); + + } + } + + // 璇讳晶闈㈡晠闅滃弽棣� + OperateResultExOne<byte[]> resultErrCM = siemensS7Net.Read("DB101.2540.0", (short) (12 * 4)); + if (resultErrCM.IsSuccess) { + for (int i = 16; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErrCM.Content, (i - 16) * 4, 1); + StaProtocol staProtocol = station.get(siteId); + staProtocol.setBreakerErr(status[0]); + staProtocol.setInfraredErr(status[1]); + staProtocol.setOutTimeErr(status[2]); + staProtocol.setSeizeSeatErr(status[3]); + staProtocol.setWrkYgoodsN(status[4]); + staProtocol.setInverterErr(status[5]); + staProtocol.setContactErr(status[6]); + staProtocol.setUpcontactErr(status[7]); + + } + } + } else { + // 璇诲缃緭閫佺嚎璐т綅淇℃伅鍙嶉 + result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8)); + if (result.IsSuccess) { + for (int i = 0; i < staNoSize; i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8)); // 宸ヤ綔鍙� + + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4)); // 鐩爣绔� + + boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 2); + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 + staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� + staProtocol.setHigh(status[6]); // 楂樺簱浣� + staProtocol.setLow(status[7]); // 浣庡簱浣� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + } + + if (result.IsSuccess) { + + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + log.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); + deviceErrorService.deleteDeviceError("devp", slave.getId()); + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); + deviceErrorService.addDeviceError("devp", slave.getId(), "璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐�"); + } + } + + + private void write(StaProtocol staProtocol) throws InterruptedException { + if (null == staProtocol) { + return; + } + ArrayList<Integer> staNos = getStaNo(); + + int index = staNos.indexOf(staProtocol.getSiteId()); + // 浠诲姟鍙峰湴鍧� + String workNoAddress; + // 鐩爣绔欏湴鍧� + String staNoAddress; + // 鐩爣绔欏湴鍧� + String heightAddress = null; + if (index < 16) { + workNoAddress = "DB100." + index * 4; + staNoAddress = "DB100." + (index * 4 + 2); + } else { + workNoAddress = "DB100." + (400 + (index - 16) * 4); + staNoAddress = "DB100." + (400 + (index - 16) * 4 + 2); + } + int i = barcodeSite2.indexOf(staProtocol.getSiteId()); + if (i != -1) { + heightAddress = "DB104." + (i * 2); + } + + OperateResult writeResult; + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 + boolean writeFlag = false; + while (writeCount < 5) { + if (!Cools.isEmpty(staProtocol.getHeight()) && heightAddress != null) { + OperateResult writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + log.info("鍐欏叆楂樺害鍦板潃锛歿},{}", heightAddress, writeResult3); + if (!writeResult3.IsSuccess) { + //fangzhi xierukushibai,jiu duoxiejici,meixunhuan + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); + if (!writeResult3.IsSuccess) { + writeResult3 = siemensS7Net.Write(heightAddress, Short.parseShort(staProtocol.getHeight())); // 鐩爣绔� + } + } + } + OperateResult writeResult1 = siemensS7Net.Write(workNoAddress, staProtocol.getWorkNo()); // 宸ヤ綔鍙� + OperateResult writeResult2 = siemensS7Net.Write(staNoAddress, staProtocol.getStaNo()); // 鐩爣绔� + if (writeResult1.IsSuccess && writeResult2.IsSuccess) { + Thread.sleep(200); + OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 2); + if (readResult.IsSuccess) { +// short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); +// short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); +// if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) { +// //浠诲姟鍛戒护鍐欏叆鎴愬姛 + writeFlag = true; + log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + break; +// } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 +// writeCount++; +// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", +// slave.getId(), JSON.toJSON(staProtocol), writeCount)); +// log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); +// } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + Thread.sleep(200); + } + + //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡 + if (!writeFlag) { + staProtocol = station.get(staProtocol.getSiteId()); + if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) { + staProtocol.setPakMk(true); + } + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); + log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); + +// //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒� +// boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol)); +// read();//璇诲彇1娆¤澶囩姸鎬� + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); + log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol)); + +// Integer siteId = staProtocol.getSiteId(); +// staProtocol = station.get(siteId); +// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { +// staProtocol.setPakMk(true); +// } + } + + + } + +// /** +// * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� +// */ +// private void write(StaProtocol staProtocol) throws InterruptedException { +// if (null == staProtocol) { +// return; +// } +// int index = staNos.indexOf(staProtocol.getSiteId()); +// short[] array = new short[2]; +// array[0] = staProtocol.getWorkNo(); +// array[1] = staProtocol.getStaNo(); +// OperateResult write = siemensS7Net.Write("DB100." + index*4, array); +// + + /// / OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 宸ヤ綔鍙� + /// / Thread.sleep(500); + /// / OperateResult write1 = siemensS7Net.Write("DB101." + index*2, staProtocol.getStaNo()); // 鐩爣绔� +// +// if (!write.IsSuccess) { +// staProtocol = station.get(staProtocol.getSiteId()); +// if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { +// staProtocol.setPakMk(true); +// } +// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); +// log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); +// } else { +// OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); +// log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂锛� {}", slave.getId(), JSON.toJSON(staProtocol)); +// +// Integer siteId = staProtocol.getSiteId(); +// staProtocol = station.get(siteId); +// if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { +// staProtocol.setPakMk(true); +// } +// } +// } + private void write2(StaProtocol staProtocol) throws InterruptedException { + if (null == staProtocol) { + return; + } + ArrayList<Integer> staNos = getStaNo(); + + int index = staNos.indexOf(staProtocol.getSiteId()); + short[] array = new short[2]; + array[0] = staProtocol.getWorkNo(); + array[1] = staProtocol.getStaNo(); + + OperateResult writeResult; + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 + boolean writeFlag = false; + while (writeCount < 5) { + writeResult = siemensS7Net.Write("DB100." + index * 4, array); // 宸ヤ綔鍙枫�佺洰鏍囩珯 + + if (writeResult.IsSuccess) { + Thread.sleep(200); + OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 4); + if (readResult.IsSuccess) { + short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); + short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); + if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) { + //浠诲姟鍛戒护鍐欏叆鎴愬姛 + writeFlag = true; + log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + + Date now = new Date(); + break; + } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + + } + Thread.sleep(200); + } + + //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡 + if (!writeFlag) { + staProtocol = station.get(staProtocol.getSiteId()); + if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) { + staProtocol.setPakMk(true); + } + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); + log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); + + //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒� + boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol)); + read();//璇诲彇1娆¤澶囩姸鎬� + return; + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); + //log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol)); + + Integer siteId = staProtocol.getSiteId(); + staProtocol = station.get(siteId); + if ((siteId == 101 || siteId == 201) && (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0)) { + staProtocol.setPakMk(true); + } + + } + + } + + + // 鏇存柊鍏ュ嚭搴撴ā寮� + private void updateIoMode() throws InterruptedException { + if (slave.getId() == 1 && this.ioModeOf1F1 != null) { + if (!siemensS7Net.Write("DB105.0", this.ioModeOf1F1.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎21F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F2 != null) { + if (!siemensS7Net.Write("DB105.2", this.ioModeOf1F2.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F3 != null) { + if (!siemensS7Net.Write("DB105.4", this.ioModeOf1F3.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F4 != null) { + if (!siemensS7Net.Write("DB105.6", this.ioModeOf1F4.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F4鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf1F5 != null) { + if (!siemensS7Net.Write("DB105.8", this.ioModeOf1F5.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎1F5鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + + + if (slave.getId() == 1 && this.ioModeOf2F1 != null) { + if (!siemensS7Net.Write("DB105.10", this.ioModeOf2F1.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎2F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf2F2 != null) { + if (!siemensS7Net.Write("DB105.12", this.ioModeOf2F2.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F1鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎2F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + if (slave.getId() == 1 && this.ioModeOf2F3 != null) { + if (!siemensS7Net.Write("DB105.14", this.ioModeOf2F3.id).IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎3F2鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={1}", slave.getId())); + log.error("鍐欏叆杈撻�佺嚎2F3鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎plc缂栧彿={}", slave.getId()); + } + } + } + + + /** + * 璁剧疆鍏ュ簱鏍囪 + */ + @Override + public void setPakMk(Integer siteId, boolean pakMk) { + StaProtocol staProtocol = station.get(siteId); + if (null != staProtocol) { + staProtocol.setPakMk(pakMk); + } + } + + @Override + public void close() { + siemensS7Net.ConnectClose(); + } + + +} diff --git a/zy-acs-wcs/src/main/resources/application-prod.yml b/zy-acs-wcs/src/main/resources/application-prod.yml new file mode 100644 index 0000000..d66ab98 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/application-prod.yml @@ -0,0 +1,60 @@ +wcs-slave: + doubleDeep: true #鍙屾繁 + doubleLocs: 1,4,5,8,9,12 #鍙屾繁搴撲綅鎺掑彿 + groupCount: 4 #涓�涓爢鍨涙満璐熻矗鐨勮揣鏋舵帓鏁� + + devp[0]: #杈撻�佺嚎 + id: 1 + ip: 10.49.210.41 + rack: 0 + port: 102 + slot: 0 + emptyInSta[0]: #绌烘澘鍏ュ簱鍙�0 + staNo: 210 + inSta[0]: #鍏ュ簱鍙�1 + staNo: 102 + backSta: 101 + barcode: ${wcs-slave.barcode[0].id} + outSta[0]: #鍑哄簱鍙�1 + staNo: 101 + + +# barcode[0]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.44 +# id: 1 +# barcode[1]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.45 +# id: 2 +# barcode[2]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.46 +# id: 3 +# barcode[3]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.47 +# id: 4 +# barcode[4]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.48 +# id: 5 +# barcode[5]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.67 +# id: 6 +# barcode[6]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.66 +# id: 7 +# barcode[7]: #鏉$爜鎵弿浠� +# port: 51236 +# ip: 10.49.210.65 +# id: 8 + + + + + + + diff --git a/zy-acs-wcs/src/main/resources/application.yml b/zy-acs-wcs/src/main/resources/application.yml new file mode 100644 index 0000000..45bced1 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/application.yml @@ -0,0 +1,47 @@ +server: + port: 9090 + servlet: + context-path: /@pom.build.finalName@ + +spring: + application: + name: @pom.build.finalName@ + datasource: + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + url: jdbc:sqlserver://127.0.0.1:1433;databasename=cosmawcs_cc + username: sa + password: sa@123 + + mvc: + static-path-pattern: /** + redis: + host: localhost + port: 6379 + database: 0 +# password: xltys1995 + profiles: + active: prod + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml +# global-config: +# field-strategy: 0 + +logging: + path: /stock/out/@pom.build.finalName@/logs + +super: + pwd: xltys1995 + +swagger: + enable: false + +#License鐩稿叧閰嶇疆 +license: + subject: glccwcs + publicAlias: publicCert + storePass: public_zhongyang_123456789 + licensePath: license.lic + publicKeysStorePath: publicCerts.keystore + + diff --git a/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar b/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000..e3520b3 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar b/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar new file mode 100644 index 0000000..4432116 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar b/zy-acs-wcs/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar new file mode 100644 index 0000000..2aff9ec --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/rxtx-2.1.7.jar b/zy-acs-wcs/src/main/resources/lib/rxtx-2.1.7.jar new file mode 100644 index 0000000..84e5f01 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/rxtx-2.1.7.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/simple-xml-2.7.1.jar b/zy-acs-wcs/src/main/resources/lib/simple-xml-2.7.1.jar new file mode 100644 index 0000000..ede93e6 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/simple-xml-2.7.1.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/slf4j-api-1.7.30.jar b/zy-acs-wcs/src/main/resources/lib/slf4j-api-1.7.30.jar new file mode 100644 index 0000000..29ac26f --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/slf4j-api-1.7.30.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/slf4j-simple-1.7.30.jar b/zy-acs-wcs/src/main/resources/lib/slf4j-simple-1.7.30.jar new file mode 100644 index 0000000..6debaa9 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/slf4j-simple-1.7.30.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/stax-1.2.0.jar b/zy-acs-wcs/src/main/resources/lib/stax-1.2.0.jar new file mode 100644 index 0000000..0df112a --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/stax-1.2.0.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/stax-api-1.0.1.jar b/zy-acs-wcs/src/main/resources/lib/stax-api-1.0.1.jar new file mode 100644 index 0000000..d9a1665 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/stax-api-1.0.1.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/uia-comm-0.5.1.jar b/zy-acs-wcs/src/main/resources/lib/uia-comm-0.5.1.jar new file mode 100644 index 0000000..6cb02f3 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/uia-comm-0.5.1.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/uia-message-0.6.0.jar b/zy-acs-wcs/src/main/resources/lib/uia-message-0.6.0.jar new file mode 100644 index 0000000..2ccc43e --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/uia-message-0.6.0.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/uia-utils-0.2.0.jar b/zy-acs-wcs/src/main/resources/lib/uia-utils-0.2.0.jar new file mode 100644 index 0000000..e0b2164 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/uia-utils-0.2.0.jar Binary files differ diff --git a/zy-acs-wcs/src/main/resources/lib/xpp3-1.1.3.3.jar b/zy-acs-wcs/src/main/resources/lib/xpp3-1.1.3.3.jar new file mode 100644 index 0000000..1396bd5 --- /dev/null +++ b/zy-acs-wcs/src/main/resources/lib/xpp3-1.1.3.3.jar Binary files differ -- Gitblit v1.9.1