Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 89fad21a
由
LN
编写于
2022-03-31 11:37:20 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
上传功能bug修改
1 个父辈
fd909f20
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
386 行增加
和
264 行删除
src/main/java/com/neotel/smfcore/common/utils/DateUtil.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.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/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.java
src/main/java/com/neotel/smfcore/hikvision/HikvisionApiController.java
src/main/java/com/neotel/smfcore/hikvision/bean/HikOutInfo.java
src/main/java/com/neotel/smfcore/common/utils/DateUtil.java
查看文件 @
89fad21
package
com
.
neotel
.
smfcore
.
common
.
utils
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
...
...
@@ -57,6 +58,9 @@ public class DateUtil {
}
public
static
String
toDateString
(
Date
aDate
,
String
aMask
)
{
if
(
ObjectUtil
.
isEmpty
(
aMask
)){
aMask
=
"yyyy-MM-dd HH:mm:ss"
;
}
SimpleDateFormat
df
=
null
;
String
returnValue
=
""
;
...
...
@@ -76,6 +80,9 @@ public class DateUtil {
public
static
Date
toDate
(
String
strDate
,
String
aMask
)
throws
ParseException
{
if
(
ObjectUtil
.
isEmpty
(
aMask
)){
aMask
=
"yyyy-MM-dd HH:mm:ss"
;
}
SimpleDateFormat
df
;
Date
date
;
df
=
new
SimpleDateFormat
(
aMask
);
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.java
查看文件 @
89fad21
...
...
@@ -182,36 +182,42 @@ public class NLPShelfHandler extends BaseDeviceHandler{
handleMsg
(
statusBean
);
statusBean
=
saveAlarmAndHumidity
(
statusBean
);
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
boolean
openZhiYin
=
orderSetting
.
getShelfLightType
().
equals
(
1
);
Map
<
String
,
List
<
DataLog
>>
outMap
=
new
HashMap
<>();
//
OrderSetting orderSetting = dataCache.getOrderSetting();
//
boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
//
Map<String, List<DataLog>> outMap = new HashMap<>();
//亮灯
Collection
<
DataLog
>
queueTasks
=
taskService
.
getQueueTasks
(
statusBean
.
getCid
());
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
isWait
()){
queueTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
queueTask
);
String
rgb
=
queueTask
.
getLightColor
();
ORDER_COLOR
color
=
ORDER_COLOR
.
fromRgb
(
rgb
);
if
(
color
==
null
){
if
(
queueTask
.
isPutInTask
()){
if
(
queueTask
.
isWait
())
{
ORDER_COLOR
color
=
null
;
if
(
queueTask
.
isPutInTask
())
{
//入库默认深绿色 DARKGREEN
color
=
ORDER_COLOR
.
DARKGREEN
;
}
else
{
if
(
openZhiYin
&&
ObjectUtil
.
isNotEmpty
(
queueTask
.
getSourceId
()))
{
List
<
DataLog
>
dataLogList
=
outMap
.
get
(
queueTask
.
getSourceId
());
if
(
dataLogList
==
null
)
{
dataLogList
=
new
ArrayList
<>();
}
else
{
if
(
ObjectUtil
.
isNotEmpty
(
queueTask
.
getSourceId
()))
{
if
(
queueTask
.
isInOperate
())
{
//首盘料 颜色:CYAN
//截料料 颜色:PURPLE
//普通工单 颜色:SKYBLUE
String
rgb
=
queueTask
.
getLightColor
();
color
=
ORDER_COLOR
.
fromRgb
(
rgb
);
}
else
{
continue
;
}
dataLogList
.
add
(
queueTask
);
outMap
.
put
(
queueTask
.
getSourceId
(),
dataLogList
);
}
else
{
//普通出库蓝色 BLUE
color
=
ORDER_COLOR
.
BLUE
;
}
}
if
(
color
!=
null
)
{
queueTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
queueTask
);
statusBean
.
addData
(
"open"
,
queueTask
.
getPosName
()
+
"="
+
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()
+
"]+亮灯:"
+
color
.
name
());
}
statusBean
.
addData
(
"open"
,
queueTask
.
getPosName
()+
"="
+
color
.
name
());
log
.
info
(
"库位["
+
queueTask
.
getPosName
()+
"]+亮灯:"
+
color
.
name
());
}
// else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){
...
...
@@ -224,11 +230,6 @@ public class NLPShelfHandler extends BaseDeviceHandler{
// }
}
List
<
DataLog
>
dataLogs
=
getLightGuideTask
(
outMap
);
for
(
DataLog
task
:
dataLogs
)
{
statusBean
.
addData
(
"open"
,
task
.
getPosName
()
+
"="
+
ORDER_COLOR
.
fromRgb
(
task
.
getLightColor
()).
name
());
}
return
statusBean
;
}
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
89fad21
...
...
@@ -394,48 +394,6 @@ public class LiteOrderCache implements ITaskListener {
@Autowired
private
SafetyInventoryMapper
safetyInventoryMapper
;
// /**
// * 获取需要截料的物料
// * @return key=需要截料的物料编号
// */
// private Map<String,SafetyInventoryDto> getSafetyInventoryMap( ) {
// List<Component> componentList = componentManager.findByQuery(new Query());
// Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(null, "");
//
//
// Map<String, SafetyInventoryDto> resultsMap = new HashMap<>();
// //循环PN
// for (Component com :
// componentList) {
// InventoryItem item = inventoryItemMap.get(com.getPartNumber());
// SafetyInventoryDto dto = new SafetyInventoryDto();
// if (item == null) {
// } else {
// dto = safetyInventoryMapper.toDto(item);
// }
// dto.setPartNumber(com.getPartNumber());
// dto.setAmount(com.getAmount());
// dto.setSupplementReel(0);
// //截料: 库存物料的盘数≤设定值 ,设定值使用安全库存
// if (dto.getStockCount() < com.getSafetyStoreNum()) {
//
// if (dto.getStockReel() > 0 && dto.getStockCount() > 0) {
//
// int reelCount = dto.getStockCount() / dto.getStockReel();
// //补充盘数
// int needReel = (com.getMinStoreNum() - dto.getStockCount()) / reelCount;
// dto.setSupplementReel(needReel);
// } else {
// int needReel = com.getMinStoreNum() / dto.getAmount();
// dto.setSupplementReel(needReel);
// }
// }
//
// resultsMap.put(com.getPartNumber(), dto);
// }
// return resultsMap;
// }
/**
* 锁定物料
*/
...
...
@@ -524,7 +482,6 @@ public class LiteOrderCache implements ITaskListener {
boolean
isGuizhong
=
orderItem
.
getOverFlag
()==
1
;
//判断是否需要截料
boolean
needJieliao
=
false
;
// boolean needJieliao = jieliaoMap.containsKey(pn);
if
(
needNum
<=
0
)
{
continue
;
...
...
@@ -544,7 +501,7 @@ public class LiteOrderCache implements ITaskListener {
Component
component
=
componentManager
.
findOneByPN
(
pn
);
if
(
component
==
null
){
log
.
info
(
"工单["
+
cacheOrder
.
getOrderNo
()
+
"] 物料号["
+
pn
+
"] ,需求数量["
+
orderItem
.
getWemng
()
+
"], 未找到元器件信息, 缺料 "
);
return
"smfcore.order.out.short"
;
return
materialShortPro
(
userName
,
cacheOrder
)
;
}
//判断库存
if
(
storageNum
<
component
.
getSafetyStoreNum
()){
...
...
@@ -554,7 +511,7 @@ public class LiteOrderCache implements ITaskListener {
if
(
storageNum
<
orderItem
.
getQty
()){
//不满足实际需求,不发,报缺料
log
.
info
(
"工单["
+
cacheOrder
.
getOrderNo
()
+
"] 物料号["
+
pn
+
"] ,需求数量["
+
orderItem
.
getWemng
()
+
"], 库存总数量["
+
storageNum
+
"], 不满足实际需求,缺料 "
);
return
"smfcore.order.out.short"
;
return
materialShortPro
(
userName
,
cacheOrder
)
;
}
int
wholeReelCount
=
0
;
...
...
@@ -672,7 +629,7 @@ public class LiteOrderCache implements ITaskListener {
if
(
outNum
<
orderItem
.
getQty
())
{
//不满足实际需求,不发,报缺料
log
.
info
(
"工单["
+
cacheOrder
.
getOrderNo
()
+
"] 物料号["
+
pn
+
"] ,需求数量["
+
orderItem
.
getWemng
()
+
"], 库存可发数量["
+
outNum
+
"], 不满足实际需求,缺料 "
);
return
"smfcore.order.out.short"
;
return
materialShortPro
(
userName
,
cacheOrder
)
;
}
}
//可以出库
...
...
@@ -756,6 +713,21 @@ public class LiteOrderCache implements ITaskListener {
return
""
;
}
public
String
materialShortPro
(
String
userName
,
LiteOrder
liteOrder
){
//挑料时缺料,直接 关闭工单
log
.
info
(
"工单["
+
liteOrder
.
getOrderNo
()+
"]缺料,直接关闭工单"
);
liteOrder
.
setOperateUser
(
userName
);
liteOrder
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
liteOrder
.
setClosed
(
true
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderMap
.
put
(
liteOrder
.
getOrderNo
(),
liteOrder
);
return
"smfcore.order.out.short"
;
}
// /**
// * 锁定物料
// */
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
89fad21
...
...
@@ -23,6 +23,7 @@ import com.neotel.smfcore.core.system.rest.bean.dto.TaskDto;
import
com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.hikvision.bean.HikOutInfo
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
...
...
@@ -174,38 +175,50 @@ public class OrderController {
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
orderFileWatch
.
readCsvFile
(
fileName
,
localFile
.
getAbsolutePath
());
// Map<String, List<LiteOrderItem>> itemMap = orderFileWatch.readCsvFile(fileName, localFile.getAbsolutePath());
List
<
HikOutInfo
>
itemList
=
orderFileWatch
.
readCsvFile
(
fileName
,
localFile
.
getAbsolutePath
());
if
(
item
Map
==
null
||
itemMap
.
size
()
<=
0
)
{
if
(
item
List
==
null
||
itemList
.
size
()
<=
0
)
{
throw
new
ValidateException
(
"smfcore.fileError"
,
"文件解析失败"
);
}
for
(
String
so
:
itemMap
.
keySet
()
)
{
for
(
HikOutInfo
outInfo
:
itemList
)
{
List
<
LiteOrderItem
>
liteOrderItems
=
itemMap
.
get
(
so
);
if
(
liteOrderItems
.
size
()
<=
0
)
{
continue
;
//查找工单是否存在
String
orderNo
=
outInfo
.
getJobNo
();
if
(
ObjectUtil
.
isNotEmpty
(
outInfo
.
getReplenishmentNo
()))
{
orderNo
+=
"-"
+
outInfo
.
getReplenishmentNo
();
}
LiteOrder
liteOrder
=
new
LiteOrder
(
so
,
liteOrderItems
);
liteOrder
.
setSource
(
localFile
.
getName
());
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
if
(
dbOrder
!=
null
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
//把名字改为带时间的
String
newOrderNo
=
liteOrder
.
getOrderNo
()
+
"-"
+
format
.
format
(
new
Date
());
dbOrder
=
liteOrderManager
.
findByOrderNo
(
newOrderNo
);
if
(
dbOrder
==
null
)
{
liteOrder
.
setOrderNo
(
newOrderNo
);
LiteOrder
order
=
liteOrderCache
.
findOrderByNo
(
orderNo
);
if
(
order
==
null
)
{
//创建工单
order
=
new
LiteOrder
();
order
.
setOrderNo
(
orderNo
);
order
.
UpdateOutInfo
(
outInfo
);
LiteOrderItem
item
=
outInfo
.
crateOrderItem
(
orderNo
);
order
.
addOrderItems
(
item
);
liteOrderManager
.
createWithItems
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
log
.
info
(
"新建工单["
+
order
.
getOrderNo
()
+
"]工单详情"
+
order
.
getOrderItems
().
size
()+
"条"
);
}
else
{
log
.
info
(
"数据库中已存在工单号为["
+
liteOrder
.
getOrderNo
()
+
"],忽略文件:"
+
localFile
.
getAbsolutePath
());
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.ameExists"
,
"工单名称[{0}]已存在"
,
new
String
[]{
liteOrder
.
getOrderNo
()});
if
(
order
.
getStatus
()
>
LITEORDER_STATUS
.
NEW
)
{
log
.
info
(
"工单["
+
orderNo
+
"]已存在,且状态为["
+
order
.
getStatus
()
+
"],不能修改工单信息:"
+
outInfo
.
toString
());
continue
;
}
order
.
UpdateOutInfo
(
outInfo
);
LiteOrderItem
item
=
outInfo
.
crateOrderItem
(
orderNo
);
order
=
liteOrderCache
.
updateOrderItem
(
order
,
item
);
liteOrderCache
.
addOrderToMap
(
order
);
log
.
info
(
"更新工单["
+
order
.
getOrderNo
()
+
"]物料号["
+
item
.
getMaterialNo
()+
"]"
);
}
log
.
info
(
"新增加订单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
liteOrderItems
.
size
()
+
"条工单详情"
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
return
ResultBean
.
newOkResult
(
"smfcore.order.uploadOK"
,
"工单上传成功"
,
""
);
...
...
@@ -381,7 +394,6 @@ public class OrderController {
return
ResultBean
.
newOkResult
(
"smfcore.order.nextOk"
,
"成功切换到下一个工单"
,
""
);
}
private
List
<
LiteOrder
>
getExecuteOrders
(
User
user
)
{
//查询正在执行的工单列表
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
).
ne
(
LITEORDER_STATUS
.
NEW
));
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
89fad21
...
...
@@ -10,6 +10,7 @@ import org.springframework.data.annotation.Transient;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -261,6 +262,7 @@ public class LiteOrder extends BasePo implements Serializable {
this
.
setUpdateDate
(
new
Date
());
this
.
setEndDate
(
outInfo
.
getEndD
());
this
.
setWemng
(
outInfo
.
getWemng
());
orderItems
=
new
ArrayList
<>();
}
public
void
addOrderItems
(
LiteOrderItem
item
){
...
...
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
查看文件 @
89fad21
...
...
@@ -10,6 +10,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.hikvision.bean.HikOutInfo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -58,94 +59,94 @@ public class OrderFileWatch {
}
private
synchronized
void
watchOrderDir
(){
try
{
String
dir
=
dataCache
.
getOrderSetting
().
getOrderDir
()
;
if
(
Strings
.
isNotBlank
(
dir
)){
dir
=
dir
.
replaceAll
(
"\\\\"
,
"/"
);
}
else
{
return
;
}
final
String
orderDir
=
dir
;
final
String
localDir
=
getLocalDir
(
orderDir
);
//orderFileDir = "/Volumes/SSD/code";
if
(
Strings
.
isNotBlank
(
localDir
)){
File
orderFolder
=
new
File
(
localDir
);
if
(
orderFolder
.
exists
()
&&
orderFolder
.
isDirectory
()){
for
(
File
file
:
orderFolder
.
listFiles
())
{
if
(
file
.
isDirectory
()){
continue
;
}
File
resultFile
=
null
;
String
fileName
=
file
.
getName
();
String
backupFileName
=
fileName
+
"_"
+
System
.
currentTimeMillis
();
//看数据库是否已有此工单
if
(
fileName
.
endsWith
(
".process"
)
||
fileName
.
endsWith
(
"_result.txt"
)){
continue
;
}
if
(
isOrderFileType
(
fileName
)){
LiteOrder
fileNameOrder
=
liteOrderManager
.
findBySource
(
fileName
);
if
(
fileNameOrder
==
null
){
log
.
info
(
"watchOrderDir:监控到新的Order文件,准备处理:"
+
file
.
getAbsolutePath
());
try
{
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
readCsvFile
(
fileName
,
file
.
getAbsolutePath
());
if
(
itemMap
==
null
||
itemMap
.
size
()
<=
0
)
{
log
.
error
(
"watchOrderDir: 文件["
+
fileName
+
"]解析失败"
);
continue
;
}
for
(
String
so:
itemMap
.
keySet
()
)
{
List
<
LiteOrderItem
>
liteOrderItems
=
itemMap
.
get
(
so
);
if
(
liteOrderItems
.
size
()
<=
0
)
{
continue
;
}
LiteOrder
liteOrder
=
new
LiteOrder
(
so
,
liteOrderItems
);
liteOrder
.
setSource
(
fileName
);
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
liteOrder
.
getOrderNo
());
if
(
dbOrder
!=
null
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
//把名字改为带时间的
String
newOrderNo
=
liteOrder
.
getOrderNo
()
+
"-"
+
format
.
format
(
new
Date
());
dbOrder
=
liteOrderManager
.
findByOrderNo
(
newOrderNo
);
if
(
dbOrder
==
null
)
{
liteOrder
.
setOrderNo
(
newOrderNo
);
}
else
{
log
.
info
(
"watchOrderDir:数据库中已存在工单号为["
+
liteOrder
.
getOrderNo
()
+
"],忽略文件:"
+
file
.
getAbsolutePath
());
resultFile
=
new
File
(
localDir
+
File
.
separator
+
"error"
,
backupFileName
);
continue
;
}
}
log
.
info
(
"watchOrderDir:新增加订单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
liteOrderItems
.
size
()
+
"条工单详情"
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
resultFile
=
new
File
(
localDir
+
File
.
separator
+
"sucess"
,
backupFileName
);
}
}
catch
(
Exception
e
){
log
.
error
(
"read order from file ["
+
file
.
getAbsolutePath
()+
"] :"
,
e
);
resultFile
=
new
File
(
localDir
+
File
.
separator
+
"error"
,
backupFileName
);
}
}
resultFile
=
new
File
(
localDir
+
File
.
separator
+
"sucess"
,
backupFileName
);
}
if
(
resultFile
!=
null
){
resultFile
.
getParentFile
().
mkdirs
();
file
.
renameTo
(
resultFile
);
}
}
}
}
}
catch
(
Exception
e
){
log
.
error
(
"订单监控出错"
,
e
);
}
//
try{
//
String dir = dataCache.getOrderSetting().getOrderDir() ;
//
if(Strings.isNotBlank(dir)){
//
dir = dir.replaceAll("\\\\", "/");
//
}else{
//
return;
//
}
//
final String orderDir = dir;
//
final String localDir = getLocalDir(orderDir);
//
//orderFileDir = "/Volumes/SSD/code";
//
if(Strings.isNotBlank(localDir)){
//
File orderFolder = new File(localDir);
//
if(orderFolder.exists() && orderFolder.isDirectory()){
//
for (File file : orderFolder.listFiles()) {
//
if(file.isDirectory()){
//
continue;
//
}
//
File resultFile = null;
//
String fileName = file.getName();
//
String backupFileName = fileName +"_" + System.currentTimeMillis();
//
//看数据库是否已有此工单
//
if(fileName.endsWith(".process") || fileName.endsWith("_result.txt")){
//
continue;
//
}
//
if(isOrderFileType(fileName)){
//
LiteOrder fileNameOrder = liteOrderManager.findBySource(fileName);
//
if(fileNameOrder == null){
//
log.info("watchOrderDir:监控到新的Order文件,准备处理:" + file.getAbsolutePath());
//
try{
//
Map<String, List<LiteOrderItem>> itemMap = readCsvFile(fileName,file.getAbsolutePath());
//
//
if (itemMap == null || itemMap.size() <= 0) {
//
log.error("watchOrderDir: 文件["+fileName+"]解析失败");
//
continue;
//
}
//
//
for (String so:itemMap.keySet()
//
) {
//
//
List<LiteOrderItem> liteOrderItems = itemMap.get(so);
//
if (liteOrderItems.size() <= 0) {
//
continue;
//
}
//
//
LiteOrder liteOrder = new LiteOrder(so, liteOrderItems);
//
liteOrder.setSource(fileName);
//
LiteOrder dbOrder = liteOrderManager.findByOrderNo(liteOrder.getOrderNo());
//
if (dbOrder != null) {
//
//
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
//
//把名字改为带时间的
//
String newOrderNo = liteOrder.getOrderNo() + "-" + format.format(new Date());
//
dbOrder = liteOrderManager.findByOrderNo(newOrderNo);
//
if (dbOrder == null) {
//
liteOrder.setOrderNo(newOrderNo);
//
} else {
//
log.info("watchOrderDir:数据库中已存在工单号为[" + liteOrder.getOrderNo() + "],忽略文件:" + file.getAbsolutePath());
//
resultFile = new File(localDir+File.separator + "error",backupFileName);
//
continue;
//
}
//
}
//
log.info("watchOrderDir:新增加订单:" + liteOrder.getOrderNo() + ",共" + liteOrderItems.size() + "条工单详情");
//
liteOrder = liteOrderManager.createWithItems(liteOrder);
//
liteOrderCache.addOrderToMap(liteOrder);
//
//
resultFile = new File(localDir+File.separator + "sucess",backupFileName);
//
}
//
//
}catch (Exception e){
//
log.error("read order from file ["+file.getAbsolutePath()+"] :",e);
//
resultFile = new File(localDir+File.separator + "error",backupFileName);
//
}
//
}
//
//
resultFile = new File(localDir+File.separator + "sucess",backupFileName);
//
}
//
//
if(resultFile != null){
//
resultFile.getParentFile().mkdirs();
//
file.renameTo(resultFile);
//
}
//
}
//
}
//
//
}
//
}catch (Exception e){
//
log.error("订单监控出错",e);
//
}
}
private
boolean
isOrderFileType
(
String
smbFile
){
...
...
@@ -210,22 +211,121 @@ public class OrderFileWatch {
}
public
Map
<
String
,
List
<
LiteOrderItem
>>
readCsvFile
(
String
fileName
,
String
fileURL
)
{
//
// public Map<String ,List<LiteOrderItem>> readCsvFile(String fileName, String fileURL) {
// try {
// fileName=fileName.replace(".csv","");
// log.info("开始更解析上传的工单");
// Map<String ,List<LiteOrderItem>> itemMap=new HashMap<>();
// List<LiteOrderItem> items = Lists.newArrayList();
//
// OrderSetting orderSetting = dataCache.getOrderSetting();
//
// CsvReader csvRead = CsvReader.newReader(fileURL,"PN", orderSetting.getPn());
// int partNumberIndex = csvRead.getIndex("PN", orderSetting.getPn());
// int qtyIndex = csvRead.getIndex("QTY", orderSetting.getQty());
// int feederIndex = csvRead.getIndex("FEEDER", orderSetting.getFeeder());
// int riIndex = csvRead.getIndex("RI",orderSetting.getRi());
// int soIndex = csvRead.getIndex("SO", orderSetting.getSo());
//
// int row = 1;
// int newRowCount = 0;
// int updateRowCount = 0;
//
// while (csvRead.readRecord()) {
// row++;
// String[] lineValues = csvRead.getValues();
// String partNumber = lineValues[partNumberIndex];
// String ri="";
// if(riIndex!=-1){
// ri=lineValues[riIndex];
// }
// if (partNumber.isEmpty()&&ri.isEmpty()) {
// log.warn("行[partNumber=" + partNumber + "]中PN和RI都 为空,此行忽略");
// } else {
// int num = 1;
// if (qtyIndex != -1) {
// String numStr = lineValues[qtyIndex];
// if (Strings.isNotBlank(numStr)) {
// try {
// num = Integer.valueOf(numStr);
// } catch (Exception e) {
// log.error(partNumber + "的数量:" + numStr + " 不是数字,使用1");
// }
// }
// }
// String feeder = "";
// if (feederIndex != -1) {
// feeder = lineValues[feederIndex];
// }
// String so=fileName;
//
// if(soIndex!=-1){
// so=lineValues[soIndex];
// }
// if(!ObjectUtil.isNotEmpty(so)){
// so=fileName;
// }
// LiteOrderItem item = new LiteOrderItem();
// item.setMaterialNo(partNumber);
// if(partNumber.isEmpty()){
// item.setNeedReelCount(1);
// }
// item.setQty(num);
//
// item.setStation(feeder);
// item.setRi(ri);
// if(!itemMap.containsKey(so)){
// itemMap.put(so,new ArrayList<LiteOrderItem>());
// }
// itemMap.get(so).add(item);
//
//
// items.add(item);
// }
// }
// return itemMap;
// } catch (Exception ex) {
// log.error("解析上传的工单出错:" + ex.toString());
// }
// return null;
// }
public
List
<
HikOutInfo
>
readCsvFile
(
String
fileName
,
String
fileURL
)
{
try
{
fileName
=
fileName
.
replace
(
".csv"
,
""
);
fileName
=
fileName
.
replace
(
".csv"
,
""
);
log
.
info
(
"开始更解析上传的工单"
);
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
new
HashMap
<>();
List
<
LiteOrderItem
>
items
=
Lists
.
newArrayList
();
List
<
HikOutInfo
>
items
=
Lists
.
newArrayList
();
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
CsvReader
csvRead
=
CsvReader
.
newReader
(
fileURL
,
"PN"
,
orderSetting
.
getPn
());
int
partNumberIndex
=
csvRead
.
getIndex
(
"PN"
,
orderSetting
.
getPn
());
int
qtyIndex
=
csvRead
.
getIndex
(
"QTY"
,
orderSetting
.
getQty
());
int
feederIndex
=
csvRead
.
getIndex
(
"FEEDER"
,
orderSetting
.
getFeeder
());
int
riIndex
=
csvRead
.
getIndex
(
"RI"
,
orderSetting
.
getRi
());
int
soIndex
=
csvRead
.
getIndex
(
"SO"
,
orderSetting
.
getSo
());
// jobNo String 16 工单号/合单号
// station String 32 站位号
// baseCode String 16 基地编号
// lgort String 16 库位
// workLine String 16 产线
// startDate String 19 开工时间
// endDate String 19 完工时间
// materialNo String 9 物料号
// qty Integer 需求数量
// overFlag Integer 超发标识(1是不允许超发,0是允许超发)
// increment Integer 发料增量
// wemng Integer 排程数量
CsvReader
csvRead
=
CsvReader
.
newReader
(
fileURL
,
"jobNo"
,
"jobNo"
);
int
jobNoIndex
=
csvRead
.
getIndex
(
"jobNo"
,
"jobNo"
);
int
stationIndex
=
csvRead
.
getIndex
(
"station"
,
"station"
);
int
baseCodeIndex
=
csvRead
.
getIndex
(
"baseCode"
,
"baseCode"
);
int
lgortIndex
=
csvRead
.
getIndex
(
"lgort"
,
"lgort"
);
int
workLineIndex
=
csvRead
.
getIndex
(
"workLine"
,
"workLine"
);
int
startDateIndex
=
csvRead
.
getIndex
(
"startDate"
,
"startDate"
);
int
endDateIndex
=
csvRead
.
getIndex
(
"endDate"
,
"endDate"
);
int
materialNoIndex
=
csvRead
.
getIndex
(
"materialNo"
,
"materialNo"
);
int
qtyIndex
=
csvRead
.
getIndex
(
"qty"
,
"qty"
);
int
overFlagIndex
=
csvRead
.
getIndex
(
"overFlag"
,
"overFlag"
);
int
incrementIndex
=
csvRead
.
getIndex
(
"increment"
,
"increment"
);
int
wemngIndex
=
csvRead
.
getIndex
(
"wemng"
,
"wemng"
);
int
row
=
1
;
int
newRowCount
=
0
;
...
...
@@ -234,56 +334,33 @@ public class OrderFileWatch {
while
(
csvRead
.
readRecord
())
{
row
++;
String
[]
lineValues
=
csvRead
.
getValues
();
String
partNumber
=
lineValues
[
partNumberIndex
];
String
ri
=
""
;
if
(
riIndex
!=-
1
){
ri
=
lineValues
[
riIndex
];
String
jobNo
=
lineValues
[
jobNoIndex
];
if
(
ObjectUtil
.
isEmpty
(
jobNo
))
{
continue
;
}
if
(
partNumber
.
isEmpty
()&&
ri
.
isEmpty
())
{
log
.
warn
(
"行[partNumber="
+
partNumber
+
"]中PN和RI都 为空,此行忽略"
);
}
else
{
int
num
=
1
;
if
(
qtyIndex
!=
-
1
)
{
String
numStr
=
lineValues
[
qtyIndex
];
if
(
Strings
.
isNotBlank
(
numStr
))
{
try
{
num
=
Integer
.
valueOf
(
numStr
);
}
catch
(
Exception
e
)
{
log
.
error
(
partNumber
+
"的数量:"
+
numStr
+
" 不是数字,使用1"
);
}
}
}
String
feeder
=
""
;
if
(
feederIndex
!=
-
1
)
{
feeder
=
lineValues
[
feederIndex
];
}
String
so
=
fileName
;
if
(
soIndex
!=-
1
){
so
=
lineValues
[
soIndex
];
}
if
(!
ObjectUtil
.
isNotEmpty
(
so
)){
so
=
fileName
;
}
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setMaterialNo
(
partNumber
);
if
(
partNumber
.
isEmpty
()){
item
.
setNeedReelCount
(
1
);
}
item
.
setQty
(
num
);
item
.
setStation
(
feeder
);
item
.
setRi
(
ri
);
if
(!
itemMap
.
containsKey
(
so
)){
itemMap
.
put
(
so
,
new
ArrayList
<
LiteOrderItem
>());
}
itemMap
.
get
(
so
).
add
(
item
);
HikOutInfo
item
=
new
HikOutInfo
();
item
.
setJobNo
(
lineValues
[
jobNoIndex
]);
item
.
setStation
(
lineValues
[
stationIndex
]);
item
.
setBaseCode
(
lineValues
[
baseCodeIndex
]);
item
.
setLgort
(
lineValues
[
lgortIndex
]);
item
.
setWorkLine
(
lineValues
[
workLineIndex
]);
item
.
setStartDate
(
lineValues
[
startDateIndex
]);
item
.
setEndDate
(
lineValues
[
endDateIndex
]);
item
.
setMaterialNo
(
lineValues
[
materialNoIndex
]);
item
.
setQty
(
Integer
.
parseInt
(
lineValues
[
qtyIndex
]));
item
.
setOverFlag
(
Integer
.
parseInt
(
lineValues
[
overFlagIndex
]));
item
.
setIncrement
(
Integer
.
parseInt
(
lineValues
[
incrementIndex
]));
item
.
setWemng
(
Integer
.
parseInt
(
lineValues
[
wemngIndex
]));
items
.
add
(
item
);
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析文件"
+
fileName
+
" 出错:"
+
ex
);
continue
;
}
}
return
item
Map
;
return
item
s
;
}
catch
(
Exception
ex
)
{
log
.
error
(
"解析上传的工单出错:"
+
ex
.
toString
());
}
...
...
src/main/java/com/neotel/smfcore/core/system/rest/SettingsController.java
查看文件 @
89fad21
...
...
@@ -180,36 +180,92 @@ public class SettingsController {
List
<
String
>
titles
=
new
ArrayList
<>();
OrderSetting
orderSetting
=
dataCache
.
getOrderSetting
();
titles
.
add
(
orderSetting
.
getPn
()
);
titles
.
add
(
orderSetting
.
getFeeder
());
titles
.
add
((
orderSetting
.
getQty
()));
titles
.
add
(
orderSetting
.
getRi
());
titles
.
add
(
orderSetting
.
getSo
());
for
(
int
i
=
1
;
i
<=
10
;
i
++)
{
// int jobNoIndex = csvRead.getIndex("jobNo", "jobNo");
// int stationIndex = csvRead.getIndex("station", "station");
// int baseCodeIndex = csvRead.getIndex("baseCode", "baseCode");
// int lgortIndex = csvRead.getIndex("lgort", "lgort");
// int workLineIndex = csvRead.getIndex("workLine", "workLine");
// int startDateIndex = csvRead.getIndex("startDate", "startDate");
// int endDateIndex = csvRead.getIndex("endDate", "endDate");
// int materialNoIndex = csvRead.getIndex("materialNo", "materialNo");
// int qtyIndex = csvRead.getIndex("qty", "qty");
// int overFlagIndex = csvRead.getIndex("overFlag", "overFlag");
// int incrementIndex = csvRead.getIndex("increment", "increment");
// int wemngIndex = csvRead.getIndex("wemng", "wemng");
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
if
(
i
<=
4
){
map
.
put
(
orderSetting
.
getPn
(),
"PN"
+
i
);
map
.
put
(
orderSetting
.
getFeeder
(),
"Feeder1"
+
i
);
map
.
put
(
orderSetting
.
getQty
(),
"100"
+
i
);
map
.
put
(
orderSetting
.
getRi
(),
""
);
map
.
put
(
orderSetting
.
getSo
(),
"WO1001"
);
}
else
{
map
.
put
(
orderSetting
.
getPn
(),
"PN2"
+
i
);
map
.
put
(
orderSetting
.
getFeeder
(),
"Feeder2"
+
i
);
map
.
put
(
orderSetting
.
getQty
(),
"200"
+
i
);
map
.
put
(
orderSetting
.
getRi
(),
""
);
map
.
put
(
orderSetting
.
getSo
(),
"WO1002"
);
String
[]
titleArray
=
new
String
[]{
"jobNo"
,
"station"
,
"baseCode"
,
"lgort"
,
"workLine"
,
"startDate"
,
"endDate"
,
"materialNo"
,
"qty"
,
"overFlag"
,
"increment"
,
"wemng"
};
for
(
String
title
:
titleArray
)
{
titles
.
add
(
title
);
}
String
currTime
=
DateUtil
.
toDateString
(
new
Date
(),
"yyyyMMdd-HHmm"
);
for
(
int
i
=
1
;
i
<=
5
;
i
++)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
"jobNo"
,
"jobNo"
+
currTime
);
map
.
put
(
"station"
,
"station"
.
toUpperCase
()
+
"-"
+
i
);
map
.
put
(
"baseCode"
,
"baseCode"
.
toUpperCase
()
+
"-"
+
i
);
map
.
put
(
"lgort"
,
"lgort"
.
toUpperCase
()
+
"-"
+
i
);
map
.
put
(
"workLine"
,
"workLine"
+
currTime
);
map
.
put
(
"startDate"
,
DateUtil
.
toDateString
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
new
Date
());
cal
.
add
(
Calendar
.
DAY_OF_MONTH
,
7
);
Date
date
=
cal
.
getTime
();
map
.
put
(
"endDate"
,
DateUtil
.
toDateString
(
date
,
"yyyy-MM-dd HH:mm:ss"
));
map
.
put
(
"materialNo"
,
"materialNo"
.
toUpperCase
()
+
"-"
+
i
);
map
.
put
(
"qty"
,
i
*
1000
);
map
.
put
(
"overFlag"
,
"1"
);
map
.
put
(
"increment"
,
i
*
100
);
map
.
put
(
"wemng"
,
i
*
10
);
maps
.
add
(
map
);
}
FileUtil
.
downloadCSV
(
maps
,
titles
,
response
);
}
catch
(
Exception
e
)
{
log
.
error
(
"导出失败"
+
e
.
getMessage
(),
e
);
}
}
// public void downloadOrderModel( HttpServletResponse response) throws IOException {
// try {
// List<Map<String, Object>> maps = new ArrayList<>();
// List<String> titles = new ArrayList<>();
// OrderSetting orderSetting = dataCache.getOrderSetting();
//
// titles.add(orderSetting.getPn() );
// titles.add(orderSetting.getFeeder());
// titles.add((orderSetting.getQty()));
// titles.add(orderSetting.getRi());
// titles.add(orderSetting.getSo());
// for(int i=1;i<=10;i++) {
//
// Map<String, Object> map = new LinkedHashMap<>();
// if(i<=4){
// map.put(orderSetting.getPn(),"PN"+i);
// map.put(orderSetting.getFeeder(),"Feeder1"+i);
// map.put(orderSetting.getQty(),"100"+i);
// map.put(orderSetting.getRi(),"");
// map.put(orderSetting.getSo(),"WO1001" );
// }
// else{
// map.put(orderSetting.getPn(),"PN2"+i);
// map.put(orderSetting.getFeeder(),"Feeder2"+i);
// map.put(orderSetting.getQty(),"200"+i);
// map.put(orderSetting.getRi(),"");
// map.put(orderSetting.getSo(),"WO1002" );
// }
// maps.add(map);
// }
//
// FileUtil.downloadCSV(maps, titles, response);
// } catch (Exception e) {
// log.error("导出失败" + e.getMessage(), e);
// }
// }
@ApiOperation
(
"获取版本号"
)
@GetMapping
(
"/version"
)
...
...
src/main/java/com/neotel/smfcore/hikvision/HikvisionApiController.java
查看文件 @
89fad21
...
...
@@ -110,11 +110,6 @@ public class HikvisionApiController {
LiteOrderItem
item
=
outInfo
.
crateOrderItem
(
orderNo
);
order
=
liteOrderCache
.
updateOrderItem
(
order
,
item
);
// item = liteOrderItemManager.save(item);
// List<LiteOrderItem> items = order.getOrderItems();
// items.add(item);
// order.setOrderItems(items);
// liteOrderManager.save(order);
liteOrderCache
.
addOrderToMap
(
order
);
}
...
...
src/main/java/com/neotel/smfcore/hikvision/bean/HikOutInfo.java
查看文件 @
89fad21
...
...
@@ -21,7 +21,7 @@ public class HikOutInfo implements Serializable {
/**
*replenishmentNo String false 补料单号,如果有值表示此单为补料单[合并唯一]
*/
protected
String
replenishmentNo
;
protected
String
replenishmentNo
=
""
;
/**
*baseCode String true 基地编号
...
...
@@ -79,7 +79,7 @@ public class HikOutInfo implements Serializable {
/**
*reason String false 移动原因
*/
protected
String
reason
;
protected
String
reason
=
""
;
public
LiteOrderItem
crateOrderItem
(
String
orderNo
)
{
LiteOrderItem
item
=
new
LiteOrderItem
();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论