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
532217db
Commit
532217db
authored
Jun 06, 2025
by
李驰骋
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
作业端生产任务查询优化(去掉所有循环子查询)
同步工单加上审核码要求
parent
0583611c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
29 additions
and
99 deletions
+29
-99
ProTask.java
mes/src/main/java/com/ximai/mes/pro/domain/task/ProTask.java
+7
-1
ProTaskMapper.java
...ain/java/com/ximai/mes/pro/mapper/task/ProTaskMapper.java
+3
-1
ProWorkorderServiceImpl.java
...ro/service/impl/proWorkOrder/ProWorkorderServiceImpl.java
+2
-0
ProTaskServiceImpl.java
...m/ximai/mes/pro/service/impl/task/ProTaskServiceImpl.java
+17
-97
No files found.
mes/src/main/java/com/ximai/mes/pro/domain/task/ProTask.java
View file @
532217db
...
...
@@ -2,6 +2,7 @@ package com.ximai.mes.pro.domain.task;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.ximai.common.annotation.Excel
;
import
com.ximai.common.core.domain.BaseEntity
;
import
com.ximai.mes.constant.TaskStatusEnum
;
...
...
@@ -11,7 +12,6 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Collections
;
...
...
@@ -321,6 +321,12 @@ public class ProTask extends BaseEntity {
private
Boolean
surpassState
;
@TableField
(
exist
=
false
)
private
String
processRemark
;
@JsonIgnore
@TableField
(
exist
=
false
)
private
String
productCode
;
@TableField
(
exist
=
false
)
@JsonIgnore
private
String
productName
;
public
String
getStatusName
()
{
return
TaskStatusEnum
.
getStatusCn
(
this
.
getStatus
());
}
...
...
mes/src/main/java/com/ximai/mes/pro/mapper/task/ProTaskMapper.java
View file @
532217db
...
...
@@ -158,12 +158,14 @@ public interface ProTaskMapper extends BaseMapper<ProTask> {
"\t, ptw.task_workunit_id, ptw.quantity, t.quantity_wait, ptw.quantity_produced, ptw.quantity_changed\n"
+
"\t, t.client_id, t.client_code, t.client_name, t.client_nick, t.is_last_process, ptw.schedule_start_date\n"
+
"\t, t.duration, ptw.schedule_end_date, t.color_code, t.request_date, t.remark\n"
+
"\t, t.attr1, t.attr2, t.attr3, t.attr4, t.create_by\n"
+
"\t, t.attr1, t.attr2, t.attr3, t.attr4, t.create_by
,ptwo.workorder_id,wo.product_code,wo.product_name
\n"
+
"\t, t.create_time, t.update_by, t.update_time, ptw.STATUS,ptw.task_type, ptw.quantity_qualify\n"
+
"\t, ptw.quantity_unqualify, mw.workunit_id, mw.workunit_code, mw.workunit_name, t.arrange_code, proc.is_package, proc.is_serial_report\n"
+
"\t, (case ptw.STATUS when 'BEGINNING' then 1 when 'PAUSE' then 2 when 'ERROR_STOP' then 3 when 'PREPARE' then 4 end) statusIndex \n"
+
"from pro_task t\n"
+
"\tleft join pro_task_workunit ptw on ptw.task_id = t.task_id\n"
+
"\tleft join pro_task_workorder ptwo on ptwo.task_id = t.task_id\n"
+
"\tleft join pro_workorder wo on wo.workorder_id = ptwo.workorder_id "
+
"\tleft join pro_process proc on proc.process_id = t.process_id\n"
+
"\tleft join md_workunit mw on ptw.workunit_id = mw.workunit_id "
+
" ${ew.customSqlSegment}"
)
...
...
mes/src/main/java/com/ximai/mes/pro/service/impl/proWorkOrder/ProWorkorderServiceImpl.java
View file @
532217db
...
...
@@ -1689,6 +1689,7 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
workorderErpQuery
.
setSort
(
sort
);
workorderErpQuery
.
setGtEqCreateDate
(
maxErpCreateTime
);
workorderErpQuery
.
setCurrent
(
1
);
workorderErpQuery
.
setVerifyStatus
(
"Y"
);
workorderErpQuery
.
setPageSize
(
1000
);
//每次抓取1000行
List
<
ProWorkorderErpDto
>
list
=
erpService
.
getWorkorderList
(
workorderErpQuery
).
getData
();
QueryWrapper
<
MdItem
>
itemQuery
=
new
QueryWrapper
<>();
...
...
@@ -1746,6 +1747,7 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
}};
workorderErpQuery
.
setSort
(
sort
);
workorderErpQuery
.
setNeSyncMark
(
"Y"
);
workorderErpQuery
.
setVerifyStatus
(
"Y"
);
workorderErpQuery
.
setCurrent
(
1
);
workorderErpQuery
.
setPageSize
(
1000
);
//每次抓取1000行
List
<
ProWorkorderErpDto
>
list
=
erpService
.
getWorkorderList
(
workorderErpQuery
).
getData
();
...
...
mes/src/main/java/com/ximai/mes/pro/service/impl/task/ProTaskServiceImpl.java
View file @
532217db
...
...
@@ -853,7 +853,8 @@ public class ProTaskServiceImpl implements IProTaskService {
}
//本次合格数和不合格数总和大于可报工数目 与 已报工数目已经超过了排产数量
if
((
feedbackQualityDouConst
+
fuantityUnqualify
.
doubleValue
())>=
task
.
getQuantityWait
().
doubleValue
()
&&
task
.
getQuantity
().
doubleValue
()
<=
(
execQuantityQualifySumConst
+
feedbackQualityDouConst
+
fuantityUnqualify
.
doubleValue
()))
{
if
((
feedbackQualityDouConst
+
fuantityUnqualify
.
doubleValue
())>=
task
.
getQuantityWait
().
doubleValue
()
&&
task
.
getQuantity
().
doubleValue
()
<=
(
execQuantityQualifySumConst
+
feedbackQualityDouConst
+
fuantityUnqualify
.
doubleValue
()))
{
//记录实际完工时间
taskWorkunit
.
setActualEndDate
(
Calendar
.
getInstance
().
getTime
());
taskWorkunit
.
setStatus
(
FINISHED
.
getStatus
());
...
...
@@ -1383,16 +1384,6 @@ public class ProTaskServiceImpl implements IProTaskService {
public
List
<
ProTask
>
getTaskList
(
ProTaskQuery
proTask
)
{
ProTaskQuery
proTaskQuery
=
new
ProTaskQuery
();
BeanUtils
.
copyProperties
(
proTask
,
proTaskQuery
);
//判断前端传来是编号还是工单
if
(
StringUtils
.
isNotEmpty
(
proTask
.
getArrangeCode
()))
{
if
(
proTask
.
getArrangeCode
().
length
()
==
12
)
{
proTask
.
setWorkorderCode
(
proTask
.
getArrangeCode
());
proTask
.
setArrangeCode
(
null
);
}
}
List
<
ProTask
>
rst
=
new
ArrayList
<>();
List
<
ProTask
>
list
=
new
ArrayList
<>();
QueryWrapper
<
ProTask
>
query
=
new
QueryWrapper
<>();
List
<
String
>
statusList
=
Arrays
.
asList
(
TaskStatusEnum
.
BEGINNING
.
getStatus
(),
TaskStatusEnum
.
PREPARE
.
getStatus
(),
TaskStatusEnum
.
PAUSE
.
getStatus
(),
TaskStatusEnum
.
ERROR_STOP
.
getStatus
());
...
...
@@ -1400,98 +1391,27 @@ public class ProTaskServiceImpl implements IProTaskService {
query
.
eq
(
proTask
.
getWorkunitId
()
!=
null
,
"mw.workunit_id"
,
proTask
.
getWorkunitId
());
query
.
in
(
proTask
.
getWorkunitIdList
()
!=
null
,
"mw.workunit_id"
,
proTask
.
getWorkunitIdList
());
query
.
eq
(
proTask
.
getOutsourced
()
!=
null
,
"ptw.outsourced"
,
proTask
.
getOutsourced
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proTask
.
getArrangeCode
()),
"t.arrange_code"
,
proTask
.
getArrangeCode
());
query
.
gt
(
proTask
.
getAllowProduce
()
!=
null
&&
proTask
.
getAllowProduce
()
==
1
,
"t.quantity_wait"
,
0
);
query
.
ne
(
"wo.`status`"
,
"close"
);
query
.
and
(
StringUtils
.
isNotEmpty
(
proTask
.
getArrangeCode
()),
i
->
i
.
eq
(
"t.arrange_code"
,
proTask
.
getArrangeCode
()).
or
().
eq
(
"t.task_code"
,
proTask
.
getArrangeCode
()));
//query.le(proTask.getAllowProduce() != null && proTask.getAllowProduce() == 0, "t.quantity_wait", 0);
query
.
gt
(
"ptw.quantity"
,
0
);
query
.
orderByAsc
(
"statusIndex"
).
orderByAsc
(
"ptw.schedule_start_date"
);
//搜索条件为工单号查询相应任务ID作为查询条件
// if (StringUtils.isNotEmpty(proTask.getWorkorderCode())) {
// QueryWrapper<ProTask> taskQuery = new QueryWrapper<>();
// taskQuery.eq("t2.workorder_code", proTask.getWorkorderCode());
// taskQuery.eq(proTask.getWorkunitId() != null, "t4.workunit_id", proTask.getWorkunitId());
// List<ProTaskVo> taskVoList = proTaskMapper.selectProTaskJoinWorkorder(taskQuery);
// if (CollectionUtil.isEmpty(taskVoList)) {
// if (CollectionUtil.isNotEmpty(rst)) {
// for (ProTask task : rst) {
// Double v = proFeedbackService.selectQuantityQualifySum(new ProFeedback(task.getArrangeCode(), null, null, task.getTaskWorkunitId()));
// task.setArrangeFeedbackSum(v);
// }
// }
// return rst;
// } else {
// query.in("t.task_id", taskVoList.stream().map(ProTaskVo::getTaskId).collect(Collectors.toList()));
// }
// }
list
=
this
.
selectProTaskJoinTaskWorkUnit
(
query
);
if
(
list
.
size
()
<
1
){
query
=
new
QueryWrapper
<>();
query
.
in
(
"ptw.status"
,
statusList
);
query
.
eq
(
proTask
.
getWorkunitId
()
!=
null
,
"mw.workunit_id"
,
proTask
.
getWorkunitId
());
query
.
in
(
proTask
.
getWorkunitIdList
()
!=
null
,
"mw.workunit_id"
,
proTask
.
getWorkunitIdList
());
query
.
eq
(
proTask
.
getOutsourced
()
!=
null
,
"ptw.outsourced"
,
proTask
.
getOutsourced
());
query
.
eq
(
StringUtils
.
isNotEmpty
(
proTask
.
getArrangeCode
()),
"t.task_code"
,
proTask
.
getArrangeCode
());
query
.
gt
(
proTask
.
getAllowProduce
()
!=
null
&&
proTask
.
getAllowProduce
()
==
1
,
"t.quantity_wait"
,
0
);
// query.le(proTask.getAllowProduce() != null && proTask.getAllowProduce() == 0, "t.quantity_wait", 0);
query
.
gt
(
"ptw.quantity"
,
0
);
query
.
orderByAsc
(
"statusIndex"
).
orderByAsc
(
"ptw.schedule_start_date"
);
list
=
this
.
selectProTaskJoinTaskWorkUnit
(
query
);
}
rst
=
list
.
stream
().
filter
(
t
->
!
TaskStatusEnum
.
FINISHED
.
getStatus
().
equals
(
t
.
getStatus
())).
collect
(
Collectors
.
toList
());
if
(
CollectionUtil
.
isNotEmpty
(
rst
))
{
for
(
ProTask
task
:
rst
)
{
String
arrangeCode
=
task
.
getArrangeCode
();
if
(
StringUtils
.
isNotEmpty
(
arrangeCode
))
{
ProWorkorderQuery
workorderQuery
=
new
ProWorkorderQuery
();
workorderQuery
.
setWorkorderCode
(
arrangeCode
);
List
<
ProWorkorder
>
proWorkorders
=
proWorkorderService
.
selectProWorkorderList
(
workorderQuery
);
task
.
setProWorkorderList
(
proWorkorders
);
if
(
proWorkorders
.
size
()
>
0
&&
proWorkorders
.
get
(
0
).
getProductionSolutionId
()
!=
null
){
ProProductionSolution
proProductionSolution
=
proProductionSolutionMapper
.
selectProProductionSolutionByProductionSolutionId
(
proWorkorders
.
get
(
0
).
getProductionSolutionId
());
if
(
proProductionSolution
!=
null
){
task
.
setSurpassState
(
proProductionSolution
.
getSurpassState
());
}
}
Double
v
=
proFeedbackService
.
selectQuantityQualifySum
(
new
ProFeedback
(
arrangeCode
,
null
,
null
,
task
.
getTaskWorkunitId
()));
task
.
setArrangeFeedbackSum
(
v
);
}
//增加校验是否序列号报工
if
(
StringUtils
.
isNotEmpty
(
task
.
getIsSerialReport
())
&&
"1"
.
equals
(
task
.
getIsSerialReport
())){
QueryWrapper
<
ProProductQrcodeRecord
>
proProductQrcodeRecordQuery
=
new
QueryWrapper
<>();
proProductQrcodeRecordQuery
.
eq
(
"m.work_order_no"
,
task
.
getArrangeCode
());
List
<
ProProductQrcodeRecordDto
>
proProductQrcodeRecordDtos
=
proProductQrcodeRecordMapper
.
selectDtoListByQw
(
proProductQrcodeRecordQuery
);
if
(
proProductQrcodeRecordDtos
.
size
()
<
1
){
task
.
setIsSerialReport
(
"0"
);
}
}
}
}
Set
<
Long
>
taskWorkunitIds
=
rst
.
stream
().
map
(
ProTask:
:
getTaskWorkunitId
).
collect
(
Collectors
.
toSet
());
if
(
CollectionUtil
.
isNotEmpty
(
taskWorkunitIds
))
{
Map
<
Long
,
ProTaskAssistProcess
>
assistProcessMap
=
proTaskAssistProcessMapper
.
selectListByQw
(
new
QueryWrapper
<
ProTaskAssistProcess
>().
in
(
"task_workunit_id"
,
taskWorkunitIds
)).
stream
().
collect
(
Collectors
.
toMap
(
ProTaskAssistProcess:
:
getTaskWorkunitId
,
x
->
x
));
List
<
ProTask
>
proTasks
=
proTaskWorkunitMapper
.
selectListIsExistToolByTaskWorkunitIds
(
new
QueryWrapper
<
ProTaskWorkunit
>().
in
(
"task_workunit_id"
,
taskWorkunitIds
));
Map
<
Long
,
ProTask
>
isExistToolList
=
proTasks
.
stream
().
collect
(
Collectors
.
toMap
(
ProTask:
:
getTaskWorkunitId
,
x
->
x
));
for
(
ProTask
task
:
rst
)
{
ProTaskAssistProcess
assistProcess
=
assistProcessMap
.
get
(
task
.
getTaskWorkunitId
());
ProTask
taskVal
=
isExistToolList
.
get
(
task
.
getTaskWorkunitId
());
if
(
taskVal
!=
null
)
{
task
.
setIsExistTool
(
taskVal
.
getIsExistTool
());
}
if
(
assistProcess
!=
null
)
{
task
.
setCloseType
(
assistProcess
.
getCloseType
());
task
.
setWorkorderCode
(
assistProcess
.
getWorkorderCode
());
}
}
}
List
<
ProTask
>
list
=
this
.
selectProTaskJoinTaskWorkUnit
(
query
);
List
<
ProTask
>
rst
=
list
.
stream
().
filter
(
t
->
!
TaskStatusEnum
.
FINISHED
.
getStatus
().
equals
(
t
.
getStatus
())).
collect
(
Collectors
.
toList
());
//兼容前端代码,后面待前端调整后可删除
rst
.
forEach
(
s
->{
s
.
setProWorkorderList
(
new
ArrayList
<
ProWorkorder
>());
ProWorkorder
workorder
=
new
ProWorkorder
();
workorder
.
setWorkorderId
(
s
.
getWorkorderId
());
workorder
.
setWorkorderCode
(
s
.
getArrangeCode
());
workorder
.
setProductName
(
s
.
getProductName
());
workorder
.
setProductCode
(
s
.
getProductCode
());
s
.
getProWorkorderList
().
add
(
workorder
);
});
return
rst
;
}
@Override
...
...
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