Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 87ef70db
由
LN
编写于
2023-03-06 15:09:59 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单增加自定义的附加字段。修改:模板上传,工单配置,工单上传,工单下载,工单出库。
1 个父辈
fe4ed138
隐藏空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
231 行增加
和
18 行删除
src/main/java/com/neotel/smfcore/common/excel/ExcelReader.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderItemDto.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.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/bean/OrderSetting.java
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.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/excel/ExcelReader.java
查看文件 @
87ef70d
package
com
.
neotel
.
smfcore
.
common
.
excel
;
package
com
.
neotel
.
smfcore
.
common
.
excel
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.EasyExcel
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
@Slf4j
public
class
ExcelReader
{
public
class
ExcelReader
{
public
static
List
<
Map
<
Integer
,
String
>>
noModelRead
(
String
fileName
,
int
headRowNumber
)
{
public
static
List
<
Map
<
Integer
,
String
>>
noModelRead
(
String
fileName
,
int
headRowNumber
)
{
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
NoModelDataListener
listener
=
new
NoModelDataListener
();
NoModelDataListener
listener
=
new
NoModelDataListener
();
if
(
headRowNumber
<=
1
)
{
if
(
headRowNumber
<=
1
)
{
EasyExcel
.
read
(
fileName
,
listener
).
sheet
().
doRead
();
EasyExcel
.
read
(
fileName
,
listener
).
sheet
().
doRead
();
}
}
else
{
else
{
EasyExcel
.
read
(
fileName
,
listener
).
sheet
().
headRowNumber
(
headRowNumber
).
doRead
();
EasyExcel
.
read
(
fileName
,
listener
).
sheet
().
headRowNumber
(
headRowNumber
).
doRead
();
}
}
List
<
Map
<
Integer
,
String
>>
data
=
listener
.
getData
();
List
<
Map
<
Integer
,
String
>>
data
=
listener
.
getData
();
...
@@ -29,6 +31,37 @@ public class ExcelReader {
...
@@ -29,6 +31,37 @@ public class ExcelReader {
return
data
;
return
data
;
}
}
public
static
List
<
Map
<
Integer
,
String
>>
noModelRead
(
String
fileName
)
{
public
static
List
<
Map
<
Integer
,
String
>>
noModelRead
(
String
fileName
)
{
return
noModelRead
(
fileName
,
1
);
return
noModelRead
(
fileName
,
1
);
}
public
static
Map
<
String
,
Integer
>
readHeaderMap
(
String
fileName
,
int
headRowNumber
)
{
//读取所有excel表头
List
<
Map
<
Integer
,
String
>>
data
=
ExcelReader
.
noModelRead
(
fileName
,
headRowNumber
);
Map
<
String
,
Integer
>
headerMap
=
new
HashMap
<>();
Map
<
Integer
,
String
>
headerData
=
data
.
get
(
0
);
if
(
data
!=
null
&&
data
.
size
()
>=
2
)
{
for
(
Integer
key
:
headerData
.
keySet
())
{
if
(
ObjectUtil
.
isEmpty
(
key
))
{
continue
;
}
String
v
=
headerData
.
get
(
key
);
if
(
ObjectUtil
.
isEmpty
(
v
)){
continue
;
}
headerMap
.
put
(
v
,
key
);
}
//表头过少,需要重新读取
if
(
headerMap
.
size
()
<=
2
)
{
if
(
headRowNumber
<=
1
)
{
log
.
error
(
"文件["
+
fileName
+
"],当前读取表头数["
+
headerData
.
size
()
+
"],当前headRowNumber=["
+
headRowNumber
+
"],设置headRowNumber=3重新读取"
);
return
readHeaderMap
(
fileName
,
3
);
}
else
{
return
headerMap
;
}
}
}
return
headerMap
;
}
}
}
}
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
87ef70d
...
@@ -502,9 +502,9 @@ public class LiteOrderCache {
...
@@ -502,9 +502,9 @@ public class LiteOrderCache {
}
}
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
!
Strings
.
isNullOrEmpty
(
partNumber
)){
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
!
Strings
.
isNullOrEmpty
(
partNumber
)){
//PN
//PN
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
partNumber
,
excludePosIds
,
checkoutType
);
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
""
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
()
);
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
Strings
.
isNullOrEmpty
(
partNumber
)
&&
!
Strings
.
isNullOrEmpty
(
mpn
)){
}
else
if
(
Strings
.
isNullOrEmpty
(
reelId
)
&&
Strings
.
isNullOrEmpty
(
partNumber
)
&&
!
Strings
.
isNullOrEmpty
(
mpn
)){
pos
=
storagePosManager
.
findMpnInStorages
(
availableStorageIds
,
mpn
,
excludePosIds
,
checkoutType
);
pos
=
storagePosManager
.
findMpnInStorages
(
availableStorageIds
,
mpn
,
excludePosIds
,
checkoutType
,
orderItem
.
getAppendData
()
);
}
}
if
(
pos
==
null
)
{
if
(
pos
==
null
)
{
// log.error("未找到可以出库的物料[" + partNumber + "]");
// log.error("未找到可以出库的物料[" + partNumber + "]");
...
...
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
查看文件 @
87ef70d
...
@@ -118,6 +118,21 @@ public class DefaultOrderFileListener implements IOrderFileListener {
...
@@ -118,6 +118,21 @@ public class DefaultOrderFileListener implements IOrderFileListener {
int
numIndex
=
csvRead
.
getIndex
(
"NUM"
,
orderSetting
.
getNum
());
int
numIndex
=
csvRead
.
getIndex
(
"NUM"
,
orderSetting
.
getNum
());
int
mpnIndex
=
csvRead
.
getIndex
(
"MPN"
,
orderSetting
.
getMpn
());
int
mpnIndex
=
csvRead
.
getIndex
(
"MPN"
,
orderSetting
.
getMpn
());
//附加字段读取
Map
<
String
,
Integer
>
appendIndexMap
=
new
HashMap
<>();
if
(
orderSetting
.
getAppendData
()!=
null
&&
orderSetting
.
getAppendData
().
size
()>
0
){
for
(
String
key
:
orderSetting
.
getAppendData
().
keySet
())
{
String
value
=
orderSetting
.
getAppendData
().
get
(
key
);
if
(
ObjectUtil
.
isNotEmpty
(
value
)){
int
index
=
csvRead
.
getIndex
(
value
,
key
);
if
(
index
>=
0
){
appendIndexMap
.
put
(
key
,
index
);
}
}
}
}
int
row
=
1
;
int
row
=
1
;
int
newRowCount
=
0
;
int
newRowCount
=
0
;
int
updateRowCount
=
0
;
int
updateRowCount
=
0
;
...
@@ -183,6 +198,22 @@ public class DefaultOrderFileListener implements IOrderFileListener {
...
@@ -183,6 +198,22 @@ public class DefaultOrderFileListener implements IOrderFileListener {
item
.
setFeederInfo
(
feeder
);
item
.
setFeederInfo
(
feeder
);
item
.
setRi
(
ri
);
item
.
setRi
(
ri
);
item
.
setMpn
(
mpn
);
item
.
setMpn
(
mpn
);
Map
<
String
,
String
>
appendValue
=
new
HashMap
<>();
if
(
appendIndexMap
.
size
()>
0
){
for
(
String
key
:
appendIndexMap
.
keySet
())
{
Integer
index
=
appendIndexMap
.
get
(
key
);
String
value
=
lineValues
[
index
];
if
(
ObjectUtil
.
isNotEmpty
(
value
)){
appendValue
.
put
(
key
,
value
);
}
}
if
(
appendValue
.
size
()>
0
){
item
.
setAppendData
(
appendValue
);
}
}
if
(!
itemMap
.
containsKey
(
so
)){
if
(!
itemMap
.
containsKey
(
so
)){
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
}
}
...
@@ -244,7 +275,20 @@ public class DefaultOrderFileListener implements IOrderFileListener {
...
@@ -244,7 +275,20 @@ public class DefaultOrderFileListener implements IOrderFileListener {
int
feederIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getFeeder
(),
-
1
);
int
feederIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getFeeder
(),
-
1
);
int
soIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getSo
(),
-
1
);
int
soIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getSo
(),
-
1
);
int
numIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getNum
(),
-
1
);
int
numIndex
=
headerMap
.
getOrDefault
(
orderSetting
.
getNum
(),
-
1
);
//附加字段读取
Map
<
String
,
Integer
>
appendIndexMap
=
new
HashMap
<>();
if
(
orderSetting
.
getAppendData
()!=
null
&&
orderSetting
.
getAppendData
().
size
()>
0
){
for
(
String
key
:
orderSetting
.
getAppendData
().
keySet
())
{
String
value
=
orderSetting
.
getAppendData
().
get
(
key
);
if
(
ObjectUtil
.
isNotEmpty
(
value
)){
int
index
=
headerMap
.
getOrDefault
(
value
,-
1
);
if
(
index
>=
0
){
appendIndexMap
.
put
(
key
,
index
);
}
}
}
}
for
(
int
i
=
1
;
i
<
data
.
size
();
i
++)
{
for
(
int
i
=
1
;
i
<
data
.
size
();
i
++)
{
Map
<
Integer
,
String
>
lineValues
=
data
.
get
(
i
);
Map
<
Integer
,
String
>
lineValues
=
data
.
get
(
i
);
String
partNumber
=
lineValues
.
get
(
partNumberIndex
);
String
partNumber
=
lineValues
.
get
(
partNumberIndex
);
...
@@ -317,6 +361,20 @@ public class DefaultOrderFileListener implements IOrderFileListener {
...
@@ -317,6 +361,20 @@ public class DefaultOrderFileListener implements IOrderFileListener {
if
(!
itemMap
.
containsKey
(
so
))
{
if
(!
itemMap
.
containsKey
(
so
))
{
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
}
}
Map
<
String
,
String
>
appendValue
=
new
HashMap
<>();
if
(
appendIndexMap
.
size
()>
0
){
for
(
String
key
:
appendIndexMap
.
keySet
())
{
Integer
index
=
appendIndexMap
.
get
(
key
);
String
value
=
lineValues
.
get
(
index
);
if
(
ObjectUtil
.
isNotEmpty
(
value
)){
appendValue
.
put
(
key
,
value
);
}
}
if
(
appendValue
.
size
()>
0
){
item
.
setAppendData
(
appendValue
);
}
}
itemMap
.
get
(
so
).
add
(
item
);
itemMap
.
get
(
so
).
add
(
item
);
}
}
}
}
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
87ef70d
...
@@ -17,6 +17,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -17,6 +17,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
...
@@ -31,6 +32,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
...
@@ -31,6 +32,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.MSDAppendInfo
;
import
com.neotel.smfcore.core.system.bean.MSDAppendInfo
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
...
@@ -115,6 +117,9 @@ public class OrderController {
...
@@ -115,6 +117,9 @@ public class OrderController {
TaskService
taskService
;
TaskService
taskService
;
@Autowired
@Autowired
private
DataCache
dataCache
;
@Autowired
SmfApi
smfApi
;
SmfApi
smfApi
;
// @ApiOperation("导出用户数据")
// @ApiOperation("导出用户数据")
...
@@ -304,6 +309,7 @@ public class OrderController {
...
@@ -304,6 +309,7 @@ public class OrderController {
Locale
locale
=
request
.
getLocale
();
Locale
locale
=
request
.
getLocale
();
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.ri"
,
locale
,
"RI"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.ri"
,
locale
,
"RI"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.pn"
,
locale
,
"PN"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.pn"
,
locale
,
"PN"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.MPN"
,
locale
,
"MPN"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.side"
,
locale
,
"面别"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.side"
,
locale
,
"面别"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.tableNo"
,
locale
,
"台车号"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.tableNo"
,
locale
,
"台车号"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.feederInfo"
,
locale
,
"站位信息"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.feederInfo"
,
locale
,
"站位信息"
)));
...
@@ -313,6 +319,16 @@ public class OrderController {
...
@@ -313,6 +319,16 @@ public class OrderController {
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.outNum"
,
locale
,
"已出数量"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.outNum"
,
locale
,
"已出数量"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.exception"
,
locale
,
"异常"
)));
header
.
add
(
Lists
.
newArrayList
(
MessageUtils
.
getText
(
"smfcore.order.exception"
,
locale
,
"异常"
)));
//附加字段
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
if
(
orderSetting
.
getAppendData
()!=
null
&&
orderSetting
.
getAppendData
().
size
()>
0
){
for
(
String
key
:
orderSetting
.
getAppendData
().
keySet
())
{
String
title
=
orderSetting
.
getAppendData
().
get
(
key
);
header
.
add
(
Lists
.
newArrayList
(
title
));
}
}
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
...
@@ -320,6 +336,7 @@ public class OrderController {
...
@@ -320,6 +336,7 @@ public class OrderController {
List
<
Object
>
data
=
new
ArrayList
<>();
List
<
Object
>
data
=
new
ArrayList
<>();
data
.
add
(
orderItem
.
getRi
());
data
.
add
(
orderItem
.
getRi
());
data
.
add
(
orderItem
.
getPn
());
data
.
add
(
orderItem
.
getPn
());
data
.
add
(
orderItem
.
getMpn
());
data
.
add
(
orderItem
.
getSide
());
data
.
add
(
orderItem
.
getSide
());
data
.
add
(
orderItem
.
getTableNo
());
data
.
add
(
orderItem
.
getTableNo
());
data
.
add
(
orderItem
.
getFeederInfo
());
data
.
add
(
orderItem
.
getFeederInfo
());
...
@@ -329,6 +346,15 @@ public class OrderController {
...
@@ -329,6 +346,15 @@ public class OrderController {
data
.
add
(
orderItem
.
getOutNum
());
data
.
add
(
orderItem
.
getOutNum
());
String
exception
=
orderItem
.
getOutNum
()<
orderItem
.
getNeedNum
()?
MessageUtils
.
getText
(
"smfcore.order.yes"
,
locale
,
"是"
):
""
;
String
exception
=
orderItem
.
getOutNum
()<
orderItem
.
getNeedNum
()?
MessageUtils
.
getText
(
"smfcore.order.yes"
,
locale
,
"是"
):
""
;
data
.
add
(
exception
);
data
.
add
(
exception
);
//附加字段
if
(
orderSetting
.
getAppendData
()!=
null
&&
orderSetting
.
getAppendData
().
size
()>
0
){
for
(
String
key
:
orderSetting
.
getAppendData
().
keySet
())
{
String
title
=
orderSetting
.
getAppendData
().
get
(
key
);
String
v
=
orderItem
.
getAppendData
().
getOrDefault
(
key
,
""
);
data
.
add
(
v
);
}
}
dataList
.
add
(
data
);
dataList
.
add
(
data
);
}
}
FileUtil
.
downloadExcel
(
liteOrder
.
getOrderNo
(),
header
,
dataList
,
response
);
FileUtil
.
downloadExcel
(
liteOrder
.
getOrderNo
(),
header
,
dataList
,
response
);
...
...
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderItemDto.java
查看文件 @
87ef70d
...
@@ -5,6 +5,9 @@ import lombok.Getter;
...
@@ -5,6 +5,9 @@ import lombok.Getter;
import
lombok.Setter
;
import
lombok.Setter
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.annotation.Transient
;
import
java.util.HashMap
;
import
java.util.Map
;
@Getter
@Getter
@Setter
@Setter
public
class
OrderItemDto
{
public
class
OrderItemDto
{
...
@@ -53,4 +56,7 @@ public class OrderItemDto {
...
@@ -53,4 +56,7 @@ public class OrderItemDto {
@ApiModelProperty
(
"制造商物料编号"
)
@ApiModelProperty
(
"制造商物料编号"
)
private
String
mpn
=
""
;
private
String
mpn
=
""
;
@ApiModelProperty
(
"自定义的附加字段,key=字段名,value=值"
)
public
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
}
}
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrderItem.java
查看文件 @
87ef70d
...
@@ -7,6 +7,9 @@ import org.springframework.data.mongodb.core.index.Indexed;
...
@@ -7,6 +7,9 @@ import org.springframework.data.mongodb.core.index.Indexed;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
@Data
@Document
@Document
public
class
LiteOrderItem
extends
BasePo
implements
Serializable
,
Comparable
<
LiteOrderItem
>
{
public
class
LiteOrderItem
extends
BasePo
implements
Serializable
,
Comparable
<
LiteOrderItem
>
{
...
@@ -88,6 +91,12 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
...
@@ -88,6 +91,12 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/
*/
private
String
mpn
=
""
;
private
String
mpn
=
""
;
/**
* 自定义的附加字段,key=字段名,value=值
*/
public
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
/**
/**
* 出库是否满足要求,已出库数量大于需求数量
* 出库是否满足要求,已出库数量大于需求数量
*/
*/
...
...
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
87ef70d
...
@@ -34,6 +34,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
...
@@ -34,6 +34,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
);
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
Map
<
String
,
String
>
appendDate
);
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
);
List
<
StoragePos
>
findByQuery
(
Query
query
,
Pageable
pageable
);
...
@@ -81,7 +82,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
...
@@ -81,7 +82,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List
<
StoragePos
>
findPosByIdList
(
List
<
String
>
idList
);
List
<
StoragePos
>
findPosByIdList
(
List
<
String
>
idList
);
StoragePos
findMpnInStorages
(
List
<
String
>
availableStorageIds
,
String
mpn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkoutType
);
StoragePos
findMpnInStorages
(
List
<
String
>
availableStorageIds
,
String
mpn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkoutType
,
Map
<
String
,
String
>
appendData
);
List
<
StoragePos
>
findExpiredOrSluggishBarcode
(
Date
date
,
int
type
);
List
<
StoragePos
>
findExpiredOrSluggishBarcode
(
Date
date
,
int
type
);
}
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
87ef70d
...
@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
...
@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.common.utils.PointUtil
;
import
com.neotel.smfcore.common.utils.PointUtil
;
import
com.neotel.smfcore.core.barcode.bean.PlateSizeBean
;
import
com.neotel.smfcore.core.barcode.bean.PlateSizeBean
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
...
@@ -28,6 +29,7 @@ import org.springframework.data.mongodb.core.query.Query;
...
@@ -28,6 +29,7 @@ import org.springframework.data.mongodb.core.query.Query;
import
org.springframework.data.mongodb.core.query.Update
;
import
org.springframework.data.mongodb.core.query.Update
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.text.ParseException
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
...
@@ -260,7 +262,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -260,7 +262,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
findPartNumberInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkOutType
);
return
findPartNumberInStorages
(
storageIdList
,
""
,
pn
,
excludePosIds
,
checkOutType
);
}
}
@Override
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
Map
<
String
,
String
>
appendDate
)
{
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
Criteria
c
=
Criteria
.
where
(
"barcode.partNumber"
).
is
(
pn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"enabled"
).
is
(
true
)
//可用
...
@@ -271,6 +273,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -271,6 +273,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
ObjectUtil
.
isNotEmpty
(
labelId
))
{
if
(
ObjectUtil
.
isNotEmpty
(
labelId
))
{
c
.
and
(
"labelId"
).
is
(
labelId
);
c
.
and
(
"labelId"
).
is
(
labelId
);
}
}
c
=
addAppendData
(
c
,
appendDate
);
Query
q
=
new
Query
(
c
);
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
q
.
with
(
sort
);
...
@@ -283,6 +286,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -283,6 +286,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
pos
;
return
pos
;
}
}
@Override
public
StoragePos
findPartNumberInStorages
(
List
<
String
>
storageIdList
,
String
labelId
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
return
findPartNumberInStorages
(
storageIdList
,
labelId
,
pn
,
excludePosIds
,
checkOutType
,
new
HashMap
<>());
}
/**
/**
* 根据出库方式获取不同的 Sort
* 根据出库方式获取不同的 Sort
*/
*/
...
@@ -677,7 +685,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -677,7 +685,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
}
@Override
@Override
public
StoragePos
findMpnInStorages
(
List
<
String
>
storageIdList
,
String
mpn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
{
public
StoragePos
findMpnInStorages
(
List
<
String
>
storageIdList
,
String
mpn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
,
Map
<
String
,
String
>
appendData
)
{
Criteria
c
=
Criteria
.
where
(
"barcode.mpn"
).
is
(
mpn
)
Criteria
c
=
Criteria
.
where
(
"barcode.mpn"
).
is
(
mpn
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"id"
).
nin
(
excludePosIds
)
.
and
(
"enabled"
).
is
(
true
)
//可用
.
and
(
"enabled"
).
is
(
true
)
//可用
...
@@ -685,6 +693,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -685,6 +693,8 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
storageIdList
!=
null
)
{
if
(
storageIdList
!=
null
)
{
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
c
=
c
.
and
(
"storageId"
).
in
(
storageIdList
);
}
}
c
=
addAppendData
(
c
,
appendData
);
Query
q
=
new
Query
(
c
);
Query
q
=
new
Query
(
c
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
Sort
sort
=
getSortByCheckOutType
(
checkOutType
);
q
.
with
(
sort
);
q
.
with
(
sort
);
...
@@ -697,6 +707,40 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -697,6 +707,40 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
pos
;
return
pos
;
}
}
private
Criteria
addAppendData
(
Criteria
c
,
Map
<
String
,
String
>
appendData
){
try
{
if
(
appendData
!=
null
&&
appendData
.
size
()>
0
){
for
(
String
key
:
appendData
.
keySet
())
{
String
value
=
appendData
.
get
(
key
);
if
(
ObjectUtil
.
isNotEmpty
(
key
)&&
ObjectUtil
.
isNotEmpty
(
value
))
{
key
=
key
.
replace
(
"#"
,
"."
);
//如果是过期日期
if
(
key
.
equals
(
"barcode.expireDate"
)
||
key
.
equals
(
"barcode.produceDate"
))
{
//如果是生产日期
//把value转换为时间
// DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date
date
=
DateUtil
.
toDate
(
value
);
if
(
date
!=
null
)
{
c
.
and
(
key
).
is
(
date
);
}
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
continue
;
//转换出错直接continue;
}
}
else
{
c
.
and
(
key
).
is
(
value
);
}
}
}
}
}
catch
(
Exception
ex
){
log
.
error
(
"addAppendData 处理出错:"
+
appendData
);
}
return
c
;
}
@Override
@Override
public
List
<
StoragePos
>
findExpiredOrSluggishBarcode
(
Date
date
,
int
type
)
{
public
List
<
StoragePos
>
findExpiredOrSluggishBarcode
(
Date
date
,
int
type
)
{
Query
q
=
new
Query
();
Query
q
=
new
Query
();
...
...
src/main/java/com/neotel/smfcore/core/system/bean/OrderSetting.java
查看文件 @
87ef70d
...
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
...
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.HashMap
;
import
java.util.Map
;
@Data
@Data
public
class
OrderSetting
implements
Serializable
{
public
class
OrderSetting
implements
Serializable
{
...
@@ -28,6 +30,11 @@ public class OrderSetting implements Serializable {
...
@@ -28,6 +30,11 @@ public class OrderSetting implements Serializable {
public
String
mpn
=
"MPN"
;
public
String
mpn
=
"MPN"
;
/**
/**
* 自定义的附加字段,key=字段名,value=表头名称
*/
public
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
/**
* 是否显示料架亮灯方式
* 是否显示料架亮灯方式
*/
*/
@ApiModelProperty
(
"是否显示料架亮灯方式 ture=显示"
)
@ApiModelProperty
(
"是否显示料架亮灯方式 ture=显示"
)
...
...
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.java
查看文件 @
87ef70d
...
@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.system.rest;
...
@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.system.rest;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.csv.CsvReader
;
import
com.neotel.smfcore.common.csv.CsvReader
;
import
com.neotel.smfcore.common.excel.ExcelReader
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.common.utils.DateUtil
;
...
@@ -187,6 +188,19 @@ public class SettingsController {
...
@@ -187,6 +188,19 @@ public class SettingsController {
}
}
}
}
if
(
orderSetting
.
getAppendData
()!=
null
&&
orderSetting
.
getAppendData
().
size
()>
0
)
{
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
for
(
String
key
:
orderSetting
.
getAppendData
().
keySet
())
{
String
value
=
orderSetting
.
getAppendData
().
get
(
key
);
if
(
ObjectUtil
.
isNotEmpty
(
key
)
&&
ObjectUtil
.
isNotEmpty
(
value
))
{
String
nKey
=
key
.
replace
(
"."
,
"#"
);
appendData
.
put
(
nKey
,
value
);
}
}
orderSetting
.
setAppendData
(
appendData
);
}
dataCache
.
updateCache
(
Constants
.
CACHE_OrderSetting
,
orderSetting
);
dataCache
.
updateCache
(
Constants
.
CACHE_OrderSetting
,
orderSetting
);
log
.
info
(
"更改工单设置:"
+
Constants
.
CACHE_OrderSetting
+
"="
+
orderSetting
.
toString
());
log
.
info
(
"更改工单设置:"
+
Constants
.
CACHE_OrderSetting
+
"="
+
orderSetting
.
toString
());
return
ResultBean
.
newOkResult
(
"保存成功"
);
return
ResultBean
.
newOkResult
(
"保存成功"
);
...
@@ -247,22 +261,32 @@ public class SettingsController {
...
@@ -247,22 +261,32 @@ public class SettingsController {
@AnonymousAccess
@AnonymousAccess
public
ResultBean
uploadOrderModel
(
@RequestParam
MultipartFile
orderFile
)
{
public
ResultBean
uploadOrderModel
(
@RequestParam
MultipartFile
orderFile
)
{
String
image
=
"csv"
;
String
csv
=
"csv"
;
String
excel
=
"xlsx"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileName
=
FileUtil
.
getFileNameNoEx
(
orderFile
.
getOriginalFilename
());
String
fileName
=
FileUtil
.
getFileNameNoEx
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
if
(
fileType
!=
null
&&
(!
csv
.
contains
(
fileType
))
&&
(!
excel
.
contains
(
fileType
)
))
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
csv
+
","
+
excel
});
}
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
try
{
try
{
CsvReader
csvRead
=
CsvReader
.
newReader
(
localFile
.
getAbsolutePath
(),
""
,
""
);
if
(
fileType
.
equals
(
csv
))
{
String
[]
headers
=
csvRead
.
getHeaders
();
CsvReader
csvRead
=
CsvReader
.
newReader
(
localFile
.
getAbsolutePath
(),
""
,
""
);
return
ResultBean
.
newOkResult
(
headers
);
String
[]
headers
=
csvRead
.
getHeaders
();
return
ResultBean
.
newOkResult
(
headers
);
}
else
if
(
fileType
.
equals
(
excel
))
{
//读取所有excel表头
Map
<
String
,
Integer
>
headerData
=
ExcelReader
.
readHeaderMap
(
localFile
.
getAbsolutePath
(),
1
);
String
[]
headerArray
=
new
String
[
headerData
.
size
()];
headerData
.
keySet
().
toArray
(
headerArray
);
return
ResultBean
.
newOkResult
(
headerArray
);
}
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
}
}
return
ResultBean
.
newOkResult
(
""
);
}
}
@ApiOperation
(
"获取版本号"
)
@ApiOperation
(
"获取版本号"
)
@GetMapping
(
"/version"
)
@GetMapping
(
"/version"
)
...
...
src/main/resources/messages.properties
查看文件 @
87ef70d
...
@@ -312,6 +312,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
...
@@ -312,6 +312,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.order.ri
=
RI
smfcore.order.ri
=
RI
smfcore.order.pn
=
PN
smfcore.order.pn
=
PN
smfcore.order.MPN
=
MPN
smfcore.order.side
=
\u9762\u
522B
smfcore.order.side
=
\u9762\u
522B
smfcore.order.tableNo
=
\u
53F0
\u
8F66
\u
53F7
smfcore.order.tableNo
=
\u
53F0
\u
8F66
\u
53F7
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
...
...
src/main/resources/messages_en_US.properties
查看文件 @
87ef70d
...
@@ -311,6 +311,7 @@ smfcore.humiture.createDate=Create Time
...
@@ -311,6 +311,7 @@ smfcore.humiture.createDate=Create Time
smfcore.humiture.updateDate
=
Update Time
smfcore.humiture.updateDate
=
Update Time
smfcore.order.ri
=
RI
smfcore.order.ri
=
RI
smfcore.order.pn
=
PN
smfcore.order.pn
=
PN
smfcore.order.MPN
=
MPN
smfcore.order.side
=
Face Type
smfcore.order.side
=
Face Type
smfcore.order.tableNo
=
Trolley Number
smfcore.order.tableNo
=
Trolley Number
smfcore.order.feederInfo
=
Station Information
smfcore.order.feederInfo
=
Station Information
...
...
src/main/resources/messages_ja_JP.properties
查看文件 @
87ef70d
...
@@ -308,6 +308,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
...
@@ -308,6 +308,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.order.ri
=
RI
smfcore.order.ri
=
RI
smfcore.order.pn
=
PN
smfcore.order.pn
=
PN
smfcore.order.MPN
=
MPN
smfcore.order.side
=
\u3068\u5225\u
308C
\u
308B
smfcore.order.side
=
\u3068\u5225\u
308C
\u
308B
smfcore.order.tableNo
=
\u
53F0
\u
8ECA
\u
756A
\u
53F7
smfcore.order.tableNo
=
\u
53F0
\u
8ECA
\u
756A
\u
53F7
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
...
...
src/main/resources/messages_zh_CN.properties
查看文件 @
87ef70d
...
@@ -308,6 +308,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
...
@@ -308,6 +308,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.order.ri
=
RI
smfcore.order.ri
=
RI
smfcore.order.pn
=
PN
smfcore.order.pn
=
PN
smfcore.order.MPN
=
MPN
smfcore.order.side
=
\u9762\u
522B
smfcore.order.side
=
\u9762\u
522B
smfcore.order.tableNo
=
\u
53F0
\u
8F66
\u
53F7
smfcore.order.tableNo
=
\u
53F0
\u
8F66
\u
53F7
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
...
...
src/main/resources/messages_zh_TW.properties
查看文件 @
87ef70d
...
@@ -309,6 +309,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
...
@@ -309,6 +309,7 @@ smfcore.humiture.createDate=\u521B\u5EFA\u65F6\u95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.humiture.updateDate
=
\u
66F4
\u
65B0
\u
65F6
\u
95F4
smfcore.order.ri
=
RI
smfcore.order.ri
=
RI
smfcore.order.pn
=
PN
smfcore.order.pn
=
PN
smfcore.order.MPN
=
MPN
smfcore.order.side
=
\u9762\u5225
smfcore.order.side
=
\u9762\u5225
smfcore.order.tableNo
=
\u
53F0
\u
8ECA
\u
865F
smfcore.order.tableNo
=
\u
53F0
\u
8ECA
\u
865F
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
smfcore.order.feederInfo
=
\u
7AD9
\u
4F4D
\u
4FE1
\u
606F
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论