Commit 2619ce03 zshaohui

1.更改任务状态,增加锁优化

1 个父辈 ac1d1fd3
...@@ -162,7 +162,7 @@ public class LiteOrderCache { ...@@ -162,7 +162,7 @@ public class LiteOrderCache {
public void onTaskStatusChange(DataLog task) { public void onTaskStatusChange(DataLog task) {
try { try {
//只有任务完成或取消时才处理,任务未完成直接返回 //只有任务完成或取消时才处理,任务未完成直接返回
if (task.isFinished() || task.isCancel()) { if ((task.isFinished() || task.isCancel() && StringUtils.isNotEmpty(task.getSubSourceId()))) {
finishedOrderTask(task); finishedOrderTask(task);
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -284,10 +284,12 @@ public class LiteOrderCache { ...@@ -284,10 +284,12 @@ public class LiteOrderCache {
smfApi.onOrderStatusChange(liteOrder); smfApi.onOrderStatusChange(liteOrder);
} }
private Map<String,String> cacheOrderMap = new ConcurrentHashMap<>();
/** /**
* 更新工单状态信息 * 更新工单状态信息
*/ */
private synchronized void finishedOrderTask(DataLog task) throws ValidateException { private void finishedOrderTask(DataLog task) throws ValidateException {
String barcode = task.getBarcode(); String barcode = task.getBarcode();
if (barcode.startsWith("C07") || barcode.startsWith("C13") || barcode.startsWith("C15")){ if (barcode.startsWith("C07") || barcode.startsWith("C13") || barcode.startsWith("C15")){
return; return;
...@@ -297,12 +299,19 @@ public class LiteOrderCache { ...@@ -297,12 +299,19 @@ public class LiteOrderCache {
//更新工单状态 //更新工单状态
String orderNo = task.getSourceName(); String orderNo = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) { if (!Strings.isNullOrEmpty(orderNo)) {
String lockObj = cacheOrderMap.get(orderNo);
if (StringUtils.isEmpty(lockObj)) {
lockObj = orderNo;
cacheOrderMap.put(orderNo, lockObj);
}
synchronized (cacheOrderMap.get(orderNo)) {
LiteOrder order = liteOrderMap.get(orderNo); LiteOrder order = liteOrderMap.get(orderNo);
//LiteOrder order = null; //LiteOrder order = null;
if (order == null) { if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载"); log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo); order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){ if (order != null) {
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId()); List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items); order.setOrderItems(items);
} }
...@@ -313,13 +322,12 @@ public class LiteOrderCache { ...@@ -313,13 +322,12 @@ public class LiteOrderCache {
order.setTaskReelCount(order.getTaskReelCount() - 1); order.setTaskReelCount(order.getTaskReelCount() - 1);
//order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1); //order.setTotalTaskReelCount(order.getTotalTaskReelCount()-1);
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount()); log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]已取消,任务数-1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
if (order.getFinishedReelCount() == 0 && order.getTaskReelCount() == 0){ if (order.getFinishedReelCount() == 0 && order.getTaskReelCount() == 0) {
if (StringUtils.isNotBlank(task.getExport())){ if (StringUtils.isNotBlank(task.getExport())) {
StorageExportUtil.clearExport(task.getExport()); StorageExportUtil.clearExport(task.getExport());
} }
} }
} } else if (task.isFinished()) {
else if (task.isFinished()) {
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1); order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1);
if (task.getExtendType() != ExtendType.MANUAL_FEEDING) { if (task.getExtendType() != ExtendType.MANUAL_FEEDING) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1); order.setFinishedReelCount(order.getFinishedReelCount() + 1);
...@@ -329,12 +337,12 @@ public class LiteOrderCache { ...@@ -329,12 +337,12 @@ public class LiteOrderCache {
List<LiteOrderItem> liteOrderItems = new ArrayList<>(); List<LiteOrderItem> liteOrderItems = new ArrayList<>();
if (LITEORDER_SOURCE.OUTTER.name().equals(order.getSource())) { if (LITEORDER_SOURCE.OUTTER.name().equals(order.getSource())) {
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1); order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1);
log.info("更新任务盘数:"+order.getTaskReelCount()+",已完成的数量:"+order.getFinishedReelCount()); log.info("更新任务盘数:" + order.getTaskReelCount() + ",已完成的数量:" + order.getFinishedReelCount());
if (orderItems != null && !orderItems.isEmpty()) { if (orderItems != null && !orderItems.isEmpty()) {
for (LiteOrderItem liteOrderItem : orderItems) { for (LiteOrderItem liteOrderItem : orderItems) {
if (liteOrderItem.getId().equals(orderItemId)) { if (liteOrderItem.getId().equals(orderItemId)) {
//判断是否超发,如果是超发,则赋值 //判断是否超发,如果是超发,则赋值
if (order.isExcess()){ if (order.isExcess()) {
if (!liteOrderItem.isOutFinished()) { if (!liteOrderItem.isOutFinished()) {
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum()); liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum());
liteOrderItem.setTotalReelCountByOutNum(liteOrderItem.getTotalReelCountByOutNum() + 1); liteOrderItem.setTotalReelCountByOutNum(liteOrderItem.getTotalReelCountByOutNum() + 1);
...@@ -375,18 +383,18 @@ public class LiteOrderCache { ...@@ -375,18 +383,18 @@ public class LiteOrderCache {
log.error("工单[" + orderNo + "]的任务[" + task.getBarcode() + "]完成时,状态为:" + task.getStatus()); log.error("工单[" + orderNo + "]的任务[" + task.getBarcode() + "]完成时,状态为:" + task.getStatus());
} }
if (LITEORDER_SOURCE.OUTTER.name().equals(order.getSource())){ if (LITEORDER_SOURCE.OUTTER.name().equals(order.getSource())) {
if (!order.isClosed()) { if (!order.isClosed()) {
//工单未关闭的话,检查状态,全部都出完进行关闭 //工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true; boolean closed = true;
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
if (order.isExcess()){ if (order.isExcess()) {
if (liteOrderItem.getOutNum() < liteOrderItem.getNeedNum() || liteOrderItem.getOutReelCount() < liteOrderItem.getNeedReelCount()){ if (liteOrderItem.getOutNum() < liteOrderItem.getNeedNum() || liteOrderItem.getOutReelCount() < liteOrderItem.getNeedReelCount()) {
closed = false; closed = false;
break; break;
} }
} else { } else {
if (liteOrderItem.getTotalOutNum() < liteOrderItem.getNeedNum() || liteOrderItem.getTotalOutReelCount() < liteOrderItem.getNeedReelCount()){ if (liteOrderItem.getTotalOutNum() < liteOrderItem.getNeedNum() || liteOrderItem.getTotalOutReelCount() < liteOrderItem.getNeedReelCount()) {
closed = false; closed = false;
break; break;
} }
...@@ -408,12 +416,12 @@ public class LiteOrderCache { ...@@ -408,12 +416,12 @@ public class LiteOrderCache {
} }
if (closed) { if (closed) {
Boolean ignoreLineCheck = dataCache.getCache(Constants.CACHE_ignoreLineCheck); Boolean ignoreLineCheck = dataCache.getCache(Constants.CACHE_ignoreLineCheck);
if (ignoreLineCheck == null){ if (ignoreLineCheck == null) {
ignoreLineCheck = false; ignoreLineCheck = false;
} }
if (ignoreLineCheck) { if (ignoreLineCheck) {
log.info("ignoreLineCheck为:" + ignoreLineCheck + "清空出料口信息:" + task.getExport() + ",工单号为:" + task.getSourceName()); log.info("ignoreLineCheck为:" + ignoreLineCheck + "清空出料口信息:" + task.getExport() + ",工单号为:" + task.getSourceName());
if (StringUtils.isNotBlank(task.getExport())){ if (StringUtils.isNotBlank(task.getExport())) {
StorageExport export = StorageExportUtil.getExport(task.getExport()); StorageExport export = StorageExportUtil.getExport(task.getExport());
if (StringUtils.isNotBlank(export.getHSerial())) { if (StringUtils.isNotBlank(export.getHSerial())) {
StorageExportUtil.clearExport(task.getExport()); StorageExportUtil.clearExport(task.getExport());
...@@ -430,12 +438,12 @@ public class LiteOrderCache { ...@@ -430,12 +438,12 @@ public class LiteOrderCache {
log.info("工单[" + orderNo + "]的出库任务已完成,共出库:" + order.getFinishedReelCount() + " 盘"); log.info("工单[" + orderNo + "]的出库任务已完成,共出库:" + order.getFinishedReelCount() + " 盘");
order.setFinishDate(new Date()); order.setFinishDate(new Date());
Boolean ignoreLineCheck = dataCache.getCache(Constants.CACHE_ignoreLineCheck); Boolean ignoreLineCheck = dataCache.getCache(Constants.CACHE_ignoreLineCheck);
if (ignoreLineCheck == null){ if (ignoreLineCheck == null) {
ignoreLineCheck = false; ignoreLineCheck = false;
} }
if (ignoreLineCheck) { if (ignoreLineCheck) {
log.info("ignoreLineCheck为:" + ignoreLineCheck + "清空出料口信息:" + task.getExport() + ",工单号为:" + task.getSourceName()); log.info("ignoreLineCheck为:" + ignoreLineCheck + "清空出料口信息:" + task.getExport() + ",工单号为:" + task.getSourceName());
if (StringUtils.isNotBlank(task.getExport())){ if (StringUtils.isNotBlank(task.getExport())) {
StorageExport export = StorageExportUtil.getExport(task.getExport()); StorageExport export = StorageExportUtil.getExport(task.getExport());
if (StringUtils.isNotBlank(export.getHSerial())) { if (StringUtils.isNotBlank(export.getHSerial())) {
StorageExportUtil.clearExport(task.getExport()); StorageExportUtil.clearExport(task.getExport());
...@@ -450,11 +458,11 @@ public class LiteOrderCache { ...@@ -450,11 +458,11 @@ public class LiteOrderCache {
List<LiteOrderItem> orderItems = order.getOrderItems(); List<LiteOrderItem> orderItems = order.getOrderItems();
for (LiteOrderItem orderItem : orderItems) { for (LiteOrderItem orderItem : orderItems) {
if (orderItem.getTotalOutNum() <= 0) { if (orderItem.getTotalOutNum() <= 0) {
log.info("行号:"+orderItem.getTicketItem()+",单据号:"+orderItem.getTicketCode()+",发料数量为0,通知wms缺料"); log.info("行号:" + orderItem.getTicketItem() + ",单据号:" + orderItem.getTicketCode() + ",发料数量为0,通知wms缺料");
try { try {
String binCode = ""; String binCode = "";
Map<String, String> binCacheMap = BinCacheUtil.binCodeCacheMap(orderItem.getSrcWarehouse(),""); Map<String, String> binCacheMap = BinCacheUtil.binCodeCacheMap(orderItem.getSrcWarehouse(), "");
for (String code : binCacheMap.keySet()) { for (String code : binCacheMap.keySet()) {
binCode = code; binCode = code;
break; break;
...@@ -470,7 +478,7 @@ public class LiteOrderCache { ...@@ -470,7 +478,7 @@ public class LiteOrderCache {
LuxsanApi.ticketPick(request); LuxsanApi.ticketPick(request);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.info("行号:"+orderItem.getTicketItem()+",单据号:"+orderItem.getTicketCode()+",通知缺料失败:"+e.getMessage()); log.info("行号:" + orderItem.getTicketItem() + ",单据号:" + orderItem.getTicketCode() + ",通知缺料失败:" + e.getMessage());
} }
} }
} }
...@@ -485,6 +493,7 @@ public class LiteOrderCache { ...@@ -485,6 +493,7 @@ public class LiteOrderCache {
} }
} }
} }
}
public ORDER_COLOR getNextColor() { public ORDER_COLOR getNextColor() {
//设置颜色 //设置颜色
......
...@@ -81,7 +81,7 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -81,7 +81,7 @@ public class LuxsanApi extends DefaultSmfApiListener {
kafkaService.sendPosChange(task.getPosName(), "0"); kafkaService.sendPosChange(task.getPosName(), "0");
} }
} }
if (task.isFinished() || task.isCancel()) { /*if (task.isFinished() || task.isCancel()) {
String subSourceId = task.getSubSourceId(); String subSourceId = task.getSubSourceId();
if (StringUtils.isNotEmpty(subSourceId)) { if (StringUtils.isNotEmpty(subSourceId)) {
LiteOrderItem orderItem = liteOrderItemManager.get(subSourceId); LiteOrderItem orderItem = liteOrderItemManager.get(subSourceId);
...@@ -99,7 +99,7 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -99,7 +99,7 @@ public class LuxsanApi extends DefaultSmfApiListener {
} }
} }
} }
} }*/
} }
...@@ -1500,7 +1500,7 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -1500,7 +1500,7 @@ public class LuxsanApi extends DefaultSmfApiListener {
@Override @Override
public void onOrderStatusChange(String orderNotifyUrl, LiteOrder liteOrder) { public void onOrderStatusChange(String orderNotifyUrl, LiteOrder liteOrder) {
//更新水位预警的待发料信息 //更新水位预警的待发料信息
if (liteOrder.isTaskFinished() || liteOrder.isClosed()) { /*if (liteOrder.isTaskFinished() || liteOrder.isClosed()) {
List<LiteOrderItem> orderItems = liteOrder.getOrderItems(); List<LiteOrderItem> orderItems = liteOrder.getOrderItems();
for (LiteOrderItem orderItem : orderItems) { for (LiteOrderItem orderItem : orderItems) {
String warningItemId = orderItem.getWarningItemId(); String warningItemId = orderItem.getWarningItemId();
...@@ -1519,7 +1519,7 @@ public class LuxsanApi extends DefaultSmfApiListener { ...@@ -1519,7 +1519,7 @@ public class LuxsanApi extends DefaultSmfApiListener {
} }
} }
} }
} }*/
} }
@Override @Override
......
...@@ -1911,6 +1911,8 @@ public class CDeviceController { ...@@ -1911,6 +1911,8 @@ public class CDeviceController {
if (StringUtils.isNotEmpty(currentLoc)) { if (StringUtils.isNotEmpty(currentLoc)) {
dataLog.setCurrentLoc(currentLoc); dataLog.setCurrentLoc(currentLoc);
} }
log.info(barcode.getBarcode()+"物料扫码出库,更改工单任务数开始");
taskService.updateFinishedTask(dataLog); taskService.updateFinishedTask(dataLog);
log.info(barcode.getBarcode()+"物料扫码出库,更改工单任务数结束");
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!