Commit 61b1a9c1 LN

1.状态修改。

2.API001启用API测试时才调用。
3.API001失败也需要记录。
4.入库数量可点开查看详情。
1 个父辈 76483319
...@@ -670,6 +670,13 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -670,6 +670,13 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (ObjectUtil.isEmpty(rfid)) { if (ObjectUtil.isEmpty(rfid)) {
return barcode; return barcode;
} }
Boolean useAPi=dataCache.getCache(Constants.CACHE_API_TEST);
if(useAPi==null){
useAPi=false;
}
if(!useAPi) {
return barcode;
}
//是否启用 //是否启用
if (!MicronApi.isEnable()) { if (!MicronApi.isEnable()) {
return barcode; return barcode;
...@@ -702,7 +709,7 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -702,7 +709,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
log.info("条码[" + barcode.getBarcode() + "]获取库位号,operationId 为空,不需要接口验证"); log.info("条码[" + barcode.getBarcode() + "]获取库位号,operationId 为空,不需要接口验证");
return barcode; return barcode;
} }
barcode = MicronApi.API001(operationId, barcode); barcode = MicronApi.API001(operationId,rfid, barcode);
if (barcode == null) { if (barcode == null) {
throw new ValidateException("smfcore.error.barcode.invalid", "未找到有效的条码"); throw new ValidateException("smfcore.error.barcode.invalid", "未找到有效的条码");
} }
......
...@@ -3,27 +3,30 @@ package com.neotel.smfcore.core.inList.enums.INITEM; ...@@ -3,27 +3,30 @@ package com.neotel.smfcore.core.inList.enums.INITEM;
public class INITEM_STATUS { public class INITEM_STATUS {
/**等待中*/ /**等待中*/
public static int Wait=0; public static String Wait="Wait";
/**Api001验证失败*/
public static String API001NG="API001NG";
/**入库中*/ /**入库中*/
public static int PutIn=1; public static String PutIn="PutIn";
/**入库完成*/ /**入库完成,等待API002推送*/
public static int PutEnd=2; public static String PutEnd="PutEnd";
//入库取消 /**入库取消*/
public static int Cancel=3; public static String Cancel="Cancel";
/**XRay点料*/ /**XRay点料*/
public static int XRay=4; public static String XRay="XRay";
/**XRay点料结果提交失败*/ /**XRay点料结果提交失败*/
public static int XRayFail=5; public static String XRayFail="XRayFail";
/**已点料完成,等待获取库位号*/
public static String XRayEnd="XRayEnd";
/**入库正常完成*/ /**入库正常完成*/
public static int Success=6; public static String Success="Success";
/**入库通知失败*/
public static int Fail=7; /**入库通知失败 新页面显示提交失败的*/
/**已点料完成,等待获取库位号*/ public static String Fail="Fail";
public static int XRayEnd=8;
} }
...@@ -26,7 +26,7 @@ public class InListItem extends BasePo implements Serializable { ...@@ -26,7 +26,7 @@ public class InListItem extends BasePo implements Serializable {
item.setNum(num); item.setNum(num);
return item; return item;
} }
public static InListItem newMItem(String name, Barcode barcode, String rfid,String posName,int s,String mType){ public static InListItem newMItem(String name, Barcode barcode, String rfid,String posName,String s,String mType){
InListItem item=new InListItem(); InListItem item=new InListItem();
item.setName(name); item.setName(name);
item.setPN(barcode.getPartNumber()); item.setPN(barcode.getPartNumber());
...@@ -88,13 +88,18 @@ public class InListItem extends BasePo implements Serializable { ...@@ -88,13 +88,18 @@ public class InListItem extends BasePo implements Serializable {
private String posName; private String posName;
/** /**
* 错误信息
*/
private String ngMsg;
/**
* 入库状态,0=未开始,1=验证成功,入库中,2=XRay点料,3=入库提交完成,4=入库提交失败 * 入库状态,0=未开始,1=验证成功,入库中,2=XRay点料,3=入库提交完成,4=入库提交失败
* *
*/ */
private int state= INITEM_STATUS.Wait; private String state= INITEM_STATUS.Wait;
public boolean isEnd() { public boolean isEnd() {
return state == INITEM_STATUS.Success || state == INITEM_STATUS.Cancel; return state == INITEM_STATUS.Success || state == INITEM_STATUS.Cancel||state==INITEM_STATUS.API001NG;
} }
......
...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron1053.api.bean.*; import com.neotel.smfcore.custom.micron1053.api.bean.*;
import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo; import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronResult; import com.neotel.smfcore.custom.micron1053.bean.MicronResult;
import com.neotel.smfcore.custom.micron1053.loading.util.LoadingUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
...@@ -47,6 +48,13 @@ public class MicronApi { ...@@ -47,6 +48,13 @@ public class MicronApi {
MicronApi.dataCache = cache; MicronApi.dataCache = cache;
} }
public static LoadingUtil loadingUtil;
@Autowired
public void setLoadingUtil(LoadingUtil loadingUtil) {
MicronApi.loadingUtil = loadingUtil;
}
public static IBarcodeManager barcodeManager; public static IBarcodeManager barcodeManager;
@Autowired @Autowired
...@@ -74,9 +82,9 @@ public class MicronApi { ...@@ -74,9 +82,9 @@ public class MicronApi {
} }
public static boolean Debug=false; public static boolean Debug=true;
public static Barcode API001(String operationId, Barcode barcode) throws ApiException { public static Barcode API001(String operationId,String rfid, Barcode barcode) throws ApiException {
String url = config.getUrl(config.api_name_001); String url = config.getUrl(config.api_name_001);
if (ObjectUtil.isEmpty(url)) { if (ObjectUtil.isEmpty(url)) {
...@@ -167,7 +175,17 @@ public class MicronApi { ...@@ -167,7 +175,17 @@ public class MicronApi {
barcode.setToXray(true); barcode.setToXray(true);
} }
// 2023-08-29 14:45:35.971 INFO [HttpHelper.java:339] - Request to [http://istio-ingressgateway-istio-system.apps.ose-dev45.micron.com/material/validation/label] response: code=500,responseContent={
// "transactionId": "2810c627-d3b6-4200-ba7c-f8e3eddf47f6",
// "error": 102,
// "message": "Server error exception",
// "detail": "Failed at MAM [GetMAInfo]. Exception:: You must supply a valid MA Type."
// }
} else { } else {
Integer error=result.getErrorValue("error");
String message=result.getErrorValue("message");
loadingUtil.AddErrorItem(rfid, barcode,error,message);
log.info("API001 ,验证失败,获取数据失败"); log.info("API001 ,验证失败,获取数据失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001"});
} }
......
...@@ -96,4 +96,33 @@ public class MicronResult implements Serializable { ...@@ -96,4 +96,33 @@ public class MicronResult implements Serializable {
} }
return null; return null;
} }
public <T> T getErrorValue(String key) {
if (resultMap == null) {
resultMap = JsonUtil.toMap(responseData);
}
if (key != null && !key.isEmpty()) {
Object value = resultMap.get(key);
if (value != null) {
return (T) value;
} else {
try {
char[] cs = key.toCharArray();
char c = cs[0];
cs[0] = Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);
String newKey = String.valueOf(cs);
value = resultMap.get(newKey);
if (value != null) {
return (T) value;
}
} catch (Exception ex) {
}
}
}
return null;
}
} }
...@@ -7,6 +7,8 @@ import com.neotel.smfcore.common.exception.ValidateException; ...@@ -7,6 +7,8 @@ import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inList.enums.INITEM.INITEM_STATUS; import com.neotel.smfcore.core.inList.enums.INITEM.INITEM_STATUS;
import com.neotel.smfcore.core.inList.enums.INLIST_STATUS; import com.neotel.smfcore.core.inList.enums.INLIST_STATUS;
...@@ -17,6 +19,7 @@ import com.neotel.smfcore.core.inList.util.InListCache; ...@@ -17,6 +19,7 @@ import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.custom.micron1053.api.APIMODE; import com.neotel.smfcore.custom.micron1053.api.APIMODE;
import com.neotel.smfcore.custom.micron1053.api.MicronApi; import com.neotel.smfcore.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.loading.Bean.LoadingInfo; import com.neotel.smfcore.custom.micron1053.loading.Bean.LoadingInfo;
import com.neotel.smfcore.custom.micron1053.loading.dto.MaterialDtialDto;
import com.neotel.smfcore.custom.micron1053.loading.dto.MaterialLoadingDto; import com.neotel.smfcore.custom.micron1053.loading.dto.MaterialLoadingDto;
import com.neotel.smfcore.custom.micron1053.loading.util.LoadingUtil; import com.neotel.smfcore.custom.micron1053.loading.util.LoadingUtil;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache; import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
...@@ -48,6 +51,9 @@ public class LoadingController { ...@@ -48,6 +51,9 @@ public class LoadingController {
@Autowired @Autowired
private LoadingUtil loadingUtil; private LoadingUtil loadingUtil;
@Autowired
private IBarcodeManager barcodeManager;
@ApiOperation("lOADING页面获取列表数据") @ApiOperation("lOADING页面获取列表数据")
@GetMapping("/list") @GetMapping("/list")
@AnonymousAccess @AnonymousAccess
...@@ -72,10 +78,13 @@ public class LoadingController { ...@@ -72,10 +78,13 @@ public class LoadingController {
for (InListItem item : for (InListItem item :
inList.getInListItems()) { inList.getInListItems()) {
String mtype = item.getMType(); String mtype = item.getMType();
MaterialLoadingDto dto = dtoMap.getOrDefault(mtype, new MaterialLoadingDto(mtype, 0, 0, 0)); MaterialLoadingDto dto = dtoMap.getOrDefault(mtype, new MaterialLoadingDto(mtype, 0,0, 0, 0));
if (item.isSuccess()) { if (item.isSuccess()) {
dto.setSuccessQty(dto.getSuccessQty() + 1); dto.setSuccessQty(dto.getSuccessQty() + 1);
} else if (item.isFailure()) { } else if(item.getState()==INITEM_STATUS.API001NG) {
dto.setNg(dto.getNg() + 1);
}else
if (item.isFailure()) {
dto.setFailure(dto.getFailure() + 1); dto.setFailure(dto.getFailure() + 1);
} else if (item.isXray()) { } else if (item.isXray()) {
dto.setXRay(dto.getXRay() + 1); dto.setXRay(dto.getXRay() + 1);
...@@ -89,14 +98,66 @@ public class LoadingController { ...@@ -89,14 +98,66 @@ public class LoadingController {
} }
if(resultList.size()<=0 &&MicronApi.Debug) { if(resultList.size()<=0 &&MicronApi.Debug) {
resultList.add(new MaterialLoadingDto(MicronDataCache.PIZZABOX, 2, 5, 6)); resultList.add(new MaterialLoadingDto(MicronDataCache.PIZZABOX, 2,3, 5, 6));
resultList.add(new MaterialLoadingDto(MicronDataCache.REEL, 23, 54, 6)); resultList.add(new MaterialLoadingDto(MicronDataCache.REEL, 23, 2,54, 6));
resultList.add(new MaterialLoadingDto(MicronDataCache.PCB, 22, 52, 65)); resultList.add(new MaterialLoadingDto(MicronDataCache.PCB, 22,2, 52, 65));
} }
return resultList; return resultList;
} }
@ApiOperation("lOADING页面获取列表详情数据")
@GetMapping("/detial")
@AnonymousAccess
public ResultBean detial(@RequestBody Map<String,Object> params ) {
//参数:mType 物料类型:pcb/shoebox/pizzaBox/reel/tray
//参数:state 状态: success/xray/failure
String mType=params.get("mType").toString();
String state=params.get("state").toString();
List<MaterialDtialDto> dtos=new ArrayList<>();
if(MicronApi.Debug){
for (int i = 1; i <= 5; i++
){
MaterialDtialDto dto=new MaterialDtialDto("barcode"+i,"pn"+i,new Date(),"proN"+i,
233,7,8,"provider"+i,"batch"+i,"msl"+i,"posName"+i,"");
dtos.add(dto);
}
}
InList inList=loadingUtil.getInlist();
if(inList==null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.nodata", "未找到信息");
}
for (InListItem item :
inList.getInListItems()) {
if(item.getMType().equals(mType)) {
boolean is=false;
if (item.isSuccess() && state.equals("success")) {
is=true;
} else if (item.isFailure()&& state.equals("xray")) {
is=true;
} else if (item.isXray()&& state.equals("failure")) {
is=true;
}
if(is){
Barcode code=barcodeManager.findByBarcode(item.getRi());
MaterialDtialDto dto=new MaterialDtialDto(code.getBarcode(),code.getPartNumber(),code.getExpireDate(),code.getProviderNumber(),
code.getAmount(),code.getPlateSize(),code.getHeight(),code.getProvider(),code.getBatch(),code.getMsl(),code.getPosName(),"" );
dtos.add(dto);
}
}
}
return ResultBean.newOkResult(dtos);
}
@ApiOperation("loading->ReturnMaterial 输入RFID后获取数据") @ApiOperation("loading->ReturnMaterial 输入RFID后获取数据")
@PostMapping("/returnMaterial") @PostMapping("/returnMaterial")
......
package com.neotel.smfcore.custom.micron1053.loading.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialDtialDto implements Serializable {
@ApiModelProperty("条码编号")
private String barcode;
@ApiModelProperty("料件编号")
private String partNumber;
@ApiModelProperty("过期时间(入库时间+最大存储时间)")
private Date expTime;
@ApiModelProperty("供应商编号")
private String providerNumber;
@ApiModelProperty("数量")
private int amount;
@ApiModelProperty("宽度")
private int plateSize=0;
@ApiModelProperty("高度")
private int height=0;
@ApiModelProperty("供应商")
private String provider;
@ApiModelProperty("批次")
private String batch;
@ApiModelProperty("等级")
private String msl;
@ApiModelProperty("库位号")
private String posName;
@ApiModelProperty("错误信息")
private String errMsg;
}
...@@ -17,6 +17,8 @@ public class MaterialLoadingDto implements Serializable { ...@@ -17,6 +17,8 @@ public class MaterialLoadingDto implements Serializable {
@ApiModelProperty("成功盘数") @ApiModelProperty("成功盘数")
private int successQty; private int successQty;
@ApiModelProperty("NG盘数")
private int ng;
@ApiModelProperty("去点料盘数") @ApiModelProperty("去点料盘数")
private int xRay; private int xRay;
@ApiModelProperty("失败盘数") @ApiModelProperty("失败盘数")
......
...@@ -56,9 +56,35 @@ public class LoadingUtil { ...@@ -56,9 +56,35 @@ public class LoadingUtil {
} }
return null; return null;
} }
//获取库位号成功,增加一个正在入库的
public void AddErrorItem(String rfid, Barcode barcode, Integer error,String message) {
InList inList = getInlist();
if (inList == null) {
return;
}
inList.addRfid(rfid);
inList.setStatus(INLIST_STATUS.ABNORMAL);
String mtype = MicronDataCache.GetReelType(barcode.getPlateSize(), barcode.getHeight());
log.info("为入库单[" + inList.getName() + "]增加一条验证失败信息:barcode[" + barcode.getBarcode() + "],mtype[" + mtype + "],pn[" + barcode.getPartNumber() + "],rfid[" + rfid + "],s[" + INITEM_STATUS.API001NG + "],ngMsg["+error+":"+message+"]");
InListItem item = InListItem.newMItem(inList.getName(), barcode, rfid, "", INITEM_STATUS.API001NG, mtype);
if (inList.getEndRfidList() != null && inList.getEndRfidList().contains(rfid)) {
item.setRfidEnd(true);
}
item.setNgMsg(error+":"+message);
item = inListItemManager.save(item);
List<InListItem> items = inList.getInListItems();
items.add(item);
inList.setInListItems(items);
inListManager.save(inList);
inListCache.addInListToMap(inList);
}
//获取库位号成功,增加一个正在入库的 //获取库位号成功,增加一个正在入库的
public void AddInListItem(String rfid, Barcode barcode, String posName, int s) { public void AddInListItem(String rfid, Barcode barcode, String posName, String s) {
InList inList = getInlist(); InList inList = getInlist();
if (inList == null) { if (inList == null) {
...@@ -101,11 +127,11 @@ public class LoadingUtil { ...@@ -101,11 +127,11 @@ public class LoadingUtil {
public void xRayEndUpdateItem(String barcode,int count,int s) { public void xRayEndUpdateItem(String barcode,int count,String s) {
updateItemState(barcode, "", INITEM_STATUS.XRayFail); updateItemState(barcode, "", INITEM_STATUS.XRayFail);
} }
public InListItem updateItemState( String barcode,String posName,int s) { public InListItem updateItemState( String barcode,String posName,String s) {
InList inList = getInlist(); InList inList = getInlist();
...@@ -145,7 +171,7 @@ public class LoadingUtil { ...@@ -145,7 +171,7 @@ public class LoadingUtil {
public void putEndUpdate(DataLog dataLog) { public void putEndUpdate(DataLog dataLog) {
String barcode = dataLog.getBarcode(); String barcode = dataLog.getBarcode();
String posName = dataLog.getPosName(); String posName = dataLog.getPosName();
int state = INITEM_STATUS.PutEnd; String state = INITEM_STATUS.PutEnd;
if (dataLog.isCancel()) { if (dataLog.isCancel()) {
state = INITEM_STATUS.Cancel; state = INITEM_STATUS.Cancel;
} }
...@@ -278,7 +304,7 @@ public class LoadingUtil { ...@@ -278,7 +304,7 @@ public class LoadingUtil {
if (item.getRfid().equals(rfid)) { if (item.getRfid().equals(rfid)) {
if (item.getState() == INITEM_STATUS.Success) { if (item.getState() == INITEM_STATUS.Success) {
} else { } else {
int newS = INITEM_STATUS.Fail; String newS = INITEM_STATUS.Fail;
if (resultMap.containsKey(item.getRi())) { if (resultMap.containsKey(item.getRi())) {
Boolean result = resultMap.get(item.getRi()); Boolean result = resultMap.get(item.getRi());
if (result == null) { if (result == null) {
...@@ -358,7 +384,7 @@ public class LoadingUtil { ...@@ -358,7 +384,7 @@ public class LoadingUtil {
//查找所有失败的重新推送 //查找所有失败的重新推送
for (InListItem item : inList.getInListItems()) { for (InListItem item : inList.getInListItems()) {
if (item.getState() <= INITEM_STATUS.Success && item.getRi().equals(barcode)) { if (item.getState() .equals(INITEM_STATUS.Fail) && item.getRi().equals(barcode)) {
return item.getRfid(); return item.getRfid();
} }
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!