Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
SmdBox
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 6f69995c
由
sunke
编写于
2020-09-24 10:47:32 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
方仓
1 个父辈
815c4faf
显示空白字符变更
内嵌
并排
正在显示
18 个修改的文件
包含
1724 行增加
和
32 行删除
myproject/src/main/java/com/myproject/bean/update/Settings.java
myproject/src/main/java/com/myproject/bean/update/Storage.java
myproject/src/main/java/com/myproject/util/StorageConstants.java
myproject/src/main/java/com/myproject/webapp/controller/storage/SmdXLController.java
myproject/src/main/java/com/myproject/webapp/controller/storage/VerticalBoxController.java
myproject/src/main/java/com/myproject/webapp/controller/system/SettingsController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/StorageDataController.java
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
myproject/src/main/java/com/myproject/webapp/controller/webService/boxHandler/SmdXlBoxHandler.java
myproject/src/main/resources/StorageResources.properties
myproject/src/main/resources/StorageResources_en.properties
myproject/src/main/resources/StorageResources_jp.properties
myproject/src/main/resources/StorageResources_zh_CN.properties
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
myproject/src/main/webapp/WEB-INF/pages/storage/allBoxView.jsp
myproject/src/main/webapp/WEB-INF/pages/storage/smdXl.jsp
myproject/src/main/webapp/decorators/metro.jsp
myproject/src/main/webapp/resources/admin/linePositions.csv
myproject/src/main/java/com/myproject/bean/update/Settings.java
查看文件 @
6f69995
...
@@ -9,6 +9,11 @@ import java.util.List;
...
@@ -9,6 +9,11 @@ import java.util.List;
public
class
Settings
extends
BaseMongoBean
{
public
class
Settings
extends
BaseMongoBean
{
/**
/**
* 脱机调试
*/
private
boolean
debugTest
=
false
;
/**
* 指定软件是为哪个客户单独定制的
* 指定软件是为哪个客户单独定制的
*/
*/
private
String
productCustom
=
""
;
private
String
productCustom
=
""
;
...
@@ -387,5 +392,13 @@ public class Settings extends BaseMongoBean {
...
@@ -387,5 +392,13 @@ public class Settings extends BaseMongoBean {
public
void
setInactionDay
(
int
inactionDay
)
{
public
void
setInactionDay
(
int
inactionDay
)
{
this
.
inactionDay
=
inactionDay
;
this
.
inactionDay
=
inactionDay
;
}
}
public
boolean
isDebugTest
()
{
return
debugTest
;
}
public
void
setDebugTest
(
boolean
debugTest
)
{
this
.
debugTest
=
debugTest
;
}
}
}
myproject/src/main/java/com/myproject/bean/update/Storage.java
查看文件 @
6f69995
...
@@ -210,6 +210,13 @@ public class Storage extends BaseMongoBean {
...
@@ -210,6 +210,13 @@ public class Storage extends BaseMongoBean {
return
StorageConstants
.
TYPE
.
CABINET
.
name
().
equals
(
type
);
return
StorageConstants
.
TYPE
.
CABINET
.
name
().
equals
(
type
);
}
}
/**
* 是否是方仓
*/
public
boolean
isSmdXl
()
{
return
StorageConstants
.
TYPE
.
SMD_XL
.
name
().
equals
(
type
);
}
public
boolean
canPutInPos
(
int
w
,
int
h
,
int
PosW
,
int
posH
){
public
boolean
canPutInPos
(
int
w
,
int
h
,
int
PosW
,
int
posH
){
...
...
myproject/src/main/java/com/myproject/util/StorageConstants.java
查看文件 @
6f69995
...
@@ -291,7 +291,13 @@ public class StorageConstants {
...
@@ -291,7 +291,13 @@ public class StorageConstants {
/**
/**
* 11 垂直货柜
* 11 垂直货柜
*/
*/
VERTICALBOX
(
"storage.type.verticalBox"
)
VERTICALBOX
(
"storage.type.smdVl"
),
/**
* 12 SMD-XL(方仓)
*/
SMD_XL
(
"storage.type.smdXl"
)
;
;
...
...
myproject/src/main/java/com/myproject/webapp/controller/storage/SmdXLController.java
0 → 100644
查看文件 @
6f69995
package
com
.
myproject
.
webapp
.
controller
.
storage
;
import
com.myproject.bean.CodeBean
;
import
com.myproject.bean.json.VerticalBoxOperateBean
;
import
com.myproject.bean.update.*
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.exception.ValidateException
;
import
com.myproject.manager.IBarcodeManager
;
import
com.myproject.manager.IComponentManager
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.webapp.controller.webService.DataCache
;
import
com.myproject.webapp.controller.webService.ITaskService
;
import
com.myproject.webapp.controller.webService.boxHandler.SmdXlBoxHandler
;
import
com.myproject.webapp.controller.webService.boxHandler.VerticalBoxHandler
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Date
;
import
java.util.List
;
/**
* SMD-XL
*/
@Controller
public
class
SmdXLController
extends
BaseController
{
@Autowired
private
DataCache
dataCache
;
@Autowired
private
ITaskService
taskService
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
IBarcodeManager
barcodeManager
;
@Autowired
private
IComponentManager
componentManager
;
@Autowired
private
IDataLogDao
dataLogDao
;
@Autowired
private
SmdXlBoxHandler
smdXlBoxHandler
;
@RequestMapping
(
"/storage/xl/{cid}"
)
public
String
solderView
(
@PathVariable
String
cid
,
HttpServletRequest
request
){
request
.
getSession
().
setAttribute
(
"show"
,
cid
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
request
.
setAttribute
(
"storage"
,
storage
);
request
.
setAttribute
(
"minTemperature"
,
dataCache
.
getSettings
().
getMinTemperature
());
request
.
setAttribute
(
"minTemperatureShow"
,
dataCache
.
getSettings
().
getMinTemperatureShow
());
request
.
setAttribute
(
"maxTemperature"
,
dataCache
.
getSettings
().
getMaxTemperature
());
request
.
setAttribute
(
"maxTemperatureShow"
,
dataCache
.
getSettings
().
getMaxTemperatureShow
());
request
.
setAttribute
(
"minHumidity"
,
dataCache
.
getSettings
().
getMinHumidity
());
request
.
setAttribute
(
"minHumidityShow"
,
dataCache
.
getSettings
().
getMinHumidityShow
());
request
.
setAttribute
(
"maxHumidity"
,
dataCache
.
getSettings
().
getMaxHumidity
());
request
.
setAttribute
(
"maxHumidityShow"
,
dataCache
.
getSettings
().
getMaxHumidityShow
());
List
<
StoragePos
>
enabledPosList
=
storagePosManager
.
findEnablePosList
(
storage
.
getId
());
List
<
StoragePos
>
storagePosList
=
new
ArrayList
<>();
for
(
StoragePos
storagePos
:
enabledPosList
)
{
if
(!
storagePos
.
isExpandPos
()){
storagePosList
.
add
(
storagePos
);
}
}
request
.
setAttribute
(
"storagePosList"
,
storagePosList
);
return
"storage/smdXl"
;
}
/**
*
*/
@RequestMapping
(
"/service/store/xl/storagePosList"
)
@ResponseBody
public
List
<
StoragePos
>
checkAll
(
HttpServletRequest
request
){
String
cid
=
request
.
getParameter
(
"cid"
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
List
<
StoragePos
>
notEmptyPosList
=
storagePosManager
.
findNotEmptyByStorageId
(
storage
.
getId
());
return
notEmptyPosList
;
}
/**
*
* @param request
* @return
*/
@RequestMapping
(
"/service/store/xl/putInToPos"
)
@ResponseBody
public
String
putInToPos
(
HttpServletRequest
request
){
String
cid
=
request
.
getParameter
(
"cid"
);
String
posName
=
request
.
getParameter
(
"posName"
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
StoragePos
storagePos
=
storagePosManager
.
findByStorage
(
storage
.
getId
(),
posName
);
if
(
storagePos
!=
null
){
if
(
storagePos
.
isExpandPos
()){
storagePos
=
storagePosManager
.
get
(
storagePos
.
getHostPosId
());
}
DataLog
putInTask
=
new
DataLog
();
putInTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
NONE
.
name
());
putInTask
.
setType
(
StorageConstants
.
OP
.
PUT_IN
);
putInTask
.
setCid
(
storage
.
getCid
());
putInTask
.
setStorageId
(
storage
.
getId
());
putInTask
.
setStorageName
(
storage
.
getName
());
String
doorInfo
=
request
.
getParameter
(
"door"
);
putInTask
.
setSubSourceId
(
doorInfo
);
putInTask
.
setPosId
(
storagePos
.
getId
());
putInTask
.
setPosName
(
storagePos
.
getPosName
());
putInTask
.
setSingleOut
(
true
);
putInTask
=
dataLogDao
.
save
(
putInTask
);
taskService
.
addTaskToExecute
(
putInTask
);
smdXlBoxHandler
.
updateCurrentTask
(
cid
,
putInTask
);
log
.
info
(
doorInfo
+
"号门准备扫码入库到["
+
posName
+
"]"
);
return
""
;
}
return
"未找到对应的料箱条码["
+
posName
+
"]"
;
}
@RequestMapping
(
"/service/store/xl/closeOperateWindow"
)
@ResponseBody
public
void
closeOperateWindow
(
HttpServletRequest
request
){
String
cid
=
request
.
getParameter
(
"cid"
);
DataLog
currentTask
=
smdXlBoxHandler
.
getCurrentTask
(
cid
);
if
(
currentTask
!=
null
){
if
(
currentTask
.
isExecuting
()
||
currentTask
.
getStatus
().
equals
(
StorageConstants
.
OP_STATUS
.
NONE
.
name
())){
log
.
info
(
"关闭["
+
cid
+
"]的出入库["
+
currentTask
.
getPosName
()+
"]窗口并取消任务"
);
currentTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
CANCEL
.
name
());
dataLogDao
.
save
(
currentTask
);
taskService
.
moveTaskToFinished
(
currentTask
);
}
smdXlBoxHandler
.
updateCurrentTask
(
cid
,
null
);
//StorageDataController.addOp(cid,"closeDoor", doorInfo);
}
}
@RequestMapping
(
"/service/store/xl/exePutIn"
)
@ResponseBody
public
String
exePutIn
(
HttpServletRequest
request
){
String
cid
=
request
.
getParameter
(
"cid"
);
String
doorInfo
=
request
.
getParameter
(
"door"
);
DataLog
currentTask
=
smdXlBoxHandler
.
getCurrentTask
(
cid
);
if
(
currentTask
!=
null
){
DataLog
putInTask
=
currentTask
;
log
.
info
(
currentTask
.
getPosName
()+
"开始回库"
);
if
(
currentTask
.
isPutInTask
()){
}
else
{
StoragePos
pos
=
storagePosManager
.
findOneById
(
putInTask
.
getPosId
());
if
(
pos
.
isExpandPos
()){
pos
=
storagePosManager
.
findOneById
(
pos
.
getHostPosId
());
}
if
(
pos
!=
null
){
putInTask
=
new
DataLog
();
putInTask
.
setType
(
StorageConstants
.
OP
.
PUT_IN
);
putInTask
.
setCid
(
currentTask
.
getCid
());
putInTask
.
setStorageId
(
currentTask
.
getStorageId
());
putInTask
.
setStorageName
(
currentTask
.
getStorageName
());
putInTask
.
setSubSourceId
(
"1"
);
putInTask
.
setPosId
(
currentTask
.
getPosId
());
putInTask
.
setPosName
(
currentTask
.
getPosName
());
putInTask
=
dataLogDao
.
save
(
putInTask
);
}
}
smdXlBoxHandler
.
updateCurrentTask
(
cid
,
null
);
putInTask
.
setSingleOut
(
true
);
putInTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
WAIT
.
name
());
taskService
.
updateQueueTask
(
putInTask
);
}
return
""
;
}
@RequestMapping
(
"/service/store/xl/exeOut"
)
@ResponseBody
public
String
exeOut
(
HttpServletRequest
request
){
String
cid
=
request
.
getParameter
(
"cid"
);
Storage
storage
=
dataCache
.
getStorage
(
cid
);
String
pid
=
request
.
getParameter
(
"pid"
);
StoragePos
pos
=
storagePosManager
.
get
(
pid
);
if
(
pos
!=
null
){
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
if
(!
excludePosIds
.
contains
(
pos
.
getHostPosId
())){
StoragePos
hostPos
=
storagePosManager
.
get
(
pos
.
getHostPosId
());
if
(
hostPos
!=
null
){
DataLog
hostOutTask
=
new
DataLog
();
hostOutTask
.
setType
(
StorageConstants
.
OP
.
CHECKOUT
);
hostOutTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
WAIT
.
name
());
hostOutTask
.
setCid
(
cid
);
hostOutTask
.
setStorageId
(
storage
.
getId
());
hostOutTask
.
setStorageName
(
storage
.
getName
());
hostOutTask
.
setPosId
(
hostPos
.
getId
());
hostOutTask
.
setPosName
(
hostPos
.
getPosName
());
hostOutTask
=
dataLogDao
.
save
(
hostOutTask
);
taskService
.
addTaskToExecute
(
hostOutTask
);
log
.
info
(
"出库["
+
pos
.
getPosName
()+
"]时主库位["
+
hostPos
.
getPosName
()+
"]无出库任务,新建出库任务"
);
}
}
if
(!
excludePosIds
.
contains
(
pos
.
getId
())){
DataLog
posOutTask
=
new
DataLog
();
posOutTask
.
setType
(
StorageConstants
.
OP
.
CHECKOUT
);
posOutTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
WAIT
.
name
());
posOutTask
.
setCid
(
cid
);
Barcode
barcode
=
pos
.
getBarcode
();
posOutTask
.
setPartNumber
(
barcode
.
getPartNumber
());
posOutTask
.
setBarcode
(
barcode
.
getBarcode
());
posOutTask
.
setNum
(
barcode
.
getAmount
());
posOutTask
.
setStorageId
(
storage
.
getId
());
posOutTask
.
setStorageName
(
storage
.
getName
());
posOutTask
.
setPosId
(
pos
.
getId
());
posOutTask
.
setPosName
(
pos
.
getPosName
());
posOutTask
=
dataLogDao
.
save
(
posOutTask
);
taskService
.
addTaskToExecute
(
posOutTask
);
}
return
"0"
+
super
.
getText
(
"checkout.sucess"
,
request
.
getLocale
());
}
return
""
;
}
/**
* 对库位进行出库或入库操作
* @param request
* @return
*/
@RequestMapping
(
value
=
"/service/store/xl/operatePos"
)
@ResponseBody
public
String
operatePos
(
HttpServletRequest
request
)
{
try
{
String
codeStr
=
request
.
getParameter
(
"code"
);
String
posName
=
request
.
getParameter
(
"pos"
);
String
cid
=
request
.
getParameter
(
"cid"
);
DataLog
currentTask
=
smdXlBoxHandler
.
getCurrentTask
(
cid
);
StoragePos
hostPos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
hostPos
!=
null
&&
hostPos
.
isExpandPos
()){
hostPos
=
storagePosManager
.
get
(
hostPos
.
getHostPosId
());
}
if
(
hostPos
==
null
||
currentTask
==
null
||
!
currentTask
.
getPosName
().
equals
(
posName
)){
return
"未找到对应的库位"
;
}
//用+或-分割,如果最后几位是数量,按手动输入处理
String
[]
codeArray
=
codeStr
.
split
(
"-"
);
String
pnStr
=
""
;
int
opQty
=
0
;
int
opType
=
StorageConstants
.
OP
.
NON_OP
;
if
(
codeArray
.
length
==
2
){
try
{
opQty
=
Integer
.
valueOf
(
codeArray
[
1
]);
pnStr
=
codeArray
[
0
];
opType
=
StorageConstants
.
OP
.
CHECKOUT
;
}
catch
(
Exception
e
){
}
}
if
(
opType
==
StorageConstants
.
OP
.
NON_OP
){
codeArray
=
codeStr
.
split
(
"\\+"
);
if
(
codeArray
.
length
==
2
){
try
{
opQty
=
Integer
.
valueOf
(
codeArray
[
1
]);
pnStr
=
codeArray
[
0
];
opType
=
StorageConstants
.
OP
.
PUT_IN
;
}
catch
(
Exception
e
){
}
}
}
if
(
opType
!=
StorageConstants
.
OP
.
NON_OP
){
//手动输入,按PN来处理
//先查找是否有相同的PN,没有创建一个
Component
component
=
componentManager
.
findByPartNumber
(
pnStr
);
if
(
component
==
null
){
component
=
new
Component
();
component
.
setHeight
(
1
);
component
.
setPartNumber
(
pnStr
);
component
.
setPlateSize
(
1
);
component
.
setType
(
StorageConstants
.
COMPONENT_TYPE
.
OTHERS
);
component
.
setAmount
(
opQty
);
component
=
componentManager
.
save
(
component
);
}
//查看该库位中是否有相同的物料,有的话,数量累加
StoragePos
existPnPos
=
storagePosManager
.
getByHostPosId
(
hostPos
.
getId
(),
component
.
getPartNumber
());
if
(
opType
==
StorageConstants
.
OP
.
PUT_IN
)
{
//入库
if
(
existPnPos
!=
null
)
{
Barcode
existBarcode
=
existPnPos
.
getBarcode
();
int
oldAmount
=
existBarcode
.
getAmount
();
existBarcode
.
setAmount
(
oldAmount
+
opQty
);
existBarcode
=
barcodeManager
.
save
(
existBarcode
);
existPnPos
.
setBarcode
(
existBarcode
);
storagePosManager
.
save
(
existPnPos
);
finishTask
(
existPnPos
,
opType
,
currentTask
,
existBarcode
,
opQty
);
log
.
info
(
existBarcode
.
getPartNumber
()
+
"入库到库位["
+
existPnPos
.
getPosName
()
+
"],物料数量:"
+
oldAmount
+
" + "
+
opQty
+
" = "
+
existBarcode
.
getAmount
());
}
else
{
//条码设置为P+PosId+C+ComponentId
String
barcodeStr
=
"P"
+
hostPos
.
getId
()
+
"C"
+
component
.
getId
();
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
barcodeStr
);
if
(
barcode
==
null
)
{
//不存在,需要创建条码和库位
barcode
=
new
Barcode
();
barcode
.
setBarcode
(
barcodeStr
);
barcode
.
setPlateSize
(
1
);
barcode
.
setHeight
(
1
);
barcode
.
setPartNumber
(
pnStr
);
}
barcode
.
setAmount
(
opQty
);
barcode
.
setUsedDate
(
new
Date
());
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
barcode
.
setCheckOutDate
(
null
,
""
);
barcode
=
barcodeManager
.
save
(
barcode
);
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
posToPut
.
setUsed
(
true
);
posToPut
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
posToPut
);
finishTask
(
posToPut
,
opType
,
currentTask
,
barcode
,
opQty
);
log
.
info
(
barcode
.
getPartNumber
()
+
"入库到库位["
+
posToPut
.
getPosName
()
+
"],物料数量:"
+
barcode
.
getAmount
());
}
}
else
{
//出库
if
(
existPnPos
!=
null
){
Barcode
existBarcode
=
existPnPos
.
getBarcode
();
int
oldAmount
=
existBarcode
.
getAmount
();
if
(
oldAmount
<
opQty
){
return
"物料数量不足"
;
}
int
newAmount
=
oldAmount
-
opQty
;
existBarcode
.
setAmount
(
newAmount
);
existBarcode
=
barcodeManager
.
save
(
existBarcode
);
if
(
newAmount
==
0
){
//全部出库,禁用库位
existPnPos
.
setBarcode
(
null
);
existPnPos
.
setEnabled
(
false
);
}
else
{
existPnPos
.
setBarcode
(
existBarcode
);
}
storagePosManager
.
save
(
existPnPos
);
finishTask
(
existPnPos
,
opType
,
currentTask
,
existBarcode
,
opQty
);
log
.
info
(
existBarcode
.
getPartNumber
()
+
"从库位["
+
existPnPos
.
getPosName
()+
"]库位出库,物料数量:"
+
oldAmount
+
" - "
+
opQty
+
" = "
+
newAmount
);
}
else
{
//无库存
return
"该库位中未找到对应的物料"
;
}
}
}
else
{
String
newCodeStr
=
"=1x1="
+
codeStr
;
CodeBean
codeBean
=
dataCache
.
resolveSingleCode
(
newCodeStr
);
if
(
codeBean
.
isValid
()){
Barcode
barcode
=
codeBean
.
getBarcode
();
StoragePos
pos
=
storagePosManager
.
getByBarcode
(
barcode
.
getBarcode
());
if
(
pos
==
null
){
//不存在,入库
opQty
=
StorageConstants
.
OP
.
PUT_IN
;
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
posToPut
.
setUsed
(
true
);
posToPut
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
posToPut
);
finishTask
(
posToPut
,
opQty
,
currentTask
,
barcode
,
barcode
.
getAmount
());
log
.
info
(
"条码"
+
barcode
.
getBarcode
()+
"["
+
barcode
.
getPartNumber
()
+
"]入库到库位["
+
posToPut
.
getPosName
()+
"]数量:"
+
barcode
.
getAmount
());
}
else
{
//出库
Barcode
posBarcode
=
pos
.
getBarcode
();
pos
.
setBarcode
(
null
);
pos
.
setEnabled
(
false
);
storagePosManager
.
save
(
pos
);
opQty
=
StorageConstants
.
OP
.
CHECKOUT
;
finishTask
(
pos
,
opQty
,
currentTask
,
posBarcode
,
posBarcode
.
getAmount
());
log
.
info
(
"条码"
+
barcode
.
getBarcode
()+
"["
+
barcode
.
getPartNumber
()
+
"]从库位["
+
pos
.
getPosName
()+
"]出库,数量:"
+
barcode
.
getAmount
());
}
}
else
{
String
msg
=
getText
(
codeBean
.
getErrorCode
(),
codeBean
.
getParams
(),
request
.
getLocale
(),
codeBean
.
getError
());
return
msg
;
}
}
}
catch
(
Exception
e
){
return
"出入库操作出错:"
+
e
.
getMessage
();
}
return
"OK操作成功"
;
}
@RequestMapping
(
value
=
"/service/store/xl/currentTask"
)
@ResponseBody
public
VerticalBoxOperateBean
currentTask
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
DataLog
currentTask
=
smdXlBoxHandler
.
getCurrentTask
(
cid
);
if
(
dataCache
.
getSettings
().
isDebugTest
()){
if
(
currentTask
==
null
){
//测试使用
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
for
(
DataLog
queueTask
:
queueTasks
)
{
StoragePos
pos
=
storagePosManager
.
get
(
queueTask
.
getPosId
());
if
(
pos
.
isExpandPos
()){
continue
;
}
if
(!
queueTask
.
isSingleOut
()){
queueTask
.
setSingleOut
(
true
);
queueTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
queueTask
=
dataLogDao
.
save
(
queueTask
);
taskService
.
moveTaskToFinished
(
queueTask
);
smdXlBoxHandler
.
updateCurrentTask
(
queueTask
.
getCid
(),
queueTask
);
break
;
}
}
currentTask
=
smdXlBoxHandler
.
getCurrentTask
(
cid
);
}
}
if
(
currentTask
!=
null
){
VerticalBoxOperateBean
operateBean
=
new
VerticalBoxOperateBean
();
operateBean
.
setCurrentTask
(
currentTask
);
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
List
<
String
>
outTaskIdList
=
new
ArrayList
<>();
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isCheckOutTask
()
&&
queueTask
.
isWait
()){
outTaskIdList
.
add
(
queueTask
.
getPosId
());
}
}
StoragePos
hostPos
=
storagePosManager
.
get
(
currentTask
.
getPosId
());
List
<
StoragePos
>
extendPosList
=
storagePosManager
.
getExtendPosList
(
hostPos
.
getId
());
for
(
StoragePos
storagePos
:
extendPosList
)
{
if
(
outTaskIdList
.
contains
(
storagePos
.
getId
())){
storagePos
.
setUsed
(
false
);
}
}
operateBean
.
setExtendPosList
(
extendPosList
);
return
operateBean
;
}
return
null
;
}
/**
* 完成出入库任务
* @param operatePos 库位
* @param currentTask 当前任务
* @param barcode 条码
* @param opQty 数量
* @throws ValidateException
*/
private
void
finishTask
(
StoragePos
operatePos
,
int
opType
,
DataLog
currentTask
,
Barcode
barcode
,
int
opQty
)
throws
ValidateException
{
DataLog
task
=
null
;
//先查看是否有相同类型且库位相同的任务
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
();
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
getType
()
==
currentTask
.
getType
()){
if
(
queueTask
.
getPosName
().
equals
(
operatePos
.
getPosName
())){
task
=
queueTask
;
break
;
}
}
}
if
(
task
==
null
){
task
=
new
DataLog
();
}
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
task
.
setPartNumber
(
barcode
.
getPartNumber
());
task
.
setBarcode
(
barcode
.
getBarcode
());
task
.
setNum
(
opQty
);
task
.
setType
(
opType
);
if
(
task
.
isCheckOutTask
()){
opQty
=
-
opQty
;
}
Storage
storage
=
dataCache
.
getStorage
(
currentTask
.
getCid
());
task
.
setCid
(
storage
.
getCid
());
task
.
setStorageId
(
storage
.
getId
());
task
.
setStorageName
(
storage
.
getName
());
task
.
setPosId
(
operatePos
.
getId
());
task
.
setPosName
(
operatePos
.
getPosName
());
task
=
dataLogDao
.
save
(
task
);
taskService
.
moveTaskToFinished
(
task
);
dataCache
.
updateInventoryAmount
(
currentTask
.
getCid
(),
barcode
.
getPartNumber
(),
opQty
);
dataCache
.
reloadStorage
(
storage
);
}
private
StoragePos
getOrCreateNewPos
(
StoragePos
hostPos
,
String
barcodeId
){
String
newPosName
=
hostPos
.
getPosName
()+
":"
+
barcodeId
;
StoragePos
newPos
=
storagePosManager
.
getByPosName
(
newPosName
);
if
(
newPos
==
null
){
newPos
=
new
StoragePos
();
newPos
.
setPosName
(
newPosName
);
newPos
.
setW
(
hostPos
.
getW
());
newPos
.
setH
(
hostPos
.
getH
());
newPos
.
setHostPosId
(
hostPos
.
getId
());
newPos
.
setPriority
(
hostPos
.
getPriority
());
newPos
.
setStorageId
(
hostPos
.
getStorageId
());
log
.
info
(
"创建新库位["
+
newPosName
+
"]"
);
}
newPos
.
setEnabled
(
true
);
return
newPos
;
}
}
myproject/src/main/java/com/myproject/webapp/controller/storage/VerticalBoxController.java
查看文件 @
6f69995
...
@@ -28,7 +28,7 @@ import java.util.*;
...
@@ -28,7 +28,7 @@ import java.util.*;
/**
/**
*
锡膏料仓
*
垂直货柜
*/
*/
@Controller
@Controller
public
class
VerticalBoxController
extends
BaseController
{
public
class
VerticalBoxController
extends
BaseController
{
...
@@ -207,6 +207,7 @@ public class VerticalBoxController extends BaseController{
...
@@ -207,6 +207,7 @@ public class VerticalBoxController extends BaseController{
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
posToPut
.
setBarcode
(
barcode
);
posToPut
.
setBarcode
(
barcode
);
posToPut
.
setUsed
(
true
);
storagePosManager
.
save
(
posToPut
);
storagePosManager
.
save
(
posToPut
);
finishTask
(
posToPut
,
currentTask
,
barcode
,
opQty
);
finishTask
(
posToPut
,
currentTask
,
barcode
,
opQty
);
...
@@ -248,6 +249,7 @@ public class VerticalBoxController extends BaseController{
...
@@ -248,6 +249,7 @@ public class VerticalBoxController extends BaseController{
if
(
currentTask
.
isPutInTask
()){
if
(
currentTask
.
isPutInTask
()){
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
StoragePos
posToPut
=
getOrCreateNewPos
(
hostPos
,
barcode
.
getId
());
posToPut
.
setUsed
(
true
);
posToPut
.
setBarcode
(
barcode
);
posToPut
.
setBarcode
(
barcode
);
storagePosManager
.
save
(
posToPut
);
storagePosManager
.
save
(
posToPut
);
finishTask
(
posToPut
,
currentTask
,
barcode
,
barcode
.
getAmount
());
finishTask
(
posToPut
,
currentTask
,
barcode
,
barcode
.
getAmount
());
...
@@ -289,17 +291,22 @@ public class VerticalBoxController extends BaseController{
...
@@ -289,17 +291,22 @@ public class VerticalBoxController extends BaseController{
public
VerticalBoxOperateBean
currentTask
(
HttpServletRequest
request
)
{
public
VerticalBoxOperateBean
currentTask
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
String
cid
=
request
.
getParameter
(
"cid"
);
DataLog
currentTask
=
verticalBoxHandler
.
getCurrentTask
(
cid
);
DataLog
currentTask
=
verticalBoxHandler
.
getCurrentTask
(
cid
);
if
(
dataCache
.
getSettings
().
isDebugTest
()){
if
(
currentTask
==
null
){
if
(
currentTask
==
null
){
//测试使用
//测试使用
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
for
(
DataLog
queueTask
:
queueTasks
)
{
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isWait
()){
queueTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
EXECUTING
.
name
());
queueTask
.
setStatus
(
StorageConstants
.
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
queueTask
);
taskService
.
updateQueueTask
(
queueTask
);
verticalBoxHandler
.
updateCurrentTask
(
queueTask
.
getCid
(),
queueTask
);
verticalBoxHandler
.
updateCurrentTask
(
queueTask
.
getCid
(),
queueTask
);
break
;
break
;
}
}
}
currentTask
=
verticalBoxHandler
.
getCurrentTask
(
cid
);
currentTask
=
verticalBoxHandler
.
getCurrentTask
(
cid
);
}
}
}
if
(
currentTask
!=
null
){
if
(
currentTask
!=
null
){
VerticalBoxOperateBean
operateBean
=
new
VerticalBoxOperateBean
();
VerticalBoxOperateBean
operateBean
=
new
VerticalBoxOperateBean
();
operateBean
.
setCurrentTask
(
currentTask
);
operateBean
.
setCurrentTask
(
currentTask
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/system/SettingsController.java
查看文件 @
6f69995
...
@@ -41,6 +41,13 @@ public class SettingsController extends BaseUpdateController {
...
@@ -41,6 +41,13 @@ public class SettingsController extends BaseUpdateController {
settings
.
setProductCustom
(
product
);
settings
.
setProductCustom
(
product
);
settings
=
dataCache
.
updateSettings
(
settings
);
settings
=
dataCache
.
updateSettings
(
settings
);
}
}
String
debugStr
=
request
.
getParameter
(
"debug"
);
if
(!
Strings
.
isNullOrEmpty
(
debugStr
)){
boolean
debugTest
=
Boolean
.
valueOf
(
debugStr
);
settings
.
setDebugTest
(
debugTest
);
settings
=
dataCache
.
updateSettings
(
settings
);
}
model
.
addAttribute
(
"settings"
,
settings
);
model
.
addAttribute
(
"settings"
,
settings
);
return
new
ModelAndView
(
updateView
(),
model
.
asMap
());
return
new
ModelAndView
(
updateView
(),
model
.
asMap
());
}
}
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/StorageDataController.java
查看文件 @
6f69995
...
@@ -270,7 +270,7 @@ public class StorageDataController extends BaseController {
...
@@ -270,7 +270,7 @@ public class StorageDataController extends BaseController {
@RequestMapping
(
value
=
"/checkout.html"
)
@RequestMapping
(
value
=
"/checkout.html"
)
@ResponseBody
@ResponseBody
public
String
check
Pos
(
HttpServletRequest
request
)
{
public
String
check
out
(
HttpServletRequest
request
)
{
String
cid
=
request
.
getParameter
(
"cid"
);
String
cid
=
request
.
getParameter
(
"cid"
);
String
partnumber
=
request
.
getParameter
(
"pn"
);
String
partnumber
=
request
.
getParameter
(
"pn"
);
...
@@ -537,6 +537,9 @@ public class StorageDataController extends BaseController {
...
@@ -537,6 +537,9 @@ public class StorageDataController extends BaseController {
* @param opValue
* @param opValue
*/
*/
public
static
void
addOp
(
String
cid
,
String
opKey
,
String
opValue
){
public
static
void
addOp
(
String
cid
,
String
opKey
,
String
opValue
){
if
(
opValue
==
null
){
return
;
}
Map
<
String
,
String
>
opMap
=
storageOpMap
.
get
(
cid
);
Map
<
String
,
String
>
opMap
=
storageOpMap
.
get
(
cid
);
if
(
opMap
==
null
){
if
(
opMap
==
null
){
opMap
=
new
ConcurrentHashMap
<>();
opMap
=
new
ConcurrentHashMap
<>();
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/TaskService.java
查看文件 @
6f69995
...
@@ -17,6 +17,7 @@ import com.myproject.manager.IHumitureManager;
...
@@ -17,6 +17,7 @@ import com.myproject.manager.IHumitureManager;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.model.User
;
import
com.myproject.model.User
;
import
com.myproject.service.UserManager
;
import
com.myproject.service.UserManager
;
import
com.myproject.webapp.controller.webService.boxHandler.SmdXlBoxHandler
;
import
com.myproject.webapp.controller.webService.boxHandler.VerticalBoxHandler
;
import
com.myproject.webapp.controller.webService.boxHandler.VerticalBoxHandler
;
import
com.myproject.util.HttpHelper
;
import
com.myproject.util.HttpHelper
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.util.StorageConstants
;
...
@@ -110,6 +111,9 @@ public class TaskService implements ITaskService {
...
@@ -110,6 +111,9 @@ public class TaskService implements ITaskService {
@Autowired
@Autowired
private
VerticalBoxHandler
verticalBoxHandler
;
private
VerticalBoxHandler
verticalBoxHandler
;
@Autowired
private
SmdXlBoxHandler
smdXlBoxHandler
;
/**
/**
* 更新客户端发上来的消息(设备故障等消息)
* 更新客户端发上来的消息(设备故障等消息)
*/
*/
...
@@ -690,7 +694,8 @@ public class TaskService implements ITaskService {
...
@@ -690,7 +694,8 @@ public class TaskService implements ITaskService {
String
posName
=
task
.
getPosName
();
String
posName
=
task
.
getPosName
();
int
index
=
posName
.
indexOf
(
"#"
);
int
index
=
posName
.
indexOf
(
"#"
);
if
(
index
>
0
){
if
(
index
>
0
){
String
boxId
=
posName
.
substring
(
0
,
index
);
//String boxId = posName.substring(0,index);
String
boxId
=
"1"
;
excuteBoxIds
.
add
(
Integer
.
valueOf
(
boxId
));
excuteBoxIds
.
add
(
Integer
.
valueOf
(
boxId
));
}
}
}
}
...
@@ -970,28 +975,31 @@ public class TaskService implements ITaskService {
...
@@ -970,28 +975,31 @@ public class TaskService implements ITaskService {
synchronized
(
storage
){
synchronized
(
storage
){
//log.info("reqseq:"+statusBean.getSeq());
//log.info("reqseq:"+statusBean.getSeq());
StatusBean
resultStatus
=
saveStatus
(
statusBean
);
statusBean
=
saveStatus
(
statusBean
);
if
(
storage
.
isVerticalBox
()){
if
(
storage
.
isVerticalBox
()){
//垂直货柜
//垂直货柜
return
verticalBoxHandler
.
handleClientStatusBean
(
statusBean
);
return
verticalBoxHandler
.
handleClientStatusBean
(
statusBean
);
}
}
statusBean
=
handleClientStatusBean
(
statusBean
);
if
(
storage
.
isSmdXl
()){
statusBean
=
smdXlBoxHandler
.
handleClientStatusBean
(
statusBean
);
}
statusBean
=
handleClientStatusBean
(
statusBean
);
if
(
statusBean
.
getOp
()
==
StorageConstants
.
OP
.
ALARM_DATA
){
if
(
statusBean
.
getOp
()
==
StorageConstants
.
OP
.
ALARM_DATA
){
log
.
info
(
"获取温湿度报警值"
);
log
.
info
(
"获取温湿度报警值"
);
statusBean
.
setTemperature
(
dataCache
.
getSettings
().
getMaxTemperature
());
statusBean
.
setTemperature
(
dataCache
.
getSettings
().
getMaxTemperature
());
statusBean
.
setHumidity
(
dataCache
.
getSettings
().
getMaxHumidity
());
statusBean
.
setHumidity
(
dataCache
.
getSettings
().
getMaxHumidity
());
resultStatus
=
statusBean
;
//
resultStatus = statusBean;
return
resultStatus
;
return
statusBean
;
}
else
if
(
dataCache
.
needUpdateHumidiy
(
cid
)){
}
else
if
(
dataCache
.
needUpdateHumidiy
(
cid
)){
log
.
info
(
"发送温湿度报警值"
);
log
.
info
(
"发送温湿度报警值"
);
statusBean
.
setTemperature
(
dataCache
.
getSettings
().
getMaxTemperature
());
statusBean
.
setTemperature
(
dataCache
.
getSettings
().
getMaxTemperature
());
statusBean
.
setHumidity
(
dataCache
.
getSettings
().
getMaxHumidity
());
statusBean
.
setHumidity
(
dataCache
.
getSettings
().
getMaxHumidity
());
resultStatus
=
statusBean
;
//
resultStatus = statusBean;
return
resultStatus
;
return
statusBean
;
}
}
if
(
storage
.
isCabinet
()
||
storage
.
isShelf
()
||
storage
.
isAccShelf
()
||
storage
.
isCodeShelf
()){
if
(
storage
.
isCabinet
()
||
storage
.
isShelf
()
||
storage
.
isAccShelf
()
||
storage
.
isCodeShelf
()){
...
@@ -1006,15 +1014,18 @@ public class TaskService implements ITaskService {
...
@@ -1006,15 +1014,18 @@ public class TaskService implements ITaskService {
}
}
}
}
if
(!
storage
.
isSmdXl
()){
if
(
statusBean
.
getOp
()
==
StorageConstants
.
OP
.
PUT_IN
){
if
(
statusBean
.
getOp
()
==
StorageConstants
.
OP
.
PUT_IN
){
log
.
debug
(
"入库:"
+
mapper
.
writeValueAsString
(
statusBean
));
log
.
debug
(
"入库:"
+
mapper
.
writeValueAsString
(
statusBean
));
resultStatus
=
putInLine
(
storage
,
statusBean
);
statusBean
=
putInLine
(
storage
,
statusBean
);
}
else
{
}
else
{
//查看是否有要出库的操作
//查看是否有要出库的操作
resultStatus
=
checkOut
(
storage
,
resultStatus
);
statusBean
=
checkOut
(
storage
,
statusBean
);
}
}
}
//log.info(mapper.writeValueAsString(resultStatus));
//log.info(mapper.writeValueAsString(resultStatus));
return
resultStatus
;
return
statusBean
;
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
""
,
e
);
log
.
error
(
""
,
e
);
...
@@ -1702,6 +1713,7 @@ public class TaskService implements ITaskService {
...
@@ -1702,6 +1713,7 @@ public class TaskService implements ITaskService {
StoragePos
storagePos
=
storagePosManager
.
get
(
task
.
getPosId
());
StoragePos
storagePos
=
storagePosManager
.
get
(
task
.
getPosId
());
//二维码状态
//二维码状态
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
if
(
barcode
!=
null
){
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
//barcode.setUsedDate(new Date());
//barcode.setUsedDate(new Date());
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
...
@@ -1724,6 +1736,8 @@ public class TaskService implements ITaskService {
...
@@ -1724,6 +1736,8 @@ public class TaskService implements ITaskService {
// }
// }
// }
// }
barcodeManager
.
save
(
barcode
);
barcodeManager
.
save
(
barcode
);
}
/**
/**
...
@@ -1734,7 +1748,7 @@ public class TaskService implements ITaskService {
...
@@ -1734,7 +1748,7 @@ public class TaskService implements ITaskService {
storagePos
.
setCanCheckOutTime
(
System
.
currentTimeMillis
());
storagePos
.
setCanCheckOutTime
(
System
.
currentTimeMillis
());
storagePosManager
.
save
(
storagePos
);
storagePosManager
.
save
(
storagePos
);
//更新缓存中的库存信息
if
(
barcode
!=
null
){
dataCache
.
updateInventory
(
storagePos
,
barcode
);
dataCache
.
updateInventory
(
storagePos
,
barcode
);
//dataCache.updateStorage(task.getCid());
//dataCache.updateStorage(task.getCid());
...
@@ -1748,6 +1762,9 @@ public class TaskService implements ITaskService {
...
@@ -1748,6 +1762,9 @@ public class TaskService implements ITaskService {
//记录日志,完成 task
//记录日志,完成 task
task
.
setBatchInfo
(
barcode
.
getBatch
());
task
.
setBatchInfo
(
barcode
.
getBatch
());
task
.
setNum
(
barcode
.
getAmount
());
task
.
setNum
(
barcode
.
getAmount
());
}
//更新缓存中的库存信息
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
FINISHED
.
name
());
dataLogDao
.
save
(
task
);
dataLogDao
.
save
(
task
);
...
...
myproject/src/main/java/com/myproject/webapp/controller/webService/boxHandler/SmdXlBoxHandler.java
0 → 100644
查看文件 @
6f69995
package
com
.
myproject
.
webapp
.
controller
.
webService
.
boxHandler
;
import
com.google.common.base.Strings
;
import
com.myproject.bean.update.DataLog
;
import
com.myproject.bean.update.StoragePos
;
import
com.myproject.bean.utils.BoxStatusBean
;
import
com.myproject.bean.utils.StatusBean
;
import
com.myproject.dao.mongo.IDataLogDao
;
import
com.myproject.manager.IStoragePosManager
;
import
com.myproject.util.StorageConstants
;
import
com.myproject.webapp.controller.webService.TaskService
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Collection
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* 垂直货柜处理类
*/
@Service
public
class
SmdXlBoxHandler
{
protected
final
transient
Logger
log
=
LogManager
.
getLogger
(
getClass
());
@Autowired
protected
TaskService
taskService
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
IDataLogDao
dataLogDao
;
/**
* 当前出入库操作的库位(key为cid, value为当前执行的任务)
*/
private
Map
<
String
,
DataLog
>
operateTaskMap
=
new
ConcurrentHashMap
<>();
/**
* 获取当前正在执行的任务
*/
public
DataLog
getCurrentTask
(
String
cid
){
return
operateTaskMap
.
get
(
cid
);
}
/**
* 更新或清理(task为null)当前正在执行的任务
*/
public
void
updateCurrentTask
(
String
cid
,
DataLog
task
){
if
(
task
==
null
){
operateTaskMap
.
remove
(
cid
);
}
else
{
operateTaskMap
.
put
(
cid
,
task
);
}
}
public
StatusBean
handleClientStatusBean
(
StatusBean
statusBean
){
String
cid
=
statusBean
.
getCid
();
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
cid
);
Map
<
Integer
,
BoxStatusBean
>
statusOfBoxes
=
statusBean
.
getBoxStatus
();
if
(
statusOfBoxes
!=
null
)
{
for
(
BoxStatusBean
boxStatus
:
statusOfBoxes
.
values
())
{
try
{
//出库入库动作完成处理
int
status
=
boxStatus
.
getStatus
();
String
posName
=
boxStatus
.
getPosId
();
if
(!
Strings
.
isNullOrEmpty
(
posName
)){
//客户端发一次完成之后,会发空的 posName,不需要处理
if
(
StorageConstants
.
BOX_STATUS
.
OUT_FINISHED
==
status
)
{
//出仓完成,设置当前任务
DataLog
currentTask
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isExecuting
()
&&
queueTask
.
getPosName
().
equals
(
posName
)){
currentTask
=
queueTask
;
String
doorInfo
=
statusBean
.
getFromData
(
"door"
);
if
(
doorInfo
==
null
){
doorInfo
=
"1"
;
}
currentTask
.
setSubSourceId
(
doorInfo
);
taskService
.
updateQueueTask
(
currentTask
);
break
;
}
}
DataLog
cacheTask
=
operateTaskMap
.
get
(
cid
);
if
(
currentTask
!=
null
){
if
(
cacheTask
==
null
||
!
cacheTask
.
getId
().
equals
(
currentTask
.
getId
())){
updateCurrentTask
(
currentTask
.
getCid
(),
currentTask
);
}
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"方仓到位时出错"
,
e
);
}
}
}
if
(
statusBean
.
getStatus
()
==
StorageConstants
.
STATUS
.
READY
){
DataLog
currentTask
=
getCurrentTask
(
cid
);
if
(
currentTask
!=
null
){
//当前有任务未完成,暂不执行其他任务
return
statusBean
;
}
for
(
DataLog
task
:
queueTasks
)
{
if
(
cid
.
equals
(
task
.
getCid
())
&&
task
.
isWait
())
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
task
.
getPosName
());
if
(
pos
.
isExpandPos
()){
continue
;
}
if
(
task
.
isPutInTask
()){
statusBean
.
setOp
(
StorageConstants
.
OP
.
PUT_IN
);
statusBean
.
addData
(
"door"
,
task
.
getSubSourceId
());
}
else
if
(
task
.
isCheckOutTask
()){
statusBean
.
setOp
(
StorageConstants
.
OP
.
CHECKOUT
);
}
statusBean
.
addPosInfo
(
""
,
pos
.
getPosName
(),
pos
.
getW
(),
pos
.
getH
(),
false
);
log
.
info
(
"发送["
+
task
.
getType
()+
"]任务["
+
pos
.
getPosName
()+
"]到客户端door="
+
task
.
getSubSourceId
());
task
.
setStatus
(
StorageConstants
.
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
task
);
dataLogDao
.
save
(
task
);
return
statusBean
;
}
}
}
return
statusBean
;
}
}
myproject/src/main/resources/StorageResources.properties
查看文件 @
6f69995
...
@@ -148,6 +148,9 @@ storage.type.online=Inline System
...
@@ -148,6 +148,9 @@ storage.type.online=Inline System
storage.type.batch
=
Batch
storage.type.batch
=
Batch
storage.type.shelf
=
Shelf
storage.type.shelf
=
Shelf
storage.type.cabinet
=
Cabinet
storage.type.cabinet
=
Cabinet
storage.type.solderPaste
=
SMD-SP
storage.type.smdVl
=
SMD-VL
storage.type.smdXl
=
SMD-XL
storage.compatibility
=
Compatibility
storage.compatibility
=
Compatibility
storage.enable
=
Enable
storage.enable
=
Enable
storage.enable.yes
=
Yes
storage.enable.yes
=
Yes
...
...
myproject/src/main/resources/StorageResources_en.properties
查看文件 @
6f69995
...
@@ -433,3 +433,6 @@ order.close.notExist=The order of [{0}] is not found.
...
@@ -433,3 +433,6 @@ order.close.notExist=The order of [{0}] is not found.
order.close
=
Close
order.close
=
Close
order.out.failed
=
Can not execute task
order.out.failed
=
Can not execute task
order.out.notFound
=
The order info was not found
order.out.notFound
=
The order info was not found
storage.type.smdXl
=
SMD-XL
storage.type.smdVl
=
SMD-VL
storage.type.solderPaste
=
SMD-SP
myproject/src/main/resources/StorageResources_jp.properties
查看文件 @
6f69995
...
@@ -430,3 +430,6 @@ order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
...
@@ -430,3 +430,6 @@ order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
order.close
=
\u5173\u
95ED
order.close
=
\u5173\u
95ED
order.out.failed
=
\u
65E0
\u
6CD5
\u6267\u
884C
\u
5DE5
\u5355\u8865\u6599\u
4EFB
\u
52A1
order.out.failed
=
\u
65E0
\u
6CD5
\u6267\u
884C
\u
5DE5
\u5355\u8865\u6599\u
4EFB
\u
52A1
order.out.notFound
=
\u
672A
\u
627E
\u5230\u
5DE5
\u5355\u
4FE1
\u
606F
order.out.notFound
=
\u
672A
\u
627E
\u5230\u
5DE5
\u5355\u
4FE1
\u
606F
storage.type.smdXl
=
SMD-XL
storage.type.smdVl
=
SMD-VL
storage.type.solderPaste
=
SMD-SP
\ No newline at end of file
\ No newline at end of file
myproject/src/main/resources/StorageResources_zh_CN.properties
查看文件 @
6f69995
...
@@ -430,3 +430,6 @@ order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
...
@@ -430,3 +430,6 @@ order.close.notExist=\u672A\u627E\u5230\u5DE5\u5355[{0}]
order.close
=
\u5173\u
95ED
order.close
=
\u5173\u
95ED
order.out.failed
=
\u
65E0
\u
6CD5
\u6267\u
884C
\u
5DE5
\u5355\u8865\u6599\u
4EFB
\u
52A1
order.out.failed
=
\u
65E0
\u
6CD5
\u6267\u
884C
\u
5DE5
\u5355\u8865\u6599\u
4EFB
\u
52A1
order.out.notFound
=
\u
672A
\u
627E
\u5230\u
5DE5
\u5355\u
4FE1
\u
606F
order.out.notFound
=
\u
672A
\u
627E
\u5230\u
5DE5
\u5355\u
4FE1
\u
606F
storage.type.smdXl
=
SMD-XL
storage.type.smdVl
=
SMD-VL
storage.type.solderPaste
=
SMD-SP
\ No newline at end of file
\ No newline at end of file
myproject/src/main/webapp/WEB-INF/pages/component/storagePosFind.jsp
查看文件 @
6f69995
...
@@ -175,7 +175,7 @@
...
@@ -175,7 +175,7 @@
${pos.barcode.partNumber}
${pos.barcode.partNumber}
</display:column>
</display:column>
<display:column property="barcode.provider" titleKey="barcode.provider"/>
<display:column property="barcode.provider" titleKey="barcode.provider"
sortProperty="barcode.provider" sortable="true"
/>
<%--<display:column titleKey="inOutList.type">--%>
<%--<display:column titleKey="inOutList.type">--%>
<%--<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>--%>
<%--<c:if test="${pos.barcode.type == 0 || empty pos.barcode.type}"><fmt:message key="inOutList.type.component"/></c:if>--%>
...
...
myproject/src/main/webapp/WEB-INF/pages/storage/allBoxView.jsp
查看文件 @
6f69995
...
@@ -190,6 +190,10 @@
...
@@ -190,6 +190,10 @@
<c:set var="detailUrl" value="${ctx}/storage/vertical/${storage.cid}"/>
<c:set var="detailUrl" value="${ctx}/storage/vertical/${storage.cid}"/>
</c:if>
</c:if>
<c:if test="${storage.smdXl}">
<c:set var="detailUrl" value="${ctx}/storage/xl/${storage.cid}"/>
</c:if>
<div class="portlet box green-haze tasks-widget">
<div class="portlet box green-haze tasks-widget">
<c:choose>
<c:choose>
<c:when test="${storage.shelf || storage.cabinet || storage.accShelf || storage.virtual || storage.codeShelf}">
<c:when test="${storage.shelf || storage.cabinet || storage.accShelf || storage.virtual || storage.codeShelf}">
...
@@ -725,7 +729,7 @@
...
@@ -725,7 +729,7 @@
options['onClose']=cancelTask;
options['onClose']=cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else{
}else{
options['onClose']=hideTask;
//
options['onClose']=hideTask;
}
}
var sourceStr = "";
var sourceStr = "";
...
...
myproject/src/main/webapp/WEB-INF/pages/storage/smdXl.jsp
0 → 100644
查看文件 @
6f69995
<%@ page import="com.myproject.util.StorageConstants" %>
<%@ include file="/common/taglibs.jsp" %>
<%@ page language="java" pageEncoding="UTF-8" %>
<style type="text/css">
.box{
margin-top: 10px;
}
.alert{
padding:8px;
}
.sm-btn-box{
margin-left:10px;
}
.redBorder{
border: 3px solid #FF0000 !important;
}
.partnumber-box{
height: 100px;text-align: center;
padding-top:35px;
margin-bottom:10px;
font-size: 16px;
xl-align: middle;
word-wrap:break-word ;
cursor: pointer;
}
.table-scrollable{
overflow-y: auto;
}
.statusMsg{
background-color: #FFFFFF;
margin: 0px 10px;
padding: 10px;
text-align: center;
}
#clientMsg{
margin-left: 30px;
font-size: 18px;
color: #ff5500;
text-align: center;
}
#smdstatus{
line-height: 80px;
font-size: 30px;
}
.red{
color:red;
}
.green{
color:green;
}
.table>tbody>tr>td{
xl-align: middle;
}
.theItems{
min-width: 200px;
}
.btn-box{
min-height: 90px;
text-align: center;
padding-top: 50px;
cursor: pointer;
}
.sm-btn-box{
xl-align: middle;
min-height: 100px;
font-size: 15px;
text-align: center;
cursor: pointer;
padding-top: 35px;
border:2px solid #FFFFFF !important;
}
#confirmReelOut{
/*margin-top: 45px;*/
}
.kabanTitle{
padding: 10px;
font-size: 30px;
margin-bottom: 10px;
}
#smdname{
background-color: #FFFFFF;
margin: 0px 10px;
padding-left: 10px;
}
#chart {
padding: 10px;
margin: 10px;
background-color: #FFFFFF;
overflow: hidden;
}
.kanban {
background-color: #dad9da;
min-height: 620px;}
.itembox{
margin: 20px 0px;
width: 100%;
display: table;
}
.item-start{
float: left;
width: 12%;
font-size: 18px;
}
.my-progress {
width: 86%;
overflow: unset;
float: left;
margin: 0;
}
.progress-bar-used {
background-color: #c33531;
font-size: 14px;
}
.progress-bar-idle {
background-color: #9bd5bb;
color: #000000;
font-size: 14px;
}
.item-end{
float: right;
width: 12%;
padding-left: 20px;
font-size: 18px;
}
.clientOpBox{
background-color: #FFFFFF;
margin: 10px 10px;
padding: 10px;
}
.statusMsg{
background-color: #FFFFFF;
margin: 0px 10px;
padding: 10px;
height: 200px;
}
#clientMsg{
font-size: 20px;
color: #ff5500;
}
#smdstatus{
line-height: 100px;
font-size: 20px;
}
.barheight{
height: 25px;
line-height: 25px;
}
.btn{
width: 120px;
height: 40px;
float: right;
margin-right: 30px;
}
.partnumber-box{
height: 100px;text-align: center;
padding-top:35px;
margin-bottom:10px;
font-size: 16px;
xl-align: middle;
word-wrap:break-word ;
cursor: pointer;
}
#toast-container {
top: 20%;
}
.popover-content{
width:276px;
}
.label-cancel {
background-color: #c6c6c6 !important;
border-color: #c8c8c8 !important;
text-decoration:line-through;
}
</style>
<link href="${ctx}/scripts/lobibox/css/lobibox.min.css?id=2" rel="stylesheet" type="text/css"/>
<%--<div class="row" id="codeBox">--%>
<%--<div class="col-md-6 col-sm-6">--%>
<%--<input type="text" class="form-control" id="scan-code"/>--%>
<%--</div>--%>
<%--<div class="col-md-6 col-sm-6">--%>
<%--<div class="alert alert-success" id="msg"> --%>
<%--</div>--%>
<%--</div>--%>
<%--</div>--%>
<div class="row clientOpBox">
<div class="col-md-2">
<div class="col-md-12 bg-blue sm-btn-box" onclick="showPutInWindow('1')">
<div><fmt:message key="1 号 门"/></div>
<div><fmt:message key="开门扫码入库"/></div>
</div>
</div>
<div class="col-md-8" style="text-align:center;">
<div class="col-md-3">
<div class="boxtemperature" style="font-size: 16px;"><fmt:message key="allBoxView.temperature"/>:-</div><div><fmt:message key="boxView.range"/>:${minTemperature}-${maxTemperature}℃</div>
</div>
<div class="col-md-6">
<div id="smdstatus"></div>
<div id="clientMsg"></div>
</div>
<div class="col-md-3">
<div class="boxhumidity" style="font-size: 16px;margin-top:10px;"><fmt:message key="allBoxView.humidity"/>:-</div><div><fmt:message key="boxView.range"/>:${minHumidity}-${maxHumidity}%</div>
</div>
<div class="col-md-12">
<%--<div style="font-size:20px;" id="doorStatus"></div>--%>
</div>
</div>
<div class="col-md-2">
<div class="col-md-12 bg-blue sm-btn-box" onclick="showPutInWindow('2')">
<div><fmt:message key="2 号 门"/></div>
<div><fmt:message key="开门扫码入库"/></div>
</div>
</div>
</div>
<div class="row">
<%--<div class="col-md-4">--%>
<%--<button class="btn yellow" id="checkoutBtn">--%>
<%--<i class="fa fa-upload"></i><fmt:message key="storagePosFind.outSelect"/></button>--%>
<%--</div>--%>
<div class="col-md-12">
<input type="text" class="form-control" id="searchText" placeholder="搜索"/>
</div>
<div class="col-md-12 col-sm-12">
<!-- BEGIN EXAMPLE TABLE PORTLET-->
<div class="portlet box blue">
<div class="portlet-title">
<div class="caption">
${storage.name}
</div>
<div class="actions">
<%--<button type="button" class="btn btn-fit-height yellow" onclick="showPartNumbers();">--%>
<%--<i class="fa fa-sign-out"></i><fmt:message key="button.checkout"/>--%>
<%--</button>--%>
</div>
</div>
<div class="portlet-body">
<div class="table-scrollable" style="height:600px;">
<table class="table table-striped table-hover table-bordered no-footer" role="grid" aria-describedby="sample_editable_1_info" id="list">
<thead>
<tr role="row">
<th><fmt:message key="checkOut.pos"/></th>
<%--<th><fmt:message key="尺寸"/></th>--%>
<th><fmt:message key="物料"/></th>
<%--<th><fmt:message key="操作"/></th>--%>
</tr>
</thead>
<tbody class="dataTables">
<c:forEach items="${storagePosList}" var="pos">
<tr>
<td>${pos.posName}</td>
<%--<td>${pos.sizeStr}</td>--%>
<td>
<div class="row theItems" id="${pos.id}">
</div>
</td>
<%--<td>--%>
<%--<button class="btn green" onclick=outBoxForPutIn("${pos.id}")><i class="fa fa-download"></i><fmt:message key="出仓入库"/></button>--%>
<%--</td>--%>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
<!-- END EXAMPLE TABLE PORTLET-->
</div>
</div>
<div id="putInWindow" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:60%;margin-left:20%;">
<div class="modal-content">
<div class="modal-header bg-green">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="font-weight: 500;"><span><fmt:message key="扫码入库"/></span>: <span id="doorTitle"></span></h4>
</div>
<div class="modal-body" style="height: 290px;">
<div class="row">
<div class="col-md-12">
<span class="help-block red" id="boxMsg"></span>
</div>
<div class="col-md-12" >
<input type="hidden" id="doorInfo"/>
<input type="text" class="form-control" id="boxCode" placeholder="料箱条码"/>
<span class="help-block red"></span>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn default"><fmt:message key="关闭"/></button>
</div>
</div>
</div>
</div>
<div id="operateWindow" class="modal fade" tabindex="-1" data-backdrop="static" data-keyboard="false">
<div class="modal-dialog" style="margin-top: 10%;width:60%;margin-left:20%;">
<div class="modal-content">
<div class="modal-header bg-green" id="operateHead">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="font-weight: 500;"><span id="operateTitle"><fmt:message key="库位"/></span>: <span id="currentOperatePos">123</span></h4>
</div>
<div class="modal-body" style="height: 290px;">
<div class="row">
<div class="col-md-12">
<span class="help-block red" id="msg"></span>
</div>
<div class="col-md-12">
<input type="text" class="form-control" id="scan-code" placeholder="扫码或填写要放入的物料信息"/>
</div>
<div class="col-md-12">
<div class="table-scrollable" style="height:400px;">
<table class="table table-striped table-hover table-bordered no-footer" role="grid" aria-describedby="sample_editable_1_info" id="list">
<thead>
<tr role="row">
<th></th>
<th><fmt:message key="barcode.barcode"/></th>
<th><fmt:message key="barcode.partNumber"/></th>
<th><fmt:message key="数量"/></th>
</tr>
</thead>
<tbody class="posTable" id="putInExtendPosList">
<tr role="row">
<td>1</td>
<td>234</td>
<td>ABC</td>
<td>3</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" onclick="exePutIn()" class="btn green"><fmt:message key="关门并回库"/></button>
<button type="button" data-dismiss="modal" class="btn default"><fmt:message key="关门"/></button>
</div>
</div>
</div>
</div>
<fmt:message key="storage.status" var="currentStatus"/>
<fmt:message key="storage.status.1" var="status_1"/>
<fmt:message key="storage.status.2" var="status_2"/>
<fmt:message key="storage.status.3" var="status_3"/>
<fmt:message key="storage.status.4" var="status_4"/>
<fmt:message key="storage.status.5" var="status_5"/>
<fmt:message key="storage.status.6" var="status_6"/>
<fmt:message key="storage.status.7" var="status_7"/>
<fmt:message key="storage.status.8" var="status_8"/>
<fmt:message key="storage.status.9" var="status_9"/>
<fmt:message key="storage.status.10" var="status_10"/>
<fmt:message key="storage.status.11" var="status_11"/>
<fmt:message key="storage.status.12" var="status_12"/>
<fmt:message key="storage.status.13" var="status_13"/>
<fmt:message key="sotrage.status.999" var="status_999"/>
<fmt:message key="storage.status" var="boxStatus_label"/>
<fmt:message key="inOutList.in" var="in_label"/>
<fmt:message key="inOutList.out" var="out_label"/>
<fmt:message key="dataLog.orderSource" var="source_label"/>
<fmt:message key="allBoxView.temperature" var="temperature_label"/>
<fmt:message key="allBoxView.humidity" var="humidity_label"/>
<fmt:message key="boxView.taskCancel" var="taskCancel_label"/>
<fmt:message key="boxView.taskExcuting" var="taskExcuting_label"/>
<fmt:message key="boxView.taskFinished" var="taskFinished_label"/>
<fmt:message key="boxView.taskWaiting" var="taskWaiting_label"/>
<fmt:message key="boxView.cancelTask" var="cancelTask_label"/>
<fmt:message key="allBoxView.msg.cancelMsg" var="cancel_msg"/>
<fmt:message key="allBoxView.msg.cancelFinished" var="cancelFinished_msg"/>
<c:set var="scripts" scope="request">
<script type="text/javascript">
Lobibox.notify.DEFAULTS = $.extend({}, Lobibox.notify.DEFAULTS, {
size: 'mini',
closeOnClick: false,
sound: false,
delay: false,
position: 'bottom right',
});
//FormEditable.init();
$("#searchText").on('input propertychange',function(){
var searchText = $("#searchText").val();
$("#list tr").each(function(){
var needShow = false;
if($(this).text().indexOf(searchText) >=0){
$(this).show();
}else{
$(this).hide();
}
});
});
listNotEmpty = function(){
var str= "";
$("[name=posIds]").each(function(){
if($(this).attr("checked")){
str+=$(this).val()+";";
}
});
var searchText = $("#searchText").val();
if(str != "" || searchText !="") {
//有选择的暂时不刷新
return;
}
$.post("${ctx}/service/store/xl/storagePosList", {cid: '${show}'}, function (data) {
$(".theItems").html("");
for(var item in data){
var barcodeObj = data[item].barcode;
if(barcodeObj){
partNumber = barcodeObj.partNumber;
amount = barcodeObj.amount;
}else{
checkBox = "";
}
var alarmClass = "";
if(barcodeObj.willExpired){
alarmClass = "redBorder";
}else if(barcodeObj.expired){
alarmClass = "bg-red";
}
var itemHtml = '<div class="col-lg-3 col-md-3 col-sm-6 col-xs-12" onclick="checkout(\''+data[item].id+'\');">' +
'<div class="bg-blue-madison partnumber-box '+alarmClass+'">'+partNumber+'<br>'+amount+'</div>' +
'</div>';
$("#"+data[item].hostPosId).append(itemHtml);
}
});
}
outBoxForPutIn = function(posId){
$.post("${ctx}/service/store/xl/outBoxForPutIn", {pid: posId}, function (data) {
//showMsg("",data);
showMsg(data);
});
};
function checkout(posId) {
$.post("${ctx}/service/store/xl/exeOut", {cid: '${show}', pid: posId}, function (data) {
showMsg(data);
});
}
cancelTask = function(taskToClose){
Lobibox.confirm({
title: "${msg_title}",
msg: "${cancel_msg}",
callback: function ($this, type, ev) {
if(type == 'yes'){
$.post("${ctx}/service/store/cancelTask", {tid: taskToClose.$options["taskId"]}, function (data) {
if(data){
Lobibox.alert('success', //AVAILABLE TYPES: "error", "info", "success", "warning"
{
msg: "${cancelFinished_msg}"
});
}
});
}
}
});
};
<%--$(".sm-btn-box").click(function(){--%>
<%--if($(this).css("cursor") == "pointer"){--%>
<%--var opKey = $(this).attr("id");--%>
<%--$.post("${ctx}/service/store/saveOp", {opKey: opKey, cid: '${show}', opValue:'doit'}, function (data) {--%>
<%--waitting();--%>
<%--});--%>
<%--}--%>
<%--});--%>
var allTasks = {};
function updateTasks(){
//任务列表
$.post("${ctx}/service/store/tasks", {cid: '${show}'}, function (data) {
var newTasks = [];
var cidTasks = allTasks["all"];
if(!cidTasks){
cidTasks={};
}
for(var item in data){
var taskId = data[item].id;
var partNumber = data[item].partNumber;
var posStr = data[item].posStr;
var barcode = data[item].barcode
newTasks.push(taskId);
var options = {};
//入库
var showStr = posStr+"${in_label}"+ partNumber + "["+barcode+"]";
var status = data[item].status.toLowerCase();
options['status'] = status;
options['showClass'] = 'label-'+status;
options['taskId'] = taskId;
options['barcode'] = barcode;
options['num'] = data[item].num;
options['icon']='fa fa-database';
if(data[item].type == 2){//出库
options['icon']='fa fa-sign-out';
showStr = posStr+"${out_label}"+ partNumber + "["+barcode+"]";
}
//options['onClick']= modifyClick;
var statusMsg ="["+status+"]";
var operate = '';
if(data[item].cancel){
statusMsg ="[${taskCancel_label}]";
} else if(data[item].executing){
statusMsg ="[${taskExcuting_label}]";
options['onClose']= cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else if(data[item].finished){
statusMsg ="[${taskFinished_label}]";
}else if(data[item].wait){
statusMsg ="[${taskWaiting_label}]";
options['onClose']=cancelTask;
operate = '<a class="btn btn-xs default" href="#" onclick=cancelTask('+data[item].id+');><i class="fa fa-trash-o"></i> ${cancelTask_label} </a>';
}else{
//options['onClose']=hideTask;
}
var sourceStr = "";
if(data[item].sourceName){
sourceStr = "<br/>${source_label} " + data[item].sourceStr;
}
options['msg']= showStr + statusMsg + sourceStr;
var task = cidTasks[taskId];
if(!task){
cidTasks[taskId] = Lobibox.notify('success', options);
}else{
if(status != task.$options["status"]){
task.remove();
delete cidTasks[taskId];
cidTasks[taskId] = Lobibox.notify('success', options);
}
}
}
for(var taskKey in cidTasks){
if(newTasks.indexOf(taskKey) < 0){
var task = cidTasks[taskKey];
task.remove();
delete cidTasks[taskKey];
}
}
allTasks["all"] = cidTasks;
});
}
var statusMsg={
"1":"${status_1}",
"2":"${status_2}",
"3":"${status_3}",
"4":"${status_4}",
"5":"${status_5}",
"6":"${status_6}",
"7":"${status_7}",
"8":"${status_8}",
"9":"${status_9}",
"10":"${status_10}",
"11":"${status_11}",
"12":"${status_12}",
"13":"${status_13}",
"14":"${status_14}",
"15":"${status_15}",
"16":"${status_16}",
"17":"${status_17}",
"18":"${status_18}",
"19":"${status_19}",
"20":"${status_20}",
"21":"${status_21}",
"22":"${status_22}",
"999":"${status_999}"
};
function flushStatus(){
$.get('${ctx}/service/store/status?cid=${show}', function (statusBean) {
if(statusBean && statusBean.boxStatus["1"]){
var boxStatusBean = statusBean.boxStatus["1"];
var statusTxt = statusMsg[boxStatusBean.status];
$("#smdstatus").html("${boxStatus_label}: ["+statusTxt+"]");
var color = "green";
if(statusBean.status == 2 || statusBean.status == 3 || statusBean.status == 4 || statusBean.status == 5){
color = "red";
}
$(".boxtemperature").html("${temperature_label}:"+boxStatusBean.temperature+"℃");
$(".boxhumidity").html("${humidity_label}:"+boxStatusBean.humidity+"%");
$("#smdstatus").attr("class","smdstatus " + color);
$("#clientMsg").html(statusBean.msg);
}else{
var statusTxt = statusMsg["999"];
$("#smdstatus").html("${boxStatus_label}: ["+statusTxt+"]");
$("#smdstatus").attr("class","smdstatus red");
$("#clientMsg").html("");
}
});
}
function flushCurrentTask(){
$.get('${ctx}/service/store/xl/currentTask?cid=${show}', function (data) {
if(data){
var task = data.currentTask;
if(!task){
return;
}
var extendPosList = data.extendPosList;
$("#currentOperatePos").text(task.posName);
showOperateWindow(task, extendPosList);
}else{
$("#operateWindow").modal("hide");
}
});
}
exePutIn = function(){
$.post("${ctx}/service/store/xl/exePutIn", {cid: '${show}'}, function (data) {
//$("#operateWindow").modal("hide");
});
};
$('#operateWindow').on('hide.bs.modal', function () {
//入库界面关闭.
$.get('${ctx}/service/store/xl/closeOperateWindow?cid=${show}', function (data) {
$("#scan-code").val("");
$("#msg").html("");
});
})
function showPutInWindow(door){
$.post("${ctx}/service/store/saveOp", {opKey: "openDoor", cid: '${show}', opValue:door}, function (data) {
$("#boxMsg").text("");
$("#boxCode").text("");
$("#doorInfo").val(door);
$("#doorTitle").text(door + "号门");
$("#putInWindow").modal("show");
$("#boxCode").focus();
});
}
$("#boxCode").change(function () {
var doorInfo = $("#doorInfo").val();
var posValue = $(this).val();
$.post("${ctx}/service/store/xl/putInToPos", {cid: '${show}',posName:posValue, door:doorInfo}, function (data) {
if(data){
$("#boxMsg").text(data);
}else{
$("#putInWindow").modal("hide");
}
});
});
function showOperateWindow(task, extendPosList){
if(task.putInTask){
//入库任务
$("#operateHead").attr("class","modal-header bg-green-haze");
$("#operateTitle").text(task.subSourceId+"号门入库");
}else{
$("#operateHead").attr("class","modal-header bg-yellow");
$("#operateTitle").text("出库");
}
$("#putInExtendPosList").html("");
for(i in extendPosList){
var barcodeObj = extendPosList[i].barcode;
if(!extendPosList[i].enabled || barcodeObj == null){
continue;
}
var index = parseInt(i) + 1;
var barcode = barcodeObj.barcode;
var partNumber = barcodeObj.partNumber;
var amount = barcodeObj.amount;
var hasOutTaskClass = "";
var hasOutTask = !extendPosList[i].used;
if(hasOutTask){
hasOutTaskClass = "bg-green";
}
var tdStr =
"<td>"+index+"</td>" +
"<td>"+barcode+"</td>"+
"<td>"+partNumber+"</td>" +
"<td>"+amount+"</td>";
var trStr = "<tr class='"+hasOutTaskClass+"'>" + tdStr+ "</tr>";
$("#putInExtendPosList").append(trStr);
}
$("#operateWindow").modal("show");
$("#scan-code").focus();
}
function showOpResult(id, msg){
if(id == ""){
return;
}
var msgDocument = $("#"+id);
if(msg == ""){
msgDocument.attr("class","");
msgDocument.html(" ");
}else{
var error = true;
if(msg.indexOf("OK") == 0){
error = false;
msg = msg.substr(2);
}
if(error){
msgDocument.attr("class","help-block red");
}else{
msgDocument.attr("class","help-block green");
}
msgDocument.html(msg);
}
}
$("#scan-code").change(function () {
var codeValue = $(this).val();
var currentOperatePos = $("#currentOperatePos").text();
if(codeValue != ""){
$.post("${ctx}/service/store/xl/operatePos", {cid: '${show}', code: codeValue, pos:currentOperatePos}, function (data) {
showOpResult("msg",data);
$("#scan-code").val("");
});
}
//showOperateWindow();
});
updateTasks();
listNotEmpty();
//showOperateWindow();
setInterval(function(){
flushStatus();
updateTasks();
listNotEmpty();
flushCurrentTask();
if($("#putInWindow").is(":visible")){
$("#boxCode").focus();
}
}, 1000);
waitting = function(){
Metronic.blockUI({
iconOnly: true,
overlayColor: '#4b8df8'
});
window.setTimeout(function() {
Metronic.unblockUI();
}, 1500);
}
</script>
</c:set>
\ No newline at end of file
\ No newline at end of file
myproject/src/main/webapp/decorators/metro.jsp
查看文件 @
6f69995
...
@@ -241,7 +241,7 @@
...
@@ -241,7 +241,7 @@
<div
class=
"page-footer-inner"
>
<div
class=
"page-footer-inner"
>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
2016
©
<a
href=
"${ctx}/updateHistory.html"
>
SMD BOX
</a>
</div>
</div>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2020.09.
09
</span>
<span
class=
"right"
style=
"color: #a3a3a3;"
>
Version: 2020.09.
17
</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>
...
...
myproject/src/main/webapp/resources/admin/linePositions.csv
查看文件 @
6f69995
位置,优先级,高度,宽度,料仓ID,设备地址,锁地址值,IO灯索引
位置,优先级,高度,宽度,料仓ID,前后轴位置P2,升降轴库位出料前点P5,升降轴库位出料缓冲点P6,升降轴库位入料前点P3,升降轴库位入料缓冲点P4,进出轴库位取料点P4,,,,,
1-1,10,70,500,1,1,1,16
AC1#L1_1_1,1,75,40,1,398000,55000,110000,110000,55000,170000,,,,,1000
1-2,10,70,500,1,1,2,17
AC1#L1_1_2,2,75,40,1,398800,361000,410000,410000,361000,170000,,,,,
1-3,10,70,500,1,1,3,18
AC1#L1_1_3,3,75,40,1,399600,661000,710000,710000,661000,170000,,,,,
1-4,10,70,500,1,1,4,19
AC1#L1_1_4,4,75,40,1,400400,961000,1010000,1010000,961000,170000,,,,,
1-5,10,70,500,1,1,5,20
AC1#L1_1_5,5,75,40,1,401700,1261000,1310000,1310000,1261000,170000,,,,,
2-1,10,70,500,1,1,6,21
AC1#L1_1_6,6,75,40,1,402500,1561000,1610000,1610000,1561000,170000,,,,,
2-2,10,70,500,1,1,7,22
AC1#L1_1_7,7,75,40,1,403300,1861000,1910000,1910000,1861000,170000,,,,,
2-3,10,70,500,1,1,8,23
AC1#L2_1_1,8,75,40,1,680318,55000,110000,110000,55000,170000,,,,,
2-4,10,70,500,1,1,9,24
AC1#L2_1_2,9,75,40,1,681118,361000,410000,410000,361000,170000,,,,,
3-1,10,70,500,1,1,10,25
AC1#L2_1_3,10,75,40,1,681918,661000,710000,710000,661000,170000,,,,,
3-2,10,70,500,1,1,11,26
AC1#L2_1_4,11,75,40,1,682718,961000,1010000,1010000,961000,170000,,,,,
3-3,10,70,500,1,1,12,27
AC1#L2_1_5,12,75,40,1,683518,1261000,1310000,1310000,1261000,170000,,,,,
3-4,10,70,500,1,1,13,28
AC1#L2_1_6,13,75,40,1,684318,1561000,1610000,1610000,1561000,170000,,,,,
3-5,10,70,500,1,1,14,29
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,,,,,
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论