src/main/java/com/zy/asrs/controller/ApiConfigController.java
@@ -1,17 +1,16 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.ApiConfig; import com.zy.asrs.service.ApiConfigService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.ApiConfig; import com.zy.asrs.service.ApiConfigService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,9 @@ EntityWrapper<ApiConfig> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(apiConfigService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/ApiLogController.java
@@ -1,17 +1,16 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.ApiLog; import com.zy.asrs.service.ApiLogService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.ApiLog; import com.zy.asrs.service.ApiLogService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,9 @@ EntityWrapper<ApiLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } wrapper.orderDesc(Collections.singleton("create_time")); return R.ok(apiLogService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasCrnErrorController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasCrnError> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basCrnErrorService.selectPage(new Page<>(curr, limit), wrapper)); } @@ -56,6 +58,7 @@ } } } @RequestMapping(value = "/basCrnError/add/auth") @ManagerAuth(memo = "堆垛机异常码添加") public R add(BasCrnError basCrnError) { src/main/java/com/zy/asrs/controller/BasCrnStatusController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasCrnStatus> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } else { wrapper.orderBy("sts_no", true); } return R.ok(basCrnStatusService.selectPage(new Page<>(curr, limit), wrapper)); src/main/java/com/zy/asrs/controller/BasCrnpController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasCrnp> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basCrnpService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasDevpController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasDevp> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basDevpService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasErrLogController.java
src/main/java/com/zy/asrs/controller/BasLocStsController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasLocSts> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basLocStsService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasPlcerrorController.java
@@ -1,22 +1,24 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.BasPlcerror; import com.zy.asrs.service.BasPlcerrorService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.BasPlcerror; import com.zy.asrs.service.BasPlcerrorService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class BasPlcerrorController extends BaseController { @@ -40,7 +42,9 @@ EntityWrapper<BasPlcerror> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basPlcerrorService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasPlcerrorLogController.java
@@ -1,22 +1,24 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.BasPlcerrorLog; import com.zy.asrs.service.BasPlcerrorLogService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.BasPlcerrorLog; import com.zy.asrs.service.BasPlcerrorLogService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class BasPlcerrorLogController extends BaseController { @@ -40,7 +42,9 @@ EntityWrapper<BasPlcerrorLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basPlcerrorLogService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasWrkIotypeController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasWrkIotype> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basWrkIotypeService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/BasWrkStatusController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<BasWrkStatus> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(basWrkStatusService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/CommandInfoController.java
@@ -1,18 +1,17 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.service.CommandInfoService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.service.CommandInfoService; import com.zy.common.web.BaseController; import com.zy.core.cache.MessageQueue; import com.zy.core.enums.CommandStatusType; @@ -48,7 +47,9 @@ EntityWrapper<CommandInfo> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(commandInfoService.selectPage(new Page<>(curr, limit), wrapper)); } @@ -62,7 +63,9 @@ EntityWrapper<CommandInfo> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(commandInfoService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/CommandInfoLogController.java
@@ -1,23 +1,24 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.entity.CommandInfoLog; import com.zy.asrs.service.CommandInfoLogService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.CommandInfoLog; import com.zy.asrs.service.CommandInfoLogService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class CommandInfoLogController extends BaseController { @@ -35,7 +36,9 @@ EntityWrapper<CommandInfoLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(commandInfoLogService.selectPage(new Page<>(curr, limit), wrapper)); } @@ -55,7 +58,9 @@ EntityWrapper<CommandInfoLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(commandInfoLogService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/ConsoleController.java
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -13,7 +13,10 @@ import com.zy.asrs.domain.vo.CrnListVo; import com.zy.asrs.domain.vo.CrnMsgTableVo; import com.zy.asrs.domain.vo.CrnStateTableVo; import com.zy.asrs.entity.*; import com.zy.asrs.entity.BasCrnError; import com.zy.asrs.entity.BasCrnp; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.service.BasCrnpService; import com.zy.asrs.service.LocMastService; @@ -39,7 +42,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -57,7 +59,6 @@ private String wmsUrl; @Value("${wms.movePath}") private String movePath; @Autowired @@ -368,7 +369,6 @@ } /****************************************************************/ /************************** 手动操作 ******************************/ /****************************************************************/ @@ -640,6 +640,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "切换半手动模式") @PostMapping("/crn/operator/semiAutomatic") public R crnsemiAutomatic(CrnOperatorParam param){ @@ -655,6 +656,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "切换手动模式") @PostMapping("/crn/operator/hand") public R onlineWrk1(CrnOperatorParam param){ @@ -670,6 +672,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "申请完成任务") @PostMapping("/crn/operator/onlineWrk1") public R onlineWrk2(CrnOperatorParam param){ @@ -685,6 +688,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "申请取消任务") @PostMapping("/crn/operator/onlineWrk2") public R onlineWrk3(CrnOperatorParam param){ @@ -700,6 +704,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "清除联机任务") @PostMapping("/crn/operator/onlineWrk3") public R onlineWrk4(CrnOperatorParam param){ @@ -715,6 +720,7 @@ return crnControl2(command)?R.ok():R.error(); } @ManagerAuth(memo = "恢复联机任务") @PostMapping("/crn/operator/onlineWrk4") public R crnHand(CrnOperatorParam param){ @@ -748,7 +754,6 @@ } private boolean crnControl2(CrnCommand command){ if (command.getCrnNo() == null) { throw new CoolException("请选择堆垛机"); @@ -778,9 +783,6 @@ } return false; } private boolean crnControl(CrnCommand command){ src/main/java/com/zy/asrs/controller/DataResourceController.java
@@ -4,19 +4,22 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.DataResource; import com.zy.asrs.service.DataResourceService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.DataResource; import com.zy.asrs.service.DataResourceService; import com.zy.common.utils.YamlUtils; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class DataResourceController extends BaseController { @@ -42,7 +45,9 @@ EntityWrapper<DataResource> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(dataResourceService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/DeviceErrorController.java
@@ -1,17 +1,16 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.common.DateUtils; import com.zy.asrs.entity.DeviceError; import com.zy.asrs.service.DeviceErrorService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.DeviceError; import com.zy.asrs.service.DeviceErrorService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,9 @@ EntityWrapper<DeviceError> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(deviceErrorService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/LocDetlController.java
@@ -61,7 +61,9 @@ excludeTrash(param); convert(param, wrapper); allLike(LocDetl.class, param.keySet(), wrapper, condition); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(locDetlService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -10,13 +10,11 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.param.LocMastInitParam; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.LocMastService; import com.zy.common.entity.Parameter; import com.zy.common.model.Shelves; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -61,7 +59,9 @@ excludeTrash(param); EntityWrapper<LocMast> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(locMastService.selectPage(new Page<>(curr, limit), wrapper.eq("status",0))); } src/main/java/com/zy/asrs/controller/MapController.java
@@ -7,7 +7,9 @@ import com.zy.asrs.service.LocMastService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.io.*; import java.util.ArrayList; src/main/java/com/zy/asrs/controller/MonitorController.java
@@ -236,6 +236,7 @@ .add("usedPr", usedPr) ); } /** * 自动补零 */ @@ -260,6 +261,7 @@ /** * x轴单位转换 * * @param dot y轴数值保留小数位 */ private List<Map<String, Object>> convert(List<Map<String, Object>> list, StatsType statsType, int dot){ @@ -290,6 +292,7 @@ int id; int start; int end; StatsType(int id, int start, int end) { this.id = id; this.start = start; @@ -307,6 +310,7 @@ } } /** * 异常通知 */ src/main/java/com/zy/asrs/controller/OpenController.java
@@ -3,18 +3,17 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.AppAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.fasterxml.jackson.databind.ObjectMapper; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.*; import com.zy.asrs.entity.param.CarryParam; import com.zy.asrs.entity.param.CrnStatusParam; import com.zy.asrs.entity.param.TaskCreateParam; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.web.BaseController; import com.zy.core.model.DevpSlave; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -22,11 +21,11 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.lang.reflect.Field; import java.util.*; import static org.apache.ibatis.ognl.OgnlRuntime.setFieldValue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @RestController @@ -88,6 +87,69 @@ } } //任务下发接口 @PostMapping("/inboundTaskSend") @Transactional public HashMap<String, Object> inboundTaskSend(@RequestBody HashMap<String, Object> hashMap) { String jsonString = JSON.toJSONString(hashMap.get("TaskList")); List<CarryParam> params = JSONObject.parseArray(jsonString, CarryParam.class); HashMap<String, Object> map = new HashMap<>(); List<WMSAndAGVInterfaceParam> params1 = new ArrayList<>(); for (CarryParam param : params) { if (Cools.isEmpty(param)) { map.put("ReturnStatus", 1); map.put("ErrorMessage", "参数为空!"); return map; } else if (Cools.isEmpty(param.getTaskNo())) { map.put("ReturnStatus", 1); map.put("ErrorMessage", "任务号为空!"); return map; } else if (Cools.isEmpty(param.getStereoscopicTaskType())) { map.put("ReturnStatus", 1); map.put("ErrorMessage", "任务类型为空!"); return map; } String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo()); param.setStartPoint(fusion); LocMast locMast = locMastService.selectByLocNo(param.getStartPoint()); if (Cools.isEmpty(locMast)) { map.put("ReturnStatus", 1); map.put("ErrorMessage", "初始库位无法找到!"); return map; } HashMap<String, Object> r = new HashMap<>(); if (param.getStereoscopicTaskType() == 1) { //出库任务创建 StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("type_no", 1) .eq("crn_no", locMast.getCrnNo()) .eq("stn_no", param.getTerminalNo())); if (Cools.isEmpty(staDesc)) { map.put("ReturnStatus", 1); map.put("ErrorMessage", "入库路径不存在!"); return map; } r = openService.taskCreate(new TaskCreateParam(param, staDesc.getCrnNo())); if (r.get("ReturnStatus").equals(1)) { return r; } } apiLogService.save("Wms入库任务下发接口" , request.getRemoteAddr() + request.getRequestURI() , "" , request.getRemoteAddr() , JSON.toJSONString(param) , r.toString() , true ); } map.put("ReturnStatus", 0); map.put("ErrorMessage", "ok"); return map; } //任务下发接口 @PostMapping("/outboundTaskSend") @@ -146,7 +208,7 @@ return r; } } apiLogService.save("Wms任务下发接口" apiLogService.save("Wms出移库任务下发接口" ,request.getRemoteAddr()+request.getRequestURI() ,"" ,request.getRemoteAddr() @@ -279,6 +341,7 @@ return list; } private static void setFieldValue(Object obj, Field field, Object value) throws IllegalAccessException { Class<?> fieldType = field.getType(); src/main/java/com/zy/asrs/controller/ReportQueryController.java
@@ -22,6 +22,7 @@ /** * 日志统计控制器层 * * @author admin * @date 2018年11月23日 */ @@ -158,6 +159,7 @@ /** * 日入库汇总查询 * * @return */ @RequestMapping("/viewWorkCountInList.action") src/main/java/com/zy/asrs/controller/SiteController.java
@@ -9,7 +9,7 @@ import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.utils.CommandUtils; import com.zy.core.cache.MessageQueue; import com.zy.core.DevpThread; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; @@ -17,12 +17,14 @@ import com.zy.core.model.Task; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.DevpThread; import com.zy.core.thread.SiemensDevpThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 输送设备接口 @@ -46,8 +48,8 @@ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); Map<String, Object> map2 = new HashMap<>(); map2.put("floor", 2); map2.put("modeVal", devpThread.ioModeOf2F.id); map2.put("modeDesc", devpThread.ioModeOf2F.desc); map2.put("modeVal", devpThread.ioModeOf1F.id); map2.put("modeDesc", devpThread.ioModeOf1F.desc); res.add(map2); } return R.ok().add(res); @@ -70,7 +72,9 @@ vo.setDevNo(devp.getDevNo()); // 站点编号 list.add(vo); StaProtocol staProtocol = station.get(devp.getDevNo()); if (null == staProtocol) { continue; } if (null == staProtocol) { continue; } vo.setWorkNo(staProtocol.getWorkNo()); // 工作号 vo.setAutoing(staProtocol.isAutoing()?"Y":"N"); // 自动 vo.setLoading(staProtocol.isLoading()?"Y":"N"); // 有物 @@ -102,7 +106,9 @@ vo.setDevNo(devp.getDevNo()); // 站点编号 list.add(vo); StaProtocol staProtocol = station.get(devp.getDevNo()); if (null == staProtocol) { continue; } if (null == staProtocol) { continue; } vo.setWorkNo(staProtocol.getWorkNo()); // 工作号 vo.setAutoing(staProtocol.isAutoing()?"Y":"N"); // 自动 vo.setLoading(staProtocol.isLoading()?"Y":"N"); // 有物 @@ -232,6 +238,7 @@ } return R.error("更新失败"); } @PostMapping("/detl/out") @ManagerAuth(memo = "修改站点数据") public R siteDetlout(@RequestParam Integer devNo, @@ -281,6 +288,7 @@ } return R.error("更新失败"); } @PostMapping("/detl/in") @ManagerAuth(memo = "修改站点数据") public R siteDetlint(@RequestParam Integer devNo, src/main/java/com/zy/asrs/controller/StaDescController.java
src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -5,21 +5,18 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.core.common.R; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.CommandInfoService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.TaskWrkService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.zy.common.utils.HttpHandler; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; @@ -67,7 +64,9 @@ EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(taskWrkService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/TaskWrkLogController.java
@@ -1,21 +1,19 @@ package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.core.common.R; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.entity.TaskWrkLog; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.TaskWrkLogService; import com.core.annotations.ManagerAuth; import com.core.common.BaseRes; import com.core.common.Cools; import com.core.common.R; import com.zy.common.utils.HttpHandler; import com.zy.common.web.BaseController; import lombok.extern.slf4j.Slf4j; @@ -24,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; @Slf4j @RestController public class TaskWrkLogController extends BaseController { @@ -54,7 +53,9 @@ EntityWrapper<TaskWrkLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } wrapper.orderDesc(Collections.singleton("create_time")); return R.ok(taskWrkLogService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/WorkController.java
src/main/java/com/zy/asrs/controller/WrkDetlController.java
src/main/java/com/zy/asrs/controller/WrkDetlLogController.java
@@ -62,8 +62,9 @@ EntityWrapper<WrkDetlLog> wrapper = new EntityWrapper<>(); excludeTrash(param); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} else { if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } else { wrapper.orderBy("modi_time", false); } return R.ok(wrkDetlLogService.selectPage(new Page<>(curr, limit), wrapper)); src/main/java/com/zy/asrs/controller/WrkLastnoController.java
@@ -40,7 +40,9 @@ excludeTrash(param); EntityWrapper<WrkLastno> wrapper = new EntityWrapper<>(); convert(param, wrapper); if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} if (!Cools.isEmpty(orderByField)) { wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType)); } return R.ok(wrkLastnoService.selectPage(new Page<>(curr, limit), wrapper)); } src/main/java/com/zy/asrs/controller/WrkMastController.java
src/main/java/com/zy/asrs/controller/WrkMastLogController.java
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,7 +7,6 @@ import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; import com.zy.asrs.controller.OpenController; import com.zy.asrs.controller.SiteController; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; @@ -16,7 +15,10 @@ import com.zy.asrs.entity.param.Result; import com.zy.asrs.entity.param.StorageEscalationParam; import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.mapper.*; import com.zy.asrs.mapper.BasCrnErrorMapper; import com.zy.asrs.mapper.StaDescMapper; import com.zy.asrs.mapper.TaskWrkMapper; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.*; import com.zy.asrs.utils.CommandUtils; import com.zy.asrs.utils.Utils; @@ -31,7 +33,6 @@ import com.zy.core.model.DevpSlave; import com.zy.core.model.LedSlave; import com.zy.core.model.Task; import com.zy.core.model.command.CommandPackage; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; @@ -39,20 +40,17 @@ import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.LedThread; import com.zy.core.thread.SiemensDevpThread; import com.zy.system.entity.Config; import com.zy.system.service.ConfigService; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.io.IOException; import java.util.*; import java.util.concurrent.CompletableFuture; /** * 立体仓库WCS系统主流程业务 @@ -336,88 +334,29 @@ errMsg = "超重"; back = true; } if (!back && staProtocol.isBarcodeErr()) { errMsg = "扫码失败"; back = true; } // if (!back && staProtocol.isBarcodeErr()) { // errMsg = "扫码失败"; // back = true; // } // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && workNo >= 9990 && staProtocol.isPakMk()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); String BoxNo = ""; if (barcodeThread != null) { BoxNo = barcodeThread.getBarcode(); TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", BoxNo)); if (!Cools.isEmpty(taskWrk1)) { log.info("托盘码:" + BoxNo + "任务档存在"); if (taskWrk1.getIoType() == 1 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) { StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk1.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); if (Cools.isEmpty(staDesc)) { return; } else { continue; } } } if (back) { storageEscalationParam.setWCSStatus(1); storageEscalationParam.setWCSErrorMessage(storageEscalationParam.getWCSErrorMessage() + errMsg); // led 异常显示 if (ledThread != null) { String errorMsg = errMsg; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } } } storageEscalationParam.setBoxNo(BoxNo); //是否满板 1满板 0空板 storageEscalationParam.setStaType(staProtocol.isEmptyMk() ? 0 : 1); //库位类型 1高库位 0低库位 storageEscalationParam.setLocType(staProtocol.isHigh() ? 1 : 0); storageEscalationParam.setTerminalNo(staProtocol.getSiteId()); log.info("组托入库={}", storageEscalationParam); String response = ""; Boolean success = false; try { response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(inboundTaskApplyPath) .setJson(JSON.toJSONString(storageEscalationParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (back) { staProtocol.setWorkNo((short) 9991); staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } else { if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("ReturnStatus")) && jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) { Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class); // 创新一个入库工作档 TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo()); if (Cools.isEmpty(taskWrk)) { taskWrk = createTask1(result, BoxNo,staProtocol.getSiteId()); if (Cools.isEmpty(taskWrk)) { log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint()); } else { taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId())); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().orderBy("create_time")); if (taskWrk != null) { HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("TaskNo", taskWrk.getTaskNo()); try { //开始上报,任务开始时,WCS回调WMS response = new HttpHandler.Builder() String response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath(taskStatusFeedbackPath) .setJson(JSON.toJSONString(hashMap)) @@ -438,67 +377,12 @@ , response , bool ); } catch (Exception e) { } } } else { // led 异常显示 if (ledThread != null) { String errorMsg = "已有入库任务!!!"; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } staProtocol.setWorkNo((short) 9991); staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } else { // led 异常显示 if (ledThread != null) { String errorMsg = jsonObject.getString("ErrorMessage"); MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } staProtocol.setWorkNo((short) 9991); staProtocol.setStaNo(inSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } } catch (Exception e) { log.error("请求入库调用接口失败"); log.error("异常信息打印:" + e); try { BasDevp basDevp = basDevpService.selectById(inSta.getStaNo()); if (Cools.isEmpty(basDevp)) { log.error("站点号异常" + inSta.getStaNo()); } else if (basDevp.getStaErr() != 0) { basDevp.setStaErr(2); basDevpService.updateById(basDevp); } } catch (Exception e1) { // 退回 log.error("扫码检测程序异常" + inSta.getStaNo() + "异常信息" + e1); } } finally { apiLogService.save("wms请求入库货位接口" , wmsUrl + inboundTaskApplyPath , null , "127.0.0.1" , JSON.toJSONString(storageEscalationParam) , response , success ); } log.info("入库请求参数=" + JSON.toJSONString(BoxNo)); log.info("入库请求返回参数=" + JSON.toJSONString(response)); } } } } catch (Exception e) { } } catch ( Exception e) { log.error("generateStoreWrkFile e", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } @@ -969,28 +853,28 @@ if (taskWrk == null) { continue; } log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getStnNo().shortValue()); boolean offer = false; try { offer = MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol)); } catch (Exception e) { log.error("下发输送线任务失败:异常:" + e); log.error("下发输送线任务失败:异常:offer:" + offer); } // log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk)); //// R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); // staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); // staProtocol.setStaNo(staDesc.getStnNo().shortValue()); // boolean offer = false; // try { // offer = MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol)); // } catch (Exception e) { // log.error("下发输送线任务失败:异常:" + e); // log.error("下发输送线任务失败:异常:offer:" + offer); // } // JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r)); if (offer) { log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); // if (offer) { // log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); taskWrk.setStatus(5); taskWrk.setWrkSts(14); taskWrkService.updateById(taskWrk); } else { log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); // log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); } // } else { // log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk)); //// log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r)); // } } } catch (Exception e) { log.error("出库到出库站异常:异常信息:" + e); @@ -1890,6 +1774,7 @@ } //----------------------------------------------------------电视机显示处理---------------------------------------- /** * 其他 ===>> LED显示器复位,显示默认信息 */ src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.TaskCreateParam; import com.zy.asrs.entity.param.TaskOverParam; import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam; import com.zy.asrs.entity.param.TaskCreateParam; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; @@ -53,6 +52,8 @@ @Value("${wms.url}") private String wmsUrl; public ArrayList<String> wharfCode1 = new ArrayList<String>() {{ add("J-1101"); add("J-1103"); src/main/java/com/zy/core/MainProcess.java
@@ -9,7 +9,6 @@ import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; import java.util.ArrayList; /** * WCS主流程 @@ -47,11 +46,11 @@ } // 演示 mainService.crnDemoOfLocMove1(); //mainService.crnDemoOfLocMove1(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile1(); // 组托 // 入库 ===>> 拣料盘点回库,输送线工作号保留的情况下入库 mainService.PickingAndReturningToTheWarehouse(); //mainService.PickingAndReturningToTheWarehouse(); // 出库 ===>> 堆垛机出库站到出库站 mainService.crnStnToOutStn(); // 入出库 ===>> 堆垛机入出库作业下发 src/main/java/com/zy/core/ServerBootstrap.java
@@ -88,20 +88,20 @@ 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); } // 初始化LED线程 log.info("初始化LED线程..................................................."); 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 barcode : slaveProperties.getBarcode()) { // BarcodeThread barcodeThread = new BarcodeThread(barcode); //// new Thread(barcodeThread).start(); // SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread); // } // // 初始化LED线程 // log.info("初始化LED线程..................................................."); // 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()) { src/main/java/com/zy/core/model/CrnSlave.java
@@ -31,9 +31,6 @@ @Data public static class CrnStn { // 输送线plc编号 private Integer devpPlcId; // 堆垛机站点编号 private Integer staNo; @@ -49,6 +46,9 @@ //退回站点 private Integer backSta; private Integer devpPlcId; } } src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -17,12 +17,14 @@ import com.zy.core.CrnThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.CrnSlave; import com.zy.core.model.Task; import com.zy.core.model.command.CommandPackage; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -190,10 +192,15 @@ crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48)); crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52)); // TODO //更新虚拟输送线状态 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); //devpThread.setData(); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId())); // 复位信号 if (crnProtocol.getTaskFinish() == 0) { if (resetFlag) { src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -1,38 +1,14 @@ package com.zy.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.domain.enums.TaskStatusType; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.CommandInfo; import com.zy.asrs.entity.CommandInfoLog; import com.zy.asrs.entity.TaskWrk; import com.zy.asrs.service.*; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.CommandStatusType; import com.zy.core.enums.IoModeType; import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; import com.zy.core.model.protocol.Cycle; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -48,72 +24,9 @@ private SiemensS7Net siemensS7Net; private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ add(1001); add(1002); add(1003); add(1004); add(1005); add(1006); add(1007); add(1008); add(1009); add(1010); add(1011); add(1012); add(1013); add(1014); add(1015); add(1016); add(1017); add(1018); add(1019); add(1020); }}; public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ add(2001); add(2002); add(2003); add(2004); add(2005); add(2006); add(2007); add(2008); add(2009); add(2010); add(2011); add(2012); add(2013); add(2014); add(2015); add(2016); add(2017); add(2018); add(2019); }}; public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{ add(1051); add(1052); add(1053); add(1054); add(1055); add(1056); add(1057); add(1058); }}; public static final ArrayList<Integer> staNos4 = new ArrayList<Integer>() {{ add(2051); add(2052); add(2053); add(2054); add(2055); add(2056); add(2057); add(2058); public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ add(100); }}; /** @@ -129,78 +42,17 @@ * 3.出库启动中 (不能生成入库工作档) * 4.出库模式 */ public IoModeType ioModeOf2F = IoModeType.NONE; // public IoModeType ioMode = IoModeType.NONE; private ArrayList<Integer> getStaNo() { switch (slave.getId()) { case 1: return staNos1; case 2: return staNos2; case 3: return staNos3; case 4: return staNos4; default: throw new CoolException("服务器异常"); } } public IoModeType ioModeOf1F = IoModeType.NONE; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; } @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; // 写数据 ID+目标站 case 4: writeCycle((StaProtocol) task.getData()); read(); break; /* case 3: write2((StaProtocol)task.getData()); read(); break;*/ default: break; } // 心跳 // heartbeat(); Thread.sleep(400); } catch (Exception e) { e.printStackTrace(); } } } /** * 初始化站点状态 */ private void initSite() { ArrayList<Integer> staNos = getStaNo(); public void setData(Integer siteId, boolean loading, boolean inEnable, boolean outEnable) { // 站点编号 for (Integer siteId : staNos) { for (Integer sta : staNos) { if (sta.equals(siteId)) { StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); @@ -208,653 +60,38 @@ station.put(siteId, staProtocol); } staProtocol.setWorkNo((short) 0); // ID staProtocol.setAutoing(false); // 自动 staProtocol.setLoading(false); // 有物 staProtocol.setInEnable(false); // 可入 staProtocol.setOutEnable(false); // 可出 staProtocol.setAutoing(true); // 自动 staProtocol.setLoading(loading); // 有物 staProtocol.setInEnable(inEnable); // 可入 staProtocol.setOutEnable(outEnable); // 可出 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 = 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); } } } //条码 Thread.sleep(200); OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840.0", (short) 8); if (result2.IsSuccess) { for (int i = 0; i < 1; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, slave.getId()); if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); } } } //外形检测 OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.802.0", (short) (barcodeSize * 1)); if (resultErr1.IsSuccess) { int sta = 0; switch (slave.getId()) { case 1: sta = 1014; break; case 2: sta = 2007; break; case 3: sta = 1052; break; case 4: sta = 2056; break; } StaProtocol staProtocol1 = station.get(sta); boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, 0, 1); staProtocol1.setFrontErr(status1[0]); staProtocol1.setBackErr(status1[1]); staProtocol1.setHighErr(status1[2]); staProtocol1.setLeftErr(status1[3]); staProtocol1.setRightErr(status1[4]); staProtocol1.setWeightErr(status1[5]); staProtocol1.setBarcodeErr(status1[6]); } // OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4)); // if (resultErr.IsSuccess) { // for (int i = 0; i < staNoSize; 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]); // // } // } // //RGV台车位置 // Thread.sleep(200); // OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB100.0",(short)4); // if (result3.IsSuccess) { // for (int i = 0; i < 2; i++) { // Integer siteId = i==0 ? 1 : 2; // 站点编号 // StaProtocol staProtocol = station.get(siteId); // if (null == staProtocol) { // staProtocol = new StaProtocol(); // staProtocol.setSiteId(siteId); // station.put(siteId, staProtocol); // } // staProtocol.setNearbySta(String.valueOf(siemensS7Net.getByteTransform().TransInt16(result3.Content, i*2))); //// String aa = staProtocol.getNearbySta(); //// System.out.println(siteId + "===>>" + staProtocol.getNearbySta()); // } // } // OperateResultExOne<Short> result2 = siemensS7Net.ReadInt16("DB200.0"); // if (result2.IsSuccess) { // this.ioMode = IoModeType.get(result2.Content); // } 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状态信息失败"); } } /** * 写入 ID+目标站 =====> 单站点写入 */ private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); if (staProtocol.getAgvTypeSign() == 0 || staProtocol.getAgvTypeSign() == 2) { //0取货 switch (staProtocol.getSiteId()) { case 100: index = 32; break; case 101: index = 34; break; case 102: index = 38; break; case 103: index = 40; break; case 104: index = 44; break; case 105: index = 46; break; case 106: index = 50; break; case 107: index = 52; break; default: return; } } else { switch (staProtocol.getSiteId()) { case 100: index = 30; break; case 102: index = 36; break; case 104: index = 42; break; case 106: index = 48; break; default: return; } } OperateResult write = null; //任务下发次数 int writeCount = 0; do { short textWrite = 1;// 任务完成 if (staProtocol.getAgvTypeSign() > 1) { textWrite = 0;// 任务复位 } write = siemensS7Net.Write("DB102." + index, textWrite); if (write.IsSuccess) { writeCount = 6; } else { writeCount++; log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } } while (writeCount < 5); if (!write.IsSuccess) { 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)); } } private void write(StaProtocol staProtocol) throws InterruptedException { if (staProtocol == null) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); if (index == -1) { log.error("站点编号 {} 不在已知列表中,无法写入任务!", staProtocol.getSiteId()); return; } int writeCount = 0; // 任务下发尝试次数 boolean writeFlag = false; // 任务下发成功标记 String plcAddressWorkNo = "DB100." + index * 6; String plcAddressStaNo = "DB100." + (index * 6 + 4); Thread.sleep(100); while (writeCount < 5) { // **读取当前PLC状态,避免不必要的写入** OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); if (readResult.IsSuccess) { int currentWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); short currentStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); if (currentWorkNo == staProtocol.getWorkNo().intValue() && currentStaNo == staProtocol.getStaNo()) { log.info("站点 {} 当前状态已匹配,无需重复写入", staProtocol.getSiteId()); return; } } // **清零并确认** if (!clearPLCData(plcAddressWorkNo, plcAddressStaNo, staProtocol.getSiteId())) { writeCount++; continue; // 重新尝试清零 } // **写入新任务** if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) { writeFlag = true; log.info("输送线命令写入成功,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); break; } log.warn("输送线命令写入失败,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); writeCount++; } // **写入失败处理** handleWriteFailure(staProtocol, writeFlag); } private void writeCycle(StaProtocol staProtocol) throws InterruptedException { if (staProtocol == null) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); if (index == -1) { log.error("站点编号 {} 不在已知列表中,无法写入任务!", staProtocol.getSiteId()); return; } int writeCount = 0; // 任务下发尝试次数 boolean writeFlag = false; // 任务下发成功标记 String plcAddressWorkNo = ""; String plcAddressStaNo = ""; switch (staProtocol.getSiteId()) { case 105: plcAddressWorkNo = "DB73." + 0; plcAddressStaNo = "DB73." + 4; break; case 106: plcAddressWorkNo = "DB73." + 6; plcAddressStaNo = "DB73." + (6 + 4); break; case 108: plcAddressWorkNo = "DB73." + 2 * 6; plcAddressStaNo = "DB73." + (2 * 6 + 4); break; case 110: plcAddressWorkNo = "DB73." + 3 * 6; plcAddressStaNo = "DB73." + (3 * 6 + 4); break; case 112: plcAddressWorkNo = "DB73." + 4 * 6; plcAddressStaNo = "DB73." + (4 * 6 + 4); break; } // **写入新任务** if (writeTaskToPLC(plcAddressWorkNo, plcAddressStaNo, staProtocol)) { writeFlag = true; log.info("输送线命令写入成功,PLC编号={},站点数据={},尝试次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } // **写入失败处理** handleWriteFailure(staProtocol, writeFlag); } /** * 清零 PLC 数据并验证清零是否成功 */ private boolean clearPLCData(String plcAddressWorkNo, String plcAddressStaNo, int siteId) throws InterruptedException { siemensS7Net.Write(plcAddressWorkNo, 0); siemensS7Net.Write(plcAddressStaNo, (short) 0); Thread.sleep(100); // 等待PLC识别 OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); if (readResult.IsSuccess) { int readWorkNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); short readStaNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); if (readWorkNo == 0 && readStaNo == 0) { return true; // 清零成功 } } log.warn("站点 {} 清零失败,尝试重新清零...", siteId); return false; } /** * 写入新任务到 PLC 并验证是否成功 */ private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, StaProtocol staProtocol) throws InterruptedException { OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, staProtocol.getStaNo()); OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, staProtocol.getWorkNo().intValue()); if (writeResult1.IsSuccess && writeResult2.IsSuccess) { Thread.sleep(200); // 等待 PLC 识别新值 OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); if (readResult.IsSuccess) { int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); return workNo == staProtocol.getWorkNo().intValue() && staNo == staProtocol.getStaNo(); } } return false; } private boolean writeTaskToPLC(String plcAddressWorkNo, String plcAddressStaNo, Cycle cycle) throws InterruptedException { OperateResult writeResult1 = siemensS7Net.Write(plcAddressWorkNo, cycle.getWorkNo().intValue()); OperateResult writeResult2 = siemensS7Net.Write(plcAddressStaNo, cycle.getStaNo()); if (writeResult1.IsSuccess && writeResult2.IsSuccess) { Thread.sleep(200); // 等待 PLC 识别新值 OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6); if (readResult.IsSuccess) { int workNo = siemensS7Net.getByteTransform().TransInt32(readResult.Content, 0); short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4); return workNo == cycle.getWorkNo().intValue() && staNo == cycle.getStaNo(); } } return false; } /** * 处理写入失败的情况 */ private void handleWriteFailure(StaProtocol staProtocol, boolean writeFlag) { if (!writeFlag) { StaProtocol currentStaProtocol = station.get(staProtocol.getSiteId()); if (currentStaProtocol.getWorkNo() == 0 && currentStaProtocol.getStaNo() == 0) { currentStaProtocol.setPakMk(true); } OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线命令尝试5次失败。PLC编号={1},站点数据={2}", slave.getId(), JSON.toJSON(currentStaProtocol))); log.error("输送线命令尝试5次失败,PLC编号={},站点数据={}", slave.getId(), JSON.toJSON(currentStaProtocol)); } 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)); } } 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); } } } // /** // * 写入 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 updateIoMode() throws InterruptedException { if (this.ioModeOf2F != IoModeType.NONE) { if (!siemensS7Net.Write("DB100.180", this.ioModeOf2F.id).IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线2F入出库模式失败。输送线plc编号={1}", slave.getId())); log.error("写入输送线2F入出库模式失败。输送线plc编号={}", slave.getId()); } } } /** * 心跳 */ private void heartbeat() { if (heartBeatVal == 1) { heartBeatVal = 2; } else { heartBeatVal = 1; } OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal); if (!write.IsSuccess) { log.error("输送线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(); } public static void main(String[] args) { ArrayList<Integer> staNos = staNos1; System.out.println(staNos.indexOf(129)); System.out.println(staNos.size()); for (int i = 0; i < staNos.size(); i++) { // System.out.println(i*2); // System.out.println(i*2 + 200); // System.out.println(i); } int index = staNos.indexOf(128); System.out.println(index * 2); System.out.println(index * 2 + 200); @Override public void setPakMk(Integer siteId, boolean pakMk) { } // public static void main(String[] args) throws Exception { // DevpSlave slave = new DevpSlave(); // slave.setIp("192.168.2.125"); // SiemensDevpThread devpThread = new SiemensDevpThread(slave); // devpThread.connect(); // devpThread.read(); // // 写 // StaProtocol staProtocol = devpThread.getStation().get(1); // staProtocol.setWorkNo((short) 232); // staProtocol.setStaNo((short) 6); // staProtocol.setAutoing(true); // staProtocol.setEmptyMk(true); // staProtocol.setInEnable(true); // devpThread.write(staProtocol); // System.out.println("----------------------------------------"); // // 读 // devpThread.read(); // System.out.println(JSON.toJSONString(devpThread.station)); // // } @Override public void run() { } } src/main/resources/application-prod.yml
@@ -1,6 +1,6 @@ wcs-slave: doubleDeep: true #双深 doubleLocs: 5,8 #双深库位排号 1,4 doubleLocs: 1,4 #双深库位排号 1,4 groupCount: 4 #一个堆垛机负责的货架排数 crn[0]: #堆垛机1 id: 1 @@ -11,463 +11,19 @@ offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口 staNo: 1002 staNo: 100 row: 1 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} devpPlcId: 1 crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口 staNo: 1004 staNo: 100 row: 2 bay: 1 lev: 1 backSta: 102 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口 staNo: 2002 row: 1 bay: 59 lev: 11 devpPlcId: ${wcs-slave.devp[1].id} crnInStn[1]: #堆垛机入库站点--2F输送线 取货口 staNo: 2003 row: 2 bay: 59 lev: 11 backSta: 102 devpPlcId: ${wcs-slave.devp[1].id} crn[1]: #堆垛机2 id: 2 ip: 192.168.110.90 slot: 0 demo: false rack: 0 offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口 staNo: 1006 row: 3 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口 staNo: 1008 row: 4 bay: 1 lev: 1 backSta: 106 devpPlcId: ${wcs-slave.devp[0].id} crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口 staNo: 2013 row: 4 bay: 59 lev: 11 devpPlcId: ${wcs-slave.devp[1].id} crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2012 row: 3 bay: 59 lev: 11 backSta: 106 devpPlcId: ${wcs-slave.devp[1].id} crn[2]: #堆垛机3 id: 3 ip: 192.168.110.10 slot: 0 demo: false rack: 0 offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口 staNo: 1056 row: 7 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[2].id} crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口 staNo: 1058 row: 6 bay: 1 lev: 1 backSta: 106 devpPlcId: ${wcs-slave.devp[2].id} crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口 staNo: 2057 row: 7 bay: 1 lev: 13 devpPlcId: ${wcs-slave.devp[3].id} crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2057 row: 7 bay: 1 lev: 13 backSta: 106 devpPlcId: ${wcs-slave.devp[3].id} crnOutStn[2]: #堆垛机出库站点--2F输送线 放货口 staNo: 2058 row: 6 bay: 1 lev: 13 devpPlcId: ${wcs-slave.devp[3].id} crnInStn[2]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2058 row: 6 bay: 1 lev: 13 backSta: 106 devpPlcId: ${wcs-slave.devp[3].id} crnOutStn[3]: #堆垛机出库站点--2F输送线 放货口 staNo: 2051 row: 7 bay: 13 lev: 13 devpPlcId: ${wcs-slave.devp[3].id} crnInStn[3]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2051 row: 7 bay: 13 lev: 13 backSta: 106 devpPlcId: ${wcs-slave.devp[3].id} crnOutStn[4]: #堆垛机出库站点--2F输送线 放货口 staNo: 2052 row: 7 bay: 10 lev: 13 devpPlcId: ${wcs-slave.devp[3].id} crnInStn[4]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2052 row: 7 bay: 10 lev: 13 backSta: 106 devpPlcId: ${wcs-slave.devp[3].id} crnOutStn[5]: #堆垛机出库站点--2F输送线 放货口 staNo: 2054 row: 7 bay: 4 lev: 13 devpPlcId: ${wcs-slave.devp[3].id} crnInStn[5]: #堆垛机入库站点1--2F输送线 取货口 staNo: 2056 row: 7 bay: 2 lev: 13 backSta: 106 devpPlcId: ${wcs-slave.devp[3].id} devp[0]: #输送线--半成品1F id: 1 ip: 192.168.110.50 rack: 0 port: 102 slot: 0 emptyInSta[0]: #空板入库口0 staNo: 1014 inSta[0]: #入库口1 staNo: 1014 backSta: 1015 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[2].id} outSta[0]: #出库口1 staNo: 1019 outSta[1]: #出库口2 staNo: 1010 outSta[2]: #出库口2 staNo: 1020 devp[1]: #输送线--半成品2F id: 2 ip: 192.168.110.70 rack: 0 port: 102 slot: 0 emptyInSta[0]: #空板入库口0 staNo: 2007 inSta[0]: #入库口1 staNo: 2007 backSta: 2006 barcode: ${wcs-slave.barcode[1].id} led: ${wcs-slave.led[8].id} outSta[0]: #出库口1 staNo: 2001 outSta[1]: #出库口2 staNo: 2019 devp[2]: #输送线--成品1F id: 3 ip: 192.168.110.30 rack: 0 port: 102 slot: 0 inSta[0]: #入库口1 staNo: 1052 backSta: 1051 barcode: ${wcs-slave.barcode[2].id} led: ${wcs-slave.led[0].id} inSta[1]: #空板入库口0 staNo: 1058 outSta[0]: #出库口1 staNo: 1053 devp[3]: #输送线--成品2F id: 4 ip: 192.168.110.40 rack: 0 port: 102 slot: 0 emptyInSta[0]: #空板入库口0 staNo: 2056 led: ${wcs-slave.led[3].id} inSta[0]: #入库口1 staNo: 2056 backSta: 2055 barcode: ${wcs-slave.barcode[3].id} led: ${wcs-slave.led[4].id} outSta[0]: #出库口1 staNo: 1053 outSta[1]: #出库口1 staNo: 251 outSta[2]: #出库口1 staNo: 252 outSta[3]: #出库口1 staNo: 257 outSta[4]: #出库口1 staNo: 258 # 拣料入库口1 pickSta[0]: staNo: 2051 led: ${wcs-slave.led[6].id} # 拣料入库口2 pickSta[1]: staNo: 2052 # 拣料入库口3 pickSta[2]: staNo: 2057 led: ${wcs-slave.led[3].id} # 拣料入库口4 pickSta[3]: staNo: 2058 barcode[0]: #条码扫描仪 port: 51236 ip: 172.17.91.39 id: 1 barcode[1]: #条码扫描仪 port: 51236 ip: 172.17.91.39 id: 2 barcode[2]: #条码扫描仪 port: 51236 ip: 172.17.91.39 id: 3 barcode[3]: #条码扫描仪 port: 51236 ip: 172.17.91.39 id: 4 # LED1 成品库1F led[0]: id: 1 ip: 192.168.110.210 port: 5005 devpPlcId: ${wcs-slave.devp[2].id} staArr: 1052 # LED2 成品库1F led[1]: id: 2 ip: 192.168.110.211 port: 5005 devpPlcId: ${wcs-slave.devp[2].id} staArr: 1051 # LED3 半成品库1F led[2]: id: 3 ip: 192.168.110.212 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 1014 # LED4 成品库2F led[3]: id: 4 ip: 192.168.110.213 port: 5005 devpPlcId: ${wcs-slave.devp[3].id} staArr: 2057 # LED5 成品库2F led[4]: id: 5 ip: 192.168.110.214 port: 5005 devpPlcId: ${wcs-slave.devp[3].id} staArr: 2056 # LED6 成品库2F led[5]: id: 6 ip: 192.168.110.215 port: 5005 devpPlcId: ${wcs-slave.devp[3].id} staArr: 2054 # LED7 成品库2F led[6]: id: 7 ip: 192.168.110.216 port: 5005 devpPlcId: ${wcs-slave.devp[3].id} staArr: 2051 # LED8 半成品库2F led[7]: id: 8 ip: 192.168.110.217 port: 5005 devpPlcId: ${wcs-slave.devp[1].id} staArr: 2002 # LED9 半成品库2F led[8]: id: 9 ip: 192.168.110.218 port: 5005 devpPlcId: ${wcs-slave.devp[1].id} staArr: 2007 # LED10 半成品库2F led[9]: id: 10 ip: 192.168.110.219 port: 5005 devpPlcId: ${wcs-slave.devp[1].id} staArr: 2018 # crn[0]: #堆垛机1 # rack: 0 # offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 # port: 102 # crnOutStn[0]: #堆垛机出库站点 # staNo: 101 # row: 2 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # ip: 192.168.1.100 # crnInStn[0]: #堆垛机入库站点1 # staNo: 100 # row: 1 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # id: 1 # slot: 0 # demo: false # crn[1]: #堆垛机2 # rack: 0 # offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 # port: 102 # crnOutStn[0]: #堆垛机出库站点 # staNo: 103 # row: 5 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # ip: 192.168.1.110 # crnInStn[0]: #堆垛机入库站点1 # staNo: 102 # row: 4 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # id: 2 # slot: 0 # demo: false # barcode[3]: #条码扫描仪4 # port: 51236 # ip: 10.10.10.52 # id: 4 # barcode[2]: #条码扫描仪3 # port: 51236 # ip: 10.10.10.52 # id: 3 # # barcode[1]: #条码扫描仪2 # port: 51236 # ip: 10.10.10.52 # id: 2 # # devp[0]: #输送线 # emptyInSta[2]: #空板入库口3 # staNo: 104 # emptyInSta[1]: #空板入库口2 # staNo: 102 # rack: 0 # emptyInSta[0]: #空板入库口1 # staNo: 100 # ip: 192.168.1.140 # outSta[4]: #出库口5 # staNo: 104 # outSta[3]: #出库口4 # staNo: 103 # outSta[6]: #出库口7 # staNo: 106 # slot: 0 # outSta[5]: #出库口6 # staNo: 105 # outSta[0]: #出库口1 # staNo: 100 # outSta[2]: #出库口3 # staNo: 102 # emptyInSta[3]: #空板入库口4 # staNo: 106 # outSta[1]: #出库口2 # staNo: 101 # inSta[2]: # staNo: 104 # barcode: ${wcs-slave.barcode[2].id} # inSta[3]: # staNo: 106 # barcode: ${wcs-slave.barcode[3].id} # port: 102 # outSta[7]: #出库口8 # staNo: 107 # inSta[0]: #入库口1 # staNo: 100 # barcode: ${wcs-slave.barcode[0].id} # inSta[1]: #入库口2 # staNo: 102 # barcode: ${wcs-slave.barcode[1].id} # id: 1 # # # crn[2]: #堆垛机3 # rack: 0 # offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 # port: 102 # crnOutStn[0]: #堆垛机出库站点 # staNo: 105 # row: 9 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # ip: 192.168.1.120 # crnInStn[0]: #堆垛机入库站点1 # staNo: 104 # row: 8 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # id: 3 # slot: 0 # demo: false # crn[3]: #堆垛机4 # rack: 0 # offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 # port: 102 # crnOutStn[0]: #堆垛机出库站点 # staNo: 107 # row: 12 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # ip: 192.168.1.130 # crnInStn[0]: #堆垛机入库站点1 # staNo: 106 # row: 11 # bay: 1 # lev: 1 # devpPlcId: ${wcs-slave.devp[0].id} # id: 4 # slot: 0 # demo: false backSta: 100 devpPlcId: 1