Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a216d74e
由
LN
编写于
2021-10-22 13:26:33 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.工单增加数量修改,套料出库,尾料出库,关闭工单接口
2.库位查询增加是否启用搜索 2.个人资料修改,密码修改,密码重置功能
1 个父辈
97a874f1
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
346 行增加
和
88 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/common/utils/Constants.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.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/security/rest/UserController.java
src/main/java/com/neotel/smfcore/security/service/manager/impl/UserManagerImpl.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/init/DataInitManager.java
查看文件 @
a216d74
...
...
@@ -206,9 +206,11 @@ public class DataInitManager {
Menu
menuOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"checkOut"
,
"查找出库"
,
1
,
"singleOuput"
,
"neolight/singleOuput/index"
,
""
,
0
,
"export1"
);
Menu
celueOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"tacticsOuput"
,
"策略出库"
,
1
,
"tacticsOuput"
,
"neolight/tacticsOuput/index"
,
""
,
0
,
"workOrder"
);
Menu
groupOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"labelOuput"
,
"物料分组"
,
1
,
"labelOuput"
,
"neolight/labelOuput/index"
,
""
,
0
,
"export1"
);
Menu
manualOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"manualOut"
,
"手动出库"
,
1
,
"manualOut"
,
"neolight/manualOut/index"
,
""
,
0
,
"export1"
);
celueOut
.
setHidden
(
true
);
groupOut
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
menuOut
,
celueOut
,
groupOut
));
manualOut
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
menuOut
,
celueOut
,
groupOut
,
manualOut
));
//设置:料仓管理,菜单管理
Menu
poutSet
=
Menu
.
CreatePMenu
(
"设置"
,
30
,
"system"
,
2
,
"system"
);
...
...
src/main/java/com/neotel/smfcore/common/utils/Constants.java
查看文件 @
a216d74
...
...
@@ -10,6 +10,8 @@ public class Constants {
* 超级管理员用户名
*/
public
static
final
String
SUPER_USERNAME
=
"admin"
;
public
static
final
String
USER_DEFAULTP_PWD
=
"123456"
;
/**
* Assets Version constant
*/
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
a216d74
...
...
@@ -23,6 +23,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import
com.neotel.smfcore.core.system.listener.ITaskListener
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
javafx.concurrent.Task
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -60,9 +61,13 @@ public class LiteOrderCache implements ITaskListener {
@Override
public
void
onTaskStatusChange
(
DataLog
task
)
{
try
{
finishedOrderTask
(
task
);
//只有任务完成或取消时才处理,任务未完成直接返回
if
(
task
.
isFinished
()
||
task
.
isCancel
())
{
finishedOrderTask
(
task
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"更新工单状态出错"
,
e
);
log
.
error
(
"更新工单状态出错"
,
e
);
}
}
...
...
@@ -102,6 +107,7 @@ public class LiteOrderCache implements ITaskListener {
}
liteOrder
.
setTaskReelCount
(
taskReelCount
);
liteOrder
.
setTotalTaskReelCount
(
liteOrder
.
getTotalTaskReelCount
()+
taskReelCount
);
log
.
info
(
"工单["
+
liteOrder
.
getOrderNo
()
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
//有需要出库的
if
(
taskReelCount
<=
0
)
{
...
...
@@ -120,6 +126,7 @@ public class LiteOrderCache implements ITaskListener {
*/
private
synchronized
void
finishedOrderTask
(
DataLog
task
)
throws
ValidateException
{
if
(
OP
.
CHECKOUT
==
task
.
getType
())
{
//更新工单状态
String
orderNo
=
task
.
getSourceName
();
if
(!
Strings
.
isNullOrEmpty
(
orderNo
))
{
...
...
@@ -136,9 +143,12 @@ public class LiteOrderCache implements ITaskListener {
//任务是取消的,需要将总待出库数量-1
if
(
task
.
isCancel
())
{
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()-
1
);
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
}
else
if
(
task
.
isFinished
())
{
}
else
if
(
task
.
isFinished
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
order
.
setTotalFinishedReelCount
(
order
.
getTotalFinishedReelCount
()+
1
);
String
orderItemId
=
task
.
getSubSourceId
();
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
LiteOrderItem
liteOrderItem
:
order
.
getOrderItems
())
{
...
...
@@ -147,6 +157,8 @@ public class LiteOrderCache implements ITaskListener {
//更新对应条目的已出库数量和出库盘数
liteOrderItem
.
setOutNum
(
liteOrderItem
.
getOutNum
()
+
task
.
getNum
());
liteOrderItem
.
setOutReelCount
(
liteOrderItem
.
getOutReelCount
()
+
1
);
liteOrderItem
.
setTotalOutNum
(
liteOrderItem
.
getTotalOutNum
()+
task
.
getNum
());
liteOrderItem
.
setTotalOutReelCount
(
liteOrderItem
.
getTotalOutReelCount
()+
1
);
liteOrderItem
=
liteOrderItemManager
.
save
(
liteOrderItem
);
// Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
// if (barcode != null) {
...
...
@@ -202,14 +214,14 @@ public class LiteOrderCache implements ITaskListener {
LiteOrder
cacheOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
cacheOrder
!=
null
&&
!
cacheOrder
.
isTaskFinished
()
&&
!
cacheOrder
.
isNew
())
{
log
.
info
(
"工单["
+
orderNo
+
"]正在执行"
);
return
"order.out.executing"
;
return
"
smfcode.
order.out.executing"
;
}
if
(
cacheOrder
==
null
)
{
cacheOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
}
if
(
cacheOrder
==
null
)
{
return
"order.out.notFound"
;
return
"
smfcode.
order.out.notFound"
;
}
...
...
@@ -222,7 +234,7 @@ public class LiteOrderCache implements ITaskListener {
ORDER_COLOR
nextColor
=
ORDER_COLOR
.
nextColor
(
currentColors
);
if
(
nextColor
==
null
)
{
log
.
info
(
"执行工单["
+
orderNo
+
"] outBom="
+
outBom
+
"时,已达最大可执行工单数"
);
return
"order.out.maxOrder"
;
return
"
smfcode.
order.out.maxOrder"
;
}
log
.
info
(
"开始执行工单["
+
orderNo
+
"] outBom="
+
outBom
);
...
...
@@ -250,9 +262,14 @@ public class LiteOrderCache implements ITaskListener {
//其他出库模式一次性全部生成任务
for
(
LiteOrderItem
orderItem
:
cacheOrder
.
getOrderItems
())
{
orderItem
.
setOutNum
(
0
);
orderItem
.
setOutReelCount
(
0
);
liteOrderItemManager
.
save
(
orderItem
);
//剩余未出数量
Float
totalNum
=
orderItem
.
getNeedNum
()
*
cacheOrder
.
getOrderTimes
();
int
remainNum
=
totalNum
.
intValue
()
-
orderItem
.
getOutNum
();
//此PN未完成
if
(
remainNum
>
0
)
{
if
(
outBom
)
{
...
...
@@ -265,7 +282,7 @@ public class LiteOrderCache implements ITaskListener {
String
partNumber
=
orderItem
.
getPn
();
StoragePos
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
partNumber
,
excludePosIds
,
checkoutType
);
if
(
pos
==
null
)
{
log
.
error
(
"未找到可以出库的物料["
+
partNumber
+
"]"
);
//
log.error("未找到可以出库的物料[" + partNumber + "]");
break
;
}
else
{
assignNum
=
assignNum
+
pos
.
getBarcode
().
getAmount
();
...
...
@@ -282,12 +299,16 @@ public class LiteOrderCache implements ITaskListener {
task
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
// task = dataLogDao.save(task);
taskService
.
addTaskToExecute
(
task
);
}
}
}
}
cacheOrder
.
setTaskReelCount
(
taskReelCount
);
cacheOrder
.
setTotalTaskReelCount
(
cacheOrder
.
getTotalTaskReelCount
()+
taskReelCount
);
log
.
info
(
"工单["
+
orderNo
+
"]任务分配结束,任务数["
+
taskReelCount
+
"]"
);
//有需要出库的
if
(
taskReelCount
<=
0
)
{
...
...
@@ -295,10 +316,11 @@ public class LiteOrderCache implements ITaskListener {
}
liteOrderManager
.
save
(
cacheOrder
);
liteOrderMap
.
put
(
cacheOrder
.
getOrderNo
(),
cacheOrder
);
if
(
taskReelCount
<=
0
)
{
//return "工单无可执行的任务";
return
"order.out.noTask"
;
return
"
smfcode.
order.out.noTask"
;
}
return
""
;
}
...
...
@@ -339,4 +361,38 @@ public class LiteOrderCache implements ITaskListener {
return
task
;
}
/**
* 关闭工单
* @param orderNo
*/
public
String
closeOrder
(
String
orderNo
)
{
LiteOrder
liteOrder
=
liteOrderMap
.
get
(
orderNo
);
if
(
liteOrder
==
null
)
{
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
){
return
"smfcode.order.out.notFound"
;
}
}
//有任务的工单不能关闭
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
task:
allTask
)
{
if
(
OP
.
CHECKOUT
==
task
.
getType
()&&(!
task
.
isEnd
()))
{
//更新工单状态
String
taskSourceName
=
task
.
getSourceName
();
if
(!
Strings
.
isNullOrEmpty
(
taskSourceName
)
&&
orderNo
.
equals
(
taskSourceName
))
{
log
.
info
(
"关闭工单["
+
orderNo
+
"]失败,有未完成的出库任务:"
+
task
.
getPosName
());
return
"smfcode.order.close.taskNotEnd"
;
}
}
}
//绑定料需要解绑
storagePosManager
.
clearLockPos
(
liteOrder
.
getOrderNo
());
log
.
info
(
"关闭工单["
+
orderNo
+
"]成功"
);
liteOrder
.
setClosed
(
true
);
liteOrderManager
.
save
(
liteOrder
);
return
"smfcode.order.close.success"
;
}
}
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
a216d74
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.db.sql.Order
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
...
...
@@ -33,6 +34,7 @@ import com.neotel.smfcore.security.service.po.Role;
import
com.neotel.smfcore.security.service.po.User
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
javafx.concurrent.Task
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
...
...
@@ -152,18 +154,56 @@ public class OrderController {
@ApiOperation
(
"工单出库"
)
@PostMapping
(
value
=
"/out"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
delete
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
// throw new ValidateException("工单号不能为空");
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
// ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder);
return
liteOrderCache
.
checkOutOrder
(
liteOrder
);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
);
if
(
ObjectUtil
.
isEmpty
(
result
)){
return
ResultBean
.
newOkResult
(
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"套料出库"
)
@PostMapping
(
value
=
"/outBom"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
outBom
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
orderNo
,
true
);
if
(
ObjectUtil
.
isEmpty
(
result
)){
return
ResultBean
.
newOkResult
(
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"尾料出库"
)
@PostMapping
(
value
=
"/outTails"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
outTails
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
orderNo
,
false
);
if
(
ObjectUtil
.
isEmpty
(
result
)){
return
ResultBean
.
newOkResult
(
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"查询工单"
)
...
...
@@ -298,4 +338,48 @@ public class OrderController {
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
@ApiOperation
(
"修改工单数量"
)
@PostMapping
(
value
=
"/updateNum"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
updateNum
(
@RequestBody
OrderDto
param
)
{
String
orderNo
=
param
.
getOrderNo
();
float
orderTimes
=
param
.
getOrderTimes
();
if
(
orderNo
==
null
)
{
// throw new ValidateException("工单号不能为空");
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
if
(!
liteOrder
.
isNew
()){
throw
new
ValidateException
(
"smfcode.cannotUpdateOrderNum"
,
"工单已出库,不能修改数量"
);
}
if
(
orderTimes
<
1
){
orderTimes
=
1
;
}
liteOrder
.
setOrderTimes
(
orderTimes
);
liteOrderManager
.
save
(
liteOrder
);
return
ResultBean
.
newOkResult
(
orderMapper
.
toDto
(
liteOrder
)
);
}
@ApiOperation
(
"关闭工单"
)
@PostMapping
(
value
=
"/closeOrder"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
closeOrder
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
String
result
=
liteOrderCache
.
closeOrder
(
orderNo
);
if
(
ObjectUtil
.
isEmpty
(
result
)){
return
ResultBean
.
newOkResult
(
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
查看文件 @
a216d74
...
...
@@ -33,6 +33,11 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"当前任务已完成盘数"
)
private
int
finishedReelCount
=
0
;
@ApiModelProperty
(
"累计任务盘数"
)
private
int
totalTaskReelCount
=
0
;
@ApiModelProperty
(
"累计任务已完成盘数"
)
private
int
totalFinishedReelCount
=
0
;
/**
* 订单状态
* 0=新建工单
...
...
@@ -52,28 +57,18 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"出库状态, 2表示已完成"
)
private
boolean
closed
=
false
;
/**
* 工单来源
*/
@ApiModelProperty
(
"工单来源"
)
private
String
source
=
""
;
/**
* 任务完成时间(用于关闭页面显示)
*/
@ApiModelProperty
(
"任务完成时间(用于关闭页面显示)"
)
@Transient
private
long
taskFinishedTime
=
-
1
;
/**
* 套(倍)数
*/
@ApiModelProperty
(
"套(倍)数"
)
private
float
orderTimes
=
1
f
;
/**
* 订单的详细信息
*/
@Transient
@ApiModelProperty
(
"订单的详细信息"
)
private
List
<
OrderItemDto
>
orderItems
;
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
a216d74
...
...
@@ -25,10 +25,14 @@ public class LiteOrder extends BasePo implements Serializable {
}
/**
*
订
单号
*
需求
单号
*/
private
String
orderNo
;
/**
* 工单号
*/
private
String
so
;
/**
* 当前任务盘数
*/
private
int
taskReelCount
=
0
;
...
...
@@ -39,6 +43,16 @@ public class LiteOrder extends BasePo implements Serializable {
private
int
finishedReelCount
=
0
;
/**
* 累计任务盘数
*/
private
int
totalTaskReelCount
=
0
;
/**
* 累计任务已完成盘数
*/
private
int
totalFinishedReelCount
=
0
;
/**
* 订单状态
*/
private
int
status
=
LITEORDER_STATUS
.
NEW
;
...
...
@@ -48,13 +62,6 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
boolean
closed
=
false
;
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
if
(
value
){
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
}
}
/**
* 工单来源
...
...
@@ -62,6 +69,11 @@ public class LiteOrder extends BasePo implements Serializable {
private
String
source
=
""
;
/**
* 线别,AGV运送时使用此值做为目的地
*/
private
String
line
=
""
;
/**
* 任务完成时间(用于关闭页面显示)
*/
@Transient
...
...
@@ -88,6 +100,13 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
Date
sdate
=
new
Date
();
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
if
(
value
){
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
}
}
/**
* 结束当前的任务
*/
...
...
@@ -150,6 +169,13 @@ public class LiteOrder extends BasePo implements Serializable {
this
.
taskReelCount
=
taskReelCount
;
}
public
void
setTotalTaskReelCount
(
int
totalReelCount
){
if
(
totalReelCount
<
0
){
totalReelCount
=
0
;
}
this
.
totalTaskReelCount
=
totalReelCount
;
}
/**
* 是否需要展示(已完成的,过20 秒自动清除)
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
a216d74
...
...
@@ -20,24 +20,44 @@ public class LiteOrderItem extends BasePo implements Serializable {
private
String
ri
;
//需求数量
/**
* 总需求数量
*/
private
int
needNum
=
0
;
/**
* 需求料盘数
*
总
需求料盘数
*/
private
int
needReelCount
=
0
;
//已出数量
/**
* 当前任务已出数量
*/
private
int
outNum
=
0
;
//已出盘数
/**
* 当前任务已出盘数
*/
private
int
outReelCount
=
0
;
/**
* 累计已出数量
*/
private
int
totalOutNum
=
0
;
/**
* 累计已出盘数
*/
private
int
totalOutReelCount
=
0
;
/**
* 订单信息
*/
private
String
orderNo
=
""
;
/**
* 站位编号
*/
private
String
slotNum
=
""
;
/**
* 站位信息
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.java
查看文件 @
a216d74
...
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.storage.rest.query;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
...
...
@@ -27,4 +28,8 @@ public class StoragePosQueryCriteria {
@QueryCondition
(
type
=
QueryCondition
.
Type
.
IN
,
propName
=
"storageId"
)
private
List
<
String
>
storageIdList
;
@ApiModelProperty
(
"是否启用"
)
@QueryCondition
private
Boolean
enabled
;
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
a216d74
...
...
@@ -17,8 +17,10 @@ import java.util.Set;
public
interface
IStoragePosManager
extends
IBaseManager
<
StoragePos
>
{
List
<
PlateSizeBean
>
getStoragePosUsage
(
String
storageId
);
StoragePos
getByPosName
(
String
posName
);
Map
<
String
,
InventoryItem
>
getInventory
(
String
id
);
Map
<
String
,
InventoryItem
>
getInventory
(
String
id
);
StoragePos
getByBarcode
(
String
barcode
);
...
...
@@ -32,7 +34,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void
deletePoss
(
Set
<
String
>
ids
);
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
;
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
)
throws
ValidateException
;
StoragePos
getEmptyPosByStorage
(
Storage
storage
,
Barcode
barcode
,
Collection
<
String
>
excludePosIds
,
String
lastPosId
)
throws
ValidateException
;
...
...
@@ -48,5 +50,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
void
clearStoragePosLabel
(
String
id
);
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
);
void
updatePosLabel
(
String
[]
posIds
,
String
labelId
);
void
clearLockPos
(
String
lockId
);
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
a216d74
...
...
@@ -217,8 +217,13 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
log
.
info
(
"使用"
+
checkOutType
+
"策略出库partNumber="
+
pn
);
return
storagePosDao
.
findOne
(
q
);
StoragePos
pos
=
storagePosDao
.
findOne
(
q
);
if
(
pos
==
null
){
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",未找到可以出库的物料 "
);
}
else
{
log
.
info
(
"使用"
+
checkOutType
+
" 策略出库 partNumber="
+
pn
+
",找到出仓位置【"
+
pos
.
getPosName
()+
"】,RI【"
+
pos
.
getBarcode
().
getBarcode
()+
"】 "
);
}
return
pos
;
}
...
...
@@ -388,4 +393,10 @@ public class StoragePosManagerImpl implements IStoragePosManager {
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"labelId"
,
labelId
));
}
@Override
public
void
clearLockPos
(
String
lockId
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode.lockId"
).
is
(
lockId
));
storagePosDao
.
updateMulti
(
query
,
Update
.
update
(
"barcode.lockId"
,
""
));
}
}
src/main/java/com/neotel/smfcore/security/rest/UserController.java
查看文件 @
a216d74
...
...
@@ -90,7 +90,6 @@ public class UserController {
@ApiOperation
(
"查询用户"
)
@GetMapping
@PreAuthorize
(
"@el.check('user:list')"
)
// public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){
public
PageData
<
UserDto
>
query
(
UserQueryCriteria
criteria
,
Pageable
pageable
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
PageData
<
User
>
userPageData
=
userManager
.
findByPage
(
query
,
pageable
);
...
...
@@ -127,7 +126,7 @@ public class UserController {
if
(
resources
.
getCheckCode
()==
null
){
resources
.
setCheckCode
(
""
);
}
resources
.
setPassword
(
passwordEncoder
.
encode
(
"
123456
"
));
resources
.
setPassword
(
passwordEncoder
.
encode
(
"
Constants.USER_DEFAULTP_PWD
"
));
resources
.
setUpdateDate
(
new
Date
());
resources
.
setPwdResetTime
(
new
Date
());
userManager
.
save
(
resources
);
...
...
@@ -137,20 +136,16 @@ public class UserController {
@ApiOperation
(
"修改用户"
)
@PutMapping
@PreAuthorize
(
"@el.check('user:edit')"
)
// public ResponseEntity<Object> update(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
public
ResponseEntity
<
Object
>
update
(
@Validated
@RequestBody
UserDto
userDto
)
{
User
resources
=
userMapper
.
toEntity
(
userDto
);
if
(
resources
.
getId
()
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
// throw new ValidateException("修改用户:ID不能为空");
}
if
(
resources
.
getUsername
()==
null
){
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"username"
}
);
// throw new ValidateException("修改用户:用户名不能为空");
}
if
(
resources
.
getRoleId
()==
null
){
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"roleId"
}
);
// throw new ValidateException("修改用户:角色ID不能为空");
}
userManager
.
update
(
resources
);
...
...
@@ -158,19 +153,53 @@ public class UserController {
return
new
ResponseEntity
<>(
HttpStatus
.
NO_CONTENT
);
}
@ApiOperation
(
"修改用户:个人中心"
)
@PutMapping
(
value
=
"center"
)
// public ResponseEntity<Object> center(@Validated(User.Update.class) @RequestBody User resources){
public
ResponseEntity
<
Object
>
center
(
@Validated
@RequestBody
UserDto
userDto
)
{
@ApiOperation
(
"重置密码"
)
@PutMapping
(
value
=
"/resetPass"
)
@PreAuthorize
(
"@el.check('user:edit')"
)
public
ResultBean
resetPass
(
@Validated
@RequestBody
UserDto
userDto
)
{
if
(
userDto
.
getId
()
==
null
)
{
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
}
User
resources
=
userManager
.
get
(
userDto
.
getId
());
resources
.
setPassword
(
passwordEncoder
.
encode
(
Constants
.
USER_DEFAULTP_PWD
));
userManager
.
update
(
resources
);
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"个人中心:获取个人资料"
)
@GetMapping
(
value
=
"/center"
)
public
UserDto
getCenter
()
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
return
userMapper
.
toDto
(
user
);
}
@ApiOperation
(
"个人中心:修改个人资料"
)
@PutMapping
(
value
=
"/center"
)
public
ResultBean
center
(
@Validated
@RequestBody
UserDto
userDto
)
{
User
resources
=
userMapper
.
toEntity
(
userDto
);
if
(!
resources
.
getId
().
equals
(
SecurityUtils
.
getCurrentUserId
()))
{
throw
new
ValidateException
(
"smfcode.hasNoAccess"
,
"无权限修改此用户信息"
);
// throw new ValidateException("不能修改他人资料");
}
userManager
.
updateCenter
(
resources
);
return
new
ResponseEntity
<>(
HttpStatus
.
NO_CONTENT
);
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"个人中心:修改密码"
)
@PostMapping
(
value
=
"/updatePass"
)
public
ResultBean
updatePass
(
@RequestBody
UserPassVo
passVo
)
throws
Exception
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
String
oldPass
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
passVo
.
getOldPass
());
String
newPass
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
passVo
.
getNewPass
());
if
(!
passwordEncoder
.
matches
(
oldPass
,
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.oldPwdError"
,
"修改失败,旧密码错误"
);
}
if
(
passwordEncoder
.
matches
(
newPass
,
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.newPwdError"
,
"新密码不能与旧密码相同"
);
}
userManager
.
updatePass
(
user
.
getUsername
(),
passwordEncoder
.
encode
(
newPass
));
return
ResultBean
.
newOkResult
(
""
);
}
@ApiOperation
(
"删除用户"
)
@DeleteMapping
...
...
@@ -194,35 +223,21 @@ public class UserController {
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"修改密码"
)
@PostMapping
(
value
=
"/updatePass"
)
public
ResponseEntity
<
Object
>
updatePass
(
@RequestBody
UserPassVo
passVo
)
throws
Exception
{
User
user
=
userManager
.
get
(
SecurityUtils
.
getCurrentUserId
());
if
(!
passwordEncoder
.
matches
(
passVo
.
getOldPass
(),
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.oldPwdError"
,
"修改失败,旧密码错误"
);
}
if
(
passwordEncoder
.
matches
(
passVo
.
getNewPass
(),
user
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.newPwdError"
,
"新密码不能与旧密码相同"
);
}
userManager
.
updatePass
(
user
.
getUsername
(),
passwordEncoder
.
encode
(
passVo
.
getNewPass
()));
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"修改邮箱"
)
@PostMapping
(
value
=
"/updateEmail/{code}"
)
public
ResponseEntity
<
Object
>
updateEmail
(
@PathVariable
String
code
,
@RequestBody
UserDto
userDto
)
throws
Exception
{
User
user
=
userMapper
.
toEntity
(
userDto
);
String
password
=
RsaUtils
.
decryptByPrivateKey
(
RsaProperties
.
privateKey
,
user
.
getPassword
());
User
myUser
=
userManager
.
findByUserName
(
SecurityUtils
.
getCurrentUsername
());
if
(!
passwordEncoder
.
matches
(
password
,
myUser
.
getPassword
()))
{
throw
new
ValidateException
(
"smfcode.pwdError"
,
"修改邮箱失败,密码错误"
);
}
// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
userManager
.
updateEmail
(
myUser
.
getUsername
(),
myUser
.
getEmail
());
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
//
@ApiOperation("修改邮箱")
//
@PostMapping(value = "/updateEmail/{code}")
//
public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody UserDto userDto) throws Exception {
//
User user=userMapper.toEntity(userDto);
//
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword());
//
User myUser = userManager.findByUserName(SecurityUtils.getCurrentUsername());
//
if (!passwordEncoder.matches(password, myUser.getPassword())) {
//
throw new ValidateException("smfcode.pwdError","修改邮箱失败,密码错误");
//
}
//
//
verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
//
userManager.updateEmail(myUser.getUsername(), myUser.getEmail());
//
return new ResponseEntity<>(HttpStatus.OK);
//
}
@ApiOperation
(
"修改用户组"
)
@PutMapping
(
value
=
"/updateGroup"
)
@PreAuthorize
(
"@el.check('user:edit')"
)
...
...
@@ -236,6 +251,8 @@ public class UserController {
userManager
.
updateGroups
(
resources
);
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
}
@ApiOperation
(
"上传用户列表:激活用户"
)
@PostMapping
(
value
=
"/upload"
)
public
ResultBean
upload
(
@RequestParam
MultipartFile
uploadFile
)
throws
Exception
{
...
...
src/main/java/com/neotel/smfcore/security/service/manager/impl/UserManagerImpl.java
查看文件 @
a216d74
...
...
@@ -109,10 +109,11 @@ public class UserManagerImpl implements IUserManager {
public
void
updateCenter
(
User
resources
)
{
User
dataUser
=
this
.
get
(
resources
.
getId
());
if
(
dataUser
!=
null
){
//用户名admin不能修改
if
(!
dataUser
.
equals
(
Constants
.
SUPER_USERNAME
)){
dataUser
.
setUsername
(
resources
.
getUsername
());
}
// //用户名admin不能修改
// if(!dataUser.equals(Constants.SUPER_USERNAME)){
// dataUser.setUsername(resources.getUsername());
// }
//只能修改邮箱和语言
dataUser
.
setEmail
(
resources
.
getEmail
());
dataUser
.
setLanguage
(
resources
.
getLanguage
());
...
...
src/main/resources/messages.properties
查看文件 @
a216d74
...
...
@@ -93,6 +93,13 @@ smfcore.instruction=\u8BF4\u660E\u4E66
smfcore.about
=
\u5173\u
4E8E
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7EC4
smfcode.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u5355\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u
8FBE
\u5230\u6700\u5927\u
53EF
\u6267\u
884C
\u
5DE5
\u5355\u6570
smfcode.order.out.noTask
=
\u
5DE5
\u5355\u
65E0
\u
53EF
\u6267\u
884C
\u7684\u
4EFB
\u
52A1
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6570\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u5355\u5173\u
95ED
\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u5355\u
8FD8
\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52A1
...
...
src/main/resources/messages_en_US.properties
查看文件 @
a216d74
...
...
@@ -92,4 +92,11 @@ smfcore.help=Help
smfcore.instruction
=
Instruction manual
smfcore.about
=
About
smfcore.tacticsOuput
=
Strategies Retrival
smfcore.labelOuput
=
Material grouping
\ No newline at end of file
smfcore.labelOuput
=
Material grouping
smfcode.order.out.executing
=
Work orders are being executed
smfcode.order.out.notFound
=
Work order not found
smfcode.order.out.maxOrder
=
The maximum number of executable work orders has been reached
smfcode.order.out.noTask
=
Work order No executable tasks
smfcode.cannotUpdateOrderNum
=
The work order has been issued and the quantity cannot be modified
smfcode.order.close.success
=
Work order closed successfully
smfcode.order.close.taskNotEnd
=
Work orders with outstanding tasks
\ No newline at end of file
src/main/resources/messages_ja_JP.properties
查看文件 @
a216d74
...
...
@@ -92,4 +92,11 @@ smfcore.help=\u30D8\u30EB\u30D7
smfcore.instruction
=
\u
53D6
\u6271\u
8AAC
\u
660E
\u
66F8
smfcore.about
=
\u
306B
\u3064\u3044\u3066
smfcore.tacticsOuput
=
\u
30B9
\u
30C8
\u
30E9
\u
30C6
\u
30B8
\u
30FC
\u
306F
\u5728\u
5EAB
\u5207\u
308C
\u3067\u3059
smfcore.labelOuput
=
\u6750\u6599\u
306E
\u
30B0
\u
30EB
\u
30FC
\u
30D7
\u5316
\ No newline at end of file
smfcore.labelOuput
=
\u6750\u6599\u
306E
\u
30B0
\u
30EB
\u
30FC
\u
30D7
\u5316
smfcode.order.out.executing
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
304C
\u
5B9F
\u
884C
\u3055\u
308C
\u3066\u3044\u
308B
smfcode.order.out.notFound
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
66F8
\u
304C
\u
898B
\u3064\u
304B
\u3089\u
306A
\u3044
smfcode.order.out.maxOrder
=
\u
5B9F
\u
884C
\u
53EF
\u
80FD
\u
306A
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
306E
\u6700\u5927\u6570\u
306B
\u9054\u3057\u3066\u3044\u
308B
smfcode.order.out.noTask
=
\u
4F5C
\u
696D
\u6307\u
793A
\u
304C
\u
5B9F
\u
884C
\u3067\u
304D
\u
306A
\u3044\u
30BF
\u
30B9
\u
30AF
smfcode.cannotUpdateOrderNum
=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
304C
\u5728\u
5EAB
\u5207\u
308C
\u3067\u6570\u
91CF
\u
304C
\u5909\u
66F4
\u3067\u
304D
\u
306A
\u3044
smfcode.order.close.success=
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\u
304C
\u
6B63
\u
5E38
\u
306B
\u
7D42
\u
4E86
\u3057\u
307E
\u3057\u
305F
\u3002
smfcode.order.close.taskNotEnd
=
\u
672A
\u
51E6
\u7406\u
306E
\u
30BF
\u
30B9
\u
30AF
\u
304C
\u3042\u
308B
\u
30EF
\u
30FC
\u
30AF
\u
30AA
\u
30FC
\u
30C0
\u
30FC
\ No newline at end of file
src/main/resources/messages_zh_CN.properties
查看文件 @
a216d74
...
...
@@ -92,4 +92,11 @@ smfcore.help=\u5E2E\u52A9
smfcore.instruction
=
\u
8BF4
\u
660E
\u
4E66
smfcore.about
=
\u5173\u
4E8E
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5E93
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7EC4
\ No newline at end of file
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7EC4
smfcode.order.out.executing
=
\u
5DE5
\u5355\u
6B63
\u5728\u6267\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u5355\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u
8FBE
\u6700\u5927\u
53EF
\u6267\u
884C
\u
5DE5
\u5355\u6570
smfcode.order.out.noTask
=
\u
5DE5
\u5355\u
65E0
\u
53EF
\u6267\u
884C
\u7684\u
4EFB
\u
52A1
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u5355\u
5DF2
\u
51FA
\u
5E93
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6570\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u5355\u5173\u
95ED
\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u5355\u
8FD8
\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52A1
\ No newline at end of file
src/main/resources/messages_zh_TW.properties
查看文件 @
a216d74
...
...
@@ -92,4 +92,11 @@ smfcore.help=\u5E6B\u52A9
smfcore.instruction
=
\u
8AAA
\u
660E
\u
66F8
smfcore.about
=
\u
95DC
\u
65BC
smfcore.tacticsOuput
=
\u
7B56
\u7565\u
51FA
\u
5EAB
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7D44
\ No newline at end of file
smfcore.labelOuput
=
\u7269\u6599\u5206\u
7D44
smfcode.order.out.executing
=
\u
5DE5
\u
55AE
\u
6B63
\u5728\u
57F7
\u
884C
smfcode.order.out.notFound
=
\u
5DE5
\u
55AE
\u
672A
\u
627E
\u5230
smfcode.order.out.maxOrder
=
\u
5DF2
\u9054\u5230\u6700\u5927\u
53EF
\u
57F7
\u
884C
\u
5DE5
\u
55AE
\u6578
smfcode.order.out.noTask
=
\u
5DE5
\u
55AE
\u7121\u
53EF
\u
57F7
\u
884C
\u7684\u
4EFB
\u
52D9
smfcode.cannotUpdateOrderNum
=
\u
5DE5
\u
55AE
\u
5DF2
\u
51FA
\u
5EAB
\u
FF0C
\u
4E0D
\u
80FD
\u
4FEE
\u6539\u6578\u
91CF
smfcode.order.close.success
=
\u
5DE5
\u
55AE
\u
95DC
\u9589\u6210\u
529F
smfcode.order.close.taskNotEnd
=
\u
5DE5
\u
55AE
\u9084\u6709\u
672A
\u
5B8C
\u6210\u7684\u
4EFB
\u
52D9
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论