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
582c9a94
Commit
582c9a94
authored
Dec 15, 2025
by
DESKTOP-VKRD9QF\Administration
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
返回数据格式修改
parent
66d8a496
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
2333 additions
and
1953 deletions
+2333
-1953
chromosome_result_7E99857F64A44780AF06C326CAEE9682.json
...t/chromosome_result_7E99857F64A44780AF06C326CAEE9682.json
+1615
-1615
GlobalExceptionHandler.java
...java/com/aps/common/exception/GlobalExceptionHandler.java
+204
-0
SceneGenerationException.java
...va/com/aps/common/exception/SceneGenerationException.java
+16
-0
SwaggerMapParamConfig.java
src/main/java/com/aps/config/SwaggerMapParamConfig.java
+18
-1
LanuchController.java
src/main/java/com/aps/controller/LanuchController.java
+3
-37
ResourceGanttController.java
...ava/com/aps/controller/gantt/ResourceGanttController.java
+125
-29
LanuchServiceImpl.java
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
+141
-271
PlanResultService.java
src/main/java/com/aps/service/plan/PlanResultService.java
+211
-0
No files found.
result/chromosome_result_7E99857F64A44780AF06C326CAEE9682.json
View file @
582c9a94
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/main/java/com/aps/common/exception/GlobalExceptionHandler.java
0 → 100644
View file @
582c9a94
package
com
.
aps
.
common
.
exception
;
import
com.aps.common.util.R
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.ibatis.binding.BindingException
;
import
org.mybatis.spring.MyBatisSystemException
;
import
org.springframework.dao.DataAccessException
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.converter.HttpMessageNotReadableException
;
import
org.springframework.validation.BindException
;
import
org.springframework.validation.FieldError
;
import
org.springframework.web.HttpMediaTypeNotSupportedException
;
import
org.springframework.web.HttpRequestMethodNotSupportedException
;
import
org.springframework.web.bind.MethodArgumentNotValidException
;
import
org.springframework.web.bind.MissingServletRequestParameterException
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseStatus
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
import
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException
;
import
org.springframework.web.servlet.NoHandlerFoundException
;
import
java.sql.SQLException
;
import
java.util.Objects
;
/**
* 全局异常处理器
* 统一处理系统中的各种异常,返回统一格式的错误信息
*/
@Slf4j
@RestControllerAdvice
public
class
GlobalExceptionHandler
{
/**
* 处理非法参数异常
*/
@ExceptionHandler
(
IllegalArgumentException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleIllegalArgumentException
(
IllegalArgumentException
e
)
{
log
.
debug
(
"参数校验失败: {}"
,
e
.
getMessage
());
return
R
.
failed
(
400
,
e
.
getMessage
());
}
/**
* 处理场景生成异常
*/
@ExceptionHandler
(
SceneGenerationException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleSceneGenerationException
(
SceneGenerationException
e
)
{
log
.
debug
(
"场景生成异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
400
,
e
.
getMessage
());
}
/**
* 处理自定义业务异常
*/
@ExceptionHandler
(
RuntimeException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleRuntimeException
(
RuntimeException
e
)
{
log
.
debug
(
"运行时异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
500
,
e
.
getMessage
());
}
/**
* 处理MyBatis绑定异常
*/
@ExceptionHandler
(
BindingException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleBindingException
(
BindingException
e
)
{
log
.
debug
(
"MyBatis绑定异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
500
,
"数据绑定异常: "
+
e
.
getMessage
());
}
/**
* 处理MyBatis系统异常
*/
@ExceptionHandler
(
MyBatisSystemException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleMyBatisSystemException
(
MyBatisSystemException
e
)
{
log
.
debug
(
"MyBatis系统异常: {}"
,
e
.
getMessage
());
Throwable
cause
=
e
.
getCause
();
if
(
cause
!=
null
&&
cause
.
getMessage
().
contains
(
"ORA-17004"
))
{
return
R
.
failed
(
500
,
"数据库列类型无效,请检查查询参数是否正确"
);
}
return
R
.
failed
(
500
,
"数据库操作异常: "
+
(
cause
!=
null
?
cause
.
getMessage
()
:
e
.
getMessage
()));
}
/**
* 处理SQL异常
*/
@ExceptionHandler
(
SQLException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleSQLException
(
SQLException
e
)
{
log
.
debug
(
"SQL异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
500
,
"数据库访问异常: "
+
e
.
getMessage
());
}
/**
* 处理数据访问异常
*/
@ExceptionHandler
(
DataAccessException
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleDataAccessException
(
DataAccessException
e
)
{
log
.
debug
(
"数据访问异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
500
,
"数据访问异常: "
+
e
.
getMessage
());
}
/**
* 处理参数验证异常(MethodArgumentNotValidException)
*/
@ExceptionHandler
(
MethodArgumentNotValidException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleMethodArgumentNotValidException
(
MethodArgumentNotValidException
e
)
{
log
.
debug
(
"参数验证异常: {}"
,
e
.
getMessage
());
FieldError
fieldError
=
e
.
getBindingResult
().
getFieldError
();
if
(
fieldError
!=
null
)
{
return
R
.
failed
(
400
,
Objects
.
requireNonNull
(
fieldError
.
getDefaultMessage
()));
}
return
R
.
failed
(
400
,
"参数验证失败"
);
}
/**
* 处理参数绑定异常(BindException)
*/
@ExceptionHandler
(
BindException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleBindException
(
BindException
e
)
{
log
.
debug
(
"参数绑定异常: {}"
,
e
.
getMessage
());
FieldError
fieldError
=
e
.
getBindingResult
().
getFieldError
();
if
(
fieldError
!=
null
)
{
return
R
.
failed
(
400
,
Objects
.
requireNonNull
(
fieldError
.
getDefaultMessage
()));
}
return
R
.
failed
(
400
,
"参数绑定失败"
);
}
/**
* 处理请求参数缺失异常
*/
@ExceptionHandler
(
MissingServletRequestParameterException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleMissingServletRequestParameterException
(
MissingServletRequestParameterException
e
)
{
log
.
debug
(
"请求参数缺失: {}"
,
e
.
getMessage
());
return
R
.
failed
(
400
,
"缺少必要参数: "
+
e
.
getParameterName
());
}
/**
* 处理参数类型不匹配异常
*/
@ExceptionHandler
(
MethodArgumentTypeMismatchException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleMethodArgumentTypeMismatchException
(
MethodArgumentTypeMismatchException
e
)
{
log
.
debug
(
"参数类型不匹配: {}"
,
e
.
getMessage
());
return
R
.
failed
(
400
,
"参数类型不匹配: "
+
e
.
getName
());
}
/**
* 处理HTTP消息不可读异常
*/
@ExceptionHandler
(
HttpMessageNotReadableException
.
class
)
@ResponseStatus
(
HttpStatus
.
BAD_REQUEST
)
public
R
<
Void
>
handleHttpMessageNotReadableException
(
HttpMessageNotReadableException
e
)
{
log
.
debug
(
"HTTP消息不可读: {}"
,
e
.
getMessage
());
return
R
.
failed
(
400
,
"请求体格式错误"
);
}
/**
* 处理HTTP请求方法不支持异常
*/
@ExceptionHandler
(
HttpRequestMethodNotSupportedException
.
class
)
@ResponseStatus
(
HttpStatus
.
METHOD_NOT_ALLOWED
)
public
R
<
Void
>
handleHttpRequestMethodNotSupportedException
(
HttpRequestMethodNotSupportedException
e
)
{
log
.
debug
(
"HTTP请求方法不支持: {}"
,
e
.
getMessage
());
return
R
.
failed
(
405
,
"请求方法不支持: "
+
e
.
getMethod
());
}
/**
* 处理HTTP媒体类型不支持异常
*/
@ExceptionHandler
(
HttpMediaTypeNotSupportedException
.
class
)
@ResponseStatus
(
HttpStatus
.
UNSUPPORTED_MEDIA_TYPE
)
public
R
<
Void
>
handleHttpMediaTypeNotSupportedException
(
HttpMediaTypeNotSupportedException
e
)
{
log
.
debug
(
"HTTP媒体类型不支持: {}"
,
e
.
getMessage
());
return
R
.
failed
(
415
,
"媒体类型不支持: "
+
e
.
getContentType
());
}
/**
* 处理404异常
*/
@ExceptionHandler
(
NoHandlerFoundException
.
class
)
@ResponseStatus
(
HttpStatus
.
NOT_FOUND
)
public
R
<
Void
>
handleNoHandlerFoundException
(
NoHandlerFoundException
e
)
{
log
.
debug
(
"404异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
404
,
"请求的资源不存在: "
+
e
.
getRequestURL
());
}
/**
* 处理其他未捕获的异常
*/
@ExceptionHandler
(
Exception
.
class
)
@ResponseStatus
(
HttpStatus
.
INTERNAL_SERVER_ERROR
)
public
R
<
Void
>
handleException
(
Exception
e
)
{
log
.
debug
(
"未知异常: {}"
,
e
.
getMessage
());
return
R
.
failed
(
500
,
"系统异常,请联系管理员"
);
}
}
\ No newline at end of file
src/main/java/com/aps/common/exception/SceneGenerationException.java
0 → 100644
View file @
582c9a94
package
com
.
aps
.
common
.
exception
;
/**
* 场景生成异常类
* 用于标识场景生成过程中的业务异常
*/
public
class
SceneGenerationException
extends
RuntimeException
{
public
SceneGenerationException
(
String
message
)
{
super
(
message
);
}
public
SceneGenerationException
(
String
message
,
Throwable
cause
)
{
super
(
message
,
cause
);
}
}
\ No newline at end of file
src/main/java/com/aps/config/SwaggerMapParamConfig.java
View file @
582c9a94
...
@@ -122,6 +122,18 @@ public class SwaggerMapParamConfig {
...
@@ -122,6 +122,18 @@ public class SwaggerMapParamConfig {
"}"
"}"
));
));
break
;
break
;
case
"getResourceGantt"
:
case
"getProductGantt"
:
properties
.
put
(
"sceneId"
,
new
StringSchema
().
description
(
"场景ID"
).
example
(
"B571EF6682DB463AB2977B1055A74112"
));
examples
.
put
(
"示例"
,
createExample
(
"请求示例"
,
"{\n"
+
" \"sceneId\": \"B571EF6682DB463AB2977B1055A74112\"\n"
+
"}"
));
break
;
}
}
if
(!
properties
.
isEmpty
())
{
if
(!
properties
.
isEmpty
())
{
...
@@ -160,6 +172,11 @@ public class SwaggerMapParamConfig {
...
@@ -160,6 +172,11 @@ public class SwaggerMapParamConfig {
return
"删除场景请求参数"
;
return
"删除场景请求参数"
;
case
"getAllScene"
:
case
"getAllScene"
:
return
"获取场景列表请求参数"
;
return
"获取场景列表请求参数"
;
case
"getResourceGantt"
:
case
"getProductGantt"
:
return
"获取资源甘特图请求参数"
;
default
:
default
:
return
"请求参数"
;
return
"请求参数"
;
}
}
...
...
src/main/java/com/aps/controller/LanuchController.java
View file @
582c9a94
...
@@ -37,10 +37,6 @@ public class LanuchController {
...
@@ -37,10 +37,6 @@ public class LanuchController {
String
sceneName
=
params
.
get
(
"sceneName"
);
String
sceneName
=
params
.
get
(
"sceneName"
);
String
userId
=
params
.
get
(
"userId"
);
String
userId
=
params
.
get
(
"userId"
);
if
(
sceneName
==
null
||
sceneName
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"场景名称不能为空"
);
}
return
lanuchService
.
lanuch
(
sceneName
,
userId
);
return
lanuchService
.
lanuch
(
sceneName
,
userId
);
}
}
...
@@ -52,16 +48,8 @@ public class LanuchController {
...
@@ -52,16 +48,8 @@ public class LanuchController {
public
R
<
Chromosome
>
schedule
(
@RequestBody
Map
<
String
,
String
>
params
)
{
public
R
<
Chromosome
>
schedule
(
@RequestBody
Map
<
String
,
String
>
params
)
{
String
sceneId
=
params
.
get
(
"sceneId"
);
String
sceneId
=
params
.
get
(
"sceneId"
);
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"场景ID不能为空"
);
}
try
{
Chromosome
scheduleChromosomes
=
planResultService
.
schedule
(
sceneId
);
Chromosome
scheduleChromosomes
=
planResultService
.
schedule
(
sceneId
);
return
R
.
ok
(
scheduleChromosomes
);
return
R
.
ok
(
scheduleChromosomes
);
}
catch
(
Exception
e
)
{
return
R
.
failed
(
"排程执行失败: "
+
e
.
getMessage
());
}
}
}
/**
/**
...
@@ -74,16 +62,6 @@ public class LanuchController {
...
@@ -74,16 +62,6 @@ public class LanuchController {
String
newSceneName
=
params
.
get
(
"newSceneName"
);
String
newSceneName
=
params
.
get
(
"newSceneName"
);
String
userId
=
params
.
get
(
"userId"
);
String
userId
=
params
.
get
(
"userId"
);
if
(
oldSceneId
==
null
||
oldSceneId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"原场景ID不能为空"
);
}
if
(
newSceneName
==
null
||
newSceneName
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"新场景名称不能为空"
);
}
if
(
userId
==
null
||
userId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"用户名不能为空"
);
}
return
lanuchService
.
copyScene
(
oldSceneId
,
userId
,
newSceneName
);
return
lanuchService
.
copyScene
(
oldSceneId
,
userId
,
newSceneName
);
}
}
...
@@ -95,10 +73,6 @@ public class LanuchController {
...
@@ -95,10 +73,6 @@ public class LanuchController {
public
R
<
String
>
exportPlan
(
@RequestBody
Map
<
String
,
String
>
params
)
{
public
R
<
String
>
exportPlan
(
@RequestBody
Map
<
String
,
String
>
params
)
{
String
sceneId
=
params
.
get
(
"sceneId"
);
String
sceneId
=
params
.
get
(
"sceneId"
);
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"场景ID不能为空"
);
}
return
lanuchService
.
exportPlan
(
sceneId
);
return
lanuchService
.
exportPlan
(
sceneId
);
}
}
...
@@ -110,12 +84,8 @@ public class LanuchController {
...
@@ -110,12 +84,8 @@ public class LanuchController {
public
R
<
Boolean
>
deleteScene
(
@RequestBody
Map
<
String
,
String
>
params
)
{
public
R
<
Boolean
>
deleteScene
(
@RequestBody
Map
<
String
,
String
>
params
)
{
String
sceneId
=
params
.
get
(
"sceneId"
);
String
sceneId
=
params
.
get
(
"sceneId"
);
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"场景ID不能为空"
);
}
boolean
result
=
prodSceneConfigService
.
deleteSceneById
(
sceneId
);
boolean
result
=
prodSceneConfigService
.
deleteSceneById
(
sceneId
);
return
result
?
R
.
ok
(
true
)
:
R
.
failed
(
"删除场景失败"
);
return
result
?
R
.
ok
(
true
)
:
R
.
ok
(
false
,
"删除场景失败"
);
}
}
/**
/**
...
@@ -126,10 +96,6 @@ public class LanuchController {
...
@@ -126,10 +96,6 @@ public class LanuchController {
public
R
<
List
<
ProdSceneConfig
>>
getAllScene
(
@RequestBody
Map
<
String
,
String
>
params
)
{
public
R
<
List
<
ProdSceneConfig
>>
getAllScene
(
@RequestBody
Map
<
String
,
String
>
params
)
{
String
userId
=
params
.
get
(
"userId"
);
String
userId
=
params
.
get
(
"userId"
);
if
(
userId
==
null
||
userId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"用户ID不能为空"
);
}
List
<
ProdSceneConfig
>
scenes
=
prodSceneConfigService
.
lambdaQuery
()
List
<
ProdSceneConfig
>
scenes
=
prodSceneConfigService
.
lambdaQuery
()
.
eq
(
ProdSceneConfig:
:
getCreateUser
,
userId
)
.
eq
(
ProdSceneConfig:
:
getCreateUser
,
userId
)
.
list
();
.
list
();
...
...
src/main/java/com/aps/controller/gantt/ResourceGanttController.java
View file @
582c9a94
package
com
.
aps
.
controller
.
gantt
;
package
com
.
aps
.
controller
.
gantt
;
import
com.aps.common.util.R
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.Chromosome
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.entity.Algorithm.GAScheduleResult
;
import
com.aps.entity.basic.ScheduleChromosome
;
import
com.aps.entity.basic.ScheduleChromosome
;
...
@@ -22,6 +23,7 @@ import java.time.LocalDateTime;
...
@@ -22,6 +23,7 @@ import java.time.LocalDateTime;
import
java.time.temporal.ChronoUnit
;
import
java.time.temporal.ChronoUnit
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
@Slf4j
@Slf4j
...
@@ -464,35 +466,35 @@ public class ResourceGanttController {
...
@@ -464,35 +466,35 @@ public class ResourceGanttController {
//
@GetMapping
(
"/productGantt"
)
//
@GetMapping("/productGantt")
@Operation
(
summary
=
"获取资源甘特图数据"
,
description
=
"获取资源甘特图数据"
)
//
@Operation(summary = "获取资源甘特图数据", description = "获取资源甘特图数据")
public
List
<
ProductGanttVO
>
getProductGantt
(
@RequestParam
String
sceneId
)
{
//
public List<ProductGanttVO> getProductGantt(@RequestParam String sceneId) {
// 从PlanResultService获取ScheduleChromosome列表
//
// 从PlanResultService获取ScheduleChromosome列表
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
//
Chromosome schedule = sceneService.loadChromosomeFromFile(sceneId);
//
// 转换为 ResourceGanttVO 格式
//
// 转换为 ResourceGanttVO 格式
List
<
ProductGanttVO
>
productGanttVOList
=
new
ArrayList
<>();
//
List<ProductGanttVO> productGanttVOList= new ArrayList<>();
List
<
ProductGanttVO
>
resourceGanttVOs
=
convertToProductGanttVO1
(
schedule
);
//
List<ProductGanttVO> resourceGanttVOs = convertToProductGanttVO1(schedule);
productGanttVOList
.
addAll
(
resourceGanttVOs
);
//
productGanttVOList.addAll(resourceGanttVOs);
//
return
productGanttVOList
;
//
return productGanttVOList;
}
//
}
//
//
@GetMapping
(
"/resourceGantt"
)
//
@GetMapping("/resourceGantt")
@Operation
(
summary
=
"获取资源甘特图数据"
,
description
=
"获取资源甘特图数据"
)
//
@Operation(summary = "获取资源甘特图数据", description = "获取资源甘特图数据")
public
List
<
ResourceGanttVO
>
getResourceGantt
(
@RequestParam
String
sceneId
)
{
//
public List<ResourceGanttVO> getResourceGantt(@RequestParam String sceneId) {
// 从PlanResultService获取ScheduleChromosome列表
//
// 从PlanResultService获取ScheduleChromosome列表
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
//
Chromosome schedule = sceneService.loadChromosomeFromFile(sceneId);
//
// 转换为 ResourceGanttVO 格式
//
// 转换为 ResourceGanttVO 格式
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
//
List<ResourceGanttVO> resourceGanttVOList = new ArrayList<>();
List
<
ResourceGanttVO
>
resourceGanttVOs
=
convertToResourceGanttVO1
(
schedule
);
//
List<ResourceGanttVO> resourceGanttVOs = convertToResourceGanttVO1(schedule);
resourceGanttVOList
.
addAll
(
resourceGanttVOs
);
//
resourceGanttVOList.addAll(resourceGanttVOs);
//
return
resourceGanttVOList
;
//
return resourceGanttVOList;
}
//
}
...
@@ -683,6 +685,100 @@ public class ResourceGanttController {
...
@@ -683,6 +685,100 @@ public class ResourceGanttController {
@GetMapping
(
"/productGantt"
)
@Operation
(
summary
=
"获取资源甘特图数据"
,
description
=
"获取资源甘特图数据"
)
public
List
<
ProductGanttVO
>
productGantt
(
@RequestParam
String
sceneId
)
{
// 从PlanResultService获取ScheduleChromosome列表
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
if
(
schedule
==
null
)
{
return
new
ArrayList
<>();
}
// 转换为 ProductGanttVO 格式
List
<
ProductGanttVO
>
productGanttVOList
=
new
ArrayList
<>();
List
<
ProductGanttVO
>
resourceGanttVOs
=
planResultService
.
convertToProductGanttVO1
(
schedule
);
productGanttVOList
.
addAll
(
resourceGanttVOs
);
return
productGanttVOList
;
}
@GetMapping
(
"/resourceGantt"
)
@Operation
(
summary
=
"获取资源甘特图数据"
,
description
=
"获取资源甘特图数据"
)
public
List
<
ResourceGanttVO
>
resourceGantt
(
@RequestParam
String
sceneId
)
{
// 从PlanResultService获取ScheduleChromosome列表
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
// 如果找不到对应的场景,返回空列表
if
(
schedule
==
null
)
{
return
new
ArrayList
<>();
}
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines1
(
schedule
.
getScenarioID
());
// 转换为 ResourceGanttVO 格式
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
List
<
ResourceGanttVO
>
resourceGanttVOs
=
planResultService
.
convertToResourceGanttVO1
(
schedule
,
machineList
);
resourceGanttVOList
.
addAll
(
resourceGanttVOs
);
return
resourceGanttVOList
;
}
@PostMapping
(
"/getResourceGantt"
)
@Operation
(
summary
=
"获取资源甘特图数据"
,
description
=
"获取资源甘特图数据"
)
public
R
<
List
<
ResourceGanttVO
>>
getResourceGantt
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
// 从参数中获取sceneId
String
sceneId
=
(
String
)
params
.
get
(
"sceneId"
);
// 校验sceneId是否存在
if
(
sceneId
==
null
||
sceneId
.
isEmpty
())
{
throw
new
IllegalArgumentException
(
"场景ID不能为空"
);
}
// 校验能否获取对应的文件
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
if
(
schedule
==
null
)
{
throw
new
RuntimeException
(
"未找到对应的场景文件"
);
}
List
<
Machine
>
machineList
=
planResultService
.
InitCalendarToAllMachines1
(
schedule
.
getScenarioID
());
// 转换为 ResourceGanttVO 格式
List
<
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
List
<
ResourceGanttVO
>
resourceGanttVOs
=
planResultService
.
convertToResourceGanttVO1
(
schedule
,
machineList
);
resourceGanttVOList
.
addAll
(
resourceGanttVOs
);
return
R
.
ok
(
resourceGanttVOList
);
}
@PostMapping
(
"/getProductGantt"
)
@Operation
(
summary
=
"获取产品甘特图数据"
,
description
=
"获取产品甘特图数据"
)
public
R
<
List
<
ProductGanttVO
>>
getProductGantt
(
@RequestBody
Map
<
String
,
Object
>
params
)
{
// 从参数中获取sceneId
String
sceneId
=
(
String
)
params
.
get
(
"sceneId"
);
// 校验sceneId是否存在
if
(
sceneId
==
null
||
sceneId
.
isEmpty
())
{
throw
new
IllegalArgumentException
(
"场景ID不能为空"
);
}
// 校验能否获取对应的文件
Chromosome
schedule
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
if
(
schedule
==
null
)
{
throw
new
RuntimeException
(
"未找到对应的场景文件"
);
}
// 转换为 ProductGanttVO 格式
List
<
ProductGanttVO
>
productGanttVOList
=
new
ArrayList
<>();
List
<
ProductGanttVO
>
resourceGanttVOs
=
planResultService
.
convertToProductGanttVO1
(
schedule
);
productGanttVOList
.
addAll
(
resourceGanttVOs
);
return
R
.
ok
(
productGanttVOList
);
}
...
...
src/main/java/com/aps/service/impl/LanuchServiceImpl.java
View file @
582c9a94
package
com
.
aps
.
service
.
impl
;
package
com
.
aps
.
service
.
impl
;
import
com.aps.common.exception.SceneGenerationException
;
import
com.aps.common.util.R
;
import
com.aps.common.util.R
;
import
com.aps.common.util.SnowFlackIdWorker
;
import
com.aps.common.util.SnowFlackIdWorker
;
import
com.aps.entity.*
;
import
com.aps.entity.*
;
...
@@ -76,68 +77,53 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -76,68 +77,53 @@ public class LanuchServiceImpl implements LanuchService {
@Autowired
@Autowired
RoutingDiscreteParamService
routingDiscreteParamService
;
RoutingDiscreteParamService
routingDiscreteParamService
;
/**
/**
◦ 生成场景数据
* 生成场景数据
*
*
*
*
◦ @param sceneName 场景名称
* @param sceneName 场景名称
* @param username 操作用户
◦ @param username 操作用户
* @return 处理结果
◦ @return 处理结果
*/
*/
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
R
<
String
>
lanuch
(
String
sceneName
,
String
username
)
{
public
R
<
String
>
lanuch
(
String
sceneName
,
String
username
)
{
try
{
// 参数校验
// 参数校验
if
(
sceneName
==
null
||
sceneName
.
trim
().
isEmpty
())
{
if
(
sceneName
==
null
||
sceneName
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"场景名称不能为空"
);
throw
new
IllegalArgumentException
(
"场景名称不能为空"
);
}
}
if
(
username
==
null
||
username
.
trim
().
isEmpty
())
{
throw
new
IllegalArgumentException
(
"用户ID不能为空"
);
}
// 1. 创建场景
// 1. 创建场景
String
sceneId
=
createScene
(
sceneName
,
username
);
String
sceneId
=
createScene
(
sceneName
,
username
);
if
(
sceneId
==
null
)
{
if
(
sceneId
==
null
)
{
return
R
.
failed
(
"场景名称已存在"
);
throw
new
RuntimeException
(
"场景名称已存在"
);
}
}
prodEquipSpecialCalService
.
copyFromEquipCapacityDef
(
sceneId
);
prodEquipSpecialCalService
.
copyFromEquipCapacityDef
(
sceneId
);
// List<ApsOrder> apsOrders = apsOrderService.lambdaQuery()
// .eq(ApsOrder::getIsdeleted, 0)
// .like(ApsOrder::getCode, "佟礼测试数据")
// .list();
List
<
ApsOrder
>
apsOrders
=
apsOrderService
.
lambdaQuery
()
List
<
ApsOrder
>
apsOrders
=
apsOrderService
.
lambdaQuery
()
.
eq
(
ApsOrder:
:
getIsdeleted
,
0
)
.
eq
(
ApsOrder:
:
getIsdeleted
,
0
)
.
eq
(
ApsOrder:
:
getSchedulestatus
,
1
)
.
eq
(
ApsOrder:
:
getSchedulestatus
,
1
)
.
eq
(
ApsOrder:
:
getCreatoruserid
,
"1025"
)
.
eq
(
ApsOrder:
:
getCreatoruserid
,
username
)
.
list
();
.
list
();
if
(
CollectionUtils
.
isEmpty
(
apsOrders
))
{
if
(
CollectionUtils
.
isEmpty
(
apsOrders
))
{
return
R
.
failed
(
"工单列表不能为空"
);
prodSceneConfigService
.
deleteSceneById
(
sceneId
);
throw
new
SceneGenerationException
(
"工单列表不能为空"
);
}
}
// 4. 处理订单数据转换
// 4. 处理订单数据转换
List
<
ProdLaunchOrder
>
prodLaunchOrders
=
processOrderData
(
sceneId
,
apsOrders
);
List
<
ProdLaunchOrder
>
prodLaunchOrders
=
processOrderData
(
sceneId
,
apsOrders
);
// 5. 转换工单于工序执行表
// 5. 转换工单于工序执行表
convertToProcessExecBatch
(
prodLaunchOrders
,
sceneId
);
convertToProcessExecBatch
(
prodLaunchOrders
,
sceneId
);
// 6. 生成工序关联关系
// 6. 生成工序关联关系
generateProcessRelationsBatch
(
prodLaunchOrders
,
sceneId
);
generateProcessRelationsBatch
(
prodLaunchOrders
,
sceneId
);
log
.
info
(
"场景数据生成完成,场景ID:{}"
,
sceneId
);
log
.
info
(
"场景数据生成完成,场景ID:{}"
,
sceneId
);
return
R
.
ok
(
"场景数据生成成功"
);
return
R
.
ok
(
"场景数据生成成功"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"生成场景数据失败"
,
e
);
return
R
.
failed
(
"生成场景数据失败: "
+
e
.
getMessage
());
}
}
}
/**
/**
...
@@ -149,17 +135,18 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -149,17 +135,18 @@ public class LanuchServiceImpl implements LanuchService {
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
R
<
String
>
copyScene
(
String
oldSceneId
,
String
username
,
String
newSceneName
)
{
public
R
<
String
>
copyScene
(
String
oldSceneId
,
String
username
,
String
newSceneName
)
{
try
{
// Validate input parameters
// Validate input parameters
if
(
oldSceneId
==
null
||
oldSceneId
.
trim
().
isEmpty
())
{
if
(
oldSceneId
==
null
||
oldSceneId
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"
场景ID不能为空"
);
throw
new
IllegalArgumentException
(
"原
场景ID不能为空"
);
}
}
if
(
newSceneName
==
null
||
newSceneName
.
trim
().
isEmpty
())
{
if
(
newSceneName
==
null
||
newSceneName
.
trim
().
isEmpty
())
{
return
R
.
failed
(
"复制场景ID不能为空"
);
throw
new
IllegalArgumentException
(
"复制场景ID不能为空"
);
}
}
if
(
username
==
null
||
username
.
trim
().
isEmpty
())
{
throw
new
IllegalArgumentException
(
"用户名不能为空"
);
}
// 检查场景是否存在
// 检查场景是否存在
ProdSceneConfig
oldScene
=
prodSceneConfigService
.
lambdaQuery
()
ProdSceneConfig
oldScene
=
prodSceneConfigService
.
lambdaQuery
()
...
@@ -167,12 +154,12 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -167,12 +154,12 @@ public class LanuchServiceImpl implements LanuchService {
.
one
();
.
one
();
if
(
oldScene
==
null
)
{
if
(
oldScene
==
null
)
{
return
R
.
failed
(
"源场景不存在"
);
throw
new
RuntimeException
(
"源场景不存在"
);
}
}
// 创建场景
// 创建场景
String
newSceneId
=
createScene
(
newSceneName
,
username
);
String
newSceneId
=
createScene
(
newSceneName
,
username
);
if
(
newSceneId
==
null
)
{
if
(
newSceneId
==
null
)
{
return
R
.
failed
(
"场景名称已存在"
);
throw
new
RuntimeException
(
"场景名称已存在"
);
}
}
// 复制数据
// 复制数据
...
@@ -186,15 +173,8 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -186,15 +173,8 @@ public class LanuchServiceImpl implements LanuchService {
copyChromosomeFile
(
oldScene
.
getSceneId
(),
newSceneId
);
copyChromosomeFile
(
oldScene
.
getSceneId
(),
newSceneId
);
return
R
.
ok
(
"场景数据复制成功"
);
return
R
.
ok
(
"场景数据复制成功"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"复制场景数据失败"
,
e
);
throw
new
RuntimeException
(
"复制场景数据失败: "
+
e
.
getMessage
(),
e
);
}
}
}
/**
/**
*下发计划
*下发计划
* @param sceneId
* @param sceneId
...
@@ -203,10 +183,13 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -203,10 +183,13 @@ public class LanuchServiceImpl implements LanuchService {
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
R
<
String
>
exportPlan
(
String
sceneId
)
{
public
R
<
String
>
exportPlan
(
String
sceneId
)
{
try
{
if
(
sceneId
==
null
||
sceneId
.
trim
().
isEmpty
())
{
throw
new
IllegalArgumentException
(
"场景ID不能为空"
);
}
Chromosome
chromosome
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
Chromosome
chromosome
=
sceneService
.
loadChromosomeFromFile
(
sceneId
);
if
(
chromosome
==
null
||
chromosome
.
getResult
()
==
null
||
chromosome
.
getResult
().
isEmpty
())
{
if
(
chromosome
==
null
||
chromosome
.
getResult
()
==
null
||
chromosome
.
getResult
().
isEmpty
())
{
return
R
.
failed
(
"未找到排程结果"
);
throw
new
RuntimeException
(
"未找到排程结果"
);
}
}
List
<
Order
>
prodLanuchList
=
chromosome
.
getOrders
();
List
<
Order
>
prodLanuchList
=
chromosome
.
getOrders
();
...
@@ -216,45 +199,32 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -216,45 +199,32 @@ public class LanuchServiceImpl implements LanuchService {
MesOrder
mesOrder
=
new
MesOrder
();
MesOrder
mesOrder
=
new
MesOrder
();
mesOrder
.
setMesCode
(
prodLaunchOrder
.
getOrderId
());
mesOrder
.
setMesCode
(
prodLaunchOrder
.
getOrderId
());
// mesOrder.setSerie(prodLaunchOrder.getSerie());
mesOrder
.
setMaterialId
(
prodLaunchOrder
.
getMaterialId
());
mesOrder
.
setMaterialId
(
prodLaunchOrder
.
getMaterialId
());
mesOrder
.
setQuantity
((
long
)
prodLaunchOrder
.
getQuantity
());
mesOrder
.
setQuantity
(
0L
);
// 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
);
mesOrderList
.
add
(
mesOrder
);
}
}
boolean
saved
=
mesOrderService
.
saveBatch
(
mesOrderList
);
boolean
saved
=
mesOrderService
.
saveBatch
(
mesOrderList
);
if
(
saved
)
{
if
(
saved
)
{
log
.
info
(
"插入 {} 条数据到mes_order"
,
mesOrderList
.
size
());
log
.
info
(
"插入 {} 条数据到mes_order"
,
mesOrderList
.
size
());
}
else
{
}
else
{
log
.
error
(
"插入失败"
);
log
.
error
(
"插入失败"
);
return
R
.
failed
(
"插入mes_order失败"
);
throw
new
RuntimeException
(
"插入mes_order失败"
);
}
}
List
<
ProdProcessExec
>
processExecList
=
prodProcessExecService
.
lambdaQuery
()
List
<
ProdProcessExec
>
processExecList
=
prodProcessExecService
.
lambdaQuery
()
.
eq
(
ProdProcessExec:
:
getSceneId
,
sceneId
)
.
eq
(
ProdProcessExec:
:
getSceneId
,
sceneId
)
.
list
();
.
list
();
// 遍历GAScheduleResult结果并转换为dispatch
// 遍历GAScheduleResult结果并转换为dispatch
List
<
Dispatch
>
dispatches
=
new
ArrayList
<>();
List
<
Dispatch
>
dispatches
=
new
ArrayList
<>();
for
(
GAScheduleResult
gaResult
:
chromosome
.
getResult
())
{
for
(
GAScheduleResult
gaResult
:
chromosome
.
getResult
())
{
ProdProcessExec
prodProcessExec
=
processExecList
.
stream
()
ProdProcessExec
prodProcessExec
=
processExecList
.
stream
()
.
filter
(
processExec
->
processExec
.
getExecId
().
equals
(
gaResult
.
getExecId
()))
.
filter
(
processExec
->
processExec
.
getExecId
().
equals
(
gaResult
.
getExecId
()))
.
findFirst
()
.
findFirst
()
.
orElse
(
null
);
.
orElse
(
null
);
Dispatch
dispatch
=
new
Dispatch
();
Dispatch
dispatch
=
new
Dispatch
();
// 更新相关字段
// 更新相关字段
dispatch
.
setENof
(
gaResult
.
getOrderId
());
dispatch
.
setENof
(
gaResult
.
getOrderId
());
...
@@ -279,18 +249,10 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -279,18 +249,10 @@ public class LanuchServiceImpl implements LanuchService {
if
(
savedDispatch
)
{
if
(
savedDispatch
)
{
return
R
.
ok
(
"计划下发成功,共处理 "
+
dispatches
.
size
()
+
" 条记录"
);
return
R
.
ok
(
"计划下发成功,共处理 "
+
dispatches
.
size
()
+
" 条记录"
);
}
else
{
}
else
{
return
R
.
failed
(
"保存到数据库失败"
);
throw
new
RuntimeException
(
"保存到数据库失败"
);
}
}
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
◦ 处理订单数据:批量转换ProdOrderMain到ProdLaunchOrder
...
@@ -299,28 +261,19 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -299,28 +261,19 @@ public class LanuchServiceImpl implements LanuchService {
*/
*/
private
List
<
ProdLaunchOrder
>
processOrderData
(
String
sceneId
,
List
<
ApsOrder
>
prodOrderMainList
)
{
private
List
<
ProdLaunchOrder
>
processOrderData
(
String
sceneId
,
List
<
ApsOrder
>
prodOrderMainList
)
{
// 批量转换并插入
// 批量转换并插入
List
<
ProdLaunchOrder
>
launchOrderList
=
prodOrderMainList
.
stream
()
List
<
ProdLaunchOrder
>
launchOrderList
=
prodOrderMainList
.
stream
()
.
map
(
order
->
convertToLaunchOrder
(
order
,
sceneId
))
.
map
(
order
->
convertToLaunchOrder
(
order
,
sceneId
))
.
filter
(
Objects:
:
nonNull
)
.
filter
(
Objects:
:
nonNull
)
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
// 批量插入
// 批量插入
if
(!
launchOrderList
.
isEmpty
())
{
if
(!
launchOrderList
.
isEmpty
())
{
for
(
ProdLaunchOrder
order
:
launchOrderList
)
{
for
(
ProdLaunchOrder
order
:
launchOrderList
)
{
try
{
prodLaunchOrderService
.
save
(
order
);
// 单条插入
prodLaunchOrderService
.
save
(
order
);
// 单条插入
}
catch
(
Exception
e
)
{
log
.
error
(
"保存订单失败: {}"
,
order
.
getOrderId
(),
e
);
}
}
}
}
}
log
.
info
(
"成功处理{}条订单数据"
,
prodOrderMainList
.
size
());
log
.
info
(
"成功处理{}条订单数据"
,
prodOrderMainList
.
size
());
return
launchOrderList
;
return
launchOrderList
;
...
@@ -338,44 +291,19 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -338,44 +291,19 @@ public class LanuchServiceImpl implements LanuchService {
*/
*/
private
ProdLaunchOrder
convertToLaunchOrder
(
ApsOrder
order
,
String
sceneId
)
{
private
ProdLaunchOrder
convertToLaunchOrder
(
ApsOrder
order
,
String
sceneId
)
{
try
{
ProdLaunchOrder
launchOrder
=
new
ProdLaunchOrder
();
ProdLaunchOrder
launchOrder
=
new
ProdLaunchOrder
();
launchOrder
.
setOrderId
(
order
.
getId
());
launchOrder
.
setOrderId
(
order
.
getId
());
launchOrder
.
setSceneId
(
sceneId
);
launchOrder
.
setSceneId
(
sceneId
);
launchOrder
.
setSerie
(
order
.
getSeries
());
launchOrder
.
setSerie
(
order
.
getSeries
());
launchOrder
.
setCreateUser
(
String
.
valueOf
(
order
.
getCreatoruserid
()));
launchOrder
.
setCreateUser
(
String
.
valueOf
(
order
.
getCreatoruserid
()));
launchOrder
.
setMaterialCode
(
order
.
getMmcode
());
launchOrder
.
setMaterialCode
(
order
.
getMmcode
());
// launchOrder.setStartDate(order.get);
launchOrder
.
setEndDate
(
order
.
getDeliverytime
());
launchOrder
.
setEndDate
(
order
.
getDeliverytime
());
// launchOrder.setOrderPriority(order.getPrioritry());
launchOrder
.
setOrderPriority
(
1
);
launchOrder
.
setOrderPriority
(
1
);
launchOrder
.
setQuantity
(
order
.
getQuantity
());
launchOrder
.
setQuantity
(
order
.
getQuantity
());
launchOrder
.
setMaterialId
(
order
.
getMmid
());
launchOrder
.
setMaterialId
(
order
.
getMmid
());
String
mmid
=
order
.
getMmid
();
// // 通过mmid查找对应的工艺
// if (mmid != null && !mmid.isEmpty()) {
// LambdaQueryWrapper<RoutingHeader> routingWrapper = new LambdaQueryWrapper<>();
// routingWrapper.eq(RoutingHeader::getMaterialId, mmid);
// routingWrapper.eq(RoutingHeader::getIsDeleted, 0); // 添加判断 is_deleted=0
// List<RoutingHeader> routingHeaders = routingHeaderService.list(routingWrapper);
// RoutingHeader routingHeader = null;
// if (!CollectionUtils.isEmpty(routingHeaders)) {
// routingHeader = routingHeaders.get(0);
// }
//
// if (routingHeader != null) {
// launchOrder.setRoutingId(routingHeader.getId());
// launchOrder.setRoutingCode(defaultIfBlank(routingHeader.getCode(), ""));
// }
// }
launchOrder
.
setRoutingId
(
order
.
getRoutingid
());
launchOrder
.
setRoutingId
(
order
.
getRoutingid
());
launchOrder
.
setRoutingCode
(
order
.
getRoutingcode
());
launchOrder
.
setRoutingCode
(
order
.
getRoutingcode
());
return
launchOrder
;
return
launchOrder
;
}
catch
(
Exception
e
)
{
log
.
error
(
"转换订单[{}]失败"
,
order
.
getId
(),
e
);
return
null
;
}
}
}
/**
/**
...
@@ -564,14 +492,8 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -564,14 +492,8 @@ public class LanuchServiceImpl implements LanuchService {
return
;
return
;
}
}
for
(
ProdLaunchOrder
prodOrderMain
:
order
)
{
for
(
ProdLaunchOrder
prodOrderMain
:
order
)
{
try
{
convertToProcessExec
(
prodOrderMain
,
sceneId
);
convertToProcessExec
(
prodOrderMain
,
sceneId
);
}
catch
(
Exception
e
)
{
log
.
error
(
"转换工单[{}]到工序执行表失败"
,
prodOrderMain
.
getOrderId
(),
e
);
continue
;
}
}
}
log
.
info
(
"完成{}个工单的工序转换"
,
order
.
size
());
log
.
info
(
"完成{}个工单的工序转换"
,
order
.
size
());
...
@@ -589,23 +511,16 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -589,23 +511,16 @@ public class LanuchServiceImpl implements LanuchService {
*/
*/
public
boolean
convertToProcessExec
(
ProdLaunchOrder
prodOrderMain
,
String
sceneId
)
{
public
boolean
convertToProcessExec
(
ProdLaunchOrder
prodOrderMain
,
String
sceneId
)
{
// 查询对应的工艺
// 查询对应的工艺
RoutingHeader
routingHeader
=
getRoutingHeader
(
prodOrderMain
.
getRoutingId
());
RoutingHeader
routingHeader
=
getRoutingHeader
(
prodOrderMain
.
getRoutingId
());
// 查询该工艺下的所有工序
// 查询该工艺下的所有工序
List
<
RoutingDetail
>
routingDetails
=
getRoutingDetails
(
routingHeader
.
getId
());
List
<
RoutingDetail
>
routingDetails
=
getRoutingDetails
(
routingHeader
.
getId
());
List
<
RoutingDetailEquip
>
routingDetailEquip
=
getRoutingDetailEquip
(
routingHeader
.
getId
());
List
<
RoutingDetailEquip
>
routingDetailEquip
=
getRoutingDetailEquip
(
routingHeader
.
getId
());
// 批量插入新的工序工单记录
// 批量插入新的工序工单记录
batchInsertProcessExec
(
prodOrderMain
,
routingDetails
,
sceneId
,
routingDetailEquip
);
batchInsertProcessExec
(
prodOrderMain
,
routingDetails
,
sceneId
,
routingDetailEquip
);
return
true
;
return
true
;
}
}
...
@@ -657,7 +572,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -657,7 +572,6 @@ public class LanuchServiceImpl implements LanuchService {
return
routingDetails
;
return
routingDetails
;
}
}
/**
/**
◦ 批量插入工序执行记录
◦ 批量插入工序执行记录
...
@@ -672,8 +586,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -672,8 +586,6 @@ public class LanuchServiceImpl implements LanuchService {
public
void
batchInsertProcessExec
(
ProdLaunchOrder
prodOrderMain
,
public
void
batchInsertProcessExec
(
ProdLaunchOrder
prodOrderMain
,
List
<
RoutingDetail
>
routingDetails
,
List
<
RoutingDetail
>
routingDetails
,
String
sceneId
,
List
<
RoutingDetailEquip
>
routingDetailEquip
)
{
String
sceneId
,
List
<
RoutingDetailEquip
>
routingDetailEquip
)
{
List
<
ProdProcessExec
>
processExecList
=
routingDetails
.
stream
()
List
<
ProdProcessExec
>
processExecList
=
routingDetails
.
stream
()
.
map
(
detail
->
createProcessExec
(
prodOrderMain
,
detail
,
sceneId
))
.
map
(
detail
->
createProcessExec
(
prodOrderMain
,
detail
,
sceneId
))
.
collect
(
Collectors
.
toList
());
.
collect
(
Collectors
.
toList
());
...
@@ -686,14 +598,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -686,14 +598,6 @@ public class LanuchServiceImpl implements LanuchService {
}
}
}
}
// 添加一个方法来更新execId映射
/*
private void updateExecIdMapping(List<ProdProcessExec> processExecList) {
// 这里可以将processExecList中的数据添加到一个全局映射中,供其他方法使用
// 由于当前设计限制,暂不实现全局映射,但保留此方法以备将来扩展
}
*/
/**
/**
◦ 创建工序执行记录
◦ 创建工序执行记录
...
@@ -717,7 +621,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -717,7 +621,6 @@ public class LanuchServiceImpl implements LanuchService {
prodProcessExec
.
setTaskSeq
(
detail
.
getTaskSeq
());
prodProcessExec
.
setTaskSeq
(
detail
.
getTaskSeq
());
prodProcessExec
.
setRoutingDetailName
(
detail
.
getName
());
prodProcessExec
.
setRoutingDetailName
(
detail
.
getName
());
prodProcessExec
.
setMachineId
(
detail
.
getEquipTypeId
());
prodProcessExec
.
setMachineId
(
detail
.
getEquipTypeId
());
// prodProcessExec.setResourceGroup(String.valueOf(detail.getResourceId()));
prodProcessExec
.
setPlanQty
(
prodOrderMain
.
getQuantity
());
prodProcessExec
.
setPlanQty
(
prodOrderMain
.
getQuantity
());
prodProcessExec
.
setTargetStartDate
(
prodOrderMain
.
getStartDate
());
prodProcessExec
.
setTargetStartDate
(
prodOrderMain
.
getStartDate
());
prodProcessExec
.
setTargetEndDate
(
prodOrderMain
.
getEndDate
());
prodProcessExec
.
setTargetEndDate
(
prodOrderMain
.
getEndDate
());
...
@@ -728,16 +631,11 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -728,16 +631,11 @@ public class LanuchServiceImpl implements LanuchService {
prodProcessExec
.
setPreprocessingTime
(
detail
.
getPreprocessingTime
());
prodProcessExec
.
setPreprocessingTime
(
detail
.
getPreprocessingTime
());
prodProcessExec
.
setPostprocessingTime
(
detail
.
getPostprocessingTime
());
prodProcessExec
.
setPostprocessingTime
(
detail
.
getPostprocessingTime
());
prodProcessExec
.
setId
(
String
.
valueOf
(
SnowFlackIdWorker
.
getId
()));
prodProcessExec
.
setId
(
String
.
valueOf
(
SnowFlackIdWorker
.
getId
()));
prodProcessExec
.
setConnectProperty
(
detail
.
getConnectProperty
());
prodProcessExec
.
setConnectProperty
(
detail
.
getConnectProperty
());
prodProcessExec
.
setRoutingId
(
prodOrderMain
.
getRoutingId
());
prodProcessExec
.
setRoutingId
(
prodOrderMain
.
getRoutingId
());
prodProcessExec
.
setRoutingCode
(
prodOrderMain
.
getRoutingCode
());
prodProcessExec
.
setRoutingCode
(
prodOrderMain
.
getRoutingCode
());
prodProcessExec
.
setConnectPropertyName
(
detail
.
getConnectPropertyName
());
prodProcessExec
.
setConnectPropertyName
(
detail
.
getConnectPropertyName
());
prodProcessExec
.
setSpeed
(
prodProcessExec
.
setSpeed
(
Optional
.
ofNullable
(
detail
.
getRuntime
())
Optional
.
ofNullable
(
detail
.
getRuntime
())
.
filter
(
out
->
detail
.
getSingleOut
()
!=
null
)
.
filter
(
out
->
detail
.
getSingleOut
()
!=
null
)
...
@@ -750,8 +648,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -750,8 +648,6 @@ public class LanuchServiceImpl implements LanuchService {
return
prodProcessExec
;
return
prodProcessExec
;
}
}
/**
/**
◦ 批量生成工序关联关系
◦ 批量生成工序关联关系
...
@@ -798,10 +694,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -798,10 +694,6 @@ public class LanuchServiceImpl implements LanuchService {
log
.
info
(
"完成{}个工单的工序关系生成"
,
prodOrderMains
.
size
());
log
.
info
(
"完成{}个工单的工序关系生成"
,
prodOrderMains
.
size
());
}
}
/**
/**
◦ 生成工序关联关系
◦ 生成工序关联关系
...
@@ -819,13 +711,8 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -819,13 +711,8 @@ public class LanuchServiceImpl implements LanuchService {
List
<
ProdOrderProcess
>
processRelations
=
new
java
.
util
.
ArrayList
<>();
List
<
ProdOrderProcess
>
processRelations
=
new
java
.
util
.
ArrayList
<>();
for
(
ProdLaunchOrder
prodOrderMain
:
prodOrderMains
)
{
for
(
ProdLaunchOrder
prodOrderMain
:
prodOrderMains
)
{
try
{
List
<
ProdOrderProcess
>
relations
=
createProcessRelations
(
prodOrderMain
,
sceneId
,
routingDetailIdToExecIdMap
);
List
<
ProdOrderProcess
>
relations
=
createProcessRelations
(
prodOrderMain
,
sceneId
,
routingDetailIdToExecIdMap
);
processRelations
.
addAll
(
relations
);
processRelations
.
addAll
(
relations
);
}
catch
(
Exception
e
)
{
log
.
error
(
"生成工单[{}]工序关系失败"
,
prodOrderMain
.
getOrderId
(),
e
);
continue
;
}
}
}
// 批量保存(增加严格校验)
// 批量保存(增加严格校验)
...
@@ -904,14 +791,12 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -904,14 +791,12 @@ public class LanuchServiceImpl implements LanuchService {
if
(
execId
!=
null
)
{
if
(
execId
!=
null
)
{
prodOrderProcess
.
setExecId
(
execId
);
prodOrderProcess
.
setExecId
(
execId
);
}
else
{
}
else
{
prodOrderProcess
.
setExecId
(
"ttt"
);
prodOrderProcess
.
setExecId
(
"ttt"
);
}
}
if
(
targetExecId
!=
null
)
{
if
(
targetExecId
!=
null
)
{
prodOrderProcess
.
setTargetExecId
(
targetExecId
);
prodOrderProcess
.
setTargetExecId
(
targetExecId
);
}
else
{
}
else
{
prodOrderProcess
.
setTargetExecId
(
"ttt"
);
prodOrderProcess
.
setTargetExecId
(
"ttt"
);
}
}
...
@@ -950,15 +835,11 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -950,15 +835,11 @@ public class LanuchServiceImpl implements LanuchService {
public
List
<
ProdEquipment
>
batchInsertEquipMent
(
public
List
<
ProdEquipment
>
batchInsertEquipMent
(
List
<
RoutingDetailEquip
>
routingDetailEquips
,
List
<
RoutingDetailEquip
>
routingDetailEquips
,
String
sceneId
,
List
<
ProdProcessExec
>
processExecList
,
Boolean
isSave
)
{
String
sceneId
,
List
<
ProdProcessExec
>
processExecList
,
Boolean
isSave
)
{
if
(
CollectionUtils
.
isEmpty
(
routingDetailEquips
))
{
if
(
CollectionUtils
.
isEmpty
(
routingDetailEquips
))
{
log
.
warn
(
"工艺设备列表为空,跳过设备对照表生成"
);
log
.
warn
(
"工艺设备列表为空,跳过设备对照表生成"
);
return
null
;
return
null
;
}
}
// 创建ProdEquipment列表
// 创建ProdEquipment列表
List
<
ProdEquipment
>
prodEquipments
=
new
java
.
util
.
ArrayList
<>();
List
<
ProdEquipment
>
prodEquipments
=
new
java
.
util
.
ArrayList
<>();
...
@@ -983,7 +864,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -983,7 +864,6 @@ public class LanuchServiceImpl implements LanuchService {
.
orElse
(
0.0
)
.
orElse
(
0.0
)
);
);
String
execId
=
processExecList
.
stream
()
String
execId
=
processExecList
.
stream
()
.
filter
(
exec
->
{
.
filter
(
exec
->
{
Long
execRoutingDetailId
=
exec
.
getRoutingDetailId
();
Long
execRoutingDetailId
=
exec
.
getRoutingDetailId
();
...
@@ -1027,14 +907,11 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -1027,14 +907,11 @@ public class LanuchServiceImpl implements LanuchService {
*/
*/
public
List
<
RoutingDetailEquip
>
getRoutingDetailEquip
(
Integer
routingHeaderId
)
{
public
List
<
RoutingDetailEquip
>
getRoutingDetailEquip
(
Integer
routingHeaderId
)
{
List
<
RoutingDetailEquip
>
detailEquips
=
routingDetailEquipService
.
lambdaQuery
()
List
<
RoutingDetailEquip
>
detailEquips
=
routingDetailEquipService
.
lambdaQuery
()
.
eq
(
RoutingDetailEquip:
:
getRoutingHeaderId
,
routingHeaderId
)
.
eq
(
RoutingDetailEquip:
:
getRoutingHeaderId
,
routingHeaderId
)
.
eq
(
RoutingDetailEquip:
:
getIsdeleted
,
0
)
.
eq
(
RoutingDetailEquip:
:
getIsdeleted
,
0
)
.
list
();
// 添加 is_deleted=0 过滤条件
.
list
();
// 添加 is_deleted=0 过滤条件
if
(
CollectionUtils
.
isEmpty
(
detailEquips
))
{
if
(
CollectionUtils
.
isEmpty
(
detailEquips
))
{
log
.
error
(
"工艺下无设备信息: {}"
,
routingHeaderId
);
log
.
error
(
"工艺下无设备信息: {}"
,
routingHeaderId
);
throw
new
RuntimeException
(
"工艺下无设备信息: "
+
routingHeaderId
);
throw
new
RuntimeException
(
"工艺下无设备信息: "
+
routingHeaderId
);
...
@@ -1043,8 +920,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -1043,8 +920,6 @@ public class LanuchServiceImpl implements LanuchService {
return
detailEquips
;
return
detailEquips
;
}
}
/**
/**
* Copy ProdLaunchOrder data
* Copy ProdLaunchOrder data
*/
*/
...
@@ -1167,8 +1042,6 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -1167,8 +1042,6 @@ public class LanuchServiceImpl implements LanuchService {
private
void
copyChromosomeFile
(
String
oldSceneId
,
String
newSceneId
)
{
private
void
copyChromosomeFile
(
String
oldSceneId
,
String
newSceneId
)
{
try
{
try
{
// 检查源场景是否有染色体文件
// 检查源场景是否有染色体文件
if
(
sceneService
.
chromosomeFileExists
(
oldSceneId
))
{
if
(
sceneService
.
chromosomeFileExists
(
oldSceneId
))
{
// 从源场景加载染色体
// 从源场景加载染色体
Chromosome
chromosome
=
sceneService
.
loadChromosomeFromFile
(
oldSceneId
);
Chromosome
chromosome
=
sceneService
.
loadChromosomeFromFile
(
oldSceneId
);
...
@@ -1186,11 +1059,8 @@ public class LanuchServiceImpl implements LanuchService {
...
@@ -1186,11 +1059,8 @@ public class LanuchServiceImpl implements LanuchService {
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"复制染色体文件时发生异常,从场景 {} 到场景 {}"
,
oldSceneId
,
newSceneId
,
e
);
log
.
error
(
"复制染色体文件时发生异常,从场景 {} 到场景 {}"
,
oldSceneId
,
newSceneId
,
e
);
// 重新抛出异常,让全局异常处理器处理
throw
e
;
}
}
}
}
}
}
\ No newline at end of file
src/main/java/com/aps/service/plan/PlanResultService.java
View file @
582c9a94
...
@@ -1174,4 +1174,215 @@ private GlobalParam InitGlobalParam()
...
@@ -1174,4 +1174,215 @@ private GlobalParam InitGlobalParam()
}
}
/**
* 将 ScheduleChromosome 转换为 ResourceGanttVO 列表
* @param scheduleChromosome 调度结果
* @param machineList 机器列表
* @return 转换后的数据
*/
public
List
<
com
.
aps
.
entity
.
Gantt
.
ResourceGanttVO
>
convertToResourceGanttVO1
(
Chromosome
scheduleChromosome
,
List
<
Machine
>
machineList
)
{
List
<
com
.
aps
.
entity
.
Gantt
.
ResourceGanttVO
>
resourceGanttVOList
=
new
ArrayList
<>();
// 遍历所有机器资源
if
(
machineList
!=
null
)
{
for
(
int
i
=
0
;
i
<
machineList
.
size
();
i
++)
{
Machine
machine
=
machineList
.
get
(
i
);
com
.
aps
.
entity
.
Gantt
.
ResourceGanttVO
resourceGanttVO
=
new
com
.
aps
.
entity
.
Gantt
.
ResourceGanttVO
();
resourceGanttVO
.
setId
(
machine
.
getId
());
resourceGanttVO
.
setName
(
machine
.
getId
()+
"号设备"
);
resourceGanttVO
.
setShift
(
convertToShiftVO
(
machine
));
// 转换任务列表
List
<
com
.
aps
.
entity
.
Gantt
.
TaskVO
>
taskVOList
=
new
ArrayList
<>();
if
(
scheduleChromosome
.
getResult
()
!=
null
)
{
// 筛选出属于当前设备的任务
List
<
GAScheduleResult
>
machineGenes
=
scheduleChromosome
.
getResult
().
stream
()
.
filter
(
gene
->
gene
.
getMachineId
()==(
machine
.
getId
()))
.
collect
(
Collectors
.
toList
());
// 按开始时间排序
machineGenes
.
sort
((
g1
,
g2
)
->
Integer
.
compare
(
g1
.
getStartTime
(),
g2
.
getStartTime
()));
for
(
GAScheduleResult
gene
:
machineGenes
)
{
com
.
aps
.
entity
.
Gantt
.
TaskVO
taskVO
=
new
com
.
aps
.
entity
.
Gantt
.
TaskVO
();
// taskVO.setId(gene.getId()); // 临时处理
taskVO
.
setPlanId
(
gene
.
getOrderId
());
// 默认值
// taskVO.setProductType(0); // 默认值
// taskVO.setProductName("产品"+gene.getProductId());
taskVO
.
setProductId
(
gene
.
getProductId
());
// 默认值
taskVO
.
setQuantity
(
gene
.
getQuantity
());
taskVO
.
setStart
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getStartTime
()));
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setEquipChange
(
gene
.
getChangeoverTime
());
// 默认值
taskVO
.
setEquipCooling
(
0
);
// 默认值
taskVO
.
setEquipType
(
resourceGanttVO
.
getType
());
taskVO
.
setEquipName
(
resourceGanttVO
.
getName
());
// taskVO.setDuration(calculateDuration(
// scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()),
// scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()))); // 计算持续时间
taskVO
.
setDuration
(
0
);
//
taskVO
.
setEquipId
(
machine
.
getId
());
taskVO
.
setShopId
(
machine
.
getId
());
taskVO
.
setShopName
(
resourceGanttVO
.
getShopName
());
taskVO
.
setStatus
(
0
);
// 默认值
taskVO
.
setDetailId
((
long
)
gene
.
getStartTime
());
// 将productId和operationID组合为detailId
taskVO
.
setHeaderId
(
gene
.
getEndTime
());
// 默认值
// taskVO.setHeaderName("工艺"+gene.getProductId()); // 默认值
// taskVO.setSeq(gene.getSequenceId()); // 使用工序ID
// taskVO.setSeqName( "工序名称"+gene.getSequenceId());
taskVO
.
setProcessingTime
(
gene
.
getProcessingTime
());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList
.
add
(
taskVO
);
// 调试:检查machine中的shifts状态
// if (machine.getShifts() != null) {
// for (Shift shift : machine.getShifts()) {
// System.out.println("Before setting shifts - Shift status: " + shift.getStatus());
// }
// }
taskVO
.
setAbsolutePreparationTime
(
gene
.
getTeardownTime
());
}
}
resourceGanttVO
.
setList
(
taskVOList
);
resourceGanttVOList
.
add
(
resourceGanttVO
);
}
}
return
resourceGanttVOList
;
}
/**
* 将 ScheduleChromosome 转换为 ProductGanttVO 列表
* @param scheduleChromosome 调度结果
* @return 转换后的数据
*/
public
List
<
com
.
aps
.
entity
.
Gantt
.
ProductGanttVO
>
convertToProductGanttVO1
(
Chromosome
scheduleChromosome
)
{
List
<
com
.
aps
.
entity
.
Gantt
.
ProductGanttVO
>
productGanttVOList
=
new
ArrayList
<>();
// 按产品ID和工单ID分组基因
if
(
scheduleChromosome
.
getResult
()
!=
null
)
{
// 按工单ID分组
scheduleChromosome
.
getResult
().
stream
()
.
collect
(
Collectors
.
groupingBy
(
GAScheduleResult:
:
getOrderId
))
.
forEach
((
orderId
,
genes
)
->
{
if
(!
genes
.
isEmpty
())
{
com
.
aps
.
entity
.
Gantt
.
ProductGanttVO
productGanttVO
=
new
com
.
aps
.
entity
.
Gantt
.
ProductGanttVO
();
GAScheduleResult
firstGene
=
genes
.
get
(
0
);
productGanttVO
.
setId
(
firstGene
.
getOrderId
());
productGanttVO
.
setProductName
(
"产品"
+
firstGene
.
getProductId
());
// 默认值,实际应从订单数据获取
productGanttVO
.
setProductType
(
0
);
productGanttVO
.
setProductId
(
firstGene
.
getProductId
());
// 计算总数量(假设同一批次)
productGanttVO
.
setQuantity
(
firstGene
.
getQuantity
());
productGanttVO
.
setCode
(
"编号"
+
firstGene
.
getProductId
());
// 默认值
productGanttVO
.
setShopId
(
firstGene
.
getMachineId
());
// 默认值
productGanttVO
.
setShopName
(
firstGene
.
getMachineId
()+
"号线"
);
// 默认值
productGanttVO
.
setStatus
(
"已发布"
);
// productGanttVO.setHeaderId(firstGene.getProductId());
productGanttVO
.
setHeaderName
(
"工艺"
+
firstGene
.
getProductId
());
// 默认值
// 计算开始和结束时间
int
minStartTime
=
genes
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getStartTime
)
.
min
()
.
orElse
(
0
);
int
maxEndTime
=
genes
.
stream
()
.
mapToInt
(
GAScheduleResult:
:
getEndTime
)
.
max
()
.
orElse
(
0
);
productGanttVO
.
setStartDate
(
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
minStartTime
));
productGanttVO
.
setEndDate
(
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
maxEndTime
));
// 转换任务列表
List
<
com
.
aps
.
entity
.
Gantt
.
TaskVO
>
taskVOList
=
new
ArrayList
<>();
// // 按工序顺序排序
// genes.sort((g1, g2) -> Integer.compare(g1.getSequenceId(), g2.getSequenceId()));
for
(
int
i
=
0
;
i
<
genes
.
size
();
i
++)
{
GAScheduleResult
gene
=
genes
.
get
(
i
);
com
.
aps
.
entity
.
Gantt
.
TaskVO
taskVO
=
new
com
.
aps
.
entity
.
Gantt
.
TaskVO
();
taskVO
.
setId
(
gene
.
getOrderId
());
// 生成唯一ID
taskVO
.
setPlanId
(
String
.
valueOf
(
orderId
));
taskVO
.
setProductType
(
0
);
taskVO
.
setProductName
(
"产品"
+
gene
.
getProductId
());
taskVO
.
setProductId
(
String
.
valueOf
(
gene
.
getProductId
()));
taskVO
.
setQuantity
(
gene
.
getQuantity
());
taskVO
.
setStart
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getStartTime
()));
taskVO
.
setEnd
(
scheduleChromosome
.
getBaseTime
().
plusSeconds
(
gene
.
getEndTime
()));
taskVO
.
setSetup
(
0
);
// 默认值
taskVO
.
setTeardown
(
gene
.
getTeardownTime
());
// 默认值
taskVO
.
setEquipChange
(
gene
.
getChangeoverTime
());
// 默认值
taskVO
.
setEquipCooling
(
0
);
// 默认值
// taskVO.setEquipType("PTT-" + (i+1) + "-" + gene.getOperationName().toUpperCase().substring(0, Math.min(3, gene.getOperationName().length())));
// taskVO.setEquipName(gene.getOperationName());
taskVO
.
setDuration
(
calculateDuration
(
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
gene
.
getStartTime
()),
scheduleChromosome
.
getBaseTime
().
plusMinutes
(
gene
.
getEndTime
())));
taskVO
.
setEquipId
(
gene
.
getMachineId
());
// 生成设备ID
taskVO
.
setShopId
(
gene
.
getMachineId
());
taskVO
.
setShopName
(
gene
.
getMachineId
()+
"车间"
);
taskVO
.
setStatus
(
0
);
// taskVO.setDetailId((long) gene.getProductId() * 1000 + gene.getOperationId());
// taskVO.setHeaderId(gene.getProductId());
taskVO
.
setHeaderName
(
"工艺"
+
gene
.
getProductId
());
// taskVO.setSeq(gene.getSequenceId());
// taskVO.setSeqName("工序名称"+gene.getSequenceId());
// taskVO.setAbsoluteStart(scheduleChromosome.getBaseTime().plusMinutes(gene.getStartTime()));
// taskVO.setAbsoluteEnd(scheduleChromosome.getBaseTime().plusMinutes(gene.getEndTime()));
taskVOList
.
add
(
taskVO
);
}
productGanttVO
.
setList
(
taskVOList
);
productGanttVOList
.
add
(
productGanttVO
);
}
});
}
return
productGanttVOList
;
}
private
ShiftVO
convertToShiftVO
(
Machine
machine
)
{
ShiftVO
shiftVO
=
new
ShiftVO
();
shiftVO
.
setId
(
machine
.
getId
());
shiftVO
.
setName
(
machine
.
getName
());
shiftVO
.
setShifts
(
machine
.
getShifts
());
shiftVO
.
setMaintenanceWindows
(
machine
.
getMaintenanceWindows
());
// 注意:tasks 字段需要在其他地方设置,因为 Machine 类中没有任务信息
return
shiftVO
;
}
/**
* 计算任务持续时间(分钟)
* @param start 开始时间
* @param end 结束时间
* @return 持续时间(分钟)
*/
private
Integer
calculateDuration
(
LocalDateTime
start
,
LocalDateTime
end
)
{
if
(
start
==
null
||
end
==
null
)
{
return
0
;
}
return
Math
.
toIntExact
(
java
.
time
.
Duration
.
between
(
start
,
end
).
toMinutes
());
}
}
}
\ 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