Commit 1674644d LN

10031自检功能合入

1 个父辈 6f517b6c
......@@ -564,12 +564,15 @@ public class StatusBean {
} else {
locale = new Locale(language);
}
String lanMsg=MessageUtils.getText(msgKey, msgParam, locale, message);
setMsg(lanMsg);
if(ObjectUtil.isNotEmpty(lanMsg)){
setMsg(lanMsg);
}
}else{
String lanMsg=MessageUtils.getText(msgKey, msgParam, MessageUtils.getDefaultLocal(), message);
setMsg(lanMsg);
if(ObjectUtil.isNotEmpty(lanMsg)){
setMsg(lanMsg);
}
}
}
}
......@@ -101,7 +101,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
@Autowired
protected IComponentManager componentManager;
@Autowired
private ISelfAuditManager selfAuditManager;
private SelfAuditUtil selfAuditUtil;
/**
* CID的服务器消息(key 为 cid)
......@@ -178,25 +178,20 @@ public class BaseDeviceHandler implements IDeviceHandler {
protected StatusBean handleSelfAudit(StatusBean statusBean) {
try {
String batchNo = dataCache.getCache(Constants.CACHE_SELFAUDIT_BATCHNO);
if (ObjectUtil.isNotEmpty(batchNo)) {
//盘点是否暂停
SelfAudit selfAudit = SelfAuditUtil.getSelfAudit(batchNo);
if (selfAudit == null) {
selfAudit = selfAuditManager.findByBatchNo(batchNo);
if(selfAudit!=null){
SelfAuditUtil.updateShelfAudit(selfAudit);
}
}
if (selfAudit != null) {
Storage storage = dataCache.getStorage(statusBean.getCid());
if (storage != null && selfAudit.getStorageIds().contains(storage.getId())){
if (selfAudit.getStatus().equals(SELFAUDIT_STATUS.NEW.name()) || selfAudit.getStatus().equals(SELFAUDIT_STATUS.EXECUTING.name())) {
statusBean.addData("selfAudit", batchNo);
}
//盘点是否暂停
SelfAudit selfAudit = selfAuditUtil.getCurrSelfAudit();
if (selfAudit != null) {
Storage storage = dataCache.getStorage(statusBean.getCid());
if (storage != null && selfAudit.getStorageIds().contains(storage.getId())) {
if (selfAudit.getStatus().equals(SELFAUDIT_STATUS.NEW.name()) || selfAudit.getStatus().equals(SELFAUDIT_STATUS.EXECUTING.name())) {
statusBean.addData("selfAudit", selfAudit.getBatchNo());
}
//如果是已结束等待处理
if (selfAudit.getStatus().equals(SELFAUDIT_STATUS.END.name())) {
statusBean.addData("selfAuditException", "true");
}
}
}
} catch (Exception ex) {
......
......@@ -37,6 +37,7 @@ public class VerticalBoxHandler extends BaseDeviceHandler {
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean);
statusBean=handleSelfAudit(statusBean);
// statusBean = saveStatus(statusBean);
String cid = statusBean.getCid();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
......
......@@ -20,7 +20,7 @@ public enum SELFAUDIT_STATUS {
FINISHED,
/**
* 已结束,未完成手动结束
* 已结束,库位有异常,需要处理后完成
*/
END;
......
......@@ -29,6 +29,12 @@ public class SelfAuditItemDto implements Serializable {
@ApiModelProperty("实际条码")
private String actualBarcode;
@ApiModelProperty("0=等待中,1=出库完成,2=盘点完成")
@ApiModelProperty("盘点状态 0=等待中,1=出库完成,2=入库完成,3=数据异常待处理,4=异常已处理")
private int itemStatus=0;
@ApiModelProperty("盘宽")
private int plateW = 0;
@ApiModelProperty("盘高")
private int plateH = 0;
}
......@@ -41,12 +41,23 @@ public class SelfAuditItem extends BasePo implements Serializable {
*库存条码
*/
private String barcode;
/**
* 盘宽
*/
private int plateW = 0;
/**
* 盘高
*/
private int plateH = 0;
/**
*实际条码
*/
private String actualBarcode;
/**
* 盘点状态 0=等待中,1=出库完成,2=盘点完成
* 盘点状态 0=等待中,1=出库完成,2=入库完成,3=数据异常待处理,4=异常已处理
*/
private int itemStatus=0;
......@@ -57,8 +68,12 @@ public class SelfAuditItem extends BasePo implements Serializable {
item.setPosId(pos.getId());
item.setPosName(pos.getPosName());
item.setStorageId(pos.getStorageId());
item.setPlateH(0);
item.setPlateW(0);
if(pos.getBarcode()!=null&& pos.getBarcode().getBarcode()!=null) {
item.setBarcode(pos.getBarcode().getBarcode());
item.setPlateH(pos.getBarcode().getHeight());
item.setPlateW(pos.getBarcode().getPlateSize());
}else{
item.setBarcode("");
}
......
package com.neotel.smfcore.core.selfAudit.util;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.selfAudit.enums.SELFAUDIT_STATUS;
import com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditItemManager;
import com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditManager;
import com.neotel.smfcore.core.selfAudit.service.po.SelfAudit;
import com.neotel.smfcore.core.selfAudit.service.po.SelfAuditItem;
import com.neotel.smfcore.core.system.service.po.DataLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Service
public class SelfAuditUtil {
@Autowired
private DataCache dataCache;
@Autowired
private ISelfAuditManager selfAuditManager;
@Autowired
private ISelfAuditItemManager selfAuditItemManager;
public static String createBatchNo() {
Date date = new Date();
String dateStr = DateUtil.toDateString(date, "yyyyMMddHHmm");
return "NO" + dateStr;
}
private static Map<String, SelfAudit> selfAuditMap=new ConcurrentHashMap<>();
private Map<String, SelfAudit> selfAuditMap=new ConcurrentHashMap<>();
public static SelfAudit getSelfAudit(String batchNo){
if(selfAuditMap==null){
selfAuditMap=new HashMap<>();
public SelfAudit getSelfAudit(String batchNo) {
if (selfAuditMap == null) {
selfAuditMap = new HashMap<>();
}
SelfAudit selfAudit = selfAuditMap.get(batchNo);
if (selfAudit == null) {
selfAudit = selfAuditManager.findByBatchNo(batchNo);
if (selfAudit != null) {
updateCache(selfAudit);
}
}
return selfAuditMap.get(batchNo);
return selfAudit;
}
/**
* 更新数据库,更新缓存
* @param selfAudit
*/
public void updateShelfAudit(SelfAudit selfAudit) {
selfAuditManager.save(selfAudit);
selfAuditMap.put(selfAudit.getBatchNo(), selfAudit);
}
/**
* 更新缓存
* @param selfAudit
*/
public void updateCache(SelfAudit selfAudit) {
selfAuditMap.put(selfAudit.getBatchNo(), selfAudit);
}
public SelfAudit getCurrSelfAudit() {
String batchNo = dataCache.getCache(Constants.CACHE_SELFAUDIT_BATCHNO);
if (ObjectUtil.isNotEmpty(batchNo)) {
SelfAudit selfAudit = getSelfAudit(batchNo);
if (selfAudit != null) {
if (selfAudit.getStatus().equals(SELFAUDIT_STATUS.FINISHED.name())) {
log.info("从dataCache删除已完成的盘点批次号:" + selfAudit.getBatchNo() + " ");
dataCache.updateCache(Constants.CACHE_SELFAUDIT_BATCHNO, "");
return null;
}
}
return selfAudit;
public static void updateShelfAudit(SelfAudit selfAudit){
selfAuditMap.put(selfAudit.getBatchNo(),selfAudit);
}
return null;
}
public void onTaskStatusChange(DataLog task) {
try {
//只有出库任务才需要处理
if (task.isFinished() && task.isCheckOutTask()) {
finishedOutTask(task);
}
} catch (Exception e) {
log.error("更新判断任务状态出错", e);
}
}
private void finishedOutTask(DataLog task) {
try {
//盘点是否暂停
SelfAudit selfAudit = getCurrSelfAudit();
if (selfAudit != null) {
//如果是已结束等待处理
if (selfAudit.getStatus().equals(SELFAUDIT_STATUS.END.name())) {
String posName = task.getPosName();
//自动生成出库任务
List<SelfAuditItem> newItems = new ArrayList<>();
boolean findOk = false;
for (SelfAuditItem item :
selfAudit.getItems()) {
if (item.getItemStatus() == 3 && item.getPosName().equals(posName)) {
//判断是否有异常的料
item.setItemStatus(4);
selfAuditItemManager.save(item);
log.info("处理盘点批次【" + selfAudit.getBatchNo() + "】, 仓位【" + posName + "】 出库任务执行完成,更改状态为4");
findOk = true;
}
newItems.add(item);
}
//判断是否完成
if (findOk) {
selfAudit.setItems(newItems);
//判断是否有异常
for (SelfAuditItem item : newItems) {
if (item.getItemStatus() == 3) {
return;
}
}
selfAudit.setStatus(SELFAUDIT_STATUS.FINISHED.name());
log.info(" 盘点[" + selfAudit.getBatchNo() + "] 已全部处理完成 更改盘点状态为已结束");
// selfAuditManager.save(selfAudit);
updateShelfAudit(selfAudit);
}
}
}
} catch (Exception ex) {
log.error("handleSelfAudit error:" + ex.getMessage());
}
}
}
......@@ -357,6 +357,7 @@ smfcore.micron.apiClose=Not yet open
smfcore.api.error=api.error: error={0},message={1},detial={2}
smfcore.api.toXray={0}\u9700\u8981\u53BB\u70B9\u6599
smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
......
......@@ -355,4 +355,5 @@ smfcore.micron.nodata=No information found
smfcore.api.fail={0} Failed to get data
smfcore.micron.apiClose=Not yet open
smfcore.api.toXray={0}Need to Xray
smfcore.paretoChart=Pareto chart
\ No newline at end of file
smfcore.paretoChart=Pareto chart
smfcore.selfAudit.hasOutTask=The location [{0}] already has a release task
\ No newline at end of file
......@@ -350,4 +350,5 @@ smfcore.micron.xray.offline={0}\u9700\u8981\u70B9\u6599\uFF0C\u70B9\u6599\u673A\
smfcore.micron.nodata=\u672A\u627E\u5230\u4FE1\u606F
smfcore.api.fail={0} Failed to get data
smfcore.micron.apiClose=Not yet open
smfcore.paretoChart=\u30D1\u30EC\u30FC\u30C8\u56F3
\ No newline at end of file
smfcore.paretoChart=\u30D1\u30EC\u30FC\u30C8\u56F3
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
\ No newline at end of file
......@@ -350,4 +350,5 @@ smfcore.micron.xray.offline={0}\u9700\u8981\u70B9\u6599\uFF0C\u70B9\u6599\u673A\
smfcore.micron.nodata=\u672A\u627E\u5230\u4FE1\u606F
smfcore.api.fail={0} \u83B7\u53D6\u6570\u636E\u5931\u8D25
smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
\ No newline at end of file
smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
\ No newline at end of file
......@@ -351,4 +351,5 @@ smfcore.micron.xray.offline={0}\u9700\u8981\u9EDE\u6599\uFF0C\u9EDE\u6599\u6A5F\
smfcore.micron.nodata=\u672A\u627E\u5230\u4FE1\u606F
smfcore.api.fail={0} \u83B7\u53D6\u6570\u636E\u5931\u8D25
smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart=\u5E15\u7D2F\u6258\u5716
\ No newline at end of file
smfcore.paretoChart=\u5E15\u7D2F\u6258\u5716
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!