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
343f8a88
Commit
343f8a88
authored
Dec 03, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
下发
parent
79e47803
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
248 additions
and
4 deletions
+248
-4
LanuchController.java
src/main/java/com/aps/controller/LanuchController.java
+8
-0
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+4
-3
LanuchService.java
src/main/java/com/aps/service/LanuchService.java
+7
-0
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+103
-1
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+126
-0
No files found.
src/main/java/com/aps/controller/LanuchController.java
View file @
343f8a88
...
...
@@ -60,5 +60,13 @@ public class LanuchController {
return
lanuchService
.
copyScene
(
oldSceneName
,
username
,
newSceneName
);
}
@GetMapping
(
"/exportPlan"
)
public
R
<
String
>
exportPlan
(
@RequestParam
String
sceneID
)
{
// 调用 PlanResultService 获取 ScheduleChromosome 列表
return
lanuchService
.
exportPlan
(
sceneID
);
}
}
\ No newline at end of file
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
343f8a88
...
...
@@ -379,10 +379,11 @@ public class ResourceGanttController {
private
List
<
ResourceGanttVO
>
convertToResourceGanttVO1
(
Chromosome
scheduleChromosome
)
{
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines1
(
scheduleChromosome
.
getScenarioID
());
// 遍历所有机器资源
if
(
scheduleChromosome
.
getMachines
()
!=
null
)
{
for
(
int
i
=
0
;
i
<
scheduleChromosome
.
getMachines
()
.
size
();
i
++)
{
Machine
machine
=
scheduleChromosome
.
getMachines
()
.
get
(
i
);
if
(
machineList
!=
null
)
{
for
(
int
i
=
0
;
i
<
machineList
.
size
();
i
++)
{
Machine
machine
=
machineList
.
get
(
i
);
ResourceGanttVO
resourceGanttVO
=
new
ResourceGanttVO
();
resourceGanttVO
.
setId
(
machine
.
getId
());
...
...
src/main/java/com/aps/service/LanuchService.java
View file @
343f8a88
...
...
@@ -25,4 +25,11 @@ public interface LanuchService {
*/
R
<
String
>
copyScene
(
String
oldSceneId
,
String
username
,
String
newSceneId
);
/**
* 下发场景数据到mes_order
*/
R
<
String
>
exportPlan
(
String
sceneId
);
}
\ No newline at end of file
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
343f8a88
...
...
@@ -4,6 +4,7 @@ import com.aps.common.util.R;
import
com.aps.common.util.SnowFlackIdWorker
;
import
com.aps.entity.*
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.mapper.RoutingDetailMapper
;
import
com.aps.mapper.RoutingHeaderMapper
;
import
com.aps.service.*
;
...
...
@@ -67,7 +68,10 @@ public class LanuchServiceImpl implements LanuchService {
RoutingDetailEquipService
routingDetailEquipService
;
@Autowired
SceneService
sceneService
;
@Autowired
MesOrderService
mesOrderService
;
@Autowired
DispatchService
dispatchService
;
/**
◦ 生成场景数据
...
...
@@ -181,6 +185,104 @@ public class LanuchServiceImpl implements LanuchService {
/**
*下发计划
* @param sceneId
* @return R<String> Result
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
R
<
String
>
exportPlan
(
String
sceneId
)
{
try
{
Chromosome
chromosome
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
if
(
chromosome
==
null
||
chromosome
.
getResult
()
==
null
||
chromosome
.
getResult
().
isEmpty
())
{
return
R
.
failed
(
"未找到排程结果"
);
}
List
<
ProdLaunchOrder
>
prodLanuchList
=
prodLaunchOrderService
.
lambdaQuery
()
.
eq
(
ProdLaunchOrder:
:
getSceneId
,
sceneId
)
.
list
();
List
<
MesOrder
>
mesOrderList
=
new
ArrayList
<>();
for
(
ProdLaunchOrder
prodLaunchOrder
:
prodLanuchList
)
{
MesOrder
mesOrder
=
new
MesOrder
();
mesOrder
.
setMesCode
(
prodLaunchOrder
.
getOrderId
());
mesOrder
.
setSerie
(
prodLaunchOrder
.
getSerie
());
mesOrder
.
setMaterialId
(
prodLaunchOrder
.
getMaterialId
());
mesOrder
.
setQuantity
((
long
)
prodLaunchOrder
.
getQuantity
());
mesOrder
.
setDemandStartDate
(
prodLaunchOrder
.
getStartDate
());
mesOrder
.
setDemandFinishDate
(
prodLaunchOrder
.
getEndDate
());
mesOrder
.
setRoutingId
(
prodLaunchOrder
.
getRoutingId
()
!=
null
?
Long
.
valueOf
(
prodLaunchOrder
.
getRoutingId
())
:
null
);
mesOrder
.
setProductCode
(
prodLaunchOrder
.
getMaterialCode
());
mesOrder
.
setStatus
(
1L
);
// Default status
mesOrderList
.
add
(
mesOrder
);
}
boolean
saved
=
mesOrderService
.
saveBatch
(
mesOrderList
);
if
(
saved
)
{
log
.
info
(
"插入 {} 条数据到mes_order"
,
mesOrderList
.
size
());
}
else
{
log
.
error
(
"插入失败"
);
return
R
.
failed
(
"插入mes_order失败"
);
}
List
<
ProdProcessExec
>
processExecList
=
prodProcessExecService
.
lambdaQuery
()
.
eq
(
ProdProcessExec:
:
getSceneId
,
sceneId
)
.
list
();
// 遍历GAScheduleResult结果并转换为dispatch
List
<
Dispatch
>
dispatches
=
new
ArrayList
<>();
for
(
GAScheduleResult
gaResult
:
chromosome
.
getResult
())
{
ProdProcessExec
prodProcessExec
=
processExecList
.
stream
()
.
filter
(
processExec
->
processExec
.
getExecId
().
equals
(
gaResult
.
getExecId
()))
.
findFirst
()
.
orElse
(
null
);
Dispatch
dispatch
=
new
Dispatch
();
// 更新相关字段
dispatch
.
setENof
(
gaResult
.
getOrderId
());
dispatch
.
setQuantity
(
gaResult
.
getQuantity
());
LocalDateTime
baseTime
=
chromosome
.
getBaseTime
()
!=
null
?
chromosome
.
getBaseTime
()
:
LocalDateTime
.
now
();
dispatch
.
setBeginTime
(
baseTime
.
plusSeconds
(
gaResult
.
getStartTime
()));
dispatch
.
setEndTime
(
baseTime
.
plusSeconds
(
gaResult
.
getEndTime
()));
dispatch
.
setENof
(
gaResult
.
getOrderId
());
// 设置状态等其他字段
dispatch
.
setTaskSeq
(
prodProcessExec
.
getTaskSeq
());
dispatch
.
setMesCode
(
gaResult
.
getOrderId
());
dispatch
.
setRoutingDetailId
(
prodProcessExec
.
getRoutingDetailId
());
dispatch
.
setOpe
(
prodProcessExec
.
getRoutingDetailName
());
// 添加到列表中
dispatches
.
add
(
dispatch
);
}
// 批量保存到数据库
boolean
savedDispatch
=
dispatchService
.
saveOrUpdateBatch
(
dispatches
);
if
(
savedDispatch
)
{
return
R
.
ok
(
"计划下发成功,共处理 "
+
dispatches
.
size
()
+
" 条记录"
);
}
else
{
return
R
.
failed
(
"保存到数据库失败"
);
}
}
catch
(
NumberFormatException
e
)
{
log
.
error
(
"数据转换失败,场景ID: "
+
sceneId
,
e
);
return
R
.
failed
(
"数据转换失败,请检查数据格式: "
+
e
.
getMessage
());
}
catch
(
Exception
e
)
{
log
.
error
(
"下发计划失败,场景ID: "
+
sceneId
,
e
);
return
R
.
failed
(
"下发计划失败: "
+
e
.
getMessage
());
}
}
/**
◦ 处理订单数据:批量转换ProdOrderMain到ProdLaunchOrder
...
...
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
343f8a88
...
...
@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.ChronoUnit
;
import
java.util.*
;
...
...
@@ -775,4 +776,129 @@ order.setDueDate(LocalDateTime.of(2025, 12, 1,0,0,0));
// 注意:tasks 字段需要在其他地方设置,因为 Machine 类中没有任务信息
return
machineVO
;
}
public
List
<
Machine
>
InitCalendarToAllMachines1
(
String
SceneId
)
{
// 按设备分组
List
<
ProdEquipment
>
ProdEquipments
=
_prodEquipmentService
.
lambdaQuery
()
.
eq
(
ProdEquipment:
:
getSceneId
,
SceneId
)
.
list
();
List
<
Long
>
MachineIds
=
ProdEquipments
.
stream
()
.
map
(
ProdEquipment:
:
getEquipId
)
.
distinct
()
.
sorted
()
.
collect
(
Collectors
.
toList
());
List
<
Machine
>
machines
=
new
ArrayList
<>();
for
(
Long
id
:
MachineIds
)
{
Machine
machine
=
new
Machine
();
machine
.
setId
(
id
);
machines
.
add
(
machine
);
}
//节假日
List
<
MesHoliday
>
holidays
=
_MesHolidayService
.
list
();
LambdaQueryWrapper
<
ProdEquipSpecialCal
>
ProdEquipSpecialCalWrapper
=
new
LambdaQueryWrapper
<>();
ProdEquipSpecialCalWrapper
.
eq
(
ProdEquipSpecialCal:
:
getSceneId
,
SceneId
);
List
<
PlanResource
>
PlanResources
=
_PlanResourceService
.
lambdaQuery
()
.
eq
(
PlanResource:
:
getIsdeleted
,
0
)
.
list
();
List
<
ProdEquipSpecialCal
>
ProdEquipSpecialCals
=
_prodEquipSpecialCalService
.
list
(
ProdEquipSpecialCalWrapper
);
List
<
MesShiftWorkSched
>
MesShiftWorkScheds
=
_MesShiftWorkSchedService
.
lambdaQuery
()
.
eq
(
MesShiftWorkSched:
:
getIsdeleted
,
0
).
list
();
if
(
machines
==
null
)
{
return
null
;
}
for
(
Machine
machine
:
machines
)
{
// 确保维护窗口列表不为null
if
(
machine
.
getMaintenanceWindows
()
==
null
)
{
machine
.
setMaintenanceWindows
(
new
ArrayList
<>());
}
List
<
ProdEquipSpecialCal
>
machineProdEquipSpecialCals
=
ProdEquipSpecialCals
.
stream
()
.
filter
(
t
->
t
.
getEquipId
()
==
machine
.
getId
()&&
t
.
getReferenceType
()==
1
)
.
collect
(
Collectors
.
toList
());
List
<
Shift
>
shifts1
=
new
ArrayList
<>();
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
machineProdEquipSpecialCals
)
{
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
.
filter
(
t
->
(
long
)
t
.
getWeekWorkSchedId
()
==
machineProdEquipSpecialCal
.
getReferenceId
())
.
collect
(
Collectors
.
toList
());
List
<
Shift
>
Shifts
=
mergeShiftData
(
ShiftWorkScheds
);
for
(
Shift
shift
:
Shifts
)
{
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setStartDate
(
machineProdEquipSpecialCal
.
getStartDate
());
shift
.
setEndDate
(
machineProdEquipSpecialCal
.
getEndDate
());
shifts1
.
add
(
shift
);
}
}
// 转换为列表返回
List
<
Shift
>
result
=
new
ArrayList
<>();
for
(
Shift
shift
:
shifts1
)
{
// 处理跨天班次(开始时间晚于结束时间的情况,如 7:30 到 3:30)
if
(
shift
.
getEndTime
().
isBefore
(
shift
.
getStartTime
()))
{
// 创建第一天的班次 (开始时间到24:00)
Shift
firstShift
=
new
Shift
();
firstShift
.
setStartTime
(
shift
.
getStartTime
());
firstShift
.
setEndTime
(
LocalTime
.
of
(
23
,
59
,
59
));
// 23:59:59代替24:00
firstShift
.
setDays
(
new
HashSet
<>(
shift
.
getDays
()));
firstShift
.
setStatus
(
shift
.
getStatus
());
// 创建第二天的班次 (00:00到结束时间)
Shift
secondShift
=
new
Shift
();
secondShift
.
setStartTime
(
LocalTime
.
MIDNIGHT
);
secondShift
.
setEndTime
(
shift
.
getEndTime
());
secondShift
.
setDays
(
new
HashSet
<>(
shift
.
getDays
()));
secondShift
.
setStatus
(
shift
.
getStatus
());
result
.
add
(
firstShift
);
result
.
add
(
secondShift
);
}
else
{
// 正常班次直接添加
result
.
add
(
shift
);
}
}
machine
.
setShifts
(
result
);
List
<
ProdEquipSpecialCal
>
Holidays
=
ProdEquipSpecialCals
.
stream
()
.
filter
(
t
->
t
.
getEquipId
()
==
machine
.
getId
()&&
t
.
getReferenceType
()==
2
)
.
collect
(
Collectors
.
toList
());
List
<
Holiday
>
Holidays1
=
new
ArrayList
<>();
for
(
ProdEquipSpecialCal
machineProdEquipSpecialCal
:
Holidays
)
{
Holiday
holiday
=
new
Holiday
();
holiday
.
setStart
(
machineProdEquipSpecialCal
.
getStartDate
());
holiday
.
setEnd
(
machineProdEquipSpecialCal
.
getEndDate
());
Holidays1
.
add
(
holiday
);
}
machine
.
setHolidays
(
Holidays1
);
}
return
machines
;
}
}
\ No newline at end of file
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