Commit 4a9001b6 zshaohui

1.内仓接口对接优化

1 个父辈 e29fb769
...@@ -286,7 +286,7 @@ public class DataInitManager { ...@@ -286,7 +286,7 @@ public class DataInitManager {
"inventory", //报表->库存 "inventory", //报表->库存
"bunker", //设备管理 "bunker", //设备管理
"storagePos", //库位管理 "storagePos", //库位管理
//"sysSetting", //系统设置 "sysSetting", //系统设置
"peoples", //用户管理 "peoples", //用户管理
"role" //角色管理 "role" //角色管理
......
...@@ -394,7 +394,7 @@ public class BaseDeviceHandler implements IDeviceHandler { ...@@ -394,7 +394,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败 } else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理 //暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成 } else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(),posName,executeTime); //finishedOutPos(statusBean.getCid(),posName,executeTime);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口 } else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
//暂不处理 //暂不处理
} }
......
...@@ -31,8 +31,6 @@ public class SisoBoxHandler extends BaseDeviceHandler { ...@@ -31,8 +31,6 @@ public class SisoBoxHandler extends BaseDeviceHandler {
if (humidityResult != null) { if (humidityResult != null) {
return humidityResult; return humidityResult;
} }
if (statusBean.getOp() == OP.PUT_IN) { if (statusBean.getOp() == OP.PUT_IN) {
log.debug("入库:" + statusBean.toString()); log.debug("入库:" + statusBean.toString());
statusBean = putInLine(storage, statusBean); statusBean = putInLine(storage, statusBean);
......
...@@ -218,6 +218,8 @@ public class LiteOrderCache { ...@@ -218,6 +218,8 @@ public class LiteOrderCache {
}else if(liteOrder.isOutTails()){ }else if(liteOrder.isOutTails()){
// setStatus(LITEORDER_STATUS.TAILS_FINISHED); // setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder.setClosed(true); liteOrder.setClosed(true);
}else if (liteOrder.isOutTails()){
liteOrder.setClosed(true);
} }
liteOrder.setTaskFinishedTime(System.currentTimeMillis()); liteOrder.setTaskFinishedTime(System.currentTimeMillis());
...@@ -473,8 +475,8 @@ public class LiteOrderCache { ...@@ -473,8 +475,8 @@ public class LiteOrderCache {
Storage storage = dataCache.getStorageById(pos.getStorageId()); Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog task = new DataLog(storage,pos.getBarcode(),pos); DataLog task = new DataLog(storage,pos.getBarcode(),pos);
String operator = SecurityUtils.getCurrentUsername(); /*String operator = SecurityUtils.getCurrentUsername();
task.setOperator(operator); task.setOperator(operator);*/
return task; return task;
} }
......
...@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder; ...@@ -9,6 +9,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem; import com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem;
import com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache; import com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -111,6 +112,7 @@ public class LizhenController { ...@@ -111,6 +112,7 @@ public class LizhenController {
@ApiOperation("5.缺料预警") @ApiOperation("5.缺料预警")
@PostMapping("/mPickingList") @PostMapping("/mPickingList")
@AnonymousAccess
public ResultBean mPickingList(@RequestBody Map<String, List<Map<String, String>>> paramMap) { public ResultBean mPickingList(@RequestBody Map<String, List<Map<String, String>>> paramMap) {
List<Map<String, String>> datas = paramMap.get("data"); List<Map<String, String>> datas = paramMap.get("data");
if (datas == null || datas.isEmpty()) { if (datas == null || datas.isEmpty()) {
......
package com.neotel.smfcore.custom.lizhen.agvBox.rest; package com.neotel.smfcore.custom.lizhen.agvBox.rest;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
...@@ -239,12 +240,13 @@ public class AgvBoxDeviceClientController { ...@@ -239,12 +240,13 @@ public class AgvBoxDeviceClientController {
DataLog opTask = null; DataLog opTask = null;
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) { for (DataLog task : allTasks) {
if (rfid.startsWith(task.getBarcode())) { if (rfid.startsWith(task.getBarcode())) {
if (!task.isCancel() && !task.isFinished()) { if (!task.isCancel() && !task.isFinished()) {
opTask = task; opTask = task;
break;
} }
break;
} }
} }
if (opTask == null) { if (opTask == null) {
...@@ -282,8 +284,6 @@ public class AgvBoxDeviceClientController { ...@@ -282,8 +284,6 @@ public class AgvBoxDeviceClientController {
if (OP_STATUS.OUT_ON_AGV.name().equals(statusStr)) { if (OP_STATUS.OUT_ON_AGV.name().equals(statusStr)) {
//从库位中取出,需要移到完成队列中,并且清理库存 //从库位中取出,需要移到完成队列中,并且清理库存
outFromPos(opTask); outFromPos(opTask);
//清理锁定库位
ReelLockPosUtil.removeReelLockPosInfo(rfid.replace("A","").replace("B",""));
} }
taskService.updateFinishedTask(opTask); taskService.updateFinishedTask(opTask);
...@@ -299,8 +299,11 @@ public class AgvBoxDeviceClientController { ...@@ -299,8 +299,11 @@ public class AgvBoxDeviceClientController {
opTask.setStatus(statusStr); opTask.setStatus(statusStr);
//入库任务 //入库任务
if (OP_STATUS.FINISHED.name().equals(statusStr)) { if (OP_STATUS.FINISHED.name().equals(statusStr)) {
taskService.moveTaskToFinished(opTask);
lockRfidTarget.remove(opTask.getBarcode()); lockRfidTarget.remove(opTask.getBarcode());
intoPos(opTask); intoPos(opTask);
//清理锁定库位
ReelLockPosUtil.removeReelLockPosInfo(rfid.replace("A","").replace("B",""));
} else { } else {
taskService.updateQueueTask(opTask); taskService.updateQueueTask(opTask);
} }
...@@ -345,7 +348,6 @@ public class AgvBoxDeviceClientController { ...@@ -345,7 +348,6 @@ public class AgvBoxDeviceClientController {
//更新缓存中的库存信息 //更新缓存中的库存信息
opTask.setStatus(OP_STATUS.FINISHED.name()); opTask.setStatus(OP_STATUS.FINISHED.name());
taskService.updateFinishedTask(opTask); taskService.updateFinishedTask(opTask);
taskService.removeFinishedTask(opTask); taskService.removeFinishedTask(opTask);
} }
......
...@@ -4,6 +4,7 @@ import com.google.common.collect.Lists; ...@@ -4,6 +4,7 @@ import com.google.common.collect.Lists;
import com.neotel.smfcore.common.bean.ReelLockPosInfo; import com.neotel.smfcore.common.bean.ReelLockPosInfo;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
...@@ -139,6 +140,8 @@ public class WarehouseController { ...@@ -139,6 +140,8 @@ public class WarehouseController {
.and("enabled").is(true);//可用 .and("enabled").is(true);//可用
//排除掉正在执行的仓位 //排除掉正在执行的仓位
Collection<String> excludePosIds = taskService.excludePosIds(); Collection<String> excludePosIds = taskService.excludePosIds();
log.info("excludePosIds--"+JsonUtil.toJsonStr(excludePosIds));
if (excludePosIds != null && !excludePosIds.isEmpty()) { if (excludePosIds != null && !excludePosIds.isEmpty()) {
c.and("id").nin(excludePosIds); c.and("id").nin(excludePosIds);
} }
......
...@@ -64,6 +64,7 @@ public class InnerBoxRestController { ...@@ -64,6 +64,7 @@ public class InnerBoxRestController {
@ApiOperation("IA 出库更新任务状态") @ApiOperation("IA 出库更新任务状态")
@RequestMapping("/updateLocInfo") @RequestMapping("/updateLocInfo")
@AnonymousAccess
public ResultBean updateLocInfo(HttpServletRequest request) { public ResultBean updateLocInfo(HttpServletRequest request) {
String code = request.getParameter("barcode"); String code = request.getParameter("barcode");
String status = request.getParameter("status"); String status = request.getParameter("status");
...@@ -121,30 +122,15 @@ public class InnerBoxRestController { ...@@ -121,30 +122,15 @@ public class InnerBoxRestController {
} }
//料箱与需求单进行绑定 //料箱与需求单进行绑定
String boxNumber = ""; String boxNumber = loc.replaceAll("A","").replaceAll("B","");
if (loc.contains("-")) { LiteOrder liteOrder = liteOrderManager.get(opTask.getSourceId());
boxNumber = loc.substring(0, loc.indexOf("-")); if (liteOrder != null) {
} liteOrder.setBoxNumber(boxNumber);
LiteOrderItem orderItem = liteOrderItemManager.getOrderItemByBarcode(code); liteOrderManager.save(liteOrder);
if (orderItem != null) { liteOrderCache.addOrderToMap(liteOrder);
String orderId = orderItem.getOrderId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
if (liteOrder != null) {
liteOrder.setBoxNumber(boxNumber);
liteOrderManager.save(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
}
} }
} }
} }
} else {
opTask.setStatus(status);
//入库任务
if (OP_STATUS.FINISHED.name().equals(status)) {
intoPos(opTask);
} else {
taskService.updateQueueTask(opTask);
}
} }
} else { } else {
log.info(code + "更新状态时未找到状态:" + status + ""); log.info(code + "更新状态时未找到状态:" + status + "");
...@@ -158,6 +144,7 @@ public class InnerBoxRestController { ...@@ -158,6 +144,7 @@ public class InnerBoxRestController {
@ApiOperation("IB 获取料箱状态信息") @ApiOperation("IB 获取料箱状态信息")
@RequestMapping("/getBoxStatusInfo") @RequestMapping("/getBoxStatusInfo")
@AnonymousAccess
public ResultBean getBoxStatusInfo(HttpServletRequest request) { public ResultBean getBoxStatusInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid"); //料箱RFID String rfid = request.getParameter("rfid"); //料箱RFID
String cid = request.getParameter("cid"); String cid = request.getParameter("cid");
...@@ -168,8 +155,9 @@ public class InnerBoxRestController { ...@@ -168,8 +155,9 @@ public class InnerBoxRestController {
@ApiOperation("IC 获取料架标签打印信息") @ApiOperation("IC 获取料架标签打印信息")
@RequestMapping("/rack/getPrintInfo") @RequestMapping("/rack/getPrintInfo")
@AnonymousAccess
public List<Map<String, String>> getPrintLabel(HttpServletRequest request) { public List<Map<String, String>> getPrintLabel(HttpServletRequest request) {
Collection<DataLog> dataLogs = taskService.getQueueTasks(); Collection<DataLog> dataLogs = taskService.getAllTasks();
List<Map<String, String>> results = new ArrayList<>(); List<Map<String, String>> results = new ArrayList<>();
for (DataLog dataLog : dataLogs) { for (DataLog dataLog : dataLogs) {
String barcode = dataLog.getBarcode(); String barcode = dataLog.getBarcode();
...@@ -201,6 +189,7 @@ public class InnerBoxRestController { ...@@ -201,6 +189,7 @@ public class InnerBoxRestController {
@ApiOperation("ID 料架标签打印完成通知") @ApiOperation("ID 料架标签打印完成通知")
@RequestMapping("/rack/finishPrint") @RequestMapping("/rack/finishPrint")
@AnonymousAccess
public ResultBean finishPrintLabel(HttpServletRequest request) { public ResultBean finishPrintLabel(HttpServletRequest request) {
String barcode = request.getParameter("barcode"); String barcode = request.getParameter("barcode");
Collection<DataLog> dataLogs = taskService.getQueueTasks(); Collection<DataLog> dataLogs = taskService.getQueueTasks();
...@@ -216,9 +205,10 @@ public class InnerBoxRestController { ...@@ -216,9 +205,10 @@ public class InnerBoxRestController {
@ApiOperation("IE 贴标前获取站位信息") @ApiOperation("IE 贴标前获取站位信息")
@RequestMapping("/getFeederInfo") @RequestMapping("/getFeederInfo")
@AnonymousAccess
public ResultBean getFeederInfo(HttpServletRequest request) { public ResultBean getFeederInfo(HttpServletRequest request) {
String barcode = request.getParameter("barcode"); String barcode = request.getParameter("barcode");
Collection<DataLog> dataLogs = taskService.getQueueTasks(); Collection<DataLog> dataLogs = taskService.getAllTasks();
Map<String, String> resultMap = new HashMap<>(); Map<String, String> resultMap = new HashMap<>();
for (DataLog dataLog : dataLogs) { for (DataLog dataLog : dataLogs) {
if (dataLog.getBarcode().equals(barcode)) { if (dataLog.getBarcode().equals(barcode)) {
...@@ -242,12 +232,12 @@ public class InnerBoxRestController { ...@@ -242,12 +232,12 @@ public class InnerBoxRestController {
@ApiOperation("周转箱取走") @ApiOperation("周转箱取走")
@RequestMapping("/boxTakeAway") @RequestMapping("/boxTakeAway")
@AnonymousAccess @AnonymousAccess
public ResultBean boxTakeAway(HttpServletRequest request){ public ResultBean boxTakeAway(HttpServletRequest request) {
String rfid = request.getParameter("rfid"); String rfid = request.getParameter("rfid");
rfid = rfid.replaceAll("A","").replaceAll("B",""); rfid = rfid.replaceAll("A", "").replaceAll("B", "");
Pattern pattern = Pattern.compile("^" + rfid + ".*$", Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile("^" + rfid + ".*$", Pattern.CASE_INSENSITIVE);
List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern))); List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern)));
if (liteOrders != null && liteOrders.isEmpty()){ if (liteOrders != null && liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) { for (LiteOrder liteOrder : liteOrders) {
liteOrder.setBoxNumber(""); liteOrder.setBoxNumber("");
liteOrderManager.save(liteOrder); liteOrderManager.save(liteOrder);
...@@ -259,42 +249,6 @@ public class InnerBoxRestController { ...@@ -259,42 +249,6 @@ public class InnerBoxRestController {
/** /**
* 物料放入
*/
private void intoPos(DataLog opTask) {
//已完成,加入库存,并且从完成队列中清除
StoragePos storagePos = storagePosManager.get(opTask.getPosId());
//二维码状态
Barcode barcode = barcodeManager.findByBarcode(opTask.getBarcode());
if (barcode != null) {
barcode.setUsedCount(barcode.getUsedCount() + 1);
barcode.setPutInTime(System.currentTimeMillis());
barcode.setInOpor("");
barcode.setCheckOutDate(null, "");
barcode.setPosName(opTask.getPosName());
barcodeManager.save(barcode);
}
/**
* 仓位状态
*/
storagePos.setBarcode(barcode);
storagePos.setUsed(true);
storagePos.setCanCheckOutTime(System.currentTimeMillis());
storagePosManager.save(storagePos);
if (barcode != null) {
dataCache.updateInventory(storagePos, barcode);
//需要更新料箱中物料的库存
}
//更新缓存中的库存信息
opTask.setStatus(OP_STATUS.FINISHED.name());
taskService.updateFinishedTask(opTask);
taskService.removeFinishedTask(opTask);
}
/**
* 物料取出 * 物料取出
*/ */
private void outFromPos(DataLog opTask) { private void outFromPos(DataLog opTask) {
...@@ -340,27 +294,38 @@ public class InnerBoxRestController { ...@@ -340,27 +294,38 @@ public class InnerBoxRestController {
int remainTaskCount = 0; //所属需求单剩余当前料仓未完成任务数 int remainTaskCount = 0; //所属需求单剩余当前料仓未完成任务数
int rackTaskCount = 0; //所属需求单剩余料架任务数 int rackTaskCount = 0; //所属需求单剩余料架任务数
//当前料箱的隔口数量 //当前料箱的隔口数量
resultMap.put("inCount",0);
resultMap.put("outCount",0);
Pattern pattern = Pattern.compile("^" + boxNumber + ".*$", Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile("^" + boxNumber + ".*$", Pattern.CASE_INSENSITIVE);
List<Barcode> barcodes = barcodeManager.findByQuery(new Query(Criteria.where("posName").regex(pattern))); List<Barcode> barcodes = barcodeManager.findByQuery(new Query(Criteria.where("posName").regex(pattern)));
if (barcodes != null && !barcodes.isEmpty()) { if (barcodes != null && !barcodes.isEmpty()) {
Map<String, Long> posCountMap = barcodes.stream().collect(Collectors.groupingBy(Barcode::getPosName, Collectors.counting())); Map<String, Long> posCountMap = barcodes.stream().collect(Collectors.groupingBy(Barcode::getPosName, Collectors.counting()));
for (Map.Entry<String, Long> posCount : posCountMap.entrySet()) {
if (posCount.getKey().contains("A")) {
resultMap.put("inCount", posCount.getValue());
} else {
resultMap.put("outCount", posCount.getValue());
}
}
resultMap.putAll(posCountMap); resultMap.putAll(posCountMap);
} }
//获取当前工单数据 //获取当前工单数据
LiteOrder liteOrder = new LiteOrder(); LiteOrder liteOrder = null;
List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern))); List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern)));
if (liteOrders != null && !liteOrders.isEmpty()) { if (liteOrders != null && !liteOrders.isEmpty()) {
liteOrder = liteOrders.get(0); liteOrder = liteOrders.get(0);
} }
resultMap.put("hSerial","");
resultMap.put("line","");
if (liteOrder != null) { if (liteOrder != null) {
String line = liteOrder.getLine(); String line = liteOrder.getLine();
String orderNo = liteOrder.getOrderNo(); String orderNo = liteOrder.getOrderNo();
resultMap.put("hSerial", orderNo); resultMap.put("hSerial", orderNo);
resultMap.put("line", line); resultMap.put("line", line);
List<LiteOrderItem> orderItems = liteOrder.getOrderItems(); List<LiteOrderItem> orderItems = liteOrderItemManager.findOrderItems(liteOrder.getId());
if (orderItems != null && !orderItems.isEmpty()) { if (orderItems != null && !orderItems.isEmpty()) {
for (LiteOrderItem orderItem : orderItems) { for (LiteOrderItem orderItem : orderItems) {
Collection<DataLog> dataLogs = taskService.getQueueTasks(); Collection<DataLog> dataLogs = taskService.getAllTasks();
for (DataLog dataLog : dataLogs) { for (DataLog dataLog : dataLogs) {
if (dataLog.isFinished() || dataLog.isCancel()) { if (dataLog.isFinished() || dataLog.isCancel()) {
continue; continue;
......
package com.neotel.smfcore.custom.lizhen.innerBox.util; package com.neotel.smfcore.custom.lizhen.innerBox.util;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
...@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -16,6 +17,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.LizhenApi; import com.neotel.smfcore.custom.lizhen.LizhenApi;
import com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem; import com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem;
import jdk.nashorn.internal.runtime.arrays.ArrayIndex;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service; ...@@ -26,6 +28,7 @@ import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -36,7 +39,7 @@ import java.util.stream.Collectors; ...@@ -36,7 +39,7 @@ import java.util.stream.Collectors;
*/ */
@Slf4j @Slf4j
@Service @Service
public class PreWarningItemCache { public class PreWarningItemCache extends AbstractBaseDao {
/** /**
* 预警列表缓存 * 预警列表缓存
...@@ -54,25 +57,26 @@ public class PreWarningItemCache { ...@@ -54,25 +57,26 @@ public class PreWarningItemCache {
private static IStoragePosManager storagePosManager; private static IStoragePosManager storagePosManager;
/** /**
* 添加到预警列表缓存中 * 添加到预警列表缓存中
*/ */
public static void addItems(List<PreWarningItem> items){ public static void addItems(List<PreWarningItem> items) {
updateItem(items,false); updateItem(items, false);
} }
private AtomicInteger atomicInteger = new AtomicInteger(0);
/** /**
* 从缓存列表中取出预警Item生成工单并执行 * 从缓存列表中取出预警Item生成工单并执行
*/ */
private static void generateTask(){ private static void generateTask() {
boolean hasIdleBox = false; boolean hasIdleBox = false;
//有料仓空闲下来就需要生成任务,保证料仓不空闲,提高节拍 //有料仓空闲下来就需要生成任务,保证料仓不空闲,提高节拍
Collection<Storage> boxList = dataCache.getAllStorage().values(); Collection<Storage> boxList = dataCache.getAllStorage().values();
for (Storage storage : boxList) { for (Storage storage : boxList) {
if(storage.isStorage(DeviceType.SMD_XLR)){ if (storage.isStorage(DeviceType.SMD_XLR)) {
Collection<DataLog> boxQueueTasks = taskService.getQueueTasks(storage.getCid()); Collection<DataLog> boxQueueTasks = taskService.getQueueTasks(storage.getCid());
if(boxQueueTasks.isEmpty()){ if (boxQueueTasks.isEmpty()) {
//料仓空闲,没有待执行的任务 //料仓空闲,没有待执行的任务
hasIdleBox = true; hasIdleBox = true;
break; break;
...@@ -80,19 +84,22 @@ public class PreWarningItemCache { ...@@ -80,19 +84,22 @@ public class PreWarningItemCache {
} }
} }
if(hasIdleBox){ if (hasIdleBox) {
//最早的一条预警时间 //最早的一条预警时间
List<PreWarningItem> lineItems = new ArrayList<>(); List<PreWarningItem> lineItems = new ArrayList<>();
String firstItemLine = ""; String firstItemLine = "";
//每次最多出多少盘 //每次最多出多少盘
int maxReelCount = 30; int maxReelCount = 30;
//如果取不到,从数据库中取 //如果取不到,从数据库中取
if (queueItemList == null || queueItemList.isEmpty()){ if (queueItemList == null || queueItemList.isEmpty()) {
queueItemList = dataCache.getCache(Constants.CACHE_preWarningItem); queueItemList = dataCache.getCache(Constants.CACHE_preWarningItem);
} }
if (queueItemList == null || queueItemList.isEmpty()) {
return;
}
for (PreWarningItem preWarningItem : queueItemList) { for (PreWarningItem preWarningItem : queueItemList) {
String itemLine = preWarningItem.getLine(); String itemLine = preWarningItem.getLine();
if(Strings.isNotBlank(itemLine)){ if (Strings.isNotBlank(itemLine)) {
if (firstItemLine.isEmpty()) { if (firstItemLine.isEmpty()) {
firstItemLine = itemLine; firstItemLine = itemLine;
if (System.currentTimeMillis() - preWarningItem.getReceiveDate().getTime() < 1 * 60 * 1000) { if (System.currentTimeMillis() - preWarningItem.getReceiveDate().getTime() < 1 * 60 * 1000) {
...@@ -101,18 +108,18 @@ public class PreWarningItemCache { ...@@ -101,18 +108,18 @@ public class PreWarningItemCache {
} }
} }
//同一个线别的生成一个工单 //同一个线别的生成一个工单
if(itemLine.equals(firstItemLine)){ if (itemLine.equals(firstItemLine)) {
lineItems.add(preWarningItem); lineItems.add(preWarningItem);
} }
if(lineItems.size() > maxReelCount){ if (lineItems.size() > maxReelCount) {
break; break;
} }
} }
} }
if(!lineItems.isEmpty()){ if (!lineItems.isEmpty()) {
createAndExecuteLiteOrder(lineItems); createAndExecuteLiteOrder(lineItems);
//工单生成后,从缓存中清除 //工单生成后,从缓存中清除
updateItem(lineItems,true); updateItem(lineItems, true);
} }
} }
} }
...@@ -120,6 +127,7 @@ public class PreWarningItemCache { ...@@ -120,6 +127,7 @@ public class PreWarningItemCache {
/** /**
* 根据预警信息挑选物料, 生成工单任务并执行 * 根据预警信息挑选物料, 生成工单任务并执行
*
* @param lineItems * @param lineItems
*/ */
private static void createAndExecuteLiteOrder(List<PreWarningItem> lineItems) { private static void createAndExecuteLiteOrder(List<PreWarningItem> lineItems) {
...@@ -137,14 +145,15 @@ public class PreWarningItemCache { ...@@ -137,14 +145,15 @@ public class PreWarningItemCache {
//处理线别需求单 //处理线别需求单
LiteOrder liteOrder = new LiteOrder(); LiteOrder liteOrder = new LiteOrder();
liteOrder.setType(2); liteOrder.setType(2);
liteOrder.setOrderNo(getSeq()); liteOrder.setOrderNo(new PreWarningItemCache().getSeq());
liteOrder.setSo(getSeq()); liteOrder.setSo(new PreWarningItemCache().getSeq());
List<LiteOrderItem> orderItems = new ArrayList<>(); List<LiteOrderItem> orderItems = new ArrayList<>();
for (PreWarningItem item : lineItems) { for (PreWarningItem item : lineItems) {
liteOrder.setLine(item.getLine()); liteOrder.setLine(item.getLine());
//创建工单 //创建工单
LiteOrderItem orderItem = new LiteOrderItem(); LiteOrderItem orderItem = new LiteOrderItem();
while (true) { boolean flag = true;
while (flag) {
String partnumber = item.getPartnumber(); String partnumber = item.getPartnumber();
Query q = new Query(); Query q = new Query();
//库位有数据 //库位有数据
...@@ -157,16 +166,16 @@ public class PreWarningItemCache { ...@@ -157,16 +166,16 @@ public class PreWarningItemCache {
} }
//排除已经执行过的物料barcode //排除已经执行过的物料barcode
if (outPosIds != null && !outPosIds.isEmpty()) { if (outPosIds != null && !outPosIds.isEmpty()) {
c.and("id").nin(outPosIds); c.and("id").not().in(outPosIds);
} }
//排除校验没通过的 //排除校验没通过的
if (noPossPosIds != null && !noPossPosIds.isEmpty()) { if (noPossPosIds != null && !noPossPosIds.isEmpty()) {
c.and("id").nin(noPossPosIds); // c.and("id").not().in(noPossPosIds);
} }
//排除正在执行出库的工位 //排除正在执行出库的工位
Collection<String> excludePosIds = taskService.excludePosIds(); Collection<String> excludePosIds = taskService.excludePosIds();
if (excludePosIds != null && !excludePosIds.isEmpty()) { if (excludePosIds != null && !excludePosIds.isEmpty()) {
c.and("id").nin(noPossPosIds); // c.and("id").not().in(excludePosIds);
} }
//排除正在执行的工单物料 //排除正在执行的工单物料
Collection<String> excludeBarcodeIds = liteOrderCache.excludeBarcodeIds(); Collection<String> excludeBarcodeIds = liteOrderCache.excludeBarcodeIds();
...@@ -176,16 +185,17 @@ public class PreWarningItemCache { ...@@ -176,16 +185,17 @@ public class PreWarningItemCache {
//然后最早入库的 //然后最早入库的
q.addCriteria(c); q.addCriteria(c);
q.with(Sort.by(Sort.Direction.ASC, "canCheckOutTime", "barcode.subCodeList.usedCount")).limit(5); q.with(Sort.by(Sort.Direction.ASC, "canCheckOutTime", "barcode.subCodeList.usedCount")).limit(5);
log.info(q.toString()); // log.info(q.toString());
List<StoragePos> storagePoss = storagePosManager.findByQuery(q); List<StoragePos> storagePoss = storagePosManager.findByQuery(q);
orderItem.setPn(item.getPartnumber()); orderItem.setPn(item.getPartnumber());
orderItem.setSide(item.getSide()); orderItem.setSide(item.getSide());
orderItem.setFeederInfo(item.getSlot()); orderItem.setFeederInfo(item.getSlot());
orderItem.setTableNo(item.getMachinename()); orderItem.setTableNo(item.getStation());
if (storagePoss == null || storagePoss.isEmpty()) { if (storagePoss == null || storagePoss.isEmpty()) {
orderItem.setRi(item.getPartnumber()); orderItem.setRi(item.getPartnumber());
orderItem.setNeedNum(0); orderItem.setNeedNum(0);
orderItems.add(orderItem); orderItems.add(orderItem);
flag = false;
break; break;
} else { } else {
for (StoragePos pos : storagePoss) { for (StoragePos pos : storagePoss) {
...@@ -196,6 +206,8 @@ public class PreWarningItemCache { ...@@ -196,6 +206,8 @@ public class PreWarningItemCache {
outPosIds.add(pos.getId()); //防止其他地方出库 outPosIds.add(pos.getId()); //防止其他地方出库
orderItem.setRi(barcode.getBarcode()); orderItem.setRi(barcode.getBarcode());
orderItem.setNeedNum(1); orderItem.setNeedNum(1);
orderItems.add(orderItem);
flag = false;
break; break;
} else { } else {
log.info("partNumber:{}校验失败:{}", barcode.getPartNumber(), checkResult); log.info("partNumber:{}校验失败:{}", barcode.getPartNumber(), checkResult);
...@@ -205,13 +217,13 @@ public class PreWarningItemCache { ...@@ -205,13 +217,13 @@ public class PreWarningItemCache {
} }
} }
} }
if (orderItems != null && !orderItems.isEmpty()) { }
liteOrder.setOrderItems(orderItems); if (orderItems != null && !orderItems.isEmpty()) {
liteOrder.setTaskReelCount(orderItems.size()); liteOrder.setOrderItems(orderItems);
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder.setTaskReelCount(orderItems.size());
liteOrderManager.save(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderManager.save(liteOrder);
} liteOrderCache.addOrderToMap(liteOrder);
} }
} }
...@@ -231,16 +243,16 @@ public class PreWarningItemCache { ...@@ -231,16 +243,16 @@ public class PreWarningItemCache {
/** /**
* 定时执行,从缓存列表中取出预警Item生成工单并执行 * 定时执行,从缓存列表中取出预警Item生成工单并执行
*/ */
public static void runTimer(){ public static void runTimer() {
if(processing){ if (processing) {
return; return;
} }
processing = true; processing = true;
try{ try {
generateTask(); generateTask();
}catch (Exception e){ } catch (Exception e) {
log.error("预警缓存定时器出错",e); log.error("预警缓存定时器出错", e);
}finally { } finally {
processing = false; processing = false;
} }
} }
...@@ -271,7 +283,18 @@ public class PreWarningItemCache { ...@@ -271,7 +283,18 @@ public class PreWarningItemCache {
PreWarningItemCache.storagePosManager = storagePosManager; PreWarningItemCache.storagePosManager = storagePosManager;
} }
private static String getSeq(){
return UUID.randomUUID().toString();
//待修改----
private String getSeq() {
// return "H" + getNextId(getEntityClass().getName());
int seq = atomicInteger.addAndGet(1);
return "H" + seq;
}
@Override
public Class getEntityClass() {
return PreWarningItemCache.class;
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!