Commit 61fd6d18 LN

1.增加micron接口及测试功能。

2.增加获取库存接口:/rest/api/inventory
1 个父辈 a17f019f
package com.neotel.smfcore.common.utils;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.neotel.smfcore.common.exception.ApiException;
......@@ -133,12 +134,24 @@ public class HttpHelper {
}
}
public static MicronResult getMicronJson(String url ) throws ApiException {
public static MicronResult getMicronJson(String url ) throws ApiException {
if(ObjectUtil.isEmpty(url)) {
return new MicronResult();
}
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("Content-Type", "application/json;charset=utf-8");
// 设置请求参数
// // 设置请求参数
// if (params != null && !params.isEmpty()) {
// ObjectMapper mapper = new ObjectMapper();
// try {
// String requestBody = mapper.writeValueAsString(params);
// httpGet.seb(new StringEntity(requestBody,CONTENT_CHARSET));
// } catch (JsonProcessingException e) {
// throw new ApiException("Request params to [" + url + "] failed:" + e.getMessage());
// } catch (Exception e) {
// throw new ApiException("Request params to [" + url + "] failed:" + e.getMessage());
// }
// }
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpGet);
......@@ -152,6 +165,7 @@ public class HttpHelper {
result = new MicronResult();
}
result.setHttpCode(code);
result.setResponseData(responseContent);
response.close();
httpClient.close();
return result;
......@@ -162,11 +176,15 @@ public class HttpHelper {
}
public static MicronResult postMicronJson(String url , Map<String, Object> params) throws ApiException {
try {
if(ObjectUtil.isEmpty(url)) {
return new MicronResult();
}
String responseContent = postJson(url, params);
MicronResult result = JsonUtil.toObj(responseContent, MicronResult.class);
if (result == null) {
result = new MicronResult();
}
result.setResponseData(responseContent);
return result;
} catch (Exception e) {
......
......@@ -66,4 +66,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> findPosList(String storageId, List<String> posNames);
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds);
}
......@@ -557,6 +557,26 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return new ArrayList<>();
}
@Override
public List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds) {
//构造查询条件
Query query = new Query();
Criteria criteria = Criteria.where("barcode").exists(true);
if(storageIds != null && !storageIds.isEmpty()){
criteria.and("storageId").in(storageIds);
}
if (reelIds != null && !reelIds.isEmpty()){
criteria.and("barcode.barcode").in(reelIds);
}
if (partNums != null && !partNums.isEmpty()){
criteria.and("barcode.partNumber").in(partNums);
}
query.addCriteria(criteria);
return storagePosDao.findByQuery(query);
}
/**
* 获取下一库位的库位名(后缀数字+1)
*/
......
......@@ -6,6 +6,11 @@ import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
@Slf4j
@AllArgsConstructor
......@@ -22,7 +27,7 @@ public class MaterialInfo implements Serializable {
private String Label2DID;
private String TowerID;
private String StorageBin;
private Integer Qty;
private String Qty;
private String XRayCheck;
private String ErrorCode;
private String ErrorMessage;
......@@ -36,4 +41,72 @@ public class MaterialInfo implements Serializable {
private String FromTowerID;
private String FromStorageBin;
public static MaterialInfo NewMaterial(Map<String,String> map) {
MaterialInfo mInfo = new MaterialInfo();
try {
mInfo.setLabel2DID(map.getOrDefault("Label2DID", ""));
mInfo.setTowerID(map.getOrDefault("TowerID", ""));
mInfo.setStorageBin(map.getOrDefault("StorageBin", ""));
mInfo.setXRayCheck(map.getOrDefault("X-RayCheck", ""));
mInfo.setErrorCode(map.getOrDefault("ErrorCode", ""));
mInfo.setErrorMessage(map.getOrDefault("ErrorMessage", ""));
mInfo.setQty( map.getOrDefault("Qty", "0"));
mInfo.setFromTowerID(map.getOrDefault("FromTowerID", ""));
mInfo.setFromStorageBin(map.getOrDefault("FromStorageBin", ""));
} catch (Exception ex) {
}
return mInfo;
}
public static List<MaterialInfo> GetObjList(List<Map<String,String>> arrList){
List<MaterialInfo> materialInfos=new ArrayList<>();
for (Map<String, String> o :
arrList) {
MaterialInfo mInfo = MaterialInfo.NewMaterial(o);
materialInfos.add(mInfo);
}
return materialInfos;
}
public static List<Map<String,String>> ToLoadingList(List<MaterialInfo> list){
List<Map<String,String>> arrList=new ArrayList<>();
for (MaterialInfo obj :list
) {
Map<String,String> map=new HashMap<>();
map.put("Label2DID",obj.getLabel2DID());
map.put("TowerID",obj.getTowerID());
map.put("StorageBin",obj.getStorageBin());
map.put("X-RayCheck",obj.getXRayCheck());
map.put("ErrorCode",obj.getErrorCode());
map.put("ErrorMessage",obj.getErrorMessage());
map.put("Qty",obj.getQty().toString());
arrList.add(map);
}
return arrList;
}
public static List<Map<String,String>> ToDispatchList(List<MaterialInfo> list){
List<Map<String,String>> arrList=new ArrayList<>();
for (MaterialInfo obj :list
) {
Map<String,String> map=new HashMap<>();
map.put("FromTowerID",obj.getFromTowerID());
map.put("FromStorageBin",obj.getFromStorageBin());
map.put("Qty",obj.getQty().toString());
arrList.add(map);
}
return arrList;
}
}
......@@ -22,6 +22,8 @@ public class MicronResult implements Serializable {
private String status;
private String message;
private String responseData;
public boolean isSuccess() {
if (ObjectUtil.isNotEmpty(status) && status.equals("Success")) {
return true;
......
package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/rest/api")
@Slf4j
public class MicronApi extends BaseSmfApiListener {
private static MicronConfig config;
@Autowired
public void setConfig(MicronConfig config){
MicronApi.config=config;
}
@Override
public boolean isForThisApi(String apiName) {
// return apiName != null && apiName.equalsIgnoreCase("Micron");
return ObjectUtil.isNotEmpty(config.micronAddr);
}
private static String GetSkipSap(String skipSap) {
if(skipSap.toUpperCase().toString().equals("TRUE")||skipSap.toUpperCase().toString().equals("YES")){
return "YES";
}
return "NO";
}
public static MicronResult validateMRB(String mbrId, String skipSap) {
//Validate if MBR (From Warehouse )  is valid
// if (skipSap instanceof Boolean) {
//
// skipSapStr = (boolean) skipSap ? "YES" : "NO";
// } else {
// skipSapStr = skipSap.toString();
// }
String skipSapStr = GetSkipSap(skipSap);
String url =config. getUrl(MessageFormat.format("validate/mrb/{0}/{1}", mbrId, skipSapStr));
try {
MicronResult result = HttpHelper.getMicronJson(url);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult validateREQ(String reqId) {
//Validate if REQ (From Outside Shelf) is valid
String url = config.getUrl(MessageFormat.format("validate/req/{0}", reqId));
try {
MicronResult result = HttpHelper.getMicronJson(url);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult validateMCL(String PurchaseOrder, String PackagingSlip, String skipSap) {
//Validate if MCL GR  is valid
//validate/mcl/{PurchaseOrder}/{PackagingSlip}/{SkipSap}
// {PurchaseOrder}=<purchase order>,
// {PackagingSlip}=<packaging slide>,
// {SkipSAP}="YES|No"
String skipSapStr = GetSkipSap(skipSap);
String url = config.getUrl(MessageFormat.format("validate/mcl/{0}/{1}/{2}", PurchaseOrder, PackagingSlip, skipSapStr));
try {
MicronResult result = HttpHelper.getMicronJson(url);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult validateMaterial(String Label2DID, String LoadingMode) {
//Validate the material before loading into the storage bin
//validate/material
// {
// "Label2DID" : "<2DID String that contains SAP P/N; S/N; Supplier..etc>",
// "LoadingMode" : "MBR|REQ|GR|MCL|RET|NPI"
// }
String url = config.getUrl( "validate/material" );
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("Label2DID", Label2DID);
dataMap.put("LoadingMode", LoadingMode);
try {
MicronResult result = HttpHelper.postMicronJson(url, dataMap);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult loadReport(String JobId, List<MaterialInfo> materialInfos) {
//Update material storage location at rod or magazine slot level (One JobID per rod or slot).
//load-report
// {
// "JobId": "<job Id>",
// "Materials": [
// {
// "Label2DID": "<Label2DID>",
// "TowerID": "<TowerID>|null",
// "StorageBin": "<StorageBin>|null",
// "Qty": "<Label Qty>|<X-Ray Qty>",
// "X-RayCheck": "Yes|No|N/A",
// "ErrorCode": "0-Success|1-Rejected",
// "ErrorMessage": "N/A|<ErrorMessage>"
// }
//]
// }
String url = config.getUrl( "load-report" );
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("JobId", JobId);
dataMap.put("Materials", MaterialInfo.ToLoadingList(materialInfos));
try {
MicronResult result = HttpHelper.postMicronJson(url, dataMap);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult dispatchList(String Facility, String DispatchType) {
//Get ready Pretask/LinePrep/RET list from Auto Kitting System
//dispatch-list/{Facility}/{DispatchType}
// {Facility} = "Grouping that need to align with KitView"
// {DispatchType}="PreTask|LinePrep|RET"
String url = config.getUrl(MessageFormat.format("dispatch-list/{0}/{1}", Facility, DispatchType));
try {
MicronResult result = HttpHelper.getMicronJson(url);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult dispatchMaterial(String DispatchType, String Id) {
//Get dispatch Material list  from Autokitting system to fullfil the Pretask or LinePrep
//dispatch-material/{DispatchType}/{Id}
// {DispatchType}="PreTask|LinePrep|RET"
// Id="<PretaskId>|<LinePrepId>|<RetId>"
String url = config.getUrl(String.format("dispatch-material/{0}/{1}", DispatchType, Id));
try {
MicronResult result = HttpHelper.getMicronJson(url);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
public static MicronResult dispatchReport(String JobId, String dispatchType, List<MaterialInfo> materialInfos) {
//Update dispatch information by Job Level
//dispatch-report
// "JobId": "<JobId>",
// "DispatchType": "PreTask|LinePrep|RET|Warehouse|Controlled",
// "Materials": [
// {
// "Label2DID": "<Label2DID>",
// "FromTowerID": "<TowerID>",
// "FromStorageBin": "<StorageBin>",
// "Qty": "<Qty>",
// }
//]
String url = config.getUrl( "dispatch-report" );
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("JobId", JobId);
dataMap.put("DispatchType", dispatchType);
dataMap.put("Materials", MaterialInfo.ToDispatchList(materialInfos));
try {
MicronResult result = HttpHelper.postMicronJson(url, dataMap);
return result;
} catch (Exception e) {
log.error(url + "出错", e);
}
return null;
}
}
package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.util.DataCache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Service
@Slf4j
public class MicronConfig {
@Value("${micron.addr}")
public String micronAddr;
@Autowired
private DataCache dataCache;
public String getUrl(String apiName) {
if (ObjectUtil.isEmpty(micronAddr)) {
return "";
}
String url = micronAddr + apiName;
if (micronAddr.endsWith("/")) {
if (apiName.startsWith("/")) {
url = micronAddr + apiName.substring(1, apiName.length());
}
} else {
if (!apiName.startsWith("/")) {
url = micronAddr + "/" + apiName;
}
}
return micronAddr + apiName;
}
@PostConstruct
public void init() {
// host = dataCache.GetConfigCache("siemens.host", "siemens.host", url);
// port = dataCache.GetConfigCache("siemens.port", "siemens.port", url);
// url = dataCache.GetConfigCache("siemens.url", "siemens.url", url);
// action_GetMaterialLot = dataCache.GetConfigCache("siemens.action.GetMaterialLot", "siemens.action.GetMaterialLot", action_GetMaterialLot);
// action_ProcessMaterialLot = dataCache.GetConfigCache("siemens.action.ProcessMaterialLot", "siemens.action.ProcessMaterialLot", action_ProcessMaterialLot);
log.info("Micron sesrver addr:" + micronAddr );
}
}
package com.neotel.smfcore.custom.micron1053.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.custom.micron1053.bean.MaterialInfo;
import com.neotel.smfcore.custom.micron1053.bean.MicronResult;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "API测试")
@RequestMapping("rest/api/test")
public class MicronTestController {
@Autowired
private MicronApi apiController;
@ApiOperation("API-001 validate/mrb/{Id}/{SkipSap}")
@GetMapping("/validateMRB")
@AnonymousAccess
public String validateMRB(String Id, String SkipSap) {
MicronResult result = apiController.validateMRB(Id, SkipSap);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-002 validate/req/{Id}")
@GetMapping("/validateREQ")
@AnonymousAccess
public String validateREQ(String Id) {
MicronResult result = apiController.validateREQ(Id);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-003 validate/mcl/{PurchaseOrder}/{PackagingSlip}/{SkipSap}")
@GetMapping("/validateMCL")
@AnonymousAccess
public String validateMCL(String PurchaseOrder, String PackagingSlip, String skipSap) {
MicronResult result = apiController.validateMCL(PurchaseOrder, PackagingSlip, skipSap);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-004 validate/material")
@GetMapping("/validateMaterial")
@AnonymousAccess
public String validateMaterial(String Label2DID, String LoadingMode) {
MicronResult result = apiController.validateMaterial(Label2DID, LoadingMode);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-005 load-report")
@GetMapping("/loadReport")
@AnonymousAccess
public String loadReport(String params ) {
Map<String,Object> paramsMap=JsonUtil.toMap(params);
String JobId = paramsMap.get("JobId").toString();
Object obj=paramsMap.get("Materials");
List<Map<String,String>> arr=(List<Map<String, String>>)obj;
List<MaterialInfo> materialInfos=MaterialInfo.GetObjList(arr);
MicronResult result = apiController.loadReport(JobId, materialInfos);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-007 dispatch-list/{Facility}/{DispatchType}")
@GetMapping("/dispatchList")
@AnonymousAccess
public String dispatchList(String Facility, String DispatchType) {
MicronResult result = apiController.dispatchList(Facility, DispatchType);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-009 dispatch-material/{DispatchType}/{Id}")
@GetMapping("/dispatchMaterial")
@AnonymousAccess
public String dispatchMaterial(String DispatchType, String Id) {
MicronResult result = apiController.dispatchMaterial(DispatchType, Id);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
@ApiOperation("API-010 dispatch-report")
@GetMapping("/dispatchReport")
@AnonymousAccess
public String dispatchReport(String params) {
Map<String,Object> paramsMap=JsonUtil.toMap(params);
String JobId = paramsMap.get("JobId").toString();
String dispatchType = paramsMap.get("DispatchType").toString();
Object obj=paramsMap.get("Materials");
List<Map<String,String>> arr=(List<Map<String, String>>)obj;
List<MaterialInfo> materialInfos=MaterialInfo.GetObjList(arr);
MicronResult result = apiController.dispatchReport(JobId, dispatchType, materialInfos);
if (ObjectUtil.isEmpty(result)) {
return "";
}
return result.getResponseData();
}
}
......@@ -44,3 +44,6 @@ menu:
show:
hide:
micron:
addr:
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!