Commit 1f4db1e4 LN

增加SMD_MIMO_G3类型

1 个父辈 ab29875c
package com.neotel.smfcore.core.device.handler.impl;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.custom.djk20388.util.AgvDataUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Map;
@Api(tags = "MIMOG3: 批量料仓(竖屏界面)增加压力传感器,灯带")
@Service
@Slf4j
public class MimoG3BoxHandler extends BaseDeviceHandler{
@Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
String cid = statusBean.getCid();
Storage storage = dataCache.getStorage(cid);
if (storage == null) {
log.error("料仓cid: [" + cid + "]不存在");
return null;
}
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean);
// if(ObjectUtil.isNotEmpty(statusBean.getMsg())){
// log.info("cid["+cid+"],msgCode["+statusBean.getMsgCode()+"],msg["+statusBean.getMsg()+"]");
// }
statusBean = saveAlarmAndHumidity(statusBean);
statusBean = handleInOutFinished(statusBean);
StatusBean humidityResult = handleHumidity(statusBean);
statusBean=handleSelfAudit(statusBean);
if (humidityResult != null) {
return humidityResult;
}
if (statusBean.getOp() == OP.PUT_IN) {
log.debug("入库:" + statusBean.toString());
statusBean = putInLine(storage, statusBean);
} else {
//先查找紧急出库的物料
StatusBean outSingleTaskResult = outSingleOutTask(storage, statusBean);
if(outSingleTaskResult != null){
statusBean = outSingleTaskResult;
}else{
//查看是否有要出库的操作
statusBean =taskService.checkOut(storage, statusBean);
}
}
//获取操作
Map<String, String> opMap = DevicesStatusUtil.getAndRemoveOp(cid);
statusBean.putOp(opMap);
//agv附加操作
Map<String, String> agvToMimoOpMap = AgvDataUtil.getAndRemoveToMimoOp(cid);
statusBean.putOp(agvToMimoOpMap);
return statusBean;
}
@Override
protected StatusBean handleInOutFinished(StatusBean statusBean) {
Map<String, BoxStatusBean> statusOfBoxes = statusBean.getBoxStatus();
if (statusOfBoxes != null) {
for (BoxStatusBean boxStatus : statusOfBoxes.values()) {
try {
//出库入库完成处理
int status = boxStatus.getStatus();
String posName = boxStatus.getPosId();
String barcode = boxStatus.getBarcode();
int executeTime = boxStatus.getExecuteTime();
if ((!Strings.isNullOrEmpty(posName)) || (!Strings.isNullOrEmpty(barcode))) {//客户端发一次完成之后,会发空的 posName,不需要处理
if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
finishedPutIn(statusBean.getCid(), posName, barcode, executeTime);
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(), posName,barcode,executeTime, OP_STATUS.OUT_BOX);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
endOutTask(statusBean.getCid(), posName, barcode);
}
}
} catch (ValidateException e) {
log.error("更新状态时出错" + e.getMessage());
}
}
}
return statusBean;
}
/**
* 出库紧急物料
*/
public StatusBean outSingleOutTask(Storage storage, StatusBean statusBean) {
try {
//准备更新暂停出入库
if (dataCache.getCache(Constants.CACHE_StopOut)) {
return statusBean;
}
String cid = storage.getCid();
//紧急出库任务不论是否有入库任务都发到客户端,由客户端在入库间隙进行出库
Collection<DataLog> queueTasks = taskService.getQueueTasks();
int excuttingOutTaskNum = 0;
DataLog singleOutTask = null;
for (DataLog queueTask : queueTasks) {
if(queueTask.isCheckOutTask()){
if (cid.equals(queueTask.getCid())) {
if(queueTask.isExecuting()){
excuttingOutTaskNum ++;
}
if (queueTask.isSingleOut() && queueTask.isWait()) {
//单盘优先出库
if (singleOutTask == null || queueTask.getCreateDate().before(singleOutTask.getCreateDate())) {
singleOutTask = queueTask;
}
}
}
}
}
//已经有2个出库任务在执行,不再发了
if(excuttingOutTaskNum < 2){
if (singleOutTask != null) {
log.info("MIMO料仓优先分配紧急出库任务" + singleOutTask.getBarcode() + "[" + singleOutTask.getPosName() + "]到 " + cid);
singleOutTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(singleOutTask);
statusBean.setOp(OP.CHECKOUT);
String posName = singleOutTask.getPosName();
Barcode codeObj = barcodeManager.findByBarcode(singleOutTask.getBarcode());
int plateW = 0;
int plateH = 0;
if (codeObj != null) {
plateW = codeObj.getPlateSize();
plateH = codeObj.getHeight();
} else {
log.warn("MIMO紧急出库无料仓位" + storage.getName() + "[" + posName + "]");
StoragePos pos=storagePosManager.getByPosName(posName);
plateW = pos.getW();
plateH = pos.getH();
}
statusBean.addPosInfo(singleOutTask.getBarcode(), posName, plateW, plateH, true);
log.info("出库紧急物料" + storage.getName() + "[" + posName + "]物料[" + singleOutTask.getBarcode() + "]" + "发送到客户端" + cid);
return statusBean;
}
}
} catch (Exception e) {
log.error("出库紧急物料出错", e);
}
return null;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.SMD_MIMO_G2;
}
}
......@@ -298,6 +298,84 @@ public class SelfAuditDeviceController {
return ResultBean.newErrorResult(99, "smfcore.selfAudit.posNotFind", "未找到库位[{0}]的盘点信息");
}
@ApiOperation("盘点: MIMOG3 自动盘点完成,有料时回传原条码,没料时实际条码为空 ")
@PostMapping(value = "/posValidationEnd")
@ResponseBody
@AnonymousAccess
public ResultBean posValidationEnd(HttpServletRequest request) {
String posName = request.getParameter("posName");
String barcode = request.getParameter("barcode");
String actualBarcode = request.getParameter("actualBarcode");
log.info("盘点:posSelfAuditEnd:posName=[" + posName + "],barcode=[" + barcode + "],actualBarcode=[" + actualBarcode + "]");
//发送库位号,库存条码,实时条码
SelfAudit selfAudit = getCurrObj();
if (selfAudit == null) {
log.info("盘点:posSelfAuditEnd:posName=[" + posName + "],barcode=[" + barcode + "],actualBarcode=[" + actualBarcode + "]:未找到盘点信息");
return ResultBean.newErrorResult(99, "smfcore.selfAudit.notFind", "未找到盘点信息");
}
List<SelfAuditItem> items = selfAudit.getItems();
List<SelfAuditItem> newItems = new ArrayList<>();
boolean findOk = false;
for (SelfAuditItem item :
items) {
if (item.getPosName().equals(posName)) {
findOk=true;
if(!barcode.equals(item.getBarcode())){
barcode=item.getBarcode();
log.info("盘点:posSelfAuditEnd:posName=[" + posName + "],纠正 barcode=[" + item.getBarcode() + "]");
}
item.setActualBarcode(actualBarcode);
//如果异常,改为3,否则改为2
if(item.getBarcode().equals(actualBarcode)){
item.setItemStatus(2);
}else{
item.setItemStatus(3);
}
selfAuditItemManager.save(item);
log.info(" 盘点[" + selfAudit.getBatchNo() + "]库位入库完成:posName[" + item.getPosName() + "]barcode[" + item.getBarcode() + "],actualBarcode=[" + actualBarcode + "],设置状态="+item.getItemStatus());
//不需要处理出入库
}
newItems.add(item);
}
if (findOk) {
selfAudit.setItems(newItems);
selfAudit.setEndItemNum(selfAudit.getEndItemNum()+1);
if(selfAudit.getEndItemNum()>=selfAudit.getTotalItemNum()){
boolean hasE=false;
//判断是否有异常
for (SelfAuditItem item :
newItems) {
if(item.getItemStatus()==3){
hasE=true;
break;
}
}
if(hasE){
selfAudit.setStatus(SELFAUDIT_STATUS.END.name());
log.info(" 盘点[" + selfAudit.getBatchNo() + "] 已完成库位数[" + selfAudit.getEndItemNum() + "]总库位数[" + selfAudit.getTotalItemNum() + "],存在异常库位,更改盘点状态为完成,等待处理异常库位");
}else{
selfAudit.setStatus(SELFAUDIT_STATUS.FINISHED.name());
log.info(" 盘点[" + selfAudit.getBatchNo() + "] 已完成库位数[" + selfAudit.getEndItemNum() + "]总库位数[" + selfAudit.getTotalItemNum() + "],更改盘点状态为已结束");
}
}
// selfAuditManager.save(selfAudit);
selfAuditUtil.updateShelfAudit(selfAudit);
return ResultBean.newOkResult("ok");
}
log.info("盘点:posSelfAuditEnd:posName=[" + posName + "],barcode=[" + barcode + "],actualBarcode=[" + actualBarcode + "]:未找到库位的盘点信息");
return ResultBean.newErrorResult(99, "smfcore.selfAudit.posNotFind", "未找到库位[{0}]的盘点信息");
}
private Barcode resolveOneValideBarcode(String paramName,String code){
//物料不一致 优先实际条码入库
Barcode barcodeIn=null;
......
......@@ -149,6 +149,11 @@ public enum DeviceType {
* 24 推荐库位钢网料架 NLSM
*/
NLSM("storage.type.nlsm"),
/**
* 25 SMD_MIMO_G3
*/
SMD_MIMO_G3("storage.type.smdMimoG3"),
;
private String key;
......@@ -170,6 +175,6 @@ public enum DeviceType {
}
public static List<DeviceType> availableTypeList(){
return Lists.newArrayList(AUTO,LINE,BATCH,SOLDERPASTE,VERTICALBOX,SMD_XL,SMD_DUO,SMD_XLC,SMD_XLR,VIRTUAL,NL,NLP,NLM,NLL,NLS,NLSM,SMDBOX_THIRD,SMD_MIMO_G2);
return Lists.newArrayList(AUTO,LINE,BATCH,SOLDERPASTE,VERTICALBOX,SMD_XL,SMD_DUO,SMD_XLC,SMD_XLR,VIRTUAL,NL,NLP,NLM,NLL,NLS,NLSM,SMDBOX_THIRD,SMD_MIMO_G2,SMD_MIMO_G3);
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!