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
f8e92392
Commit
f8e92392
authored
Dec 25, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改排产工单为移入排产人
parent
4967ea77
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
223 additions
and
13 deletions
+223
-13
FileHelper.java
src/main/java/com/aps/common/util/FileHelper.java
+10
-2
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+2
-2
ApsTimeConfig.java
src/main/java/com/aps/entity/ApsTimeConfig.java
+1
-0
Machine.java
src/main/java/com/aps/entity/basic/Machine.java
+1
-1
GeneticDecoder.java
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
+17
-7
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+19
-1
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+173
-0
No files found.
src/main/java/com/aps/common/util/FileHelper.java
View file @
f8e92392
...
...
@@ -13,7 +13,15 @@ public class FileHelper {
public
static
void
writeLogFile
(
String
message
)
{
String
date
=
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyyMMdd"
))+
"-"
;
try
(
PrintWriter
writer
=
new
PrintWriter
(
new
FileWriter
(
LOG_FILE_PATH
+
date
+
LOG_FILE
,
true
)))
{
// 确保目录存在
java
.
io
.
File
logDir
=
new
java
.
io
.
File
(
LOG_FILE_PATH
);
if
(!
logDir
.
exists
())
{
logDir
.
mkdirs
();
// 创建目录(包括父目录)
}
String
filePath
=
LOG_FILE_PATH
+
date
+
LOG_FILE
;
try
(
PrintWriter
writer
=
new
PrintWriter
(
new
FileWriter
(
filePath
,
true
)))
{
String
timestamp
=
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
));
writer
.
println
(
"["
+
timestamp
+
"] "
+
message
);
System
.
out
.
println
(
"["
+
timestamp
+
"] "
+
message
);
...
...
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
f8e92392
...
...
@@ -796,7 +796,7 @@ public class ResourceGanttController {
return
new
ArrayList
<>();
}
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines
1
(
sceneId
);
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines
2
(
sceneId
);
// 转换为 ResourceGanttVO 格式
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
...
...
@@ -825,7 +825,7 @@ public class ResourceGanttController {
throw
new
RuntimeException
(
"未找到对应的场景文件"
);
}
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines
1
(
sceneId
);
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines
2
(
sceneId
);
// 转换为 ResourceGanttVO 格式
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
...
...
src/main/java/com/aps/entity/ApsTimeConfig.java
View file @
f8e92392
...
...
@@ -16,4 +16,5 @@ public class ApsTimeConfig {
private
BigDecimal
freezeDate
;
private
BigDecimal
startCount
;
private
BigDecimal
endCount
;
private
LocalDateTime
deadlineTime
;
}
\ No newline at end of file
src/main/java/com/aps/entity/basic/Machine.java
View file @
f8e92392
...
...
@@ -21,7 +21,7 @@ public class Machine {
private
double
actualWorkTime
;
private
double
rate
;
private
String
department
;
// 事件回调
private
Consumer
<
Void
>
shiftsChanged
;
...
...
src/main/java/com/aps/service/Algorithm/GeneticDecoder.java
View file @
f8e92392
...
...
@@ -2,6 +2,7 @@ package com.aps.service.Algorithm;
import
com.aps.common.util.FileHelper
;
import
com.aps.common.util.ProductionDeepCopyUtil
;
import
com.aps.common.util.SpringContextUtil
;
import
com.aps.entity.Algorithm.*
;
import
com.aps.entity.DiscreteParameterDuration
;
import
com.aps.entity.ProdEquipment
;
...
...
@@ -10,7 +11,9 @@ import com.aps.entity.basic.*;
import
com.aps.service.DiscreteParameterDurationService
;
import
com.aps.service.DiscreteParameterMatrixService
;
import
com.aps.service.plan.MachineSchedulerService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.server.DelegatingServerHttpResponse
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
...
...
@@ -24,6 +27,9 @@ import java.util.concurrent.locks.ReentrantLock;
* 作者:佟礼
* 时间:2025-11-24
*/
public
class
GeneticDecoder
{
private
final
Map
<
String
,
Chromosome
>
decodingCache
=
new
HashMap
<>();
// 缓存大小限制
...
...
@@ -41,9 +47,10 @@ public class GeneticDecoder {
private
MachineCalculator
machineCalculator
;
private
List
<
OrderMaterialRequirement
>
orderMaterials
;
private
DiscreteParameterMatrixService
discreteParameterMatrixService
;
private
DiscreteParameterMatrixService
discreteParameterMatrixService
;
public
GeneticDecoder
(
GlobalParam
globalParam
,
LocalDateTime
baseTime
,
List
<
Machine
>
machines
,
List
<
Order
>
orders
,
List
<
Material
>
materials
,
MachineSchedulerService
machineScheduler
,
List
<
OrderMaterialRequirement
>
_orderMaterials
)
{
this
.
baseTime
=
baseTime
;
...
...
@@ -830,14 +837,17 @@ if(finishedOrder==null||finishedOrder.size()==0)
//离散参数
// prev.getDiscreteParameter()
setupTime
=
(
prev
.
getProductId
()
!=
operation
.
getProductId
())
?
(
int
)
discreteParameterMatrixService
.
getDiscreteParameterMatrixValue
(
prev
,
operation
)
:
0
;
// setupTime = (prev.getProductId() != operation.getProductId())
// ? (int) discreteParameterMatrixService.getDiscreteParameterMatrixValue(prev, operation)
// : 0;
DiscreteParameterMatrixService
service
=
SpringContextUtil
.
getBean
(
DiscreteParameterMatrixService
.
class
);
if
(
service
!=
null
)
{
if
(
setupTime
>
0
)
{
System
.
out
.
println
(
"设备 "
+
machine
.
getId
()
+
" 需要换型,因为产品从 "
+
prev
.
getProductId
()
+
" 变更为 "
+
operation
.
getProductId
());
double
discreteParameterMatrixValue
=
service
.
getDiscreteParameterMatrixValue
(
prev
,
operation
);
setupTime
=
(
int
)
discreteParameterMatrixValue
;
System
.
out
.
println
(
setupTime
+
"换型时间"
+
"huanxingshijian "
);
}
}
...
...
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
f8e92392
...
...
@@ -76,6 +76,9 @@ public class LanuchServiceImpl implements LanuchService {
DispatchService
dispatchService
;
@Autowired
RoutingDiscreteParamService
routingDiscreteParamService
;
@Autowired
MesScheduleService
mesScheduleService
;
/**
* 生成场景数据
*
...
...
@@ -107,10 +110,25 @@ public class LanuchServiceImpl implements LanuchService {
prodEquipSpecialCalService
.
copyFromEquipCapacityDef
(
sceneId
);
List
<
MesSchedule
>
mesSchedules
=
mesScheduleService
.
lambdaQuery
()
.
eq
(
MesSchedule:
:
getIsDeleted
,
0
)
.
eq
(
MesSchedule:
:
getScheduleUserId
,
username
)
.
list
();
// 2. 获取工单列表
List
<
String
>
apsOrderIds
=
mesSchedules
.
stream
()
.
map
(
MesSchedule:
:
getApsOrderId
)
.
filter
(
Objects:
:
nonNull
)
.
collect
(
Collectors
.
toList
());
List
<
ApsOrder
>
apsOrders
=
apsOrderService
.
lambdaQuery
()
.
eq
(
ApsOrder:
:
getIsdeleted
,
0
)
.
eq
(
ApsOrder:
:
getSchedulestatus
,
1
)
.
eq
(
ApsOrder:
:
getCreatoruserid
,
username
)
// .eq(ApsOrder::getCreatoruserid, username)
.
in
(
ApsOrder:
:
getId
,
apsOrderIds
)
.
list
();
if
(
CollectionUtils
.
isEmpty
(
apsOrders
))
{
throw
new
SceneGenerationException
(
"工单列表不能为空"
);
...
...
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
f8e92392
...
...
@@ -1570,5 +1570,178 @@ private GlobalParam InitGlobalParam()
}
public
List
<
Machine
>
InitCalendarToAllMachines2
(
String
SceneId
)
{
GlobalParam
globalParam
=
InitGlobalParam
();
boolean
IsUseCalendar
=
globalParam
.
isIsUseCalendar
();
// 按设备分组
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
<>();
List
<
PlanResource
>
PlanResources
=
_PlanResourceService
.
lambdaQuery
()
.
eq
(
PlanResource:
:
getIsdeleted
,
0
)
.
list
();
for
(
Long
id
:
MachineIds
)
{
Machine
machine
=
new
Machine
();
machine
.
setId
(
id
);
machines
.
add
(
machine
);
}
//节假日
// List<MesHoliday> holidays= _MesHolidayService.list();
if
(
IsUseCalendar
)
{
LambdaQueryWrapper
<
ProdEquipSpecialCal
>
ProdEquipSpecialCalWrapper
=
new
LambdaQueryWrapper
<>();
ProdEquipSpecialCalWrapper
.
eq
(
ProdEquipSpecialCal:
:
getSceneId
,
SceneId
);
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
.
getPlanResourceId
()
!=
null
&&
t
.
getPlanResourceId
()
==
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
);
shift
.
setSpecial
(
true
);
}
}
PlanResource
PlanResource
=
PlanResources
.
stream
()
.
filter
(
t
->
t
.
getId
()
==
machine
.
getId
())
.
findFirst
().
orElse
(
null
);
if
(
PlanResource
!=
null
)
{
machine
.
setCode
(
PlanResource
.
getReferenceCode
());
machine
.
setName
(
PlanResource
.
getTitle
());
machine
.
setDepartment
(
PlanResource
.
getDepartTitle
());
List
<
MesShiftWorkSched
>
ShiftWorkScheds
=
MesShiftWorkScheds
.
stream
()
.
filter
(
t
->
(
long
)
t
.
getWeekWorkSchedId
()
==
PlanResource
.
getWorkSchedId
())
.
collect
(
Collectors
.
toList
());
List
<
Shift
>
Shifts
=
mergeShiftData
(
ShiftWorkScheds
);
for
(
Shift
shift
:
Shifts
)
{
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setSpecial
(
false
);
shift
.
setStartDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setEndDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shifts1
.
add
(
shift
);
}
}
if
(
shifts1
==
null
||
shifts1
.
size
()
==
0
)
{
throw
new
RuntimeException
(
String
.
format
(
"设备%s没有工作日历"
,
machine
.
getCode
().
concat
(
"_"
).
concat
(
machine
.
getName
())));
}
// 转换为列表返回
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
());
firstShift
.
setStartDate
(
shift
.
getStartDate
());
firstShift
.
setEndDate
(
shift
.
getEndDate
());
firstShift
.
setSpecial
(
shift
.
isSpecial
());
// 创建第二天的班次 (00:00到结束时间)
Shift
secondShift
=
new
Shift
();
secondShift
.
setStartTime
(
LocalTime
.
MIDNIGHT
);
secondShift
.
setEndTime
(
shift
.
getEndTime
());
secondShift
.
setDays
(
new
HashSet
<>(
shift
.
getDays
()));
secondShift
.
setStatus
(
shift
.
getStatus
());
secondShift
.
setStartDate
(
shift
.
getStartDate
().
plusDays
(
1
));
secondShift
.
setEndDate
(
shift
.
getEndDate
().
plusDays
(
1
));
secondShift
.
setSpecial
(
shift
.
isSpecial
());
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
);
}
}
else
{
for
(
Machine
machine
:
machines
)
{
List
<
Shift
>
shifts1
=
new
ArrayList
<>();
Shift
shift
=
new
Shift
();
shift
.
setMachineId
(
machine
.
getId
());
shift
.
setStartTime
(
LocalTime
.
of
(
0
,
0
,
0
));
shift
.
setEndTime
(
LocalTime
.
of
(
23
,
59
,
59
));
HashSet
days
=
new
HashSet
<>();
days
.
add
(
1
);
days
.
add
(
2
);
days
.
add
(
3
);
days
.
add
(
4
);
days
.
add
(
5
);
days
.
add
(
6
);
days
.
add
(
0
);
shift
.
setDays
(
days
);
shift
.
setSpecial
(
false
);
shift
.
setStartDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shift
.
setEndDate
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
));
shifts1
.
add
(
shift
);
machine
.
setShifts
(
shifts1
);
}
}
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