Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
SmdBox
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 69e2c14e
由
sunke
编写于
2020-12-08 16:10:27 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
料架与PanaCIM对接
1 个父辈
a6cd8774
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
723 行增加
和
693 行删除
myproject/src/main/java/com/myproject/webapp/controller/cloud/AlarmInfoSearchController.java
myproject/src/main/java/com/myproject/webapp/controller/storage/CodeShelfController.java
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosFindController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/ITaskService.java
myproject/src/main/java/com/myproject/webapp/controller/webService/MesApiController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/PanaApiController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/QrcodeController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
myproject/src/main/webapp/WEB-INF/pages/barcode/barcodeUpdate.jsp
myproject/src/main/webapp/WEB-INF/pages/component/componentSearch.jsp
myproject/src/main/webapp/WEB-INF/pages/component/componentUpdate.jsp
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
myproject/src/main/webapp/decorators/metro.jsp
myproject/src/main/webapp/resources/admin/linePositions.csv
myproject/src/main/java/com/myproject/webapp/controller/cloud/AlarmInfoSearchController.java
查看文件 @
69e2c14
...
...
@@ -5,6 +5,7 @@ import com.myproject.bean.search.PageList;
import
com.myproject.dao.mongo.IAlarmInfoDao
;
import
com.myproject.util.DateUtil
;
import
com.myproject.webapp.controller.storage.BaseSearchController
;
import
org.displaytag.tags.TableTagParameters
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
...
...
@@ -51,6 +52,14 @@ public class AlarmInfoSearchController extends BaseSearchController {
}
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
());
searchCriteria
.
setPageList
(
pageList
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/CodeShelfController.java
查看文件 @
69e2c14
...
...
@@ -234,6 +234,9 @@ public class CodeShelfController extends BaseController {
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
());
opPos
.
setCanCheckOutTime
(
System
.
currentTimeMillis
()
+
delayCloseTime
);
taskService
.
addTaskToFinished
(
opPos
,
barcode
,
null
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/StoragePosFindController.java
查看文件 @
69e2c14
...
...
@@ -134,6 +134,8 @@ public class StoragePosFindController extends BaseSearchController {
addLikeParam
(
baseCriteria
,
request
,
"otherField4"
);
addLikeParam
(
baseCriteria
,
request
,
"otherField5"
);
addLikeParam
(
baseCriteria
,
request
,
"provider"
);
String
barcode
=
searchCriteria
.
getBarcode
();
if
(!
Strings
.
isNullOrEmpty
(
barcode
)){
Pattern
pattern
=
Pattern
.
compile
(
barcode
,
Pattern
.
CASE_INSENSITIVE
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/ITaskService.java
查看文件 @
69e2c14
...
...
@@ -66,6 +66,8 @@ public interface ITaskService {
*/
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
;
//void checkOutInaction(String areaId, int day) throws ValidateException;
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/MesApiController.java
查看文件 @
69e2c14
...
...
@@ -174,7 +174,7 @@ public class MesApiController extends BaseController {
}
for
(
StoragePos
pos
:
poses
)
{
log
.
info
(
"出库位置仓位【"
+
pos
.
getPosName
()+
"】"
);
taskService
.
checkout
(
pos
,
null
,
false
);
taskService
.
checkout
(
pos
,
false
,
null
,
false
);
}
}
catch
(
Exception
e
){
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/PanaApiController.java
查看文件 @
69e2c14
//package com.myproject.webapp.controller.webService;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.google.common.base.Strings;
//import com.google.common.collect.Lists;
//import com.google.common.collect.Maps;
//import com.myproject.bean.json.PanaMaterial;
//import com.myproject.bean.update.*;
//import com.myproject.dao.mongo.IDataLogDao;
//import com.myproject.dao.mongo.ISpecifiedBatchDao;
//import com.myproject.manager.IStoragePosManager;
//import com.myproject.util.HttpHelper;
//import com.myproject.util.StorageConstants;
//import com.myproject.webapp.controller.storage.BaseController;
//import org.apache.commons.lang.StringUtils;
//import org.apache.logging.log4j.LogManager;
//import org.apache.logging.log4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import javax.servlet.http.HttpServletRequest;
//import java.text.SimpleDateFormat;
//import java.util.*;
//import java.util.concurrent.atomic.AtomicLong;
//
//
//@Controller
//@RequestMapping("/rest/api")
//public class PanaApiController extends BaseController {
//
// @Autowired
// protected ITaskService taskService;
// @Autowired
// protected IStoragePosManager storagePosManager;
//
// @Autowired
// protected ISpecifiedBatchDao specifiedBatchDao;
//
// protected static DataCache dataCache;
//
// @Autowired
// public void setDataCache(DataCache dataCache) {
// PanaApiController.dataCache = dataCache;
// }
//
// @Autowired
// protected IDataLogDao dataLogDao;
//
// protected final static Logger log = LogManager.getLogger(PanaApiController.class);
//
// private static String PanaCIMIP = "";
//
// private static String PanaCIMPort = "";
//
// private static String TowerID = "InoAutoB";
// private static AtomicLong seq = new AtomicLong(0);
//
// @RequestMapping(value = "/setConfiguration")
// @ResponseBody
// public String setConfiguration(@RequestBody Map<String,String> map) {
// String ip = map.get("PanaCIMIP");
// String port = map.get("PanaCIMPort");
//
// log.info("收到 PanaCIM 的注册信息【"+ip+":"+port+"】");
// if(Strings.isNullOrEmpty(ip)){
// return "ERROR:IP is empty.";
// }
//
// if(Strings.isNullOrEmpty(port)){
// return "ERROR: port is empty";
// }
// PanaCIMIP = ip;
// PanaCIMPort = port;
//
// return "OK";
// }
//
//
// private static String getInNotifyApi(){
// if(!Strings.isNullOrEmpty(PanaCIMIP)){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/checkInNotification";
// }
// return "";
// }
//
// private static String getOutNotifyApi(){
//
// if(!Strings.isNullOrEmpty(PanaCIMIP)){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/deliverNotification";
// }
// return "";
// }
//
// private static String getRequestReelUrl(){
// if(!Strings.isNullOrEmpty(PanaCIMIP)){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + "/api/Storage/requestReel";
// }
// return "";
// }
//
//
// @RequestMapping(value = "/keepAlive")
// @ResponseBody
// public String keepAlive(HttpServletRequest request) {
// return "OK";
// }
//
// //private static String getApiUrl(String apiPath){
// // return "http://"+PanaCIMIP + ":" + PanaCIMPort + apiPath;
// //}
//
// private static String nextSeq(){
// return "SMDBOX_"+TowerID+"_"+seq.incrementAndGet();
// }
//
//
// public static boolean requestReel(String requestReelUrl, String reelBarcode) {
// if(Strings.isNullOrEmpty(requestReelUrl)){
// requestReelUrl = getRequestReelUrl();
// log.info("没有配置条码检测接口,查找setConfiguration注册的IP 及端口");
// }
// try {
// if(!Strings.isNullOrEmpty(requestReelUrl)){
// log.info("向 PanaCIM["+requestReelUrl+"]请求料盘【"+reelBarcode+"】的信息");
// //String url = getApiUrl("/api/Storage/requestReel");
// Map<String, Object> params = new HashMap<String, Object>();
// params.put("TransactionID", nextSeq());
// params.put("ErrorCode","0");
// params.put("Reelbarcode",reelBarcode);
// String result = HttpHelper.postJson(requestReelUrl,params);
// log.info("PanaCIM 返回料盘【"+reelBarcode+"】的信息:"+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;
// }
// }
package
com
.
myproject
.
webapp
.
controller
.
webService
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.myproject.bean.json.PanaMaterial
;
import
com.myproject.bean.update.*
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.util.HttpHelper
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.webapp.controller.storage.BaseController
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.servlet.http.HttpServletRequest
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicLong
;
@Controller
@RequestMapping
(
"/rest/api"
)
public
class
PanaApiController
extends
BaseController
{
@Autowired
protected
ITaskService
taskService
;
@Autowired
protected
IStoragePosManager
storagePosManager
;
protected
static
DataCache
dataCache
;
@Autowired
public
void
setDataCache
(
DataCache
dataCache
)
{
PanaApiController
.
dataCache
=
dataCache
;
}
@Autowired
protected
IDataLogDao
dataLogDao
;
protected
final
static
Logger
log
=
LogManager
.
getLogger
(
PanaApiController
.
class
);
private
static
String
PanaCIMIP
=
""
;
private
static
String
PanaCIMPort
=
""
;
private
static
String
TowerID
=
"InoAutoB"
;
private
static
AtomicLong
seq
=
new
AtomicLong
(
0
);
@RequestMapping
(
value
=
"/setConfiguration"
)
@ResponseBody
public
String
setConfiguration
(
@RequestBody
Map
<
String
,
String
>
map
)
{
String
ip
=
map
.
get
(
"PanaCIMIP"
);
String
port
=
map
.
get
(
"PanaCIMPort"
);
log
.
info
(
"收到 PanaCIM 的注册信息【"
+
ip
+
":"
+
port
+
"】"
);
if
(
Strings
.
isNullOrEmpty
(
ip
)){
return
"ERROR:IP is empty."
;
}
if
(
Strings
.
isNullOrEmpty
(
port
)){
return
"ERROR: port is empty"
;
}
PanaCIMIP
=
ip
;
PanaCIMPort
=
port
;
return
"OK"
;
}
private
static
String
getInNotifyApi
(){
if
(!
Strings
.
isNullOrEmpty
(
PanaCIMIP
)){
return
"http://"
+
PanaCIMIP
+
":"
+
PanaCIMPort
+
"/api/Storage/checkInNotification"
;
}
return
""
;
}
private
static
String
getOutNotifyApi
(){
if
(!
Strings
.
isNullOrEmpty
(
PanaCIMIP
)){
return
"http://"
+
PanaCIMIP
+
":"
+
PanaCIMPort
+
"/api/Storage/deliverNotification"
;
}
return
""
;
}
private
static
String
getRequestReelUrl
(){
if
(!
Strings
.
isNullOrEmpty
(
PanaCIMIP
)){
return
"http://"
+
PanaCIMIP
+
":"
+
PanaCIMPort
+
"/api/Storage/requestReel"
;
}
return
""
;
}
@RequestMapping
(
value
=
"/keepAlive"
)
@ResponseBody
public
String
keepAlive
(
HttpServletRequest
request
)
{
return
"OK"
;
}
//private static String getApiUrl(String apiPath){
// return "http://"+PanaCIMIP + ":" + PanaCIMPort + apiPath;
//}
private
static
String
nextSeq
(){
return
"SMDBOX_"
+
TowerID
+
"_"
+
seq
.
incrementAndGet
();
}
public
static
boolean
requestReel
(
String
reelBarcode
)
{
String
requestReelUrl
=
getRequestReelUrl
();
if
(
Strings
.
isNullOrEmpty
(
requestReelUrl
)){
requestReelUrl
=
getRequestReelUrl
();
log
.
info
(
"没有配置条码检测接口,查找setConfiguration注册的IP 及端口"
);
}
try
{
if
(!
Strings
.
isNullOrEmpty
(
requestReelUrl
)){
log
.
info
(
"向 PanaCIM["
+
requestReelUrl
+
"]请求料盘【"
+
reelBarcode
+
"】的信息"
);
//String url = getApiUrl("/api/Storage/requestReel");
Map
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
params
.
put
(
"TransactionID"
,
nextSeq
());
params
.
put
(
"ErrorCode"
,
"0"
);
params
.
put
(
"Reelbarcode"
,
reelBarcode
);
String
result
=
HttpHelper
.
postJson
(
requestReelUrl
,
params
);
log
.
info
(
"PanaCIM 返回料盘【"
+
reelBarcode
+
"】的信息:"
+
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
(
"没有条码检测接口,无需验证"
);
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{
//
log.info("没有条码检测接口,无需验证
");
// re
turn true
;
//
result.put("ErrorCode", "402
");
// re
sult.put("ErrorMessage", "操作失败ID为["+JobID+"]的指定批次不存在")
;
// }
//
// } catch (Exception e) {
// log.error("向 PanaCIM请求料盘【"+reelBarcode+"】的信息出错",e);
// }
// return false;
// }
//
// 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;
// }
//
//
//}
}
catch
(
Exception
e
)
{
log
.
error
(
"PanaCIM的指令 deliverJob 出错"
,
e
);
result
.
put
(
"ErrorCode"
,
"400"
);
result
.
put
(
"ErrorMessage"
,
e
.
getMessage
());
}
return
result
;
}
}
myproject/src/main/java/com/myproject/webapp/controller/webService/QrcodeController.java
查看文件 @
69e2c14
...
...
@@ -16,6 +16,9 @@ import com.myproject.bean.update.Component;
import
com.myproject.bean.update.Settings
;
import
com.myproject.manager.IBarcodeManager
;
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.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -27,10 +30,8 @@ import javax.servlet.http.HttpServletResponse;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Map
;
/**
* 生成二维码并输出到html
...
...
@@ -41,6 +42,7 @@ import java.util.Map;
@Controller
public
class
QrcodeController
{
protected
final
transient
Logger
log
=
LogManager
.
getLogger
(
getClass
());
/*maven 依赖
<dependency>
...
...
@@ -191,7 +193,7 @@ public class QrcodeController {
BaseFont
baseFont
=
BaseFont
.
createFont
(
"C:/WINDOWS/Fonts/simsun.ttc,1"
,
BaseFont
.
IDENTITY_H
,
BaseFont
.
NOT_EMBEDDED
);
boldFont
=
new
Font
(
baseFont
,
fontSize
);
}
catch
(
Exception
e
){
e
.
printStackTrace
(
);
log
.
error
(
"未找到字体simsun.ttc"
);
}
PdfPTable
table
=
new
PdfPTable
(
2
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
69e2c14
...
...
@@ -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
){
throw
new
ValidateException
(
"error.barcode.invalid"
,
new
String
[]{
""
},
"条码无效"
);
...
...
@@ -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){
// throw new ValidateException("无法入库,请先设置料盘尺寸");
// }
...
...
@@ -1138,7 +1148,7 @@ public class TaskService implements ITaskService {
if
(!
Strings
.
isNullOrEmpty
(
posName
)){
//客户端发一次完成之后,会发空的 posName,不需要处理
if
(
StorageConstants
.
BOX_STATUS
.
IN_FINISHED
==
status
)
{
//入仓完成
DataLog
task
=
findExecutingTask
(
statusBean
.
getCid
(),
boxStatus
.
getPosId
());
if
(
task
!=
null
)
{
if
(
task
!=
null
&&
task
.
isPutInTask
()
)
{
log
.
info
(
task
.
getBarcode
()
+
"入仓位["
+
task
.
getPosName
()
+
"]完成"
);
DataLog
cancelTask
=
findFinishedTask
(
statusBean
.
getCid
(),
boxStatus
.
getPosId
());
if
(
cancelTask
!=
null
&&
cancelTask
.
isCancel
()){
...
...
@@ -1150,7 +1160,7 @@ public class TaskService implements ITaskService {
}
else
{
//从已完成列表中找,如果还找不到就忽略
task
=
findFinishedTask
(
statusBean
.
getCid
(),
boxStatus
.
getPosId
());
if
(
task
!=
null
)
{
if
(
task
!=
null
&&
task
.
isPutInTask
()
)
{
if
(
task
.
isCancel
()){
//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
log
.
info
(
task
.
getBarcode
()
+
"入仓位["
+
task
.
getPosName
()
+
"]完成,但任务已被取消,修改为完成"
);
putInFinished
(
task
);
...
...
@@ -1624,6 +1634,15 @@ public class TaskService implements ITaskService {
task
.
setMemo
(
barcode
.
getMemo
());
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());
}
else
{
...
...
@@ -1762,7 +1781,11 @@ public class TaskService implements ITaskService {
Storage
storage
=
dataCache
.
getStorage
(
task
.
getCid
());
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 {
//通知消息
Storage
storage
=
dataCache
.
getStorage
(
task
.
getCid
());
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
());
}
}
...
...
myproject/src/main/webapp/WEB-INF/pages/barcode/barcodeUpdate.jsp
查看文件 @
69e2c14
...
...
@@ -86,10 +86,27 @@
</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 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>
...
...
@@ -284,5 +301,13 @@
$("#otherField3").autocomplete(fetchBarcode("otherField3"));
$("#otherField4").autocomplete(fetchBarcode("otherField4"));
$("#otherField5").autocomplete(fetchBarcode("otherField5"));
$('.date-picker').datepicker({
rtl: Metronic.isRTL(),
orientation: "left",
autoclose: true,
language:'en'
});
</script>
</c:set>
myproject/src/main/webapp/WEB-INF/pages/component/componentSearch.jsp
查看文件 @
69e2c14
...
...
@@ -93,7 +93,7 @@
<display:column titleKey="component.plate.size">
${component.plateSize} x ${component.height}
</display:column>
<
display:column property="validDay" titleKey="component.validDay"/
>
<
%--<display:column property="validDay" titleKey="component.validDay"/>--%
>
<%--<display:column property="type" titleKey="类型"/>--%>
<display:column property="amount" titleKey="component.amount"/>
...
...
myproject/src/main/webapp/WEB-INF/pages/component/componentUpdate.jsp
查看文件 @
69e2c14
...
...
@@ -379,14 +379,14 @@
<div class="form-group">
<%--有效期--%>
<
label class="control-label col-md-2"><fmt:message key="component.validDay"/> </label
>
<
div class="col-md-3"
>
<
div style="text-align:left" class="input-group"
>
<
form:input type="text" path="validDay"
class="form-control"/
>
<
/div
>
<
/div
>
<
%--<label class="control-label col-md-2"><fmt:message key="component.validDay"/> </label>--%
>
<
%--<div class="col-md-3">--%
>
<
%--<div style="text-align:left" class="input-group">--%
>
<
%--<form:input type="text" path="validDay"--%>
<%--class="form-control"/>--%
>
<
%--</div>--%
>
<
%--</div>--%
>
<label class="control-label col-md-2"><fmt:message key="component.plate.size"/> </label>
...
...
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
查看文件 @
69e2c14
...
...
@@ -57,10 +57,10 @@
</form:select>
</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 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>
...
...
@@ -112,10 +112,19 @@
</div>
</div>
<label class="control-label col-md-1"><fmt:message key="barcode.batch"/></label>
<div class="col-md-2">
<%--<label class="control-label col-md-1"><fmt:message key="barcode.batch"/></label>--%>
<%--<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">
<input id="batch" name="batch" class="form-control" value="${batch
}"/>
<input id="memo" name="memo" class="form-control" value="${memo
}"/>
</div>
</div>
...
...
@@ -211,9 +220,9 @@
<display:column titleKey="barcode.produceDate" sortProperty="barcode.produceDate" sortable="true">
<fmt:formatDate value="${pos.barcode.produceDate}" pattern="yyyy-MM-dd"/>
</display:column>
<
display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true" class="${expireClass}"
>
<
fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/
>
<
/display:column
>
<
%--<display:column titleKey="barcode.expireDate" sortProperty="barcode.expireDate" sortable="true" class="${expireClass}">--%
>
<
%--<fmt:formatDate value="${pos.barcode.expireDate}" pattern="yyyy-MM-dd"/>--%
>
<
%--</display:column>--%
>
<display:column property="barcode.memo" titleKey="barcode.memo"/>
<display:column titleKey="checkOut.operate" media="html">
<c:if test="${!limitCheckOut}">
...
...
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
69e2c14
...
...
@@ -241,7 +241,7 @@
<div
class=
"page-footer-inner"
>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
</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"
>
<i
class=
"icon-arrow-up"
></i>
</div>
...
...
myproject/src/main/webapp/resources/admin/linePositions.csv
查看文件 @
69e2c14
位置,优先级,高度,宽度,料仓ID,前后轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位取料点P4,,,,,
AC1#L1_1_1,1,75,40,1,398000,55000,110000,110000,55000,170000,,,,,1000
AC1#L1_1_2,2,75,40,1,398800,361000,410000,410000,361000,170000,,,,,
AC1#L1_1_3,3,75,40,1,399600,661000,710000,710000,661000,170000,,,,,
AC1#L1_1_4,4,75,40,1,400400,961000,1010000,1010000,961000,170000,,,,,
AC1#L1_1_5,5,75,40,1,401700,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L1_1_6,6,75,40,1,402500,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L1_1_7,7,75,40,1,403300,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L2_1_1,8,75,40,1,680318,55000,110000,110000,55000,170000,,,,,
AC1#L2_1_2,9,75,40,1,681118,361000,410000,410000,361000,170000,,,,,
AC1#L2_1_3,10,75,40,1,681918,661000,710000,710000,661000,170000,,,,,
AC1#L2_1_4,11,75,40,1,682718,961000,1010000,1010000,961000,170000,,,,,
AC1#L2_1_5,12,75,40,1,683518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L2_1_6,13,75,40,1,684318,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L2_1_7,14,75,40,1,685118,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L3_1_1,15,75,40,1,961818,55000,110000,110000,55000,170000,,,,,
AC1#L3_1_2,16,75,40,1,962618,361000,410000,410000,361000,170000,,,,,
AC1#L3_1_3,17,75,40,1,963418,661000,710000,710000,661000,170000,,,,,
AC1#L3_1_4,18,75,40,1,964218,961000,1010000,1010000,961000,170000,,,,,
AC1#L3_1_5,19,75,40,1,965018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L3_1_6,20,75,40,1,965818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L3_1_7,21,75,40,1,966618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L4_1_1,22,75,40,1,1242818,55000,110000,110000,55000,170000,,,,,
AC1#L4_1_2,23,75,40,1,1243618,361000,410000,410000,361000,170000,,,,,
AC1#L4_1_3,24,75,40,1,1244418,661000,710000,710000,661000,170000,,,,,
AC1#L4_1_4,25,75,40,1,1245218,961000,1010000,1010000,961000,170000,,,,,
AC1#L4_1_5,26,75,40,1,1246018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L4_1_6,27,75,40,1,1246818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L4_1_7,28,75,40,1,1247618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L5_1_1,29,75,40,1,1522818,55000,110000,110000,55000,170000,,,,,
AC1#L5_1_2,30,75,40,1,1523618,361000,410000,410000,361000,170000,,,,,
AC1#L5_1_3,31,75,40,1,1524418,661000,710000,710000,661000,170000,,,,,
AC1#L5_1_4,32,75,40,1,1525218,961000,1010000,1010000,961000,170000,,,,,
AC1#L5_1_5,33,75,40,1,1526018,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L5_1_6,34,75,40,1,1526818,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L5_1_7,35,75,40,1,1527618,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L6_1_1,36,75,40,1,1803318,55000,110000,110000,55000,170000,,,,,
AC1#L6_1_2,37,75,40,1,1804118,361000,410000,410000,361000,170000,,,,,
AC1#L6_1_3,38,75,40,1,1804918,661000,710000,710000,661000,170000,,,,,
AC1#L6_1_4,39,75,40,1,1805718,961000,1010000,1010000,961000,170000,,,,,
AC1#L6_1_5,40,75,40,1,1806518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L6_1_6,41,75,40,1,1807318,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L6_1_7,42,75,40,1,1808118,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L7_1_1,43,75,40,1,2084918,55000,110000,110000,55000,170000,,,,,
AC1#L7_1_2,44,75,40,1,2085718,361000,410000,410000,361000,170000,,,,,
AC1#L7_1_3,45,75,40,1,2086518,661000,710000,710000,661000,170000,,,,,
AC1#L7_1_4,46,75,40,1,2087318,961000,1010000,1010000,961000,170000,,,,,
AC1#L7_1_5,47,75,40,1,2088118,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L7_1_6,48,75,40,1,2088918,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L7_1_7,49,75,40,1,2089718,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L8_1_1,50,75,40,1,2366918,55000,110000,110000,55000,170000,,,,,
AC1#L8_1_2,51,75,40,1,2367718,361000,410000,410000,361000,170000,,,,,
AC1#L8_1_3,52,75,40,1,2368518,661000,710000,710000,661000,170000,,,,,
AC1#L8_1_4,53,75,40,1,2369318,961000,1010000,1010000,961000,170000,,,,,
AC1#L8_1_5,54,75,40,1,2370118,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L8_1_6,55,75,40,1,2370918,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L8_1_7,56,75,40,1,2371718,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L9_1_1,57,75,40,1,2647418,55000,110000,110000,55000,170000,,,,,
AC1#L9_1_2,58,75,40,1,2648218,361000,410000,410000,361000,170000,,,,,
AC1#L9_1_3,59,75,40,1,2649018,661000,710000,710000,661000,170000,,,,,
AC1#L9_1_4,60,75,40,1,2649818,961000,1010000,1010000,961000,170000,,,,1500,
AC1#L9_1_5,61,75,40,1,2650618,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L9_1_6,62,75,40,1,2651418,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L9_1_7,63,75,40,1,2652218,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L10_1_1,64,75,40,1,2929618,55000,110000,110000,55000,170000,,,,,
AC1#L10_1_2,65,75,40,1,2930418,361000,410000,410000,361000,170000,,,,,
AC1#L10_1_3,66,75,40,1,2931218,661000,710000,710000,661000,170000,,,,,
AC1#L10_1_4,67,75,40,1,2932018,961000,1010000,1010000,961000,170000,,,,,
AC1#L10_1_5,68,75,40,1,2932818,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L10_1_6,69,75,40,1,2933618,1561000,1610000,1610000,1561000,170000,,,,,
AC1#L10_1_7,70,75,40,1,2934418,1861000,1910000,1910000,1861000,170000,,,,,
AC1#L11_1_1,71,75,40,1,3210018,55000,110000,110000,55000,170000,,,,,
AC1#L11_1_2,72,75,40,1,3211018,361000,410000,410000,361000,170000,,,,,
AC1#L11_1_3,73,75,40,1,3212018,661000,710000,710000,661000,170000,,,,,
AC1#L11_1_4,74,75,40,1,3213018,961000,1010000,1010000,961000,170000,,,,,
AC1#L11_1_5,75,75,40,1,3215518,1261000,1310000,1310000,1261000,170000,,,,,
AC1#L11_1_6,76,75,40,1,3216518,1561000,1610000,1610000,1561000,170000,,,500,,
AC1#L11_1_7,77,75,40,1,3217518,1861000,1910000,1910000,1861000,170000,,,,,
AC1#R1_1_1,78,75,40,1,399500,55000,110000,110000,55000,-170000,,,,,
AC1#R1_1_2,79,75,40,1,400300,361000,410000,410000,361000,-170000,,,,,
AC1#R1_1_3,80,75,40,1,401100,661000,710000,710000,661000,-170000,,,,,
AC1#R1_1_4,81,75,40,1,401900,961000,1010000,1010000,961000,-170000,,,,,
AC1#R1_1_5,82,75,40,1,402700,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R1_1_6,83,75,40,1,403500,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R1_1_7,84,75,40,1,404300,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R2_1_1,85,75,40,1,680318,55000,110000,110000,55000,-170000,,,,,
AC1#R2_1_2,86,75,40,1,681118,361000,410000,410000,361000,-170000,,,,,
AC1#R2_1_3,87,75,40,1,681918,661000,710000,710000,661000,-170000,,,,,
AC1#R2_1_4,88,75,40,1,682718,961000,1010000,1010000,961000,-170000,,,,,
AC1#R2_1_5,89,75,40,1,683518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R2_1_6,90,75,40,1,684318,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R2_1_7,91,75,40,1,685118,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R3_1_1,92,75,40,1,961818,55000,110000,110000,55000,-170000,,,,,
AC1#R3_1_2,93,75,40,1,962618,361000,410000,410000,361000,-170000,,,,,
AC1#R3_1_3,94,75,40,1,963418,661000,710000,710000,661000,-170000,,,,,
AC1#R3_1_4,95,75,40,1,964218,961000,1010000,1010000,961000,-170000,,,,,
AC1#R3_1_5,96,75,40,1,965018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R3_1_6,97,75,40,1,965818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R3_1_7,98,75,40,1,966618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R4_1_1,99,75,40,1,1242818,55000,110000,110000,55000,-170000,,,,,
AC1#R4_1_2,100,75,40,1,1243618,361000,410000,410000,361000,-170000,,,,,
AC1#R4_1_3,101,75,40,1,1244418,661000,710000,710000,661000,-170000,,,,,
AC1#R4_1_4,102,75,40,1,1245218,961000,1010000,1010000,961000,-170000,,0,,,
AC1#R4_1_5,103,75,40,1,1246018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R4_1_6,104,75,40,1,1246818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R4_1_7,105,75,40,1,1247618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R5_1_1,106,75,40,1,1522818,55000,110000,110000,55000,-170000,,,,,
AC1#R5_1_2,107,75,40,1,1523618,361000,410000,410000,361000,-170000,,,,,
AC1#R5_1_3,108,75,40,1,1524418,661000,710000,710000,661000,-170000,,,,,
AC1#R5_1_4,109,75,40,1,1525218,961000,1010000,1010000,961000,-170000,,,,,
AC1#R5_1_5,110,75,40,1,1526018,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R5_1_6,111,75,40,1,1526818,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R5_1_7,112,75,40,1,1527618,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R6_1_1,113,75,40,1,1803318,55000,110000,110000,55000,-170000,,,,,
AC1#R6_1_2,114,75,40,1,1804118,361000,410000,410000,361000,-170000,,,,,
AC1#R6_1_3,115,75,40,1,1804918,661000,710000,710000,661000,-170000,,,,,
AC1#R6_1_4,116,75,40,1,1805718,961000,1010000,1010000,961000,-170000,,,,,
AC1#R6_1_5,117,75,40,1,1806518,1261000,1310000,1310000,1261000,-170000,,,,,
AC1#R6_1_6,118,75,40,1,1807318,1561000,1610000,1610000,1561000,-170000,,,,,
AC1#R6_1_7,119,75,40,1,1808118,1861000,1910000,1910000,1861000,-170000,,,,,
AC1#R7_1_1,120,75,40,1,2084918,55000,110000,110000,55000,-170000,,,,,
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,,,,,
位置,优先级,高度,宽度,料仓ID,设备IP,区域ID,灯索引
1_1_1,10,12,15,1,192.168.201.191,1,0
1_1_2,10,12,15,1,192.168.201.191,1,1
1_1_3,10,12,15,1,192.168.201.191,1,2
1_1_4,10,12,15,1,192.168.201.191,1,3
1_1_5,10,12,15,1,192.168.201.191,1,4
1_1_6,10,12,15,1,192.168.201.191,1,5
1_1_7,10,12,15,1,192.168.201.191,1,6
1_1_8,10,12,15,1,192.168.201.191,1,7
1_1_9,10,12,15,1,192.168.201.191,1,8
1_1_10,10,12,15,1,192.168.201.191,1,9
1_1_11,10,12,15,1,192.168.201.191,1,10
1_1_12,10,12,15,1,192.168.201.191,1,11
1_1_13,10,12,15,1,192.168.201.191,1,12
1_1_14,10,12,15,1,192.168.201.191,1,13
1_1_15,10,12,15,1,192.168.201.191,1,14
1_1_16,10,12,15,1,192.168.201.191,1,15
1_1_17,10,12,15,1,192.168.201.191,1,16
1_1_18,10,12,15,1,192.168.201.191,1,17
1_1_19,10,12,15,1,192.168.201.191,1,18
1_1_20,10,12,15,1,192.168.201.191,1,19
1_1_21,10,12,15,1,192.168.201.191,1,20
1_1_22,10,12,15,1,192.168.201.191,1,21
1_1_23,10,12,15,1,192.168.201.191,1,22
1_1_24,10,12,15,1,192.168.201.191,1,23
1_1_25,10,12,15,1,192.168.201.191,1,24
1_1_26,10,12,15,1,192.168.201.191,1,25
1_1_27,10,12,15,1,192.168.201.191,1,26
1_1_28,10,12,15,1,192.168.201.191,1,27
1_1_29,10,12,15,1,192.168.201.191,1,28
1_1_30,10,12,15,1,192.168.201.191,1,29
1_1_31,10,12,15,1,192.168.201.191,1,30
1_1_32,10,12,15,1,192.168.201.191,1,31
1_1_33,10,12,15,1,192.168.201.191,1,32
1_1_34,10,12,15,1,192.168.201.191,1,33
1_1_35,10,12,15,1,192.168.201.191,1,34
1_1_36,10,12,15,1,192.168.201.191,1,35
1_1_37,10,12,15,1,192.168.201.191,1,36
1_1_38,10,12,15,1,192.168.201.191,1,37
1_1_39,10,12,15,1,192.168.201.191,1,38
1_1_40,10,12,15,1,192.168.201.191,1,39
2_1_1,10,12,13,1,192.168.201.191,1,79
2_1_2,10,12,13,1,192.168.201.191,1,78
2_1_3,10,12,13,1,192.168.201.191,1,77
2_1_4,10,12,13,1,192.168.201.191,1,76
2_1_5,10,12,13,1,192.168.201.191,1,75
2_1_6,10,12,13,1,192.168.201.191,1,74
2_1_7,10,12,13,1,192.168.201.191,1,73
2_1_8,10,12,13,1,192.168.201.191,1,72
2_1_9,10,12,13,1,192.168.201.191,1,71
2_1_10,10,12,13,1,192.168.201.191,1,70
2_1_11,10,12,13,1,192.168.201.191,1,69
2_1_12,10,12,13,1,192.168.201.191,1,68
2_1_13,10,12,13,1,192.168.201.191,1,67
2_1_14,10,12,13,1,192.168.201.191,1,66
2_1_15,10,12,13,1,192.168.201.191,1,65
2_1_16,10,12,13,1,192.168.201.191,1,64
2_1_17,10,12,13,1,192.168.201.191,1,63
2_1_18,10,12,13,1,192.168.201.191,1,62
2_1_19,10,12,13,1,192.168.201.191,1,61
2_1_20,10,12,13,1,192.168.201.191,1,60
2_1_21,10,12,13,1,192.168.201.191,1,59
2_1_22,10,12,13,1,192.168.201.191,1,58
2_1_23,10,12,13,1,192.168.201.191,1,57
2_1_24,10,12,13,1,192.168.201.191,1,56
2_1_25,10,12,13,1,192.168.201.191,1,55
2_1_26,10,12,13,1,192.168.201.191,1,54
2_1_27,10,12,13,1,192.168.201.191,1,53
2_1_28,10,12,13,1,192.168.201.191,1,52
2_1_29,10,12,13,1,192.168.201.191,1,51
2_1_30,10,12,13,1,192.168.201.191,1,50
2_1_31,10,12,13,1,192.168.201.191,1,49
2_1_32,10,12,13,1,192.168.201.191,1,48
2_1_33,10,12,13,1,192.168.201.191,1,47
2_1_34,10,12,13,1,192.168.201.191,1,46
2_1_35,10,12,13,1,192.168.201.191,1,45
2_1_36,10,12,13,1,192.168.201.191,1,44
2_1_37,10,12,13,1,192.168.201.191,1,43
2_1_38,10,12,13,1,192.168.201.191,1,42
2_1_39,10,12,13,1,192.168.201.191,1,41
2_1_40,10,12,13,1,192.168.201.191,1,40
3_1_1,10,12,7,1,192.168.201.191,1,80
3_1_2,10,12,7,1,192.168.201.191,1,81
3_1_3,10,12,7,1,192.168.201.191,1,82
3_1_4,10,12,7,1,192.168.201.191,1,83
3_1_5,10,12,7,1,192.168.201.191,1,84
3_1_6,10,12,7,1,192.168.201.191,1,85
3_1_7,10,12,7,1,192.168.201.191,1,86
3_1_8,10,12,7,1,192.168.201.191,1,87
3_1_9,10,12,7,1,192.168.201.191,1,88
3_1_10,10,12,7,1,192.168.201.191,1,89
3_1_11,10,12,7,1,192.168.201.191,1,90
3_1_12,10,12,7,1,192.168.201.191,1,91
3_1_13,10,12,7,1,192.168.201.191,1,92
3_1_14,10,12,7,1,192.168.201.191,1,93
3_1_15,10,12,7,1,192.168.201.191,1,94
3_1_16,10,12,7,1,192.168.201.191,1,95
3_1_17,10,12,7,1,192.168.201.191,1,96
3_1_18,10,12,7,1,192.168.201.191,1,97
3_1_19,10,12,7,1,192.168.201.191,1,98
3_1_20,10,12,7,1,192.168.201.191,1,99
3_1_21,10,12,7,1,192.168.201.191,1,100
3_1_22,10,12,7,1,192.168.201.191,1,101
3_1_23,10,12,7,1,192.168.201.191,1,102
3_1_24,10,12,7,1,192.168.201.191,1,103
3_1_25,10,12,7,1,192.168.201.191,1,104
3_1_26,10,12,7,1,192.168.201.191,1,105
3_1_27,10,12,7,1,192.168.201.191,1,106
3_1_28,10,12,7,1,192.168.201.191,1,107
3_1_29,10,12,7,1,192.168.201.191,1,108
3_1_30,10,12,7,1,192.168.201.191,1,109
3_1_31,10,12,7,1,192.168.201.191,1,110
3_1_32,10,12,7,1,192.168.201.191,1,111
3_1_33,10,12,7,1,192.168.201.191,1,112
3_1_34,10,12,7,1,192.168.201.191,1,113
3_1_35,10,12,7,1,192.168.201.191,1,114
3_1_36,10,12,7,1,192.168.201.191,1,115
3_1_37,10,12,7,1,192.168.201.191,1,116
3_1_38,10,12,7,1,192.168.201.191,1,117
3_1_39,10,12,7,1,192.168.201.191,1,118
3_1_40,10,12,7,1,192.168.201.191,1,119
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论