Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mes
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ximai
mes
Commits
6b07feb5
Commit
6b07feb5
authored
Nov 18, 2024
by
李驰骋
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
设备看板BUG修复
parent
1e599b00
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
204 additions
and
35 deletions
+204
-35
CalPlanWorkunitMapper.java
.../java/com/ximai/mes/cal/mapper/CalPlanWorkunitMapper.java
+13
-0
KanbanEquipmentController.java
...imai/mes/kanban/controller/KanbanEquipmentController.java
+1
-1
EquipmentStatDto.java
.../com/ximai/mes/kanban/dto/equipment/EquipmentStatDto.java
+29
-4
KanbanEquipmentService.java
.../com/ximai/mes/kanban/service/KanbanEquipmentService.java
+107
-28
ProFeedbackVo.java
.../main/java/com/ximai/mes/pro/domain/vo/ProFeedbackVo.java
+3
-0
WorkunitProcessingDto.java
...ava/com/ximai/mes/pro/dto/task/WorkunitProcessingDto.java
+33
-0
ProTaskWorkunitMapper.java
.../com/ximai/mes/pro/mapper/task/ProTaskWorkunitMapper.java
+8
-0
QcAbnormalReport.java
...c/main/java/com/ximai/mes/qc/domain/QcAbnormalReport.java
+4
-0
QcAbnormalReportServiceImpl.java
...imai/mes/qc/service/impl/QcAbnormalReportServiceImpl.java
+1
-1
QcAbnormalReportMapper.xml
mes/src/main/resources/mapper/qc/QcAbnormalReportMapper.xml
+5
-1
No files found.
mes/src/main/java/com/ximai/mes/cal/mapper/CalPlanWorkunitMapper.java
View file @
6b07feb5
...
@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param;
...
@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.Update
;
import
org.apache.ibatis.annotations.Update
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -91,4 +92,16 @@ public interface CalPlanWorkunitMapper extends BaseMapper<CalPlanWorkunit> {
...
@@ -91,4 +92,16 @@ public interface CalPlanWorkunitMapper extends BaseMapper<CalPlanWorkunit> {
"${ew.customSqlSegment}"
)
"${ew.customSqlSegment}"
)
List
<
CalPlanWorkunit
>
selectListWithSchedule
(
@Param
(
"ew"
)
QueryWrapper
<
CalPlanWorkunit
>
query
);
List
<
CalPlanWorkunit
>
selectListWithSchedule
(
@Param
(
"ew"
)
QueryWrapper
<
CalPlanWorkunit
>
query
);
/**
* 查询某天所有设备排班计划
*
* @param curr 时间
* @return 计划工作单元集合
*/
@Select
(
value
=
"select t1.* from cal_plan_workunit t1 where rest_flag = 0 and (start_date >= #{currDate} and start_date < date_add(#{currDate},INTERVAL 1 day))\n"
+
"or (end_date >= #{currDate} and end_date < date_add(#{currDate},INTERVAL 1 day))"
)
List
<
CalPlanWorkunit
>
selectListByDate
(
@Param
(
"currDate"
)
LocalDateTime
curr
);
}
}
mes/src/main/java/com/ximai/mes/kanban/controller/KanbanEquipmentController.java
View file @
6b07feb5
...
@@ -23,7 +23,7 @@ public class KanbanEquipmentController {
...
@@ -23,7 +23,7 @@ public class KanbanEquipmentController {
@Autowired
@Autowired
KanbanEquipmentService
kanbanEquipmentService
;
KanbanEquipmentService
kanbanEquipmentService
;
@ApiOperation
(
"
当月
设备分布数据"
)
@ApiOperation
(
"设备分布数据"
)
@PostMapping
(
"/currentMonthStat"
)
@PostMapping
(
"/currentMonthStat"
)
public
AjaxResult
<
EquipmentStatDto
>
currentMonthStat
(
@RequestBody
EquipmentQuery
equipmentQuery
)
{
public
AjaxResult
<
EquipmentStatDto
>
currentMonthStat
(
@RequestBody
EquipmentQuery
equipmentQuery
)
{
EquipmentStatDto
rst
=
kanbanEquipmentService
.
currentMonthStat
(
equipmentQuery
);
EquipmentStatDto
rst
=
kanbanEquipmentService
.
currentMonthStat
(
equipmentQuery
);
...
...
mes/src/main/java/com/ximai/mes/kanban/dto/equipment/EquipmentStatDto.java
View file @
6b07feb5
...
@@ -9,16 +9,31 @@ import java.util.Map;
...
@@ -9,16 +9,31 @@ import java.util.Map;
@Data
@Data
public
class
EquipmentStatDto
{
public
class
EquipmentStatDto
{
/**
* 当日该产线所有工作单元的报工工时(分钟)/当日该产线所有工作单元的排班日历(分钟)
*/
@ApiModelProperty
(
"利用率"
)
@ApiModelProperty
(
"利用率"
)
BigDecimal
equipAvailability
;
BigDecimal
equipAvailability
;
/**
* 当前产线的所有工作单元当日报工总和
*/
@ApiModelProperty
(
"总产量"
)
@ApiModelProperty
(
"总产量"
)
BigDecimal
totalOutput
;
BigDecimal
totalOutput
=
BigDecimal
.
ZERO
;
@ApiModelProperty
(
"设备数"
)
@ApiModelProperty
(
"设备数"
)
Integer
equipNum
=
0
;
Integer
equipNum
=
0
;
/**
* 当前产线的所有工作单元当日报工合格率(合格数量/报工数量)
*/
@ApiModelProperty
(
"合格率"
)
@ApiModelProperty
(
"合格率"
)
BigDecimal
qualifiedRatio
;
BigDecimal
qualifiedRatio
=
BigDecimal
.
ZERO
;
/**
* 当前产线的所有工作单元当日为设备故障的异常单(当天)
*/
@ApiModelProperty
(
"异常数"
)
@ApiModelProperty
(
"异常数"
)
Integer
abnormalNum
=
0
;
Integer
abnormalNum
=
0
;
/**
* 当前产线的所有工作单元为设备故障的异常单数(状态不等于关闭和完成)
*/
@ApiModelProperty
(
"待处理数"
)
@ApiModelProperty
(
"待处理数"
)
Integer
unProcessNum
=
0
;
Integer
unProcessNum
=
0
;
@ApiModelProperty
(
"设备列表"
)
@ApiModelProperty
(
"设备列表"
)
...
@@ -34,10 +49,20 @@ public class EquipmentStatDto {
...
@@ -34,10 +49,20 @@ public class EquipmentStatDto {
String
equipmentNo
;
String
equipmentNo
;
@ApiModelProperty
(
"设备名称"
)
@ApiModelProperty
(
"设备名称"
)
String
equipmentName
;
String
equipmentName
;
/**
* 当日该工作单元的报工数量
*/
@ApiModelProperty
(
"日产出"
)
@ApiModelProperty
(
"日产出"
)
BigDecimal
output
;
BigDecimal
output
=
BigDecimal
.
ZERO
;
/**
* 当日该工作单元的报工工时(分钟)/当日该工作单元的排班日历(分钟)*100%
*/
@ApiModelProperty
(
"产出率"
)
@ApiModelProperty
(
"产出率"
)
BigDecimal
outputRatio
;
BigDecimal
outputRatio
=
BigDecimal
.
ZERO
;
/**
* 0:加工中、1:未加工,2:停工
* 工作单元的派工任务有为已开始则显示为绿色,如果异常停工则显示为红色,其他状态显示为灰色
*/
@ApiModelProperty
(
"状态,0:加工中、1:未加工,2:停工"
)
@ApiModelProperty
(
"状态,0:加工中、1:未加工,2:停工"
)
int
state
;
int
state
;
}
}
...
...
mes/src/main/java/com/ximai/mes/kanban/service/KanbanEquipmentService.java
View file @
6b07feb5
package
com
.
ximai
.
mes
.
kanban
.
service
;
package
com
.
ximai
.
mes
.
kanban
.
service
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.map.MapUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.ximai.common.utils.data.StringUtils
;
import
com.ximai.common.utils.data.StringUtils
;
import
com.ximai.mes.cal.domain.CalPlanWorkunit
;
import
com.ximai.mes.cal.mapper.CalPlanWorkunitMapper
;
import
com.ximai.mes.constant.QcAbnormalTypeEnum
;
import
com.ximai.mes.constant.QcAbnormalTypeEnum
;
import
com.ximai.mes.constant.TaskWorkunitStatusEnum
;
import
com.ximai.mes.kanban.dto.abnormal.AbnormalMonthStatDto
;
import
com.ximai.mes.kanban.dto.equipment.EquipmentQuery
;
import
com.ximai.mes.kanban.dto.equipment.EquipmentQuery
;
import
com.ximai.mes.kanban.dto.equipment.EquipmentStatDto
;
import
com.ximai.mes.kanban.dto.equipment.EquipmentStatDto
;
import
com.ximai.mes.kanban.dto.task.TaskStatDto
;
import
com.ximai.mes.md.domain.MdWorkunit
;
import
com.ximai.mes.md.domain.MdWorkunit
;
import
com.ximai.mes.md.service.IMdWorkunitService
;
import
com.ximai.mes.md.service.IMdWorkunitService
;
import
com.ximai.mes.md.vo.MdWorkunitVo
;
import
com.ximai.mes.pro.domain.ProFeedback
;
import
com.ximai.mes.pro.domain.ProFeedback
;
import
com.ximai.mes.pro.domain.task.ProTaskWorkunit
;
import
com.ximai.mes.pro.domain.vo.ProFeedbackVo
;
import
com.ximai.mes.pro.dto.ProFeedbackDto
;
import
com.ximai.mes.pro.dto.task.WorkunitProcessingDto
;
import
com.ximai.mes.pro.dto.task.ProTaskWorkunitDto
;
import
com.ximai.mes.pro.mapper.task.ProTaskWorkunitMapper
;
import
com.ximai.mes.pro.mapper.task.ProTaskWorkunitMapper
;
import
com.ximai.mes.pro.service.IProFeedbackService
;
import
com.ximai.mes.pro.service.IProFeedbackService
;
import
com.ximai.mes.pro.service.task.IProTaskWorkunitService
;
import
com.ximai.mes.pro.service.task.IProTaskWorkunitService
;
import
com.ximai.mes.qc.domain.QcAbnormalReport
;
import
com.ximai.mes.qc.domain.QcAbnormalReport
;
import
com.ximai.mes.qc.dto.QcAbnormalReportDto
;
import
com.ximai.mes.qc.dto.QcAbnormalReportDto
;
import
com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum
;
import
com.ximai.mes.qc.dto.QcAbnormalReportStatusEnum
;
import
com.ximai.mes.qc.mapper.QcAbnormalReportMapper
;
import
com.ximai.mes.qc.service.IQcAbnormalReportService
;
import
com.ximai.mes.qc.service.IQcAbnormalReportService
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.LocalTime
;
import
java.util.*
;
import
java.util.*
;
...
@@ -41,21 +38,24 @@ import java.util.stream.Collectors;
...
@@ -41,21 +38,24 @@ import java.util.stream.Collectors;
@Service
@Service
public
class
KanbanEquipmentService
{
public
class
KanbanEquipmentService
{
@Autowired
private
IProTaskWorkunitService
taskWorkunitService
;
@Autowired
@Autowired
private
IProFeedbackService
feedbackService
;
private
IProFeedbackService
feedbackService
;
@Autowired
@Autowired
private
ProTaskWorkunitMapper
taskWorkunitMapper
;
private
ProTaskWorkunitMapper
taskWorkunitMapper
;
@Autowired
@Autowired
private
CalPlanWorkunitMapper
calPlanWorkunitMapper
;
@Autowired
private
IMdWorkunitService
workunitService
;
private
IMdWorkunitService
workunitService
;
@Autowired
@Autowired
IQcAbnormalReportService
abnormalReportService
;
IQcAbnormalReportService
abnormalReportService
;
@Autowired
QcAbnormalReportMapper
abnormalReportMapper
;
@ApiOperation
(
"设备统计"
)
@ApiOperation
(
"设备统计"
)
@PostMapping
(
"/currentMonthStat"
)
@PostMapping
(
"/currentMonthStat"
)
public
EquipmentStatDto
currentMonthStat
(
EquipmentQuery
equipmentQuery
)
{
public
EquipmentStatDto
currentMonthStat
(
EquipmentQuery
equipmentQuery
)
{
EquipmentStatDto
rst
=
new
EquipmentStatDto
();
EquipmentStatDto
rst
=
new
EquipmentStatDto
();
LocalDateTime
currDate
=
LocalDateTime
.
now
().
with
(
LocalTime
.
MIN
);
//查询所有设备
//查询所有设备
List
<
MdWorkunit
>
list
=
workunitService
.
selectListByQw
(
new
QueryWrapper
<
MdWorkunit
>().
eq
(
"t1.enable_flag"
,
"Y"
)
List
<
MdWorkunit
>
list
=
workunitService
.
selectListByQw
(
new
QueryWrapper
<
MdWorkunit
>().
eq
(
"t1.enable_flag"
,
"Y"
)
.
orderByAsc
(
"t1.serial"
,
"t1.create_time"
));
.
orderByAsc
(
"t1.serial"
,
"t1.create_time"
));
...
@@ -63,40 +63,73 @@ public class KanbanEquipmentService {
...
@@ -63,40 +63,73 @@ public class KanbanEquipmentService {
s
.
setLineName
(
org
.
apache
.
commons
.
lang
.
StringUtils
.
defaultString
(
s
.
getLineName
(),
"未指定"
));
s
.
setLineName
(
org
.
apache
.
commons
.
lang
.
StringUtils
.
defaultString
(
s
.
getLineName
(),
"未指定"
));
return
s
;
return
s
;
}).
collect
(
Collectors
.
groupingBy
(
s
->
s
.
getLineName
()));
}).
collect
(
Collectors
.
groupingBy
(
s
->
s
.
getLineName
()));
List
<
MdWorkunit
>
tempList
=
n
ull
;
List
<
MdWorkunit
>
tempList
=
n
ew
ArrayList
<>()
;
if
(
StringUtils
.
isNotEmpty
(
equipmentQuery
.
getLineName
())){
if
(
StringUtils
.
isNotEmpty
(
equipmentQuery
.
getLineName
())){
tempList
=
equipMap
.
get
(
equipmentQuery
.
getLineName
(
));
tempList
.
addAll
(
equipMap
.
get
(
equipmentQuery
.
getLineName
()
));
}
else
{
}
else
{
tempList
=
list
;
tempList
.
addAll
(
list
)
;
}
}
Map
<
String
,
List
<
EquipmentStatDto
.
EquipmentInfo
>>
equipInfoMap
=
this
.
getEquipmentInfo
(
tempList
);
//查询当日报工
List
<
ProFeedbackVo
>
feedbackList
=
feedbackService
.
queryProFeedbackListJoinTaskWorkUnit
(
new
QueryWrapper
<
ProFeedback
>().
gt
(
"f.feedback_time"
,
currDate
));
//查询当日排班日历
List
<
CalPlanWorkunit
>
calPlanWorkunitList
=
calPlanWorkunitMapper
.
selectListByDate
(
currDate
);
//派工任务
//加工中设备
List
<
WorkunitProcessingDto
>
workunitProcessingList
=
taskWorkunitMapper
.
selectWorkunitProcessing
();
Map
<
String
,
List
<
EquipmentStatDto
.
EquipmentInfo
>>
equipInfoMap
=
this
.
getEquipmentInfo
(
tempList
,
calPlanWorkunitList
,
feedbackList
,
workunitProcessingList
);
rst
.
setEquipMap
(
MapUtil
.
sort
(
equipInfoMap
));
rst
.
setEquipMap
(
MapUtil
.
sort
(
equipInfoMap
));
//查询当日设备报异常
//查询当日设备报异常
LocalDateTime
currDate
=
LocalDateTime
.
now
().
with
(
LocalTime
.
MIN
);
QueryWrapper
<
QcAbnormalReport
>
query
=
new
QueryWrapper
<>();
QueryWrapper
<
QcAbnormalReport
>
query
=
new
QueryWrapper
<>();
query
.
ge
(
"t1.create_time"
,
currDate
);
query
.
ge
(
"t1.create_time"
,
currDate
);
query
.
eq
(
"t1.abnormal_type"
,
QcAbnormalTypeEnum
.
DEVI
.
getType
());
query
.
eq
(
"t1.abnormal_type"
,
QcAbnormalTypeEnum
.
DEVI
.
getType
());
List
<
QcAbnormalReportDto
>
abnormalList
=
abnormalReportService
.
selectQcAbnormalReport
JoinTaskWorkunit
DtoList
(
query
);
List
<
QcAbnormalReportDto
>
abnormalList
=
abnormalReportService
.
selectQcAbnormalReportDtoList
(
query
);
List
<
EquipmentStatDto
.
AbnormalInfo
>
abnormalInfoList
=
this
.
getAbnormalInfo
(
tempList
,
abnormalList
);
List
<
EquipmentStatDto
.
AbnormalInfo
>
abnormalInfoList
=
this
.
getAbnormalInfo
(
tempList
,
abnormalList
);
rst
.
setAbnormalInfoList
(
abnormalInfoList
);
rst
.
setAbnormalInfoList
(
abnormalInfoList
);
rst
.
setEquipNum
(
tempList
.
size
());
//总设备
rst
.
setEquipNum
(
tempList
.
size
());
//总设备
rst
.
setQualifiedRatio
(
new
BigDecimal
(
"55"
));
long
ct
=
abnormalList
.
stream
().
filter
(
s
->
StringUtils
.
isNotEmpty
(
s
.
getWorkunitId
())&&
tempList
.
stream
().
anyMatch
(
s2
->
s
.
getWorkunitId
().
equals
(
s2
.
getWorkunitId
()))).
count
();
rst
.
setEquipAvailability
(
new
BigDecimal
(
"65"
));
//利用率
rst
.
setAbnormalNum
((
int
)
ct
);
//异常数
rst
.
setTotalOutput
(
new
BigDecimal
(
"2000"
));
//总产量
QueryWrapper
<
QcAbnormalReport
>
abnormalQuery
=
new
QueryWrapper
<
QcAbnormalReport
>()
rst
.
setAbnormalNum
(
abnormalList
.
size
());
//异常数
.
in
(
"abnormal_status"
,
new
Object
[]{
QcAbnormalReportStatusEnum
.
SUBMIT
.
getStatus
(),
QcAbnormalReportStatusEnum
.
NOT
.
getStatus
()})
rst
.
setUnProcessNum
(
5
);
//历史待处理数
.
eq
(
"abnormal_type"
,
com
.
ximai
.
mes
.
qc
.
dto
.
QcAbnormalTypeEnum
.
DEVI
.
getType
());
if
(
StringUtils
.
isNotEmpty
(
equipmentQuery
.
getLineName
())){
abnormalQuery
.
in
(
"workunit_id"
,
tempList
.
stream
().
map
(
s
->
s
.
getWorkunitId
()).
toArray
());
}
Integer
unprocessNum
=
abnormalReportMapper
.
selectCount
(
abnormalQuery
);
rst
.
setUnProcessNum
(
unprocessNum
);
//历史待处理数
this
.
statIndexes
(
rst
,
tempList
,
feedbackList
,
calPlanWorkunitList
);
return
rst
;
return
rst
;
}
}
private
Map
<
String
,
List
<
EquipmentStatDto
.
EquipmentInfo
>>
getEquipmentInfo
(
List
<
MdWorkunit
>
list
){
private
Map
<
String
,
List
<
EquipmentStatDto
.
EquipmentInfo
>>
getEquipmentInfo
(
List
<
MdWorkunit
>
list
,
List
<
CalPlanWorkunit
>
calPlanWorkunitList
,
List
<
ProFeedbackVo
>
feedbackList
,
List
<
WorkunitProcessingDto
>
workunitProcessingList
){
Map
<
Long
,
WorkunitProcessingDto
>
workunitProcessingMap
=
workunitProcessingList
.
stream
().
collect
(
Collectors
.
toMap
(
s
->
s
.
getWorkunitId
(),
s
->
s
));
List
<
EquipmentStatDto
.
EquipmentInfo
>
rst
=
new
ArrayList
<>();
List
<
EquipmentStatDto
.
EquipmentInfo
>
rst
=
new
ArrayList
<>();
list
.
forEach
(
s
->{
list
.
forEach
(
s
->{
EquipmentStatDto
.
EquipmentInfo
info
=
new
EquipmentStatDto
.
EquipmentInfo
();
EquipmentStatDto
.
EquipmentInfo
info
=
new
EquipmentStatDto
.
EquipmentInfo
();
info
.
setEquipmentNo
(
s
.
getWorkunitCode
());
info
.
setEquipmentNo
(
s
.
getWorkunitCode
());
info
.
setEquipmentName
(
s
.
getWorkunitName
());
info
.
setEquipmentName
(
s
.
getWorkunitName
());
info
.
setOutputRatio
(
new
BigDecimal
(
"15"
));
BigDecimal
calTime
=
this
.
getCalTime
(
calPlanWorkunitList
,
s
);
info
.
setOutput
(
new
BigDecimal
(
new
Random
().
nextInt
(
100
)));
AtomicReference
<
BigDecimal
>
machineTime
=
new
AtomicReference
<
BigDecimal
>(
BigDecimal
.
ZERO
);
info
.
setState
(
new
Random
().
nextInt
(
3
));
AtomicReference
<
BigDecimal
>
output
=
new
AtomicReference
<
BigDecimal
>(
BigDecimal
.
ZERO
);
feedbackList
.
stream
().
filter
(
s2
->
s2
.
getWorkunitId
().
equals
(
s
.
getWorkunitId
())).
forEach
(
s2
->{
if
(
StringUtils
.
isNotEmpty
(
s2
.
getMachineTime
())){
machineTime
.
set
(
machineTime
.
get
().
add
(
new
BigDecimal
(
s2
.
getMachineTime
())));
}
output
.
set
(
output
.
get
().
add
(
s2
.
getQuantityQualify
().
add
(
s2
.
getQuantityUnqualify
())));
});
if
(
calTime
.
compareTo
(
BigDecimal
.
ZERO
)>
0
){
info
.
setOutputRatio
(
machineTime
.
get
().
divide
(
calTime
,
3
,
BigDecimal
.
ROUND_DOWN
).
multiply
(
new
BigDecimal
(
"100"
)));
//利用率
}
info
.
setOutput
(
output
.
get
());
//日产出
if
(
"Y"
.
equals
(
s
.
getFaultFlag
())){
info
.
setState
(
2
);
//状态
}
else
if
(
workunitProcessingMap
.
containsKey
(
s
.
getWorkunitId
())){
info
.
setState
(
0
);
}
else
{
info
.
setState
(
1
);
}
info
.
setLineName
(
s
.
getLineName
());
info
.
setLineName
(
s
.
getLineName
());
rst
.
add
(
info
);
rst
.
add
(
info
);
});
});
...
@@ -118,10 +151,56 @@ public class KanbanEquipmentService {
...
@@ -118,10 +151,56 @@ public class KanbanEquipmentService {
temp
.
setCause
(
s
.
getAbnormalReason
());
temp
.
setCause
(
s
.
getAbnormalReason
());
rst
.
add
(
temp
);
rst
.
add
(
temp
);
});
});
}
}
});
});
return
rst
;
return
rst
;
}
}
private
void
statIndexes
(
EquipmentStatDto
rst
,
List
<
MdWorkunit
>
equipList
,
List
<
ProFeedbackVo
>
feedbackList
,
List
<
CalPlanWorkunit
>
calPlanWorkunitList
){
AtomicReference
<
BigDecimal
>
qualifiedRatioNumerator
=
new
AtomicReference
<>(
BigDecimal
.
ZERO
);
//合格数
AtomicReference
<
BigDecimal
>
machineTime
=
new
AtomicReference
<>(
BigDecimal
.
ZERO
);
//报工工时
for
(
MdWorkunit
mdWorkunit
:
equipList
)
{
feedbackList
.
stream
().
filter
(
s
->
s
.
getWorkunitId
().
equals
(
mdWorkunit
.
getWorkunitId
())).
forEach
(
s
->{
rst
.
setTotalOutput
(
rst
.
getTotalOutput
().
add
(
s
.
getQuantityQualify
().
add
(
s
.
getQuantityUnqualify
())));
qualifiedRatioNumerator
.
set
(
qualifiedRatioNumerator
.
get
().
add
(
s
.
getQuantityQualify
()));
if
(
StringUtils
.
isNotEmpty
(
s
.
getMachineTime
())){
machineTime
.
set
(
machineTime
.
get
().
add
(
new
BigDecimal
(
s
.
getMachineTime
())));
}
});
}
AtomicReference
<
BigDecimal
>
calTime
=
new
AtomicReference
<>(
BigDecimal
.
ZERO
);
//排班工时
for
(
MdWorkunit
mdWorkunit
:
equipList
)
{
calTime
.
set
(
calTime
.
get
().
add
(
this
.
getCalTime
(
calPlanWorkunitList
,
mdWorkunit
)));
}
if
(
rst
.
getTotalOutput
().
compareTo
(
BigDecimal
.
ZERO
)>
0
){
rst
.
setQualifiedRatio
(
qualifiedRatioNumerator
.
get
().
divide
(
rst
.
getTotalOutput
(),
2
,
BigDecimal
.
ROUND_DOWN
).
multiply
(
new
BigDecimal
(
"100"
)));
//合格率
}
if
(
calTime
.
get
().
compareTo
(
BigDecimal
.
ZERO
)>
0
){
rst
.
setEquipAvailability
(
machineTime
.
get
().
divide
(
calTime
.
get
(),
2
,
BigDecimal
.
ROUND_DOWN
).
multiply
(
new
BigDecimal
(
"100"
)));
//利用率
}
}
private
BigDecimal
getCalTime
(
List
<
CalPlanWorkunit
>
calPlanWorkunitList
,
MdWorkunit
mdWorkunit
){
AtomicReference
<
BigDecimal
>
calTime
=
new
AtomicReference
<>(
BigDecimal
.
ZERO
);
//排班工时
LocalDateTime
currDate
=
LocalDateTime
.
now
().
with
(
LocalTime
.
MIN
);
LocalDateTime
morrowDate
=
LocalDateTime
.
now
().
plusDays
(
1
).
with
(
LocalTime
.
MIN
);
calPlanWorkunitList
.
stream
().
filter
(
s
->
s
.
getWorkunitId
().
equals
(
mdWorkunit
.
getWorkunitId
())).
forEach
(
s
->{
LocalDateTime
tempStart
=
DateUtil
.
toLocalDateTime
(
s
.
getStartDate
());
LocalDateTime
tempEnd
=
DateUtil
.
toLocalDateTime
(
s
.
getEndDate
());
//获得排班结束与开始间隔
//如果开始时间大于当天,使用当天
if
(
tempStart
.
compareTo
(
currDate
)<
0
){
tempStart
=
currDate
;
}
//如果结束时间大于当天+1,使用当天+1
if
(
tempEnd
.
compareTo
(
morrowDate
)>
0
){
tempEnd
=
morrowDate
;
}
long
minutes
=
Duration
.
between
(
tempStart
,
tempEnd
).
toMinutes
();
calTime
.
set
(
calTime
.
get
().
add
(
new
BigDecimal
(
minutes
)));
});
return
calTime
.
get
();
}
}
}
mes/src/main/java/com/ximai/mes/pro/domain/vo/ProFeedbackVo.java
View file @
6b07feb5
...
@@ -62,6 +62,9 @@ public class ProFeedbackVo {
...
@@ -62,6 +62,9 @@ public class ProFeedbackVo {
@Excel
(
name
=
"工序编码"
)
@Excel
(
name
=
"工序编码"
)
private
String
processCode
;
private
String
processCode
;
@ApiModelProperty
(
"加工工时"
)
private
String
machineTime
;
/**
/**
* 工序名称
* 工序名称
*/
*/
...
...
mes/src/main/java/com/ximai/mes/pro/dto/task/WorkunitProcessingDto.java
0 → 100644
View file @
6b07feb5
package
com
.
ximai
.
mes
.
pro
.
dto
.
task
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.ximai.common.annotation.Excel
;
import
com.ximai.common.core.domain.BaseEntity
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
/**
* 加工中设备
*
* @author chicheng.li
* @date 2024-11-07
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
WorkunitProcessingDto
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"工作单元ID"
)
private
Long
workunitId
;
@ApiModelProperty
(
"数量"
)
private
Integer
ct
;
}
mes/src/main/java/com/ximai/mes/pro/mapper/task/ProTaskWorkunitMapper.java
View file @
6b07feb5
...
@@ -6,6 +6,7 @@ import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
...
@@ -6,6 +6,7 @@ import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import
com.ximai.mes.pro.domain.task.ProTask
;
import
com.ximai.mes.pro.domain.task.ProTask
;
import
com.ximai.mes.pro.domain.task.ProTaskWorkunit
;
import
com.ximai.mes.pro.domain.task.ProTaskWorkunit
;
import
com.ximai.mes.pro.dto.task.ProTaskWorkunitDto
;
import
com.ximai.mes.pro.dto.task.ProTaskWorkunitDto
;
import
com.ximai.mes.pro.dto.task.WorkunitProcessingDto
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
org.apache.ibatis.annotations.Select
;
...
@@ -180,4 +181,11 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> {
...
@@ -180,4 +181,11 @@ public interface ProTaskWorkunitMapper extends BaseMapper<ProTaskWorkunit> {
" ${ew.customSqlSegment} "
)
" ${ew.customSqlSegment} "
)
List
<
ProWorkorder
>
selectWorkorderTaskByQw
(
@Param
(
"ew"
)
QueryWrapper
<
ProTaskWorkunit
>
query
);
List
<
ProWorkorder
>
selectWorkorderTaskByQw
(
@Param
(
"ew"
)
QueryWrapper
<
ProTaskWorkunit
>
query
);
/**
* 统计设备进行中工单数量
* @return
*/
@Select
(
value
=
"select workunit_id,count(*) ct from pro_task_workunit t1 where t1.`status` = 'BEGINNING' group by workunit_id"
)
List
<
WorkunitProcessingDto
>
selectWorkunitProcessing
();
}
}
mes/src/main/java/com/ximai/mes/qc/domain/QcAbnormalReport.java
View file @
6b07feb5
...
@@ -2,6 +2,7 @@ package com.ximai.mes.qc.domain;
...
@@ -2,6 +2,7 @@ package com.ximai.mes.qc.domain;
import
java.util.Date
;
import
java.util.Date
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
com.ximai.common.annotation.Excel
;
import
com.ximai.common.annotation.Excel
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableId
;
...
@@ -79,6 +80,9 @@ QcAbnormalReport extends BaseEntity
...
@@ -79,6 +80,9 @@ QcAbnormalReport extends BaseEntity
@Excel
(
name
=
"任务派工ID"
)
@Excel
(
name
=
"任务派工ID"
)
private
Long
taskWorkunitId
;
private
Long
taskWorkunitId
;
@ApiModelProperty
(
"作业单元D"
)
private
Long
workunitId
;
//开始时间
//开始时间
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@Excel
(
name
=
"开始时间"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd"
)
@Excel
(
name
=
"开始时间"
,
width
=
30
,
dateFormat
=
"yyyy-MM-dd"
)
...
...
mes/src/main/java/com/ximai/mes/qc/service/impl/QcAbnormalReportServiceImpl.java
View file @
6b07feb5
...
@@ -106,7 +106,7 @@ public class QcAbnormalReportServiceImpl implements IQcAbnormalReportService {
...
@@ -106,7 +106,7 @@ public class QcAbnormalReportServiceImpl implements IQcAbnormalReportService {
@Override
@Override
public
int
insertObj
(
QcAbnormalReport
qcAbnormalReport
)
{
public
int
insertObj
(
QcAbnormalReport
qcAbnormalReport
)
{
ProTaskWorkunit
proTaskWorkunit
=
proTaskWorkunitService
.
selectProTaskWorkunitByTaskWorkunitId
(
qcAbnormalReport
.
getTaskWorkunitId
());
ProTaskWorkunit
proTaskWorkunit
=
proTaskWorkunitService
.
selectProTaskWorkunitByTaskWorkunitId
(
qcAbnormalReport
.
getTaskWorkunitId
());
qcAbnormalReport
.
setWorkunitId
(
proTaskWorkunit
.
getWorkunitId
());
//根据车间异常原因修改工作单元是否故障
//根据车间异常原因修改工作单元是否故障
if
(
qcAbnormalReport
.
getAbnormalType
().
equals
(
QcAbnormalTypeEnum
.
DEVI
.
getType
()))
{
if
(
qcAbnormalReport
.
getAbnormalType
().
equals
(
QcAbnormalTypeEnum
.
DEVI
.
getType
()))
{
MdWorkunit
mdWorkunit
=
new
MdWorkunit
();
MdWorkunit
mdWorkunit
=
new
MdWorkunit
();
...
...
mes/src/main/resources/mapper/qc/QcAbnormalReportMapper.xml
View file @
6b07feb5
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
<result
property=
"batchNumber"
column=
"batch_number"
/>
<result
property=
"batchNumber"
column=
"batch_number"
/>
<result
property=
"processId"
column=
"process_id"
/>
<result
property=
"processId"
column=
"process_id"
/>
<result
property=
"taskId"
column=
"task_id"
/>
<result
property=
"taskId"
column=
"task_id"
/>
<result
property=
"workunitId"
column=
"workunit_id"
/>
<result
property=
"taskWorkunitId"
column=
"task_workunit_id"
/>
<result
property=
"taskWorkunitId"
column=
"task_workunit_id"
/>
<result
property=
"processCode"
column=
"process_code"
/>
<result
property=
"processCode"
column=
"process_code"
/>
<result
property=
"processName"
column=
"process_name"
/>
<result
property=
"processName"
column=
"process_name"
/>
...
@@ -32,7 +33,7 @@
...
@@ -32,7 +33,7 @@
</resultMap>
</resultMap>
<sql
id=
"selectQcAbnormalReportVo"
>
<sql
id=
"selectQcAbnormalReportVo"
>
select abnormal_report_id, batch_number, process_id, task_id, task_workunit_id, process_code,
select abnormal_report_id, batch_number, process_id, task_id, task_workunit_id,
workunit_id,
process_code,
process_name, workstation_id, workstation_code, workstation_name, abnormal_type,
process_name, workstation_id, workstation_code, workstation_name, abnormal_type,
abnormal_reason, abnormal_time, abnormal_status, create_by, create_time, update_by,
abnormal_reason, abnormal_time, abnormal_status, create_by, create_time, update_by,
update_time, abnormal_number, start_time, start_by, end_time, end_by, time_consuming,remarks
update_time, abnormal_number, start_time, start_by, end_time, end_by, time_consuming,remarks
...
@@ -73,6 +74,7 @@
...
@@ -73,6 +74,7 @@
<if
test=
"batchNumber != null"
>
batch_number,
</if>
<if
test=
"batchNumber != null"
>
batch_number,
</if>
<if
test=
"processId != null"
>
process_id,
</if>
<if
test=
"processId != null"
>
process_id,
</if>
<if
test=
"taskId != null"
>
task_id,
</if>
<if
test=
"taskId != null"
>
task_id,
</if>
<if
test=
"workunitId != null"
>
workunit_id,
</if>
<if
test=
"taskWorkunitId != null"
>
task_workunit_id,
</if>
<if
test=
"taskWorkunitId != null"
>
task_workunit_id,
</if>
<if
test=
"processCode != null"
>
process_code,
</if>
<if
test=
"processCode != null"
>
process_code,
</if>
<if
test=
"processName != null"
>
process_name,
</if>
<if
test=
"processName != null"
>
process_name,
</if>
...
@@ -93,6 +95,7 @@
...
@@ -93,6 +95,7 @@
<if
test=
"batchNumber != null"
>
#{batchNumber},
</if>
<if
test=
"batchNumber != null"
>
#{batchNumber},
</if>
<if
test=
"processId != null"
>
#{processId},
</if>
<if
test=
"processId != null"
>
#{processId},
</if>
<if
test=
"taskId != null"
>
#{taskId},
</if>
<if
test=
"taskId != null"
>
#{taskId},
</if>
<if
test=
"workunitId != null"
>
#{workunitId},
</if>
<if
test=
"taskWorkunitId != null"
>
#{taskWorkunitId},
</if>
<if
test=
"taskWorkunitId != null"
>
#{taskWorkunitId},
</if>
<if
test=
"processCode != null"
>
#{processCode},
</if>
<if
test=
"processCode != null"
>
#{processCode},
</if>
<if
test=
"processName != null"
>
#{processName},
</if>
<if
test=
"processName != null"
>
#{processName},
</if>
...
@@ -118,6 +121,7 @@
...
@@ -118,6 +121,7 @@
<if
test=
"batchNumber != null"
>
batch_number = #{batchNumber},
</if>
<if
test=
"batchNumber != null"
>
batch_number = #{batchNumber},
</if>
<if
test=
"processId != null"
>
process_id = #{processId},
</if>
<if
test=
"processId != null"
>
process_id = #{processId},
</if>
<if
test=
"taskId != null"
>
task_id = #{taskId},
</if>
<if
test=
"taskId != null"
>
task_id = #{taskId},
</if>
<if
test=
"workunitId != null"
>
workunit_id = #{workunitId},
</if>
<if
test=
"taskWorkunitId != null"
>
task_workunit_id = #{taskWorkunitId},
</if>
<if
test=
"taskWorkunitId != null"
>
task_workunit_id = #{taskWorkunitId},
</if>
<if
test=
"processCode != null"
>
process_code = #{processCode},
</if>
<if
test=
"processCode != null"
>
process_code = #{processCode},
</if>
<if
test=
"processName != null"
>
process_name = #{processName},
</if>
<if
test=
"processName != null"
>
process_name = #{processName},
</if>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment