完成排产(测试过了)

This commit is contained in:
2026-03-08 16:02:44 +08:00
parent b660ddcc3e
commit 7736ac3311
125 changed files with 10418 additions and 15 deletions

View File

@@ -0,0 +1,30 @@
package com.klp.aps.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
/**
* 工厂日历业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ApsCalendarBo extends BaseEntity {
private Long calendarId;
@NotNull(message = "日期不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalDate calendarDate;
@NotNull(message = "日历类型不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer calendarType;
private String factoryCode;
private String remark;
}

View File

@@ -0,0 +1,38 @@
package com.klp.aps.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 日历班次配置业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ApsCalendarShiftBo extends BaseEntity {
private Long configId;
@NotNull(message = "日期不能为空", groups = {AddGroup.class, EditGroup.class})
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate calendarDate;
@NotNull(message = "产线ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long lineId;
@NotNull(message = "班次ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long shiftId;
private BigDecimal plannedHours;
private Integer status;
private String remark;
}

View File

@@ -0,0 +1,38 @@
package com.klp.aps.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 产线能力业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ApsLineCapabilityBo extends BaseEntity {
private Long capabilityId;
@NotNull(message = "产线ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long lineId;
private Long productId;
private Long processId;
@NotNull(message = "每小时产能不能为空", groups = {AddGroup.class, EditGroup.class})
private BigDecimal capacityPerHour;
private Integer setupMinutes;
private Integer priority;
private Integer isEnabled;
private String remark;
}

View File

@@ -0,0 +1,40 @@
package com.klp.aps.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalTime;
/**
* 班次模板业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ApsShiftTemplateBo extends BaseEntity {
private Long shiftId;
@NotBlank(message = "班次编码不能为空", groups = {AddGroup.class, EditGroup.class})
private String shiftCode;
@NotBlank(message = "班次名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String shiftName;
@NotNull(message = "开始时间不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalTime startTime;
@NotNull(message = "结束时间不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalTime endTime;
private Integer crossDay;
private BigDecimal efficiencyRate;
private String remark;
}

View File

@@ -0,0 +1,22 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 自动排程请求
*/
@Data
public class ApsAutoScheduleReq {
/** 必填计划ID */
@NotNull(message = "planId 不能为空")
private Long planId;
/** 是否清理旧排程(默认 true仅删除未锁定记录 */
private Boolean clearOld;
/** 备注/预留 */
private String remark;
}

View File

@@ -0,0 +1,18 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data
public class ApsConvertFromCrmReq {
@NotBlank(message = "crmOrderId 不能为空")
private String crmOrderId;
/**
* 可选:指定转换的 CRM 明细 itemId 列表;为空则转换该订单全部明细
*/
private List<String> crmItemIds;
}

View File

@@ -0,0 +1,12 @@
package com.klp.aps.domain.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class ApsConvertFromCrmResp {
private Long wmsOrderId;
private String wmsOrderCode;
}

View File

@@ -0,0 +1,22 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
public class ApsConvertFromProductReq {
@NotNull(message = "productId 不能为空")
private Long productId;
@NotNull(message = "quantity 不能为空")
@DecimalMin(value = "0.0001", message = "quantity 必须大于 0")
private BigDecimal quantity;
private String productName;
private String remark;
}

View File

@@ -0,0 +1,17 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class ApsConvertFromProductsReq {
@Valid
@NotEmpty(message = "items 不能为空")
private List<ApsConvertFromProductReq> items;
private String remark;
}

View File

