Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit d99c1f01
由
LN
编写于
2022-01-11 13:27:08 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加库位出库功能
1 个父辈
64849811
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
216 行增加
和
1 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/haman/bean/BINPosInfo.java
src/main/java/com/neotel/smfcore/core/haman/rest/PosOutputController.java
src/main/java/com/neotel/smfcore/core/haman/rest/dto/BINPosDto.java
src/main/java/com/neotel/smfcore/core/haman/rest/mapstruct/BINPosMapper.java
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
d99c1f0
...
...
@@ -226,6 +226,7 @@ public class DataInitManager {
Menu
celueOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"tacticsOuput"
,
"PN出库"
,
1
,
"tacticsOuput"
,
"neolight/tacticsOuput/index"
,
""
,
0
,
"tacticsOuput"
);
out
.
setChildren
(
Arrays
.
asList
((
new
Menu
[]{
menuOut
,
celueOut
})));
Menu
posOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"posOutput"
,
"库位出库"
,
1
,
"posOutput"
,
"system/posOutput/index"
,
""
,
0
,
"swagger"
);
Menu
groupOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"labelOuput"
,
"物料标签"
,
1
,
"labelOuput"
,
"neolight/labelOuput/index"
,
""
,
0
,
"mgroup"
);
// Menu manualOut = new Menu(new ArrayList<Menu>(), 1, "manualOut", "手动出库", 1, "manualOut", "neolight/manualOut/index", "", 0, "export1");
...
...
@@ -237,8 +238,9 @@ public class DataInitManager {
groupOut
.
setHidden
(
true
);
materialBox
.
setHidden
(
true
);
outSet
.
setHidden
(
true
);
posOut
.
setHidden
(
true
);
// orderSet.setHidden(true);
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
out
,
groupOut
,
materialBox
,
outSet
));
menus
.
addAll
(
createMenus
(
poutOut
,
menuOrder
,
out
,
posOut
,
groupOut
,
materialBox
,
outSet
));
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu
msd
=
Menu
.
CreatePMenu
(
"MSD管理"
,
20
,
"msd"
,
2
,
"MSD"
);
...
...
src/main/java/com/neotel/smfcore/core/haman/bean/BINPosInfo.java
0 → 100644
查看文件 @
d99c1f0
package
com
.
neotel
.
smfcore
.
core
.
haman
.
bean
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
BINPosInfo
implements
Serializable
{
private
String
bIN
;
private
String
posId
;
private
String
posName
;
private
String
storageId
;
private
String
storageName
;
}
src/main/java/com/neotel/smfcore/core/haman/rest/PosOutputController.java
0 → 100644
查看文件 @
d99c1f0
package
com
.
neotel
.
smfcore
.
core
.
haman
.
rest
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.csv.CsvReader
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.FileUtil
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.haman.bean.BINPosInfo
;
import
com.neotel.smfcore.core.haman.rest.dto.BINPosDto
;
import
com.neotel.smfcore.core.haman.rest.mapstruct.BINPosMapper
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.security.TokenProvider
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.bytebuddy.asm.Advice
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.File
;
import
java.util.*
;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api
(
tags
=
"库位出库"
)
@RequestMapping
(
"api/posOutput"
)
public
class
PosOutputController
{
@Autowired
private
final
FileProperties
properties
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
BINPosMapper
binPosMapper
;
@Autowired
private
TokenProvider
tokenProvider
;
// Map<String,List<BINPosInfo>> operageMap=new HashMap<>();
private
List
<
BINPosInfo
>
posInfoList
=
new
ArrayList
<>();
@ApiOperation
(
"上传库位"
)
@PostMapping
(
value
=
"/upload"
)
@AnonymousAccess
public
List
<
BINPosDto
>
upload
(
@RequestParam
MultipartFile
orderFile
,
HttpServletRequest
request
)
{
String
image
=
"csv"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileName
=
FileUtil
.
getFileNameNoEx
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
List
<
String
>
itemList
=
readFile
(
fileName
,
localFile
.
getAbsolutePath
());
if
(
itemList
==
null
||
itemList
.
size
()
<=
0
)
{
throw
new
ValidateException
(
"smfcore.fileError"
,
"文件解析失败"
);
}
else
{
//先把之前的灯关闭
for
(
BINPosInfo
pos
:
posInfoList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
"close"
,
pos
.
getPosName
()
+
"="
);
log
.
info
(
"上传文件时关闭上次的灯,关灯:"
+
pos
.
getPosName
());
}
posInfoList
=
new
ArrayList
<>();
}
String
token
=
tokenProvider
.
getToken
(
request
);
String
ptoken
=
token
.
substring
(
token
.
length
()
-
10
);
String
color
=
"green"
;
for
(
String
bin
:
itemList
)
{
String
posName
=
bin
;
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
continue
;
}
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
if
(
storage
==
null
)
{
log
.
info
(
"上传库位出库文件时,库位["
+
pos
.
getId
()
+
"]["
+
pos
.
getPosName
()
+
"],storageId=["
+
pos
.
getStorageId
()
+
"]未找到料仓"
);
continue
;
}
BINPosInfo
posInfo
=
new
BINPosInfo
(
bin
,
pos
.
getId
(),
pos
.
getPosName
(),
pos
.
getStorageId
(),
storage
.
getName
());
posInfoList
.
add
(
posInfo
);
String
lightOnStr
=
pos
.
getPosName
()
+
"="
+
color
;
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
"open"
,
lightOnStr
);
log
.
info
(
"["
+
ptoken
+
"]上传出库库位,点亮库位:"
+
lightOnStr
);
}
// operageMap.put(token,posInfos);
log
.
info
(
"["
+
ptoken
+
"]上传["
+
posInfoList
.
size
()
+
"]条库位信息"
);
List
<
BINPosDto
>
results
=
binPosMapper
.
toDto
(
posInfoList
);
return
results
;
}
@ApiOperation
(
"全部灭灯"
)
@PostMapping
(
value
=
"/closeAllLed"
)
@AnonymousAccess
public
ResultBean
closeAllLed
(
HttpServletRequest
request
)
{
String
token
=
tokenProvider
.
getToken
(
request
);
String
ptoken
=
token
.
substring
(
token
.
length
()
-
10
);
// List<BINPosInfo> posInfos=operageMap.get(token);
if
(
posInfoList
==
null
||
posInfoList
.
size
()
<=
0
)
{
throw
new
ValidateException
(
"smfcore.posOutput.noFile"
,
"请先上传出库文件"
);
}
for
(
BINPosInfo
pos
:
posInfoList
)
{
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
DevicesStatusUtil
.
appendOp
(
storage
.
getCid
(),
"close"
,
pos
.
getPosName
()
+
"="
);
log
.
info
(
"["
+
ptoken
+
"]点击全部灭灯,关灯:"
+
pos
.
getPosName
());
}
posInfoList
=
new
ArrayList
<>();
return
ResultBean
.
newOkResult
(
"操作成功"
);
}
public
List
<
String
>
readFile
(
String
fileName
,
String
fileURL
)
{
List
<
String
>
items
=
Lists
.
newArrayList
();
try
{
fileName
=
fileName
.
replace
(
".csv"
,
""
);
log
.
info
(
"开始解析新上传的库位文件"
);
CsvReader
csvRead
=
CsvReader
.
newReader
(
fileURL
,
"BIN"
,
"库位"
);
int
binIndex
=
csvRead
.
getIndex
(
"BIN"
,
"库位"
);
int
row
=
1
;
while
(
csvRead
.
readRecord
())
{
row
++;
String
[]
lineValues
=
csvRead
.
getValues
();
String
partNumber
=
lineValues
[
binIndex
].
trim
();
if
(
partNumber
.
isEmpty
())
{
continue
;
}
items
.
add
(
partNumber
);
}
return
items
;
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析新上传的库位文件出错:"
+
ex
.
toString
());
}
return
items
;
}
}
src/main/java/com/neotel/smfcore/core/haman/rest/dto/BINPosDto.java
0 → 100644
查看文件 @
d99c1f0
package
com
.
neotel
.
smfcore
.
core
.
haman
.
rest
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
BINPosDto
implements
Serializable
{
@ApiModelProperty
(
value
=
"BIN名称"
)
private
String
bIN
;
@ApiModelProperty
(
value
=
"料架名称"
)
private
String
storageName
;
@ApiModelProperty
(
value
=
"库位号"
)
private
String
posName
;
}
src/main/java/com/neotel/smfcore/core/haman/rest/mapstruct/BINPosMapper.java
0 → 100644
查看文件 @
d99c1f0
package
com
.
neotel
.
smfcore
.
core
.
haman
.
rest
.
mapstruct
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.haman.bean.BINPosInfo
;
import
com.neotel.smfcore.core.haman.rest.dto.BINPosDto
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
BINPosMapper
extends
BaseMapper
<
BINPosDto
,
BINPosInfo
>
{
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论