Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 0f5ffa54
由
zshaohui
编写于
2024-08-23 13:25:22 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.单据领料,逻辑修改
2.单据转库,可以多个箱子进行转库
1 个父辈
b1fb2e17
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
254 行增加
和
24 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/custom/luxsan/api/LuxsanApi.java
src/main/java/com/neotel/smfcore/custom/luxsan/api/bean/request/TicketGbPostRequest.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/TicketOut.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/AgvDeviceController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/BoxTransferController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/LineController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/TakeOutController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/WipStorCheckOutController.java
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/kafka/service/KafkaService.java
src/main/resources/config/application-21088prod.yml
src/main/resources/config/application-21088test.yml
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
0f5ffa5
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/luxsan/api/LuxsanApi.java
查看文件 @
0f5ffa5
...
@@ -1175,6 +1175,44 @@ public class LuxsanApi extends DefaultSmfApiListener {
...
@@ -1175,6 +1175,44 @@ public class LuxsanApi extends DefaultSmfApiListener {
}
}
public
static
String
ticketGbPick
(
TicketPickPostRequest
request
)
{
log
.
info
(
"半成品仓,单据转库备料:ticketGbPick接口请求参数为:"
+
JSON
.
toJSONString
(
request
)
+
",地址为:"
+
ticketGbPickUrl
);
String
result
=
""
;
try
{
String
resultStr
=
HttpHelper
.
postJson
(
ticketGbPickUrl
,
request
);
log
.
info
(
"半成品仓,单据转库备料:ticketGbPick接口返回为:"
+
resultStr
);
LuxsanApiResult
apiResult
=
JSONObject
.
parseObject
(
resultStr
,
LuxsanApiResult
.
class
);
if
(
LuxsanApiEnum
.
ERROR
.
equals
(
apiResult
.
getMSGTY
()))
{
result
=
apiResult
.
getMSGTY
();
}
}
catch
(
ApiException
e
)
{
e
.
printStackTrace
();
result
=
e
.
getMessage
();
}
return
result
;
}
public
static
String
ticketGbPost
(
TicketGbPostRequest
request
)
{
log
.
info
(
"半成品仓,单据转库过账:ticketGbPost接口请求参数为:"
+
JSON
.
toJSONString
(
request
)
+
",地址为:"
+
ticketGbPostUrl
);
String
result
=
""
;
try
{
String
resultStr
=
HttpHelper
.
postJson
(
ticketGbPostUrl
,
request
);
log
.
info
(
"半成品仓,单据转库过账:ticketGbPost接口返回为:"
+
resultStr
);
LuxsanApiResult
apiResult
=
JSONObject
.
parseObject
(
resultStr
,
LuxsanApiResult
.
class
);
if
(
LuxsanApiEnum
.
ERROR
.
equals
(
apiResult
.
getMSGTY
()))
{
result
=
apiResult
.
getMSGTY
();
}
}
catch
(
ApiException
e
)
{
e
.
printStackTrace
();
result
=
e
.
getMessage
();
}
return
result
;
}
@Override
@Override
public
void
outTaskStatusChange
(
String
outNotifyUrl
,
DataLog
task
)
{
public
void
outTaskStatusChange
(
String
outNotifyUrl
,
DataLog
task
)
{
//pickingIssue(new PickingIssueRequest());
//pickingIssue(new PickingIssueRequest());
...
@@ -1505,4 +1543,19 @@ public class LuxsanApi extends DefaultSmfApiListener {
...
@@ -1505,4 +1543,19 @@ public class LuxsanApi extends DefaultSmfApiListener {
public
void
setManualPalletUrl
(
String
url
)
{
public
void
setManualPalletUrl
(
String
url
)
{
LuxsanApi
.
manualPalletUrl
=
url
;
LuxsanApi
.
manualPalletUrl
=
url
;
}
}
public
static
String
ticketGbPickUrl
;
@Value
(
"${api.ticketGbPick}"
)
public
void
setTicketGbPickUrl
(
String
url
)
{
LuxsanApi
.
ticketGbPickUrl
=
url
;
}
public
static
String
ticketGbPostUrl
;
@Value
(
"${api.ticketGbPost}"
)
public
void
setTicketGbPostUrl
(
String
url
)
{
LuxsanApi
.
ticketGbPostUrl
=
url
;
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/api/bean/request/TicketGbPostRequest.java
0 → 100644
查看文件 @
0f5ffa5
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
api
.
bean
.
request
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
@Data
@AllArgsConstructor
public
class
TicketGbPostRequest
{
private
String
PLANT_CODE
;
private
String
TICKET_CODE
;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/bean/TicketOut.java
0 → 100644
查看文件 @
0f5ffa5
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
bean
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
TicketOut
{
private
String
ticket
;
private
boolean
isHold
;
private
List
<
String
>
boxList
;
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/AgvDeviceController.java
查看文件 @
0f5ffa5
...
@@ -146,18 +146,6 @@ public class AgvDeviceController {
...
@@ -146,18 +146,6 @@ public class AgvDeviceController {
if
(!
task
.
isOdn
())
{
if
(!
task
.
isOdn
())
{
task
.
setStatus
(
statusStr
);
task
.
setStatus
(
statusStr
);
taskService
.
updateFinishedTask
(
task
);
taskService
.
updateFinishedTask
(
task
);
String
checkType
=
LiteorderCheckType
.
TICKET_TRANSFER_CHECKOUT
+
""
;
if
(
checkType
.
equals
(
task
.
getSourceType
())){
TicketPickPostData
data
=
new
TicketPickPostData
(
task
.
getTicketCode
(),
task
.
getTicketItem
(),
Arrays
.
asList
(
task
.
getCartonId
()));
String
result
=
LuxsanApi
.
ticketPickPost
(
new
TicketPickPostRequest
(
CommonUtil
.
plantCode
,
task
.
getTicketCode
(),
"SWC"
,
Arrays
.
asList
(
data
)));
if
(
StringUtils
.
isEmpty
(
result
))
{
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
if
(
barcode
!=
null
)
{
barcode
.
setWarehouseCode
(
task
.
getWarehouseCode
());
barcodeManager
.
save
(
barcode
);
}
}
}
}
}
}
else
{
}
else
{
task
.
setStatus
(
statusStr
);
task
.
setStatus
(
statusStr
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/BoxTransferController.java
查看文件 @
0f5ffa5
...
@@ -10,6 +10,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -10,6 +10,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
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.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
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.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
...
@@ -18,6 +21,7 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
...
@@ -18,6 +21,7 @@ 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.custom.luxsan.api.LuxsanApi
;
import
com.neotel.smfcore.custom.luxsan.api.LuxsanApi
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.PalletUpdateRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.PalletUpdateRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.TicketGbPostRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostData
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostData
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.TicketPickPostRequest
;
import
com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil
;
...
@@ -55,6 +59,12 @@ public class BoxTransferController {
...
@@ -55,6 +59,12 @@ public class BoxTransferController {
@Autowired
@Autowired
private
IDataLogManager
dataLogManager
;
private
IDataLogManager
dataLogManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@ApiOperation
(
"料箱从一个库位移到另外一个库位"
)
@ApiOperation
(
"料箱从一个库位移到另外一个库位"
)
@RequestMapping
(
"/boxToOtherPos"
)
@RequestMapping
(
"/boxToOtherPos"
)
@AnonymousAccess
@AnonymousAccess
...
@@ -156,13 +166,30 @@ public class BoxTransferController {
...
@@ -156,13 +166,30 @@ public class BoxTransferController {
taskService
.
updateFinishedTask
(
task
);
taskService
.
updateFinishedTask
(
task
);
}
}
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
statusStr
))
{
if
(
OP_STATUS
.
FINISHED
.
name
().
equals
(
statusStr
))
{
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
//判断是否为单据转库的,如果是调用转库接口
String
checkType
=
LiteorderCheckType
.
TICKET_TRANSFER_CHECKOUT
+
""
;
if
(
checkType
.
equals
(
task
.
getSourceType
())){
log
.
info
(
task
.
getBarcode
()+
"为单据转库的料箱,单据号为:"
+
task
.
getSourceName
());
TicketPickPostData
data
=
new
TicketPickPostData
(
task
.
getTicketCode
(),
task
.
getTicketItem
(),
Arrays
.
asList
(
task
.
getCartonId
()));
TicketPickPostRequest
request
=
new
TicketPickPostRequest
(
CommonUtil
.
plantCode
,
task
.
getTicketCode
(),
"SWC"
,
Arrays
.
asList
(
data
));
String
result
=
LuxsanApi
.
ticketGbPick
(
request
);
log
.
info
(
task
.
getBarcode
()+
"单据转库发料结果为:"
+
result
);
if
(
StringUtils
.
isNotEmpty
(
result
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
task
.
getBarcode
()+
"转库失败,目的库位为:"
+
task
.
getWarehouseCode
()+
"单据号为:"
+
task
.
getSourceName
());
}
}
task
.
setStatus
(
statusStr
);
task
.
setStatus
(
statusStr
);
taskService
.
moveTaskToFinished
(
task
);
taskService
.
moveTaskToFinished
(
task
);
taskService
.
updateFinishedTask
(
task
);
taskService
.
updateFinishedTask
(
task
);
String
targetPos
=
task
.
getExtraDataMap
(
"targetPos"
).
toString
();
String
targetPos
=
task
.
getExtraDataMap
(
"targetPos"
).
toString
();
StoragePos
pos
=
storagePosManager
.
getByPosName
(
targetPos
);
StoragePos
pos
=
storagePosManager
.
getByPosName
(
targetPos
);
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
task
.
getBarcode
());
DataLog
dataLog
=
new
DataLog
(
storage
,
barcode
,
pos
);
DataLog
dataLog
=
new
DataLog
(
storage
,
barcode
,
pos
);
dataLog
.
setType
(
OP
.
PUT_IN
);
dataLog
.
setType
(
OP
.
PUT_IN
);
...
@@ -170,20 +197,43 @@ public class BoxTransferController {
...
@@ -170,20 +197,43 @@ public class BoxTransferController {
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
()+
"手动移库位"
);
dataLog
.
setOperator
(
SecurityUtils
.
getLoginUsername
()+
"手动移库位"
);
dataLog
.
setCartonId
(
barcode
.
getPalletId
());
dataLog
.
setCartonId
(
barcode
.
getPalletId
());
dataLogManager
.
save
(
dataLog
);
dataLogManager
.
save
(
dataLog
);
boxInPos
(
dataLog
);
boxInPos
(
dataLog
,
task
.
getWarehouseCode
());
//如果是单据转库的时候,判断工单是否已经关闭
if
(
checkType
.
equals
(
task
.
getSourceType
())){
String
sourceName
=
task
.
getSourceName
();
LiteOrder
liteOrder
=
liteOrderCache
.
getLiteOrder
(
sourceName
);
if
(
liteOrder
==
null
){
liteOrder
=
liteOrderManager
.
findByOrderNo
(
sourceName
);
}
if
(
liteOrder
!=
null
){
log
.
info
(
task
.
getBarcode
()+
"找到的单据号为:"
+
sourceName
+
",单据是否关闭:"
+
liteOrder
.
isClosed
());
if
(
liteOrder
.
isClosed
()){
log
.
info
(
task
.
getBarcode
()+
"为单据号:"
+
sourceName
+
"为最后一箱,调用单据转库过账"
);
String
result
=
LuxsanApi
.
ticketGbPost
(
new
TicketGbPostRequest
(
CommonUtil
.
plantCode
,
sourceName
));
log
.
info
(
task
.
getBarcode
()+
"调用单据转库过账,单据号为:"
+
sourceName
+
"展示过账结果为:"
+
result
);
if
(
StringUtils
.
isEmpty
(
result
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
task
.
getBarcode
()+
"为单据转库最后一箱,单据号为:"
+
sourceName
+
",过账失败:"
+
result
);
}
}
}
}
}
}
}
}
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
}
}
private
void
boxInPos
(
DataLog
queueTask
){
private
void
boxInPos
(
DataLog
queueTask
,
String
warehouseCode
){
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
queueTask
.
getBarcode
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
queueTask
.
getBarcode
());
//已完成,加入库存,并且从完成队列中清除
//已完成,加入库存,并且从完成队列中清除
StoragePos
storagePos
=
storagePosManager
.
get
(
queueTask
.
getPosId
());
StoragePos
storagePos
=
storagePosManager
.
get
(
queueTask
.
getPosId
());
if
(
barcode
!=
null
)
{
if
(
barcode
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
warehouseCode
))
{
barcode
.
setWarehouseCode
(
warehouseCode
);
}
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
barcode
.
setPutInTime
(
System
.
currentTimeMillis
(),
true
);
barcode
.
setPutInTime
(
System
.
currentTimeMillis
(),
true
);
barcode
.
setInOpor
(
""
);
barcode
.
setInOpor
(
""
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/LineController.java
查看文件 @
0f5ffa5
...
@@ -298,6 +298,10 @@ public class LineController {
...
@@ -298,6 +298,10 @@ public class LineController {
soureId
=
dataLog
.
getSourceId
();
soureId
=
dataLog
.
getSourceId
();
sourceName
=
dataLog
.
getSourceName
();
sourceName
=
dataLog
.
getSourceName
();
if
(!
dataLog
.
isFinished
()){
if
(!
dataLog
.
isFinished
()){
if
(!
dataLog
.
isOutFromPos
()){
finishedOutTask
(
dataLog
);
dataLog
.
setOutFromPos
(
true
);
}
dataLog
.
setStatus
(
OP_STATUS
.
OUT_ON_LINE
.
name
());
dataLog
.
setStatus
(
OP_STATUS
.
OUT_ON_LINE
.
name
());
taskService
.
moveTaskToFinished
(
dataLog
);
taskService
.
moveTaskToFinished
(
dataLog
);
taskService
.
updateFinishedTask
(
dataLog
);
taskService
.
updateFinishedTask
(
dataLog
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/TakeOutController.java
查看文件 @
0f5ffa5
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
package
com
.
neotel
.
smfcore
.
custom
.
luxsan
.
factory_c
.
wipstor
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
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.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.luxsan.api.LuxsanApi
;
import
com.neotel.smfcore.custom.luxsan.api.LuxsanApi
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.request.FetchMoveTicketRequest
;
import
com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult
;
import
com.neotel.smfcore.custom.luxsan.api.bean.result.FetchMoveTicketResult
;
import
com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto
;
import
com.neotel.smfcore.custom.luxsan.factory_c.rawstor.bean.dto.FetchMoveTicketDto
;
import
com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.bean.TicketOut
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util.TicketUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util.TicketUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
...
@@ -36,6 +46,12 @@ public class TakeOutController {
...
@@ -36,6 +46,12 @@ public class TakeOutController {
@Autowired
@Autowired
private
ILiteOrderManager
liteOrderManager
;
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
IStoragePosManager
storagePosManager
;
@Autowired
private
TaskService
taskService
;
@ApiOperation
(
"拉取单据信息"
)
@ApiOperation
(
"拉取单据信息"
)
@RequestMapping
(
"/fetchTicket"
)
@RequestMapping
(
"/fetchTicket"
)
@AnonymousAccess
@AnonymousAccess
...
@@ -51,17 +67,23 @@ public class TakeOutController {
...
@@ -51,17 +67,23 @@ public class TakeOutController {
@ApiOperation
(
"单据出库"
)
@ApiOperation
(
"单据出库"
)
@RequestMapping
(
"/ticketOut"
)
@RequestMapping
(
"/ticketOut"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
ticketOut
(
String
ticket
,
boolean
isHold
)
{
public
synchronized
ResultBean
ticketOut
(
@RequestBody
TicketOut
ticketOut
)
{
log
.
info
(
"半成品仓单据出库:"
+
ticket
);
String
ticket
=
ticketOut
.
getTicket
();
boolean
isHold
=
ticketOut
.
isHold
();
List
<
String
>
boxList
=
ticketOut
.
getBoxList
();
log
.
info
(
"半成品仓261&931单据领用:"
+
ticket
+
",是否hold:"
+
isHold
+
",传入的料箱号为:"
+
JSON
.
toJSONString
(
boxList
));
if
(
StringUtils
.
isEmpty
(
ticket
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"单据号"
});
}
if
(
StringUtils
.
isNotEmpty
(
liteOrderCache
.
hasExecutingOrder
()))
{
if
(
StringUtils
.
isNotEmpty
(
liteOrderCache
.
hasExecutingOrder
()))
{
//throw new ValidateException("","有正在执行的工单,不允许恢复");
//throw new ValidateException("","有正在执行的工单,不允许恢复");
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"有正在执行的工单"
+
liteOrderCache
.
hasExecutingOrder
()
+
",请确认"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"有正在执行的工单"
+
liteOrderCache
.
hasExecutingOrder
()
+
",请确认"
);
}
}
if
(
StringUtils
.
isEmpty
(
ticket
))
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"单据号"
});
}
//1.判断单据是否存在
//1.判断单据是否存在
LiteOrder
liteOrder
=
liteOrderCache
.
getOrderSortItems
(
ticket
);
LiteOrder
liteOrder
=
liteOrderCache
.
getOrderSortItems
(
ticket
);
if
(
liteOrder
==
null
)
{
if
(
liteOrder
==
null
)
{
...
@@ -70,7 +92,66 @@ public class TakeOutController {
...
@@ -70,7 +92,66 @@ public class TakeOutController {
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
}
liteOrderCache
.
wipTicketOut
(
ticket
,
isHold
);
List
<
String
>
holdPosIdList
=
liteOrderCache
.
getHoldPosIdList
(
liteOrder
);
if
(
isHold
){
if
(
holdPosIdList
==
null
||
holdPosIdList
.
isEmpty
()){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
ticket
+
"没有获取到Hold的料箱信息"
);
}
}
//获取箱子信息
List
<
StoragePos
>
storagePosList
=
new
ArrayList
<>();
if
(
boxList
!=
null
&&
!
boxList
.
isEmpty
())
{
for
(
String
palletId
:
boxList
)
{
if
(
StringUtils
.
isEmpty
(
palletId
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"请核实传入的栈板id是否为空"
);
}
//判断在不在库
StoragePos
pos
=
storagePosManager
.
findOne
(
new
Query
(
Criteria
.
where
(
"barcode.palletId"
).
is
(
palletId
)));
if
(
pos
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
palletId
+
"不在库位中,请核实"
);
}
//判断有没有任务
Barcode
barcode
=
pos
.
getBarcode
();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
barcode
.
getBarcode
().
equals
(
dataLog
.
getBarcode
())
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
palletId
+
"有正在执行的任务,请核实,料箱号为:"
+
barcode
.
getBarcode
());
}
}
//判断输入的箱子,是否为当前工单所需要的
boolean
hasSame
=
false
;
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
if
(
barcode
.
getPartNumber
().
equals
(
orderItem
.
getPn
())
||
barcode
.
getPn
().
equals
(
orderItem
.
getPn
()))
{
if
(
StringUtils
.
isNotBlank
(
barcode
.
getWarehouseCode
()))
{
if
(
barcode
.
getWarehouseCode
().
equals
(
orderItem
.
getWarehouseCode
()))
{
hasSame
=
true
;
break
;
}
}
}
}
if
(!
hasSame
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
palletId
+
"不符合当前odn的料号与库别,料箱号为:"
+
barcode
.
getBarcode
());
}
//判断有没有hold
if
(
isHold
){
if
(
holdPosIdList
!=
null
&&
!
holdPosIdList
.
isEmpty
())
{
if
(!
holdPosIdList
.
contains
(
pos
.
getId
()))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
palletId
+
"不是hold的,料箱号为:"
+
palletId
);
}
}
}
storagePosList
.
add
(
pos
);
}
}
liteOrderCache
.
wipTicketOut
(
ticket
,
isHold
,
storagePosList
);
return
ResultBean
.
newOkResult
(
""
);
return
ResultBean
.
newOkResult
(
""
);
}
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/controller/WipStorCheckOutController.java
查看文件 @
0f5ffa5
...
@@ -193,7 +193,7 @@ public class WipStorCheckOutController {
...
@@ -193,7 +193,7 @@ public class WipStorCheckOutController {
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
b
ox
.
startsWith
(
dataLog
.
getBarcode
())
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
if
(
b
arcode
.
getBarcode
().
equals
(
dataLog
.
getBarcode
())
&&
!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"有正在执行的任务,请核实"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
box
+
"有正在执行的任务,请核实"
);
}
}
}
}
...
...
src/main/java/com/neotel/smfcore/custom/luxsan/factory_c/wipstor/kafka/service/KafkaService.java
查看文件 @
0f5ffa5
...
@@ -6,9 +6,12 @@ import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
...
@@ -6,9 +6,12 @@ import com.neotel.smfcore.core.barcode.enums.BARCODE_STATUS;
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.device.util.DataCache
;
import
com.neotel.smfcore.core.equipment.bean.EquipStatusBean
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
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.Storage
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.util.EquipStatusUtil
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.Heartbeat
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameter
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameter
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameterData
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.bean.MachineParameterData
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.config.KafkaConfig
;
import
com.neotel.smfcore.custom.luxsan.factory_c.wipstor.kafka.config.KafkaConfig
;
...
@@ -92,7 +95,18 @@ public class KafkaService {
...
@@ -92,7 +95,18 @@ public class KafkaService {
log
.
info
(
"结束推送原材料仓tower数据"
);
log
.
info
(
"结束推送原材料仓tower数据"
);
}
}
//@Scheduled(fixedRate = 1000 * 10)
public
void
sendHeartbeat
()
{
Heartbeat
heartbeat
=
new
Heartbeat
();
String
dateStr
=
DateUtil
.
format
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss.SSS"
);
heartbeat
.
setOccurrenceTime
(
dateStr
);
heartbeat
.
setMachineID
(
StorageNameConfig
.
semiFinishedTower
);
heartbeat
.
setTopicType
(
KafkaConfig
.
HEARTBEAT_TOPIC
);
String
statusStr
=
JSON
.
toJSONString
(
heartbeat
);
log
.
info
(
"出料口主题为:"
+
KafkaConfig
.
HEARTBEAT_TOPIC
+
"内容为:"
+
statusStr
);
ListenableFuture
future
=
kafkaTemplate
.
send
(
KafkaConfig
.
HEARTBEAT_TOPIC
,
statusStr
);
log
.
info
(
"出料口返回结果为:"
+
JSON
.
toJSONString
(
future
));
}
public
int
getTodayInOutCount
(
List
<
String
>
storageIdList
,
int
type
)
{
public
int
getTodayInOutCount
(
List
<
String
>
storageIdList
,
int
type
)
{
Query
q
=
new
Query
();
Query
q
=
new
Query
();
...
...
src/main/resources/config/application-21088prod.yml
查看文件 @
0f5ffa5
...
@@ -181,3 +181,9 @@ api:
...
@@ -181,3 +181,9 @@ api:
batchCheckReel
:
http://10.68.27.68:8001/Npm/CheckReelBatch
batchCheckReel
:
http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel
:
http://10.68.30.22:8082/api/mlb/FetchReel
fetchReel
:
http://10.68.30.22:8082/api/mlb/FetchReel
#半成品仓单据转库备料
ticketGbPick
:
http://10.68.30.22:8082/api/mlb/TicketGbPick
#半成品仓单据转库过账
ticketGbPost
:
http://10.68.30.22:8082/api/mlb/TicketGbPost
src/main/resources/config/application-21088test.yml
查看文件 @
0f5ffa5
...
@@ -180,4 +180,10 @@ api:
...
@@ -180,4 +180,10 @@ api:
#批量禁用料
#批量禁用料
batchCheckReel
:
http://10.68.27.68:8001/Npm/CheckReelBatch
batchCheckReel
:
http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel
:
http://10.42.220.171:8082/api/mlb/FetchReel
\ No newline at end of file
\ No newline at end of file
fetchReel
:
http://10.42.220.171:8082/api/mlb/FetchReel
#半成品仓单据转库备料
ticketGbPick
:
http://10.42.220.171:8082/api/mlb/TicketGbPick
#半成品仓单据转库过账
ticketGbPost
:
http://10.42.220.171:8082/api/mlb/TicketGbPost
\ No newline at end of file
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论