Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 5b26cb19
由
LN
编写于
2022-04-27 15:56:56 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
元器件增加导入功能
1 个父辈
2d9fbf4b
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
212 行增加
和
22 行删除
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/IComponentManager.java
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Component.java
src/main/java/com/neotel/smfcore/core/barcode/rest/ComponentController.java
查看文件 @
5b26cb1
package
com
.
neotel
.
smfcore
.
core
.
barcode
.
rest
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.PageData
;
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.common.utils.QueryHelp
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.ComponentDto
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.ComponentMatchingDto
;
...
...
@@ -14,6 +18,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import
com.neotel.smfcore.core.barcode.service.po.Component
;
import
com.neotel.smfcore.core.barcode.utils.QrcodeUtils
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
...
...
@@ -26,14 +31,12 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.ServletOutputStream
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.*
;
@Slf4j
@RestController
...
...
@@ -51,6 +54,8 @@ public class ComponentController {
private
final
QrcodeUtils
qrcodeUtils
;
@Autowired
private
final
FileProperties
properties
;
@Autowired
private
final
IStoragePosManager
storagePosManager
;
@ApiOperation
(
"导出元器件信息"
)
...
...
@@ -182,4 +187,146 @@ public class ComponentController {
}
@ApiOperation
(
"上传元器件列表"
)
@PostMapping
(
value
=
"/uploadList"
)
@PreAuthorize
(
"@el.check('component:list')"
)
public
ResultBean
uploadList
(
@RequestParam
MultipartFile
orderFile
)
{
String
image
=
"csv"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
}
File
folder
=
new
File
(
properties
.
getPath
(),
"component"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
List
<
Component
>
componentList
=
readComponentCsv
(
localFile
.
getAbsolutePath
());
int
addCount
=
componentManager
.
saveComponentList
(
componentList
);
if
(
addCount
>
0
)
{
return
ResultBean
.
newOkResult
(
"smfcore.component.uploadOK"
,
"上传成功,共新增"
+
addCount
+
"元器件"
,
new
String
[]{
addCount
+
""
},
""
);
}
else
{
return
ResultBean
.
newOkResult
(
"smfcore.component.uploadOK"
,
"上传元器件失败"
,
""
);
}
}
@ApiOperation
(
"下载元器件模板"
)
@GetMapping
(
value
=
"/downloadModel"
)
@PreAuthorize
(
"@el.check('component:list')"
)
public
void
downloadModel
(
HttpServletResponse
response
)
throws
IOException
{
downloadComponentModel
(
response
);
}
public
void
downloadComponentModel
(
HttpServletResponse
response
)
throws
IOException
{
try
{
List
<
Map
<
String
,
Object
>>
maps
=
new
ArrayList
<>();
List
<
String
>
titles
=
new
ArrayList
<>();
String
[]
titleArray
=
new
String
[]{
"料件编号"
,
"数量"
,
"尺寸"
,
"高度"
,
"最大库存"
,
"最小库存"
,
"安全库存"
,
"呆滞天数"
,
"整盘比"
,
"散盘比"
,
"描述"
};
for
(
String
title
:
titleArray
)
{
titles
.
add
(
title
);
}
for
(
int
i
=
1
;
i
<=
5
;
i
++)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"料件编号"
,
"MATERIALNO-"
+
i
);
map
.
put
(
"数量"
,
1000
);
map
.
put
(
"尺寸"
,
7
);
map
.
put
(
"高度"
,
8
);
map
.
put
(
"最大库存"
,
""
);
map
.
put
(
"最小库存"
,
""
);
map
.
put
(
"安全库存"
,
""
);
map
.
put
(
"呆滞天数"
,
""
);
map
.
put
(
"整盘比"
,
""
);
map
.
put
(
"散盘比"
,
""
);
map
.
put
(
"描述"
,
""
);
maps
.
add
(
map
);
}
FileUtil
.
downloadCSV
(
maps
,
titles
,
response
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导出失败"
+
e
.
getMessage
(),
e
);
}
}
private
List
<
Component
>
readComponentCsv
(
String
fileUrl
)
{
List
<
Component
>
items
=
new
ArrayList
<>();
try
{
String
[]
titleArray
=
new
String
[]{
"料件编号"
,
"数量"
,
"尺寸"
,
"高度"
,
"最大库存"
,
"最小库存"
,
"安全库存"
,
"呆滞天数"
,
"整盘"
,
"散盘"
,
"描述"
};
CsvReader
csvRead
=
CsvReader
.
newReader
(
fileUrl
,
"料件编号"
,
"materialNo"
);
int
partNumberIndex
=
csvRead
.
getIndex
(
"料件编号"
,
"materialNo"
);
int
amountIndex
=
csvRead
.
getIndex
(
"数量"
,
"amount"
);
int
plateSizeIndex
=
csvRead
.
getIndex
(
"尺寸"
,
"plateSize"
);
int
heightIndex
=
csvRead
.
getIndex
(
"高度"
,
"height"
);
int
maxStoreNumIndex
=
csvRead
.
getIndex
(
"最大库存"
,
"maxStoreNum"
);
int
minStoreNumIndex
=
csvRead
.
getIndex
(
"最小库存"
,
"minStoreNum"
);
int
safetyStoreNumIndex
=
csvRead
.
getIndex
(
"安全库存"
,
"safetyStoreNum"
);
int
sluggishDayIndex
=
csvRead
.
getIndex
(
"呆滞天数"
,
"sluggishDay"
);
int
wholeReelIndex
=
csvRead
.
getIndex
(
"整盘"
,
"wholeReel"
);
int
halfReelIndex
=
csvRead
.
getIndex
(
"散盘"
,
"halfReel"
);
int
descriptionIndex
=
csvRead
.
getIndex
(
"描述"
,
"description"
);
if
(
amountIndex
==-
1
||
plateSizeIndex
==-
1
||
heightIndex
==-
1
){
throw
new
ValidateException
(
"smfcore.componetn.csverror"
,
"文件格式错误,必须包含列:料件编号,数量,尺寸,高度"
);
}
int
row
=
1
;
int
newRowCount
=
0
;
int
updateRowCount
=
0
;
while
(
csvRead
.
readRecord
())
{
row
++;
String
[]
lineValues
=
csvRead
.
getValues
();
String
PN
=
lineValues
[
partNumberIndex
];
if
(
ObjectUtil
.
isEmpty
(
PN
))
{
continue
;
}
try
{
Component
item
=
new
Component
();
item
.
setPartNumber
(
lineValues
[
partNumberIndex
]);
item
.
setAmount
(
Convert
.
toInt
(
lineValues
[
amountIndex
]));
item
.
setPlateSize
(
Convert
.
toInt
(
lineValues
[
plateSizeIndex
]));
item
.
setHeight
(
Convert
.
toInt
(
lineValues
[
heightIndex
]));
item
.
setMaxStorageTime
(
getIntValue
(
lineValues
,
maxStoreNumIndex
,
item
.
getMaxStorageTime
()));
item
.
setMinStoreNum
(
getIntValue
(
lineValues
,
minStoreNumIndex
,
item
.
getMinStoreNum
()));
item
.
setSafetyStoreNum
(
getIntValue
(
lineValues
,
safetyStoreNumIndex
,
item
.
getSafetyStoreNum
()));
item
.
setSluggishDay
(
getIntValue
(
lineValues
,
sluggishDayIndex
,
item
.
getSluggishDay
()));
item
.
setWholeReel
(
getIntValue
(
lineValues
,
wholeReelIndex
,
item
.
getWholeReel
()));
item
.
setHalfReel
(
getIntValue
(
lineValues
,
halfReelIndex
,
item
.
getHalfReel
()));
item
.
setDescription
(
lineValues
[
descriptionIndex
]);
if
(
item
.
getPlateSize
()>
0
&&
item
.
getHeight
()>
0
){
item
.
setSizeConfirmed
(
true
);
}
items
.
add
(
item
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析文件"
+
fileUrl
+
" 第"
+
row
+
"行 出错:"
+
ex
);
continue
;
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"读取文件["
+
fileUrl
+
"]出错:"
+
ex
.
toString
());
}
return
items
;
}
private
int
getIntValue
(
String
[]
lineValues
,
int
index
,
int
defaultValue
){
if
(
index
>=
0
&&
index
<
lineValues
.
length
){
String
v
=
lineValues
[
index
];
if
(
ObjectUtil
.
isEmpty
(
v
)){
return
defaultValue
;
}
try
{
return
Convert
.
toInt
(
v
);
}
catch
(
Exception
ex
){
}
}
return
defaultValue
;
}
}
src/main/java/com/neotel/smfcore/core/barcode/service/manager/IComponentManager.java
查看文件 @
5b26cb1
...
...
@@ -18,4 +18,6 @@ public interface IComponentManager extends IBaseManager<Component> {
void
download
(
List
<
Component
>
queryAll
,
HttpServletResponse
response
)
throws
IOException
;
void
deleteComponents
(
Set
<
String
>
ids
);
int
saveComponentList
(
List
<
Component
>
componentList
);
}
src/main/java/com/neotel/smfcore/core/barcode/service/manager/impl/ComponentManagerImpl.java
查看文件 @
5b26cb1
...
...
@@ -68,17 +68,19 @@ public class ComponentManagerImpl implements IComponentManager {
if
(
StringUtils
.
isEmpty
(
partNumber
))
return
null
;
else
{
Component
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
provider
});
if
(
component
==
null
)
{
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
null
});
if
(
component
==
null
){
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
,
"provider"
},
new
String
[]{
partNumber
,
""
});
}
if
(
component
!=
null
)
{
component
.
setProvider
(
provider
);
component
=
componentDao
.
save
(
component
);
}
}
Component
component
=
componentDao
.
findOneByCondition
(
new
String
[]{
"partNumber"
},
new
String
[]{
partNumber
});
// Component component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, provider});
// if (component == null) {
// component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, null});
// if (component == null) {
// component = componentDao.findOneByCondition(new String[]{"partNumber", "provider"}, new String[]{partNumber, ""});
// }
// if (component != null) {
// component.setProvider(provider);
// component = componentDao.save(component);
// }
// }
return
component
;
}
}
...
...
@@ -123,6 +125,44 @@ public class ComponentManagerImpl implements IComponentManager {
}
@Override
public
int
saveComponentList
(
List
<
Component
>
componentList
)
{
List
<
Component
>
newComList
=
new
ArrayList
<>();
String
addPnStr
=
""
;
for
(
Component
resources
:
componentList
)
{
if
(
resources
.
getPartNumber
()
==
null
)
{
continue
;
}
if
(
resources
.
getProvider
()
==
null
)
{
resources
.
setProvider
(
""
);
}
if
(
resources
.
getProviderNumber
()
==
null
)
{
resources
.
setProviderNumber
(
""
);
}
if
(
resources
.
getDescription
()
==
null
)
{
resources
.
setDescription
(
""
);
}
//判断partNum是否重复
Criteria
c
=
Criteria
.
where
(
"partNumber"
).
is
(
resources
.
getPartNumber
());
Component
com
=
componentDao
.
findOne
(
new
Query
(
c
));
if
(
com
!=
null
)
{
log
.
info
(
"saveComponentList 元器件["
+
resources
.
getPartNumber
()
+
"]已存在,暂不处理"
);
continue
;
}
addPnStr
+=
resources
.
getPartNumber
()
+
","
;
newComList
.
add
(
resources
);
}
if
(
newComList
.
size
()
>
0
)
{
componentDao
.
insertAll
(
newComList
);
log
.
info
(
"saveComponentList 共新增["
+
newComList
.
size
()
+
"]条元器件:"
+
addPnStr
);
}
return
newComList
.
size
();
}
@Override
public
Component
saveComponent
(
Component
resources
)
{
if
(
resources
.
getPartNumber
()==
null
){
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
5b26cb1
...
...
@@ -82,6 +82,9 @@ public class Barcode extends BasePo implements Serializable {
* 盘高
*/
private
int
height
=
0
;
/**
* 供应商
*/
private
String
provider
;
/**
* 批次
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/po/Component.java
查看文件 @
5b26cb1
...
...
@@ -77,11 +77,9 @@ public class Component extends BasePo implements Serializable {
*/
//名称
private
String
name
;
//料号
//@NotEmpty(message = "{component.partNumber.empty}")
// @NotEmpty(message = "{component.partNumber.empty}")
// @NotNull
/**
* 物料编号
*/
private
String
partNumber
;
/**
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论