Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit c27b9264
由
zshaohui
编写于
2025-10-31 17:04:09 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
出货计算:增加机种,导出功能
出货料号维护: 增加机种(By机种设定优先级),出库数量,批量导入功能 库存信息抛送:增加机种(By机种抛送信息), 数量,模糊查询
1 个父辈
ea73bc4e
显示空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
262 行增加
和
18 行删除
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/custom/luxsan/factory_c/wipstor/bean/PnPriorityMt.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/dto/AutoDispatchDto.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/dto/PnPriorityMtDto.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/query/AutoDispatchInventoryQueryCriteria.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/AutoDispatchInventoryController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/OdnCalculateQty.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/OdnCheckOutNewController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/PnPriorityMtController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/service/manager/IPnPriorityMtManager.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/service/manager/impl/PnPriorityMtManagerImpl.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
c27b926
...
...
@@ -101,5 +101,5 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List
<
StoragePos
>
findPosByIdList
(
List
<
String
>
idList
);
List
<
StoragePos
>
findOdnCalculatePos
(
String
pn
,
String
warehouseCode
,
Collection
<
String
>
excludeOutPosIds
);
List
<
StoragePos
>
findOdnCalculatePos
(
String
pn
,
String
warehouseCode
,
Collection
<
String
>
excludeOutPosIds
,
String
modelFamily
);
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
c27b926
...
...
@@ -913,7 +913,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public
List
<
StoragePos
>
findOdnCalculatePos
(
String
pn
,
String
warehouseCode
,
Collection
<
String
>
excludeOutPosIds
)
{
public
List
<
StoragePos
>
findOdnCalculatePos
(
String
pn
,
String
warehouseCode
,
Collection
<
String
>
excludeOutPosIds
,
String
modelFamily
)
{
//排除hold的料箱
List
<
String
>
holdPalletIdList
=
new
ArrayList
<>();
List
<
FetchHoldInfoResult
>
holdList
=
LuxsanApi
.
fetchHoldInfo
(
new
FetchHoldInfoRequest
(
CommonUtil
.
plantCode
,
warehouseCode
,
pn
));
...
...
@@ -931,8 +931,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if
(
holdPalletIdList
!=
null
&&
!
holdPalletIdList
.
isEmpty
()){
c
.
and
(
"barcode.palletId"
).
nin
(
holdPalletIdList
);
}
if
(
StringUtils
.
isNotEmpty
(
modelFamily
)){
c
.
and
(
"barcode.modelFamily"
).
is
(
modelFamily
);
}
Query
q
=
new
Query
(
c
);
q
.
fields
().
include
(
"barcode.amount"
,
"barcode.partNumber"
,
"barcode.warehouseCode"
,
"posName"
,
"barcode.barcode"
,
"barcode.palletId"
);
q
.
fields
().
include
(
"barcode.amount"
,
"barcode.partNumber"
,
"barcode.warehouseCode"
,
"posName"
,
"barcode.barcode"
,
"barcode.palletId"
,
"barcode.modelFamily"
);
return
storagePosDao
.
findByQuery
(
q
);
}
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/PnPriorityMt.java
查看文件 @
c27b926
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
bean
;
import
com.neotel.smfcore.common.base.BasePo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
public
class
PnPriorityMt
extends
BasePo
{
private
String
partNumber
;
private
int
priority
;
private
String
modelFamily
;
private
int
checkOutNum
;
//private int inventoryNum;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/dto/AutoDispatchDto.java
查看文件 @
c27b926
...
...
@@ -12,4 +12,6 @@ public class AutoDispatchDto {
private
String
partNumber
;
private
String
warehouseCode
;
private
String
posName
;
private
String
modelFamily
;
private
int
amount
;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/dto/PnPriorityMtDto.java
查看文件 @
c27b926
...
...
@@ -18,5 +18,11 @@ public class PnPriorityMtDto implements Serializable {
private
int
priority
;
//机种
private
String
modelFamily
;
//要出库的数量
private
int
checkOutNum
;
//private int inventoryNum;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/query/AutoDispatchInventoryQueryCriteria.java
0 → 100644
查看文件 @
c27b926
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
bean
.
query
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
@Data
public
class
AutoDispatchInventoryQueryCriteria
{
@QueryCondition
(
blurry
=
"posName,barcode.barcode,barcode.amount,barcode.palletId,barcode.partNumber,barcode.warehouseCode,barcode.requestId,barcode.odn,barcode.modelFamily"
)
private
String
blurry
;
@QueryCondition
(
propName
=
"barcode.modelFamily"
)
private
String
modelFamily
;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/AutoDispatchInventoryController.java
查看文件 @
c27b926
...
...
@@ -2,6 +2,7 @@ package com.neotel.smfcore.custom.luxsan.factory_c.wipstor.controller;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
...
...
@@ -11,6 +12,7 @@ import com.neotel.smfcore.custom.luxsan.api.bean.request.FetchHoldInfoRequest;
import
com.neotel.smfcore.custom.luxsan.api.bean.result.FetchHoldInfoResult
;
import
com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.dto.AutoDispatchDto
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.query.AutoDispatchInventoryQueryCriteria
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -65,13 +67,13 @@ public class AutoDispatchInventoryController {
@ApiOperation
(
"获取库存信息"
)
@RequestMapping
(
"/getAllInventory"
)
@AnonymousAccess
public
ResultBean
getAllInventory
()
{
public
ResultBean
getAllInventory
(
AutoDispatchInventoryQueryCriteria
criteria
)
{
List
<
AutoDispatchDto
>
autoDispatchDtoList
=
new
ArrayList
<>();
//获取所有的库存信息
Query
q
=
new
Query
(
);
Query
q
=
QueryHelp
.
getQuery
(
criteria
);
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"enabled"
).
is
(
true
);
q
.
addCriteria
(
c
).
fields
().
include
(
"id"
,
"posName"
,
"barcode.barcode"
,
"barcode.
palletId"
,
"barcode.partNumber"
,
"barcode.warehouseCode"
,
"barcode.requestId"
,
"barcode.odn
"
);
q
.
addCriteria
(
c
).
fields
().
include
(
"id"
,
"posName"
,
"barcode.barcode"
,
"barcode.
amount"
,
"barcode.palletId"
,
"barcode.partNumber"
,
"barcode.warehouseCode"
,
"barcode.requestId"
,
"barcode.odn"
,
"barcode.modelFamily
"
);
//查询所有的,把hold的排除
Map
<
String
,
FetchHoldInfoRequest
>
fetchHoldInfoRequestMap
=
new
HashMap
<>();
...
...
@@ -124,6 +126,8 @@ public class AutoDispatchInventoryController {
dto
.
setPartNumber
(
barcode
.
getPartNumber
());
dto
.
setWarehouseCode
(
barcode
.
getWarehouseCode
());
dto
.
setPosName
(
pos
.
getPosName
());
dto
.
setModelFamily
(
barcode
.
getModelFamily
());
dto
.
setAmount
(
barcode
.
getAmount
());
autoDispatchDtoList
.
add
(
dto
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/OdnCalculateQty.java
查看文件 @
c27b926
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.FileUtil
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
...
...
@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.*
;
@Slf4j
...
...
@@ -48,7 +51,8 @@ public class OdnCalculateQty {
String
pn
=
paramMap
.
get
(
"pn"
);
String
targetNumStr
=
paramMap
.
get
(
"targetNum"
);
String
warehouseCode
=
paramMap
.
get
(
"warehouseCode"
);
log
.
info
(
"收到odn出货计算数量,料号为:"
+
pn
+
",目标数量为:"
+
targetNumStr
+
"库别为:"
+
warehouseCode
);
String
modelFamily
=
paramMap
.
get
(
"modelFamily"
);
log
.
info
(
"收到odn出货计算数量,料号为:"
+
pn
+
",目标数量为:"
+
targetNumStr
+
"库别为:"
+
warehouseCode
+
",机种为:"
+
modelFamily
);
//检验参数
if
(
StringUtils
.
isEmpty
(
pn
)
||
StringUtils
.
isEmpty
(
warehouseCode
)
||
StringUtils
.
isEmpty
(
targetNumStr
))
{
...
...
@@ -66,7 +70,7 @@ public class OdnCalculateQty {
//查找所有符合条件的库位
Collection
<
String
>
excludeOutPosIds
=
liteOrderCache
.
excludeOutPosIds
();
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findOdnCalculatePos
(
pn
,
warehouseCode
,
excludeOutPosIds
);
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findOdnCalculatePos
(
pn
,
warehouseCode
,
excludeOutPosIds
,
modelFamily
);
if
(
storagePosList
==
null
||
storagePosList
.
isEmpty
()){
calculate
=
false
;
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"料号:"
+
pn
+
"库别:"
+
warehouseCode
+
"库存中未找到料箱"
);
...
...
@@ -87,6 +91,7 @@ public class OdnCalculateQty {
resultMap
.
put
(
"warehouseCode"
,
pos
.
getBarcode
().
getWarehouseCode
());
resultMap
.
put
(
"pn"
,
pos
.
getBarcode
().
getPartNumber
());
resultMap
.
put
(
"palletId"
,
pos
.
getBarcode
().
getPalletId
());
resultMap
.
put
(
"modelFamily"
,
pos
.
getBarcode
().
getModelFamily
());
resultList
.
add
(
resultMap
);
}
...
...
@@ -94,4 +99,66 @@ public class OdnCalculateQty {
return
ResultBean
.
newOkResult
(
resultList
);
}
@ApiOperation
(
"计算数量"
)
@RequestMapping
(
"/calculate/download"
)
@AnonymousAccess
public
void
calculate
(
String
pn
,
String
targetNum
,
String
warehouseCode
,
String
modelFamily
,
HttpServletResponse
response
)
throws
Exception
{
calculate
=
true
;
//检验参数
if
(
StringUtils
.
isEmpty
(
pn
)
||
StringUtils
.
isEmpty
(
warehouseCode
)
||
StringUtils
.
isEmpty
(
targetNum
))
{
calculate
=
false
;
throw
new
ValidateException
(
""
,
"料号,库别,目标数量信息不能为空"
);
}
int
target
=
0
;
try
{
target
=
Integer
.
parseInt
(
targetNum
);
}
catch
(
NumberFormatException
e
)
{
log
.
info
(
"解析数量:"
+
targetNum
+
"报错:"
,
e
);
calculate
=
false
;
throw
new
ValidateException
(
""
,
targetNum
+
"格式不正确"
);
}
//查找所有符合条件的库位
Collection
<
String
>
excludeOutPosIds
=
liteOrderCache
.
excludeOutPosIds
();
List
<
StoragePos
>
storagePosList
=
storagePosManager
.
findOdnCalculatePos
(
pn
,
warehouseCode
,
excludeOutPosIds
,
modelFamily
);
if
(
storagePosList
==
null
||
storagePosList
.
isEmpty
())
{
calculate
=
false
;
throw
new
ValidateException
(
""
,
"料号:"
+
pn
+
"库别:"
+
warehouseCode
+
"库存中未找到料箱"
);
}
List
<
StoragePos
>
combinationsPosList
=
CalculateUtil
.
findCombinationsByPos
(
storagePosList
,
target
);
if
(
combinationsPosList
==
null
||
combinationsPosList
.
isEmpty
())
{
calculate
=
false
;
throw
new
ValidateException
(
""
,
"料号:"
+
pn
+
"库别:"
+
warehouseCode
+
"库存中未找到对应的组合数据"
);
}
List
<
Map
<
String
,
Object
>>
dataList
=
new
ArrayList
<>();
for
(
StoragePos
pos
:
combinationsPosList
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"料箱"
,
pos
.
getBarcode
().
getBarcode
());
resultMap
.
put
(
"栈板ID"
,
pos
.
getBarcode
().
getPalletId
());
resultMap
.
put
(
"料号"
,
pos
.
getBarcode
().
getPartNumber
());
resultMap
.
put
(
"机种"
,
pos
.
getBarcode
().
getModelFamily
());
resultMap
.
put
(
"数量"
,
pos
.
getBarcode
().
getAmount
());
resultMap
.
put
(
"库别"
,
pos
.
getBarcode
().
getWarehouseCode
());
resultMap
.
put
(
"库位"
,
pos
.
getPosName
());
dataList
.
add
(
resultMap
);
}
calculate
=
false
;
List
<
String
>
titles
=
new
ArrayList
<>();
titles
.
add
(
"料箱"
);
titles
.
add
(
"料号"
);
titles
.
add
(
"栈板ID"
);
titles
.
add
(
"数量"
);
titles
.
add
(
"库别"
);
titles
.
add
(
"库位"
);
titles
.
add
(
"机种"
);
FileUtil
.
downloadCSV
(
dataList
,
titles
,
response
);
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/OdnCheckOutNewController.java
查看文件 @
c27b926
...
...
@@ -172,7 +172,7 @@ public class OdnCheckOutNewController {
excludeOutPosIds
.
addAll
(
holdPosIdList
);
}
//获取符合条件的pn
List
<
StoragePos
>
dbStoragePosList
=
storagePosManager
.
findOdnCalculatePos
(
pn
,
warehouseCode
,
excludeOutPosIds
);
List
<
StoragePos
>
dbStoragePosList
=
storagePosManager
.
findOdnCalculatePos
(
pn
,
warehouseCode
,
excludeOutPosIds
,
""
);
if
(
dbStoragePosList
==
null
)
{
dbStoragePosList
=
new
ArrayList
<>();
}
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/PnPriorityMtController.java
查看文件 @
c27b926
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.base.IExcelDownLoad
;
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.StringUtils
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.PnPriorityMt
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.dto.PnPriorityMtDto
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.mapstruct.PnPriorityMtMapper
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.service.manager.IPnPriorityMtManager
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.models.auth.In
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.FileReader
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.*
;
/**
* partNumber优先级维护
...
...
@@ -42,14 +52,22 @@ public class PnPriorityMtController {
@Autowired
private
PnPriorityMtMapper
pnPriorityMtMapper
;
@Autowired
private
FileProperties
properties
;
@ApiOperation
(
"获取列表"
)
@RequestMapping
(
"/getPnPriorityList"
)
@AnonymousAccess
public
PageData
getPnPriorityList
(
String
partNumber
,
Pageable
pageable
)
{
public
PageData
getPnPriorityList
(
String
partNumber
,
String
modelFamily
,
Pageable
pageable
)
{
Query
query
=
new
Query
();
Criteria
criteria
=
new
Criteria
();
if
(
StringUtils
.
isNotEmpty
(
partNumber
))
{
query
.
addCriteria
(
Criteria
.
where
(
"partNumber"
).
is
(
partNumber
)
);
criteria
.
and
(
"partNumber"
).
is
(
partNumber
);
}
if
(
StringUtils
.
isNotEmpty
(
modelFamily
))
{
criteria
.
and
(
"modelFamily"
).
is
(
modelFamily
);
}
query
.
addCriteria
(
criteria
);
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"priority"
));
PageData
<
PnPriorityMt
>
pageData
=
pnPriorityMtManager
.
findByPage
(
query
,
pageable
);
List
<
PnPriorityMt
>
content
=
pageData
.
getContent
();
...
...
@@ -96,6 +114,8 @@ public class PnPriorityMtController {
List
<
List
<
String
>>
headerList
=
new
ArrayList
<>();
headerList
.
add
(
Arrays
.
asList
(
"id"
));
headerList
.
add
(
Arrays
.
asList
(
"料号"
));
headerList
.
add
(
Arrays
.
asList
(
"机种"
));
headerList
.
add
(
Arrays
.
asList
(
"出库数量"
));
headerList
.
add
(
Arrays
.
asList
(
"优先级"
));
headerList
.
add
(
Arrays
.
asList
(
"创建时间"
));
headerList
.
add
(
Arrays
.
asList
(
"修改时间"
));
...
...
@@ -110,6 +130,8 @@ public class PnPriorityMtController {
List
<
Object
>
data
=
new
ArrayList
<>();
data
.
add
(
pnPriorityMt
.
getId
());
data
.
add
(
pnPriorityMt
.
getPartNumber
());
data
.
add
(
pnPriorityMt
.
getModelFamily
());
data
.
add
(
pnPriorityMt
.
getCheckOutNum
());
data
.
add
(
pnPriorityMt
.
getPriority
());
data
.
add
(
pnPriorityMt
.
getCreateDate
());
data
.
add
(
pnPriorityMt
.
getUpdateDate
());
...
...
@@ -119,4 +141,117 @@ public class PnPriorityMtController {
}
});
}
@ApiOperation
(
"下载工单模板"
)
@GetMapping
(
value
=
"/downloadModel"
)
@AnonymousAccess
public
void
download
(
HttpServletResponse
response
)
throws
IOException
{
downloadModel
(
response
);
}
@ApiOperation
(
"上传表格"
)
@RequestMapping
(
"/upload"
)
@AnonymousAccess
public
ResultBean
upload
(
@RequestParam
MultipartFile
uploadFile
)
{
//判断是不是csv文件
// 验证文件上传的格式
String
image
=
"csv"
;
String
fileType
=
FileUtil
.
getExtensionName
(
uploadFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pnPriority"
);
File
file
=
FileUtil
.
upload
(
uploadFile
,
folder
.
getAbsolutePath
());
List
<
PnPriorityMt
>
pnPriorityMtList
=
readCsvFile
(
file
.
getAbsolutePath
());
if
(
pnPriorityMtList
==
null
||
pnPriorityMtList
.
isEmpty
()){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"请检查是否有空值或者出库数量和优先级不是数字"
);
}
for
(
PnPriorityMt
pnPriorityMt
:
pnPriorityMtList
)
{
PnPriorityMt
mt
=
pnPriorityMtManager
.
findOne
(
new
Query
(
Criteria
.
where
(
"partNumber"
).
is
(
pnPriorityMt
.
getPartNumber
()).
and
(
"modelFamily"
).
is
(
pnPriorityMt
.
getModelFamily
())));
if
(
mt
!=
null
){
pnPriorityMt
.
setId
(
mt
.
getId
());
pnPriorityMt
.
setCreateDate
(
mt
.
getCreateDate
());
}
pnPriorityMtManager
.
save
(
pnPriorityMt
);
}
return
ResultBean
.
newOkResult
(
""
);
}
public
List
<
PnPriorityMt
>
readCsvFile
(
String
fileURL
)
{
CsvReader
csvRead
=
null
;
List
<
PnPriorityMt
>
resultList
=
new
ArrayList
<>();
try
{
csvRead
=
CsvReader
.
newReader
(
fileURL
,
"料号"
,
"料号"
);
int
partNumberIndex
=
csvRead
.
getIndex
(
"料号"
,
"料号"
);
int
modelIndex
=
csvRead
.
getIndex
(
"机种"
,
"机种"
);
int
checkOutIndex
=
csvRead
.
getIndex
(
"出库数量"
,
"出库数量"
);
int
priorityIndex
=
csvRead
.
getIndex
(
"优先级"
,
"优先级"
);
int
row
=
1
;
while
(
csvRead
.
readRecord
())
{
row
++;
String
[]
lineValues
=
csvRead
.
getValues
();
String
partNumber
=
lineValues
[
partNumberIndex
];
if
(
StringUtils
.
isEmpty
(
partNumber
))
{
continue
;
}
String
modelValue
=
lineValues
[
modelIndex
];
if
(
StringUtils
.
isEmpty
(
modelValue
))
{
continue
;
}
String
priorityValue
=
lineValues
[
priorityIndex
];
if
(
StringUtils
.
isEmpty
(
priorityValue
)){
continue
;
}
int
priority
=
Integer
.
parseInt
(
priorityValue
);
String
checkOutValue
=
lineValues
[
checkOutIndex
];
if
(
StringUtils
.
isEmpty
(
checkOutValue
)){
continue
;
}
int
checkOutNum
=
Integer
.
parseInt
(
checkOutValue
);
PnPriorityMt
mt
=
new
PnPriorityMt
();
mt
.
setPriority
(
priority
);
mt
.
setPartNumber
(
partNumber
);
mt
.
setCheckOutNum
(
checkOutNum
);
mt
.
setModelFamily
(
modelValue
);
mt
.
setCheckOutNum
(
checkOutNum
);
resultList
.
add
(
mt
);
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析上传的工单出错:"
,
ex
);
}
finally
{
if
(
csvRead
!=
null
)
{
csvRead
.
close
();
}
}
return
resultList
;
}
public
void
downloadModel
(
HttpServletResponse
response
)
throws
IOException
{
try
{
List
<
Map
<
String
,
Object
>>
maps
=
new
ArrayList
<>();
List
<
String
>
titles
=
new
ArrayList
<>();
titles
.
add
(
"料号"
);
titles
.
add
(
"机种"
);
titles
.
add
(
"出库数量"
);
titles
.
add
(
"优先级"
);
for
(
int
i
=
1
;
i
<=
10
;
i
++)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"料号"
,
"料号"
+
i
);
map
.
put
(
"机种"
,
"机种"
+
i
);
map
.
put
(
"出库数量"
,
i
);
map
.
put
(
"优先级"
,
i
);
maps
.
add
(
map
);
}
FileUtil
.
downloadCSV
(
maps
,
titles
,
response
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导出失败"
+
e
.
getMessage
(),
e
);
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/service/manager/IPnPriorityMtManager.java
查看文件 @
c27b926
...
...
@@ -11,4 +11,6 @@ public interface IPnPriorityMtManager extends IBaseManager<PnPriorityMt> {
void
deleteById
(
String
id
);
List
<
PnPriorityMt
>
findByQuery
(
Query
query
,
Pageable
pageable
);
PnPriorityMt
findOne
(
Query
query
);
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/service/manager/impl/PnPriorityMtManagerImpl.java
查看文件 @
c27b926
...
...
@@ -55,4 +55,9 @@ public class PnPriorityMtManagerImpl implements IPnPriorityMtManager {
public
List
<
PnPriorityMt
>
findByQuery
(
Query
query
,
Pageable
pageable
)
{
return
pnPriorityMtDao
.
findByQuery
(
query
,
pageable
);
}
@Override
public
PnPriorityMt
findOne
(
Query
query
)
{
return
pnPriorityMtDao
.
findOne
(
query
);
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论