离散参数修改,公共分页和list查询修改

parent d98a5bf6
......@@ -4,6 +4,7 @@ import com.aps.common.util.R;
import com.aps.entity.Algorithm.Chromosome;
import com.aps.entity.basic.Entry;
import com.aps.entity.basic.MachineOption;
import com.aps.entity.common.FieldInfo;
import com.aps.entity.common.Paged;
import com.aps.service.common.ChromosomeDataService;
import com.aps.service.plan.PlanResultService;
......@@ -179,6 +180,26 @@ public class ChromosomeDataController {
}
/**
* 获取实体的字段信息
* 示例:
* - 文件实体: GET /queryChromosome/order/info?sceneId=xxx
* - 数据库实体: GET /queryChromosome/user/info
*
* @param sceneId 场景ID (文件实体可选,数据库实体不需要)
* @param entityName 实体名称 (如: order, entry, machine, user, department等)
* @return 字段信息列表
*/
@GetMapping("/{entityName}/info")
@Operation(summary = "获取实体字段信息", description = "根据实体名称获取字段名称、类型等信息,支持文件实体和数据库实体")
public R<List<FieldInfo>> getEntityInfo(
@Parameter(description = "实体名称", required = true)
@PathVariable String entityName) {
List<FieldInfo> fieldInfos = chromosomeDataService.getEntityInfo(entityName);
return R.ok(fieldInfos);
}
......
......@@ -143,8 +143,8 @@ public class Entry {
private BigDecimal singleOut;//单件产出
private double changeLineTime;//换模时间
private BigDecimal setupTime;//准备时间
private int teardownTime; // 收尾时间(后处理时间)
private int preTime; // 收尾时间(后处理时间)
private int teardownTime; // (后处理时间)
private int preTime; // (前处理时间)
//常数时间
private int constTime;
private String equipCode;//设备编码
......
......@@ -12,46 +12,168 @@ import java.util.List;
*/
@Data
public class Order {
/**
* 自增主键
*/
private int id;
/**
* 订单ID
*/
private String orderId;
/**
* 订单编码
*/
private String orderCode;
/**
* 产品ID
*/
private int productId;
/**
* 物料ID
*/
private String materialId;
/**
* 物料编码
*/
private String materialCode;
/**
* 物料名称
*/
private String materialName;
/**
* 系列
*/
private String serie;
/**
* 工艺路线ID
*/
private Integer routingId;
/**
* 工艺路线编码
*/
private String routingCode;
private double quantity = 100; // 100个
/**
* 订单数量,默认值:100
*/
private double quantity = 100;
/**
* 生产数量
*/
private double sYQuantity;
/**
* 开始日期
*/
private LocalDateTime startDate;
/**
* 到期日期
*/
private LocalDateTime dueDate;
/**
* 组开始日期
*/
private LocalDateTime groupStartDate;
/**
* 组到期日期
*/
private LocalDateTime groupDueDate;
/**
* 订单完成时间
*/
private LocalDateTime orderCompletion;
/**
* 订单开始时间
*/
private LocalDateTime orderStart;
/**
* 机器加工时间
*/
private double machineProcessingTime;
/**
* 订单流程
*/
private double orderFlow;
/**
* 订单生产时间
*/
private double orderProductTime;
/**
* 延误时间
*/
private double tardiness;
/**
* 优先级
*/
private int priority;
/**
* 是否可拆分,默认值:false
*/
private boolean canSplit = false;
/**
* 是否可中断,默认值:false
*/
private boolean canInterrupt = false;
/**
* 实际优先级
*/
private double actualPriority;
/**
* 主ID
*/
private String mainId;
/*使用这个半成品的成品工单*/
private List<Integer> FinishOrderId ;
/**
* 使用这个半成品的成品工单
*/
private List<Integer> FinishOrderId ;
/**
* 是否新创建,默认值:false
*/
private boolean newCreate = false;
/**
* 是否创建BOM,默认值:false
*/
private boolean createBom = false;
/// <summary>
/// 关联的成品工序ID(核心:明确该半成品服务于哪个成品工序)
/// </summary>
/**
* 关联的成品工序ID(核心:明确该半成品服务于哪个成品工序)
*/
private List<Integer> TargetFinishedOperationId;
private double delayHours;//延迟时间
//物料需求
/**
* 延迟时间
*/
private double delayHours;
/**
* 物料需求
*/
private List<OrderMaterialRequirement> materialRequirementList;
}
\ No newline at end of file
......@@ -7,22 +7,23 @@ import java.util.List;
import java.util.Optional;
/**
*
*
* @Title: PagedGridResult.java
* @Package com.lei.utils
* @Description: 用来返回分页Grid的数据格式
*/
public class Paged {
private Integer pageIndex=1; //当前页
private Integer pageSize=1000; //每页多少条
private Integer total=0;// 特殊设置,总记录数,如果前台带有此值,则分页查询时不查询总数。
private List<String> sortByList=new ArrayList<>(); // 多字段排序列表,格式如["type asc", "id desc"]
private String sortBy=""; //排序字段
private Boolean desc=true; //是否倒序
private String fields="";// 返回的字段
private String table;// 返回的表
//分组字段名称
private String fields=""; // 返回的字段
private String table=""; // 返回的表
private String groupName;
private Boolean and=true; // 条件逻辑关系,true为与关系,false为或关系
private List<ConditionEntity> conditions=new ArrayList<>(); //条件集合
......@@ -125,4 +126,20 @@ public class Paged {
public void setTotal(Integer total) {
this.total = total;
}
public List<String> getSortByList() {
return sortByList;
}
public void setSortByList(List<String> sortByList) {
this.sortByList = sortByList;
}
public Boolean getAnd() {
return and;
}
public void setAnd(Boolean and) {
this.and = and;
}
}
......@@ -914,11 +914,14 @@ if(finishedOrder==null||finishedOrder.size()==0)
// setupTime = (prev.getProductId() != operation.getProductId())
// ? (int) discreteParameterMatrixService.getDiscreteParameterMatrixValue(prev, operation)
// : 0;
DiscreteParameterMatrixService service = SpringContextUtil.getBean(DiscreteParameterMatrixService.class);
DiscreteParameterMatrixService discreteParameterMatrixService = SpringContextUtil.getBean(DiscreteParameterMatrixService.class);
DiscreteParameterDurationService discreteParameterDurationService = SpringContextUtil.getBean(DiscreteParameterDurationService.class);
double discreteParameterMatrixValue = service.getDiscreteParameterMatrixValue( operation,prev);
setupTime = (int) discreteParameterMatrixValue;
double discreteParameterDurationValue = discreteParameterDurationService.calculateChangeoverTime(prev, operation, machine, _allOperations, earliestStartTime,machineTasks);
double discreteParameterMatrixValue = discreteParameterMatrixService.getDiscreteParameterMatrixValue(operation, prev);
setupTime = (int) Math.max(discreteParameterDurationValue, discreteParameterMatrixValue);
// setupTime = (int) discreteParameterMatrixValue;
......
......@@ -19,8 +19,8 @@ import java.util.List;
public interface DiscreteParameterDurationService extends IService<DiscreteParameterDuration> {
double calculateChangeoverTime(List<GAScheduleResult> existingGenes,
Entry operation,
double calculateChangeoverTime(Entry lastEntry,
Entry entry,
Machine machine,
List<Entry> allOperations,int startTime);
List<Entry> allOperations,int startTime,List<GAScheduleResult> machineTasks);
}
......@@ -35,13 +35,23 @@ public class DatabaseQueryService {
// 处理条件
int paramIndex = 1;
if (paged.getConditions() != null && !paged.getConditions().isEmpty()) {
boolean isAnd = paged.getAnd() != null && paged.getAnd();
String logicalOperator = isAnd ? " AND " : " OR ";
// 构建条件列表
List<String> conditionSqlList = new ArrayList<>();
for (ConditionEntity condition : paged.getConditions()) {
String conditionSql = buildConditionSql(condition, params, paramIndex);
if (conditionSql != null) {
whereClause.append(" AND ").append(conditionSql);
conditionSqlList.add(conditionSql);
paramIndex++;
}
}
// 如果有条件,使用指定的逻辑运算符连接
if (!conditionSqlList.isEmpty()) {
whereClause.append(" AND (").append(String.join(logicalOperator, conditionSqlList)).append(")");
}
}
// 构建排序
......@@ -110,13 +120,23 @@ public class DatabaseQueryService {
// 处理条件
int paramIndex = 1;
if (paged.getConditions() != null && !paged.getConditions().isEmpty()) {
boolean isAnd = paged.getAnd() != null && paged.getAnd();
String logicalOperator = isAnd ? " AND " : " OR ";
// 构建条件列表
List<String> conditionSqlList = new ArrayList<>();
for (ConditionEntity condition : paged.getConditions()) {
String conditionSql = buildConditionSql(condition, params, paramIndex);
if (conditionSql != null) {
whereClause.append(" AND ").append(conditionSql);
conditionSqlList.add(conditionSql);
paramIndex++;
}
}
// 如果有条件,使用指定的逻辑运算符连接
if (!conditionSqlList.isEmpty()) {
whereClause.append(" AND (").append(String.join(logicalOperator, conditionSqlList)).append(")");
}
}
// 构建排序
......@@ -188,11 +208,48 @@ public class DatabaseQueryService {
* 构建排序子句
*/
private String buildOrderBy(Paged paged) {
// 优先使用sortByList进行多字段排序
if (paged.getSortByList() != null && !paged.getSortByList().isEmpty()) {
StringBuilder orderBy = new StringBuilder(" ORDER BY ");
boolean first = true;
for (String sortBy : paged.getSortByList()) {
if (!first) {
orderBy.append(", ");
}
first = false;
// 解析排序规则,格式如"field asc"或"field desc"
String[] parts = sortBy.trim().split("\\s+");
if (parts.length < 2) {
continue; // 跳过格式不正确的排序规则
}
String fieldName = parts[0];
String direction = "DESC".equalsIgnoreCase(parts[1]) ? "DESC" : "ASC";
// 处理字段名大小写问题:将驼峰命名转换为下划线大写(数据库字段格式)
fieldName = camelCaseToUnderScoreUpperCase(fieldName).toUpperCase();
orderBy.append(fieldName).append(" ").append(direction);
}
// 如果有有效的排序规则,返回构建的ORDER BY子句
if (!first) {
return orderBy.toString();
}
}
// 使用原有sortBy和desc字段进行单字段排序
if (paged.getSortBy() != null && !paged.getSortBy().isEmpty()) {
String direction = Boolean.TRUE.equals(paged.getDesc()) ? "DESC" : "ASC";
return " ORDER BY " + paged.getSortBy() + " " + direction;
// 处理字段名大小写问题:将驼峰命名转换为下划线大写(数据库字段格式)
String fieldName = camelCaseToUnderScoreUpperCase(paged.getSortBy()).toUpperCase();
return " ORDER BY " + fieldName + " " + direction;
}
return " ORDER BY ID DESC"; // 默认按ID降序
// 默认按ID降序
return " ORDER BY ID DESC";
}
/**
......@@ -262,7 +319,7 @@ public class DatabaseQueryService {
return fieldName + " = :" + paramName;
}
}
/**
* 驼峰命名转下划线大写:prodProduct -> PROD_PRODUCT
*/
......
package com.aps.service.impl;
import com.aps.entity.Algorithm.GAScheduleResult;
import com.aps.entity.DiscreteParameterConfigType;
import com.aps.entity.DiscreteParameterDuration;
import com.aps.entity.basic.Entry;
import com.aps.entity.basic.Machine;
......@@ -22,24 +23,23 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
* 计算当前工序需要的换型时间
*/
@Override
public double calculateChangeoverTime(List<GAScheduleResult> existingGenes,
Entry operation,
public double calculateChangeoverTime(Entry lastEntry,
Entry entry,
Machine machine,
List<Entry> allOperations,
int startTime) {
List<Entry> allOperations,int startTime,List<GAScheduleResult> machineTasks) {
if (existingGenes.isEmpty()) {
if ( machineTasks.isEmpty()) {
return 0.0;
}
// 获取当前工序的所有参数
List<ParameterPair> currentParams = getOperationParameters(operation);
List<ParameterPair> currentParams = getOperationParameters(entry);
if (currentParams.isEmpty()) {
return 0.0;
}
// 获取设备上最后一个任务
GAScheduleResult lastGene = existingGenes.stream()
GAScheduleResult lastGene = machineTasks.stream()
.filter(g -> g.getMachineId() == machine.getId())
.max(Comparator.comparingInt(GAScheduleResult::getEndTime))
.orElse(null);
......@@ -48,27 +48,18 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
return 0.0;
}
if (operation.getOrderId()=="a0e61488-0647-4f8e-a27c-cfed9cbbba52"){
System.out.println("lastGene"+lastGene.getExecId());
}
// 找到最后一个任务对应的Entry
Entry prev = allOperations.stream()
.filter(t -> t.getExecId().equals(lastGene.getExecId()))
.findFirst().orElse(null);
if (prev == null) {
if (lastEntry == null) {
return 0.0;
}
List<ParameterPair> lastParams = getOperationParameters(prev);
List<ParameterPair> lastParams = getOperationParameters(lastEntry);
List<DiscreteParameterDuration> parameterDurations = this.lambdaQuery().list();
// 获取该设备上的所有任务(按开始时间排序)
List<GAScheduleResult> machineGenes = existingGenes.stream()
List<GAScheduleResult> machineGenes = machineTasks.stream()
.filter(g -> g.getMachineId() == machine.getId())
.sorted(Comparator.comparingInt(GAScheduleResult::getStartTime))
.collect(Collectors.toList());
......@@ -122,7 +113,7 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
List<DiscreteParameterDuration> parameterDurations,
List<Entry> allOperations) {
DiscreteParameterDuration config = findParameterConfig(currentParam, "WorkingDuration", parameterDurations);
DiscreteParameterDuration config = findParameterConfig(currentParam, DiscreteParameterConfigType.WORKING_DURATION, parameterDurations);
if (config == null) {
return 0.0;
}
......@@ -161,7 +152,7 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
List<DiscreteParameterDuration> parameterDurations,
int startTime, List<Entry> allOperations) {
DiscreteParameterDuration config = findParameterConfig(currentParam, "AbsoluteDuration", parameterDurations);
DiscreteParameterDuration config = findParameterConfig(currentParam, DiscreteParameterConfigType.ABSOLUTE_DURATION, parameterDurations);
if (config == null) {
return 0.0;
}
......@@ -197,7 +188,7 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
List<DiscreteParameterDuration> parameterDurations,
int startTime, List<Entry> allOperations) {
DiscreteParameterDuration config = findParameterConfig(currentParam, "MaxInterval", parameterDurations);
DiscreteParameterDuration config = findParameterConfig(currentParam, DiscreteParameterConfigType.MAX_INTERVAL, parameterDurations);
if (config == null) {
return 0.0;
}
......@@ -231,7 +222,7 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
List<DiscreteParameterDuration> parameterDurations,
List<Entry> allOperations) {
DiscreteParameterDuration config = findParameterConfig(currentParam, "OrderCount", parameterDurations);
DiscreteParameterDuration config = findParameterConfig(currentParam, DiscreteParameterConfigType.ORDER_COUNT, parameterDurations);
if (config == null) {
return 0.0;
}
......@@ -409,12 +400,12 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
.collect(Collectors.toList());
}
private DiscreteParameterDuration findParameterConfig(ParameterPair param, String configType,
private DiscreteParameterDuration findParameterConfig(ParameterPair param, DiscreteParameterConfigType configType,
List<DiscreteParameterDuration> parameterDurations) {
return parameterDurations.stream()
.filter(pd -> param.getGroupId().equals(pd.getGroupid()) &&
param.getParameterId().equals(pd.getParameterid()) &&
configType.equals(pd.getExp1()))
configType.getValue()==pd.getMeasureparameterid())
.findFirst()
.orElse(null);
}
......@@ -443,7 +434,7 @@ public class DiscreteParameterDurationServiceImpl extends ServiceImpl<DiscretePa
List<DiscreteParameterDuration> parameterDurations,
List<Entry> allOperations) {
DiscreteParameterDuration config = findParameterConfig(currentParam, "AccumulatedQuantity", parameterDurations);
DiscreteParameterDuration config = findParameterConfig(currentParam, DiscreteParameterConfigType.WORKING_QUANTITY, parameterDurations);
if (config == null) {
return 0.0;
}
......
......@@ -35,6 +35,8 @@ public class DiscreteParameterMatrixServiceImpl extends ServiceImpl<DiscretePara
@Override
public double getDiscreteParameterMatrixValue(Entry entry, Entry lastEntry) {
// 参数校验
cleanCache(resultCache, MAX_RESULT_CACHE_SIZE);
if (entry == null || lastEntry == null) {
return 0.0;
......
......@@ -1095,7 +1095,7 @@ private GlobalParam InitGlobalParam()
{
globalParam.setIsUseCalendar(c.isValue());
}
else if(c.getTitle().contains("设置时间"))
else if(c.getTitle().equals("设置时间"))
{
//是否考虑换型时间
globalParam.set_smoothChangeOver(c.isValue());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment