diff --git a/klp-admin/src/main/java/com/klp/web/controller/monitor/OperPerformanceController.java b/klp-admin/src/main/java/com/klp/web/controller/monitor/OperPerformanceController.java index 7416f808d..4052a05fb 100644 --- a/klp-admin/src/main/java/com/klp/web/controller/monitor/OperPerformanceController.java +++ b/klp-admin/src/main/java/com/klp/web/controller/monitor/OperPerformanceController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import com.klp.common.core.controller.BaseController; import com.klp.common.core.domain.R; import com.klp.system.domain.bo.OperPerformanceQuery; +import com.klp.system.domain.vo.OperMenuGroupVO; import com.klp.system.domain.vo.OperModuleStatVO; import com.klp.system.domain.vo.OperPersonVO; import com.klp.system.domain.vo.OperSummaryVO; @@ -55,4 +56,13 @@ public class OperPerformanceController extends BaseController { public R> module(OperPerformanceQuery query) { return R.ok(operLogService.selectModuleRanking(query)); } + + /** + * 按菜单分组绩效统计(oper_page 匹配一级菜单 path) + */ + @SaCheckPermission("monitor:performance:list") + @GetMapping("/menuGroup") + public R> menuGroup(OperPerformanceQuery query) { + return R.ok(operLogService.selectMenuGroupPerformance(query)); + } } diff --git a/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsInspectionItemTemplateController.java b/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsInspectionItemTemplateController.java index 226bcf5b4..938e6a442 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsInspectionItemTemplateController.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/controller/WmsInspectionItemTemplateController.java @@ -99,7 +99,7 @@ public class WmsInspectionItemTemplateController extends BaseController { } // 根据待检项查询详细信息 - @PostMapping("/getInfoByInspectionItem") + @GetMapping("/getInfoByInspectionItem") public R> getInfoByInspectionItem(@RequestParam String inspectionItemIds) { return R.ok(iWmsInspectionItemTemplateService.getInfoByInspectionItem(inspectionItemIds)); } diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java index 78cc67259..08d2194ea 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java @@ -78,6 +78,11 @@ public class PerfAppraisalDetail extends BaseEntity { */ @TableLogic private Integer delFlag; + /** + * 量化指标 + */ + private String quantitativeIndicator; + /** * 备注 */ diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java index 67b813bf5..cc772b46b 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java @@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 车间考核参数配置对象 perf_dept_config @@ -68,16 +67,14 @@ public class PerfDeptConfig extends BaseEntity { */ private Date month; /** - * + * 备注 */ private String remark; + /** - * + * 删除标志(0=正常 1=已删除) */ - private Date createdAt; - /** - * - */ - private Date updatedAt; + @TableLogic + private Integer delFlag; } diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java index e565dafc9..a606658d2 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java @@ -83,6 +83,11 @@ public class PerfAppraisalDetailBo extends BaseEntity { */ private String scoreRule; + /** + * 量化指标 + */ + private String quantitativeIndicator; + /** * 备注 */ diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java index 442cb4b1b..1b08d65f4 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java @@ -7,7 +7,6 @@ import javax.validation.constraints.*; import java.math.BigDecimal; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; /** * 车间考核参数配置业务对象 perf_dept_config @@ -80,15 +79,5 @@ public class PerfDeptConfigBo extends BaseEntity { */ private String remark; - /** - * - */ - private Date createdAt; - - /** - * - */ - private Date updatedAt; - } diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java index d7a624a4f..2de34e4e7 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java @@ -98,6 +98,12 @@ public class PerfAppraisalDetailVo { @ExcelProperty(value = "评分规则(从模板快照)") private String scoreRule; + /** + * 量化指标 + */ + @ExcelProperty(value = "量化指标") + private String quantitativeIndicator; + /** * 备注 */ diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java index 1e1a01a44..e41dd81c6 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java @@ -89,22 +89,10 @@ public class PerfDeptConfigVo { private Date month; /** - * + * */ @ExcelProperty(value = "") private String remark; - /** - * - */ - @ExcelProperty(value = "") - private Date createdAt; - - /** - * - */ - @ExcelProperty(value = "") - private Date updatedAt; - } diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java index 962bb5b28..943a720f9 100644 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java +++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java @@ -73,6 +73,8 @@ public class PerfAppraisalDetailServiceImpl implements IPerfAppraisalDetailServi lqw.eq(bo.getPenalty() != null, PerfAppraisalDetail::getPenalty, bo.getPenalty()); lqw.eq(StringUtils.isNotBlank(bo.getScoreFormula()), PerfAppraisalDetail::getScoreFormula, bo.getScoreFormula()); lqw.eq(StringUtils.isNotBlank(bo.getScoreRule()), PerfAppraisalDetail::getScoreRule, bo.getScoreRule()); + // 量化指标 + lqw.eq(StringUtils.isNotBlank(bo.getQuantitativeIndicator()), PerfAppraisalDetail::getQuantitativeIndicator, bo.getQuantitativeIndicator()); return lqw; } diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java index c5c86017f..98c34d60d 100644 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java +++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java @@ -71,8 +71,6 @@ public class PerfDeptConfigServiceImpl implements IPerfDeptConfigService { lqw.eq(bo.getSalaryMode() != null, PerfDeptConfig::getSalaryMode, bo.getSalaryMode()); lqw.eq(bo.getBaseDivisor() != null, PerfDeptConfig::getBaseDivisor, bo.getBaseDivisor()); lqw.eq(bo.getMonth() != null, PerfDeptConfig::getMonth, bo.getMonth()); - lqw.eq(bo.getCreatedAt() != null, PerfDeptConfig::getCreatedAt, bo.getCreatedAt()); - lqw.eq(bo.getUpdatedAt() != null, PerfDeptConfig::getUpdatedAt, bo.getUpdatedAt()); return lqw; } diff --git a/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml index bfefc06c8..f91b9e9a7 100644 --- a/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml +++ b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml @@ -19,6 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + diff --git a/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml index 0c96822b8..a77133b5c 100644 --- a/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml +++ b/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml @@ -17,8 +17,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + + + + diff --git a/klp-system/src/main/java/com/klp/system/domain/bo/OperPerformanceQuery.java b/klp-system/src/main/java/com/klp/system/domain/bo/OperPerformanceQuery.java index e75f0e93b..7787e103f 100644 --- a/klp-system/src/main/java/com/klp/system/domain/bo/OperPerformanceQuery.java +++ b/klp-system/src/main/java/com/klp/system/domain/bo/OperPerformanceQuery.java @@ -40,4 +40,9 @@ public class OperPerformanceQuery implements Serializable { * 模块标题 */ private String title; + + /** + * oper_page 路径前缀(用于按一级菜单过滤,如 /wip) + */ + private String operPagePrefix; } diff --git a/klp-system/src/main/java/com/klp/system/domain/vo/OperMenuGroupVO.java b/klp-system/src/main/java/com/klp/system/domain/vo/OperMenuGroupVO.java new file mode 100644 index 000000000..237c833e2 --- /dev/null +++ b/klp-system/src/main/java/com/klp/system/domain/vo/OperMenuGroupVO.java @@ -0,0 +1,44 @@ +package com.klp.system.domain.vo; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单分组绩效统计 VO(按一级菜单 oper_page 归类) + * + * @author Reasonix + */ +@Data +@NoArgsConstructor +public class OperMenuGroupVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 菜单名称(驾驶舱、生产管控……) */ + private String menuName; + + /** 菜单路由路径前缀(post、wip……) */ + private String menuPath; + + /** 该分类操作总次数 */ + private Long totalCount; + + /** 成功次数 */ + private Long successCount; + + /** 失败次数 */ + private Long failCount; + + /** 成功率 (%) */ + private Double successRate; + + /** 使用人数 */ + private Long personCount; + + /** 该分类下的模块明细列表 */ + private List modules = new ArrayList<>(); +} diff --git a/klp-system/src/main/java/com/klp/system/domain/vo/OperModuleStatVO.java b/klp-system/src/main/java/com/klp/system/domain/vo/OperModuleStatVO.java index e9c26ee3e..96af83072 100644 --- a/klp-system/src/main/java/com/klp/system/domain/vo/OperModuleStatVO.java +++ b/klp-system/src/main/java/com/klp/system/domain/vo/OperModuleStatVO.java @@ -16,6 +16,11 @@ public class OperModuleStatVO implements Serializable { private static final long serialVersionUID = 1L; + /** + * 所属菜单分组(菜单名称,如"驾驶舱") + */ + private String menuGroup; + /** * 模块标题 */ diff --git a/klp-system/src/main/java/com/klp/system/mapper/SysOperLogMapper.java b/klp-system/src/main/java/com/klp/system/mapper/SysOperLogMapper.java index 2dfc22d48..c134129b0 100644 --- a/klp-system/src/main/java/com/klp/system/mapper/SysOperLogMapper.java +++ b/klp-system/src/main/java/com/klp/system/mapper/SysOperLogMapper.java @@ -35,4 +35,9 @@ public interface SysOperLogMapper extends BaseMapperPlus selectMenuGroupDetail(OperPerformanceQuery query); } diff --git a/klp-system/src/main/java/com/klp/system/service/ISysOperLogService.java b/klp-system/src/main/java/com/klp/system/service/ISysOperLogService.java index 9f11aeeeb..f5c8db56d 100644 --- a/klp-system/src/main/java/com/klp/system/service/ISysOperLogService.java +++ b/klp-system/src/main/java/com/klp/system/service/ISysOperLogService.java @@ -4,6 +4,7 @@ import com.klp.common.core.domain.PageQuery; import com.klp.common.core.page.TableDataInfo; import com.klp.system.domain.SysOperLog; import com.klp.system.domain.bo.OperPerformanceQuery; +import com.klp.system.domain.vo.OperMenuGroupVO; import com.klp.system.domain.vo.OperModuleStatVO; import com.klp.system.domain.vo.OperPersonVO; import com.klp.system.domain.vo.OperSummaryVO; @@ -69,4 +70,9 @@ public interface ISysOperLogService { * 模块使用排行 */ List selectModuleRanking(OperPerformanceQuery query); + + /** + * 按菜单分组绩效统计(oper_page 匹配一级菜单 path) + */ + List selectMenuGroupPerformance(OperPerformanceQuery query); } diff --git a/klp-system/src/main/java/com/klp/system/service/impl/SysOperLogServiceImpl.java b/klp-system/src/main/java/com/klp/system/service/impl/SysOperLogServiceImpl.java index 9a5a36d30..d6977eebc 100644 --- a/klp-system/src/main/java/com/klp/system/service/impl/SysOperLogServiceImpl.java +++ b/klp-system/src/main/java/com/klp/system/service/impl/SysOperLogServiceImpl.java @@ -11,6 +11,7 @@ import com.klp.common.utils.StringUtils; import com.klp.common.utils.ip.AddressUtils; import com.klp.system.domain.SysOperLog; import com.klp.system.domain.bo.OperPerformanceQuery; +import com.klp.system.domain.vo.OperMenuGroupVO; import com.klp.system.domain.vo.OperModuleStatVO; import com.klp.system.domain.vo.OperPersonVO; import com.klp.system.domain.vo.OperSummaryVO; @@ -151,6 +152,86 @@ public class SysOperLogServiceImpl implements ISysOperLogService { return baseMapper.selectModuleSummary(query); } + @Override + public List selectMenuGroupPerformance(OperPerformanceQuery query) { + // 1. 查询原始数据(按 menu_group + title 双维度聚合) + List rawList = baseMapper.selectMenuGroupDetail(query); + if (rawList == null || rawList.isEmpty()) { + return Collections.emptyList(); + } + + // 2. 按 menuGroup 分组 + Map> groupMap = rawList.stream() + .collect(Collectors.groupingBy( + m -> m.getMenuGroup() != null ? m.getMenuGroup() : "其他", + LinkedHashMap::new, + Collectors.toList() + )); + + // 3. 固定顺序 + List orderNames = java.util.Arrays.asList( + "驾驶舱", "生产管控", "数字仓储", "质量管理", + "销售中心", "生产辅助", "科学排产", "文件夹", "其他" + ); + // path 前缀映射 + Map nameToPath = new LinkedHashMap<>(); + nameToPath.put("驾驶舱", "post"); + nameToPath.put("生产管控", "wip"); + nameToPath.put("数字仓储", "stock"); + nameToPath.put("质量管理", "quality"); + nameToPath.put("销售中心", "crm"); + nameToPath.put("生产辅助", "helper"); + nameToPath.put("科学排产", "aps"); + nameToPath.put("文件夹", "file"); + nameToPath.put("其他", ""); + + // 4. 构建 VO 列表 + List result = new ArrayList<>(); + for (String name : orderNames) { + List modules = groupMap.get(name); + if (modules == null || modules.isEmpty()) { + continue; // 没有数据的分类不展示 + } + + OperMenuGroupVO vo = new OperMenuGroupVO(); + vo.setMenuName(name); + vo.setMenuPath(nameToPath.getOrDefault(name, "")); + + // 汇总该分类的总量 + long total = modules.stream().mapToLong(m -> m.getTotalCount() != null ? m.getTotalCount() : 0).sum(); + long success = modules.stream() + .mapToLong(m -> Math.round((m.getTotalCount() != null ? m.getTotalCount() : 0) + * (m.getSuccessRate() != null ? m.getSuccessRate() : 0) / 100.0)) + .sum(); + long fail = total - success; + long persons = modules.stream() + .mapToLong(m -> m.getPersonCount() != null ? m.getPersonCount() : 0).sum(); + // 去重人数更合理:取各模块人数最大值作为估算(无法精确去重) + long distinctPersons = modules.stream() + .mapToLong(m -> m.getPersonCount() != null ? m.getPersonCount() : 0) + .max().orElse(0); + // 用 distinct 人数更合理,取模块中最大人数(保守估计) + // 实际跨模块可能有重复,这里用最大模块人数作为下限 + vo.setTotalCount(total); + vo.setSuccessCount(success); + vo.setFailCount(fail); + vo.setSuccessRate(total > 0 ? Math.round(success * 10000.0 / total) / 100.0 : 0.0); + vo.setPersonCount(distinctPersons); + + // 模块明细按 totalCount 降序排列 + modules.sort((a, b) -> { + long ta = a.getTotalCount() != null ? a.getTotalCount() : 0; + long tb = b.getTotalCount() != null ? b.getTotalCount() : 0; + return Long.compare(tb, ta); + }); + vo.setModules(modules); + + result.add(vo); + } + + return result; + } + @Override public List selectPersonPerformance(OperPerformanceQuery query) { // 1. 查询人员汇总 diff --git a/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml index c1a6f309b..66a15573d 100644 --- a/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/klp-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -40,6 +40,7 @@ + @@ -90,6 +91,9 @@ AND l.title LIKE CONCAT('%', #{title}, '%') + + AND l.oper_page LIKE CONCAT(#{operPagePrefix}, '%') + GROUP BY l.title ORDER BY total_count DESC @@ -126,6 +130,9 @@ AND l.title LIKE CONCAT('%', #{title}, '%') + + AND l.oper_page LIKE CONCAT(#{operPagePrefix}, '%') + GROUP BY l.oper_name, l.dept_name ORDER BY total_count DESC @@ -159,6 +166,9 @@ AND l.title LIKE CONCAT('%', #{title}, '%') + + AND l.oper_page LIKE CONCAT(#{operPagePrefix}, '%') + GROUP BY l.oper_name, l.title ORDER BY l.oper_name, total_count DESC @@ -190,7 +200,57 @@ AND l.title LIKE CONCAT('%', #{title}, '%') + + AND l.oper_page LIKE CONCAT(#{operPagePrefix}, '%') + + + + diff --git a/klp-ui/src/api/mes/qc/approval.js b/klp-ui/src/api/mes/qc/approval.js new file mode 100644 index 000000000..9b720ad8a --- /dev/null +++ b/klp-ui/src/api/mes/qc/approval.js @@ -0,0 +1,64 @@ +import request from '@/utils/request' + +// 查询检化验申请单列表 +export function listInspectionApplication(query) { + return request({ + url: '/wms/inspectionApplication/list', + method: 'get', + params: query + }) +} + +// 查询检化验申请单详细 +export function getInspectionApplication(applicationId) { + return request({ + url: '/wms/inspectionApplication/' + applicationId, + method: 'get' + }) +} + +// 新增检化验申请单 +export function addInspectionApplication(data) { + return request({ + url: '/wms/inspectionApplication', + method: 'post', + data: data + }) +} + +// 修改检化验申请单 +export function updateInspectionApplication(data) { + return request({ + url: '/wms/inspectionApplication', + method: 'put', + data: data + }) +} + +// 删除检化验申请单 +export function delInspectionApplication(applicationIds) { + return request({ + url: '/wms/inspectionApplication/' + applicationIds, + method: 'delete' + }) +} + +// ====== 批量保存检验数据(审批通过后填写) ====== + +// 批量保存物理检验数据 +export function batchSavePhysicalData(data) { + return request({ + url: '/wms/inspectionApplication/batchSavePhysical', + method: 'post', + data: data + }) +} + +// 批量保存化学检验数据 +export function batchSaveChemicalData(data) { + return request({ + url: '/wms/inspectionApplication/batchSaveChemical', + method: 'post', + data: data + }) +} diff --git a/klp-ui/src/api/mes/qc/inspectionItemTemplate.js b/klp-ui/src/api/mes/qc/inspectionItemTemplate.js index 00ec091af..122971cc9 100644 --- a/klp-ui/src/api/mes/qc/inspectionItemTemplate.js +++ b/klp-ui/src/api/mes/qc/inspectionItemTemplate.js @@ -47,7 +47,7 @@ export function delInspectionItemTemplate(templateId) { export function getInfoByInspectionItem(inspectionItemIds) { return request({ url: '/qc/inspectionItemTemplate/getInfoByInspectionItem', - method: 'post', + method: 'get', params: { inspectionItemIds } diff --git a/klp-ui/src/api/monitor/performance.js b/klp-ui/src/api/monitor/performance.js index a79abc42e..f8ad1bd24 100644 --- a/klp-ui/src/api/monitor/performance.js +++ b/klp-ui/src/api/monitor/performance.js @@ -26,3 +26,12 @@ export function getModuleRanking(params) { params: params }) } + +// 按菜单分组绩效统计(oper_page 匹配一级菜单) +export function getMenuGroup(params) { + return request({ + url: '/monitor/performance/menuGroup', + method: 'get', + params: params + }) +} diff --git a/klp-ui/src/views/mes/qc/approval/index.vue b/klp-ui/src/views/mes/qc/approval/index.vue new file mode 100644 index 000000000..741057ff9 --- /dev/null +++ b/klp-ui/src/views/mes/qc/approval/index.vue @@ -0,0 +1,1573 @@ + + + + + diff --git a/klp-ui/src/views/mes/qc/history/index.vue b/klp-ui/src/views/mes/qc/history/index.vue deleted file mode 100644 index de04f7319..000000000 --- a/klp-ui/src/views/mes/qc/history/index.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/inspection/item.vue b/klp-ui/src/views/mes/qc/inspection/item.vue deleted file mode 100644 index 4d04cd584..000000000 --- a/klp-ui/src/views/mes/qc/inspection/item.vue +++ /dev/null @@ -1,402 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/inspection/task.vue b/klp-ui/src/views/mes/qc/inspection/task.vue deleted file mode 100644 index 6a45f0311..000000000 --- a/klp-ui/src/views/mes/qc/inspection/task.vue +++ /dev/null @@ -1,1010 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/inspectionSample/index.vue b/klp-ui/src/views/mes/qc/inspectionSample/index.vue index 8f90eb489..4e24aaa4d 100644 --- a/klp-ui/src/views/mes/qc/inspectionSample/index.vue +++ b/klp-ui/src/views/mes/qc/inspectionSample/index.vue @@ -3,14 +3,14 @@
所属单位: - + 全部 {{ company }}
方案名称: - + 全部 {{ scheme }} @@ -42,6 +42,9 @@ + @@ -151,7 +130,6 @@ export default { return { filterLoading: false, mainLoading: false, - addMainDialogVisible: false, templateList: [], cascadeData: {}, companyOptions: [], @@ -166,14 +144,7 @@ export default { pageNum: 1, pageSize: 1000 }, - dateRange: [], - addMainFormData: { - sampleName: '', - sampleNo: '', - batchNo: '', - inspectionDate: '', - remark: '' - } + dateRange: [] } }, created() { @@ -247,6 +218,7 @@ export default { }, handleCompanyChange() { + if (this.mainLoading) return this.selectedScheme = '' if (this.selectedCompany) { this.schemeOptions = this.cascadeData[this.selectedCompany] || [] @@ -262,6 +234,7 @@ export default { }, handleSchemeChange() { + if (this.mainLoading) return if (!this.selectedScheme) { this.currentTemplate = null this.mainList = [] @@ -365,31 +338,39 @@ export default { }, handleAddMain() { - this.addMainFormData = { + const itemMap = {} + if (this.checkItems.length > 0) { + this.checkItems.forEach(item => { + itemMap[item.itemName] = { + detailId: undefined, + mainId: undefined, + itemName: item.itemName, + itemValue: '', + itemUnit: item.unit, + upperLimit: item.targetUpper, + lowerLimit: item.targetLower, + rangeDesc: '' + } + }) + } + const newRow = { + _isNew: true, + _items: itemMap, + _originalItems: JSON.parse(JSON.stringify(itemMap)), + inspectionDate: '', sampleName: '', sampleNo: '', batchNo: '', - inspectionDate: '', remark: '' } - this.addMainDialogVisible = true - }, - - submitAddMain() { - const data = { - ...this.addMainFormData, - templateId: this.currentTemplate.templateId - } - addInspectionMain(data).then(() => { - this.$message.success('新增成功') - this.addMainDialogVisible = false - this.getMainList() - }).catch(() => { - this.$message.error('新增失败') - }) + this.mainList.unshift(newRow) }, handleSaveMain(row) { + if (!row.inspectionDate) { + this.$message.warning('请选择检验日期') + return + } row._saving = true const detailList = this.checkItems.map(checkItem => { const itemData = row._items[checkItem.itemName] @@ -405,38 +386,20 @@ export default { rangeDesc: itemData.rangeDesc || '' } }).filter(Boolean) - updateInspectionMain({ - mainId: row.mainId, + const requestData = { sampleName: row.sampleName, sampleNo: row.sampleNo, batchNo: row.batchNo, inspectionDate: row.inspectionDate, remark: row.remark, + templateId: this.currentTemplate.templateId, detailList: detailList - }).then(() => { + } + const isNew = row._isNew || !row.mainId + const apiCall = isNew ? addInspectionMain(requestData) : updateInspectionMain({ ...requestData, mainId: row.mainId }) + apiCall.then(() => { this.$message.success('保存成功') - return listInspectionDetail({ mainId: row.mainId, pageNum: 1, pageSize: 9999 }) - }).then(response => { - const details = response.rows || [] - if (this.checkItems.length > 0) { - this.checkItems.forEach(item => { - const found = details.find(d => d.itemName === item.itemName) - if (found) { - row._items[item.itemName] = { - detailId: found.detailId, - mainId: found.mainId, - itemName: found.itemName, - itemValue: found.itemValue || '', - itemUnit: found.itemUnit || item.unit, - upperLimit: found.upperLimit, - lowerLimit: found.lowerLimit, - rangeDesc: found.rangeDesc - } - } - }) - } - row._originalItems = JSON.parse(JSON.stringify(row._items)) - row._saving = false + this.getMainList() }).catch(() => { this.$message.error('保存失败') row._saving = false @@ -515,4 +478,10 @@ export default { ::v-deep .dynamic-table .el-table__body-wrapper { overflow-x: auto; } + +.required-mark::before { + content: '*'; + color: #f56c6c; + margin-right: 4px; +} diff --git a/klp-ui/src/views/mes/qc/item/index.vue b/klp-ui/src/views/mes/qc/item/index.vue deleted file mode 100644 index 31c6fc83a..000000000 --- a/klp-ui/src/views/mes/qc/item/index.vue +++ /dev/null @@ -1,299 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/task/index.vue b/klp-ui/src/views/mes/qc/task/index.vue deleted file mode 100644 index 674d67e5f..000000000 --- a/klp-ui/src/views/mes/qc/task/index.vue +++ /dev/null @@ -1,405 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/task/pages/auxiliary.vue b/klp-ui/src/views/mes/qc/task/pages/auxiliary.vue deleted file mode 100644 index c66232d35..000000000 --- a/klp-ui/src/views/mes/qc/task/pages/auxiliary.vue +++ /dev/null @@ -1,467 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/task/pages/lab.vue b/klp-ui/src/views/mes/qc/task/pages/lab.vue deleted file mode 100644 index bf55ca316..000000000 --- a/klp-ui/src/views/mes/qc/task/pages/lab.vue +++ /dev/null @@ -1,443 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/task/pages/raw.vue b/klp-ui/src/views/mes/qc/task/pages/raw.vue deleted file mode 100644 index e9c4d0366..000000000 --- a/klp-ui/src/views/mes/qc/task/pages/raw.vue +++ /dev/null @@ -1,493 +0,0 @@ - - - diff --git a/klp-ui/src/views/mes/qc/task/pages/section.vue b/klp-ui/src/views/mes/qc/task/pages/section.vue deleted file mode 100644 index 513de3a91..000000000 --- a/klp-ui/src/views/mes/qc/task/pages/section.vue +++ /dev/null @@ -1,451 +0,0 @@ - - - diff --git a/klp-ui/src/views/monitor/performance/index.vue b/klp-ui/src/views/monitor/performance/index.vue index 92de84554..552e029ea 100644 --- a/klp-ui/src/views/monitor/performance/index.vue +++ b/klp-ui/src/views/monitor/performance/index.vue @@ -77,6 +77,70 @@
+ +
+ + +
+
+ 各模块操作量对比 + 点击柱子可按分类筛选下方图表 +
+
+
+ + + + +
+
分类模块明细
+
+ + + + + + + + + + + + + + + +
+
+
+ + +
+ + + {{ selectedMenuGroup.menuName }} + + — 以下图表仅显示该分类数据 +
+
@@ -176,16 +240,30 @@ diff --git a/klp-ui/src/views/wms/post/aps/schedule.vue b/klp-ui/src/views/wms/post/aps/schedule.vue index 837b1a64c..cdc8fb3f8 100644 --- a/klp-ui/src/views/wms/post/aps/schedule.vue +++ b/klp-ui/src/views/wms/post/aps/schedule.vue @@ -296,9 +296,17 @@ - + @@ -404,7 +412,7 @@ - + @@ -660,7 +668,7 @@ export default { // 待审核 pendingScheduleList: [], summaryText: '', - statusMap: { 1: '待审核', 2: '已接收', 3: '已驳回' }, + statusMap: { 1: '待审核', 2: '已接收', 3: '已驳回', 4: '已排产' }, processOptions: PROCESSES, // 已接收 @@ -943,12 +951,21 @@ export default { }) }, + // 表格内快捷修改排产状态 + handleInlineStatusChange(row, val) { + this.$set(row, '_statusLoading', true) + updateScheduleItem({ scheduleId: row.scheduleId, scheduleStatus: val }).then(() => { + this.$modal.msgSuccess('状态已更新') + }).catch(() => { + this.$modal.msgError('状态更新失败') + this.queryScheduled() + }).finally(() => { + this.$set(row, '_statusLoading', false) + }) + }, + handleEditScheduled(row) { this.editForm = { ...this.getEmptyEditForm(), ...row } - // 确保 actionId 为数字类型以匹配下拉选项 - if (this.editForm.actionId != null && typeof this.editForm.actionId !== 'number') { - this.editForm.actionId = Number(this.editForm.actionId) - } // 确保 scheduleStatus 为数字类型以匹配下拉选项 if (this.editForm.scheduleStatus != null && typeof this.editForm.scheduleStatus !== 'number') { this.editForm.scheduleStatus = Number(this.editForm.scheduleStatus) @@ -1229,6 +1246,7 @@ export default { &.status-1 { background: #fff3e0; color: #e67e22; } &.status-2 { background: #e8f5e9; color: #388e3c; } &.status-3 { background: #fdecea; color: #e74c3c; } + &.status-4 { background: #e3f2fd; color: #1976d2; } } // 产需单信息表 diff --git a/klp-ui/src/views/wms/post/flow.vue b/klp-ui/src/views/wms/post/flow.vue index f9d587e8b..5bcb72160 100644 --- a/klp-ui/src/views/wms/post/flow.vue +++ b/klp-ui/src/views/wms/post/flow.vue @@ -67,6 +67,11 @@ const TAB_LIST = [ { key: 'inventoryCheck', label: '盘库流程', icon: 'el-icon-s-check' }, { key: 'productionSchedule', label: '排产流程', icon: 'el-icon-s-order' }, { key: 'equipmentRepair', label: '设备维修流程', icon: 'el-icon-s-tools' }, + { key: 'batchTransfer', label: '批量调拨流程', icon: 'el-icon-sort' }, + { key: 'delivery', label: '发货流程', icon: 'el-icon-s-promotion' }, + { key: 'inspection', label: '检验流程', icon: 'el-icon-document-checked' }, + { key: 'qualityReview', label: '质量评审流程', icon: 'el-icon-s-check' }, + { key: 'receiving', label: '收货流程', icon: 'el-icon-download' }, ] const NODE_EVENT_CONFIG = { @@ -116,17 +121,16 @@ const NODE_EVENT_CONFIG = { { id: 'N', label: '执行处理差异', handler: 'handleOpen', params: { componentPath: 'wms/post/InvCount/execute' } }, ], productionSchedule: [ - { id: 'A', label: '创建需求单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/requirement' } }, - { id: 'B', label: '选择合同', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/order' } }, + { id: 'A', label: '创建产需单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/requirement' } }, + { id: 'B', label: '绑定销售订单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/order' } }, { id: 'C', label: '自动获取需求明细', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/requirement' } }, { id: 'D', label: '调整需求明细', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/requirement' } }, - { id: 'E', label: '提交审批', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'H', label: '转化为排产单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'I', label: '排产单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'J', label: '再次提交审批', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'M', label: '提交给车间', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'N', label: '车间绑定钢卷', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/compare' } }, - { id: 'O', label: '执行生产', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, + { id: 'E', label: '下发产需单', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/requirement' } }, + { id: 'H', label: '选择工艺路线', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, + { id: 'I', label: '自动生成排产项', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, + { id: 'J', label: '已排产明细管理', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, + { id: 'K', label: '按工序绑定钢卷', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/compare' } }, + { id: 'L', label: '执行生产', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, ], equipmentRepair: [ { id: 'A', label: '创建维修计划', handler: 'handleOpen', params: { componentPath: 'wms/post/eqp/index' } }, @@ -134,6 +138,56 @@ const NODE_EVENT_CONFIG = { { id: 'B', label: '提交审批', handler: 'handleOpen', params: { componentPath: 'wms/post/eqp/approval' } }, { id: 'E', label: '逐设备维修记录', handler: 'handleOpen', params: { componentPath: 'wms/post/eqp/execute' } }, ], + + batchTransfer: [ + { id: 'A', label: '创建调拨单', handler: 'handleOpen', params: { componentPath: 'wms/move/batch' } }, + { id: 'B', label: '添加调拨明细', handler: 'handleOpen', params: { componentPath: 'wms/move/batch' } }, + { id: 'C', label: '提交审批', handler: 'handleOpen', params: { componentPath: 'wms/move/batch' } }, + { id: 'E', label: '执行调拨', handler: 'handleOpen', params: { componentPath: 'wms/move/record' } }, + { id: 'G', label: '调拨后处理', handler: 'handleOpen', params: { componentPath: 'wms/move/record' } }, + ], + + delivery: [ + { id: 'A', label: '创建发货计划', handler: 'handleOpen', params: { componentPath: 'wms/delivery/plan/index' } }, + { id: 'A2', label: '编排订单明细', handler: 'handleOpen', params: { componentPath: 'wms/delivery/plan/index' } }, + { id: 'B', label: '查看可用库存', handler: 'handleOpen', params: { componentPath: 'wms/delivery/canuse/index' } }, + { id: 'D', label: '配卷/发货绑定', handler: 'handleOpen', params: { componentPath: 'wms/delivery/plan/index' } }, + { id: 'F', label: '分级调整', handler: 'handleOpen', params: { componentPath: 'wms/delivery/grading/index' } }, + { id: 'G', label: '创建发货单/运单', handler: 'handleOpen', params: { componentPath: 'wms/delivery/waybill/index' } }, + { id: 'H', label: '打印发货单', handler: 'handleOpen', params: { componentPath: 'wms/delivery/bills/index' } }, + { id: 'J', label: '批量发货', handler: 'handleOpen', params: { componentPath: 'wms/delivery/bills/index' } }, + { id: 'K', label: '单卷发货', handler: 'handleOpen', params: { componentPath: 'wms/coil/do/ship' } }, + { id: 'L', label: '发货记录', handler: 'handleOpen', params: { componentPath: 'wms/delivery/record/index' } }, + { id: 'M', label: '生产发货看板', handler: 'handleOpen', params: { componentPath: 'micro/pages/zinc/components/Shipping' } }, + { id: 'N', label: '发货报表统计', handler: 'handleOpen', params: { componentPath: 'wms/delivery/report/index' } }, + ], + + inspection: [ + { id: 'A', label: '维护检验方案模板', handler: 'handleOpen', params: { componentPath: 'mes/qc/template/index' } }, + { id: 'B', label: '取样/检验数据录入', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, + { id: 'D', label: '常规检验录入', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, + { id: 'E', label: '拉伸检验(专项)', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionTensile/index' } }, + { id: 'H', label: '生成质量证明书', handler: 'handleOpen', params: { componentPath: 'mes/qc/certificate/book' } }, + { id: 'I', label: '触发质量评审', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + ], + + qualityReview: [ + { id: 'A', label: '创建质量评审单', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'B', label: '选择问题钢卷', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'C', label: '填写缺陷及改判信息', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'D', label: '品质部评审意见', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'E', label: '提交送审', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'F', label: '领导审批', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'H', label: '查看驳回原因', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + ], + + receiving: [ + { id: 'A', label: '创建收货计划', handler: 'handleOpen', params: { componentPath: 'wms/receive/plan/index' } }, + { id: 'B', label: '导入钢卷', handler: 'handleOpen', params: { componentPath: 'wms/receive/plan/index' } }, + { id: 'C', label: '待收货列表', handler: 'handleOpen', params: { componentPath: 'wms/receive/detail/index' } }, + { id: 'E', label: '确认收货', handler: 'handleOpen', params: { componentPath: 'wms/receive/detail/index' } }, + { id: 'I', label: '收货报表统计', handler: 'handleOpen', params: { componentPath: 'wms/receive/report/index' } }, + ], } const DIAGRAMS = { @@ -253,28 +307,22 @@ graph TD productionSchedule: ` graph TD - A["创建需求单
填写基本信息"]:::p1 - - A --> B["选择合同
可选一个或多个合同"]:::p2 + A["创建产需单
填写基本信息
产需单号/生产日期/订货单位"]:::p1 + A --> B["绑定销售订单
选择关联合同订单"]:::p2 B --> C["自动获取需求明细
从所选合同提取"]:::p3 C --> D["调整需求明细
可编辑/修改/补充"]:::p4 - D --> E["提交审批"]:::p5 - E --> F{"审批"}:::dec - F -->|不通过| G["退回修改"]:::p4 + D --> E["下发产需单
提交到车间待审核"]:::p5 + E --> F{"车间审核"}:::dec + F -->|驳回| G["退回修改"]:::p4 G --> D - F -->|通过| H["转化为排产单"]:::p6 + F -->|接收| H["选择工艺路线
为每条明细配置
工艺+工序步骤"]:::p6 - H --> I["排产单
可再次编辑"]:::p7 - I --> J["再次提交审批"]:::p5 - J --> K{"审批"}:::dec - K -->|不通过| L["退回修改"]:::p7 - L --> I - K -->|通过| M["提交给车间"]:::p8 - - M --> N["车间绑定钢卷
每个排产计划
绑定一个或多个钢卷"]:::p9 - N --> O["执行生产"]:::p10 - O --> P(["排产完结"]):::pend + H --> I["自动生成排产项
按工序步骤分组"]:::p7 + I --> J["已排产明细管理
按步骤查看/编辑
内联修改排产状态"]:::p7 + J --> K["按工序绑定钢卷
将现存钢卷绑定到
对应的排产明细"]:::p8 + K --> L["执行生产"]:::p9 + L --> M(["排产完结"]):::pend classDef p1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px classDef p2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px @@ -285,7 +333,6 @@ graph TD classDef p7 fill:#fff0f6,stroke:#eb2f96,color:#303133,stroke-width:2px classDef p8 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px classDef p9 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px - classDef p10 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px classDef pend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 linkStyle default stroke:#bfbfbf,stroke-width:2px @@ -315,6 +362,148 @@ graph TD classDef eend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 linkStyle default stroke:#bfbfbf,stroke-width:2px `, + + batchTransfer: ` +graph TD + A["创建调拨单
填写调拨单号/名称
选择调拨类型/时间"]:::m1 + A --> B["添加调拨明细
选择钢卷或批量导入
填写调拨前后属性"]:::m2 + B --> C["提交审批"]:::m3 + C --> D{"审批"}:::dec + D -->|通过| E["执行调拨
批量/单条执行
实际移动钢卷库区"]:::m4 + D -->|驳回| F["退回修改"]:::m5 + F --> B + E --> G["调拨后处理
可重贴标签
记录调拨备注"]:::m6 + G --> H(["调拨归档
库存已更新"]):::mend + + classDef m1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px + classDef m2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px + classDef m3 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef m4 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px + classDef m5 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef m6 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px + classDef mend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 + linkStyle default stroke:#bfbfbf,stroke-width:2px +`, + + delivery: ` +graph TD + A["创建发货计划
填写计划名称/日期"]:::d1 + A --> A2["编排订单明细
添加关联合同订单"]:::d2 + A2 --> B["查看可用库存
可配钢卷
仅显示合格品"]:::d3 + B --> C{"质量校验
系统自动过滤"}:::dec + C -->|合格| D["配卷/发货绑定
选择钢卷绑定到计划"]:::d4 + C -->|不合格| E["锁定不可发货
可分级调整或处理缺陷"]:::d5 + E --> F["分级调整
手动调整等级(后备)"]:::d6 + F --> B + D --> G["创建发货单/运单
填写车牌/收货单位/负责人"]:::d7 + G --> H["打印发货单
选择打印模板"]:::d8 + H --> I{"出库方式"}:::dec + I -->|批量出库| J["批量发货
整单确认出库"]:::d9 + I -->|单卷出库| K["单卷发货
逐卷扫码出库"]:::d10 + J --> L["发货记录
操作日志可追溯"]:::d11 + K --> L + L --> M["生产发货看板
配卷情况/发货记录"]:::d12 + M --> N["发货报表统计"]:::d13 + N --> O(["发货完结"]):::dend + + classDef d1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px + classDef d2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px + classDef d3 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px + classDef d4 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef d5 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef d6 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px + classDef d7 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef d8 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef d9 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef d10 fill:#fff0f6,stroke:#eb2f96,color:#303133,stroke-width:2px + classDef d11 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef d12 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px + classDef d13 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px + classDef dend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 + linkStyle default stroke:#bfbfbf,stroke-width:2px +`, + + inspection: ` +graph TD + A["维护检验方案模板
定义检验项/单位/标准"]:::i1 + A --> B["取样/检验数据录入
选择方案模板
动态生成检验项表格"]:::i2 + B --> C{"检验项类型"}:::dec + C -->|常规项| D["常规检验录入
直接在模板表格
填写检测数据"]:::i3 + C -->|拉伸试验| E["拉伸检验(专项)
独立试验记录
管理明细数据"]:::i4 + D --> F["汇总检验结果"]:::i5 + E --> F + F --> G{"判定"}:::dec + G -->|合格| H["生成质量证明书
汇总全部检验数据"]:::i6 + G -->|不合格| I["触发质量评审
进入评审流程"]:::i7 + H --> J(["检验归档"]):::iend + + classDef i1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px + classDef i2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px + classDef i3 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px + classDef i4 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef i5 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px + classDef i6 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef i7 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px + classDef iend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 + linkStyle default stroke:#bfbfbf,stroke-width:2px +`, + + qualityReview: ` +graph TD + A["创建质量评审单
填写产品名称/传递部门
选择日期"]:::q1 + A --> B["选择问题钢卷
仅O级钢卷可被选中
可多选"]:::q2 + B --> C["填写缺陷及改判信息
缺陷描述/改判后等级
改判后目标库区"]:::q3 + C --> D["品质部评审意见
填写评审意见/签字"]:::q4 + D --> E["提交送审"]:::q5 + E --> F{"领导审批"}:::dec + F -->|通过| G["执行改判
自动更新钢卷质量状态
移动钢卷到目标库区"]:::q6 + F -->|驳回| H["查看驳回原因
修改后重新提交"]:::q7 + H --> C + G --> I["生成审批记录
流程归档"]:::q8 + I --> J(["评审完结"]):::qend + + classDef q1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px + classDef q2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px + classDef q3 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px + classDef q4 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef q5 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef q6 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef q7 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef q8 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px + classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px + classDef qend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 + linkStyle default stroke:#bfbfbf,stroke-width:2px +`, + + receiving: ` +graph TD + A["创建收货计划
填写计划名称/日期"]:::r1 + A --> B["导入钢卷
批量导入原料钢卷
记录卷号/规格/重量"]:::r2 + B --> C["待收货列表
查看待收货钢卷"]:::r3 + C --> D{"验收决定"}:::dec + D -->|签收| E["确认收货
选择实际库区
钢卷入库/库存更新"]:::r4 + D -->|拒签| F["拒签处理
钢卷不入库
标记为已取消"]:::r5 + E --> G["已入库完成"]:::r6 + F --> H["已拒签/取消"]:::r7 + G --> I["收货报表统计"]:::r8 + H --> I + I --> J(["收货完结"]):::rend + + classDef r1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px + classDef r2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px + classDef r3 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px + classDef r4 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef r5 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef r6 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef r7 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px + classDef r8 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px + classDef rend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 + linkStyle default stroke:#bfbfbf,stroke-width:2px +`, } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnaceBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnaceBo.java index e7093c743..db9b73565 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnaceBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsFurnaceBo.java @@ -52,6 +52,5 @@ public class WmsFurnaceBo extends BaseEntity { /** * 批量操作ID */ - @NotNull(message = "主键不能为空", groups = {com.klp.common.core.validate.EditGroup.class}) private Long[] furnaceIds; }