Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 615bb7f2
由
sunke
编写于
2023-02-22 10:06:19 +0800
浏览文件
选项
浏览文件
标签
下载
差异文件
Merge remote-tracking branch 'origin/master'
2 个父辈
1a80e36c
553422f6
显示空白字符变更
内嵌
并排
正在显示
27 个修改的文件
包含
238 行增加
和
72 行删除
src/main/java/com/neotel/smfcore/common/utils/Constants.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
src/main/java/com/neotel/smfcore/core/device/bean/BoxStatusBean.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/ThirdBoxHandler.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/humiture/rest/bean/query/HumitureQueryCriteria.java
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialStockController.java
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosFindCriteria.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.java
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/SysSettingsDto.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/java/com/neotel/smfcore/core/system/util/DbBackupService.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronServiceController.java → src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronDeviceController.java
src/main/java/com/neotel/smfcore/custom/micron1053/util/MicronDataCache.java
src/main/resources/messages.properties
src/main/resources/messages_en_US.properties
src/main/resources/messages_ja_JP.properties
src/main/resources/messages_zh_CN.properties
src/main/resources/messages_zh_TW.properties
src/main/java/com/neotel/smfcore/common/utils/Constants.java
查看文件 @
615bb7f
...
...
@@ -148,4 +148,14 @@ public class Constants {
*/
public
static
final
String
CACHE_languageType
=
"CACHE_languageType"
;
/**
* 自动存档间隔Key
*/
public
static
final
String
BACKUP_MONTH_KEY
=
"db.backup.month"
;
/**
* 上次自动存档时间
*/
public
static
final
String
LAST_BACKUP_TIME_KEY
=
"db.backup.lastTime"
;
}
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
查看文件 @
615bb7f
...
...
@@ -247,4 +247,8 @@ public class BarcodeDto implements Serializable {
@ApiModelProperty
(
"第一次入库时间"
)
private
Date
firstPutInDate
;
@ApiModelProperty
(
"入库时间+呆滞日期"
)
private
Date
sluggishTime
;
}
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
615bb7f
...
...
@@ -318,7 +318,8 @@ public class Barcode extends BasePo implements Serializable {
public
void
updateSluggishTime
(
int
sluggishDay
){
if
(
sluggishDay
>
0
){
long
maxTime
=
sluggishDay
*
24
*
60
*
60
*
1000
;
setSluggishTime
(
new
Date
(
putInTime
+
maxTime
));
//使用最后一次入库时间+天数
setSluggishTime
(
new
Date
(
putInDate
.
getTime
()
+
maxTime
));
}
else
{
setSluggishTime
(
null
);
}
...
...
src/main/java/com/neotel/smfcore/core/barcode/utils/CodeResolve.java
查看文件 @
615bb7f
...
...
@@ -95,10 +95,6 @@ public class CodeResolve {
boolean
setSize
=
false
;
Component
component
=
componentManager
.
findByPartNumberAndProvider
(
barcode
.
getPartNumber
(),
barcode
.
getProvider
());
int
validDay
=
0
;
if
(
defaultExpiresDay
!=
null
&&
defaultExpiresDay
>
0
){
validDay
=
defaultExpiresDay
;
}
if
(
component
!=
null
)
{
validDay
=
component
.
getValidDay
();
codeBeanFromRule
.
setShowImg
(
component
.
getShowImg
());
...
...
@@ -122,6 +118,9 @@ public class CodeResolve {
setSize
=
true
;
}
}
if
(
validDay
<=
0
&&
defaultExpiresDay
!=
null
&&
defaultExpiresDay
>
0
){
validDay
=
defaultExpiresDay
;
}
if
((!
setSize
)&&
codeBeanFromRule
.
hasReelSizeInfo
()){
//如果客户端传入的有尺寸,但尺寸不一致,使用上传上来的尺寸
if
(
barcode
.
getHeight
()
!=
codeBeanFromRule
.
getReelHeight
()
||
barcode
.
getPlateSize
()
!=
codeBeanFromRule
.
getReelWidth
()){
...
...
@@ -249,6 +248,9 @@ public class CodeResolve {
Date
produceDate
=
barcodeFromRule
.
getProduceDate
();
if
(
produceDate
!=
null
&&
barcodeFromRule
.
getExpireDate
()
==
null
){
int
validDay
=
component
.
getValidDay
();
if
(
validDay
<=
0
&&
defaultExpiresDay
!=
null
&&
defaultExpiresDay
>
0
){
validDay
=
defaultExpiresDay
;
}
if
(
validDay
>
0
){
log
.
info
(
"设置"
+
barcodeFromRule
.
getBarcode
()+
"的过期时间"
);
Date
expireDate
=
DateUtil
.
addDays
(
produceDate
,
validDay
);
...
...
src/main/java/com/neotel/smfcore/core/device/bean/BoxStatusBean.java
查看文件 @
615bb7f
...
...
@@ -160,7 +160,7 @@ public class BoxStatusBean {
if
(
ObjectUtil
.
isNotEmpty
(
ar
))
{
String
[]
ar2
=
ar
.
split
(
"="
);
if
(
ar2
.
length
==
2
)
{
caMap
.
put
(
ar2
[
0
].
to
Upp
erCase
(),
Integer
.
valueOf
(
ar2
[
1
]));
caMap
.
put
(
ar2
[
0
].
to
Low
erCase
(),
Integer
.
valueOf
(
ar2
[
1
]));
}
}
}
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
615bb7f
...
...
@@ -333,12 +333,12 @@ public class BaseDeviceHandler implements IDeviceHandler {
storagePos
=
storagePosManager
.
getEmptyPosByStorage
(
storage
,
barcode
,
operatingPosIds
);
}
else
{
log
.
info
(
"料仓"
+
storageCid
+
"有出库任务未完成,不允许入库"
);
throw
new
ValidateException
(
"error.storage.outNotEnd"
,
"料仓{0}有出库任务未完成,不允许入库"
,
new
String
[]{
storageCid
});
throw
new
ValidateException
(
"
smfcore.
error.storage.outNotEnd"
,
"料仓{0}有出库任务未完成,不允许入库"
,
new
String
[]{
storageCid
});
}
}
if
(
storagePos
==
null
)
{
throw
new
ValidateException
(
"
error.storage.noPos"
,
storage
.
getName
()
+
"的料格["
+
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()
+
"]已满,无法继续放入"
,
new
String
[]{
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()});
throw
new
ValidateException
(
"
smfcore.error.storage.noPos"
,
"{0}的料格[{1}]已满,无法继续放入"
,
new
String
[]{
storage
.
getName
(),
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()});
}
log
.
info
(
"["
+
barcode
.
getBarcode
()
+
"]寻找到"
+
storage
.
getName
()
+
"的空仓位["
+
storagePos
.
getPosName
()
+
"]"
);
return
storagePos
;
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/ThirdBoxHandler.java
查看文件 @
615bb7f
...
...
@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
import
com.neotel.smfcore.core.storage.bean.UsageItem
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
...
...
@@ -217,16 +218,69 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
}
return
statusBean
;
}
//比较料仓容量,若不一样时返回一个新库位号
protected
StoragePos
UsePosProcess
(
DataLog
task
,
Map
<
String
,
Integer
>
posCapMap
)
{
try
{
if
(
task
==
null
||
(!
task
.
isCheckOutTask
())||
posCapMap
==
null
||
posCapMap
.
size
()<=
0
)
{
return
null
;
}
Storage
storage
=
dataCache
.
getStorage
(
task
.
getCid
());
if
(
storage
==
null
)
{
log
.
error
(
"入库任务完成时库存比对:未找到料仓:"
+
task
.
getCid
());
}
protected
void
thirdBoxFinishedPutIn
(
String
cid
,
Map
<
String
,
Integer
>
posCapMap
,
String
posName
,
String
barcode
,
int
executeTime
)
throws
ValidateException
{
DataLog
task
=
taskService
.
findExecutingTask
(
cid
,
posName
,
barcode
);
String
sizeStr
=
task
.
getW
()
+
"x"
+
task
.
getH
();
UsageItem
item
=
storage
.
getUsageMap
().
getOrDefault
(
sizeStr
,
new
UsageItem
());
int
updateCount
=
posCapMap
.
getOrDefault
(
sizeStr
,
0
);
int
currCount
=
item
.
getTotalCount
()
-
item
.
getUsedCount
();
if
(
currCount
-
1
==
updateCount
)
{
log
.
info
(
"入库任务完成时库存比对:料仓["
+
storage
.
getCid
()
+
"]尺寸["
+
sizeStr
+
"]当前库存["
+
currCount
+
"]上传库存["
+
updateCount
+
"],不更改库位号"
);
//完全相等,不处理
return
null
;
}
else
if
(
currCount
>
updateCount
)
{
log
.
error
(
"入库任务完成时库存比对:料仓["
+
storage
.
getCid
()
+
"]尺寸["
+
sizeStr
+
"]当前库存["
+
currCount
+
"]上传库存["
+
updateCount
+
"],不更改库位号"
);
return
null
;
}
if
(
task
!=
null
&&
task
.
isPutInTask
())
{
//查找实时库存小于当前库存的尺寸
Map
<
String
,
UsageItem
>
currUseMap
=
storage
.
getUsageMap
();
for
(
String
key
:
currUseMap
.
keySet
())
{
item
=
currUseMap
.
get
(
key
);
int
sizeCount
=
posCapMap
.
getOrDefault
(
key
,
0
);
int
sizeEmptyCount
=
item
.
getTotalCount
()
-
item
.
getUsedCount
();
if
(
sizeEmptyCount
>
sizeCount
)
{
Collection
<
String
>
operatingPosIds
=
taskService
.
excludePosIds
();
//使用此尺寸的库位
StoragePos
pos
=
storagePosManager
.
getEmptyPosByStorage
(
storage
,
item
.
getW
(),
item
.
getH
(),
operatingPosIds
);
if
(
pos
==
null
)
{
//对比容量,更新库位号
log
.
info
(
"入库任务完成时库存比对:料仓["
+
storage
.
getCid
()
+
"]新尺寸["
+
key
+
"]当前库存["
+
sizeEmptyCount
+
"]上传库存["
+
sizeCount
+
"],尝试查找空库位失败"
);
}
else
{
log
.
info
(
"入库任务完成时库存比对:料仓["
+
storage
.
getCid
()
+
"]新尺寸["
+
key
+
"]当前库存["
+
sizeEmptyCount
+
"]上传库存["
+
sizeCount
+
"],查找到新库位["
+
pos
.
getPosName
()
+
"],更改任务为新库位"
);
return
pos
;
}
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"入库任务完成时库存比对:料仓["
+
task
.
getCid
()
+
"]id["
+
task
.
getId
()
+
"]条码["
+
task
.
getBarcode
()
+
"]库位号["
+
task
.
getPosName
()
+
"]出错:"
+
ex
.
getMessage
());
}
return
null
;
}
protected
void
thirdBoxFinishedPutIn
(
String
cid
,
Map
<
String
,
Integer
>
posCapMap
,
String
posName
,
String
barcode
,
int
executeTime
)
throws
ValidateException
{
DataLog
task
=
taskService
.
findExecutingTask
(
cid
,
posName
,
barcode
);
if
(
task
!=
null
&&
task
.
isPutInTask
())
{
//对比容量,更新库位号
StoragePos
newPos
=
UsePosProcess
(
task
,
posCapMap
);
if
(
newPos
!=
null
){
log
.
error
(
cid
+
"入仓位["
+
posName
+
"]ReelId["
+
barcode
+
"] 更改库位号为["
+
newPos
.
getPosName
()+
"]"
);
task
.
setPosName
(
newPos
.
getPosName
());
}
if
(
executeTime
>
0
)
{
task
.
setExecuteTime
(
executeTime
);
updatePosExecuteTime
(
task
.
getPosName
(),
executeTime
);
...
...
@@ -245,6 +299,14 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
task
=
taskService
.
findFinishedPutInTask
(
cid
,
posName
,
barcode
);
if
(
task
!=
null
&&
task
.
isPutInTask
())
{
if
(
task
.
isCancel
())
{
//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
//对比容量,更新库位号
StoragePos
newPos
=
UsePosProcess
(
task
,
posCapMap
);
if
(
newPos
!=
null
){
log
.
error
(
cid
+
"入仓位["
+
posName
+
"]ReelId["
+
barcode
+
"]完成,但任务已被取消, 更改库位号为["
+
newPos
.
getPosName
()+
"]"
);
task
.
setPosName
(
newPos
.
getPosName
());
}
if
(
executeTime
>
0
)
{
task
.
setExecuteTime
(
executeTime
);
updatePosExecuteTime
(
task
.
getPosName
(),
executeTime
);
...
...
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
615bb7f
...
...
@@ -103,10 +103,10 @@ public class DataCache {
@PostConstruct
public
void
initialize
()
{
settings
=
getSettings
();
Integer
caWarn
=
getCache
(
Constants
.
CACHE_CapacityWarn
);
codeResolve
.
updateExpiresDay
(
caWarn
);
settings
=
getSettings
();;
initCacheItem
();
Integer
expireDay
=
getCache
(
Constants
.
CACHE_ExpiresDay
);
codeResolve
.
updateExpiresDay
(
expireDay
);
}
private
void
initCacheItem
()
{
...
...
src/main/java/com/neotel/smfcore/core/humiture/rest/bean/query/HumitureQueryCriteria.java
查看文件 @
615bb7f
...
...
@@ -23,6 +23,6 @@ public class HumitureQueryCriteria {
private
String
humitureId
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"createDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH
:mm:ss
"
)
private
BetweenData
<
Date
>
createDate
;
}
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
查看文件 @
615bb7f
...
...
@@ -162,15 +162,14 @@ public class BoxKanbanController {
}
}
boolean
statusOk
=
false
;
Date
lastUpdateTime
=
new
Date
((
new
Date
().
getTime
())
-
10
*
60
*
1000
);
//正常
if
(
criteria
.
getTaskStatus
()
==
1
)
{
if
(
lastUpdateTime
.
before
(
datalog
.
getUpdateDate
())
&&
datalog
.
getStatus
().
equals
(
OP_STATUS
.
EXECUTING
.
name
()))
{
if
(
datalog
.
isNormal
())
{
statusOk
=
true
;
}
}
//异常
else
if
(
criteria
.
getTaskStatus
()
==
2
)
{
if
(
lastUpdateTime
.
after
(
datalog
.
getUpdateDate
())
&&
datalog
.
getStatus
().
equals
(
OP_STATUS
.
EXECUTING
.
name
()))
{
if
(
datalog
.
isAbnormal
())
{
statusOk
=
true
;
}
}
//等待
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/MaterialStockController.java
查看文件 @
615bb7f
...
...
@@ -94,9 +94,12 @@ public class MaterialStockController {
}
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
Criteria
baseCriteria
=
Criteria
.
where
(
"used"
).
is
(
true
);
if
(
criteria
.
getExpireDate
()
!=
null
&&
criteria
.
getExpireDate
().
getFrom
()
!=
null
&&
criteria
.
getExpireDate
().
getTo
()
!=
null
)
{
//根据过滤时间查询
}
else
{
//需要查询已经超过过期日期的物料
baseCriteria
.
and
(
"barcode.expireDate"
).
lte
(
new
Date
());
}
// baseCriteria.and("barcode.sluggishTime").gte(new Date());
query
.
addCriteria
(
baseCriteria
);
...
...
@@ -116,8 +119,12 @@ public class MaterialStockController {
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
Criteria
baseCriteria
=
Criteria
.
where
(
"used"
).
is
(
true
);
if
(
criteria
.
getSluggishTime
()
!=
null
&&
criteria
.
getSluggishTime
().
getFrom
()
!=
null
&&
criteria
.
getSluggishTime
().
getTo
()
!=
null
)
{
//根据过滤时间查询
}
else
{
//需要查询已经过呆滞日期的物料
baseCriteria
.
and
(
"barcode.sluggishTime"
).
exists
(
true
).
lte
(
new
Date
());
}
// baseCriteria.and("barcode.sluggishTime").gte(new Date());
query
.
addCriteria
(
baseCriteria
);
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosFindCriteria.java
查看文件 @
615bb7f
...
...
@@ -18,17 +18,21 @@ public class StoragePosFindCriteria {
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"barcode.putInDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
private
BetweenData
<
Date
>
updateDate
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"barcode.putInDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
private
BetweenData
<
Date
>
putInDate
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"barcode.expireDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd
HH:mm:ss
"
)
private
BetweenData
<
Date
>
expireDate
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"barcode.sluggishTime"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
BetweenData
<
Date
>
sluggishTime
;
@QueryCondition
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
615bb7f
...
...
@@ -45,6 +45,8 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
String
lastPosId
)
throws
ValidateException
;
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
int
size
,
int
height
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
;
List
<
StoragePos
>
findNotEmpty
();
List
<
StoragePos
>
findByStorage
(
String
storageId
);
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
615bb7f
...
...
@@ -421,10 +421,50 @@ public class StoragePosManagerImpl implements IStoragePosManager {
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
if
((!
ObjectUtil
.
isNotEmpty
(
msg
)
)&&
(
pos
!=
null
))
{
Point
targetP
=
PointUtil
.
getPosPoint
(
lastPosId
,
false
);
log
.
info
(
msg
+
"结果:["
+
pos
.
getPosName
()
+
"]["
+
targetP
.
getX
()
+
","
+
targetP
.
getY
()
+
"]"
);
log
.
debug
(
msg
+
"结果:["
+
pos
.
getPosName
()
+
"]["
+
targetP
.
getX
()
+
","
+
targetP
.
getY
()
+
"]"
);
}
return
pos
;
}
@Override
public
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
int
size
,
int
height
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
{
Criteria
c
=
Criteria
.
where
(
"storageId"
).
is
(
storage
.
getId
());
COMPATIBLE_TYPE
compatibleType
=
storage
.
getCompatibleType
();
if
(
compatibleType
==
COMPATIBLE_TYPE
.
EXACT_MATCH
)
{
//完全匹配
c
=
c
.
and
(
"w"
).
is
(
size
).
and
(
"h"
).
is
(
height
);
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
FULLY_COMPATIBLE
)
{
//同厚度兼容
c
=
c
.
and
(
"w"
).
gte
(
size
).
and
(
"h"
).
gte
(
height
);
//除7寸外,完全兼容
}
else
if
(
compatibleType
==
COMPATIBLE_TYPE
.
SIZE_COMPATIBLE
)
{
//同尺寸兼容
c
=
c
.
and
(
"w"
).
is
(
size
).
and
(
"h"
).
gte
(
height
);
//宽度等于料盘宽度,高度大于等于料盘高度
}
c
=
c
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"used"
).
is
(
false
);
//未使用
//去除的仓位
if
(
excludePosIds
!=
null
&&
!
excludePosIds
.
isEmpty
())
{
c
=
c
.
and
(
"id"
).
nin
(
excludePosIds
);
}
Query
query
=
new
Query
(
c
);
String
msg
=
""
;
// if (lastPosId == null || lastPosId.equals("")) {
//优先放入最合适的位置(根据尺寸),相同尺寸按优先级排序
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"w"
).
and
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"h"
)).
and
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"priority"
)));
// } else {
// Point point = PointUtil.getPosPoint(lastPosId, false);
// query.addCriteria(Criteria.where("coordinate").nearSphere(point));
// msg += "getEmptyPosByStorage 根据就近坐标查询[" + lastPosId + "][" + point.getX() + "," + point.getY() + "]";
// }
StoragePos
pos
=
storagePosDao
.
findOne
(
query
);
return
pos
;
}
@Override
public
List
<
StoragePos
>
findNotEmpty
(){
return
findNotEmptyByStorageId
(
null
);
...
...
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.java
查看文件 @
615bb7f
...
...
@@ -18,6 +18,7 @@ import com.neotel.smfcore.core.system.rest.bean.dto.SettingsDto;
import
com.neotel.smfcore.core.system.rest.bean.dto.SysSettingsDto
;
import
com.neotel.smfcore.core.system.rest.bean.mapstruct.SettingsMapper
;
import
com.neotel.smfcore.core.system.service.po.Settings
;
import
com.neotel.smfcore.core.system.util.DbBackupService
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
com.neotel.smfcore.security.rest.bean.dto.MenuDto
;
...
...
@@ -57,6 +58,10 @@ public class SettingsController {
@Autowired
private
final
FileProperties
properties
;
@Autowired
private
DbBackupService
dbBackupService
;
/**
* 当前版本
*/
...
...
@@ -74,12 +79,14 @@ public class SettingsController {
Integer
sluggishDay
=
dataCache
.
getCache
(
Constants
.
CACHE_SluggishDay
);
Integer
expiresDay
=
dataCache
.
getCache
(
Constants
.
CACHE_ExpiresDay
);
Integer
caWarn
=
dataCache
.
getCache
(
Constants
.
CACHE_CapacityWarn
);
Integer
backUpMonth
=
dataCache
.
getCache
(
Constants
.
BACKUP_MONTH_KEY
);
SysSettingsDto
dto
=
new
SysSettingsDto
();
dto
.
setStartJob
(
startJob
);
dto
.
setStopOut
(
stopOut
);
dto
.
setSluggishDay
(
sluggishDay
);
dto
.
setExpiresDay
(
expiresDay
);
dto
.
setCapacityWarn
(
caWarn
);
dto
.
setBackUpMonth
(
backUpMonth
);
return
dto
;
}
...
...
@@ -92,8 +99,9 @@ public class SettingsController {
dataCache
.
updateCache
(
Constants
.
CACHE_SluggishDay
,
sysSettingsDto
.
getSluggishDay
());
dataCache
.
updateCache
(
Constants
.
CACHE_ExpiresDay
,
sysSettingsDto
.
getExpiresDay
());
dataCache
.
updateCache
(
Constants
.
CACHE_CapacityWarn
,
sysSettingsDto
.
getCapacityWarn
());
dataCache
.
updateCache
(
Constants
.
BACKUP_MONTH_KEY
,
sysSettingsDto
.
getBackUpMonth
());
log
.
info
(
"更改系统设置:stopout="
+
sysSettingsDto
.
isStopOut
()
+
",stopjob="
+
sysSettingsDto
.
isStartJob
()+
",sluggishDay="
+
sysSettingsDto
.
getSluggishDay
()
+
",expiresDay="
+
sysSettingsDto
.
getExpiresDay
()+
",capacityWarn="
+
sysSettingsDto
.
getCapacityWarn
());
+
",expiresDay="
+
sysSettingsDto
.
getExpiresDay
()+
",capacityWarn="
+
sysSettingsDto
.
getCapacityWarn
()
+
",backUpMonth="
+
sysSettingsDto
.
getBackUpMonth
()
);
return
ResultBean
.
newOkResult
(
"保存成功"
);
}
...
...
@@ -173,7 +181,8 @@ public class SettingsController {
if
(
orderSetting
.
getOrderDir
().
toLowerCase
().
startsWith
(
"smb"
)){
}
else
{
throw
new
ValidateException
(
"smfcore.enterCorrectFolder"
,
"请输入正确的文件夹"
);
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.enterCorrectFolder"
,
"请输入正确的文件夹"
);
// throw new ValidateException("smfcore.enterCorrectFolder", "请输入正确的文件夹" );
}
}
}
...
...
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
查看文件 @
615bb7f
...
...
@@ -234,7 +234,7 @@ public class TaskController {
if
(
task
.
isCancel
()||
task
.
isFinished
()||
task
.
isEnd
()){
throw
new
ValidateException
(
"smfcore.taskHasEnd"
,
"任务{0}已取消或已结束"
,
new
String
[]{
task
.
getPosName
()}
);
}
taskService
.
cancelTask
(
taskId
);
taskService
.
cancelTask
AndDisPos
(
taskId
);
}
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
...
...
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/SysSettingsDto.java
查看文件 @
615bb7f
...
...
@@ -24,4 +24,7 @@ public class SysSettingsDto implements Serializable {
@ApiModelProperty
(
"容量预警"
)
private
Integer
capacityWarn
=
0
;
@ApiModelProperty
(
"备份时间"
)
private
Integer
backUpMonth
=
0
;
}
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
615bb7f
...
...
@@ -417,11 +417,22 @@ public class DataLog extends BasePo implements Serializable {
* 判断任务是否异常,执行中,且10分钟未更新的认为异常
*/
public
boolean
isAbnormal
(){
if
(
isExecuting
()
){
if
(
isExecuting
()
||
isInLine
()||
isInRobot
()||
isBoxdoor
()||
isOutBox
()
){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
>
10
*
60
*
1000
){
return
true
;
}
}
return
false
;
}
/**
* 是否正常执行中,执行中,且10分钟内有更新
*/
public
boolean
isNormal
(){
if
(
isExecuting
()
||
isInLine
()||
isInRobot
()||
isBoxdoor
()
||
isOutBox
()){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
<=
10
*
60
*
1000
){
return
true
;
}
}
return
false
;
}
}
src/main/java/com/neotel/smfcore/core/system/util/DbBackupService.java
查看文件 @
615bb7f
package
com
.
neotel
.
smfcore
.
core
.
system
.
util
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.inList.service.po.InList
;
...
...
@@ -36,15 +37,6 @@ import java.util.concurrent.TimeUnit;
@Service
public
class
DbBackupService
{
/**
* 自动存档间隔Key
*/
private
String
BACKUP_MONTH_KEY
=
"db.backup.month"
;
/**
* 上次自动存档时间
*/
private
String
LAST_BACKUP_TIME_KEY
=
"db.backup.lastTime"
;
@Autowired
DataCache
dataCache
;
...
...
@@ -62,10 +54,10 @@ public class DbBackupService {
log
.
info
(
"开启数据库定时存档任务"
);
while
(
true
){
try
{
Integer
dbBackupMonth
=
dataCache
.
getCache
(
BACKUP_MONTH_KEY
);
dbBackupMonth
=
1
;
Integer
dbBackupMonth
=
dataCache
.
getCache
(
Constants
.
BACKUP_MONTH_KEY
);
//
dbBackupMonth = 1;
if
(
dbBackupMonth
!=
null
&&
dbBackupMonth
>
0
){
Date
lastBackupTime
=
dataCache
.
getCache
(
LAST_BACKUP_TIME_KEY
);
Date
lastBackupTime
=
dataCache
.
getCache
(
Constants
.
LAST_BACKUP_TIME_KEY
);
boolean
needBackup
=
false
;
if
(
lastBackupTime
==
null
){
needBackup
=
true
;
...
...
@@ -99,12 +91,11 @@ public class DbBackupService {
return
false
;
}
processing
=
true
;
Integer
dbBackupMonth
=
dataCache
.
getCache
(
BACKUP_MONTH_KEY
);
Integer
dbBackupMonth
=
dataCache
.
getCache
(
Constants
.
BACKUP_MONTH_KEY
);
if
(
dbBackupMonth
==
null
){
dbBackupMonth
=
12
;
//默认备份12个月前的数据
dataCache
.
updateCache
(
BACKUP_MONTH_KEY
,
dbBackupMonth
);
dataCache
.
updateCache
(
Constants
.
BACKUP_MONTH_KEY
,
dbBackupMonth
);
}
dataCache
.
updateCache
(
LAST_BACKUP_TIME_KEY
,
new
Date
());
backupTable
(
dbBackupMonth
,
DataLog
.
class
,
Humiture
.
class
,
...
...
@@ -115,6 +106,7 @@ public class DbBackupService {
Message
.
class
,
AlarmInfo
.
class
);
dataCache
.
updateCache
(
Constants
.
LAST_BACKUP_TIME_KEY
,
new
Date
());
processing
=
false
;
return
true
;
}
...
...
@@ -151,5 +143,4 @@ public class DbBackupService {
}
}
}
}
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
615bb7f
...
...
@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.device.bean.StatusBean;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
...
...
@@ -243,6 +244,29 @@ public class TaskService {
return
cancelTask
(
task
);
}
public
boolean
cancelTaskAndDisPos
(
String
taskId
)
{
DataLog
task
=
dataLogDao
.
findOneById
(
taskId
);
boolean
result
=
cancelTask
(
task
);
if
(
result
)
{
if
(
task
.
isPutInTask
())
{
//禁用库位
StoragePos
pos
=
storagePosManager
.
get
(
task
.
getPosId
());
if
(
pos
!=
null
)
{
pos
.
setEnabled
(
false
);
storagePosManager
.
save
(
pos
);
dataCache
.
updateDisablePos
(
pos
);
log
.
info
(
"任务["
+
task
.
getId
()
+
"] posName["
+
task
.
getPosName
()
+
"] Reel Id["
+
task
.
getBarcode
()
+
"]取消成功,禁用库位["
+
task
.
getPosName
()
+
"]"
);
DeviceMessageUtil
.
addEnabledPosMessage
(
pos
,
SecurityUtils
.
getCurrentUsername
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
storage
!=
null
)
{
dataCache
.
reloadStorage
(
storage
,
storage
.
getCid
());
}
}
}
}
return
result
;
}
/**
* 清除某个已经完成或取消的任务
*/
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/controller/Micron
Ser
viceController.java
→
src/main/java/com/neotel/smfcore/custom/micron1053/controller/Micron
De
viceController.java
查看文件 @
615bb7f
...
...
@@ -14,13 +14,15 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@RestController
@Api
(
tags
=
"1053:设备端接口"
)
@RequestMapping
(
"/rest/micron/
ser
vice"
)
public
class
Micron
Ser
viceController
{
@RequestMapping
(
"/rest/micron/
de
vice"
)
public
class
Micron
De
viceController
{
@Autowired
private
TaskService
taskService
;
...
...
@@ -44,38 +46,28 @@ public class MicronServiceController {
}
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
" 获取
治具任务数量,料盘
任务数量 "
)
@ApiOperation
(
" 获取任务数量 "
)
@PostMapping
(
value
=
"/getTaskCount"
)
@ResponseBody
@AnonymousAccess
public
ResultBean
getTaskCount
(
HttpServletRequest
request
)
{
String
type
=
request
.
getParameter
(
"type"
);
int
count
=
0
;
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
dataLogs
// String type = request.getParameter("type");
List
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
// String[] types=new String[]{"pizzaBox","pcb","tray","reel"};
Map
<
String
,
Integer
>
resultMap
=
new
HashMap
<>();
for
(
DataLog
task
:
dataLogs
)
{
String
taskType
=
MicronDataCache
.
GetMaterialType
(
task
);
if
(
taskType
.
toLowerCase
().
equals
(
type
.
toLowerCase
())){
count
++;
String
taskType
=
MicronDataCache
.
GetMaterialType
(
task
);
String
key
=
taskType
+
"_out"
;
if
(
task
.
isPutInTask
())
{
key
=
taskType
+
"_in"
;
}
int
count
=
resultMap
.
getOrDefault
(
key
,
0
)
+
1
;
resultMap
.
put
(
key
,
count
);
}
//SBSH1,SBSH2,SBDH1-1,SBDH1-2,SBDH2-1.SBDH2-2这些都是Pizza box,对应的料架是M01开头的,每个料架可以放5盘料
//SBDH3-1里面有pcb,对应的料架是M02开头,每个料架可以放5盘料。
// tray对应的料架是M03开头,每个料架可以放4盘料,
// 还有reel料盘尺寸是13*44,13*56,13*72
//SBDH3-2里面是pcb物料
// 310*80是PCB
// 330*120是tray
// 13*72的入13*44,13*56,13*72的料盘
//pizzaBox (料架M01,每个料架5盘) SBSH1,SBSH2,SBDH1-1,SBDH1-2,SBDH2-1.SBDH2-2
//pcb (料架M02,每个料架5盘) SBDH3-2,SBDH3-1部分
//tray (料架M03,每个料架4盘) SBDH3-1 里
//reel (料架M01,每个料架5盘) SBDH3-1 13*44,13*56,13*72
return
ResultBean
.
newOkResult
(
count
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/util/MicronDataCache.java
查看文件 @
615bb7f
...
...
@@ -84,7 +84,7 @@ public class MicronDataCache {
//reel (料架M01,每个料架5盘) SBDH3-1 13*44,13*56,13*72
}
public
static
String
GetMaterialType
(
DataLog
dataLog
){
return
REEL
;
return
GetMaterialType
(
dataLog
.
getCid
(),
dataLog
.
getStorageId
(),
dataLog
.
getW
(),
dataLog
.
getH
())
;
}
public
static
String
getShelfType
(
String
materialType
){
if
(
materialType
.
equals
(
PIZZABOX
)){
...
...
src/main/resources/messages.properties
查看文件 @
615bb7f
...
...
@@ -302,6 +302,7 @@ smfcore.ml=MI1
smfcore.ml2
=
MI2
smfcore.diagnosis
=
Diagnosis
smfcore.helps
=
Help
smfcore.error.storage.noPos
=
{0}
\u7684\u6599\u
683C[{1}]
\u
5DF2
\u
6EE1,
\u
65E0
\u
6CD5
\u
7EE7
\u
7EED
\u
653E
\u5165
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
...
...
src/main/resources/messages_en_US.properties
查看文件 @
615bb7f
...
...
@@ -301,3 +301,4 @@ smfcore.ml=MI1
smfcore.ml2
=
MI2
smfcore.diagnosis
=
Diagnosis
smfcore.helps
=
Help
smfcore.error.storage.noPos
=
{0}'s cell [{1}] is full and cannot be added
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
615bb7f
...
...
@@ -298,3 +298,4 @@ smfcore.ml=MI1
smfcore.ml2
=
MI2
smfcore.diagnosis
=
Diagnosis
smfcore.helps
=
Help
smfcore.error.storage.noPos
=
{0}
\u7684\u6599\u
683C[{1}]
\u
5DF2
\u
6EE1,
\u
65E0
\u
6CD5
\u
7EE7
\u
7EED
\u
653E
\u5165
src/main/resources/messages_zh_CN.properties
查看文件 @
615bb7f
...
...
@@ -298,3 +298,4 @@ smfcore.ml=MI1
smfcore.ml2
=
MI2
smfcore.diagnosis
=
Diagnosis
smfcore.helps
=
Help
smfcore.error.storage.noPos
=
{0}
\u7684\u6599\u
683C[{1}]
\u
5DF2
\u
6EE1,
\u
65E0
\u
6CD5
\u
7EE7
\u
7EED
\u
653E
\u5165
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
615bb7f
...
...
@@ -299,3 +299,4 @@ smfcore.ml=MI1
smfcore.ml2
=
MI2
smfcore.diagnosis
=
Diagnosis
smfcore.helps
=
Help
smfcore.error.storage.noPos
=
{0}
\u7684\u6599\u
683C[{1}]
\u
5DF2
\u
6EFF,
\u7121\u
6CD5
\u
7E7C
\u
7E8C
\u
653E
\u5165
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论