Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 8ee550e4
由
LN
编写于
2022-01-05 17:17:42 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加出入库报表功能
1 个父辈
4bf3e266
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
309 行增加
和
10 行删除
src/main/java/com/neotel/smfcore/core/report/ReportController.java
src/main/java/com/neotel/smfcore/core/report/bean/ChartItem.java
src/main/java/com/neotel/smfcore/core/report/rest/dto/ChartItemDto.java
src/main/java/com/neotel/smfcore/core/report/rest/dto/InoutDataDto.java
src/main/java/com/neotel/smfcore/core/report/rest/mapstruct/ChartItemMapper.java
src/main/java/com/neotel/smfcore/core/report/rest/query/ReportQuery.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStorageManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StorageManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/service/dao/IDataLogDao.java
src/main/java/com/neotel/smfcore/core/system/service/dao/impl/DataLogDaoImpl.java
src/main/resources/messages_en_US.properties
src/main/java/com/neotel/smfcore/core/report/ReportController.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
com.neotel.smfcore.core.report.rest.dto.ChartItemDto
;
import
com.neotel.smfcore.core.report.rest.dto.InoutDataDto
;
import
com.neotel.smfcore.core.report.rest.mapstruct.ChartItemMapper
;
import
com.neotel.smfcore.core.report.rest.query.ReportQuery
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.*
;
@Slf4j
@RestController
@RequiredArgsConstructor
@Api
(
tags
=
"报表:出入库、库存"
)
@RequestMapping
(
"api/report"
)
public
class
ReportController
{
@Autowired
private
IStorageManager
storageManager
;
@Autowired
private
ChartItemMapper
chartItemMapper
;
@ApiOperation
(
"获取出入库数据"
)
@GetMapping
(
value
=
"/inOutData"
)
@PreAuthorize
(
"@el.check('inOutData')"
)
public
InoutDataDto
showChart
(
ReportQuery
query
)
{
Date
startDay
=
query
.
getUpdateDate
().
getFrom
();
Date
endDay
=
query
.
getUpdateDate
().
getTo
();
if
(
startDay
==
null
)
{
Calendar
c
=
Calendar
.
getInstance
();
//过去七天
c
.
setTime
(
new
Date
());
c
.
add
(
Calendar
.
DATE
,
-
7
);
startDay
=
c
.
getTime
();
}
if
(
endDay
==
null
)
{
endDay
=
new
Date
();
}
String
pn
=
query
.
getPn
();
List
<
ChartItem
>
chartItemList
=
storageManager
.
getRunStatusData
(
startDay
,
endDay
,
pn
);
InoutDataDto
dto
=
new
InoutDataDto
();
for
(
ChartItem
item
:
chartItemList
)
{
dto
.
getLabelList
().
add
(
item
.
getLabel
());
dto
.
getPutInValueList
().
add
(
item
.
getPutInValue
());
dto
.
getCheckOutValueList
().
add
(
item
.
getCheckOutValue
());
}
return
dto
;
}
}
src/main/java/com/neotel/smfcore/core/report/bean/ChartItem.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
.
bean
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
ChartItem
implements
Serializable
{
/**
* label为时间标签 value 为入库量,value2为出库量,value3为报警次数,value4为报警持续时间
*/
private
String
label
;
private
int
putInValue
;
private
int
checkOutValue
;
private
int
value
;
// private int value3;
//
// private int value4;
//
// private int value5;
}
src/main/java/com/neotel/smfcore/core/report/rest/dto/ChartItemDto.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
.
rest
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
ChartItemDto
implements
Serializable
{
/**
* label为时间标签 value 为入库量,value2为出库量,value3为报警次数,value4为报警持续时间
*/
@ApiModelProperty
(
"日期"
)
private
String
label
;
@ApiModelProperty
(
"入库量"
)
private
int
putInValue
;
@ApiModelProperty
(
"出库量"
)
private
int
checkOutValue
;
// @ApiModelProperty("报警次数")
// private int value3;
//
// @ApiModelProperty("报警持续时间")
// private int value4;
//
// private int value5;
}
\ No newline at end of file
\ No newline at end of file
src/main/java/com/neotel/smfcore/core/report/rest/dto/InoutDataDto.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
.
rest
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
public
class
InoutDataDto
implements
Serializable
{
public
InoutDataDto
()
{
labelList
=
new
ArrayList
<>();
putInValueList
=
new
ArrayList
<>();
checkOutValueList
=
new
ArrayList
<>();
}
@ApiModelProperty
(
"日期"
)
private
List
<
String
>
labelList
;
@ApiModelProperty
(
"入库量"
)
private
List
<
Integer
>
putInValueList
;
@ApiModelProperty
(
"出库量"
)
private
List
<
Integer
>
checkOutValueList
;
}
src/main/java/com/neotel/smfcore/core/report/rest/mapstruct/ChartItemMapper.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
.
rest
.
mapstruct
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
com.neotel.smfcore.core.report.rest.dto.ChartItemDto
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
ChartItemMapper
extends
BaseMapper
<
ChartItemDto
,
ChartItem
>
{
}
src/main/java/com/neotel/smfcore/core/report/rest/query/ReportQuery.java
0 → 100644
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
report
.
rest
.
query
;
import
cn.hutool.core.date.DateTime
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.io.Serializable
;
import
java.util.Date
;
@Data
public
class
ReportQuery
implements
Serializable
{
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd"
)
private
BetweenData
<
Date
>
updateDate
;
private
String
pn
;
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStorageManager.java
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
storage
.
service
.
manager
;
package
com
.
neotel
.
smfcore
.
core
.
storage
.
service
.
manager
;
import
com.neotel.smfcore.common.base.IBaseManager
;
import
com.neotel.smfcore.common.base.IBaseManager
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Set
;
public
interface
IStorageManager
extends
IBaseManager
<
Storage
>
{
public
interface
IStorageManager
extends
IBaseManager
<
Storage
>
{
List
<
Storage
>
findAll
();
List
<
Storage
>
findAll
();
...
@@ -12,4 +13,6 @@ public interface IStorageManager extends IBaseManager<Storage> {
...
@@ -12,4 +13,6 @@ public interface IStorageManager extends IBaseManager<Storage> {
void
updateStorageGroup
(
String
storageId
,
String
groupId
);
void
updateStorageGroup
(
String
storageId
,
String
groupId
);
void
clearStorageGroup
(
String
groupId
);
void
clearStorageGroup
(
String
groupId
);
List
<
ChartItem
>
getRunStatusData
(
Date
fromDate
,
Date
toDate
,
String
partNumber
);
}
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StorageManagerImpl.java
查看文件 @
8ee550e
...
@@ -2,13 +2,13 @@ package com.neotel.smfcore.core.storage.service.manager.impl;
...
@@ -2,13 +2,13 @@ package com.neotel.smfcore.core.storage.service.manager.impl;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.order.service.dao.ILiteOrderDao
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
com.neotel.smfcore.core.storage.service.dao.IStorageDao
;
import
com.neotel.smfcore.core.storage.service.dao.IStorageDao
;
import
com.neotel.smfcore.core.storage.service.dao.IStoragePosDao
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
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.s
torage.service.po.StoragePos
;
import
com.neotel.smfcore.core.s
ystem.service.dao.IDataLogDao
;
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.domain.Pageable
;
import
org.springframework.data.domain.Pageable
;
...
@@ -17,16 +17,19 @@ import org.springframework.data.mongodb.core.query.Query;
...
@@ -17,16 +17,19 @@ import org.springframework.data.mongodb.core.query.Query;
import
org.springframework.data.mongodb.core.query.Update
;
import
org.springframework.data.mongodb.core.query.Update
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
@Slf4j
@Slf4j
@Service
@Service
public
class
StorageManagerImpl
implements
IStorageManager
{
public
class
StorageManagerImpl
implements
IStorageManager
{
@Autowired
@Autowired
private
IStorageDao
storageDao
;
private
IStorageDao
storageDao
;
@Autowired
private
IDataLogDao
dataLogDao
;
@Autowired
private
ILiteOrderDao
liteOrderDao
;
@Override
@Override
...
@@ -73,4 +76,73 @@ public class StorageManagerImpl implements IStorageManager {
...
@@ -73,4 +76,73 @@ public class StorageManagerImpl implements IStorageManager {
}
}
/**
* 获取某个时间段的统计信息ChartItem 的 value 为入库量,value2为出库量,value3为报警次数,value4为报警持续时间
*/
@Override
public
List
<
ChartItem
>
getRunStatusData
(
Date
fromDate
,
Date
toDate
,
String
partNumber
){
if
(
fromDate
==
null
||
toDate
==
null
){
return
new
ArrayList
<>();
}
LinkedHashMap
<
String
,
ChartItem
>
inOutDataMap
=
new
LinkedHashMap
<>();
Date
startDay
=
DateUtil
.
getMinDate
(
fromDate
,
toDate
);
Date
endDay
=
DateUtil
.
getMaxDate
(
fromDate
,
toDate
);
/**
* 结束时间+1天,包含结束那一天
*/
long
endTime
=
endDay
.
getTime
();
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
startDay
);
do
{
int
dayOfYear
=
c
.
get
(
Calendar
.
DAY_OF_YEAR
);
String
dayStr
=
DateUtil
.
toDateString
(
c
.
getTime
());
ChartItem
item
=
new
ChartItem
();
item
.
setLabel
(
dayStr
);
inOutDataMap
.
put
(
String
.
valueOf
(
dayOfYear
),
item
);
c
.
add
(
Calendar
.
DAY_OF_YEAR
,
1
);
}
while
(
c
.
getTimeInMillis
()
<=
endTime
);
List
<
ChartItem
>
putInData
=
dataLogDao
.
putInChart
(
startDay
,
endDay
,
partNumber
);
for
(
ChartItem
putInItem
:
putInData
){
String
dayOfYear
=
putInItem
.
getLabel
();
ChartItem
item
=
inOutDataMap
.
get
(
dayOfYear
);
if
(
item
!=
null
){
item
.
setPutInValue
(
putInItem
.
getValue
());
}
}
List
<
ChartItem
>
checkOutData
=
dataLogDao
.
checkOutChart
(
startDay
,
endDay
,
partNumber
);
for
(
ChartItem
checkOutItem
:
checkOutData
){
String
dayOfYear
=
checkOutItem
.
getLabel
();
ChartItem
item
=
inOutDataMap
.
get
(
dayOfYear
);
if
(
item
!=
null
){
item
.
setCheckOutValue
(
checkOutItem
.
getValue
());
}
}
// List<ChartItem> alarmData = alarmInfoDao.alarmChart(startDay, endDay);
// for (ChartItem alarmItem : alarmData){
// String dayOfYear = alarmItem.getLabel();
// ChartItem item = inOutDataMap.get(dayOfYear);
// if(item != null){
// item.setValue3(alarmItem.getValue());
// item.setValue4(alarmItem.getValue2());
// }
// }
// List<ChartItem> orderData = liteOrderDao.orderChart(startDay, endDay);
// for (ChartItem orderItem : orderData){
// String dayOfYear = orderItem.getLabel();
// ChartItem item = inOutDataMap.get(dayOfYear);
// if(item != null){
// item.setValue5(orderItem.getValue());
// }
// }
//alarmInfoDao.alarmChartByType(startDay,endDay);
//alarmInfoDao.alarmChartByBox(startDay,endDay);
return
new
ArrayList
<>(
inOutDataMap
.
values
());
}
}
}
src/main/java/com/neotel/smfcore/core/system/service/dao/IDataLogDao.java
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
system
.
service
.
dao
;
package
com
.
neotel
.
smfcore
.
core
.
system
.
service
.
dao
;
import
com.neotel.smfcore.common.base.IBaseDao
;
import
com.neotel.smfcore.common.base.IBaseDao
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
java.util.Date
;
import
java.util.List
;
public
interface
IDataLogDao
extends
IBaseDao
{
public
interface
IDataLogDao
extends
IBaseDao
{
List
<
ChartItem
>
putInChart
(
Date
startDay
,
Date
endDay
,
String
partNumber
);
List
<
ChartItem
>
checkOutChart
(
Date
startDay
,
Date
endDay
,
String
partNumber
);
}
}
src/main/java/com/neotel/smfcore/core/system/service/dao/impl/DataLogDaoImpl.java
查看文件 @
8ee550e
package
com
.
neotel
.
smfcore
.
core
.
system
.
service
.
dao
.
impl
;
package
com
.
neotel
.
smfcore
.
core
.
system
.
service
.
dao
.
impl
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.common.base.AbstractBaseDao
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.report.bean.ChartItem
;
import
com.neotel.smfcore.core.system.service.dao.IDataLogDao
;
import
com.neotel.smfcore.core.system.service.dao.IDataLogDao
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.data.mongodb.core.aggregation.Aggregation
;
import
org.springframework.data.mongodb.core.aggregation.AggregationResults
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
import
java.util.List
;
@Service
@Service
public
class
DataLogDaoImpl
extends
AbstractBaseDao
implements
IDataLogDao
{
public
class
DataLogDaoImpl
extends
AbstractBaseDao
implements
IDataLogDao
{
@Override
@Override
public
Class
getEntityClass
()
{
public
Class
getEntityClass
()
{
return
DataLog
.
class
;
return
DataLog
.
class
;
}
}
@Override
public
List
<
ChartItem
>
putInChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
){
return
chart
(
fromTime
,
toTime
,
OP
.
PUT_IN
,
partNumber
);
}
@Override
public
List
<
ChartItem
>
checkOutChart
(
Date
fromTime
,
Date
toTime
,
String
partNumber
){
return
chart
(
fromTime
,
toTime
,
OP
.
CHECKOUT
,
partNumber
);
}
private
List
<
ChartItem
>
chart
(
Date
fromTime
,
Date
toTime
,
int
type
,
String
partNumber
){
Date
addOneDayToTime
=
DateUtil
.
addOneDayNoTime
(
toTime
);
Criteria
c
=
new
Criteria
().
andOperator
(
Criteria
.
where
(
"updateDate"
).
gte
(
fromTime
),
Criteria
.
where
(
"updateDate"
).
lt
(
addOneDayToTime
)).
and
(
"type"
).
is
(
type
);
c
.
and
(
"status"
).
in
(
OP_STATUS
.
END
.
name
(),
OP_STATUS
.
FINISHED
.
name
());
if
(
Strings
.
isNotBlank
(
partNumber
)){
c
.
and
(
"partNumber"
).
is
(
partNumber
);
}
Aggregation
agg
=
Aggregation
.
newAggregation
(
Aggregation
.
match
(
c
),
Aggregation
.
project
().
and
(
"updateDate"
).
extractDayOfYear
().
as
(
"label"
),
Aggregation
.
group
(
"label"
).
count
().
as
(
"value"
),
Aggregation
.
project
(
"value"
).
and
(
"label"
).
previousOperation
()
);
AggregationResults
<
ChartItem
>
results
=
getMongoTemplate
().
aggregate
(
agg
,
getEntityClass
(),
ChartItem
.
class
);
return
results
.
getMappedResults
();
}
}
}
src/main/resources/messages_en_US.properties
查看文件 @
8ee550e
...
@@ -81,7 +81,7 @@ smfcore.role=Authority
...
@@ -81,7 +81,7 @@ smfcore.role=Authority
smfcore.menuNotExist
=
Menu{0} does not exist
smfcore.menuNotExist
=
Menu{0} does not exist
smfcore.noValidStorage
=
No available bin found in bin list
smfcore.noValidStorage
=
No available bin found in bin list
smfcore.error.barcode.exist
=
[{0}}] is already in {1}}[{2}}]
smfcore.error.barcode.exist
=
[{0}}] is already in {1}}[{2}}]
smfcore.barcodeSetting
=
M
aterial ID
smfcore.barcodeSetting
=
M
A.ID Setting
smfcore.posNotExist
=
Positions do not exist
smfcore.posNotExist
=
Positions do not exist
smfcore.error
=
Error{0}
smfcore.error
=
Error{0}
smfcore.userManager
=
Users
smfcore.userManager
=
Users
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论