@@ -0,0 +1,33 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 甘特查询参数
*/
@Data
public class ApsGanttQueryReq {
/** 可空:不传则查全部产线 */
private Long lineId;
/** 必填:查询开始时间 */
@NotNull(message = "queryStart 不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime queryStart;
/** 必填:查询结束时间 */
@NotNull(message = "queryEnd 不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime queryEnd;
/** 可空:按计划过滤 */
private Long planId;
/** 可空:按订单过滤 */
private Long orderId;
}

View File

@@ -0,0 +1,30 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 排产锁定请求
*/
@Data
public class ApsLockReq {
/**
* 锁定类型1计划 2产线时间窗 3工序
*/
private Integer lockType;
private Long planId;
private Long lineId;
private Long operationId;
private LocalDateTime lockStartTime;
private LocalDateTime lockEndTime;
private String lockReason;
}

View File

@@ -0,0 +1,38 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 创建计划请求
*/
@Data
public class ApsPlanCreateReq {
/** 必填订单ID */
@NotNull(message = "orderId 不能为空")
private Long orderId;
/** 可空:排产计划编号,不传则后端生成 */
private String planCode;
/** 可空:版本,不传默认 V1 */
private String version;
/** 可空优先级0低 1中 2高 3VIP */
private Integer priority;
/** 可空目标产线ID不传则按默认产线 */
private Long lineId;
/** 可空:计划开始时间 */
private LocalDateTime startDate;
/** 可空:计划结束时间 */
private LocalDateTime endDate;
/** 可空:备注 */
private String remark;
}

View File

@@ -0,0 +1,34 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 单工序重排请求
*/
@Data
public class ApsRescheduleReq {
/** 必填工序排程ID */
@NotNull(message = "operationId 不能为空")
private Long operationId;
/** 必填目标产线ID */
@NotNull(message = "targetLineId 不能为空")
private Long targetLineId;
/** 必填:目标开始时间 */
@NotNull(message = "targetStartTime 不能为空")
private LocalDateTime targetStartTime;
/** 必填:目标结束时间 */
@NotNull(message = "targetEndTime 不能为空")
private LocalDateTime targetEndTime;
/** 必填:重排原因 */
@NotNull(message = "reason 不能为空")
private String reason;
}

View File

@@ -0,0 +1,33 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 统一排产表查询参数MVP
*/
@Data
public class ApsScheduleSheetQueryReq {
/** 可空:计划查询关键字(支持 planId 或 planCode */
private String planId;
/** 可空:订单查询关键字(支持 orderId 或 orderCode */
private String orderId;
/** 可空产线ID不传查全部产线 */
private Long lineId;
/** 必填:查询开始时间 */
@NotNull(message = "queryStart 不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime queryStart;
/** 必填:查询结束时间 */
@NotNull(message = "queryEnd 不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime queryEnd;
}

View File

@@ -0,0 +1,31 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ApsScheduleSheetSupplementSaveReq {
@Valid
@NotEmpty(message = "rows 不能为空")
private List<Row> rows;
@Data
public static class Row {
@NotNull(message = "operationId 不能为空")
private Long operationId;
private Long rawMaterialId;
private String rawCoilNos;
private BigDecimal rawNetWeight;
private String rawPackaging;
private String rawEdgeReq;
private String rawCoatingType;
private String rawLocation;
}
}

View File

@@ -0,0 +1,20 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApsWmsOrderCreateReq {
private String orderCode;
private Long customerId;
private String customerName;
private String salesManager;
private Integer orderStatus;
private String remark;
private BigDecimal taxAmount;
private BigDecimal noTaxAmount;
private String createBy;
private String updateBy;
}

View File

@@ -0,0 +1,21 @@
package com.klp.aps.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApsWmsOrderDetailCreateReq {
private Long orderId;
private Long productId;
private BigDecimal quantity;
private String unit;
private String remark;
private BigDecimal taxPrice;
private BigDecimal noTaxPrice;
private Long groupId;
private Integer delFlag;
private String createBy;
private String updateBy;
}

View File

@@ -0,0 +1,30 @@
package com.klp.aps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
/**
* 工厂日历实体 wms_calendar
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_calendar")
public class ApsCalendarEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "calendar_id", type = IdType.AUTO)
private Long calendarId;
private LocalDate calendarDate;
private Integer calendarType;
private String factoryCode;
private String remark;
}

View File

@@ -0,0 +1,35 @@
package com.klp.aps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 日历班次配置实体 wms_calendar_shift
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_calendar_shift")
public class ApsCalendarShiftEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "config_id", type = IdType.AUTO)
private Long configId;
private LocalDate calendarDate;
private Long lineId;
private Long shiftId;
private BigDecimal plannedHours;
private Integer status;
private String remark;
}

View File

@@ -0,0 +1,38 @@
package com.klp.aps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 产线能力实体 wms_line_capability
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_line_capability")
public class ApsLineCapabilityEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "capability_id", type = IdType.AUTO)
private Long capabilityId;
private Long lineId;
private Long productId;
private Long processId;
private BigDecimal capacityPerHour;
private Integer setupMinutes;
private Integer priority;
private Integer isEnabled;
private String remark;
}

View File

@@ -0,0 +1,18 @@
package com.klp.aps.domain.entity;
import lombok.Data;
/**
* wms_schedule_change_logAPS 自动排程审计)
*/
@Data
public class ApsScheduleChangeLogEntity {
private Long logId;
private Long operationId;
private String changeType;
private String beforeValue;
private String afterValue;
private String changeReason;
private String changeBy;
}

View File

@@ -0,0 +1,24 @@
package com.klp.aps.domain.entity;
import lombok.Data;
import java.time.LocalDateTime;
/**
* wms_schedule_lock
*/
@Data
public class ApsScheduleLockEntity {
private Long lockId;
private Integer lockType;
private Long planId;
private Long lineId;
private Long operationId;
private LocalDateTime lockStartTime;
private LocalDateTime lockEndTime;
private String lockReason;
private Integer status;
private String createBy;
private String updateBy;
}

View File

@@ -0,0 +1,32 @@
package com.klp.aps.domain.entity;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* wms_schedule_operationAPS 自动排程落库)
*/
@Data
public class ApsScheduleOperationEntity {
private Long operationId;
private Long planId;
private Long detailId;
private Long orderId;
private Long orderDetailId;
private Long productId;
private Long processId;
private Long lineId;
private Integer sequenceNo;
private BigDecimal planQty;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Integer setupMinutes;
private Integer status;
private Integer lockedFlag;
private String remark;
private String createBy;
private String updateBy;
}

View File

@@ -0,0 +1,26 @@
package com.klp.aps.domain.entity;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* wms_schedule_plan_detail仅用于 APS MVP 插入)
*/
@Data
public class ApsSchedulePlanDetailEntity {
private Long detailId;
private Long planId;
private Long lineId;
private Long taskId;
private Long productId;
private BigDecimal quantity;
private LocalDate startDate;
private LocalDate endDate;
private String remark;
private Integer delFlag;
private String createBy;
private String updateBy;
}

View File

@@ -0,0 +1,25 @@
package com.klp.aps.domain.entity;
import lombok.Data;
import java.time.LocalDateTime;
/**
* wms_schedule_plan仅用于 APS MVP 插入/回填主键)
*/
@Data
public class ApsSchedulePlanEntity {
private Long planId;
private String planCode;
private String version;
private Long orderId;
private Integer status;
private String remark;
private Integer delFlag;
private String createBy;
private String updateBy;
private Integer priority;
private LocalDateTime startDate;
private LocalDateTime endDate;
}

View File

@@ -0,0 +1,37 @@
package com.klp.aps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalTime;
/**
* 班次模板实体 wms_shift_template
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_shift_template")
public class ApsShiftTemplateEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "shift_id", type = IdType.AUTO)
private Long shiftId;
private String shiftCode;
private String shiftName;
private LocalTime startTime;
private LocalTime endTime;
private Integer crossDay;
private BigDecimal efficiencyRate;
private String remark;
}

View File

@@ -0,0 +1,16 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApsCrmOrderItemRow {
private String itemId;
private String orderId;
private String productType;
private Long productNum;
private BigDecimal contractPrice;
private String remark;
}

View File

@@ -0,0 +1,16 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApsCrmOrderRow {
private String orderId;
private String orderCode;
private String customerId;
private String salesman;
private BigDecimal orderAmount;
private String remark;
}

View File

@@ -0,0 +1,17 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
/**
* 产线能力wms_line_capability最小行
*/
@Data
public class ApsLineCapabilityRow {
private Long lineId;
private BigDecimal capacityPerHour;
private Integer setupMinutes;
private Integer priority;
}

View File

@@ -0,0 +1,9 @@
package com.klp.aps.domain.row;
import lombok.Data;
@Data
public class ApsLineMetaRow {
private Long lineId;
private String lineName;
}

View File

@@ -0,0 +1,16 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
/**
* wms_order_detail 最小取数行
*/
@Data
public class ApsOrderDetailRow {
private Long detailId;
private Long productId;
private BigDecimal quantity;
}

View File

@@ -0,0 +1,17 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
/**
* 计划明细最小行(用于自动排程)
*/
@Data
public class ApsPlanDetailRow {
private Long detailId;
private Long taskId;
private Long lineId;
private Long productId;
private BigDecimal quantity;
}

View File

@@ -0,0 +1,11 @@
package com.klp.aps.domain.row;
import lombok.Data;
@Data
public class ApsProductMetaRow {
private Long productId;
private String productName;
private String specification;
private String material;
}

View File

@@ -0,0 +1,13 @@
package com.klp.aps.domain.row;
import lombok.Data;
/**
* 产品工艺路线wms_product_processe最小行
*/
@Data
public class ApsProductProcessRow {
private Long processId;
private Integer processSequence;
}

View File

@@ -0,0 +1,20 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.time.LocalDateTime;
/**
* wms_schedule_plan 最小行(用于自动排程)
*/
@Data
public class ApsSchedulePlanRow {
private Long planId;
private String planCode;
private String version;
private Long orderId;
private Integer status;
private LocalDateTime startDate;
private LocalDateTime endDate;
}

View File

@@ -0,0 +1,23 @@
package com.klp.aps.domain.row;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* 日历班次时段wms_calendar_shift + wms_shift_template
*/
@Data
public class ApsShiftSlotRow {
private LocalDate calendarDate;
private Long lineId;
private Long shiftId;
private BigDecimal plannedHours;
private LocalTime startTime;
private LocalTime endTime;
private Integer crossDay;
private BigDecimal efficiencyRate;
}

View File

@@ -0,0 +1,10 @@
package com.klp.aps.domain.row;
import lombok.Data;
@Data
public class ApsWmsOrderRow {
private Long orderId;
private String orderCode;
}

View File

@@ -0,0 +1,46 @@
package com.klp.aps.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 日历班次配置视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ApsCalendarShiftVo {
@ExcelProperty(value = "主键")
private Long configId;
@ExcelProperty(value = "日期")
private LocalDate calendarDate;
@ExcelProperty(value = "产线ID")
private Long lineId;
@ExcelProperty(value = "产线名称")
private String lineName;
@ExcelProperty(value = "班次ID")
private Long shiftId;
@ExcelProperty(value = "班次名称")
private String shiftName;
@ExcelProperty(value = "计划工时")
private BigDecimal plannedHours;
@ExcelProperty(value = "状态")
private Integer status;
@ExcelProperty(value = "状态名称")
private String statusName;
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,33 @@
package com.klp.aps.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDate;
/**
* 工厂日历视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ApsCalendarVo {
@ExcelProperty(value = "主键")
private Long calendarId;
@ExcelProperty(value = "日期")
private LocalDate calendarDate;
@ExcelProperty(value = "日历类型")
private Integer calendarType;
@ExcelProperty(value = "日历类型名称")
private String calendarTypeName;
@ExcelProperty(value = "工厂编码")
private String factoryCode;
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,16 @@
package com.klp.aps.domain.vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ApsFactoryCalendarDayVo {
private Integer taskCount = 0;
private Integer shiftCount = 0;
private Integer lineCount = 0;
/** 1=工作日,0=休息日,null=未知 */
private Integer dayStatus;
private List<ApsFactoryCalendarTaskLiteVo> tasks = new ArrayList<>();
}

View File

@@ -0,0 +1,15 @@
package com.klp.aps.domain.vo;
import lombok.Data;
@Data
public class ApsFactoryCalendarOverviewVo {
private Integer taskCount;
private Integer activeLineCount;
private Integer totalLineCount;
private Integer shiftCount;
private String totalHours;
private String peakDayText;
private String busiestLineText;
private String busiestLineShiftText;
}

View File

@@ -0,0 +1,16 @@
package com.klp.aps.domain.vo;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class ApsFactoryCalendarRespVo {
private ApsFactoryCalendarOverviewVo overview;
private List<String> dateList;
private Map<Long, String> lineNameMap;
private Map<Long, String> shiftNameMap;
private Map<String, ApsFactoryCalendarDayVo> lineDayMap;
private Map<String, ApsFactoryCalendarDayVo> lineShiftDayMap;
}

View File

@@ -0,0 +1,9 @@
package com.klp.aps.domain.vo;
import lombok.Data;
@Data
public class ApsFactoryCalendarTaskLiteVo {
private String label;
private String title;
}

View File

@@ -0,0 +1,33 @@
package com.klp.aps.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 甘特图条目返回
*/
@Data
public class ApsGanttItemVo {
private Long operationId;
private Long planId;
private String planCode;
private Long orderId;
private Long orderDetailId;
private Long productId;
private String productName;
private String material;
private String specification;
private Long processId;
private String processName;
private Long lineId;
private String lineName;
private Integer sequenceNo;
private BigDecimal planQty;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Integer status;
private Integer lockedFlag;
}

View File

@@ -0,0 +1,54 @@
package com.klp.aps.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 产线能力视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ApsLineCapabilityVo {
@ExcelProperty(value = "主键")
private Long capabilityId;
@ExcelProperty(value = "产线ID")
private Long lineId;
@ExcelProperty(value = "产线名称")
private String lineName;
@ExcelProperty(value = "产品ID")
private Long productId;
@ExcelProperty(value = "产品名称")
private String productName;
@ExcelProperty(value = "工序ID")
private Long processId;
@ExcelProperty(value = "工序名称")
private String processName;
@ExcelProperty(value = "每小时产能")
private BigDecimal capacityPerHour;
@ExcelProperty(value = "换产时间(分钟)")
private Integer setupMinutes;
@ExcelProperty(value = "优先级")
private Integer priority;
@ExcelProperty(value = "是否启用")
private Integer isEnabled;
@ExcelProperty(value = "是否启用名称")
private String isEnabledName;
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,30 @@
package com.klp.aps.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 统一排产表返回
*/
@Data
public class ApsScheduleSheetResp {
/** 表头元信息(可扩展:计划号/日期/机组等) */
private Map<String, Object> header;
/** 明细行 */
private List<ApsScheduleSheetRowVo> rows;
/** 合计 */
private Summary summary;
@Data
public static class Summary {
private Integer totalCount;
private BigDecimal totalPlanQty;
private BigDecimal totalRawNetWeight;
}
}

View File

@@ -0,0 +1,53 @@
package com.klp.aps.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* 统一排产表行(前端统一展示用)
*
* 说明:字段是“统一超集”,不同机组可只展示子集,但表头保持一致。
*/
@Data
public class ApsScheduleSheetRowVo {
/** 排程主键 */
private Long operationId;
/** 产线 */
private Long lineId;
private String lineName;
/** 计划/订单 */
private Long planId;
private String planCode;
private Long orderId;
private String orderCode;
/** 销售信息 */
private String salesman;
private String customerName;
/** 产品/工序 */
private Long productId;
private String productName;
private String material;
private String specification;
private Long processId;
private String processName;
/** 排程数量/时间 */
private BigDecimal planQty;
private String startTime;
private String endTime;
/** 原料钢卷(来自 wms_material_coil 的展示字段MVP按 productId 兜底关联) */
private Long rawMaterialId; // 回填钢卷ID
private String rawCoilNos; // current_coil_no 逗号分隔
private String rawLocation; // 实际库位名称
private BigDecimal rawNetWeight; // 合计净重(吨/或 kg按库表单位展示
private String rawPackaging; // packaging_requirement
private String rawEdgeReq; // trimming_requirement
private String rawCoatingType; // coating_type
}

View File

@@ -0,0 +1,43 @@
package com.klp.aps.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalTime;
/**
* 班次模板视图对象
*/
@Data
@ExcelIgnoreUnannotated
public class ApsShiftTemplateVo {
@ExcelProperty(value = "主键")
private Long shiftId;
@ExcelProperty(value = "班次编码")
private String shiftCode;
@ExcelProperty(value = "班次名称")
private String shiftName;
@ExcelProperty(value = "开始时间")
private LocalTime startTime;
@ExcelProperty(value = "结束时间")
private LocalTime endTime;
@ExcelProperty(value = "跨天标识")
private Integer crossDay;
@ExcelProperty(value = "跨天标识名称")
private String crossDayName;
@ExcelProperty(value = "效率系数")
private BigDecimal efficiencyRate;
@ExcelProperty(value = "备注")
private String remark;
}