Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yanxuan-qc-change-system
Overview
Overview
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
yx-qc-change-flow
yanxuan-qc-change-system
Commits
397ca4b3
Commit
397ca4b3
authored
Nov 25, 2025
by
王志超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 增加变更行动工单
parent
d7ea8e35
Pipeline
#86077
passed with stages
in 1 minute 25 seconds
Changes
9
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
287 additions
and
16 deletions
+287
-16
ChangeFlowBiz.java
...om/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
+53
-16
ChangeFlowExecService.java
...ail/yanxuan/change/biz/service/ChangeFlowExecService.java
+8
-0
ChangeSubFlowRecordService.java
...anxuan/change/biz/service/ChangeSubFlowRecordService.java
+48
-0
ChangeFlowExecServiceImpl.java
...an/change/biz/service/impl/ChangeFlowExecServiceImpl.java
+8
-0
ChangeSubFlowRecordServiceImpl.java
...ange/biz/service/impl/ChangeSubFlowRecordServiceImpl.java
+52
-0
ChangeExecRecord.java
...ease/mail/yanxuan/change/dal/entity/ChangeExecRecord.java
+5
-0
ChangeSubFlowRecord.java
...e/mail/yanxuan/change/dal/entity/ChangeSubFlowRecord.java
+64
-0
ChangeExecRecordMapper.java
...ail/yanxuan/change/dal/mapper/ChangeExecRecordMapper.java
+8
-0
ChangeSubFlowRecordMapper.java
.../yanxuan/change/dal/mapper/ChangeSubFlowRecordMapper.java
+41
-0
No files found.
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
View file @
397ca4b3
...
@@ -34,6 +34,7 @@ import com.netease.mail.yanxuan.change.biz.service.BuildAndSendEmail;
...
@@ -34,6 +34,7 @@ import com.netease.mail.yanxuan.change.biz.service.BuildAndSendEmail;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFileService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFileService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeFlowService
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeSubFlowRecordService
;
import
com.netease.mail.yanxuan.change.biz.service.InteriorChangeConfigService
;
import
com.netease.mail.yanxuan.change.biz.service.InteriorChangeConfigService
;
import
com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService
;
import
com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService
;
import
com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService
;
import
com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService
;
...
@@ -61,6 +62,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeConfig;
...
@@ -61,6 +62,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeConfig;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeFile
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeFile
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeType
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeType
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeCommanderPO
;
import
com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeCommanderPO
;
...
@@ -131,6 +133,9 @@ public class ChangeFlowBiz {
...
@@ -131,6 +133,9 @@ public class ChangeFlowBiz {
private
ChangeFlowExecService
changeFlowExecService
;
private
ChangeFlowExecService
changeFlowExecService
;
@Autowired
@Autowired
private
ChangeSubFlowRecordService
changeSubFlowRecordService
;
@Autowired
private
ChangeRecordMapper
changeRecordMapper
;
private
ChangeRecordMapper
changeRecordMapper
;
@Autowired
@Autowired
...
@@ -315,7 +320,9 @@ public class ChangeFlowBiz {
...
@@ -315,7 +320,9 @@ public class ChangeFlowBiz {
}
}
/**
/**
* 创建子流程并绑定到执行记录
* 创建变更行动工单并绑定行动项
* 说明:按照 changeExecDepartment + changeExecUserEmail 维度分组,每个分组创建一个变更行动工单
* 前端传值是拆分的(每个行动项一条记录),但需要汇总到同一个变更行动工单
*
*
* @param changeRecord 主流程记录
* @param changeRecord 主流程记录
* @param flowName 主流程名称
* @param flowName 主流程名称
...
@@ -328,29 +335,46 @@ public class ChangeFlowBiz {
...
@@ -328,29 +335,46 @@ public class ChangeFlowBiz {
return
;
return
;
}
}
for
(
ChangeExecRecord
execRecord
:
execRecords
)
{
// 按照 changeExecDepartment + changeExecUserEmail 维度分组
// 子流程使用行动人作为创建人和审批人
Map
<
String
,
List
<
ChangeExecRecord
>>
groupedRecords
=
execRecords
.
stream
()
String
execUserEmail
=
execRecord
.
getChangeExecUserEmail
();
.
filter
(
record
->
StringUtils
.
isNotBlank
(
record
.
getChangeExecUserEmail
()))
if
(
StringUtils
.
isBlank
(
execUserEmail
))
{
.
collect
(
Collectors
.
groupingBy
(
record
->
log
.
warn
(
"[createAndBindSubFlows] 行动人邮箱为空, execRecordId:{}, changeRecordId:{}"
,
(
StringUtils
.
isNotBlank
(
record
.
getChangeExecDepartment
())
?
record
.
getChangeExecDepartment
()
:
""
)
execRecord
.
getId
(),
changeRecord
.
getId
());
+
"_"
+
record
.
getChangeExecUserEmail
()));
if
(
groupedRecords
.
isEmpty
())
{
log
.
warn
(
"[createAndBindSubFlows] 未找到有效的执行记录(行动人邮箱为空), changeRecordId:{}"
,
changeRecord
.
getId
());
return
;
}
// 为每个分组创建一个变更行动工单
for
(
Map
.
Entry
<
String
,
List
<
ChangeExecRecord
>>
entry
:
groupedRecords
.
entrySet
())
{
List
<
ChangeExecRecord
>
groupRecords
=
entry
.
getValue
();
if
(
CollectionUtils
.
isEmpty
(
groupRecords
))
{
continue
;
continue
;
}
}
// 取第一个记录作为代表(同一分组下的记录,changeExecDepartment 和 changeExecUserEmail 相同)
ChangeExecRecord
firstRecord
=
groupRecords
.
get
(
0
);
String
execUserEmail
=
firstRecord
.
getChangeExecUserEmail
();
String
execDepartment
=
firstRecord
.
getChangeExecDepartment
();
// 查询行动人名称
// 查询行动人名称
IusUserInfoRsp
execUser
=
iusService
.
queryUserInfo
(
execUserEmail
);
IusUserInfoRsp
execUser
=
iusService
.
queryUserInfo
(
execUserEmail
);
String
execUserName
=
execUser
==
null
||
StringUtils
.
isBlank
(
execUser
.
getName
())
String
execUserName
=
execUser
==
null
||
StringUtils
.
isBlank
(
execUser
.
getName
())
?
execUserEmail
:
execUser
.
getName
();
?
execUserEmail
:
execUser
.
getName
();
// 构建
子流程
工单内容
// 构建
变更行动
工单内容
Map
<
String
,
Object
>
subFlowContent
=
buildFlowContent
(
execUserEmail
);
Map
<
String
,
Object
>
subFlowContent
=
buildFlowContent
(
execUserEmail
);
// 构建
子流程工单名称:主流程名称 + 行动项内容
(截取前100字符)
// 构建
变更行动工单名称:主流程名称 + 变更行动部门 + 行动人
(截取前100字符)
String
subFlowName
=
flowName
+
"-"
+
exec
Record
.
getChangeExecProject
()
;
String
subFlowName
=
flowName
+
"-"
+
exec
Department
+
"-"
+
execUserName
;
if
(
subFlowName
.
length
()
>
100
)
{
if
(
subFlowName
.
length
()
>
100
)
{
subFlowName
=
subFlowName
.
substring
(
0
,
100
)
+
"..."
;
subFlowName
=
subFlowName
.
substring
(
0
,
100
)
+
"..."
;
}
}
// 创建变更行动工单
FlowCreateReqDTO
subFlowCreateReqDTO
=
buildFlowCreateReqDTO
(
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
FlowCreateReqDTO
subFlowCreateReqDTO
=
buildFlowCreateReqDTO
(
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
execUserEmail
,
JSON
.
toJSONString
(
subFlowContent
),
FlowxOperationEnum
.
CREATE
.
getName
(),
execUserEmail
,
JSON
.
toJSONString
(
subFlowContent
),
FlowxOperationEnum
.
CREATE
.
getName
(),
execUserName
,
subFlowName
);
execUserName
,
subFlowName
);
...
@@ -359,13 +383,26 @@ public class ChangeFlowBiz {
...
@@ -359,13 +383,26 @@ public class ChangeFlowBiz {
FlowDataDTO
subFlowDataDTO
=
flowService
.
flowDetail
(
subFlowId
);
FlowDataDTO
subFlowDataDTO
=
flowService
.
flowDetail
(
subFlowId
);
// 获取流程节点ID
// 获取流程节点ID
String
subNodeId
=
subFlowDataDTO
.
getFlowMeta
().
getCurrNodeDataList
().
get
(
0
).
getNodeId
();
String
subNodeId
=
subFlowDataDTO
.
getFlowMeta
().
getCurrNodeDataList
().
get
(
0
).
getNodeId
();
log
.
info
(
"[createAndBindSubFlows] changeRecordId:{}, subFlowId:{}, nodeId:{}, execUserEmail:{}"
,
changeRecord
.
getId
(),
subFlowId
,
subNodeId
,
execUserEmail
);
// 更新执行记录,绑定子流程
// 创建变更行动工单记录
execRecord
.
setSubFlowId
(
subFlowId
);
ChangeSubFlowRecord
subFlowRecord
=
ChangeSubFlowRecord
.
builder
()
execRecord
.
setSubFlowNode
(
subNodeId
);
.
changeRecordId
(
changeRecord
.
getId
())
changeFlowExecService
.
update
(
execRecord
);
.
subFlowId
(
subFlowId
)
.
subFlowNode
(
subNodeId
)
.
createTime
(
DateUtils
.
getCurrentTime
())
.
updateTime
(
DateUtils
.
getCurrentTime
())
.
build
();
changeSubFlowRecordService
.
saveRecord
(
subFlowRecord
);
log
.
info
(
"[createAndBindSubFlows] changeRecordId:{}, subFlowRecordId:{}, subFlowId:{}, nodeId:{}, execDepartment:{}, execUserEmail:{}, execCount:{}"
,
changeRecord
.
getId
(),
subFlowRecord
.
getId
(),
subFlowId
,
subNodeId
,
execDepartment
,
execUserEmail
,
groupRecords
.
size
());
// 将该分组下的所有行动项关联到变更行动工单
for
(
ChangeExecRecord
execRecord
:
groupRecords
)
{
execRecord
.
setSubFlowRecordId
(
subFlowRecord
.
getId
());
execRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
changeFlowExecService
.
update
(
execRecord
);
}
}
}
}
}
...
...
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/ChangeFlowExecService.java
View file @
397ca4b3
...
@@ -56,4 +56,11 @@ public interface ChangeFlowExecService {
...
@@ -56,4 +56,11 @@ public interface ChangeFlowExecService {
* @return
* @return
*/
*/
ChangeExecRecord
getBySubFlowId
(
String
subFlowId
);
ChangeExecRecord
getBySubFlowId
(
String
subFlowId
);
/**
* 根据变更行动工单记录ID查询行动项列表
* @param subFlowRecordId 变更行动工单记录ID
* @return 行动项列表
*/
List
<
ChangeExecRecord
>
getBySubFlowRecordId
(
Long
subFlowRecordId
);
}
}
\ No newline at end of file
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/ChangeSubFlowRecordService.java
0 → 100644
View file @
397ca4b3
/**
* @(#)ChangeSubFlowRecordService.java, 2024/01/01.
* <p/>
* Copyright 2024 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package
com
.
netease
.
mail
.
yanxuan
.
change
.
biz
.
service
;
import
java.util.List
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
/**
* 变更行动工单服务
* @Author system
* @Date 2024/01/01
*/
public
interface
ChangeSubFlowRecordService
{
/**
* 保存变更行动工单记录
* @param subFlowRecord 变更行动工单记录
*/
void
saveRecord
(
ChangeSubFlowRecord
subFlowRecord
);
/**
* 更新变更行动工单记录
* @param subFlowRecord 变更行动工单记录
* @return 是否成功
*/
Boolean
update
(
ChangeSubFlowRecord
subFlowRecord
);
/**
* 根据主单记录ID查询变更行动工单列表
* @param changeRecordId 主单记录ID
* @return 变更行动工单列表
*/
List
<
ChangeSubFlowRecord
>
getByChangeRecordId
(
Long
changeRecordId
);
/**
* 根据变更行动工单ID查询变更行动工单记录
* @param subFlowId 变更行动工单ID(即topo)
* @return 变更行动工单记录
*/
ChangeSubFlowRecord
getBySubFlowId
(
String
subFlowId
);
}
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/impl/ChangeFlowExecServiceImpl.java
View file @
397ca4b3
...
@@ -80,4 +80,12 @@ public class ChangeFlowExecServiceImpl implements ChangeFlowExecService {
...
@@ -80,4 +80,12 @@ public class ChangeFlowExecServiceImpl implements ChangeFlowExecService {
public
ChangeExecRecord
getBySubFlowId
(
String
subFlowId
)
{
public
ChangeExecRecord
getBySubFlowId
(
String
subFlowId
)
{
return
changeExecRecordMapper
.
selectBySubFlowId
(
subFlowId
);
return
changeExecRecordMapper
.
selectBySubFlowId
(
subFlowId
);
}
}
@Override
public
List
<
ChangeExecRecord
>
getBySubFlowRecordId
(
Long
subFlowRecordId
)
{
if
(
subFlowRecordId
==
null
)
{
return
new
ArrayList
<>();
}
return
changeExecRecordMapper
.
selectBySubFlowRecordId
(
subFlowRecordId
);
}
}
}
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/service/impl/ChangeSubFlowRecordServiceImpl.java
0 → 100644
View file @
397ca4b3
/**
* @(#)ChangeSubFlowRecordServiceImpl.java, 2024/01/01.
* <p/>
* Copyright 2024 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package
com
.
netease
.
mail
.
yanxuan
.
change
.
biz
.
service
.
impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.netease.mail.yanxuan.change.biz.service.ChangeSubFlowRecordService
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeSubFlowRecordMapper
;
/**
* @Author system
* @Date 2024/01/01
*/
@Service
public
class
ChangeSubFlowRecordServiceImpl
implements
ChangeSubFlowRecordService
{
@Autowired
private
ChangeSubFlowRecordMapper
changeSubFlowRecordMapper
;
@Override
public
void
saveRecord
(
ChangeSubFlowRecord
subFlowRecord
)
{
changeSubFlowRecordMapper
.
insertSelective
(
subFlowRecord
);
}
@Override
public
Boolean
update
(
ChangeSubFlowRecord
subFlowRecord
)
{
return
changeSubFlowRecordMapper
.
updateByPrimaryKeySelective
(
subFlowRecord
)
>
0
;
}
@Override
public
List
<
ChangeSubFlowRecord
>
getByChangeRecordId
(
Long
changeRecordId
)
{
return
changeSubFlowRecordMapper
.
selectByChangeRecordId
(
changeRecordId
);
}
@Override
public
ChangeSubFlowRecord
getBySubFlowId
(
String
subFlowId
)
{
return
changeSubFlowRecordMapper
.
selectBySubFlowId
(
subFlowId
);
}
}
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/entity/ChangeExecRecord.java
View file @
397ca4b3
...
@@ -94,6 +94,11 @@ public class ChangeExecRecord {
...
@@ -94,6 +94,11 @@ public class ChangeExecRecord {
private
String
subFlowNode
;
private
String
subFlowNode
;
/**
/**
* 变更行动工单记录ID(关联到变更行动工单中间表,新数据使用)
*/
private
Long
subFlowRecordId
;
/**
* 创建时间
* 创建时间
*/
*/
private
Long
createTime
;
private
Long
createTime
;
...
...
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/entity/ChangeSubFlowRecord.java
0 → 100644
View file @
397ca4b3
/**
* @(#)ChangeSubFlowRecord.java, 2024/01/01.
* <p/>
* Copyright 2024 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package
com
.
netease
.
mail
.
yanxuan
.
change
.
dal
.
entity
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.GenerationType
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* 变更行动工单
* 关系:主单 1 - 变更行动工单 N - 行动项 N
*
* @Author system
* @Date 2024/01/01
*/
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
@Entity
@Table
(
name
=
"TB_YX_QC_CHANGE_SUB_FLOW_RECORD"
)
public
class
ChangeSubFlowRecord
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
/**
* 主单记录ID(变更记录ID)
*/
private
Long
changeRecordId
;
/**
* 变更行动工单ID(即topo)
*/
private
String
subFlowId
;
/**
* 变更行动工单当前节点
*/
private
String
subFlowNode
;
/**
* 创建时间
*/
private
Long
createTime
;
/**
* 更新时间
*/
private
Long
updateTime
;
}
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/mapper/ChangeExecRecordMapper.java
View file @
397ca4b3
...
@@ -45,4 +45,12 @@ public interface ChangeExecRecordMapper extends tk.mybatis.mapper.common.Mapper<
...
@@ -45,4 +45,12 @@ public interface ChangeExecRecordMapper extends tk.mybatis.mapper.common.Mapper<
@Select
(
"SELECT * FROM TB_YX_QC_CHANGE_EXEC_RECORD WHERE sub_flow_id = #{subFlowId} LIMIT 1"
)
@Select
(
"SELECT * FROM TB_YX_QC_CHANGE_EXEC_RECORD WHERE sub_flow_id = #{subFlowId} LIMIT 1"
)
ChangeExecRecord
selectBySubFlowId
(
@Param
(
"subFlowId"
)
String
subFlowId
);
ChangeExecRecord
selectBySubFlowId
(
@Param
(
"subFlowId"
)
String
subFlowId
);
/**
* 根据变更行动工单记录ID查询行动项列表
* @param subFlowRecordId 变更行动工单记录ID
* @return 行动项列表
*/
@Select
(
"SELECT * FROM TB_YX_QC_CHANGE_EXEC_RECORD WHERE sub_flow_record_id = #{subFlowRecordId}"
)
List
<
ChangeExecRecord
>
selectBySubFlowRecordId
(
@Param
(
"subFlowRecordId"
)
Long
subFlowRecordId
);
}
}
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/mapper/ChangeSubFlowRecordMapper.java
0 → 100644
View file @
397ca4b3
/**
* @(#)ChangeSubFlowRecordMapper.java, 2024/01/01.
* <p/>
* Copyright 2024 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package
com
.
netease
.
mail
.
yanxuan
.
change
.
dal
.
mapper
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Select
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
/**
* @Author system
* @Date 2024/01/01
*/
@Mapper
public
interface
ChangeSubFlowRecordMapper
extends
tk
.
mybatis
.
mapper
.
common
.
Mapper
<
ChangeSubFlowRecord
>
{
/**
* 根据主单记录ID查询变更行动工单列表
* @param changeRecordId 主单记录ID
* @return 变更行动工单列表
*/
@Select
(
"SELECT * FROM TB_YX_QC_CHANGE_SUB_FLOW_RECORD WHERE change_record_id = #{changeRecordId}"
)
List
<
ChangeSubFlowRecord
>
selectByChangeRecordId
(
@Param
(
"changeRecordId"
)
Long
changeRecordId
);
/**
* 根据变更行动工单ID查询变更行动工单记录
* @param subFlowId 变更行动工单ID(即topo)
* @return 变更行动工单记录
*/
@Select
(
"SELECT * FROM TB_YX_QC_CHANGE_SUB_FLOW_RECORD WHERE sub_flow_id = #{subFlowId} LIMIT 1"
)
ChangeSubFlowRecord
selectBySubFlowId
(
@Param
(
"subFlowId"
)
String
subFlowId
);
}
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