diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessController.java new file mode 100644 index 000000000..15aef1b72 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessController.java @@ -0,0 +1,99 @@ +package com.klp.flow.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.flow.domain.vo.SchProdProcessVo; +import com.klp.flow.domain.bo.SchProdProcessBo; +import com.klp.flow.service.ISchProdProcessService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 工序定义主 + * + * @author klp + * @date 2026-07-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/prodProcess") +public class SchProdProcessController extends BaseController { + + private final ISchProdProcessService iSchProdProcessService; + + /** + * 查询工序定义主列表 + */ + @GetMapping("/list") + public TableDataInfo list(SchProdProcessBo bo, PageQuery pageQuery) { + return iSchProdProcessService.queryPageList(bo, pageQuery); + } + + /** + * 导出工序定义主列表 + */ + @Log(title = "工序定义主", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SchProdProcessBo bo, HttpServletResponse response) { + List list = iSchProdProcessService.queryList(bo); + ExcelUtil.exportExcel(list, "工序定义主", SchProdProcessVo.class, response); + } + + /** + * 获取工序定义主详细信息 + * + * @param processId 主键 + */ + @GetMapping("/{processId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long processId) { + return R.ok(iSchProdProcessService.queryById(processId)); + } + + /** + * 新增工序定义主 + */ + @Log(title = "工序定义主", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchProdProcessBo bo) { + return toAjax(iSchProdProcessService.insertByBo(bo)); + } + + /** + * 修改工序定义主 + */ + @Log(title = "工序定义主", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchProdProcessBo bo) { + return toAjax(iSchProdProcessService.updateByBo(bo)); + } + + /** + * 删除工序定义主 + * + * @param processIds 主键串 + */ + @Log(title = "工序定义主", businessType = BusinessType.DELETE) + @DeleteMapping("/{processIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] processIds) { + return toAjax(iSchProdProcessService.deleteWithValidByIds(Arrays.asList(processIds), true)); + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessStepController.java b/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessStepController.java new file mode 100644 index 000000000..86cfd7d29 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/controller/SchProdProcessStepController.java @@ -0,0 +1,99 @@ +package com.klp.flow.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.flow.domain.vo.SchProdProcessStepVo; +import com.klp.flow.domain.bo.SchProdProcessStepBo; +import com.klp.flow.service.ISchProdProcessStepService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 工序步骤明细 + * + * @author klp + * @date 2026-07-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/prodProcessStep") +public class SchProdProcessStepController extends BaseController { + + private final ISchProdProcessStepService iSchProdProcessStepService; + + /** + * 查询工序步骤明细列表 + */ + @GetMapping("/list") + public TableDataInfo list(SchProdProcessStepBo bo, PageQuery pageQuery) { + return iSchProdProcessStepService.queryPageList(bo, pageQuery); + } + + /** + * 导出工序步骤明细列表 + */ + @Log(title = "工序步骤明细", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SchProdProcessStepBo bo, HttpServletResponse response) { + List list = iSchProdProcessStepService.queryList(bo); + ExcelUtil.exportExcel(list, "工序步骤明细", SchProdProcessStepVo.class, response); + } + + /** + * 获取工序步骤明细详细信息 + * + * @param stepId 主键 + */ + @GetMapping("/{stepId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long stepId) { + return R.ok(iSchProdProcessStepService.queryById(stepId)); + } + + /** + * 新增工序步骤明细 + */ + @Log(title = "工序步骤明细", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SchProdProcessStepBo bo) { + return toAjax(iSchProdProcessStepService.insertByBo(bo)); + } + + /** + * 修改工序步骤明细 + */ + @Log(title = "工序步骤明细", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SchProdProcessStepBo bo) { + return toAjax(iSchProdProcessStepService.updateByBo(bo)); + } + + /** + * 删除工序步骤明细 + * + * @param stepIds 主键串 + */ + @Log(title = "工序步骤明细", businessType = BusinessType.DELETE) + @DeleteMapping("/{stepIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] stepIds) { + return toAjax(iSchProdProcessStepService.deleteWithValidByIds(Arrays.asList(stepIds), true)); + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlan.java b/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlan.java index f42ee092a..4701e832b 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlan.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlan.java @@ -51,6 +51,10 @@ public class EqpMaintenancePlan extends BaseEntity { * 审批状态:0=草稿 1=待审批 2=已审批 3=已驳回 */ private Long approvalStatus; + /** + * 产线 + */ + private String productionLine; /** * 计划开始时间 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlanDetail.java b/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlanDetail.java index f24cd1a7d..1be5a9ede 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlanDetail.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/EqpMaintenancePlanDetail.java @@ -31,14 +31,6 @@ public class EqpMaintenancePlanDetail extends BaseEntity { * 维修计划ID */ private Long planId; - /** - * 巡检记录ID(来源异常工单) - */ - private Long recordId; - /** - * 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id) - */ - private Long equipmentId; /** * 产线名称 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcess.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcess.java new file mode 100644 index 000000000..b5204b93b --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcess.java @@ -0,0 +1,45 @@ +package com.klp.flow.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 工序定义主对象 sch_prod_process + * + * @author klp + * @date 2026-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sch_prod_process") +public class SchProdProcess extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 工序主键ID + */ + @TableId(value = "process_id") + private Long processId; + /** + * 工序名称(如:酸扎镀锌毛化流程) + */ + private String processName; + /** + * 工序描述 + */ + private String processDesc; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcessStep.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcessStep.java new file mode 100644 index 000000000..5b9d0e92c --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdProcessStep.java @@ -0,0 +1,49 @@ +package com.klp.flow.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 工序步骤明细对象 sch_prod_process_step + * + * @author klp + * @date 2026-07-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sch_prod_process_step") +public class SchProdProcessStep extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 步骤主键ID + */ + @TableId(value = "step_id") + private Long stepId; + /** + * 关联工序主表ID(sch_prod_process.process_id) + */ + private Long processId; + /** + * 步骤顺序号(1,2,3...) + */ + private Long stepOrder; + /** + * 步骤名称(如:酸扎、镀锌、毛化辊、毛化镀锌卷) + */ + private String stepName; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java index 287db92d2..16f13dc41 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleDetail.java @@ -33,6 +33,10 @@ public class SchProdScheduleDetail extends BaseEntity { * 来源销售订单明细ID(溯源原始订单规格) */ private Long orderDetailId; + /** + * 关联工序主表ID(sch_prod_process.process_id),表示该明细使用的工序配置 + */ + private Long processId; /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java index ef0cf17e2..478c6cc0a 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/SchProdScheduleItem.java @@ -132,9 +132,9 @@ public class SchProdScheduleItem extends BaseEntity { */ private String scheduleDetailIds; /** - * 工序类型 + * 工序ID */ - private String actionType; + private Long actionId; /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanBo.java index 426112fc6..ace7918f6 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanBo.java @@ -36,6 +36,11 @@ public class EqpMaintenancePlanBo extends BaseEntity { */ private String planName; + /** + * 产线 + */ + private String productionLine; + /** * 维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanDetailBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanDetailBo.java index 026a495ef..f02ccc350 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanDetailBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/EqpMaintenancePlanDetailBo.java @@ -8,6 +8,7 @@ import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; /** * 维修计划明细业务对象 eqp_maintenance_plan_detail @@ -30,16 +31,6 @@ public class EqpMaintenancePlanDetailBo extends BaseEntity { */ private Long planId; - /** - * 巡检记录ID(来源异常工单) - */ - private Long recordId; - - /** - * 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id) - */ - private Long equipmentId; - /** * 产线名称 */ @@ -53,6 +44,8 @@ public class EqpMaintenancePlanDetailBo extends BaseEntity { /** * 单条维修项计划执行日期 */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") private Date itemPlanDate; /** diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessBo.java new file mode 100644 index 000000000..ef545fec9 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessBo.java @@ -0,0 +1,41 @@ +package com.klp.flow.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + + +/** + * 工序定义主业务对象 sch_prod_process + * + * @author klp + * @date 2026-07-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SchProdProcessBo extends BaseEntity { + + /** + * 工序主键ID + */ + private Long processId; + + /** + * 工序名称(如:酸扎镀锌毛化流程) + */ + private String processName; + + /** + * 工序描述 + */ + private String processDesc; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessStepBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessStepBo.java new file mode 100644 index 000000000..bf5fea5ec --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdProcessStepBo.java @@ -0,0 +1,46 @@ +package com.klp.flow.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + + +/** + * 工序步骤明细业务对象 sch_prod_process_step + * + * @author klp + * @date 2026-07-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class SchProdProcessStepBo extends BaseEntity { + + /** + * 步骤主键ID + */ + private Long stepId; + + /** + * 关联工序主表ID(sch_prod_process.process_id) + */ + private Long processId; + + /** + * 步骤顺序号(1,2,3...) + */ + private Long stepOrder; + + /** + * 步骤名称(如:酸扎、镀锌、毛化辊、毛化镀锌卷) + */ + private String stepName; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java index 2e2485bae..692f13a57 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleDetailBo.java @@ -33,6 +33,11 @@ public class SchProdScheduleDetailBo extends BaseEntity { */ private Long orderDetailId; + /** + * 关联工序主表ID(sch_prod_process.process_id),表示该明细使用的工序配置 + */ + private Long processId; + /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java index 64a8d0799..d8ef353f6 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/SchProdScheduleItemBo.java @@ -159,9 +159,9 @@ public class SchProdScheduleItemBo extends BaseEntity { private String scheduleDetailIds; /** - * 工序类型 + * 工序ID */ - private String actionType; + private Long actionId; /** * 规格 例:1.0X1250 diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanDetailVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanDetailVo.java index d2f3743bc..61569a24a 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanDetailVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanDetailVo.java @@ -34,20 +34,6 @@ public class EqpMaintenancePlanDetailVo { @ExcelProperty(value = "维修计划ID") private Long planId; - /** - * 巡检记录ID(来源异常工单) - */ - @ExcelProperty(value = "巡检记录ID", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "来=源异常工单") - private Long recordId; - - /** - * 设备ID(用户手动选择,关联 eqp_equipment_management.equipment_id) - */ - @ExcelProperty(value = "设备ID", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "用=户手动选择,关联,e=qp_equipment_management.equipment_id") - private Long equipmentId; - /** * 产线名称 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanVo.java index b4f0effbb..7a6c58b90 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/EqpMaintenancePlanVo.java @@ -40,6 +40,12 @@ public class EqpMaintenancePlanVo { @ExcelProperty(value = "计划名称") private String planName; + /** + * 产线 + */ + @ExcelProperty(value = "产线") + private String productionLine; + /** * 维修类型:1=定期保养 2=安全整改 3=专项检修 4=故障维修 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessStepVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessStepVo.java new file mode 100644 index 000000000..5d4dadbe3 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessStepVo.java @@ -0,0 +1,56 @@ +package com.klp.flow.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 工序步骤明细视图对象 sch_prod_process_step + * + * @author klp + * @date 2026-07-03 + */ +@Data +@ExcelIgnoreUnannotated +public class SchProdProcessStepVo { + + private static final long serialVersionUID = 1L; + + /** + * 步骤主键ID + */ + @ExcelProperty(value = "步骤主键ID") + private Long stepId; + + /** + * 关联工序主表ID(sch_prod_process.process_id) + */ + @ExcelProperty(value = "关联工序主表ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "s=ch_prod_process.process_id") + private Long processId; + + /** + * 步骤顺序号(1,2,3...) + */ + @ExcelProperty(value = "步骤顺序号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=,2,3...") + private Long stepOrder; + + /** + * 步骤名称(如:酸扎、镀锌、毛化辊、毛化镀锌卷) + */ + @ExcelProperty(value = "步骤名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=:酸扎、镀锌、毛化辊、毛化镀锌卷") + private String stepName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessVo.java new file mode 100644 index 000000000..a7bdcd57c --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdProcessVo.java @@ -0,0 +1,48 @@ +package com.klp.flow.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.klp.common.annotation.ExcelDictFormat; +import com.klp.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 工序定义主视图对象 sch_prod_process + * + * @author klp + * @date 2026-07-03 + */ +@Data +@ExcelIgnoreUnannotated +public class SchProdProcessVo { + + private static final long serialVersionUID = 1L; + + /** + * 工序主键ID + */ + @ExcelProperty(value = "工序主键ID") + private Long processId; + + /** + * 工序名称(如:酸扎镀锌毛化流程) + */ + @ExcelProperty(value = "工序名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=:酸扎镀锌毛化流程") + private String processName; + + /** + * 工序描述 + */ + @ExcelProperty(value = "工序描述") + private String processDesc; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java index b5e33912a..99ba8ad13 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleDetailVo.java @@ -40,6 +40,12 @@ public class SchProdScheduleDetailVo { @ExcelDictFormat(readConverterExp = "溯=源原始订单规格") private Long orderDetailId; + /** + * 关联工序主表ID(sch_prod_process.process_id),表示该明细使用的工序配置 + */ + @ExcelProperty(value = "关联工序主表ID") + private Long processId; + /** * 规格 例:1.0X1250 */ diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java index 1dc7f0001..87ee27df3 100644 --- a/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java +++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/SchProdScheduleItemVo.java @@ -190,10 +190,10 @@ public class SchProdScheduleItemVo { private String scheduleDetailIds; /** - * 工序类型 + * 工序ID */ - @ExcelProperty(value = "工序类型") - private String actionType; + @ExcelProperty(value = "工序ID") + private Long actionId; /** * 规格 例:1.0X1250 diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessMapper.java new file mode 100644 index 000000000..a9cc0fb8c --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessMapper.java @@ -0,0 +1,15 @@ +package com.klp.flow.mapper; + +import com.klp.flow.domain.SchProdProcess; +import com.klp.flow.domain.vo.SchProdProcessVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 工序定义主Mapper接口 + * + * @author klp + * @date 2026-07-03 + */ +public interface SchProdProcessMapper extends BaseMapperPlus { + +} diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessStepMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessStepMapper.java new file mode 100644 index 000000000..63188b15d --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/mapper/SchProdProcessStepMapper.java @@ -0,0 +1,15 @@ +package com.klp.flow.mapper; + +import com.klp.flow.domain.SchProdProcessStep; +import com.klp.flow.domain.vo.SchProdProcessStepVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 工序步骤明细Mapper接口 + * + * @author klp + * @date 2026-07-03 + */ +public interface SchProdProcessStepMapper extends BaseMapperPlus { + +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessService.java new file mode 100644 index 000000000..0f9b664ab --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessService.java @@ -0,0 +1,49 @@ +package com.klp.flow.service; + +import com.klp.flow.domain.SchProdProcess; +import com.klp.flow.domain.vo.SchProdProcessVo; +import com.klp.flow.domain.bo.SchProdProcessBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工序定义主Service接口 + * + * @author klp + * @date 2026-07-03 + */ +public interface ISchProdProcessService { + + /** + * 查询工序定义主 + */ + SchProdProcessVo queryById(Long processId); + + /** + * 查询工序定义主列表 + */ + TableDataInfo queryPageList(SchProdProcessBo bo, PageQuery pageQuery); + + /** + * 查询工序定义主列表 + */ + List queryList(SchProdProcessBo bo); + + /** + * 新增工序定义主 + */ + Boolean insertByBo(SchProdProcessBo bo); + + /** + * 修改工序定义主 + */ + Boolean updateByBo(SchProdProcessBo bo); + + /** + * 校验并批量删除工序定义主信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessStepService.java b/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessStepService.java new file mode 100644 index 000000000..644486b2f --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/ISchProdProcessStepService.java @@ -0,0 +1,49 @@ +package com.klp.flow.service; + +import com.klp.flow.domain.SchProdProcessStep; +import com.klp.flow.domain.vo.SchProdProcessStepVo; +import com.klp.flow.domain.bo.SchProdProcessStepBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工序步骤明细Service接口 + * + * @author klp + * @date 2026-07-03 + */ +public interface ISchProdProcessStepService { + + /** + * 查询工序步骤明细 + */ + SchProdProcessStepVo queryById(Long stepId); + + /** + * 查询工序步骤明细列表 + */ + TableDataInfo queryPageList(SchProdProcessStepBo bo, PageQuery pageQuery); + + /** + * 查询工序步骤明细列表 + */ + List queryList(SchProdProcessStepBo bo); + + /** + * 新增工序步骤明细 + */ + Boolean insertByBo(SchProdProcessStepBo bo); + + /** + * 修改工序步骤明细 + */ + Boolean updateByBo(SchProdProcessStepBo bo); + + /** + * 校验并批量删除工序步骤明细信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanDetailServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanDetailServiceImpl.java index 5da87b2f4..3298c9cb6 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanDetailServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanDetailServiceImpl.java @@ -62,8 +62,6 @@ public class EqpMaintenancePlanDetailServiceImpl implements IEqpMaintenancePlanD Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getPlanId() != null, EqpMaintenancePlanDetail::getPlanId, bo.getPlanId()); - lqw.eq(bo.getRecordId() != null, EqpMaintenancePlanDetail::getRecordId, bo.getRecordId()); - lqw.eq(bo.getEquipmentId() != null, EqpMaintenancePlanDetail::getEquipmentId, bo.getEquipmentId()); lqw.eq(StringUtils.isNotBlank(bo.getProductionLine()), EqpMaintenancePlanDetail::getProductionLine, bo.getProductionLine()); lqw.like(StringUtils.isNotBlank(bo.getComponentName()), EqpMaintenancePlanDetail::getComponentName, bo.getComponentName()); lqw.eq(bo.getItemPlanDate() != null, EqpMaintenancePlanDetail::getItemPlanDate, bo.getItemPlanDate()); diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanServiceImpl.java index e9a24578c..8137b7963 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/EqpMaintenancePlanServiceImpl.java @@ -63,6 +63,7 @@ public class EqpMaintenancePlanServiceImpl implements IEqpMaintenancePlanService LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getPlanNo()), EqpMaintenancePlan::getPlanNo, bo.getPlanNo()); lqw.like(StringUtils.isNotBlank(bo.getPlanName()), EqpMaintenancePlan::getPlanName, bo.getPlanName()); + lqw.eq(StringUtils.isNotBlank(bo.getProductionLine()), EqpMaintenancePlan::getProductionLine, bo.getProductionLine()); lqw.eq(bo.getRepairType() != null, EqpMaintenancePlan::getRepairType, bo.getRepairType()); lqw.eq(bo.getPriorityLevel() != null, EqpMaintenancePlan::getPriorityLevel, bo.getPriorityLevel()); lqw.eq(bo.getPlanStatus() != null, EqpMaintenancePlan::getPlanStatus, bo.getPlanStatus()); diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessServiceImpl.java new file mode 100644 index 000000000..92a327760 --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessServiceImpl.java @@ -0,0 +1,110 @@ +package com.klp.flow.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.flow.domain.bo.SchProdProcessBo; +import com.klp.flow.domain.vo.SchProdProcessVo; +import com.klp.flow.domain.SchProdProcess; +import com.klp.flow.mapper.SchProdProcessMapper; +import com.klp.flow.service.ISchProdProcessService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工序定义主Service业务层处理 + * + * @author klp + * @date 2026-07-03 + */ +@RequiredArgsConstructor +@Service +public class SchProdProcessServiceImpl implements ISchProdProcessService { + + private final SchProdProcessMapper baseMapper; + + /** + * 查询工序定义主 + */ + @Override + public SchProdProcessVo queryById(Long processId){ + return baseMapper.selectVoById(processId); + } + + /** + * 查询工序定义主列表 + */ + @Override + public TableDataInfo queryPageList(SchProdProcessBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询工序定义主列表 + */ + @Override + public List queryList(SchProdProcessBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchProdProcessBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getProcessName()), SchProdProcess::getProcessName, bo.getProcessName()); + lqw.eq(StringUtils.isNotBlank(bo.getProcessDesc()), SchProdProcess::getProcessDesc, bo.getProcessDesc()); + return lqw; + } + + /** + * 新增工序定义主 + */ + @Override + public Boolean insertByBo(SchProdProcessBo bo) { + SchProdProcess add = BeanUtil.toBean(bo, SchProdProcess.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setProcessId(add.getProcessId()); + } + return flag; + } + + /** + * 修改工序定义主 + */ + @Override + public Boolean updateByBo(SchProdProcessBo bo) { + SchProdProcess update = BeanUtil.toBean(bo, SchProdProcess.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchProdProcess entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除工序定义主 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessStepServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessStepServiceImpl.java new file mode 100644 index 000000000..d503d253e --- /dev/null +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdProcessStepServiceImpl.java @@ -0,0 +1,111 @@ +package com.klp.flow.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.flow.domain.bo.SchProdProcessStepBo; +import com.klp.flow.domain.vo.SchProdProcessStepVo; +import com.klp.flow.domain.SchProdProcessStep; +import com.klp.flow.mapper.SchProdProcessStepMapper; +import com.klp.flow.service.ISchProdProcessStepService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工序步骤明细Service业务层处理 + * + * @author klp + * @date 2026-07-03 + */ +@RequiredArgsConstructor +@Service +public class SchProdProcessStepServiceImpl implements ISchProdProcessStepService { + + private final SchProdProcessStepMapper baseMapper; + + /** + * 查询工序步骤明细 + */ + @Override + public SchProdProcessStepVo queryById(Long stepId){ + return baseMapper.selectVoById(stepId); + } + + /** + * 查询工序步骤明细列表 + */ + @Override + public TableDataInfo queryPageList(SchProdProcessStepBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询工序步骤明细列表 + */ + @Override + public List queryList(SchProdProcessStepBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(SchProdProcessStepBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getProcessId() != null, SchProdProcessStep::getProcessId, bo.getProcessId()); + lqw.eq(bo.getStepOrder() != null, SchProdProcessStep::getStepOrder, bo.getStepOrder()); + lqw.like(StringUtils.isNotBlank(bo.getStepName()), SchProdProcessStep::getStepName, bo.getStepName()); + return lqw; + } + + /** + * 新增工序步骤明细 + */ + @Override + public Boolean insertByBo(SchProdProcessStepBo bo) { + SchProdProcessStep add = BeanUtil.toBean(bo, SchProdProcessStep.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setStepId(add.getStepId()); + } + return flag; + } + + /** + * 修改工序步骤明细 + */ + @Override + public Boolean updateByBo(SchProdProcessStepBo bo) { + SchProdProcessStep update = BeanUtil.toBean(bo, SchProdProcessStep.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SchProdProcessStep entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除工序步骤明细 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java index 1d623b884..a83f5ecbf 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleDetailServiceImpl.java @@ -99,6 +99,7 @@ public class SchProdScheduleDetailServiceImpl implements ISchProdScheduleDetailS LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getScheduleId() != null, SchProdScheduleDetail::getScheduleId, bo.getScheduleId()); lqw.eq(bo.getOrderDetailId() != null, SchProdScheduleDetail::getOrderDetailId, bo.getOrderDetailId()); + lqw.eq(bo.getProcessId() != null, SchProdScheduleDetail::getProcessId, bo.getProcessId()); lqw.eq(StringUtils.isNotBlank(bo.getSpec()), SchProdScheduleDetail::getSpec, bo.getSpec()); lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), SchProdScheduleDetail::getMaterial, bo.getMaterial()); lqw.eq(bo.getScheduleWeight() != null, SchProdScheduleDetail::getScheduleWeight, bo.getScheduleWeight()); diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java index 1254fffeb..342c8be37 100644 --- a/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java +++ b/klp-flow/src/main/java/com/klp/flow/service/impl/SchProdScheduleItemServiceImpl.java @@ -108,8 +108,8 @@ public class SchProdScheduleItemServiceImpl implements ISchProdScheduleItemServi lqw.eq(bo.getScheduleWeight() != null, SchProdScheduleItem::getScheduleWeight, bo.getScheduleWeight()); lqw.eq(StringUtils.isNotBlank(bo.getProductItem()), SchProdScheduleItem::getProductItem, bo.getProductItem()); lqw.eq(StringUtils.isNotBlank(bo.getRowRemark()), SchProdScheduleItem::getRowRemark, bo.getRowRemark()); - // actionType - lqw.eq(StringUtils.isNotBlank(bo.getActionType()), SchProdScheduleItem::getActionType, bo.getActionType()); + // actionId + lqw.eq(bo.getActionId() != null, SchProdScheduleItem::getActionId, bo.getActionId()); return lqw; } diff --git a/klp-flow/src/main/resources/mapper/flow/EqpMaintenancePlanDetailMapper.xml b/klp-flow/src/main/resources/mapper/flow/EqpMaintenancePlanDetailMapper.xml index 7242f9763..a51a88805 100644 --- a/klp-flow/src/main/resources/mapper/flow/EqpMaintenancePlanDetailMapper.xml +++ b/klp-flow/src/main/resources/mapper/flow/EqpMaintenancePlanDetailMapper.xml @@ -7,8 +7,6 @@ - - diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdProcessMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdProcessMapper.xml new file mode 100644 index 000000000..06a74e4bf --- /dev/null +++ b/klp-flow/src/main/resources/mapper/flow/SchProdProcessMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdProcessStepMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdProcessStepMapper.xml new file mode 100644 index 000000000..bea571c78 --- /dev/null +++ b/klp-flow/src/main/resources/mapper/flow/SchProdProcessStepMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml index 050c9567d..1bc3c7135 100644 --- a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml +++ b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleDetailMapper.xml @@ -8,6 +8,7 @@ + diff --git a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml index 766356f0f..b63fb9c33 100644 --- a/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml +++ b/klp-flow/src/main/resources/mapper/flow/SchProdScheduleItemMapper.xml @@ -31,8 +31,8 @@ - - + + diff --git a/klp-ui/src/api/wms/attendance.js b/klp-ui/src/api/wms/attendance.js index 8de38d68e..d1d4090c9 100644 --- a/klp-ui/src/api/wms/attendance.js +++ b/klp-ui/src/api/wms/attendance.js @@ -56,3 +56,13 @@ export function syncRecords({ starttime, endtime }) { } }) } + +// 导出考勤记录表 +export function exportAttendanceReport(params) { + return request({ + url: '/wms/attendanceRecords/exportReport', + method: 'post', + params: params, + responseType: 'blob' + }) +} diff --git a/klp-ui/src/utils/meta.js b/klp-ui/src/utils/meta.js index 5bcc8e65d..2fe564f8f 100644 --- a/klp-ui/src/utils/meta.js +++ b/klp-ui/src/utils/meta.js @@ -1,26 +1,26 @@ // lockValue: 锁值,用于防止并发操作,不同的lockValue对应不同的锁 // 1:分步加工 2. 退火 3. 酸轧 4. 酸轧分条 4. 合卷 export const PROCESSES = [ - { name: '酸连轧工序', actionType: 11, api: 'pendingAction', lockValue: 3 }, - { name: '酸轧分条工序', actionType: 120, api: 'pendingAction', lockValue: 4 }, - { name: '酸轧合卷', actionType: 201, api: 'pendingAction', lockValue: 5 }, - { name: '镀锌合卷', actionType: 202, api: 'pendingAction', lockValue: 5 }, - { name: '脱脂合卷', actionType: 203, api: 'pendingAction', lockValue: 5 }, - { name: '拉矫平整合卷', actionType: 204, api: 'pendingAction', lockValue: 5 }, - { name: '双机架合卷', actionType: 205, api: 'pendingAction', lockValue: 5 }, - { name: '镀铬合卷', actionType: 206, api: 'pendingAction', lockValue: 5 }, - { name: '镀锌工序', actionType: 501, api: 'specialSplit', lockValue: 1 }, - { name: '脱脂工序', actionType: 502, api: 'specialSplit', lockValue: 1 }, - { name: '拉矫平整工序', actionType: 503, api: 'specialSplit', lockValue: 1 }, - { name: '双机架工序', actionType: 504, api: 'specialSplit', lockValue: 1 }, - { name: '镀铬工序', actionType: 505, api: 'specialSplit', lockValue: 1 }, - { name: '纵剪分条工序', actionType: 506, api: 'specialSplit', lockValue: 1 }, - { name: '酸轧修复工序', actionType: 520, api: 'specialSplit', lockValue: 1 }, - { name: '镀锌修复工序', actionType: 521, api: 'specialSplit', lockValue: 1 }, - { name: '脱脂修复工序', actionType: 522, api: 'specialSplit', lockValue: 1 }, - { name: '拉矫修复工序', actionType: 523, api: 'specialSplit', lockValue: 1 }, - { name: '双机架修复工序', actionType: 524, api: 'specialSplit', lockValue: 1 }, - { name: '镀铬修复工序', actionType: 525, api: 'specialSplit', lockValue: 1 }, + { name: '酸连轧工序', actionId: 11, api: 'pendingAction', lockValue: 3 }, + { name: '酸轧分条工序', actionId: 120, api: 'pendingAction', lockValue: 4 }, + { name: '酸轧合卷', actionId: 201, api: 'pendingAction', lockValue: 5 }, + { name: '镀锌合卷', actionId: 202, api: 'pendingAction', lockValue: 5 }, + { name: '脱脂合卷', actionId: 203, api: 'pendingAction', lockValue: 5 }, + { name: '拉矫平整合卷', actionId: 204, api: 'pendingAction', lockValue: 5 }, + { name: '双机架合卷', actionId: 205, api: 'pendingAction', lockValue: 5 }, + { name: '镀铬合卷', actionId: 206, api: 'pendingAction', lockValue: 5 }, + { name: '镀锌工序', actionId: 501, api: 'specialSplit', lockValue: 1 }, + { name: '脱脂工序', actionId: 502, api: 'specialSplit', lockValue: 1 }, + { name: '拉矫平整工序', actionId: 503, api: 'specialSplit', lockValue: 1 }, + { name: '双机架工序', actionId: 504, api: 'specialSplit', lockValue: 1 }, + { name: '镀铬工序', actionId: 505, api: 'specialSplit', lockValue: 1 }, + { name: '纵剪分条工序', actionId: 506, api: 'specialSplit', lockValue: 1 }, + { name: '酸轧修复工序', actionId: 520, api: 'specialSplit', lockValue: 1 }, + { name: '镀锌修复工序', actionId: 521, api: 'specialSplit', lockValue: 1 }, + { name: '脱脂修复工序', actionId: 522, api: 'specialSplit', lockValue: 1 }, + { name: '拉矫修复工序', actionId: 523, api: 'specialSplit', lockValue: 1 }, + { name: '双机架修复工序', actionId: 524, api: 'specialSplit', lockValue: 1 }, + { name: '镀铬修复工序', actionId: 525, api: 'specialSplit', lockValue: 1 }, ] export const PRODUCTION_LINES = [ diff --git a/klp-ui/src/views/cost/trend.vue b/klp-ui/src/views/cost/trend.vue new file mode 100644 index 000000000..3562eca4b --- /dev/null +++ b/klp-ui/src/views/cost/trend.vue @@ -0,0 +1,488 @@ + + + + + diff --git a/klp-ui/src/views/micro/pages/acid/components/ActualPerformance.vue b/klp-ui/src/views/micro/pages/acid/components/ActualPerformance.vue index f421d9969..9fdce0e97 100644 --- a/klp-ui/src/views/micro/pages/acid/components/ActualPerformance.vue +++ b/klp-ui/src/views/micro/pages/acid/components/ActualPerformance.vue @@ -663,8 +663,17 @@ export default { if (v == null || rv == null || rv === 0) return null return parseFloat(v.toFixed(3)) }) - const chartTitle = title + // 设定值(绝对厚度 mm):取首个非空 REF,写入标题 + let refVal = null + for (const r of rows) { + const rv = getRowVal(r, refCol) + if (rv != null && rv !== 0) { refVal = rv; break } + } + const chartTitle = refVal != null ? `${title} - 设定值: ${refVal.toFixed(3)}[mm]` : title + const extras = [] + // 设定基准线恒为 0 + extras.push({ name: '设定值(0)', data: yData.map(v => v == null ? null : 0), color: '#909399', dash: false }) // TOPLIMIT/BOTLIMIT 是冷轧机出口厚度的 AGC 公差带(逐行变化, // 头尾加减速段约 ±2.5%、稳态段收紧到约 ±1%),只约束出口厚度。 diff --git a/klp-ui/src/views/system/menu/index.vue b/klp-ui/src/views/system/menu/index.vue index 825f71f4c..92e302b3e 100644 --- a/klp-ui/src/views/system/menu/index.vue +++ b/klp-ui/src/views/system/menu/index.vue @@ -231,15 +231,55 @@ - + - 菜单样式 +
+ +
+
+ 快捷样式: + 浅红 + 浅绿 + 浅橙 + 浅蓝 + 浅紫 + 暖色 + 加粗 + 斜体 + 清除 +
+
+ 校验 + {{ showPreview ? '隐藏预览' : '预览样式' }} +
+
+
+ {{ styleError }} +
+
+
菜单预览效果:
+
+
+ 📁 + {{ form.menuName || '菜单名称' }} +
+
+
+
@@ -311,6 +351,16 @@ export default { name: "Menu", dicts: ['sys_show_hide', 'sys_normal_disable'], components: { Treeselect, IconSelect }, + computed: { + parsedStyle() { + if (!this.form.style) return {}; + try { + return JSON.parse(this.form.style); + } catch (e) { + return {}; + } + } + }, data() { return { // 遮罩层 @@ -334,6 +384,10 @@ export default { menuName: undefined, visible: undefined }, + // 菜单样式预览 + showPreview: false, + // 菜单样式校验错误 + styleError: '', // 表单参数 form: {}, // 表单校验 @@ -358,6 +412,67 @@ export default { selected(name) { this.form.icon = name; }, + /** 应用样式预设 */ + applyStylePreset(type) { + const presets = { + danger: { background: 'linear-gradient(135deg, #fff5f5 0%, #ffe0e0 100%)', color: '#c45c5c', borderRadius: '4px', border: '1px solid #ffd4d4' }, + success: { background: 'linear-gradient(135deg, #f0fff4 0%, #dcffe4 100%)', color: '#5c8a6b', borderRadius: '4px', border: '1px solid #c3e6cb' }, + warning: { background: 'linear-gradient(135deg, #fffdf0 0%, #fff3cd 100%)', color: '#b8860b', borderRadius: '4px', border: '1px solid #ffeeba' }, + primary: { background: 'linear-gradient(135deg, #f0f7ff 0%, #d6eaff 100%)', color: '#4a7fb5', borderRadius: '4px', border: '1px solid #b8daff' }, + accent: { background: 'linear-gradient(135deg, #f8f0ff 0%, #e8d5ff 100%)', color: '#8b5cf6', borderRadius: '4px', border: '1px solid #d8b4fe' }, + warm: { background: 'linear-gradient(135deg, #fff8f0 0%, #ffedd5 100%)', color: '#c27832', borderRadius: '4px', border: '1px solid #fed7aa' }, + bold: { fontWeight: '600', color: '#303133' }, + italic: { fontStyle: 'italic', color: '#606266' }, + clear: {} + }; + if (type === 'clear') { + this.form.style = ''; + this.styleError = ''; + } else { + // 合并已有样式 + let currentStyle = {}; + if (this.form.style) { + try { + currentStyle = JSON.parse(this.form.style); + } catch (e) { + currentStyle = {}; + } + } + const mergedStyle = { ...currentStyle, ...presets[type] }; + this.form.style = JSON.stringify(mergedStyle); + this.validateStyle(); + } + }, + /** 校验菜单样式JSON格式 */ + validateStyle() { + this.styleError = ''; + if (!this.form.style) { + this.$modal.msgSuccess('样式为空,无需校验'); + return; + } + try { + const styleObj = JSON.parse(this.form.style); + if (typeof styleObj !== 'object' || styleObj === null) { + this.styleError = '样式必须是JSON对象格式'; + this.$modal.msgError('校验失败:样式必须是JSON对象格式'); + return; + } + // 检查是否包含有效的CSS属性 + const validCssProps = [ + 'backgroundColor', 'background', 'color', 'fontWeight', 'fontSize', 'fontStyle', + 'borderRadius', 'padding', 'margin', 'border', 'textAlign', + 'textDecoration', 'lineHeight', 'letterSpacing', 'opacity', 'boxShadow' + ]; + const invalidProps = Object.keys(styleObj).filter(prop => !validCssProps.includes(prop)); + if (invalidProps.length > 0) { + this.styleError = `可能无效的属性:${invalidProps.join(', ')}`; + } + this.$modal.msgSuccess('校验通过:JSON格式正确'); + } catch (e) { + this.styleError = `JSON格式错误:${e.message}`; + this.$modal.msgError('校验失败:' + e.message); + } + }, /** 查询菜单列表 */ getList() { this.loading = true; @@ -554,3 +669,107 @@ export default { } }; + + diff --git a/klp-ui/src/views/wms/coil/do/warehousing.vue b/klp-ui/src/views/wms/coil/do/warehousing.vue index 124e4521b..010347110 100644 --- a/klp-ui/src/views/wms/coil/do/warehousing.vue +++ b/klp-ui/src/views/wms/coil/do/warehousing.vue @@ -20,7 +20,7 @@ + @click.native="$router.push('/wip/receive/plan')"> diff --git a/klp-ui/src/views/wms/coil/info/coil-info.scss b/klp-ui/src/views/wms/coil/info/coil-info.scss index ad84da384..1f24d2092 100644 --- a/klp-ui/src/views/wms/coil/info/coil-info.scss +++ b/klp-ui/src/views/wms/coil/info/coil-info.scss @@ -598,6 +598,14 @@ text-shadow: 0 0 6px rgba(100, 116, 139, 0.4) !important; } +.attr-arrow { + display: inline-block; + margin: 0 4px; + color: #94a3b8; + font-size: 11px; + font-weight: 400; +} + .coil-futuristic-footer { display: flex; justify-content: space-around; diff --git a/klp-ui/src/views/wms/coil/info/components/BasicInfoSection.vue b/klp-ui/src/views/wms/coil/info/components/BasicInfoSection.vue index f90c0ad6a..d1d9bbaab 100644 --- a/klp-ui/src/views/wms/coil/info/components/BasicInfoSection.vue +++ b/klp-ui/src/views/wms/coil/info/components/BasicInfoSection.vue @@ -5,7 +5,7 @@ 基本信息
- +
@@ -14,7 +14,20 @@ export default { name: 'BasicInfoSection', props: { - coilInfo: { type: Object, default: () => ({}) } + coilInfo: { type: Object, default: () => ({}) }, + initialQualityStatus: { type: String, default: '' } + }, + computed: { + displayCoilInfo() { + const currentStatus = this.coilInfo.qualityStatus || '-' + if (this.initialQualityStatus && this.initialQualityStatus !== currentStatus) { + return { + ...this.coilInfo, + qualityStatus: `${this.initialQualityStatus} → ${currentStatus}` + } + } + return this.coilInfo + } } } diff --git a/klp-ui/src/views/wms/coil/info/components/CoilCardFuturistic.vue b/klp-ui/src/views/wms/coil/info/components/CoilCardFuturistic.vue index 5dbe514c8..5f0b00865 100644 --- a/klp-ui/src/views/wms/coil/info/components/CoilCardFuturistic.vue +++ b/klp-ui/src/views/wms/coil/info/components/CoilCardFuturistic.vue @@ -55,7 +55,11 @@
{{ leftLabel }} - {{ coil.qualityStatus || '-' }} + {{ initialQualityStatus || '-' }} +
@@ -116,7 +120,8 @@ export default { name: 'CoilCardFuturistic', props: { coil: { type: Object, default: () => ({}) }, - type: { type: String, default: 'inbound' } + type: { type: String, default: 'inbound' }, + initialQualityStatus: { type: String, default: '' } }, data() { uid++ @@ -142,6 +147,13 @@ export default { }, leftLabel() { return this.type === 'inbound' ? '质量状态' : '状态' + }, + currentQualityStatus() { + return this.coil.qualityStatus || '-' + }, + hasQualityChanged() { + return this.initialQualityStatus && this.currentQualityStatus !== '-' + && this.initialQualityStatus !== this.currentQualityStatus } }, methods: { diff --git a/klp-ui/src/views/wms/coil/info/components/LifecycleTrace.vue b/klp-ui/src/views/wms/coil/info/components/LifecycleTrace.vue index c195d607f..ff74dfe18 100644 --- a/klp-ui/src/views/wms/coil/info/components/LifecycleTrace.vue +++ b/klp-ui/src/views/wms/coil/info/components/LifecycleTrace.vue @@ -38,6 +38,7 @@ 📦 入库
无钢卷信息 @@ -147,7 +148,8 @@ export default { components: { CoilTraceResult, CoilCardFuturistic, CoilCardCompact, ShipmentCard }, props: { traceResult: { type: Object, default: null }, - coilInfo: { type: Object, default: () => ({}) } + coilInfo: { type: Object, default: () => ({}) }, + initialQualityStatus: { type: String, default: '' } }, methods: { isEmpty(list) { diff --git a/klp-ui/src/views/wms/coil/info/index.vue b/klp-ui/src/views/wms/coil/info/index.vue index 212b65572..e56a40741 100644 --- a/klp-ui/src/views/wms/coil/info/index.vue +++ b/klp-ui/src/views/wms/coil/info/index.vue @@ -1,12 +1,12 @@