Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
HYH.APSJ
Project
Project
Details
Activity
Releases
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
佟礼
HYH.APSJ
Commits
72cd676d
Commit
72cd676d
authored
Mar 16, 2026
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
下发修改
parent
7666d8f3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
75 additions
and
51 deletions
+75
-51
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+1
-1
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+74
-50
No files found.
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
72cd676d
...
...
@@ -282,7 +282,7 @@ if(finishedOrder==null||finishedOrder.size()==0)
public
void
decode
(
Chromosome
chromosome
)
{
List
<
OrderMaterialRequirement
>
orderMaterials
=
materialRequirementService
.
buildMultiLevelRequirementNetwork
(
chromosome
,
sceneId
,
baseTime
,
_globalParam
);
//
List<OrderMaterialRequirement> orderMaterials = materialRequirementService.buildMultiLevelRequirementNetwork(chromosome, sceneId, baseTime,_globalParam);
chromosome
.
setScenarioID
(
sceneId
);
if
(
_globalParam
.
isIsCheckSf
())
{
int
isnew
=
generateGlobalOpList
(
chromosome
);
...
...
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
72cd676d
...
...
@@ -115,12 +115,22 @@ public class LanuchServiceImpl implements LanuchService {
if
(
apsOrderIds
.
isEmpty
())
{
apsOrders
=
new
ArrayList
<>();
}
else
{
apsOrders
=
apsOrderService
.
lambdaQuery
()
.
eq
(
ApsOrder:
:
getIsdeleted
,
0
)
.
eq
(
ApsOrder:
:
getStatus
,
4
)
// .eq(ApsOrder::getCreatoruserid, username)
.
in
(
ApsOrder:
:
getId
,
apsOrderIds
)
.
list
();
// Oracle IN子句限制最多1000个值,需要分批查询
apsOrders
=
new
ArrayList
<>();
int
batchSize
=
1000
;
for
(
int
i
=
0
;
i
<
apsOrderIds
.
size
();
i
+=
batchSize
)
{
int
endIndex
=
Math
.
min
(
i
+
batchSize
,
apsOrderIds
.
size
());
List
<
String
>
batchIds
=
apsOrderIds
.
subList
(
i
,
endIndex
);
List
<
ApsOrder
>
batchOrders
=
apsOrderService
.
lambdaQuery
()
.
eq
(
ApsOrder:
:
getIsdeleted
,
0
)
.
eq
(
ApsOrder:
:
getStatus
,
4
)
// .eq(ApsOrder::getCreatoruserid, username)
.
in
(
ApsOrder:
:
getId
,
batchIds
)
.
list
();
apsOrders
.
addAll
(
batchOrders
);
}
}
if
(
CollectionUtils
.
isEmpty
(
apsOrders
))
{
throw
new
SceneGenerationException
(
"工单列表不能为空"
);
...
...
@@ -247,22 +257,22 @@ public class LanuchServiceImpl implements LanuchService {
}
// 更新或插入 mes_order 数据
List
<
String
>
orderIds
=
prodLanuchList
.
stream
().
map
(
Order:
:
getOrderId
).
distinct
().
collect
(
Collectors
.
toList
());
// 查询已存在的 mes_order 记录
List
<
MesOrder
>
existingMesOrders
=
mesOrderService
.
lambdaQuery
()
.
in
(
MesOrder:
:
getMesCode
,
orderIds
)
.
list
();
Map
<
String
,
MesOrder
>
existingMesOrderMap
=
existingMesOrders
.
stream
()
.
collect
(
Collectors
.
toMap
(
MesOrder:
:
getMesCode
,
order
->
order
));
List
<
MesOrder
>
toUpdate
=
new
ArrayList
<>();
List
<
MesOrder
>
toInsert
=
new
ArrayList
<>();
for
(
Order
prodLaunchOrder
:
prodLanuchList
)
{
MesOrder
existingOrder
=
existingMesOrderMap
.
get
(
prodLaunchOrder
.
getOrderId
());
MesOrder
mesOrder
;
if
(
existingOrder
!=
null
)
{
// 更新现有记录
mesOrder
=
existingOrder
;
...
...
@@ -276,7 +286,7 @@ public class LanuchServiceImpl implements LanuchService {
mesOrder
.
setCreationTime
(
LocalDateTime
.
now
());
toInsert
.
add
(
mesOrder
);
}
// 设置部门信息(使用upId字段存储部门ID)
Integer
departmentId
=
orderDepartmentMap
.
get
(
prodLaunchOrder
.
getOrderId
());
if
(
departmentId
!=
null
)
{
...
...
@@ -294,21 +304,21 @@ public class LanuchServiceImpl implements LanuchService {
mesOrder
.
setIsDeleted
(
0L
);
mesOrder
.
setTaskType
(
prodLaunchOrder
.
getFinishOrderId
()
!=
null
?
"半成品"
:
"成品"
);
}
// 批量更新和插入
boolean
updateSuccess
=
true
;
boolean
insertSuccess
=
true
;
if
(!
toUpdate
.
isEmpty
())
{
updateSuccess
=
mesOrderService
.
updateBatchById
(
toUpdate
);
log
.
info
(
"更新 {} 条 mes_order 记录"
,
toUpdate
.
size
());
}
if
(!
toInsert
.
isEmpty
())
{
insertSuccess
=
mesOrderService
.
saveBatch
(
toInsert
);
log
.
info
(
"插入 {} 条 mes_order 记录"
,
toInsert
.
size
());
}
if
(!
updateSuccess
||
!
insertSuccess
)
{
log
.
error
(
"mes_order 操作失败"
);
throw
new
RuntimeException
(
"mes_order 操作失败"
);
...
...
@@ -330,18 +340,18 @@ public class LanuchServiceImpl implements LanuchService {
.
eq
(
Dispatch:
:
getSceneId
,
sceneId
)
.
eq
(
Dispatch:
:
getIsDeleted
,
0L
)
.
list
();
// 构建现有记录的映射 (executeId + routingDetailId 作为唯一标识)
Map
<
String
,
Dispatch
>
existingDispatchMap
=
existingDispatches
.
stream
()
.
collect
(
Collectors
.
toMap
(
dispatch
->
dispatch
.
getExecuteId
()
+
"_"
+
dispatch
.
getRoutingDetailId
(),
dispatch
->
dispatch
,
(
existing
,
replacement
)
->
existing
dispatch
->
dispatch
.
getExecuteId
()
+
"_"
+
dispatch
.
getRoutingDetailId
(),
dispatch
->
dispatch
,
(
existing
,
replacement
)
->
existing
));
List
<
Dispatch
>
toUpdateDispatches
=
new
ArrayList
<>();
List
<
Dispatch
>
toInsertDispatches
=
new
ArrayList
<>();
// 遍历GAScheduleResult结果并转换为dispatch
for
(
GAScheduleResult
gaResult
:
chromosome
.
getResult
())
{
Entry
entry1
=
entrys
.
stream
()
...
...
@@ -353,11 +363,11 @@ public class LanuchServiceImpl implements LanuchService {
log
.
warn
(
"未找到对应的Entry,ExecId: {}"
,
gaResult
.
getExecId
());
continue
;
}
String
dispatchKey
=
entry1
.
getId
()
+
"_"
+
entry1
.
getRoutingDetailId
();
Dispatch
existingDispatch
=
existingDispatchMap
.
get
(
dispatchKey
);
Dispatch
dispatch
;
if
(
existingDispatch
!=
null
)
{
// 更新现有记录
dispatch
=
existingDispatch
;
...
...
@@ -373,7 +383,7 @@ public class LanuchServiceImpl implements LanuchService {
dispatch
.
setRoutingDetailId
(
entry1
.
getRoutingDetailId
());
toInsertDispatches
.
add
(
dispatch
);
}
// 更新相关字段
dispatch
.
setENof
(
gaResult
.
getOrderId
());
dispatch
.
setQuantity
(
gaResult
.
getQuantity
());
...
...
@@ -399,21 +409,21 @@ public class LanuchServiceImpl implements LanuchService {
}
dispatch
.
setShopid
(
entry1
.
getDepartmentId
());
}
// 批量更新和插入 dispatch
boolean
updateDispatchSuccess
=
true
;
boolean
insertDispatchSuccess
=
true
;
if
(!
toUpdateDispatches
.
isEmpty
())
{
updateDispatchSuccess
=
dispatchService
.
updateBatchById
(
toUpdateDispatches
);
log
.
info
(
"更新 {} 条 dispatch 记录"
,
toUpdateDispatches
.
size
());
}
if
(!
toInsertDispatches
.
isEmpty
())
{
insertDispatchSuccess
=
dispatchService
.
saveBatch
(
toInsertDispatches
);
log
.
info
(
"插入 {} 条 dispatch 记录"
,
toInsertDispatches
.
size
());
}
boolean
savedDispatch
=
updateDispatchSuccess
&&
insertDispatchSuccess
;
// 构建ExecId到GAScheduleResult的映射,用于获取工序开始时间
...
...
@@ -430,13 +440,13 @@ public class LanuchServiceImpl implements LanuchService {
// 获取该Entry对应的GAScheduleResult
GAScheduleResult
gaResult
=
execIdToScheduleMap
.
get
(
entry
.
getExecId
());
LocalDateTime
operationStartTime
=
null
;
// 计算工序开始时间
if
(
gaResult
!=
null
)
{
LocalDateTime
baseTime
=
chromosome
.
getBaseTime
()
!=
null
?
chromosome
.
getBaseTime
()
:
LocalDateTime
.
now
();
operationStartTime
=
baseTime
.
plusSeconds
(
gaResult
.
getStartTime
());
}
// 遍历物料需求,设置shortageTime
for
(
OrderMaterialRequirement
omr
:
entry
.
getMaterialRequirements
())
{
if
(
operationStartTime
!=
null
)
{
...
...
@@ -800,19 +810,33 @@ public class LanuchServiceImpl implements LanuchService {
}
public
List
<
RoutingDetail
>
getRoutingDetails
(
List
<
Long
>
routingHeaderIds
)
{
LambdaQueryWrapper
<
RoutingDetail
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
in
(
RoutingDetail:
:
getRoutingHeaderId
,
routingHeaderIds
)
.
eq
(
RoutingDetail:
:
getIsDeleted
,
0
)
// 添加 is_deleted=0 过滤条件
.
orderByAsc
(
RoutingDetail:
:
getTaskSeq
);
if
(
routingHeaderIds
.
isEmpty
())
{
return
new
ArrayList
<>();
}
List
<
RoutingDetail
>
routingDetails
=
routingDetailMapper
.
selectList
(
wrapper
);
// Oracle IN子句限制最多1000个值,需要分批查询
List
<
RoutingDetail
>
allRoutingDetails
=
new
ArrayList
<>();
int
batchSize
=
1000
;
if
(
CollectionUtils
.
isEmpty
(
routingDetails
))
{
for
(
int
i
=
0
;
i
<
routingHeaderIds
.
size
();
i
+=
batchSize
)
{
int
endIndex
=
Math
.
min
(
i
+
batchSize
,
routingHeaderIds
.
size
());
List
<
Long
>
batchIds
=
routingHeaderIds
.
subList
(
i
,
endIndex
);
LambdaQueryWrapper
<
RoutingDetail
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
in
(
RoutingDetail:
:
getRoutingHeaderId
,
batchIds
)
.
eq
(
RoutingDetail:
:
getIsDeleted
,
0
)
// 添加 is_deleted=0 过滤条件
.
orderByAsc
(
RoutingDetail:
:
getTaskSeq
);
List
<
RoutingDetail
>
batchDetails
=
routingDetailMapper
.
selectList
(
wrapper
);
allRoutingDetails
.
addAll
(
batchDetails
);
}
if
(
CollectionUtils
.
isEmpty
(
allRoutingDetails
))
{
log
.
error
(
"工艺下无工序信息: {}"
,
routingHeaderIds
);
throw
new
RuntimeException
(
"工艺下无工序信息: "
+
routingHeaderIds
);
}
return
r
outingDetails
;
return
allR
outingDetails
;
}
/**
...
...
@@ -913,9 +937,9 @@ public class LanuchServiceImpl implements LanuchService {
prodProcessExec
.
setConnectPropertyName
(
detail
.
getConnectPropertyName
());
prodProcessExec
.
setCanInterrupt
(
detail
.
getCanInterrupt
());
prodProcessExec
.
setDepartmentId
(
routingHeader
.
getDepartmentId
());
prodProcessExec
.
setRoutingCode
(
routingHeader
.
getCode
());
prodProcessExec
.
setRoutingName
(
routingHeader
.
getName
());
prodProcessExec
.
setDepartmentId
(
routingHeader
.
getDepartmentId
());
prodProcessExec
.
setRoutingCode
(
routingHeader
.
getCode
());
prodProcessExec
.
setRoutingName
(
routingHeader
.
getName
());
prodProcessExec
.
setSpeed
(
...
...
@@ -1193,16 +1217,16 @@ public class LanuchServiceImpl implements LanuchService {
boolean
saved
=
prodLaunchOrderService
.
saveBatch
(
launchOrders
);
if
(
saved
)
{
log
.
info
(
"成功保存{}个新订单到PROD_LAUNCH_ORDER表"
,
launchOrders
.
size
());
// 5. 转换工单于工序执行表
convertToProcessExecBatch
(
launchOrders
,
sceneId
);
// 6. 生成工序关联关系
generateProcessRelationsBatch
(
launchOrders
,
sceneId
);
return
R
.
ok
(
"保存方案成功,共保存"
+
launchOrders
.
size
()
+
"个新订单"
);
}
else
{
throw
new
RuntimeException
(
"保存订单失败"
);
}
}
else
{
...
...
@@ -1232,7 +1256,7 @@ public class LanuchServiceImpl implements LanuchService {
launchOrder
.
setRoutingCode
(
order
.
getRoutingCode
());
return
launchOrder
;
}
private
int
cachetimeout
=
60
;
private
int
cachetimeout
=
60
;
private
List
<
Equiptype1
>
GetEquipTypes
()
{
List
<
Equiptype1
>
equipTypes
=(
List
<
Equiptype1
>)
GlobalCacheUtil
.
get
(
"equipType"
);
if
(
equipTypes
==
null
)
...
...
@@ -1621,7 +1645,7 @@ public class LanuchServiceImpl implements LanuchService {
/**
* 插单功能:向现有场景添加新订单
*
*
* @param sceneId 场景ID
* @param orderCode 订单编码
* @param materialId 物料ID
...
...
@@ -1634,7 +1658,7 @@ public class LanuchServiceImpl implements LanuchService {
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
R
<
String
>
insertOrder
(
String
sceneId
,
String
orderCode
,
String
materialId
,
LocalDateTime
startDate
,
LocalDateTime
endDate
,
LocalDateTime
startDate
,
LocalDateTime
endDate
,
Integer
priority
,
Double
quantity
)
{
// 1. 参数校验
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
...
...
@@ -1678,8 +1702,8 @@ public class LanuchServiceImpl implements LanuchService {
throw
new
RuntimeException
(
"物料没有配置工艺路线"
);
}
log
.
info
(
"查询到物料 {} 的最新工艺路线: ID={}, Code={}, Version={}, CreationTime={}"
,
materialId
,
routingHeader
.
getId
(),
routingHeader
.
getCode
(),
log
.
info
(
"查询到物料 {} 的最新工艺路线: ID={}, Code={}, Version={}, CreationTime={}"
,
materialId
,
routingHeader
.
getId
(),
routingHeader
.
getCode
(),
routingHeader
.
getVersion
(),
routingHeader
.
getCreationTime
());
// 5. 生成订单ID(UUID格式)
...
...
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