Commit 69e2c14e sunke

料架与PanaCIM对接

1 个父辈 a6cd8774
...@@ -5,6 +5,7 @@ import com.myproject.bean.search.PageList; ...@@ -5,6 +5,7 @@ import com.myproject.bean.search.PageList;
import com.myproject.dao.mongo.IAlarmInfoDao; import com.myproject.dao.mongo.IAlarmInfoDao;
import com.myproject.util.DateUtil; import com.myproject.util.DateUtil;
import com.myproject.webapp.controller.storage.BaseSearchController; import com.myproject.webapp.controller.storage.BaseSearchController;
import org.displaytag.tags.TableTagParameters;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
...@@ -51,6 +52,14 @@ public class AlarmInfoSearchController extends BaseSearchController { ...@@ -51,6 +52,14 @@ public class AlarmInfoSearchController extends BaseSearchController {
} }
query.addCriteria(baseCriteria); query.addCriteria(baseCriteria);
//导出
if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null){
PageList pl = searchCriteria.getPageList();
pl.setPageNumber(-1);
searchCriteria.setPageList(pl);
}
PageList pageList = alarmInfoDao.findByQuery(query, searchCriteria.getPageList()); PageList pageList = alarmInfoDao.findByQuery(query, searchCriteria.getPageList());
searchCriteria.setPageList(pageList); searchCriteria.setPageList(pageList);
......
...@@ -234,6 +234,9 @@ public class CodeShelfController extends BaseController { ...@@ -234,6 +234,9 @@ public class CodeShelfController extends BaseController {
if(opPos != null){ if(opPos != null){
Storage storage = dataCache.getStorageById(opPos.getStorageId());
ArrayList<Storage> storageList = Lists.newArrayList(storage);
taskService.verifyBarcodePutIn(storageList,barcode);
log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + opPos.getPosName()); log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + opPos.getPosName());
opPos.setCanCheckOutTime(System.currentTimeMillis() + delayCloseTime); opPos.setCanCheckOutTime(System.currentTimeMillis() + delayCloseTime);
taskService.addTaskToFinished(opPos,barcode,null); taskService.addTaskToFinished(opPos,barcode,null);
......
...@@ -134,6 +134,8 @@ public class StoragePosFindController extends BaseSearchController { ...@@ -134,6 +134,8 @@ public class StoragePosFindController extends BaseSearchController {
addLikeParam(baseCriteria, request, "otherField4"); addLikeParam(baseCriteria, request, "otherField4");
addLikeParam(baseCriteria, request, "otherField5"); addLikeParam(baseCriteria, request, "otherField5");
addLikeParam(baseCriteria,request,"provider");
String barcode = searchCriteria.getBarcode(); String barcode = searchCriteria.getBarcode();
if(!Strings.isNullOrEmpty(barcode)){ if(!Strings.isNullOrEmpty(barcode)){
Pattern pattern = Pattern.compile(barcode, Pattern.CASE_INSENSITIVE); Pattern pattern = Pattern.compile(barcode, Pattern.CASE_INSENSITIVE);
......
...@@ -66,6 +66,8 @@ public interface ITaskService { ...@@ -66,6 +66,8 @@ public interface ITaskService {
*/ */
String checkout(StoragePos pos, boolean forceOut, String subSourceId, boolean isSingleOut); String checkout(StoragePos pos, boolean forceOut, String subSourceId, boolean isSingleOut);
Barcode verifyBarcodePutIn(List<Storage> storageList, Barcode barcodeSave) throws ValidateException;
StoragePos findEmptyPosForPutIn(List<Storage> storageList, Barcode barcode) throws ValidateException; StoragePos findEmptyPosForPutIn(List<Storage> storageList, Barcode barcode) throws ValidateException;
//void checkOutInaction(String areaId, int day) throws ValidateException; //void checkOutInaction(String areaId, int day) throws ValidateException;
......
...@@ -174,7 +174,7 @@ public class MesApiController extends BaseController { ...@@ -174,7 +174,7 @@ public class MesApiController extends BaseController {
} }
for (StoragePos pos : poses) { for (StoragePos pos : poses) {
log.info("出库位置仓位【"+pos.getPosName()+"】"); log.info("出库位置仓位【"+pos.getPosName()+"】");
taskService.checkout(pos,null,false); taskService.checkout(pos,false,null,false);
} }
}catch (Exception e){ }catch (Exception e){
......
//package com.myproject.webapp.controller.webService; package com.myproject.webapp.controller.webService;
//
//import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
//import com.google.common.base.Strings; import com.google.common.base.Strings;
//import com.google.common.collect.Lists; import com.google.common.collect.Lists;
//import com.google.common.collect.Maps; import com.google.common.collect.Maps;
//import com.myproject.bean.json.PanaMaterial; import com.myproject.bean.json.PanaMaterial;
//import com.myproject.bean.update.*; import com.myproject.bean.update.*;
//import com.myproject.dao.mongo.IDataLogDao; import com.myproject.dao.mongo.IDataLogDao;
//import com.myproject.dao.mongo.ISpecifiedBatchDao; import com.myproject.manager.IStoragePosManager;
//import com.myproject.manager.IStoragePosManager; import com.myproject.util.HttpHelper;
//import com.myproject.util.HttpHelper; import com.myproject.util.StorageConstants;
//import com.myproject.util.StorageConstants; import com.myproject.webapp.controller.storage.BaseController;
//import com.myproject.webapp.controller.storage.BaseController; import org.apache.commons.lang.StringUtils;
//import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager;
//import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
//import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller;
//import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.bind.annotation.ResponseBody;
// import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat;
//import java.text.SimpleDateFormat; import java.util.*;
//import java.util.*; import java.util.concurrent.atomic.AtomicLong;
//import java.util.concurrent.atomic.AtomicLong;
//
// @Controller
//@Controller @RequestMapping("/rest/api")
//@RequestMapping("/rest/api") public class PanaApiController extends BaseController {
//public class PanaApiController extends BaseController {
// @Autowired
// @Autowired protected ITaskService taskService;
// protected ITaskService taskService; @Autowired
// @Autowired protected IStoragePosManager storagePosManager;
// protected IStoragePosManager storagePosManager;
// protected static DataCache dataCache;
// @Autowired
// protected ISpecifiedBatchDao specifiedBatchDao; @Autowired
// public void setDataCache(DataCache dataCache) {
// protected static DataCache dataCache; PanaApiController.dataCache = dataCache;
// }
// @Autowired
// public void setDataCache(DataCache dataCache) { @Autowired
// PanaApiController.dataCache = dataCache; protected IDataLogDao dataLogDao;
// }
// protected final static Logger log = LogManager.getLogger(PanaApiController.class);
// @Autowired
// protected IDataLogDao dataLogDao; private static String PanaCIMIP = "";
//
// protected final static Logger log = LogManager.getLogger(PanaApiController.class); private static String PanaCIMPort = "";
//
// private static String PanaCIMIP = ""; private static String TowerID = "InoAutoB";
// private static AtomicLong seq = new AtomicLong(0);
// private static String PanaCIMPort = "";
// @RequestMapping(value = "/setConfiguration")
// private static String TowerID = "InoAutoB"; @ResponseBody
// private static AtomicLong seq = new AtomicLong(0); public String setConfiguration(@RequestBody Map<String,String> map) {
// String ip = map.get("PanaCIMIP");
// @RequestMapping(value = "/setConfiguration") String port = map.get("PanaCIMPort");
// @ResponseBody
// public String setConfiguration(@RequestBody Map<String,String> map) { log.info("收到 PanaCIM 的注册信息【"+ip+":"+port+"】");
// String ip = map.get("PanaCIMIP"); if(Strings.isNullOrEmpty(ip)){
// String port = map.get("PanaCIMPort"); return "ERROR:IP is empty.";
// }
// log.info("收到 PanaCIM 的注册信息【"+ip+":"+port+"】");
// if(Strings.isNullOrEmpty(ip)){ if(Strings.isNullOrEmpty(port)){
// return "ERROR:IP is empty."; return "ERROR: port is empty";
// } }
// PanaCIMIP = ip;
// if(Strings.isNullOrEmpty(port)){ PanaCIMPort = port;
// return "ERROR: port is empty";
// } return "OK";
// PanaCIMIP = ip; }
// PanaCIMPort = port;
//
// return "OK"; private static String getInNotifyApi(){
// } if(!Strings.isNullOrEmpty(PanaCIMIP)){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/checkInNotification";
// }
// private static String getInNotifyApi(){ return "";
// if(!Strings.isNullOrEmpty(PanaCIMIP)){ }
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/checkInNotification";
// } private static String getOutNotifyApi(){
// return "";
// } if(!Strings.isNullOrEmpty(PanaCIMIP)){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/deliverNotification";
// private static String getOutNotifyApi(){ }
// return "";
// if(!Strings.isNullOrEmpty(PanaCIMIP)){ }
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/deliverNotification";
// } private static String getRequestReelUrl(){
// return ""; if(!Strings.isNullOrEmpty(PanaCIMIP)){
// } return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/requestReel";
// }
// private static String getRequestReelUrl(){ return "";
// if(!Strings.isNullOrEmpty(PanaCIMIP)){ }
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/requestReel";
// }
// return ""; @RequestMapping(value = "/keepAlive")
// } @ResponseBody
// public String keepAlive(HttpServletRequest request) {
// return "OK";
// @RequestMapping(value = "/keepAlive") }
// @ResponseBody
// public String keepAlive(HttpServletRequest request) { //private static String getApiUrl(String apiPath){
// return "OK"; // return "http://"+PanaCIMIP + ":" + PanaCIMPort + apiPath;
// } //}
//
// //private static String getApiUrl(String apiPath){ private static String nextSeq(){
// // return "http://"+PanaCIMIP + ":" + PanaCIMPort + apiPath; return "SMDBOX_"+TowerID+"_"+seq.incrementAndGet();
// //} }
//
// private static String nextSeq(){
// return "SMDBOX_"+TowerID+"_"+seq.incrementAndGet(); public static boolean requestReel(String reelBarcode) {
// } String requestReelUrl = getRequestReelUrl();
// if(Strings.isNullOrEmpty(requestReelUrl)){
// requestReelUrl = getRequestReelUrl();
// public static boolean requestReel(String requestReelUrl, String reelBarcode) { log.info("没有配置条码检测接口,查找setConfiguration注册的IP 及端口");
// if(Strings.isNullOrEmpty(requestReelUrl)){ }
// requestReelUrl = getRequestReelUrl(); try {
// log.info("没有配置条码检测接口,查找setConfiguration注册的IP 及端口"); if(!Strings.isNullOrEmpty(requestReelUrl)){
// } log.info("向 PanaCIM["+requestReelUrl+"]请求料盘【"+reelBarcode+"】的信息");
// try { //String url = getApiUrl("/api/Storage/requestReel");
// if(!Strings.isNullOrEmpty(requestReelUrl)){ Map<String, Object> params = new HashMap<String, Object>();
// log.info("向 PanaCIM["+requestReelUrl+"]请求料盘【"+reelBarcode+"】的信息"); params.put("TransactionID", nextSeq());
// //String url = getApiUrl("/api/Storage/requestReel"); params.put("ErrorCode","0");
// Map<String, Object> params = new HashMap<String, Object>(); params.put("Reelbarcode",reelBarcode);
// params.put("TransactionID", nextSeq()); String result = HttpHelper.postJson(requestReelUrl,params);
// params.put("ErrorCode","0"); log.info("PanaCIM 返回料盘【"+reelBarcode+"】的信息:"+result);
// params.put("Reelbarcode",reelBarcode); if(!Strings.isNullOrEmpty(result)){
// String result = HttpHelper.postJson(requestReelUrl,params); ObjectMapper mapper = new ObjectMapper();
// log.info("PanaCIM 返回料盘【"+reelBarcode+"】的信息:"+result); HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
// if(!Strings.isNullOrEmpty(result)){ String ErrorCode = jsonMap.get("ErrorCode");
// ObjectMapper mapper = new ObjectMapper(); if("0".equals(ErrorCode)){//成功
// HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class); return true;
// String ErrorCode = jsonMap.get("ErrorCode"); }
// if("0".equals(ErrorCode)){//成功 }
// return true; }else{
// } log.info("没有条码检测接口,无需验证");
// } return true;
}
} catch (Exception e) {
log.error("向 PanaCIM请求料盘【"+reelBarcode+"】的信息出错",e);
}
return false;
}
public static boolean checkInNotification(Barcode barcode) {
String inNotifyApi = getInNotifyApi();
try {
if(Strings.isNullOrEmpty(inNotifyApi)){
inNotifyApi = getInNotifyApi();
log.info("没有配置API,查找setConfiguration注册的IP 及端口");
}
if(!Strings.isNullOrEmpty(inNotifyApi)){
log.info("向 PanaCIM["+inNotifyApi+"] 通知料盘【"+barcode.getBarcode()+"】的入库信息");
//String url = getApiUrl("/api/Storage/checkInNotification");
Map<String, Object> params = new LinkedHashMap<>();
params.put("TransactionID",nextSeq());
params.put("ReelBarcode",barcode.getBarcode());
params.put("PartNo",barcode.getPartNumber());
params.put("Quantity",barcode.getAmount());
params.put("Msd",false);
params.put("MsdLevel","1");
params.put("Location","0");
params.put("TowerID",TowerID);
String result = HttpHelper.postJson(inNotifyApi,params);
log.info("Response Of checkInNotification From PanaCIM:"+result);
if(!Strings.isNullOrEmpty(result)){
ObjectMapper mapper = new ObjectMapper();
HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
String ErrorCode = jsonMap.get("ErrorCode");
if("0".equals(ErrorCode)){//成功
return true;
}
}
}else{
log.info("没有配置PanaCIM接口,无需通知");
return true;
}
} catch (Exception e) {
log.error("入库通知PanaCIM["+inNotifyApi+"]的料盘"+barcode.getBarcode()+"出错",e);
}
return false;
}
public static boolean deliverNotification(Barcode barcode) {
String outNotifyApi = getOutNotifyApi();
try {
if(Strings.isNullOrEmpty(outNotifyApi)){
outNotifyApi = getOutNotifyApi();
log.info("没有配置API,查找setConfiguration注册的IP 及端口");
}
if(!Strings.isNullOrEmpty(outNotifyApi)){
log.info("向 PanaCIM["+outNotifyApi+"] 通知料盘【"+barcode.getBarcode()+"】的出库信息");
//String url = getApiUrl("/api/Storage/deliverNotification");
Map<String, Object> params = new HashMap<String, Object>();
params.put("TransactionID",nextSeq());
params.put("ReelBarcode",barcode.getBarcode());
params.put("PartNO",barcode.getPartNumber());
params.put("Quantity",barcode.getAmount());
SimpleDateFormat dataformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
params.put("Timestamp",dataformat.format(new Date()));
params.put("TowerID",TowerID);
params.put("JobID","");
params.put("Msd",false);
params.put("MsdLevel","1");
params.put("Location","0");
String result = HttpHelper.postJson(outNotifyApi,params);
log.info("Response Of deliverNotification From PanaCIM:"+result);
if(!Strings.isNullOrEmpty(result)){
ObjectMapper mapper = new ObjectMapper();
HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
String ErrorCode = jsonMap.get("ErrorCode");
if("0".equals(ErrorCode)){//成功
return true;
}
}
}else{
log.info("没有配置PanaCIM接口,无需通知");
return true;
}
} catch (Exception e) {
log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+barcode.getBarcode()+" 出错",e);
}
return false;
}
@RequestMapping(value = "/deliverMaterial")
@ResponseBody
public Map<String,Object> deliverMaterial(@RequestBody PanaMaterial panaMaterial) {
Map<String, Object> result = new HashMap<String, Object>();
try {
/*String TransactionID = map.get("TransactionID");
String TowerID = map.get("TowerID");
// String Timestamp = request.getParameter("Timestamp");//Date(2009-02-15T00:00:00Z)
String JobID = map.get("JobID");
String ReelBarcodes = map.get("ReelBarcodes");//["ABC123","BCD345","LL13212"]*/
String TransactionID = panaMaterial.getTransactionID();
String TowerID = panaMaterial.getTowerID();
// String Timestamp = request.getParameter("Timestamp");//Date(2009-02-15T00:00:00Z)
String JobID = panaMaterial.getJobID();
List<String> ReelBarcodes = panaMaterial.getReelBarcodes();//["ABC123","BCD345","LL13212"]
log.info("收到 PanaCIM 的deliverMaterial 命令:ReelBarcodes="+ StringUtils.join(ReelBarcodes,","));
//ObjectMapper mapper = new ObjectMapper();
//ArrayList<String> codes = mapper.readValue(ReelBarcodes, ArrayList.class);
List<String> ReelBarcodesDelivered = Lists.newArrayList();
List<String> ReelBarcodesNonExisting = Lists.newArrayList();
for (String barcode : ReelBarcodes){//加入到出库列表
try{
StoragePos pos = storagePosManager.getByBarcode(barcode);
if(pos == null){
log.info( "二维码["+barcode+"]在仓库中不存在");
ReelBarcodesNonExisting.add(barcode);
continue;
}
log.info("出库["+barcode+"]位置仓位【"+pos.getPosName()+"】");
taskService.checkout(pos,false,null,false);
ReelBarcodesDelivered.add(barcode);
}catch (Exception e){
ReelBarcodesNonExisting.add(barcode);
}
}
result.put("TransactionID",TransactionID);
result.put("ErrorCode","0");
result.put("JobID",JobID);
result.put("TowerID",TowerID);
result.put("ReelBarcodesDelivered",ReelBarcodesDelivered);
result.put("ReelBarcodesNonExisting", ReelBarcodesNonExisting);
} catch (Exception e) {
log.error("PanaCIM的指令deliverMaterial出错",e);
result.put("ErrorCode","100");
}
return result;
}
@RequestMapping(value = "/getInventory")
@ResponseBody
public Map<String,Object> getInventory(@RequestBody Map<String,String> map) {
Map<String, Object> result = new HashMap<String, Object>();
try {
String TransactionID = map.get("TransactionID");
//String TowerID = map.get("TowerID");
//storagePosManager.getInventory()
log.info("收到 PanaCIM 的getInventory 命令:TransactionID="+TransactionID/**+" TowerID="+TowerID*/);
/**
* {
"ErrorCode":0,
"ReelBarCodes":
[{"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part123","Quantity":123,"ReelBarcode":"123456789","TowerID":"InoAuto A"},
{"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part321","Quantity":321,"ReelBarcode":"123456789","TowerID":"InoAuto B"},
{"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part213","Quantity":213,"ReelBarcode":"123456789","TowerID":"InoAuto C"}],
"TransactionID":"testme"
}
*/
List ReelBarCodes = Lists.newArrayList();
Storage storage = dataCache.defaultStorage();
List<StoragePos> poses = storagePosManager.findNotEmptyByStorageId(storage.getId());
for (StoragePos pos : poses){
Barcode barcode = pos.getBarcode();
Map<String,Object> item = Maps.newHashMap();
item.put("TowerID",TowerID);
item.put("JobID",barcode.getLockName());
item.put("ReelBarcode",barcode.getBarcode());
item.put("PartNo",barcode.getPartNumber());
item.put("Quantity",barcode.getAmount());
item.put("Msd",false);
item.put("msdlevel","");
item.put("Location","0");
ReelBarCodes.add(item);
}
result.put("TransactionID",TransactionID);
result.put("ErrorCode","0");
result.put("ReelBarCodes",ReelBarCodes);
} catch (Exception e) {
log.error("PanaCIM的指令 getInventory 出错",e);
result.put("ErrorCode","200");
}
return result;
}
@RequestMapping(value = "/reserveMaterial")
@ResponseBody
public Map<String,Object> reserveMaterial(@RequestBody PanaMaterial panaMaterial) {
/**
* "TransactionID":"testme",
"TransactionType":0,
"JobID":"job123",
"ReelBarcodesReserved": ["ABC123","BCD345","LL13212"]
*/
Map<String, Object> result = new HashMap<String, Object>();
try {
String TransactionID = panaMaterial.getTransactionID();
//1=create reservation based on JobID 2=update 3=cancel
String TransactionType = panaMaterial.getTransactionType();
String JobID = panaMaterial.getJobID();
List<String> reelBarcodesReserved = panaMaterial.getReelBarcodesReserved();
log.info("收到 PanaCIM 的reserveMaterial 指令:TransactionID="+TransactionID+" TransactionType="+TransactionType+" JobID="+JobID+" ReelBarcodesReserved="+StringUtils.join(reelBarcodesReserved,","));
if(reelBarcodesReserved == null){
log.error("PanaCIM 的指令reserveMaterial 执行时发现reelBarcodesReserved为 NUll,直接返回");
result.put("ErrorCode","301");
result.put("ErrorMessage","The field ReelBarcodesReserved is empty");
}else{
List<String> ReelBarcodesRejected = Lists.newArrayList();
//这里使用指定批次的锁定
if("1".equals(TransactionType) || "2".equals(TransactionType)){//create//update
for (String barcode :reelBarcodesReserved){
StoragePos pos = storagePosManager.getByBarcode(barcode);
if(pos == null){
ReelBarcodesRejected.add(barcode);
}else{
pos.getBarcode().setLockId(JobID);
pos.getBarcode().setLockName(JobID);
storagePosManager.save(pos);
}
}
}else if("3".equals(TransactionType)){//cancel
List<StoragePos> lockPoses = storagePosManager.findLockPos(JobID);
if(lockPoses.isEmpty()){
result.put("ErrorCode","301");
result.put("ErrorMessage","JobId 为"+JobID+"的 Job 不存在");
}else{
//查找所有的 POS
for (StoragePos pos : lockPoses){
pos.getBarcode().setLockId("");
pos.getBarcode().setLockName("");
storagePosManager.save(pos);
}
}
}
/**
* "ErrorCode":0,
"ErrorMessage":null,
"JobID":"job123",
"ReelBarcodesRejected":[],
"TransactionID":"testme"
*/
result.put("TransactionID",TransactionID);
result.put("ErrorCode","0");
result.put("ErrorMessage",null);
result.put("JobID",JobID);
result.put("ReelBarcodesRejected",ReelBarcodesRejected);
}
} catch (Exception e) {
log.error("PanaCIM的指令 reserveMaterial 出错",e);
result.put("ErrorCode","300");
result.put("ErrorMessage",e.getMessage());
}
return result;
}
@RequestMapping(value = "/deliverJob")
@ResponseBody
public Map<String,Object> deliverJob(@RequestBody Map<String,String> map) {
Map<String, Object> result = new HashMap<String, Object>();
try {
String TransactionID = map.get("TransactionID");
String TowerID = map.get("TowerID");
String JobID = map.get("JobID");
String Timestamp = map.get("Timestamp");
log.info("收到 PanaCIM deliverJob 指令:TransactionID=" + TransactionID + " TowerID=" + TowerID + " JobID=" + JobID + " Timestamp=" + Timestamp);
List<StoragePos> lockPoses = storagePosManager.findLockPos(JobID);
//if(batch != null){
//查找所有的 POS
if(lockPoses.isEmpty()){
result.put("ErrorCode","401");
result.put("ErrorMessage","JobID["+JobID+"]未包含物料");
}else{
List<DataLog> tasks = Lists.newArrayList();
for (StoragePos pos :lockPoses){
//已经加过的就不再加了
Storage storage = dataCache.getStorageById(pos.getStorageId());
Barcode barcode = pos.getBarcode();
String partNumber = barcode.getPartNumber();
DataLog task = new DataLog();
task.setType(StorageConstants.OP.CHECKOUT);
task.setStatus(StorageConstants.OP_STATUS.WAIT.name());
task.setPartNumber(partNumber);
//操作人
//task.setCreator(loginUser.getUsername());
//来源
task.setSourceType(StorageConstants.TASK_SOURCE.BATCH.name());
task.setSourceId(JobID);
task.setSourceName("PanaCIM");
task.setSubSourceId("");
task.setSubSourceInfo("");
task.setBarcode(barcode.getBarcode());
task.setNum(barcode.getAmount());
task.setCid(storage.getCid());
task.setStorageId(storage.getId());
task.setStorageName(storage.getName());
task.setPosId(pos.getId());
task.setPosName(pos.getPosName());
tasks.add(task);
}
dataLogDao.insertAll(tasks);
log.info("将"+ JobID + " 添加到出库列表,任务数["+tasks.size()+"]");
List<String> ReelBarcodesFailed = Lists.newArrayList();
result.put("TransactionID",TransactionID);
result.put("ErrorCode","0");
result.put("JobID",JobID);
result.put("TowerID",TowerID);
result.put("ReelBarcodesFailed",ReelBarcodesFailed);
}
// }else{ // }else{
// log.info("没有条码检测接口,无需验证"); // result.put("ErrorCode", "402");
// return true; // result.put("ErrorMessage", "操作失败ID为["+JobID+"]的指定批次不存在");
// } // }
//
// } catch (Exception e) { } catch (Exception e) {
// log.error("向 PanaCIM请求料盘【"+reelBarcode+"】的信息出错",e); log.error("PanaCIM的指令 deliverJob 出错", e);
// } result.put("ErrorCode", "400");
// return false; result.put("ErrorMessage", e.getMessage());
// } }
// return result;
// public static boolean checkInNotification(String inNotifyApi, Barcode barcode) { }
// try {
// if(Strings.isNullOrEmpty(inNotifyApi)){
// inNotifyApi = getInNotifyApi(); }
// log.info("没有配置API,查找setConfiguration注册的IP 及端口");
// }
// if(!Strings.isNullOrEmpty(inNotifyApi)){
// log.info("向 PanaCIM["+inNotifyApi+"] 通知料盘【"+barcode.getBarcode()+"】的入库信息");
// //String url = getApiUrl("/api/Storage/checkInNotification");
// Map<String, Object> params = new LinkedHashMap<>();
// params.put("TransactionID",nextSeq());
// params.put("ReelBarcode",barcode.getBarcode());
// params.put("PartNo",barcode.getPartNumber());
// params.put("Quantity",barcode.getAmount());
// params.put("Msd",false);
// params.put("MsdLevel","1");
// params.put("Location","0");
// params.put("TowerID",TowerID);
//
// String result = HttpHelper.postJson(inNotifyApi,params);
// log.info("Response Of checkInNotification From PanaCIM:"+result);
// if(!Strings.isNullOrEmpty(result)){
// ObjectMapper mapper = new ObjectMapper();
// HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
// String ErrorCode = jsonMap.get("ErrorCode");
// if("0".equals(ErrorCode)){//成功
// return true;
// }
// }
// }else{
// log.info("没有配置PanaCIM接口,无需通知");
// return true;
// }
//
// } catch (Exception e) {
// log.error("入库通知PanaCIM["+inNotifyApi+"]的料盘"+barcode.getBarcode()+"出错",e);
// }
// return false;
// }
//
// public static boolean deliverNotification(String outNotifyApi, Barcode barcode) {
// try {if(Strings.isNullOrEmpty(outNotifyApi)){
// outNotifyApi = getOutNotifyApi();
// log.info("没有配置API,查找setConfiguration注册的IP 及端口");
// }
// if(!Strings.isNullOrEmpty(outNotifyApi)){
// log.info("向 PanaCIM["+outNotifyApi+"] 通知料盘【"+barcode.getBarcode()+"】的出库信息");
// //String url = getApiUrl("/api/Storage/deliverNotification");
// Map<String, Object> params = new HashMap<String, Object>();
// params.put("TransactionID",nextSeq());
// params.put("ReelBarcode",barcode.getBarcode());
// params.put("PartNumber",barcode.getPartNumber());
// params.put("Quantity",barcode.getAmount());
// SimpleDateFormat dataformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// params.put("Timestamp",dataformat.format(new Date()));
// params.put("TowerID",TowerID);
// params.put("JobID","");
// params.put("Msd",false);
// params.put("MsdLevel","");
// params.put("Location","0");
//
// String result = HttpHelper.postJson(outNotifyApi,params);
// log.info("Response Of deliverNotification From PanaCIM:"+result);
// if(!Strings.isNullOrEmpty(result)){
// ObjectMapper mapper = new ObjectMapper();
// HashMap<String,String> jsonMap = mapper.readValue(result, HashMap.class);
// String ErrorCode = jsonMap.get("ErrorCode");
// if("0".equals(ErrorCode)){//成功
// return true;
// }
// }
//
// }else{
// log.info("没有配置PanaCIM接口,无需通知");
// return true;
// }
//
// } catch (Exception e) {
// log.error("出库通知PanaCIM["+outNotifyApi+"]料盘"+barcode.getBarcode()+" 出错",e);
// }
// return false;
// }
//
//
// @RequestMapping(value = "/deliverMaterial")
// @ResponseBody
// public Map<String,Object> deliverMaterial(@RequestBody PanaMaterial panaMaterial) {
// Map<String, Object> result = new HashMap<String, Object>();
// try {
// /*String TransactionID = map.get("TransactionID");
// String TowerID = map.get("TowerID");
//// String Timestamp = request.getParameter("Timestamp");//Date(2009-02-15T00:00:00Z)
// String JobID = map.get("JobID");
// String ReelBarcodes = map.get("ReelBarcodes");//["ABC123","BCD345","LL13212"]*/
// String TransactionID = panaMaterial.getTransactionID();
// String TowerID = panaMaterial.getTowerID();
//// String Timestamp = request.getParameter("Timestamp");//Date(2009-02-15T00:00:00Z)
// String JobID = panaMaterial.getJobID();
// List<String> ReelBarcodes = panaMaterial.getReelBarcodes();//["ABC123","BCD345","LL13212"]
// log.info("收到 PanaCIM 的deliverMaterial 命令:ReelBarcodes="+ StringUtils.join(ReelBarcodes,","));
// //ObjectMapper mapper = new ObjectMapper();
// //ArrayList<String> codes = mapper.readValue(ReelBarcodes, ArrayList.class);
//
// List<String> ReelBarcodesDelivered = Lists.newArrayList();
// List<String> ReelBarcodesNonExisting = Lists.newArrayList();
// for (String barcode : ReelBarcodes){//加入到出库列表
// try{
// StoragePos pos = storagePosManager.getByBarcode(barcode);
// if(pos == null){
// log.info( "二维码["+barcode+"]在仓库中不存在");
// ReelBarcodesNonExisting.add(barcode);
// continue;
// }
// log.info("出库["+barcode+"]位置仓位【"+pos.getPosName()+"】");
// taskService.checkout(pos);
// ReelBarcodesDelivered.add(barcode);
// }catch (Exception e){
// ReelBarcodesNonExisting.add(barcode);
// }
// }
// result.put("TransactionID",TransactionID);
// result.put("ErrorCode","0");
// result.put("JobID",JobID);
// result.put("TowerID",TowerID);
// result.put("ReelBarcodesDelivered",ReelBarcodesDelivered);
// result.put("ReelBarcodesNonExisting", ReelBarcodesNonExisting);
//
// } catch (Exception e) {
// log.error("PanaCIM的指令deliverMaterial出错",e);
// result.put("ErrorCode","100");
// }
// return result;
// }
//
//
//
// @RequestMapping(value = "/getInventory")
// @ResponseBody
// public Map<String,Object> getInventory(@RequestBody Map<String,String> map) {
// Map<String, Object> result = new HashMap<String, Object>();
// try {
// String TransactionID = map.get("TransactionID");
// //String TowerID = map.get("TowerID");
//
// //storagePosManager.getInventory()
//
// log.info("收到 PanaCIM 的getInventory 命令:TransactionID="+TransactionID/**+" TowerID="+TowerID*/);
// /**
// * {
// "ErrorCode":0,
// "ReelBarCodes":
// [{"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part123","Quantity":123,"ReelBarcode":"123456789","TowerID":"InoAuto A"},
// {"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part321","Quantity":321,"ReelBarcode":"123456789","TowerID":"InoAuto B"},
// {"JobID":"1234","Location":"0","Msd":false,"Msdlevel":"1","PartNo":"part213","Quantity":213,"ReelBarcode":"123456789","TowerID":"InoAuto C"}],
// "TransactionID":"testme"
// }
// */
// List ReelBarCodes = Lists.newArrayList();
// Storage storage = dataCache.defaultStorage();
// List<StoragePos> poses = storagePosManager.findNotEmptyByStorageId(storage.getId());
// for (StoragePos pos : poses){
// Barcode barcode = pos.getBarcode();
// Map<String,Object> item = Maps.newHashMap();
// item.put("TowerID",TowerID);
// item.put("JobID",barcode.getLockName());
// item.put("ReelBarcode",barcode.getBarcode());
// item.put("PartNo",barcode.getPartNumber());
// item.put("Quantity",barcode.getAmount());
// item.put("Msd",false);
// item.put("msdlevel","");
// item.put("Location","0");
// ReelBarCodes.add(item);
// }
// result.put("TransactionID",TransactionID);
// result.put("ErrorCode","0");
// result.put("ReelBarCodes",ReelBarCodes);
//
//
// } catch (Exception e) {
// log.error("PanaCIM的指令 getInventory 出错",e);
// result.put("ErrorCode","200");
// }
// return result;
// }
//
// @RequestMapping(value = "/reserveMaterial")
// @ResponseBody
// public Map<String,Object> reserveMaterial(@RequestBody PanaMaterial panaMaterial) {
// /**
// * "TransactionID":"testme",
// "TransactionType":0,
// "JobID":"job123",
// "ReelBarcodesReserved": ["ABC123","BCD345","LL13212"]
// */
// Map<String, Object> result = new HashMap<String, Object>();
// try {
// String TransactionID = panaMaterial.getTransactionID();
// //1=create reservation based on JobID 2=update 3=cancel
// String TransactionType = panaMaterial.getTransactionType();
// String JobID = panaMaterial.getJobID();
// List<String> reelBarcodesReserved = panaMaterial.getReelBarcodesReserved();
// log.info("收到 PanaCIM 的reserveMaterial 指令:TransactionID="+TransactionID+" TransactionType="+TransactionType+" JobID="+JobID+" ReelBarcodesReserved="+StringUtils.join(reelBarcodesReserved,","));
//
// if(reelBarcodesReserved == null){
// log.error("PanaCIM 的指令reserveMaterial 执行时发现reelBarcodesReserved为 NUll,直接返回");
// result.put("ErrorCode","301");
// result.put("ErrorMessage","The field ReelBarcodesReserved is empty");
// }else{
// List<String> ReelBarcodesRejected = Lists.newArrayList();
// //这里使用指定批次的锁定
// if("1".equals(TransactionType) || "2".equals(TransactionType)){//create//update
// SpecifiedBatch specifiedBatch = new SpecifiedBatch();
// specifiedBatch.setAreaId(dataCache.defaultAreaId());
// specifiedBatch.setName(JobID);
// specifiedBatch.setId(JobID);
//
// for (String barcode :reelBarcodesReserved){
// StoragePos pos = storagePosManager.getByBarcode(barcode);
// if(pos == null){
// ReelBarcodesRejected.add(barcode);
// }else{
// pos.getBarcode().setLockId(JobID);
// pos.getBarcode().setLockName(JobID);
// storagePosManager.save(pos);
// specifiedBatch.setOpNum(specifiedBatch.getOpNum() + 1);
// }
// }
// specifiedBatchDao.save(specifiedBatch);
// }else if("3".equals(TransactionType)){//cancel
// SpecifiedBatch specifiedBatch = specifiedBatchDao.findByName(JobID);
// if(specifiedBatch == null){
// result.put("ErrorCode","301");
// result.put("ErrorMessage","JobId 为"+JobID+"的 Job 不存在");
// }else{
// specifiedBatch.setStatus(StorageConstants.OP_STATUS.CANCEL.name());
// //查找所有的 POS
// List<StoragePos> lockPoses = storagePosManager.findLockPos(JobID);
// for (StoragePos pos : lockPoses){
// pos.getBarcode().setLockId("");
// pos.getBarcode().setLockName("");
// storagePosManager.save(pos);
// }
// specifiedBatchDao.save(specifiedBatch);
// }
//
// }
//
// /**
// * "ErrorCode":0,
// "ErrorMessage":null,
// "JobID":"job123",
// "ReelBarcodesRejected":[],
// "TransactionID":"testme"
// */
// result.put("TransactionID",TransactionID);
// result.put("ErrorCode","0");
// result.put("ErrorMessage",null);
// result.put("JobID",JobID);
// result.put("ReelBarcodesRejected",ReelBarcodesRejected);
// }
//
//
// } catch (Exception e) {
// log.error("PanaCIM的指令 reserveMaterial 出错",e);
// result.put("ErrorCode","300");
// result.put("ErrorMessage",e.getMessage());
// }
// return result;
// }
//
//
// @RequestMapping(value = "/deliverJob")
// @ResponseBody
// public Map<String,Object> deliverJob(@RequestBody Map<String,String> map) {
// Map<String, Object> result = new HashMap<String, Object>();
// try {
// String TransactionID = map.get("TransactionID");
// String TowerID = map.get("TowerID");
// String JobID = map.get("JobID");
// String Timestamp = map.get("Timestamp");
// log.info("收到 PanaCIM deliverJob 指令:TransactionID=" + TransactionID + " TowerID=" + TowerID + " JobID=" + JobID + " Timestamp=" + Timestamp);
//
//// SpecifiedBatch batch = specifiedBatchDao.findOneById(JobID);
//// if(batch != null){
//// String areaId = batch.getAreaId();
//// String areaName = dataCache.getAreaName(areaId);
//// //查找所有的 POS
//// List<StoragePos> lockPoses = storagePosManager.findLockPos(JobID);
//// if(lockPoses.isEmpty()){
//// result.put("ErrorCode","401");
//// result.put("ErrorMessage","指定批次["+batch.getTitle()+"]未包含物料");
//// }else{
//// List<DataLog> tasks = Lists.newArrayList();
//// for (StoragePos pos :lockPoses){
//// //已经加过的就不再加了
//// Storage storage = dataCache.getStorageById(pos.getStorageId());
//// Barcode barcode = pos.getBarcode();
//// String partNumber = barcode.getPartNumber();
//// DataLog task = new DataLog();
//// task.setType(StorageConstants.OP.CHECKOUT);
//// task.setStatus(StorageConstants.OP_STATUS.WAIT.name());
//// task.setPartNumber(partNumber);
////
////
//// //操作人
//// //task.setCreator(loginUser.getUsername());
////
//// //来源
//// task.setSourceType(StorageConstants.TASK_SOURCE.BATCH.name());
//// task.setSourceId(batch.getId());
//// task.setSourceName(batch.getName());
//// task.setSubSourceId("");
//// task.setSubSourceInfo("");
////
//// task.setBarcode(barcode.getBarcode());
//// task.setNum(barcode.getAmount());
//// task.setLastOperateDate(barcode.getUsedDate());
////
//// task.setCid(storage.getCid());
//// task.setStorageId(storage.getId());
//// task.setStorageName(storage.getName());
////
//// task.setPosId(pos.getId());
//// task.setPosName(pos.getPosName());
////
//// tasks.add(task);
//// }
////
//// dataLogDao.insertAll(tasks);
////
//// batch.setStatus(StorageConstants.OP_STATUS.WAIT.name());
//// specifiedBatchDao.save(batch);
//// log.info("将"+ batch.getName() + " 添加到出库列表,任务数["+batch.getOpNum()+"]");
//// taskService.addTaskSetToQueue(batch);
//// List<String> ReelBarcodesFailed = Lists.newArrayList();
//// result.put("TransactionID",TransactionID);
//// result.put("ErrorCode","0");
//// result.put("JobID",JobID);
//// result.put("TowerID",TowerID);
//// result.put("ReelBarcodesFailed",ReelBarcodesFailed);
//// }
//
//// }else{
//// result.put("ErrorCode", "402");
//// result.put("ErrorMessage", "操作失败ID为["+JobID+"]的指定批次不存在");
//// }
//
// } catch (Exception e) {
// log.error("PanaCIM的指令 deliverJob 出错", e);
// result.put("ErrorCode", "400");
// result.put("ErrorMessage", e.getMessage());
// }
// return result;
// }
//
//
//}
...@@ -16,6 +16,9 @@ import com.myproject.bean.update.Component; ...@@ -16,6 +16,9 @@ import com.myproject.bean.update.Component;
import com.myproject.bean.update.Settings; import com.myproject.bean.update.Settings;
import com.myproject.manager.IBarcodeManager; import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IComponentManager; import com.myproject.manager.IComponentManager;
import com.myproject.util.DateUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -27,10 +30,8 @@ import javax.servlet.http.HttpServletResponse; ...@@ -27,10 +30,8 @@ import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 生成二维码并输出到html * 生成二维码并输出到html
...@@ -41,6 +42,7 @@ import java.util.Map; ...@@ -41,6 +42,7 @@ import java.util.Map;
@Controller @Controller
public class QrcodeController { public class QrcodeController {
protected final transient Logger log = LogManager.getLogger(getClass());
/*maven 依赖 /*maven 依赖
<dependency> <dependency>
...@@ -191,7 +193,7 @@ public class QrcodeController { ...@@ -191,7 +193,7 @@ public class QrcodeController {
BaseFont baseFont = BaseFont.createFont("C:/WINDOWS/Fonts/simsun.ttc,1", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); BaseFont baseFont = BaseFont.createFont("C:/WINDOWS/Fonts/simsun.ttc,1", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
boldFont = new Font(baseFont,fontSize); boldFont = new Font(baseFont,fontSize);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); log.error("未找到字体simsun.ttc");
} }
PdfPTable table = new PdfPTable(2); PdfPTable table = new PdfPTable(2);
......
...@@ -345,7 +345,9 @@ public class TaskService implements ITaskService { ...@@ -345,7 +345,9 @@ public class TaskService implements ITaskService {
/** /**
* 检查二维码是否合法并且可以入库,没问题的话存入到数据库 * 检查二维码是否合法并且可以入库,没问题的话存入到数据库
*/ */
private Barcode verifyBarcodePutIn(List<Storage> storageList, Barcode barcodeSave) throws ValidateException {
@Override
public Barcode verifyBarcodePutIn(List<Storage> storageList, Barcode barcodeSave) throws ValidateException {
if(barcodeSave == null){ if(barcodeSave == null){
throw new ValidateException("error.barcode.invalid",new String[]{""},"条码无效"); throw new ValidateException("error.barcode.invalid",new String[]{""},"条码无效");
...@@ -358,6 +360,14 @@ public class TaskService implements ITaskService { ...@@ -358,6 +360,14 @@ public class TaskService implements ITaskService {
} }
} }
if(dataCache.isProductionFor(DataCache.CUSTOMER.PANACIM)){
//松下PanaCIM需要进行验证
boolean checkResult = PanaApiController.requestReel(barcodeSave.getBarcode());
if(!checkResult){
throw new ValidateException("PanaCIM验证条码["+barcodeSave.getBarcode()+"]失败","PanaCIM验证失败");
}
}
// if(barcodeSave.getPlateSize() <=0 || barcodeSave.getHeight() <= 0){ // if(barcodeSave.getPlateSize() <=0 || barcodeSave.getHeight() <= 0){
// throw new ValidateException("无法入库,请先设置料盘尺寸"); // throw new ValidateException("无法入库,请先设置料盘尺寸");
// } // }
...@@ -1138,7 +1148,7 @@ public class TaskService implements ITaskService { ...@@ -1138,7 +1148,7 @@ public class TaskService implements ITaskService {
if(!Strings.isNullOrEmpty(posName)){//客户端发一次完成之后,会发空的 posName,不需要处理 if(!Strings.isNullOrEmpty(posName)){//客户端发一次完成之后,会发空的 posName,不需要处理
if (StorageConstants.BOX_STATUS.IN_FINISHED == status) {//入仓完成 if (StorageConstants.BOX_STATUS.IN_FINISHED == status) {//入仓完成
DataLog task = findExecutingTask(statusBean.getCid(), boxStatus.getPosId()); DataLog task = findExecutingTask(statusBean.getCid(), boxStatus.getPosId());
if (task != null) { if (task != null && task.isPutInTask()) {
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成"); log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成");
DataLog cancelTask = findFinishedTask(statusBean.getCid(), boxStatus.getPosId()); DataLog cancelTask = findFinishedTask(statusBean.getCid(), boxStatus.getPosId());
if(cancelTask != null && cancelTask.isCancel()){ if(cancelTask != null && cancelTask.isCancel()){
...@@ -1150,7 +1160,7 @@ public class TaskService implements ITaskService { ...@@ -1150,7 +1160,7 @@ public class TaskService implements ITaskService {
} else { } else {
//从已完成列表中找,如果还找不到就忽略 //从已完成列表中找,如果还找不到就忽略
task = findFinishedTask(statusBean.getCid(), boxStatus.getPosId()); task = findFinishedTask(statusBean.getCid(), boxStatus.getPosId());
if (task != null) { if (task != null && task.isPutInTask()) {
if(task.isCancel()){//被取消的任务,客户端发完成信号过来,修改取消状态为已完成 if(task.isCancel()){//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,但任务已被取消,修改为完成"); log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,但任务已被取消,修改为完成");
putInFinished(task); putInFinished(task);
...@@ -1624,6 +1634,15 @@ public class TaskService implements ITaskService { ...@@ -1624,6 +1634,15 @@ public class TaskService implements ITaskService {
task.setMemo(barcode.getMemo()); task.setMemo(barcode.getMemo());
dataCache.updateInventory(pos,barcode); dataCache.updateInventory(pos,barcode);
Storage storage = dataCache.getStorage(task.getCid());
if(storage != null){
if(dataCache.isProductionFor(DataCache.CUSTOMER.PANACIM)){
PanaApiController.checkInNotification(barcode);
}else{
postInNotification(dataCache.getSettings().getInNotifyApi(), task.getBarcode(), task.getStorageId());
}
}
//dataCache.updateStorage(task.getCid()); //dataCache.updateStorage(task.getCid());
}else{ }else{
...@@ -1762,7 +1781,11 @@ public class TaskService implements ITaskService { ...@@ -1762,7 +1781,11 @@ public class TaskService implements ITaskService {
Storage storage = dataCache.getStorage(task.getCid()); Storage storage = dataCache.getStorage(task.getCid());
if(storage != null){ if(storage != null){
postInNotification(dataCache.getSettings().getInNotifyApi(), task.getBarcode(), task.getStorageId()); if(dataCache.isProductionFor(DataCache.CUSTOMER.PANACIM)){
PanaApiController.checkInNotification(barcode);
}else{
postInNotification(dataCache.getSettings().getInNotifyApi(), task.getBarcode(), task.getStorageId());
}
} }
...@@ -1874,7 +1897,12 @@ public class TaskService implements ITaskService { ...@@ -1874,7 +1897,12 @@ public class TaskService implements ITaskService {
//通知消息 //通知消息
Storage storage = dataCache.getStorage(task.getCid()); Storage storage = dataCache.getStorage(task.getCid());
if(storage != null){ if(storage != null){
postOutNotification(dataCache.getSettings().getOutNotifyApi(), task.getBarcode(), task.getCid()); if(dataCache.isProductionFor(DataCache.CUSTOMER.PANACIM)){
PanaApiController.deliverNotification(barcode);
}else{
postOutNotification(dataCache.getSettings().getOutNotifyApi(), task.getBarcode(), task.getCid());
}
} }
......
...@@ -86,10 +86,27 @@ ...@@ -86,10 +86,27 @@
</div> </div>
</div> </div>
<label class="control-label col-md-2"><fmt:message key="barcode.expireDate"/></label> <label class="control-label col-md-2"><fmt:message key="barcode.batch"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group">
<form:input type="text" id="batch" path="batch" class="form-control"/>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2"><fmt:message key="barcode.produceDate"/></label>
<div class="col-md-4"> <div class="col-md-4">
<div style="text-align:left" class="input-group"> <div style="text-align:left" class="input-group">
<form:input type="text" path="expireDate" class="form-control form-control-inline input-medium date-picker" /> <form:input type="text" path="produceDate" class="form-control form-control-inline input-medium date-picker" data-date-format="yyyy-mm-dd"/>
</div>
</div>
<label class="control-label col-md-2"><fmt:message key="barcode.expireDate"/></label>
<div class="col-md-4">
<div style="text-align:left" class="input-group" >
<form:input type="text" path="expireDate" class="form-control form-control-inline input-medium date-picker" data-date="2020-01-01" data-date-format="yyyy-mm-dd"/>
</div> </div>
</div> </div>
</div> </div>
...@@ -284,5 +301,13 @@ ...@@ -284,5 +301,13 @@
$("#otherField3").autocomplete(fetchBarcode("otherField3")); $("#otherField3").autocomplete(fetchBarcode("otherField3"));
$("#otherField4").autocomplete(fetchBarcode("otherField4")); $("#otherField4").autocomplete(fetchBarcode("otherField4"));
$("#otherField5").autocomplete(fetchBarcode("otherField5")); $("#otherField5").autocomplete(fetchBarcode("otherField5"));
$('.date-picker').datepicker({
rtl: Metronic.isRTL(),
orientation: "left",
autoclose: true,
language:'en'
});
</script> </script>
</c:set> </c:set>
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
<display:column titleKey="component.plate.size"> <display:column titleKey="component.plate.size">
${component.plateSize} x ${component.height} ${component.plateSize} x ${component.height}
</display:column> </display:column>
<display:column property="validDay" titleKey="component.validDay"/> <%--<display:column property="validDay" titleKey="component.validDay"/>--%>
<%--<display:column property="type" titleKey="类型"/>--%> <%--<display:column property="type" titleKey="类型"/>--%>
<display:column property="amount" titleKey="component.amount"/> <display:column property="amount" titleKey="component.amount"/>
......
...@@ -379,14 +379,14 @@ ...@@ -379,14 +379,14 @@
<div class="form-group"> <div class="form-group">
<%--有效期--%> <%--有效期--%>
<label class="control-label col-md-2"><fmt:message key="component.validDay"/> </label> <%--<label class="control-label col-md-2"><fmt:message key="component.validDay"/> </label>--%>
<div class="col-md-3"> <%--<div class="col-md-3">--%>
<div style="text-align:left" class="input-group"> <%--<div style="text-align:left" class="input-group">--%>
<form:input type="text" path="validDay" <%--<form:input type="text" path="validDay"--%>
class="form-control"/> <%--class="form-control"/>--%>
</div> <%--</div>--%>
</div> <%--</div>--%>
<label class="control-label col-md-2"><fmt:message key="component.plate.size"/> </label> <label class="control-label col-md-2"><fmt:message key="component.plate.size"/> </label>
......
...@@ -57,10 +57,10 @@ ...@@ -57,10 +57,10 @@
</form:select> </form:select>
</div> </div>
<label class="control-label col-md-1"><fmt:message key="barcode.memo"/></label> <label class="control-label col-md-1"><fmt:message key="barcode.provider"/></label>
<div class="col-md-2"> <div class="col-md-2">
<div style="text-align:left"> <div style="text-align:left">
<input id="memo" name="memo" class="form-control" value="${memo}"/> <input id="provider" name="provider" class="form-control" value="${provider}"/>
</div> </div>
</div> </div>
...@@ -112,10 +112,19 @@ ...@@ -112,10 +112,19 @@
</div> </div>
</div> </div>
<label class="control-label col-md-1"><fmt:message key="barcode.batch"/></label> <%--<label class="control-label col-md-1"><fmt:message key="barcode.batch"/></label>--%>
<div class="col-md-2"> <%--<div class="col-md-2">--%>
<%--<div style="text-align:left">--%>
<%--<input id="batch" name="batch" class="form-control" value="${batch}"/>--%>
<%--</div>--%>
<%--</div>--%>
<label class="control-label col-md-1"><fmt:message key="barcode.memo"/></label>
<div class="col-md-2">
<div style="text-align:left"> <div style="text-align:left">
<input id="batch" name="batch" class="form-control" value="${batch}"/> <input id="memo" name="memo" class="form-control" value="${memo}"/>
</div> </div>
</div> </div>
...@@ -211,9 +220,9 @@ ...@@ -211,9 +220,9 @@
<display:column titleKey="barcode.produceDate" sortProperty="barcode.produceDate" sortable="true"> <display:column titleKey="barcode.produceDate" sortProperty="barcode.produceDate" sortable="true">
<fmt:formatDate value="${pos.barcode.produceDate}" pattern="yyyy-MM-dd"/> <fmt:formatDate value="${pos.barcode.produceDate}" pattern="yyyy-MM-dd"/>
</display:column> </display:column>
<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true" class="${expireClass}"> <%--<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true" class="${expireClass}">--%>
<fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/> <%--<fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/>--%>
</display:column> <%--</display:column>--%>
<display:column property="barcode.memo" titleKey="barcode.memo"/> <display:column property="barcode.memo" titleKey="barcode.memo"/>
<display:column titleKey="checkOut.operate" media="html"> <display:column titleKey="checkOut.operate" media="html">
<c:if test="${!limitCheckOut}"> <c:if test="${!limitCheckOut}">
......
...@@ -241,7 +241,7 @@ ...@@ -241,7 +241,7 @@
<div class="page-footer-inner"> <div class="page-footer-inner">
2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a> 2016&copy; <a href="${ctx}/updateHistory.html">SMD BOX</a>
</div> </div>
<span class="right" style="color: #a3a3a3;">Version: 2020.09.27</span> <span class="right" style="color: #a3a3a3;">Version: 2020.10.27</span>
<div class="scroll-to-top"> <div class="scroll-to-top">
<i class="icon-arrow-up"></i> <i class="icon-arrow-up"></i>
</div> </div>
......
位置,优先级,高度,宽度,料仓ID,前后轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位取料点P4,,,,, 位置,优先级,高度,宽度,料仓ID,设备IP,区域ID,灯索引
AC1#L1_1_1,1,75,40,1,398000,55000,110000,110000,55000,170000,,,,,1000 1_1_1,10,12,15,1,192.168.201.191,1,0
AC1#L1_1_2,2,75,40,1,398800,361000,410000,410000,361000,170000,,,,, 1_1_2,10,12,15,1,192.168.201.191,1,1
AC1#L1_1_3,3,75,40,1,399600,661000,710000,710000,661000,170000,,,,, 1_1_3,10,12,15,1,192.168.201.191,1,2
AC1#L1_1_4,4,75,40,1,400400,961000,1010000,1010000,961000,170000,,,,, 1_1_4,10,12,15,1,192.168.201.191,1,3
AC1#L1_1_5,5,75,40,1,401700,1261000,1310000,1310000,1261000,170000,,,,, 1_1_5,10,12,15,1,192.168.201.191,1,4
AC1#L1_1_6,6,75,40,1,402500,1561000,1610000,1610000,1561000,170000,,,,, 1_1_6,10,12,15,1,192.168.201.191,1,5
AC1#L1_1_7,7,75,40,1,403300,1861000,1910000,1910000,1861000,170000,,,,, 1_1_7,10,12,15,1,192.168.201.191,1,6
AC1#L2_1_1,8,75,40,1,680318,55000,110000,110000,55000,170000,,,,, 1_1_8,10,12,15,1,192.168.201.191,1,7
AC1#L2_1_2,9,75,40,1,681118,361000,410000,410000,361000,170000,,,,, 1_1_9,10,12,15,1,192.168.201.191,1,8
AC1#L2_1_3,10,75,40,1,681918,661000,710000,710000,661000,170000,,,,, 1_1_10,10,12,15,1,192.168.201.191,1,9
AC1#L2_1_4,11,75,40,1,682718,961000,1010000,1010000,961000,170000,,,,, 1_1_11,10,12,15,1,192.168.201.191,1,10
AC1#L2_1_5,12,75,40,1,683518,1261000,1310000,1310000,1261000,170000,,,,, 1_1_12,10,12,15,1,192.168.201.191,1,11
AC1#L2_1_6,13,75,40,1,684318,1561000,1610000,1610000,1561000,170000,,,,, 1_1_13,10,12,15,1,192.168.201.191,1,12
AC1#L2_1_7,14,75,40,1,685118,1861000,1910000,1910000,1861000,170000,,,,, 1_1_14,10,12,15,1,192.168.201.191,1,13
AC1#L3_1_1,15,75,40,1,961818,55000,110000,110000,55000,170000,,,,, 1_1_15,10,12,15,1,192.168.201.191,1,14
AC1#L3_1_2,16,75,40,1,962618,361000,410000,410000,361000,170000,,,,, 1_1_16,10,12,15,1,192.168.201.191,1,15
AC1#L3_1_3,17,75,40,1,963418,661000,710000,710000,661000,170000,,,,, 1_1_17,10,12,15,1,192.168.201.191,1,16
AC1#L3_1_4,18,75,40,1,964218,961000,1010000,1010000,961000,170000,,,,, 1_1_18,10,12,15,1,192.168.201.191,1,17
AC1#L3_1_5,19,75,40,1,965018,1261000,1310000,1310000,1261000,170000,,,,, 1_1_19,10,12,15,1,192.168.201.191,1,18
AC1#L3_1_6,20,75,40,1,965818,1561000,1610000,1610000,1561000,170000,,,,, 1_1_20,10,12,15,1,192.168.201.191,1,19
AC1#L3_1_7,21,75,40,1,966618,1861000,1910000,1910000,1861000,170000,,,,, 1_1_21,10,12,15,1,192.168.201.191,1,20
AC1#L4_1_1,22,75,40,1,1242818,55000,110000,110000,55000,170000,,,,, 1_1_22,10,12,15,1,192.168.201.191,1,21
AC1#L4_1_2,23,75,40,1,1243618,361000,410000,410000,361000,170000,,,,, 1_1_23,10,12,15,1,192.168.201.191,1,22
AC1#L4_1_3,24,75,40,1,1244418,661000,710000,710000,661000,170000,,,,, 1_1_24,10,12,15,1,192.168.201.191,1,23
AC1#L4_1_4,25,75,40,1,1245218,961000,1010000,1010000,961000,170000,,,,, 1_1_25,10,12,15,1,192.168.201.191,1,24
AC1#L4_1_5,26,75,40,1,1246018,1261000,1310000,1310000,1261000,170000,,,,, 1_1_26,10,12,15,1,192.168.201.191,1,25
AC1#L4_1_6,27,75,40,1,1246818,1561000,1610000,1610000,1561000,170000,,,,, 1_1_27,10,12,15,1,192.168.201.191,1,26
AC1#L4_1_7,28,75,40,1,1247618,1861000,1910000,1910000,1861000,170000,,,,, 1_1_28,10,12,15,1,192.168.201.191,1,27
AC1#L5_1_1,29,75,40,1,1522818,55000,110000,110000,55000,170000,,,,, 1_1_29,10,12,15,1,192.168.201.191,1,28
AC1#L5_1_2,30,75,40,1,1523618,361000,410000,410000,361000,170000,,,,, 1_1_30,10,12,15,1,192.168.201.191,1,29
AC1#L5_1_3,31,75,40,1,1524418,661000,710000,710000,661000,170000,,,,, 1_1_31,10,12,15,1,192.168.201.191,1,30
AC1#L5_1_4,32,75,40,1,1525218,961000,1010000,1010000,961000,170000,,,,, 1_1_32,10,12,15,1,192.168.201.191,1,31
AC1#L5_1_5,33,75,40,1,1526018,1261000,1310000,1310000,1261000,170000,,,,, 1_1_33,10,12,15,1,192.168.201.191,1,32
AC1#L5_1_6,34,75,40,1,1526818,1561000,1610000,1610000,1561000,170000,,,,, 1_1_34,10,12,15,1,192.168.201.191,1,33
AC1#L5_1_7,35,75,40,1,1527618,1861000,1910000,1910000,1861000,170000,,,,, 1_1_35,10,12,15,1,192.168.201.191,1,34
AC1#L6_1_1,36,75,40,1,1803318,55000,110000,110000,55000,170000,,,,, 1_1_36,10,12,15,1,192.168.201.191,1,35
AC1#L6_1_2,37,75,40,1,1804118,361000,410000,410000,361000,170000,,,,, 1_1_37,10,12,15,1,192.168.201.191,1,36
AC1#L6_1_3,38,75,40,1,1804918,661000,710000,710000,661000,170000,,,,, 1_1_38,10,12,15,1,192.168.201.191,1,37
AC1#L6_1_4,39,75,40,1,1805718,961000,1010000,1010000,961000,170000,,,,, 1_1_39,10,12,15,1,192.168.201.191,1,38
AC1#L6_1_5,40,75,40,1,1806518,1261000,1310000,1310000,1261000,170000,,,,, 1_1_40,10,12,15,1,192.168.201.191,1,39
AC1#L6_1_6,41,75,40,1,1807318,1561000,1610000,1610000,1561000,170000,,,,, 2_1_1,10,12,13,1,192.168.201.191,1,79
AC1#L6_1_7,42,75,40,1,1808118,1861000,1910000,1910000,1861000,170000,,,,, 2_1_2,10,12,13,1,192.168.201.191,1,78
AC1#L7_1_1,43,75,40,1,2084918,55000,110000,110000,55000,170000,,,,, 2_1_3,10,12,13,1,192.168.201.191,1,77
AC1#L7_1_2,44,75,40,1,2085718,361000,410000,410000,361000,170000,,,,, 2_1_4,10,12,13,1,192.168.201.191,1,76
AC1#L7_1_3,45,75,40,1,2086518,661000,710000,710000,661000,170000,,,,, 2_1_5,10,12,13,1,192.168.201.191,1,75
AC1#L7_1_4,46,75,40,1,2087318,961000,1010000,1010000,961000,170000,,,,, 2_1_6,10,12,13,1,192.168.201.191,1,74
AC1#L7_1_5,47,75,40,1,2088118,1261000,1310000,1310000,1261000,170000,,,,, 2_1_7,10,12,13,1,192.168.201.191,1,73
AC1#L7_1_6,48,75,40,1,2088918,1561000,1610000,1610000,1561000,170000,,,,, 2_1_8,10,12,13,1,192.168.201.191,1,72
AC1#L7_1_7,49,75,40,1,2089718,1861000,1910000,1910000,1861000,170000,,,,, 2_1_9,10,12,13,1,192.168.201.191,1,71
AC1#L8_1_1,50,75,40,1,2366918,55000,110000,110000,55000,170000,,,,, 2_1_10,10,12,13,1,192.168.201.191,1,70
AC1#L8_1_2,51,75,40,1,2367718,361000,410000,410000,361000,170000,,,,, 2_1_11,10,12,13,1,192.168.201.191,1,69
AC1#L8_1_3,52,75,40,1,2368518,661000,710000,710000,661000,170000,,,,, 2_1_12,10,12,13,1,192.168.201.191,1,68
AC1#L8_1_4,53,75,40,1,2369318,961000,1010000,1010000,961000,170000,,,,, 2_1_13,10,12,13,1,192.168.201.191,1,67
AC1#L8_1_5,54,75,40,1,2370118,1261000,1310000,1310000,1261000,170000,,,,, 2_1_14,10,12,13,1,192.168.201.191,1,66
AC1#L8_1_6,55,75,40,1,2370918,1561000,1610000,1610000,1561000,170000,,,,, 2_1_15,10,12,13,1,192.168.201.191,1,65
AC1#L8_1_7,56,75,40,1,2371718,1861000,1910000,1910000,1861000,170000,,,,, 2_1_16,10,12,13,1,192.168.201.191,1,64
AC1#L9_1_1,57,75,40,1,2647418,55000,110000,110000,55000,170000,,,,, 2_1_17,10,12,13,1,192.168.201.191,1,63
AC1#L9_1_2,58,75,40,1,2648218,361000,410000,410000,361000,170000,,,,, 2_1_18,10,12,13,1,192.168.201.191,1,62
AC1#L9_1_3,59,75,40,1,2649018,661000,710000,710000,661000,170000,,,,, 2_1_19,10,12,13,1,192.168.201.191,1,61
AC1#L9_1_4,60,75,40,1,2649818,961000,1010000,1010000,961000,170000,,,,1500, 2_1_20,10,12,13,1,192.168.201.191,1,60
AC1#L9_1_5,61,75,40,1,2650618,1261000,1310000,1310000,1261000,170000,,,,, 2_1_21,10,12,13,1,192.168.201.191,1,59
AC1#L9_1_6,62,75,40,1,2651418,1561000,1610000,1610000,1561000,170000,,,,, 2_1_22,10,12,13,1,192.168.201.191,1,58
AC1#L9_1_7,63,75,40,1,2652218,1861000,1910000,1910000,1861000,170000,,,,, 2_1_23,10,12,13,1,192.168.201.191,1,57
AC1#L10_1_1,64,75,40,1,2929618,55000,110000,110000,55000,170000,,,,, 2_1_24,10,12,13,1,192.168.201.191,1,56
AC1#L10_1_2,65,75,40,1,2930418,361000,410000,410000,361000,170000,,,,, 2_1_25,10,12,13,1,192.168.201.191,1,55
AC1#L10_1_3,66,75,40,1,2931218,661000,710000,710000,661000,170000,,,,, 2_1_26,10,12,13,1,192.168.201.191,1,54
AC1#L10_1_4,67,75,40,1,2932018,961000,1010000,1010000,961000,170000,,,,, 2_1_27,10,12,13,1,192.168.201.191,1,53
AC1#L10_1_5,68,75,40,1,2932818,1261000,1310000,1310000,1261000,170000,,,,, 2_1_28,10,12,13,1,192.168.201.191,1,52
AC1#L10_1_6,69,75,40,1,2933618,1561000,1610000,1610000,1561000,170000,,,,, 2_1_29,10,12,13,1,192.168.201.191,1,51
AC1#L10_1_7,70,75,40,1,2934418,1861000,1910000,1910000,1861000,170000,,,,, 2_1_30,10,12,13,1,192.168.201.191,1,50
AC1#L11_1_1,71,75,40,1,3210018,55000,110000,110000,55000,170000,,,,, 2_1_31,10,12,13,1,192.168.201.191,1,49
AC1#L11_1_2,72,75,40,1,3211018,361000,410000,410000,361000,170000,,,,, 2_1_32,10,12,13,1,192.168.201.191,1,48
AC1#L11_1_3,73,75,40,1,3212018,661000,710000,710000,661000,170000,,,,, 2_1_33,10,12,13,1,192.168.201.191,1,47
AC1#L11_1_4,74,75,40,1,3213018,961000,1010000,1010000,961000,170000,,,,, 2_1_34,10,12,13,1,192.168.201.191,1,46
AC1#L11_1_5,75,75,40,1,3215518,1261000,1310000,1310000,1261000,170000,,,,, 2_1_35,10,12,13,1,192.168.201.191,1,45
AC1#L11_1_6,76,75,40,1,3216518,1561000,1610000,1610000,1561000,170000,,,500,, 2_1_36,10,12,13,1,192.168.201.191,1,44
AC1#L11_1_7,77,75,40,1,3217518,1861000,1910000,1910000,1861000,170000,,,,, 2_1_37,10,12,13,1,192.168.201.191,1,43
AC1#R1_1_1,78,75,40,1,399500,55000,110000,110000,55000,-170000,,,,, 2_1_38,10,12,13,1,192.168.201.191,1,42
AC1#R1_1_2,79,75,40,1,400300,361000,410000,410000,361000,-170000,,,,, 2_1_39,10,12,13,1,192.168.201.191,1,41
AC1#R1_1_3,80,75,40,1,401100,661000,710000,710000,661000,-170000,,,,, 2_1_40,10,12,13,1,192.168.201.191,1,40
AC1#R1_1_4,81,75,40,1,401900,961000,1010000,1010000,961000,-170000,,,,, 3_1_1,10,12,7,1,192.168.201.191,1,80
AC1#R1_1_5,82,75,40,1,402700,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_2,10,12,7,1,192.168.201.191,1,81
AC1#R1_1_6,83,75,40,1,403500,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_3,10,12,7,1,192.168.201.191,1,82
AC1#R1_1_7,84,75,40,1,404300,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_4,10,12,7,1,192.168.201.191,1,83
AC1#R2_1_1,85,75,40,1,680318,55000,110000,110000,55000,-170000,,,,, 3_1_5,10,12,7,1,192.168.201.191,1,84
AC1#R2_1_2,86,75,40,1,681118,361000,410000,410000,361000,-170000,,,,, 3_1_6,10,12,7,1,192.168.201.191,1,85
AC1#R2_1_3,87,75,40,1,681918,661000,710000,710000,661000,-170000,,,,, 3_1_7,10,12,7,1,192.168.201.191,1,86
AC1#R2_1_4,88,75,40,1,682718,961000,1010000,1010000,961000,-170000,,,,, 3_1_8,10,12,7,1,192.168.201.191,1,87
AC1#R2_1_5,89,75,40,1,683518,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_9,10,12,7,1,192.168.201.191,1,88
AC1#R2_1_6,90,75,40,1,684318,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_10,10,12,7,1,192.168.201.191,1,89
AC1#R2_1_7,91,75,40,1,685118,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_11,10,12,7,1,192.168.201.191,1,90
AC1#R3_1_1,92,75,40,1,961818,55000,110000,110000,55000,-170000,,,,, 3_1_12,10,12,7,1,192.168.201.191,1,91
AC1#R3_1_2,93,75,40,1,962618,361000,410000,410000,361000,-170000,,,,, 3_1_13,10,12,7,1,192.168.201.191,1,92
AC1#R3_1_3,94,75,40,1,963418,661000,710000,710000,661000,-170000,,,,, 3_1_14,10,12,7,1,192.168.201.191,1,93
AC1#R3_1_4,95,75,40,1,964218,961000,1010000,1010000,961000,-170000,,,,, 3_1_15,10,12,7,1,192.168.201.191,1,94
AC1#R3_1_5,96,75,40,1,965018,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_16,10,12,7,1,192.168.201.191,1,95
AC1#R3_1_6,97,75,40,1,965818,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_17,10,12,7,1,192.168.201.191,1,96
AC1#R3_1_7,98,75,40,1,966618,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_18,10,12,7,1,192.168.201.191,1,97
AC1#R4_1_1,99,75,40,1,1242818,55000,110000,110000,55000,-170000,,,,, 3_1_19,10,12,7,1,192.168.201.191,1,98
AC1#R4_1_2,100,75,40,1,1243618,361000,410000,410000,361000,-170000,,,,, 3_1_20,10,12,7,1,192.168.201.191,1,99
AC1#R4_1_3,101,75,40,1,1244418,661000,710000,710000,661000,-170000,,,,, 3_1_21,10,12,7,1,192.168.201.191,1,100
AC1#R4_1_4,102,75,40,1,1245218,961000,1010000,1010000,961000,-170000,,0,,, 3_1_22,10,12,7,1,192.168.201.191,1,101
AC1#R4_1_5,103,75,40,1,1246018,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_23,10,12,7,1,192.168.201.191,1,102
AC1#R4_1_6,104,75,40,1,1246818,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_24,10,12,7,1,192.168.201.191,1,103
AC1#R4_1_7,105,75,40,1,1247618,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_25,10,12,7,1,192.168.201.191,1,104
AC1#R5_1_1,106,75,40,1,1522818,55000,110000,110000,55000,-170000,,,,, 3_1_26,10,12,7,1,192.168.201.191,1,105
AC1#R5_1_2,107,75,40,1,1523618,361000,410000,410000,361000,-170000,,,,, 3_1_27,10,12,7,1,192.168.201.191,1,106
AC1#R5_1_3,108,75,40,1,1524418,661000,710000,710000,661000,-170000,,,,, 3_1_28,10,12,7,1,192.168.201.191,1,107
AC1#R5_1_4,109,75,40,1,1525218,961000,1010000,1010000,961000,-170000,,,,, 3_1_29,10,12,7,1,192.168.201.191,1,108
AC1#R5_1_5,110,75,40,1,1526018,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_30,10,12,7,1,192.168.201.191,1,109
AC1#R5_1_6,111,75,40,1,1526818,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_31,10,12,7,1,192.168.201.191,1,110
AC1#R5_1_7,112,75,40,1,1527618,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_32,10,12,7,1,192.168.201.191,1,111
AC1#R6_1_1,113,75,40,1,1803318,55000,110000,110000,55000,-170000,,,,, 3_1_33,10,12,7,1,192.168.201.191,1,112
AC1#R6_1_2,114,75,40,1,1804118,361000,410000,410000,361000,-170000,,,,, 3_1_34,10,12,7,1,192.168.201.191,1,113
AC1#R6_1_3,115,75,40,1,1804918,661000,710000,710000,661000,-170000,,,,, 3_1_35,10,12,7,1,192.168.201.191,1,114
AC1#R6_1_4,116,75,40,1,1805718,961000,1010000,1010000,961000,-170000,,,,, 3_1_36,10,12,7,1,192.168.201.191,1,115
AC1#R6_1_5,117,75,40,1,1806518,1261000,1310000,1310000,1261000,-170000,,,,, 3_1_37,10,12,7,1,192.168.201.191,1,116
AC1#R6_1_6,118,75,40,1,1807318,1561000,1610000,1610000,1561000,-170000,,,,, 3_1_38,10,12,7,1,192.168.201.191,1,117
AC1#R6_1_7,119,75,40,1,1808118,1861000,1910000,1910000,1861000,-170000,,,,, 3_1_39,10,12,7,1,192.168.201.191,1,118
AC1#R7_1_1,120,75,40,1,2084918,55000,110000,110000,55000,-170000,,,,, 3_1_40,10,12,7,1,192.168.201.191,1,119
AC1#R7_1_2,121,75,40,1,2085718,361000,410000,410000,361000,-170000,,,,,
AC1#R7_1_3,122,75,40,1,2086518,661000,710000,710000,661000,-170000,,,,,
AC1#R7_1_4,123,75,40,1,2087318,961000,1010000,1010000,961000,-170000,,,,,
AC1#R7_1_5,124,75,40,1,2088118,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R7_1_6,125,75,40,1,2088918,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R7_1_7,126,75,40,1,2089718,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R8_1_1,127,75,40,1,2366918,55000,110000,110000,55000,-170000,,,,,
AC1#R8_1_2,128,75,40,1,2367718,361000,410000,410000,361000,-170000,,,,,
AC1#R8_1_3,129,75,40,1,2368518,661000,710000,710000,661000,-170000,,,,,
AC1#R8_1_4,130,75,40,1,2369318,961000,1010000,1010000,961000,-170000,,,,,
AC1#R8_1_5,131,75,40,1,2370118,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R8_1_6,132,75,40,1,2370918,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R8_1_7,133,75,40,1,2371718,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R9_1_1,134,75,40,1,2647418,55000,110000,110000,55000,-170000,,,,,
AC1#R9_1_2,135,75,40,1,2648218,361000,410000,410000,361000,-170000,,,,,
AC1#R9_1_3,136,75,40,1,2649018,661000,710000,710000,661000,-170000,,,,,
AC1#R9_1_4,137,75,40,1,2649818,961000,1010000,1010000,961000,-170000,,,,,
AC1#R9_1_5,138,75,40,1,2650618,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R9_1_6,139,75,40,1,2651418,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R9_1_7,140,75,40,1,2652218,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R10_1_1,141,75,40,1,2929618,55000,110000,110000,55000,-170000,,,,,
AC1#R10_1_2,142,75,40,1,2930418,361000,410000,410000,361000,-170000,,,,,
AC1#R10_1_3,143,75,40,1,2931218,661000,710000,710000,661000,-170000,,,,,
AC1#R10_1_4,144,75,40,1,2932018,961000,1010000,1010000,961000,-170000,,,,,
AC1#R10_1_5,145,75,40,1,2932818,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R10_1_6,146,75,40,1,2933618,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R10_1_7,147,75,40,1,2934418,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R11_1_1,148,75,40,1,3211518,55000,110000,110000,55000,-170000,,,,,
AC1#R11_1_2,149,75,40,1,3212518,361000,410000,410000,361000,-170000,,,,,
AC1#R11_1_3,150,75,40,1,3213518,661000,710000,710000,661000,-170000,,,,,
AC1#R11_1_4,151,75,40,1,3214518,961000,1010000,1010000,961000,-170000,,,,,
AC1#R11_1_5,152,75,40,1,3215518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R11_1_6,153,75,40,1,3216518,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R11_1_7,154,75,40,1,3217518,1861000,1910000,1910000,1861000,-170000,,,,,
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!