Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 333058fb
由
LN
编写于
2021-08-04 17:35:39 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加工单详情功能。增加看板接口。
1 个父辈
8d51c0f7
隐藏空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
611 行增加
和
11 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxKanbanDto.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxTaskDto.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/GroupStatusDto.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/mapstruct/BoxTaskMapper.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/query/BoxTaskQueryCriter.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderItemDto.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/mapstruct/OrderItemMapper.java
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
333058f
...
@@ -197,6 +197,9 @@ public class DataInitManager {
...
@@ -197,6 +197,9 @@ public class DataInitManager {
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
//料架分组
//料架分组
Menu
menukanban
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"boxkanban"
,
"锁定物料"
,
1
,
"lockMaterial"
,
"lockMaterial/material/index"
,
""
,
0
,
"app"
);
menus
.
addAll
(
createMenus
(
menukanban
));
//料架分组
Menu
menuShelf
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"menu:list"
,
"料架分组"
,
1
,
"lightGroup"
,
"neolight/lightGroup/index"
,
""
,
0
,
"list"
);
Menu
menuShelf
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"menu:list"
,
"料架分组"
,
1
,
"lightGroup"
,
"neolight/lightGroup/index"
,
""
,
0
,
"list"
);
menus
.
addAll
(
createMenus
(
menuShelf
));
menus
.
addAll
(
createMenus
(
menuShelf
));
...
...
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
;
import
com.google.common.base.Strings
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.kanban.rest.bean.dto.BoxKanbanDto
;
import
com.neotel.smfcore.core.kanban.rest.bean.dto.BoxStatusDto
;
import
com.neotel.smfcore.core.kanban.rest.bean.dto.BoxTaskDto
;
import
com.neotel.smfcore.core.kanban.rest.bean.dto.GroupStatusDto
;
import
com.neotel.smfcore.core.kanban.rest.bean.mapstruct.BoxTaskMapper
;
import
com.neotel.smfcore.core.kanban.rest.bean.query.BoxTaskQueryCriter
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.service.manager.impl.DataLogManagerImpl
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.Humiture
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.impl.GroupManagerImpl
;
import
com.neotel.smfcore.security.service.manager.impl.UserManagerImpl
;
import
com.neotel.smfcore.security.service.po.Group
;
import
com.neotel.smfcore.security.service.po.User
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
javafx.concurrent.Task
;
import
lombok.Data
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Set
;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api
(
tags
=
"BOX看板"
)
@RequestMapping
(
"api/boxkanban"
)
public
class
BoxKanbanController
{
@Autowired
TaskService
taskService
;
@Autowired
DataCache
dataCache
;
@Autowired
DataLogManagerImpl
dataLogManager
;
@Autowired
BoxTaskMapper
boxTaskMapper
;
@Autowired
UserManagerImpl
userManager
;
@Autowired
IGroupManager
groupManager
;
@ApiOperation
(
"获取看板数据"
)
@GetMapping
@PreAuthorize
(
"@el.check('boxkanban:info')"
)
public
BoxKanbanDto
info
()
{
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
BoxKanbanDto
boxKanbanDto
=
getKanBan
(
allTasks
);
String
userId
=
SecurityUtils
.
getCurrentUserId
();
User
user
=
userManager
.
get
(
userId
);
Set
<
String
>
mygroups
=
user
.
getGroups
();
ArrayList
<
GroupStatusDto
>
groupStatusDtos
=
new
ArrayList
<>();
for
(
String
groupid
:
mygroups
)
{
Group
group
=
groupManager
.
get
(
groupid
);
if
(
group
==
null
)
{
continue
;
}
List
<
BoxStatusDto
>
boxStatusDtos
=
new
ArrayList
<>();
List
<
String
>
cidList
=
getCidsByGroupId
(
groupid
,
false
);
for
(
String
cid
:
cidList
)
{
Storage
storage
=
dataCache
.
getStorage
(
cid
);
if
(
storage
==
null
){
continue
;
}
boxStatusDtos
.
add
(
getBoxDto
(
storage
,
allTasks
));
}
GroupStatusDto
groupStatusDto
=
new
GroupStatusDto
(
group
.
getId
(),
group
.
getGroupName
(),
boxStatusDtos
);
groupStatusDtos
.
add
(
groupStatusDto
);
}
boxKanbanDto
.
setGroupList
(
groupStatusDtos
);
return
boxKanbanDto
;
}
@ApiOperation
(
"查询看板任务列表"
)
@GetMapping
(
"/task"
)
@PreAuthorize
(
"@el.check('boxkanban:list')"
)
public
PageData
<
BoxTaskDto
>
info
(
BoxTaskQueryCriter
criteria
,
Pageable
pageable
)
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
String
groupId
=
criteria
.
getGroupId
();
List
<
String
>
cidList
=
getCidsByGroupId
(
groupId
,
true
);
query
.
addCriteria
(
Criteria
.
where
(
"cid"
).
in
(
cidList
));
PageData
<
DataLog
>
dataLogPageData
=
dataLogManager
.
findByPage
(
query
,
pageable
);
List
<
BoxTaskDto
>
boxTaskDtos
=
boxTaskMapper
.
toDto
(
dataLogPageData
.
getContent
());
//正常
if
(
criteria
.
getStatus
()==
1
){
Date
lastUpdateTime
=
new
Date
((
new
Date
().
getTime
())-
10
*
60
*
1000
);
query
.
addCriteria
(
Criteria
.
where
(
"updateDate"
).
gt
(
lastUpdateTime
).
and
(
"status"
).
is
(
OP_STATUS
.
EXECUTING
));
}
//异常
else
if
(
criteria
.
getStatus
()==
2
){
Date
lastUpdateTime
=
new
Date
((
new
Date
().
getTime
())-
10
*
60
*
1000
);
query
.
addCriteria
(
Criteria
.
where
(
"updateDate"
).
lte
(
lastUpdateTime
).
and
(
"status"
).
is
(
OP_STATUS
.
EXECUTING
));
}
else
{
List
<
String
>
sList
=
new
ArrayList
<>();
sList
.
add
(
OP_STATUS
.
WAIT
.
toString
());
sList
.
add
(
OP_STATUS
.
EXECUTING
.
toString
());
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
in
(
sList
));
}
return
new
PageData
(
boxTaskDtos
,
boxTaskDtos
.
size
());
}
private
List
<
String
>
getCidsByGroupId
(
String
groupId
,
boolean
nullReturnAll
){
List
<
String
>
cidList
=
Lists
.
newArrayList
();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
if
(!
ObjectUtils
.
isEmpty
(
groupId
))
{
String
storageGroupId
=
storage
.
getGroupId
();
if
(
ObjectUtils
.
isEmpty
(
storageGroupId
)){
storageGroupId
=
"1"
;
}
if
(
storageGroupId
.
equals
(
groupId
))
{
cidList
.
add
(
storage
.
getCid
());
}
}
else
if
(
nullReturnAll
){
cidList
.
add
(
storage
.
getCid
());
}
}
return
cidList
;
}
private
BoxKanbanDto
getKanBan
(
List
<
DataLog
>
allTasks
)
{
int
allCount
=
allTasks
.
size
();
int
abnormal
=
0
;
int
normal
=
0
;
for
(
DataLog
data
:
allTasks
)
{
//超过10分钟未更新为异常
if
(
data
.
isAbnormal
())
{
abnormal
++;
}
else
if
(
data
.
getStatus
().
equals
(
OP_STATUS
.
EXECUTING
))
{
normal
++;
}
}
BoxKanbanDto
kanbanDto
=
new
BoxKanbanDto
(
allCount
,
normal
,
abnormal
,
new
ArrayList
<>());
return
kanbanDto
;
}
private
BoxStatusDto
getBoxDto
(
Storage
storage
,
List
<
DataLog
>
allTasks
){
int
inTask
=
0
;
int
outTask
=
0
;
for
(
DataLog
data
:
allTasks
)
{
if
(
data
.
getStorageId
().
equals
(
storage
.
getId
())){
if
(
data
.
getType
()==
1
){
inTask
++;
}
else
if
(
data
.
getType
()==
2
){
outTask
++;
}
}
}
int
allCount
=
inTask
+
outTask
;
BoxStatusDto
boxDto
=
new
BoxStatusDto
(
storage
.
getId
(),
storage
.
getCid
(),
storage
.
getName
(),
false
,
0
,
"11.11"
,
"22.22"
,
""
,
allCount
,
inTask
,
outTask
,
1
,
OP_STATUS
.
EXECUTING
.
toString
(),
"库位号"
,
"条码"
,
"PN"
,
"工单名称"
);
//获取设备状态,设置状态和当前任务信息
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
bean
==
null
||
bean
.
getBoxStatus
()==
null
){
boxDto
.
setOnLine
(
false
);
}
else
{
boxDto
.
setOnLine
(
true
);
for
(
BoxStatusBean
boxStatus
:
bean
.
getBoxStatus
().
values
())
{
String
humidity
=
boxStatus
.
getHumidity
();
String
temperature
=
boxStatus
.
getTemperature
();
boxDto
.
setHumidity
(
humidity
);
boxDto
.
setTemperature
(
temperature
);
boxDto
.
setStatus
(
bean
.
getStatus
());
boxDto
.
setMsg
(
bean
.
getMsg
());
break
;
}
}
return
boxDto
;
}
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxKanbanDto.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.*
;
import
java.util.List
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
BoxKanbanDto
{
@ApiModelProperty
(
"全部任务数"
)
private
int
taskCount
;
@ApiModelProperty
(
"正常任务数"
)
private
int
normalTaskCount
;
@ApiModelProperty
(
"异常任务数"
)
private
int
abnormalTtaskCount
;
@ApiModelProperty
(
"组列表"
)
private
List
<
GroupStatusDto
>
groupList
;
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxStatusDto.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
BoxStatusDto
{
@ApiModelProperty
(
"ID"
)
private
String
id
;
@ApiModelProperty
(
"名称"
)
private
String
name
;
@ApiModelProperty
(
"CID"
)
private
String
cid
;
@ApiModelProperty
(
"是否在线"
)
private
boolean
onLine
=
false
;
/// <summary>
/// 单台BOX状态
///1=正常运行中
/// 2=急停,3=故障,4=警告,5=调试中
/// 6入库执行中,7入仓位完成,8入库失败
/// 9出库执行中,10出仓位完成,11出库失败
/// </summary>
@ApiModelProperty
(
"单台BOX状态,0=离线,1=正常运行中, 2=急停,3=故障,4=警告,5=调试中,6入库执行中,7入仓位完成,8入库失败, 9出库执行中,10出仓位完成,11出库失败"
)
private
int
status
=
0
;
@ApiModelProperty
(
"温度"
)
private
String
temperature
;
@ApiModelProperty
(
"湿度"
)
private
String
humidity
;
@ApiModelProperty
(
"文字显示"
)
private
String
msg
=
""
;
@ApiModelProperty
(
"总任务数"
)
private
int
taskCount
=
0
;
@ApiModelProperty
(
"入库任务数"
)
private
int
inTaskCount
=
0
;
@ApiModelProperty
(
"出库任务数"
)
private
int
outTaskCount
=
0
;
@ApiModelProperty
(
"当前执行任务的,0=无,1=入库,2=出库"
)
private
int
currTaskType
=
0
;
/**
* 当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束
*/
@ApiModelProperty
(
"当前执行任务的 任务状态:OP_STATUS:NONE,WAIT=等待,EXECUTING=正在执行,PAUSE=已暂停,FINISHED=已完成,CANCEL=已取消,END=已结束"
)
private
String
currTaskStatus
;
@ApiModelProperty
(
"当前执行任务的:库位号"
)
private
String
posName
;
@ApiModelProperty
(
"当前执行任务的:条码"
)
private
String
barcode
;
@ApiModelProperty
(
"当前执行任务的:Pn"
)
private
String
partNumber
;
@ApiModelProperty
(
"当前执行任务的:来源名称"
)
private
String
sourceName
;
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxTaskDto.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BoxTaskDto
{
@ApiModelProperty
(
"是否是单盘出库(联电指出库项目,默认为false即默认批量出库)"
)
private
boolean
singleOut
=
false
;
@ApiModelProperty
(
"所属料仓"
)
private
String
storageName
;
@ApiModelProperty
(
value
=
"料仓 cid"
)
private
String
cid
;
@ApiModelProperty
(
"料仓 ID"
)
private
String
storageId
;
@ApiModelProperty
(
"料仓 ID"
)
private
String
posId
;
@ApiModelProperty
(
"仓位名称"
)
private
String
posName
;
@ApiModelProperty
(
"二维码(Reel ID)"
)
private
String
barcode
;
@ApiModelProperty
(
"物料编号"
)
private
String
partNumber
;
/**
*数量(从 barCode 中读取)
*/
@ApiModelProperty
(
"物料编号"
)
private
int
num
;
/**
* 类型:入库OP.PUT_IN,出库OP.CHECKOUT
*/
@ApiModelProperty
(
"出入库类型"
)
private
int
type
;
/**
* 状态:OP_STATUS
*/
private
String
status
;
/**
* 指定批次Id
*/
private
String
batchId
;
/**
* 批次显示内容
*/
private
String
batchInfo
;
/**
* 指令来源:站位列表 指定订单工单 MES
*/
private
String
sourceType
;
/**
* 来源 id,
*/
private
String
sourceId
;
/**
* 来源名称
*/
private
String
sourceName
;
/**
* 子来源 ID(单个站位)
*/
private
String
subSourceId
;
/**
* 子来源名称
*/
private
String
subSourceInfo
;
/**
* 创建人
*/
private
String
creator
;
/**
* 操作人
*/
private
String
operator
;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
private
List
<
String
>
relationCodes
;
private
String
memo
;
/**
* 搅拌时间(锡膏搅拌任务使用)
*/
private
int
mixTime
;
/**
* 亮灯料架颜色
*/
private
String
lightColor
=
""
;
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/GroupStatusDto.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.util.List
;
@Getter
@Setter
@AllArgsConstructor
public
class
GroupStatusDto
{
@ApiModelProperty
(
"ID"
)
private
String
groupId
;
@ApiModelProperty
(
"组名称"
)
private
String
groupName
;
@ApiModelProperty
(
"料仓列表"
)
private
List
<
BoxStatusDto
>
boxList
;
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/mapstruct/BoxTaskMapper.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
mapstruct
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.kanban.rest.bean.dto.BoxTaskDto
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
BoxTaskMapper
extends
BaseMapper
<
BoxTaskDto
,
DataLog
>
{
}
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/query/BoxTaskQueryCriter.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
kanban
.
rest
.
bean
.
query
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
@Data
public
class
BoxTaskQueryCriter
{
@QueryCondition
(
blurry
=
"storageName,cid,posName,partNumber,barcode,sourceName"
)
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"updateDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
BetweenData
<
Date
>
createDate
;
@ApiModelProperty
(
"组ID"
)
private
String
groupId
;
@ApiModelProperty
(
"料仓CID"
)
@QueryCondition
private
String
cid
;
@ApiModelProperty
(
"料仓ID"
)
@QueryCondition
private
String
storageId
;
@ApiModelProperty
(
"库位号"
)
@QueryCondition
private
String
posName
;
@ApiModelProperty
(
"条码"
)
@QueryCondition
private
String
barcode
;
@ApiModelProperty
(
"PN"
)
@QueryCondition
private
String
partNumber
;
@ApiModelProperty
(
"来源"
)
@QueryCondition
private
String
sourceName
;
@ApiModelProperty
(
"任务状态:0=所有,1=正常,2=异常"
)
private
int
status
=
0
;
@ApiModelProperty
(
"任务类型:0=所有,1=入库,2=出库"
)
@QueryCondition
private
Integer
type
;
}
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
;
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
;
import
cn.hutool.db.sql.Order
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.PageData
;
...
@@ -15,6 +16,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
...
@@ -15,6 +16,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderDto
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderDto
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper
;
import
com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition
;
import
com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
...
@@ -80,6 +82,9 @@ public class OrderController {
...
@@ -80,6 +82,9 @@ public class OrderController {
private
final
OrderMapper
orderMapper
;
private
final
OrderMapper
orderMapper
;
@Autowired
@Autowired
private
final
OrderItemMapper
orderItemMapper
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
private
LiteOrderCache
liteOrderCache
;
@Autowired
@Autowired
...
@@ -99,14 +104,14 @@ public class OrderController {
...
@@ -99,14 +104,14 @@ public class OrderController {
String
image
=
"csv"
;
String
image
=
"csv"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
if
(
fileType
!=
null
&&
!
image
.
contains
(
fileType
))
{
throw
new
BadRequestException
(
"smfcode.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
throw
new
BadRequestException
(
"smfcode.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
image
});
}
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
List
<
LiteOrderItem
>
liteOrderItems
=
handleOrderCsv
(
localFile
.
getAbsolutePath
());
List
<
LiteOrderItem
>
liteOrderItems
=
handleOrderCsv
(
localFile
.
getAbsolutePath
());
if
(
liteOrderItems
==
null
||
liteOrderItems
.
size
()
<=
0
)
{
if
(
liteOrderItems
==
null
||
liteOrderItems
.
size
()
<=
0
)
{
throw
new
BadRequestException
(
"smfcode.fileError"
,
"文件解析失败"
);
throw
new
BadRequestException
(
"smfcode.fileError"
,
"文件解析失败"
);
}
}
...
@@ -122,7 +127,7 @@ public class OrderController {
...
@@ -122,7 +127,7 @@ public class OrderController {
}
else
{
}
else
{
log
.
info
(
"数据库中已存在工单号为["
+
liteOrder
.
getOrderNo
()
+
"],忽略文件:"
+
localFile
.
getAbsolutePath
());
log
.
info
(
"数据库中已存在工单号为["
+
liteOrder
.
getOrderNo
()
+
"],忽略文件:"
+
localFile
.
getAbsolutePath
());
throw
new
BadRequestException
(
"smfcode.valueAlreadyExist"
,
"{0}[{1}]已存在"
,
new
String
[]{
"orderNo"
,
liteOrder
.
getOrderNo
()});
throw
new
BadRequestException
(
"smfcode.valueAlreadyExist"
,
"{0}[{1}]已存在"
,
new
String
[]{
"orderNo"
,
liteOrder
.
getOrderNo
()});
// throw new BadRequestException("工单号[" + liteOrder.getOrderNo() + "]已存在");
// throw new BadRequestException("工单号[" + liteOrder.getOrderNo() + "]已存在");
}
}
...
@@ -132,15 +137,15 @@ public class OrderController {
...
@@ -132,15 +137,15 @@ public class OrderController {
@ApiOperation
(
"工单出库"
)
@ApiOperation
(
"工单出库"
)
@PostMapping
(
value
=
"/out"
)
@PostMapping
(
value
=
"/out"
)
@PreAuthorize
(
"@el.check('order:out')"
)
@PreAuthorize
(
"@el.check('order:out')"
)
public
ResultBean
delete
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
public
ResultBean
delete
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
if
(
orderNo
==
null
)
{
// throw new BadRequestException("工单号不能为空");
// throw new BadRequestException("工单号不能为空");
throw
new
BadRequestException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
}
);
throw
new
BadRequestException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
}
);
}
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
if
(
liteOrder
==
null
)
{
throw
new
BadRequestException
(
"smfcode.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
throw
new
BadRequestException
(
"smfcode.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
}
// ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder);
// ResultBean resultBean = liteOrderCache.checkOutOrder(liteOrder);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
orderNo
,
false
);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
orderNo
,
false
);
...
@@ -235,4 +240,29 @@ public class OrderController {
...
@@ -235,4 +240,29 @@ public class OrderController {
}
}
return
null
;
return
null
;
}
}
@ApiOperation
(
"工单详情"
)
@GetMapping
(
"/detial"
)
@PreAuthorize
(
"@el.check('order:detial')"
)
@AnonymousAccess
public
OrderDto
detial
(
@RequestParam
(
required
=
false
)
String
id
,
@RequestParam
(
required
=
false
)
String
orderNo
)
{
if
(!
ObjectUtils
.
isEmpty
(
id
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
id
);
if
(
liteOrder
!=
null
)
{
OrderDto
dto
=
orderMapper
.
toDto
(
liteOrder
);
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
liteOrder
.
getOrderItems
()));
return
dto
;
}
}
else
if
(!
ObjectUtils
.
isEmpty
(
orderNo
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
!=
null
)
{
OrderDto
dto
=
orderMapper
.
toDto
(
liteOrder
);
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
liteOrder
.
getOrderItems
()));
return
dto
;
}
}
throw
new
BadRequestException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
}
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
.
bean
.
dto
;
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
.
bean
.
dto
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Getter
;
import
lombok.Getter
;
import
lombok.Setter
;
import
lombok.Setter
;
...
@@ -69,4 +70,11 @@ public class OrderDto implements Serializable {
...
@@ -69,4 +70,11 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"套(倍)数"
)
@ApiModelProperty
(
"套(倍)数"
)
private
float
orderTimes
=
1
f
;
private
float
orderTimes
=
1
f
;
/**
* 订单的详细信息
*/
@Transient
@ApiModelProperty
(
"订单的详细信息"
)
private
List
<
OrderItemDto
>
orderItems
;
}
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderItemDto.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.springframework.data.annotation.Transient
;
@Getter
@Setter
public
class
OrderItemDto
{
@ApiModelProperty
(
value
=
"ID"
)
private
String
id
;
@ApiModelProperty
(
"物料编号"
)
private
String
pn
;
@ApiModelProperty
(
"需求数量"
)
private
int
needNum
=
0
;
@ApiModelProperty
(
"需求料盘数"
)
private
int
needReelCount
=
0
;
@ApiModelProperty
(
"已出数量"
)
private
int
outNum
=
0
;
@ApiModelProperty
(
"已出盘数"
)
private
int
outReelCount
=
0
;
@ApiModelProperty
(
"订单信息"
)
private
String
orderNo
=
""
;
@ApiModelProperty
(
"站位信息"
)
private
String
feederInfo
=
""
;
@ApiModelProperty
(
"库存信息"
)
@Transient
private
int
inventoryNum
=
0
;
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/mapstruct/OrderItemMapper.java
0 → 100644
查看文件 @
333058f
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
.
bean
.
mapstruct
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderItemDto
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
OrderItemMapper
extends
BaseMapper
<
OrderItemDto
,
LiteOrderItem
>
{
}
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
查看文件 @
333058f
...
@@ -32,7 +32,6 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -32,7 +32,6 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
@Override
@Override
public
LiteOrder
findByOrderNo
(
String
orderNo
)
{
public
LiteOrder
findByOrderNo
(
String
orderNo
)
{
LiteOrder
order
=
liteOrderDao
.
findOneByCondition
(
new
String
[]
{
"orderNo"
},
new
String
[]
{
orderNo
});
LiteOrder
order
=
liteOrderDao
.
findOneByCondition
(
new
String
[]
{
"orderNo"
},
new
String
[]
{
orderNo
});
if
(
order
!=
null
&&
order
.
getOrderItems
()==
null
){
if
(
order
!=
null
&&
order
.
getOrderItems
()==
null
){
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
orderNo
);
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
orderNo
);
order
.
setOrderItems
(
items
);
order
.
setOrderItems
(
items
);
...
@@ -42,7 +41,12 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -42,7 +41,12 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
@Override
@Override
public
LiteOrder
get
(
String
id
)
{
public
LiteOrder
get
(
String
id
)
{
return
liteOrderDao
.
findOneById
(
id
);
LiteOrder
order
=
liteOrderDao
.
findOneById
(
id
);
if
(
order
!=
null
&&
order
.
getOrderItems
()==
null
){
List
<
LiteOrderItem
>
items
=
liteOrderItemManager
.
findOrderItems
(
order
.
getOrderNo
());
order
.
setOrderItems
(
items
);
}
return
order
;
}
}
@Override
@Override
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/query/StoragePosQueryCriteria.java
查看文件 @
333058f
...
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
...
@@ -8,7 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import
java.util.Date
;
import
java.util.Date
;
@Data
@Data
public
class
StoragePosQueryCriteria
{
public
class
StoragePosQueryCriteria
{
@QueryCondition
(
blurry
=
"barcode,posName"
)
@QueryCondition
(
blurry
=
"barcode
.barcode
,posName"
)
private
String
blurry
;
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"updateDate"
)
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"updateDate"
)
...
@@ -18,7 +18,7 @@ public class StoragePosQueryCriteria {
...
@@ -18,7 +18,7 @@ public class StoragePosQueryCriteria {
@QueryCondition
@QueryCondition
private
String
storageId
;
private
String
storageId
;
@QueryCondition
@QueryCondition
(
blurry
=
"barcode.barcode"
)
private
String
barcode
;
private
String
barcode
;
@QueryCondition
@QueryCondition
private
String
posName
;
private
String
posName
;
...
...
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
333058f
...
@@ -324,5 +324,15 @@ public class DataLog extends BasePo implements Serializable {
...
@@ -324,5 +324,15 @@ public class DataLog extends BasePo implements Serializable {
}
}
relationCodes
.
add
(
relationCode
);
relationCodes
.
add
(
relationCode
);
}
}
/**
* 判断任务是否异常,执行中,且10分钟未更新的认为异常
*/
public
boolean
isAbnormal
(){
if
(
isExecuting
()
){
if
(
System
.
currentTimeMillis
()
-
super
.
getUpdateDate
().
getTime
()
>
10
*
60
*
1000
){
return
true
;
}
}
return
false
;
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论