Compare commits

...

151 Commits

Author SHA1 Message Date
c4eab467ee feat(wms): 添加钢卷号重复检查功能
- 在新增钢卷时检查当前钢卷号是否重复
- 在简单更新时检查当前钢卷号是否重复并排除自身
- 在单个更新时检查当前钢卷号是否重复并排除自身
- 在分卷操作时检查每个子钢卷号是否重复
- 在合卷操作时检查新钢卷号是否重复
- 在子钢卷创建时检查子钢卷号是否重复
- 在退货操作时检查当前钢卷号是否重复并排除自身
- 修复历史钢卷恢复时的重复检查参数传递问题
2026-06-10 15:54:01 +08:00
fd50118161 refactor(contract/export/preview): 优化合同打印导出功能,添加页码和修复样式
1.  移除coilTable的异常行高亮逻辑
2.  修复导航栏告警badge的显示逻辑
3.  为合同导出和预览添加页码标注,调整打印样式
4.  移除冗余的合同打印预览代码
2026-06-10 11:29:41 +08:00
cc63aa80b2 fix: 修复/优化多个业务页面的逻辑与配置
1. 修正物料选项中的BX51D+Z为DX51D+Z
2. 给L2匹配面板的标准化方法添加日志与start_date/end_date字段解析
3. 优化卷材页面的日期赋值逻辑并添加调试日志
4. 简化异常表格的图片组件写法,新增继承来源列
2026-06-10 09:21:34 +08:00
c95ea7db61 feat(mes/roll/grind): 磨辊间增加机组字段 2026-06-09 17:55:42 +08:00
f50c240bbe Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-09 17:47:46 +08:00
66278e635b feat(roll): 添加机架字段支持
- 在MesRollInfo实体类中新增frame字段
- 在MesRollInfoBo业务对象中添加frame字段定义
- 实现机架字段的查询过滤功能
- 在MesRollInfoVo视图对象中增加frame字段映射
- 完成机架数据的Excel导出功能
2026-06-09 17:47:35 +08:00
74d0ba57e2 feat(crm/contract): 优化合同产品材质输入与导出样式
1. 将材质输入框改为可搜索创建的选择器,新增冷轧卷(花纹)选项和SPCC等材质选项
2. 优化合同导出表格的边框、内边距和字体样式,统一表格样式
2026-06-09 17:42:28 +08:00
e00d1357b0 refactor(wms): 优化钢卷告警数据查询逻辑解决循环依赖
- 将钢卷信息批量查询逻辑从服务层迁移到控制器层
- 在控制器中实现钢卷ID收集和批量查询功能
- 通过Map映射方式关联钢卷信息到告警数据
- 移除服务层中的WmsMaterialCoilService依赖注入
- 提高数据查询效率和代码结构清晰度
2026-06-09 17:08:01 +08:00
b9f87c6cc4 feat(warning): 添加物料预警按创建时间倒序排序功能
- 实现物料预警列表按创建时间倒序排列
- 优化查询逻辑以支持时间排序功能
2026-06-09 10:04:36 +08:00
7c9c99bf45 feat(wms): 添加钢卷警告信息关联查询功能
- 在 WmsMaterialWarningBo 中新增 coilIds 字段用于批量过滤
- 在 WmsMaterialWarningServiceImpl 中实现批量钢卷信息查询和填充逻辑
- 添加按逗号分隔的钢卷ID集合过滤功能
- 在 WmsMaterialWarningVo 中增加 coilVo 关联字段并设置为忽略导出
- 实现了钢卷警告与钢卷信息的关联显示功能
- 优化了查询性能通过批量获取钢卷数据减少数据库访问次数
2026-06-09 09:58:35 +08:00
fdb13b7261 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-09 09:41:31 +08:00
74a3803290 refactor(WmsMaterialCoilService): 修复理论厚度和长度沿用老数据导致重复告警
- 移除理论厚度为空的条件判断,统一实际长度不为空时进行计算
- 移除理论长度为空的条件判断,改为直接计算并设置理论长度
- 保持原有的体积、宽度和厚度计算公式不变
- 简化代码结构,减少不必要的条件分支
2026-06-09 09:41:14 +08:00
76497eece7 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-09 09:02:47 +08:00
d231d3619a feat(wms/report): add length/thickness diff columns and abnormal alert
1. 调整产品内容工具函数,移除冗余的quantity和taxPrice字段返回
2. 重新编排报表列配置,新增长度/厚度差值列并调整字段顺序
3. 实现差值计算逻辑与异常标红展示,从配置获取告警阈值
2026-06-09 09:02:44 +08:00
20966157c5 fix(wms): 修正材料预警服务中的数值精度计算问题
- 为理论值、实际值、允许偏差和偏差值设置统一的3位小数精度
- 将偏差率计算精度从4位小数调整为1位小数
- 修正厚度偏差计算公式中的减法运算顺序
- 在警告消息中应用相同的数值精度格式化
- 确保所有BigDecimal运算都使用HALF_UP舍入模式
2026-06-08 18:02:52 +08:00
59e58e5206 feat(warning): 更新钢卷告警检查功能支持动态阈值配置
- 在 WmsMaterialCoilBo 中新增 specThickness 字段用于存储规格厚度
- 修改 checkAndInsertWarnings 方法签名以传递 BO 对象
- 将长度和厚度告警阈值改为从系统配置表动态读取
- 长度告警阈值配置键为 material.warning.length,默认值 0.1
- 厚度告警阈值配置键为 material.warning.thickness,默认值 -0.01
- 厚度检查逻辑改为理论厚度与规格厚度对比
- 钢卷创建和更新流程中传递 BO 对象到告警检查方法
- 优化告警消息内容以反映阈值检查而非固定比例
- 移除原有的实测厚度检查规则,统一使用规格厚度作为参考标准
2026-06-08 17:45:10 +08:00
59ceeed4a4 fix(crm/contract): 优化合同预览与导出的样式及重复渲染问题
1.  为产品内容组件添加值相等判断,避免重复解析内容
2.  统一合同预览和导出弹窗的表格边框样式为2px粗边框
3.  将合同预览的字体改为黑体并调整字重,优化显示效果
4.  调整表格字体粗细的配置标准
2026-06-08 16:31:17 +08:00
fac59f4346 feat: 合同导出新增附件图片配置功能
- 新增附件图片加载区域(从 businessAnnex/techAnnex 等字段提取 OSS 图片)
- 支持图片勾选显隐、拖拽排序(上移/下移)
- 导出 HTML 预览和 PDF 均支持图片附件页渲染
- @open 重构为 onDialogOpen,自动拉取附件列表
- 新增 loadImage 辅助方法,PDF 导出支持 JPEG 图片嵌入
2026-06-08 11:21:25 +08:00
f6a74e58ea refactor(wms/coil): 抽象排产单组件,复用排产单展示逻辑
1.  新增PlanSheetViewer通用排产单展示组件,支持图片、excel、普通文件预览和空状态
2.  改造TimeInput组件,修复绑定属性写法
3.  替换typing.vue、stepSplit.vue、split.vue、merge.vue中的旧排产单代码,统一使用新组件
4.  删除冗余的排产单相关API调用和本地数据逻辑
2026-06-08 10:22:30 +08:00
857a3948d6 feat(wms): 新增钢卷通用维度告警管理功能
1. 新增告警信息路由页面与API接口
2. 在导航栏添加告警入口与未读红点提示
3. 实现告警列表查询、处理、忽略、删除与导出功能
4. 每分钟自动刷新告警状态检查
2026-06-08 10:05:52 +08:00
47b3fb24b7 feat: 新增阿里妈妈数黑体字体并更新标签样式
1. 新增阿里妈妈数黑体字体文件及授权说明文档
2. 全局替换标签默认字体为阿里妈妈数黑体
3. 统一调整多个标签页的卷号/原料号字体大小为1em
4. 修复表单输入框的v-model.number类型绑定问题
5. 删除废弃的盐雾试验、力学性能、样品标签预览组件
2026-06-08 09:05:15 +08:00
97e0df7ae1 refactor(aps/planSheet): 重构排产单详情页与列表页,替换可编辑表格为文件上传功能
1. 移除原排产单明细可编辑表格,替换为文件上传预览区域
2. 重构PlanSheetList组件,优化排产单筛选与展示UI
3. 新增排产单附件上传、预览、重新上传功能
4. 优化排产单列表的筛选、分页与操作交互
2026-06-06 17:56:13 +08:00
7c87670896 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-06 17:15:40 +08:00
cd3cc85c0a feat: 合同导出弹窗新增导出行配置(合计行/大写金额行/备注行可选)
- 新增 rowConfigs 配置,支持控制合计行、大写金额行、备注行显隐
- 新增全选/半选逻辑,与列配置交互风格一致
- 导出 HTML 模板根据行配置动态渲染
2026-06-06 17:15:31 +08:00
d70bb77755 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-06 17:11:09 +08:00
b00db10a37 feat(aps): 添加排产文件字段支持
- 在 ApsPlanSheet 实体类中新增 apsUrl 字段用于存储排产文件路径
- 在 ApsPlanSheetBo 业务对象中添加 apsUrl 属性定义
- 更新 MyBatis 映射文件 ApsPlanSheetMapper.xml 添加字段映射
- 在 ApsPlanSheetVo 视图对象中增加 apsUrl 字段并配置 Excel 导出
- 为 deliveryWaybillDetail 查询添加按创建时间倒序排序功能
2026-06-06 17:10:59 +08:00
dbeb99d9e5 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-06 17:08:51 +08:00
1a2fc9852d feat: 新增考勤模板管理功能
- 后端新增 WmsAttendanceTemplate CRUD(Controller/Service/Mapper/Domain)
- 前端新增 attendanceTemplate API 对接
- 前端新增 AttendanceTemplateManager 组件(拖拽排序 + 模板编辑)
- 优化考勤 drag.vue 页面交互
2026-06-06 17:08:31 +08:00
7aaa59cee1 feat(wms): 添加钢卷长度厚度偏差自动告警功能
- 在IWmsMaterialWarningService接口中新增checkAndInsertWarnings方法定义
- 在WmsMaterialCoilServiceImpl中注入materialWarningService依赖
- 在钢卷新增、更新、拆分等操作后自动触发偏差检查和告警插入
- 实现doCheckAndInsertWarnings方法进行长度和厚度偏差计算
- 添加checkLength方法验证长度偏差是否超过10%
- 添加checkThickness方法验证厚度偏差包括偏薄ERROR和偏厚WARNING
- 实现批量插入告警记录并添加异常处理和日志记录
2026-06-06 16:24:35 +08:00
cbebd5b6d6 feat(wms): 添加钢卷通用告警功能
- 创建 WmsMaterialWarning 实体类定义告警数据结构
- 实现 IWmsMaterialWarningService 接口提供告警业务方法
- 开发 WmsMaterialWarningController 控制器支持增删改查操作
- 设计 WmsMaterialWarningBo 和 WmsMaterialWarningVo 数据传输对象
- 配置 WmsMaterialWarningMapper 数据访问层和 XML 映射文件
- 实现 WmsMaterialWarningServiceImpl 业务逻辑处理类
- 添加告警类型、级别、状态等字段支持长度/厚度/宽度维度监控
- 集成 Excel 导出功能便于告警数据统计分析
2026-06-06 15:52:29 +08:00
24a9784035 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-06 15:24:16 +08:00
de7ec604dd fix(wms): 修复理论长度计算为空的问题
- 移除实际宽度比较条件,简化理论厚度计算判断逻辑
- 保持体积计算公式不变,仅调整条件判断流程
- 确保在缺少理论厚度且有实际长度时能正确计算厚度值
2026-06-06 15:23:50 +08:00
696f6d9ee0 fix(crm/contract): 修复合同状态更新调用错误的接口
移除了多余的created钩子中调用字典列表的代码,将更新合同状态的接口从updateContract改为updateOrder
2026-06-06 15:12:42 +08:00
050dd1a965 feat(crm): 合同含税总金额自动填入订单总金额 & 移除冗余页面
- feat(crm/contract): 含税总额变化后自动填写订单总金额(可配置开关)
- fix(crm/receive): 修复金额单位错误(万元→元);清理未使用导入
- fix(contract/product): 产品备注设置默认值
- chore: 移除已废弃的 OrderDashboard 组件和 finance/order 页面
- feat(wms/hrm): 新增考勤异常管理页面(attendanceAbnormal.vue)
- chore: 移除 trae git 提交规则配置
2026-06-06 13:01:38 +08:00
724c1dd16f refactor(order): 调整订单列表排序规则
- 移除状态排序逻辑
- 修改排序规则为合同号倒序排列
- 更新注释说明新的排序方式
- 保持置顶优先的排序策略不变
2026-06-06 12:58:12 +08:00
0e85153b3d chore(wms/order): 删除订单模块冗余的页面和组件文件 2026-06-06 11:44:26 +08:00
af728f8ea6 refactor(crm/contract): 抽取合同导出预览组件到独立文件 2026-06-06 10:49:02 +08:00
7e07b6f970 feat(wms/attendance-check): 新增异常考勤筛选功能
1. 在考勤审核查询条件中增加异常标识字段abnormal,用于筛选异常考勤记录
2. 在服务层实现异常筛选逻辑:当abnormal为true时,查询整体状态不为"normal"的考勤记录

调整前,考勤审核查询无法直接筛选异常考勤;调整后,支持通过abnormal字段快速过滤出异常状态的考勤记录,提升审核效率。
2026-06-06 10:13:41 +08:00
8a0f5e65bb feat(wms/attendance): add batch delete attendance schedule function
1. 修改删除排班接口为POST请求方式并调整接口路径为/wms/attendanceSchedule/remove,传递删除id数据
2. 在排班页面添加多选列和批量删除按钮,实现批量删除排班记录功能,包含选中校验、删除确认和操作反馈
2026-06-05 17:14:30 +08:00
1947a5c2d5 fix(wms/attendance-schedule): 调整批量删除接口参数类型与逻辑
1. 接口参数调整:将批量删除接口的路径参数从Long数组改为接收逗号分隔的字符串,并修改为@RequestBody接收
2. 服务层逻辑重构:将deleteWithValidByIds方法参数从Collection<Long>改为String,内部实现字符串解析与转换
3. 新增参数校验:在服务层添加字符串解析逻辑,过滤空值并转换为Long列表,避免空列表操作

调整前,批量删除依赖路径参数数组,存在URL长度限制且类型转换复杂;调整后,通过请求体接收字符串参数,服务层统一解析处理,提升接口健壮性与兼容性。
2026-06-05 16:46:23 +08:00
d8498728ee Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-05 15:51:31 +08:00
53e948b3e0 refactor(contractList): 移除旧的PDF导出逻辑,改用浏览器原生打印 2026-06-05 15:51:28 +08:00
3ebc0cb86a Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-05 11:07:33 +08:00
8059b0a0bb feat(wms/material-coil): 优化钢卷异常导出功能,支持动态表头与横向拼接
1. 重构异常导出逻辑:将原纵向展开(每个异常一行)改为横向拼接(每个钢卷一行),动态计算最大异常数并生成对应表头组
2. 移除冗余代码:删除原createExportVo方法和parseDateFromObject方法,简化导出结构
3. 调整数据格式:使用List<List<Object>>存储行数据,直接填充钢卷信息、改判原因及N组异常字段

调整前,导出文件为每个异常生成独立行,导致数据冗余且结构松散;调整后,每个钢卷仅占一行,异常信息横向拼接为动态列组,提升数据紧凑性与可读性,支持大规模异常数据导出。
2026-06-05 11:07:20 +08:00
1792196dc7 fix(wms/coil): 修复位置比较时的类型校验问题
将位置字段转为整数再进行大小比较,同时添加了调试日志用于排查异常数据问题
2026-06-05 11:05:32 +08:00
d8051abf8e feat(cost): 新增钢卷囤积成本统计页面及相关接口
新增了钢卷囤积成本统计的API接口,包括囤积统计和明细列表接口,同时新建了对应的页面页面,包含筛选查询、统计卡片、维度对比图表和明细表格功能,实现钢卷囤积成本的可视化管理。
2026-06-05 10:45:46 +08:00
5e0cb69bb8 feat(wms/coil): 为钢卷相关页面添加异常继承功能
本次修改在typing.vue、merge.vue、split.vue和stepSplit.vue四个钢卷相关页面中,新增了异常继承的完整功能:
1.  重构异常信息展示区域,添加继承标记样式
2.  新增继承异常按钮,打开异常选择弹窗
3.  实现从源钢卷拉取异常列表、批量选择继承异常的功能
4.  继承的异常会标记来源并使用特殊样式展示
2026-06-05 10:45:37 +08:00
37a69b563b Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-05 10:45:01 +08:00
66f0b3fdd7 fix(wms): 修复三处业务显示与逻辑不一致问题
1. 修复异常报表接口数据字段使用错误,将rows改为data
2. 调整标签渲染PDF的图片缩放和位置,避免内容超出页面
3. 修改考勤审核页面的请假天数列标题为请假小时,匹配实际展示数据
2026-06-05 10:44:56 +08:00
5e0dc848bb fix(wms-warehouse): 修复仓库页面容器高度溢出和导出二维码逻辑 2026-06-05 10:41:49 +08:00
a5323aea76 fix(crm/contract): 优化合同预览与导出功能
1.  隐藏打印预览按钮
2.  调整合同预览页面样式间距与logo位置
3.  修改合同金额字段保留小数位数为3位
4.  优化PDF导出分页逻辑,按空白行自动分页
2026-06-05 10:41:33 +08:00
cac747d158 fix(wms/material-coil): 移除钢卷查询中不必要的用户与异常统计关联
在WmsMaterialCoilMapper.xml的钢卷分页查询SQL中,移除了与sys_user表的左连接(通过sale_id关联)以及wms_coil_abnormal异常统计的子查询关联。调整前,查询包含冗余关联,可能影响性能且非必需;调整后,简化了SQL结构,提升查询效率。
2026-06-05 10:02:32 +08:00
705d929d6e feat(wms/material-coil): 优化钢卷囤积统计查询性能
1. 重构囤积统计方法:将原Java循环计算逻辑替换为单SQL聚合查询,通过JSON_EXTRACT解析二维码步骤创建时间,一次性计算平均囤积周期与成本
2. 移除原低效实现:删除getHoardingStatistics方法中的批量查询与循环解析代码,消除N+1性能问题
3. 新增Mapper方法与XML映射:添加selectHoardingStatistics接口及对应SQL,支持与分页查询相同的条件筛选

调整前,统计需先查询钢卷列表再批量获取二维码并循环解析,存在性能瓶颈;调整后,通过单SQL完成所有聚合计算,大幅提升查询效率,支持大规模数据统计。
2026-06-04 17:06:08 +08:00
29c21fd64f Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-04 15:46:02 +08:00
5236500f04 feat(wms/material-coil): 新增钢卷囤积统计与二维码详情查询功能
1. 新增囤积统计接口:计算已发货钢卷的平均囤积周期和平均囤积成本
   - 囤积周期 = 发货时间 - 二维码第一步创建时间
   - 囤积成本 = 囤积天数 × 钢卷净重 × 1元/吨/天
   - 支持与分页列表相同的查询条件筛选

2. 新增二维码详情查询接口:在分页查询基础上填充完整的二维码记录信息
   - 前端可通过 qrcodeRecord.content 获取二维码JSON内容
   - 采用批量查询避免N+1性能问题

调整前,钢卷查询无法获取二维码详细内容,也无法统计囤积相关指标;调整后,支持二维码内容查看和囤积成本分析,为仓储成本核算提供数据支持。
2026-06-04 15:45:51 +08:00
600867f386 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-04 14:28:38 +08:00
8183bae824 fix(crm): 统一销售金额单位为元并优化金额精度
1. 修改客户等级图表、销售报告页面的金额单位从万元改为元
2. 将金额计算和展示的精度从两位小数调整为三位小数
3. 新增合同默认编码和签订地点的默认值
2026-06-04 14:28:33 +08:00
37d6830947 fix(wms/delivery): 清除运单明细查询中的时间条件干扰
在WmsDeliveryWaybillDetailController的运单明细查询方法中,startTime/endTime参数已用于运单delivery_time筛选。为避免其被误用作钢卷update_time的查询条件,在查询前将bo中的startTime和endTime字段显式置为null。调整前,时间条件可能干扰钢卷维度的查询结果;调整后,确保运单交付时间筛选与钢卷更新时间筛选互不干扰,提升查询准确性。
2026-06-04 14:09:25 +08:00
c71dfe3ff2 feat(wms/coil): 新增钢卷异常管理相关页面与功能
1. 新增钢卷异常列表基础页、明细页、钢卷维度异常页和继承扩展页
2. 在异常管理表格中新增继承来源列
3. 完善异常增删改查、判级以及继承功能
2026-06-04 13:36:01 +08:00
ff139759d4 feat(wms/coil/abnormal): 新增钢卷异常记录的父异常ID字段
在WmsCoilAbnormal实体及相关业务对象中新增parentAbnormalId字段,用于记录异常继承关系。调整涉及数据库映射、Java实体类、业务对象、查询条件及导出映射。调整前,异常记录缺少父异常关联信息;调整后,支持按父异常ID进行筛选与关联追溯,提升异常链分析能力。
2026-06-04 13:19:33 +08:00
5176c80344 refactor(mes/wms): 优化多处日期处理与表格列展示
1. 移除磨工页面字典表格的"值"列
2. 修复TimeInput组件日期格式化逻辑,补全月份日期补零处理
3. 为卷料录入页面添加日期格式化方法,替换直接赋值逻辑并新增生产时长计算
2026-06-04 11:10:34 +08:00
31f7a9c0cb Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-04 10:59:17 +08:00
9d208770d8 feat(service): 添加按热卷号查询计划详情功能
- 在 SqlServerApiBusinessService 中实现按热卷号查询计划详情方法
- 新增调用查询扩展卷数据接口并整合到返回结果中
- 修改 PlanDetailView 构造函数以支持扩展卷数据列表
- 添加 excoilRows 属性和相应的 getter 方法
- 提供新的 fromExecuteSqlResponse 静态工厂方法处理双响应对象
- 在 SqlServerApiClient 中新增 queryExcoilByHotCoilId 查询接口
2026-06-04 10:59:07 +08:00
31d8d1ee16 feat: 多个页面优化与功能增强
1. 磨削页面:添加操作人权限控制,自动填充上次硬度值,移除字典值字段
2. 质保书页面:新增质保书类型筛选与表单字段,移除模板选择弹窗
3. 成本综合页面:添加产线校验、录入/查看切换、表格列控制与快捷操作
4. 质保书条目页面:新增类型筛选与表单字段,移除模板选择弹窗
2026-06-04 10:26:09 +08:00
b4fbb8dfc8 feat(qc/certificate): 新增证书类型字段
在QcCertificate实体及相关业务对象中新增certificateType字段,用于标识出厂合格证、检测报告、质保书等证书类型。调整涉及数据库映射、查询条件及导出映射。调整前,证书记录缺少类型分类;调整后,支持按证书类型进行筛选与统计,提升证书管理能力。
2026-06-03 17:21:12 +08:00
40ebca2573 feat(mes/eqp/check): add inspector summary statistics table
新增按实际巡检人维度的巡检汇总统计表格,展示巡检人、巡检次数、通过/不通过数量及通过率
2026-06-03 16:59:03 +08:00
ec08a360a0 feat(qc/inspection): 新增检验任务方案选择的公司和默认选中参数
1.  给SchemeSelect组件新增company和scheme两个props
2.  组件内新增模板单位查询参数并关联传入的company值
3.  组件挂载/重置时自动匹配并选中传入的默认方案
4.  同步更新表单内的归属公司和任务类型字段初始化
2026-06-03 16:54:37 +08:00
977ea2b021 refactor(wms/report): 移除actionIds相关导出逻辑 2026-06-03 16:44:44 +08:00
e507887a27 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-03 16:31:54 +08:00
12a887e074 refactor(wms-report): 统一报表页面模板,提取公共逻辑为action-template
1.  将merge、repair下的多个报表页面重构为使用action-template组件
2.  提取自定义导出功能为公共组件CustomExport并复用至receive.vue和action-template
3.  统一报表页面的查询、导出、列配置等公共逻辑
2026-06-03 16:31:51 +08:00
577de8eb64 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-03 16:31:32 +08:00
03add7c96b 模架厚度修复 2026-06-03 16:30:48 +08:00
42e5b6dd2b feat(wms/coil/abnormal): 新增钢卷异常记录数据来源与工序来源
在WmsCoilAbnormal实体及相关业务对象中新增以下字段:
1. 数据来源(sourceSystem):标识数据来自二级系统同步或三级本地录入
2. 工序来源(processSource):记录异常发生的具体工序(如粗轧、精轧等)

调整涉及数据库表结构、Java实体类、业务对象、查询条件及导出映射。调整前,异常记录缺少数据来源和工序信息;调整后,新增字段支持按数据来源和工序进行筛选与统计,提升异常追溯与分析能力。同时为物料钢卷服务中的相关DTO预留字段映射注释。
2026-06-03 15:48:25 +08:00
88149561c5 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-03 15:12:34 +08:00
51bb7593c7 feat(mes/wms): 新增磨辊人管理与免验规则优化
1. 优化wms产线免验逻辑,新增镀铬产线免验支持
2. 新增磨辊人统计报表导出功能
3. 新增磨辊操作人字典维护功能
2026-06-03 15:12:31 +08:00
c34fc1e477 fix(wms/coil): 修正操作类型校验逻辑,增加对类型505的排除
在钢卷操作校验逻辑中,原代码仅排除了操作类型501(入库)对子卷操作类型的校验。调整后,增加对操作类型505(出库)的排除,确保在入库和出库操作中,子卷的操作类型字段不会因非空而被错误校验,避免因校验不匹配导致的业务异常。
2026-06-03 15:06:25 +08:00
9bd6077599 feat(wms/report): 新增自定义报表导出列配置缓存功能
在入库报表页面中新增导出列配置的本地缓存功能,用户自定义的列顺序将被保存至localStorage,避免重复配置。调整前,每次打开自定义导出弹窗均需重新选择列;调整后,自动读取上次保存的配置,提升用户体验。
2026-06-03 15:01:16 +08:00
6fe1f668d3 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-03 14:53:14 +08:00
53b991242c feat(mes/roll/report): 优化磨辊人员统计报表,按辊型拆分统计数据
该提交重构了磨辊报表的操作人员统计模块,将原有的总统计拆分为中间辊(CR)、支撑辊(BR)、工作辊(WR)的分项统计,并增加了合计栏,同时完善了辊型识别逻辑,新增了对应的数据计算和表格展示。
2026-06-03 14:07:46 +08:00
91017f7c84 refactor(wms/report): 重构镀锌、酸轧线报表页面,统一使用通用模板组件
1.  新增了zinc_old和zha_old旧版报表备份目录,保留原有实现
2.  将所有报表页面替换为通用的ActionTemplate组件
3.  为镀锌线、酸轧线的各类报表配置了固定的生产线、仓库选项和操作类型
4.  移除了动态加载报表配置的逻辑,改为硬编码固定配置
2026-06-03 14:07:35 +08:00
7b80ef035a fix(mes/roll): 修正磨削记录查询排序逻辑
1. 将磨削记录列表的默认排序由升序改为降序,确保最新记录优先展示
2. 移除冗余的grind_id排序条件,简化排序规则
2026-06-03 11:36:36 +08:00
e54efab7c8 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-02 16:49:16 +08:00
715c1b9728 fix(qc/inspection): 修复产品检验入场卷号校验逻辑
1. 移除表单内置的入场卷号校验规则,改为手动校验
2. 添加失焦校验和实时错误提示
3. 优化两个页面的卷号选择表单结构
2026-06-02 16:49:13 +08:00
jhd
8723924002 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-02 15:44:19 +08:00
jhd
cbaa47b34e 地图获取省份逻辑 2026-06-02 15:44:01 +08:00
fe24426f59 refactor(crm/contract): 简化产品内容组件并优化合同打印样式 2026-06-02 15:40:47 +08:00
ef04d73e0c feat(cost/comprehensive): 新增产线自动填充和数据一键获取功能
1.  新增产线名称转换方法,统一展示产线中文名
2.  为详情输入框添加自动获取数据按钮,支持原料、产出、辅料、轧辊四类数据自动查询
3.  改造报表表单的产线选择器,使用正式产线数据而非硬编码选项
4.  完善报表编辑时的产线数据映射逻辑
5.  新增自动加载状态管理,避免重复请求
2026-06-02 14:45:04 +08:00
b7d47a5d9d feat(mes/roll): 扩展磨削记录查询功能,新增班组与轧辊类型筛选
在磨削记录查询接口中新增以下筛选条件:
1. 班组(team)
2. 轧辊类型(rollType)

调整涉及服务接口、控制器、Mapper及XML映射文件,将原有的时间范围和产线筛选扩展为支持多维度查询。调整前,查询仅支持按轧辊ID、产线ID和时间范围筛选;调整后,新增班组和轧辊类型条件,提升查询灵活性与业务分析能力。同时优化SQL查询,通过关联mes_roll_info表获取轧辊类型,并在返回结果中新增rollType字段。
2026-06-02 14:22:55 +08:00
jhd
021c1c908a Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-02 13:52:06 +08:00
cd3b25fa30 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-02 13:35:43 +08:00
3106b2c530 feat(wms/report): 新增理论厚度、理论长度与镀铬卷号字段至钢卷报表
在钢卷入库报表中新增以下字段:
1. 理论厚度(theoreticalThickness)
2. 理论长度(theoreticalLength)
3. 镀铬卷号(chromePlateCoilNo)

调整涉及前端报表展示列配置、后端导出列映射及理论计算公式注释修正。调整前,报表仅展示物理属性与材质属性的基础字段;调整后,新增理论计算字段与镀铬卷号,提升报表信息完整性与业务分析能力。同时修正理论计算公式注释中的单位转换符号,将除1000更正为乘1000,确保公式表述准确。
2026-06-02 13:35:29 +08:00
f4e6b24c92 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-02 13:23:01 +08:00
d6620e2449 feat: 新增质保书模板功能,优化标签样式与钢卷信息展示 2026-06-02 13:22:58 +08:00
b59bb1789e fix(wms/coil): 修复理论厚度与长度计算中宽度为零的除零异常
在钢卷理论计算逻辑中,当实际宽度为零时,计算理论厚度和理论长度会导致除零异常。调整前,仅校验实际长度不为空;调整后,增加实际宽度大于零的校验,避免无效计算。同时修正理论厚度和理论长度的计算公式,统一使用乘1000替代除1000,确保计算精度和单位转换正确。
2026-06-02 11:48:44 +08:00
4295a28f33 feat(wms/coil): 新增已绑定钢卷列表按发货计划创建时间倒序排序功能
在钢卷查询业务中,当查询已绑定钢卷列表且未指定计划ID(planId)时,新增按关联的发货计划创建时间倒序排序功能,确保较新的计划优先展示。

主要改动:
1. 在WmsMaterialCoilBo中新增orderByPlanDesc布尔字段,用于控制排序逻辑
2. 在WmsMaterialCoilMapper中新增selectVoPagePlusPlanOrder方法及对应的XML映射,通过关联发货计划表支持按计划创建时间排序
3. 在WmsMaterialCoilServiceImpl中调整查询逻辑:当orderByPlanDesc为true时调用新的查询方法,并在查询条件中补充排序规则
4. 在WmsDeliveryWaybillDetailController中设置orderByPlanDesc条件:当planId为空时启用该排序
5. 重构XML映射文件,提取公共SQL片段以提高可维护性

调整前,已绑定钢卷列表在无planId时仅按状态排序;调整后,新增按发货计划创建时间倒序排序,便于用户快速查看最新计划相关的钢卷。
2026-06-02 11:11:55 +08:00
8572a60044 feat(qc): 新增质量检验证书原料卷号、表面处理与调质度字段
在质量检验证书项(QcCertificateItem)中新增以下字段:
1. 原料卷号(rawCoilNo)
2. 表面处理(surfaceTreatment)
3. 调质度(temperDegree)

调整涉及实体类、业务对象、值对象及映射文件,确保字段在查询条件、导出模板中生效。
2026-06-02 11:02:56 +08:00
29328d70e9 提交3d钢卷,追溯和意库内容 2026-06-02 10:08:47 +08:00
12545f7c8b 提交3d钢卷 2026-06-02 09:27:47 +08:00
6ec4275088 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-02 09:13:56 +08:00
14dbd633b5 feat(qc): 新增化学成分与物理性能检验字段
在质量检验证书项(QcCertificateItem)中新增以下字段:
1. 化学成分:铝(Al)、钛(Ti)、铬(Cr)、镍(Ni)、铜(Cu)、氮(N)、铁(Fe)、硼(B)
2. 物理性能:规定塑性延伸强度(plasticExtensionStrength)
3. 镀层信息:镀层表面结构(coatingSurfaceStructure)、镀层重量(coatingMass)

调整涉及实体类、业务对象、值对象及映射文件,确保字段在查询条件、导出模板中生效。
2026-06-02 09:13:46 +08:00
8d68d2bdee Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-02 08:56:34 +08:00
6b8eac4139 feat(contract): 新增合同打印功能,重构产品金额计算逻辑
1. 新增合同打印预览功能,支持A4格式打印,包含合同完整信息和产品明细
2. 新增多个产品金额计算工具函数,统一管理产品税额、无税单价等字段计算
3. 重构产品内容组件,新增税率除数、无税单价、税额列,实现字段联动自动计算
4. 新增合同logo静态资源,优化表格布局和样式
2026-06-02 08:56:31 +08:00
13780c635b fix(attendance): 调整考勤漏打卡判定时间阈值至两小时
将漏打卡判定阈值从30分钟延长至120分钟,即上班打卡晚于理论上班时间两小时以上或下班打卡早于理论下班时间两小时以上才标记为漏打卡。调整前,30分钟即触发漏打卡状态;调整后,放宽判定标准,减少因短暂延误导致的误判。
2026-06-02 08:18:46 +08:00
a425a9052a fix(wms/coil): 为镀铬操作类型豁免分卷净重与规格厚度校验
在钢卷分卷和批量分卷的业务逻辑中,当操作类型为501(镀铬)时,豁免以下校验:
1. 子卷净重不超过母卷净重的校验
2. 子卷规格厚度不超过母卷规格厚度的校验
3. 批量分卷时所有子卷总重不超过母卷净重的校验

调整前,所有分卷操作均强制进行净重和规格厚度校验;调整后,镀铬操作类型(501)可跳过这些校验,以适应镀铬产线的特殊业务场景。
2026-06-02 08:02:04 +08:00
f64da15bc3 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-01 17:11:43 +08:00
b134539e53 提交3d钢卷初版 2026-06-01 17:11:36 +08:00
effc1f6f2e Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-01 16:40:15 +08:00
ca285f78c6 feat(qc): 新增厂家卷号匹配功能,优化卷号录入体验
本次改动在检验任务、化学成分报告、物理性能报告模块中:
1. 支持通过入场卷号和厂家卷号双向搜索匹配
2. 新增多选卷号标签式展示与删除功能
3. 新增批量导入时厂家卷号自动匹配入场卷号的逻辑,包含多匹配结果弹窗选择
4. 在表格中新增厂家卷号展示列,更新导入模板支持厂家卷号字段
2026-06-01 16:40:13 +08:00
0cfffcc60d feat(wms/coil): 新增钢卷理论长度字段并优化理论计算逻辑
1. 在钢卷物料实体类、业务对象、值对象及导出VO中新增理论长度(theoreticalLength)字段,并在映射文件中补充数据库映射关系
2. 重构理论计算工具方法,将原有的calculateTheoreticalThickness方法扩展为calculateTheoretical,支持同时计算理论厚度和理论长度
3. 理论长度计算公式:理论长度 = 净重(吨) × 1000 / 7.85 / 规格厚度(mm) / 规格宽度(mm) / 1000
4. 优化规格信息提取逻辑,统一从物品规格中解析厚度和宽度,避免重复代码
5. 在新增、修改、分卷、批量分卷等业务方法中调用新的计算逻辑,确保理论长度字段的自动填充
2026-06-01 16:21:41 +08:00
37b2987279 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-01 16:10:27 +08:00
59bdcf96dc style(mes/roll/grind): 调整磨削记录查询排序为降序
将磨削记录的默认排序从按磨削时间升序改为降序,确保最新的磨削记录显示在列表前面,便于用户优先查看最近的操作记录。
2026-06-01 16:10:18 +08:00
8f602d80a9 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-06-01 15:56:51 +08:00
7bddfad80f feat(eqp/check): 新增设备巡检负责人筛选页面及相关优化
1.  新增person.vue页面,支持按负责人筛选巡检部位
2.  在设备巡检列表页展示负责人信息并添加样式
3.  修复产线绑定字段错误,将lineId改为productionLine
4.  移除磨工页面输入框的number类型限制
2026-06-01 15:56:48 +08:00
8b1d7ed280 feat(wms/report): 新增自定义导出列顺序功能并优化导出弹窗布局
1. 在ExcelUtil工具类中新增exportExcelOrdered方法,支持按指定顺序的列动态生成表头和数据行进行导出
2. 重构接收报表页面的自定义导出弹窗:将布局拆分为左侧可选列面板和右侧导出顺序面板,支持拖拽排序
3. 新增后端/exportCustomOrdered接口,接收有序字段列表并调用新的导出方法
4. 优化弹窗样式:调整宽度、间距、滚动区域,新增顺序序号和移除按钮
5. 移除原有的/exportCustom接口,统一使用新的有序导出逻辑
2026-06-01 15:14:34 +08:00
285775c733 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-01 14:39:03 +08:00
7e6bc1e8b4 fix(attendance): 优化考勤状态识别逻辑并补充漏打卡处理
1. 在考勤状态筛选、汇总卡片和图例中将“迟到/早退”标签更新为“迟到/早退/缺卡”,以包含漏打卡情况
2. 后端服务中,在考勤状态常量列表新增“missed_start”、“missed_end”、“missed”三种漏打卡状态
3. 重构上下班打卡时间判断逻辑:当打卡时间晚于理论上班时间或早于理论下班时间超过30分钟时,标记为漏打卡(上班漏打卡或下班漏打卡)
4. 调整状态覆盖逻辑:上班漏打卡或下班漏打卡状态会覆盖原有的迟到/早退状态;若上下班均漏打卡则标记为全天漏打卡(missed)
5. 更新考勤记录处理:当标记为漏打卡时,对应的首次或末次打卡时间字段设为null
6. 优化旷工判定逻辑:单独处理上午段(P1)或下午段(P2)漏打卡的情况,分别标记为半天旷工(absent_half)
7. 前端新增漏打卡状态对应的日历样式(状态色块为#e6a23c)和状态描述文本(“上班漏打卡”、“下班漏打卡”)
2026-06-01 14:38:56 +08:00
bf3967d7b5 feat(wms/coil): 新增镀铬卷号字段与分条校验规则优化
1.  在CoilCard中将长度标签改为参考长度
2.  新增镀铬卷号列到钢卷选择器表格与可选列配置
3.  在钢卷更新和分条页面添加净重、厚度校验规则,区分镀锌/酸轧/镀铬产线豁免情况
4.  优化分条页面的代码格式与组件注册顺序,新增镀铬操作类型判断
5.  分条表单新增镀铬卷号输入项,支持从源卷复制镀铬卷号信息
2026-06-01 14:31:06 +08:00
a0cd885fc7 feat(wms/attendance): 优化考勤同步功能,新增月份选择和超时配置
1. 重构syncRecords接口,支持传入开始和结束时间参数并新增60s超时配置
2. 升级考勤同步页面:新增同步弹窗、月份选择器,替换原有基于最后同步时间的同步逻辑
3. 优化搜索表单和详情表单的标签与占位符,调整表单宽度提升可读性
4. 移除无用的最后同步时间查询逻辑
2026-06-01 14:12:06 +08:00
481188f654 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-06-01 13:51:00 +08:00
c8fe545950 feat(wms/coil): 为钢卷物料新增理论厚度与镀铬卷号字段并实现自动计算
1. 在钢卷物料实体类、业务对象、值对象及导出VO中新增理论厚度(theoreticalThickness)和镀铬卷号(chromePlateCoilNo)字段
2. 在映射文件中补充新增字段的数据库映射关系
3. 在服务实现类中添加理论厚度自动计算逻辑:根据净重、实测长度和物品规格宽度,使用公式“理论厚度 = 净重(吨) × 1000 / (7.85 × 实测长度(mm) × 宽度(mm))”自动计算并保留3位小数
4. 新增工具方法用于从物品规格中提取厚度和宽度信息
5. 在新增、修改、分卷、批量分卷等业务方法中调用理论厚度计算逻辑
6. 在分卷和批量分卷时增加子卷净重和规格厚度不超过母卷的业务校验
2026-06-01 13:50:48 +08:00
94840b2153 feat(mes/roll/grind): 实现轧辊增删改查功能
1. 新增轧辊列表头部新增按钮和轧辊明细面板的修改、删除按钮
2. 增加轧辊新增/编辑弹窗,包含完整的轧辊信息表单和校验
3. 对接轧辊CRUD后端接口,实现新增、修改、删除逻辑
4. 调整左侧轧辊面板宽度适配新增内容
2026-06-01 12:58:35 +08:00
c5ce33f71a feat(mes/roll): 重构轧辊磨削页面布局并补充备注字段
1.  重构轧辊磨削页面的整体布局,调整为左侧产线Tab+右侧主体的结构
2.  在实体类和BO类中新增remark备注字段
3.  移除运单页面的冗余备注搜索框
4.  优化轧辊列表的检索和展示逻辑,新增厂家筛选选项
5.  补充磨削班组的下拉选择选项,新增字典配置
6.  优化页面样式和交互细节
2026-06-01 11:27:05 +08:00
43f4692a72 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-05-30 18:00:04 +08:00
9af5284ff3 feat: 多页面功能优化与新增 2026-05-30 18:00:01 +08:00
62da44382a fix(wms/attendance): 优化午休打卡模式识别逻辑
1. 重构打卡记录分割逻辑,将原简单中值法改为基于时间区间和间隔检测的智能分割
2. 新增午休打卡模式检测:支持区间内长间隔、提前下班+午饭回来、午休晚归三种场景识别
3. 当检测到午休打卡模式时,按实际打卡间隔进行合理分割;未检测到时回退使用原中值法
4. 提升考勤统计的准确性,避免因午休打卡时间分布不均导致的上下班时段误判
2026-05-30 17:38:13 +08:00
6a5220ad78 feat(mes/roll/grind): 增加厂家搜索筛选和CR类型选项
1. 新增厂家搜索输入框和筛选逻辑
2. 新增CR类型的单选筛选按钮
3. 在辊子列表中展示厂家信息
4. 优化有效当前辊径的默认返回逻辑
2026-05-30 15:05:43 +08:00
3b7ae10499 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-05-30 14:31:23 +08:00
6044413384 fix(wms): 统一发货单导出逻辑并修复弹窗拦截问题
1. 替换原有的window.open弹窗导出为a标签下载,解决浏览器拦截弹窗的问题
2. 统一使用Date.now()替代new Date().getTime()优化代码
3. 新增释放URL对象的代码避免内存泄漏
4. 调整线圈页面批量移出发货单按钮的显示条件
2026-05-30 14:31:20 +08:00
91d1236c37 feat(cost): 为成本项新增查询条件
- 在CostItem实体类、Bo业务对象和Vo视图对象中新增queryCondition字段,用于存储JSON格式的查询条件
- 更新CostItemMapper.xml映射文件以支持新字段的数据映射
- 在CostItemServiceImpl服务实现中添加新字段的查询条件支持,实现按查询条件过滤成本项的功能
2026-05-30 13:44:31 +08:00
020863d1ef feat(qc): 添加化学成分和物理性能检测字段
- 在QcChemicalItem实体类中新增铝、钛、铬、镍、铜、氮、铁、硼等化学成分字段
- 在QcChemicalItemBo业务对象中同步添加对应的化学成分属性
- 更新QcChemicalItemMapper.xml映射文件以支持新字段的数据映射
- 在QcChemicalItemServiceImpl服务实现中添加新字段的查询条件支持
- 在QcChemicalItemVo视图对象中添加化学成分字段并配置Excel导出
- 在QcPhysicalItem实体类中新增规定塑性延伸强度、镀层表面结构、镀层重量等物理性能字段
- 在QcPhysicalItemBo业务对象中添加对应的物理性能属性
- 更新QcPhysicalItemMapper.xml映射文件以支持新的物理性能字段映射
- 在QcPhysicalItemServiceImpl服务实现中添加新物理性能字段的查询条件支持
- 在QcPhysicalItemVo视图对象中添加物理性能字段并配置Excel导出功能
2026-05-30 11:04:02 +08:00
jhd
6832209e98 Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-05-30 10:47:52 +08:00
3a0f729669 feat(attendanceCheck): 新增员工考勤详情弹窗功能
1.  为员工列表列添加详情按钮,点击可查看个人考勤详情
2.  新增个人考勤汇总卡片,展示考勤统计数据
3.  支持表格和日历两种明细视图,根据天数自动切换
4.  添加考勤日历视图样式与状态标识
5.  补充相关计算属性与工具方法支撑新功能
2026-05-29 17:13:57 +08:00
aad568f320 feat(mes,wms): 新增设备送检审批流程及相关功能
1. 新增设备送检审批的API接口层
2. 在待办页面添加设备送检审批标签页
3. 完善设备巡检日报的送检提交功能
4. 修复报表模板查询的参数传递问题
5. 优化设备送检审批单的业务逻辑处理
2026-05-29 17:05:23 +08:00
d6099a781f Merge branch '0.8.X' of http://49.232.154.205:10100/DeXun/klp-oa into 0.8.X 2026-05-29 16:27:28 +08:00
e23098b766 feat(wms/report): 给成品线圈查询添加按创建时间筛选条件,并增加备注搜索项
1.  在wms报表模板页面的成品线圈查询中,补充byCreateTimeStart和byCreateTimeEnd参数,替换原有的startTime和endTime参数
2.  在CoilSelector组件中新增备注搜索输入框,仅在orderBy存在时显示
2026-05-29 16:27:25 +08:00
37ea2b7d78 feat(qc): 为质检任务新增厂家卷号字段
在质检任务实体、业务对象、值对象及映射文件中新增supplierCoilNos字段,用于记录厂家卷号集合(多个使用英文逗号分隔)。同时,在服务实现类中为查询条件添加对该字段的模糊匹配支持,实现按厂家卷号过滤质检任务的功能。
2026-05-29 16:19:04 +08:00
c707a0356f Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-05-29 16:10:09 +08:00
484f63f9cc feat(wms/coil): 新增钢卷物料个性化导出功能
1.  后端新增导出列元数据接口 `/exportColumns`,返回字段名与中文列名的映射。
2.  后端新增个性化导出接口 `/exportCustom`,支持通过 `columns` 参数指定导出的字段集合,利用增强的 `ExcelUtil.exportExcel` 方法实现按需导出。
3.  前端钢卷接收报表页面新增自定义导出弹窗,支持按列分组展示、搜索、全选/反选/清空列,并调用新接口实现仅导出选中列的数据。
4.  在导出VO中补充“班组”字段的Excel映射注解。
2026-05-29 16:09:58 +08:00
1f32171800 feat(aps): 新增排产单明细批量导入功能 2026-05-29 16:00:20 +08:00
jhd
5a16a9d2b1 wip在产大屏 2026-05-29 15:53:26 +08:00
6147ad2252 feat(aps/plan): 为排产单明细新增排产日期字段
在排产单明细实体、业务对象、值对象及映射文件中新增detailDate字段,用于记录排产日期(字符串格式,如'2025-12-29')。同时,在服务实现类中为查询条件添加对该字段的筛选支持,实现按排产日期过滤排产单明细的功能。
2026-05-29 15:40:46 +08:00
5e9bf6069e feat(mes/eqp): 新增设备巡检审批功能
新增设备巡检审批(按产线+时间范围审批)模块,包含以下内容:
1. 新增EqpEquipmentInspectionApproval实体类、Bo、Vo,定义审批相关字段
2. 新增EqpEquipmentInspectionApprovalController,提供增删改查及导出接口
3. 新增EqpEquipmentInspectionApprovalMapper及XML映射文件
4. 新增IEqpEquipmentInspectionApprovalService接口及ServiceImpl实现类,实现分页查询、新增、修改、删除等业务逻辑
5. 支持按产线、时间范围、申请人、审批状态等条件进行筛选查询
2026-05-29 15:24:52 +08:00
3cc37ae3d3 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-05-29 14:33:51 +08:00
5b4ea8f486 feat(aps/plan): 新增批量新增排产单明细接口
1. 在ApsPlanDetailController中新增batchAdd接口,支持批量新增排产单明细
2. 在ApsPlanDetailServiceImpl中实现insertBatchByBo方法,批量插入前进行实体校验
3. 在IApsPlanDetailService中声明批量新增接口方法
2026-05-29 14:33:19 +08:00
b8ed505971 feat(wms,crm,cost): 完成多模块功能更新与优化
1. 新增发货单明细统计接口调用
2. 移除成本页面复制配置按钮
3. 隐藏CRM合同订单编辑标签页
4. 优化发货单页面订单编号自动补全功能
5. 新增钢卷管理发货计划筛选与批量移单功能
2026-05-29 14:28:56 +08:00
6f488c74fc feat(wms/delivery): 新增根据发货计划ID查询已绑定钢卷功能,优化钢卷查询备注匹配
1. 在发货计划明细服务层新增getBoundCoilIdsByPlanId接口,支持根据计划ID和时间段筛选已绑定的钢卷ID列表
2. 在发货计划明细控制器中扩展已绑定钢卷查询接口,新增planId参数,优先按计划ID查询,兼容原有时间段查询逻辑
3. 在钢卷服务实现中为钢卷查询条件增加remark字段的模糊匹配支持,提升查询灵活性
2026-05-29 14:01:44 +08:00
1b65444ab3 refactor(wms/coil): 统一排产单表格展示样式并优化页面布局 2026-05-29 13:00:33 +08:00
125e07eed4 feat(mes/eqp/check): 替换字典选型为动态产线下拉选单
1. 统一替换页面中原有的dict-select为通过接口获取的动态产线列表
2. 新增产线默认选中酸轧线的逻辑
3. 修复产线参数传递不匹配的问题,同步前后端参数字段
2026-05-29 11:41:48 +08:00
82a54e3200 refactor(mes/eqp): 将设备巡检记录的产线字段类型从字符串改为长整型
1. 在EqpEquipmentInspectionRecordBo中将productionLine字段类型由String改为Long
2. 在EqpEquipmentInspectionRecordServiceImpl的查询条件中,将字符串非空判断改为Long非空判断
3. 统一前后端数据类型,为后续关联产线主键做准备
2026-05-29 11:16:22 +08:00
327ae685c1 Merge remote-tracking branch 'origin/0.8.X' into 0.8.X 2026-05-29 11:15:14 +08:00
df643a8e4e refactor(mes/eqp): 将设备备件的产线字段类型从字符串改为长整型
1. 在EqpEquipmentPart实体类、Bo和Vo中将productionLine字段类型由String改为Long
2. 在EqpEquipmentPartServiceImpl的查询条件中,将字符串非空判断改为Long非空判断
3. 统一前后端数据类型,为后续关联产线主键做准备
2026-05-29 11:15:05 +08:00
306 changed files with 20919 additions and 9392 deletions

View File

@@ -1,9 +0,0 @@
---
alwaysApply: true
scene: git_message
---
使用中文编写提交信息, 提交信息格式为:
```
<type>(<scope>): <subject>
```

View File

@@ -361,6 +361,15 @@ public class SqlServerApiClient {
);
}
public ExecuteSqlResponse queryExcoilByHotCoilId(String hotCoilId) {
return executeSql(
"oracle",
"select * from JXPLTCM.PLTCM_PDO_EXCOIL where HOT_COILID = :hotCoilId",
singletonParam("hotCoilId", hotCoilId)
);
}
public ExecuteSqlResponse queryPlanListByHotCoilIdLike(String hotCoilId, int page, int pageSize) {
int endRow = page * pageSize;
int startRow = endRow - pageSize;

View File

@@ -122,7 +122,10 @@ public class SqlServerApiBusinessService {
* 计划详情:按热卷号查询。
*/
public PlanDetailView getPlanByHotCoilId(String hotCoilId) {
return PlanDetailView.fromExecuteSqlResponse(hotCoilId, client.queryPlanByHotCoilId(hotCoilId));
SqlServerApiClient.ExecuteSqlResponse planResponse = client.queryPlanByHotCoilId(hotCoilId);
SqlServerApiClient.ExecuteSqlResponse excoilResponse = null;
excoilResponse = client.queryExcoilByHotCoilId(hotCoilId);
return PlanDetailView.fromExecuteSqlResponse(hotCoilId, planResponse, excoilResponse);
}
/**
@@ -249,6 +252,49 @@ public class SqlServerApiBusinessService {
);
}
/**
* 测试用:统计 V_VBDA_GAUGE 中各 THICK 列的非空/非零数量,
* 用于排查"末架出口厚度恒为 0"问题——确认实际数据落在哪一列。
*/
public Map<String, Object> getGaugeStats(String matId) {
List<Map<String, Object>> rows = asRowList(client.queryGaugeByMatId(matId));
String[] cols = {"THICK0", "THICK1", "THICK4", "THICK5",
"THICK0REF", "THICK1REF", "THICK4REF", "THICK5REF"};
Map<String, Object> stats = new LinkedHashMap<>();
for (String col : cols) {
long nonNull = 0, nonZero = 0;
Double min = null, max = null;
for (Map<String, Object> r : rows) {
Object raw = r.get(col);
if (raw == null) raw = r.get(col.toLowerCase());
if (raw == null) continue;
nonNull++;
Number n = asNumber(raw);
if (n == null) continue;
double d = n.doubleValue();
if (d != 0.0) nonZero++;
if (min == null || d < min) min = d;
if (max == null || d > max) max = d;
}
Map<String, Object> info = new LinkedHashMap<>();
info.put("nonNullCount", nonNull);
info.put("nonZeroCount", nonZero);
info.put("min", min);
info.put("max", max);
stats.put(col, info);
}
Map<String, Object> result = new LinkedHashMap<>();
result.put("matId", matId);
result.put("totalRows", rows.size());
result.put("columnStats", stats);
List<Map<String, Object>> samples = new ArrayList<>();
if (!rows.isEmpty()) samples.add(rows.get(0));
if (rows.size() > 1) samples.add(rows.get(rows.size() / 2));
if (rows.size() > 2) samples.add(rows.get(rows.size() - 1));
result.put("sampleRows", samples);
return result;
}
/**
* 轧辊数据:返回全部在辊/备辊数据。
*/
@@ -378,11 +424,13 @@ public class SqlServerApiBusinessService {
private final String coilId;
private final List<Map<String, Object>> rows;
private final Map<String, Object> firstRow;
private final List<Map<String, Object>> excoilRows;
public PlanDetailView(String coilId, List<Map<String, Object>> rows, Map<String, Object> firstRow) {
public PlanDetailView(String coilId, List<Map<String, Object>> rows, Map<String, Object> firstRow, List<Map<String, Object>> excoilRows) {
this.coilId = coilId;
this.rows = rows;
this.firstRow = firstRow;
this.excoilRows = excoilRows;
}
public String getCoilId() {
@@ -397,10 +445,21 @@ public class SqlServerApiBusinessService {
return firstRow;
}
public List<Map<String, Object>> getExcoilRows() {
return excoilRows;
}
public static PlanDetailView fromExecuteSqlResponse(String coilId, SqlServerApiClient.ExecuteSqlResponse response) {
List<Map<String, Object>> rows = asRowList(response);
Map<String, Object> firstRow = rows.isEmpty() ? Collections.<String, Object>emptyMap() : rows.get(0);
return new PlanDetailView(coilId, rows, firstRow);
return new PlanDetailView(coilId, rows, firstRow, Collections.<Map<String, Object>>emptyList());
}
public static PlanDetailView fromExecuteSqlResponse(String coilId, SqlServerApiClient.ExecuteSqlResponse response, SqlServerApiClient.ExecuteSqlResponse excoilResponse) {
List<Map<String, Object>> rows = asRowList(response);
Map<String, Object> firstRow = rows.isEmpty() ? Collections.<String, Object>emptyMap() : rows.get(0);
List<Map<String, Object>> excoilRows = asRowList(excoilResponse);
return new PlanDetailView(coilId, rows, firstRow, excoilRows);
}
}

View File

@@ -94,6 +94,15 @@ public class SqlServerApiController {
return R.ok(businessService.getRealtimeData(matId));
}
/**
* 测试用V_VBDA_GAUGE 各 THICK 列非空/非零统计 + 样本行。
* 用于定位"末架出口厚度恒为 0"问题。
*/
@GetMapping("/test/gauge-stats/{matId}")
public R<Map<String, Object>> testGaugeStats(@PathVariable String matId) {
return R.ok(businessService.getGaugeStats(matId));
}
/**
* 轧辊数据type / status 均可选,不传则返回全量。
*/

View File

@@ -76,6 +76,16 @@ public class ApsPlanDetailController extends BaseController {
return toAjax(iApsPlanDetailService.insertByBo(bo));
}
/**
* 批量新增排产单明细
*/
@Log(title = "排产单明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/batch")
public R<Void> batchAdd(@Validated(AddGroup.class) @RequestBody List<ApsPlanDetailBo> boList) {
return toAjax(iApsPlanDetailService.insertBatchByBo(boList));
}
/**
* 修改排产单明细
*/

View File

@@ -226,5 +226,9 @@ public class ApsPlanDetailBo extends BaseEntity {
*/
private String remark;
/**
* 排产日期(字符串格式,例如 '2025-12-29')
*/
private String detailDate;
}

View File

@@ -52,6 +52,11 @@ public class ApsPlanSheetBo extends BaseEntity {
*/
private String planType;
/**
* 排产文件
*/
private String apsUrl;
/**
* 排产人
*/

View File

@@ -184,6 +184,10 @@ public class ApsPlanDetail extends BaseEntity {
* 备注
*/
private String remark;
/**
* 排产日期(字符串格式,例如 '2025-12-29')
*/
private String detailDate;
/**
* 删除标记(0正常 1删除)
*/

View File

@@ -49,6 +49,10 @@ public class ApsPlanSheet extends BaseEntity {
* 排产类型
*/
private String planType;
/**
* 排产文件
*/
private String apsUrl;
/**
* 排产人
*/

View File

@@ -261,6 +261,12 @@ public class ApsPlanDetailVo {
@ExcelProperty(value = "备注")
private String remark;
/**
* 排产日期(字符串格式,例如 '2025-12-29')
*/
@ExcelProperty(value = "排产日期")
private String detailDate;
/**
* 技术附件
*/

View File

@@ -60,6 +60,12 @@ public class ApsPlanSheetVo {
@ExcelProperty(value = "排产类型")
private String planType;
/**
* 排产文件
*/
@ExcelProperty(value = "排产文件")
private String apsUrl;
/**
* 排产人
*/

View File

@@ -43,6 +43,11 @@ public interface IApsPlanDetailService {
*/
Boolean insertByBo(ApsPlanDetailBo bo);
/**
* 批量新增排产单明细
*/
Boolean insertBatchByBo(List<ApsPlanDetailBo> boList);
/**
* 修改排产单明细
*/

View File

@@ -101,6 +101,7 @@ public class ApsPlanDetailServiceImpl implements IApsPlanDetailService {
qw.eq(StringUtils.isNotBlank(bo.getSampleReq()), "d.sample_req", bo.getSampleReq());
qw.eq(bo.getStartTime() != null, "d.start_time", bo.getStartTime());
qw.eq(bo.getEndTime() != null, "d.end_time", bo.getEndTime());
qw.eq(StringUtils.isNotBlank(bo.getDetailDate()), "d.detail_date", bo.getDetailDate());
//根据创建时间倒叙
qw.orderByDesc("d.create_time");
return qw;
@@ -168,6 +169,7 @@ public class ApsPlanDetailServiceImpl implements IApsPlanDetailService {
lqw.eq(StringUtils.isNotBlank(bo.getSampleReq()), ApsPlanDetail::getSampleReq, bo.getSampleReq());
lqw.eq(bo.getStartTime() != null, ApsPlanDetail::getStartTime, bo.getStartTime());
lqw.eq(bo.getEndTime() != null, ApsPlanDetail::getEndTime, bo.getEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getDetailDate()), ApsPlanDetail::getDetailDate, bo.getDetailDate());
return lqw;
}
@@ -185,6 +187,16 @@ public class ApsPlanDetailServiceImpl implements IApsPlanDetailService {
return flag;
}
/**
* 批量新增排产单明细
*/
@Override
public Boolean insertBatchByBo(List<ApsPlanDetailBo> boList) {
List<ApsPlanDetail> list = BeanUtil.copyToList(boList, ApsPlanDetail.class);
list.forEach(this::validEntityBeforeSave);
return baseMapper.insertBatch(list);
}
/**
* 修改排产单明细
*/

View File

@@ -44,6 +44,7 @@
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="remark" column="remark"/>
<result property="detailDate" column="detail_date"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="updateBy" column="update_by"/>

View File

@@ -11,6 +11,7 @@
<result property="lineName" column="line_name"/>
<result property="planCode" column="plan_code"/>
<result property="planType" column="plan_type"/>
<result property="apsUrl" column="aps_url"/>
<result property="scheduler" column="scheduler"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
@@ -27,6 +28,7 @@
s.line_name AS lineName,
s.plan_code AS planCode,
s.plan_type AS planType,
s.aps_url AS apsUrl,
s.scheduler AS scheduler,
s.remark AS masterRemark,
d.remark AS detailRemark,

View File

@@ -26,9 +26,15 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Excel相关处理
@@ -149,6 +155,33 @@ public class ExcelUtil {
builder.doWrite(list);
}
/**
* 导出excel仅导出指定列
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param clazz 实体类
* @param includeColumnFieldNames 需要导出的字段名集合Java字段名非Excel列名
* @param response 响应体
*/
public static <T> void exportExcel(List<T> list, String sheetName, Class<T> clazz,
Set<String> includeColumnFieldNames,
HttpServletResponse response) {
try {
resetResponse(sheetName, response);
ServletOutputStream os = response.getOutputStream();
EasyExcel.write(os, clazz)
.autoCloseStream(false)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerConverter(new ExcelBigNumberConvert())
.includeColumnFieldNames(includeColumnFieldNames)
.sheet(sheetName)
.doWrite(list);
} catch (IOException e) {
throw new RuntimeException("导出Excel异常");
}
}
/**
* 单表多数据模板导出 模板格式为 {.属性}
*
@@ -325,4 +358,67 @@ public class ExcelUtil {
return IdUtil.fastSimpleUUID() + "_" + filename + ".xlsx";
}
/**
* 导出excel按指定顺序的列导出使用动态表头
*
* @param list 导出数据集合
* @param sheetName 工作表的名称
* @param orderedFields 按导出顺序排列的Java字段名列表
* @param fieldLabelMap Java字段名 -> Excel列头中文名 映射
* @param response 响应体
*/
public static <T> void exportExcelOrdered(List<T> list, String sheetName,
List<String> orderedFields,
Map<String, String> fieldLabelMap,
HttpServletResponse response) {
if (orderedFields == null || orderedFields.isEmpty()) {
throw new IllegalArgumentException("导出列不能为空");
}
// 构建动态表头
List<List<String>> heads = orderedFields.stream()
.map(f -> Collections.singletonList(fieldLabelMap.getOrDefault(f, f)))
.collect(Collectors.toList());
// 构建数据行
List<List<Object>> data = new ArrayList<>(list.size());
if (!list.isEmpty()) {
Map<String, Field> fieldCache = new HashMap<>();
Class<?> clazz = list.get(0).getClass();
for (T vo : list) {
List<Object> row = new ArrayList<>(orderedFields.size());
for (String fieldName : orderedFields) {
Field field = fieldCache.computeIfAbsent(fieldName, k -> {
try {
Field f = clazz.getDeclaredField(k);
f.setAccessible(true);
return f;
} catch (NoSuchFieldException e) {
return null;
}
});
try {
row.add(field != null ? field.get(vo) : null);
} catch (IllegalAccessException e) {
row.add(null);
}
}
data.add(row);
}
}
try {
resetResponse(sheetName, response);
ServletOutputStream os = response.getOutputStream();
EasyExcel.write(os)
.head(heads)
.autoCloseStream(false)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerConverter(new ExcelBigNumberConvert())
.sheet(sheetName)
.doWrite(data);
} catch (IOException e) {
throw new RuntimeException("导出Excel异常", e);
}
}
}

View File

@@ -44,6 +44,10 @@ public class CostItem extends BaseEntity {
* 备注
*/
private String remark;
/**
* 查询条件JSON格式
*/
private String queryCondition;
/**
* 删除标识 0=正常 2=删除
*/

View File

@@ -47,5 +47,10 @@ public class CostItemBo extends BaseEntity {
*/
private String remark;
/**
* 查询条件JSON格式
*/
private String queryCondition;
}

View File

@@ -55,5 +55,11 @@ public class CostItemVo {
@ExcelProperty(value = "备注")
private String remark;
/**
* 查询条件JSON格式
*/
@ExcelProperty(value = "查询条件JSON格式")
private String queryCondition;
}

View File

@@ -65,6 +65,7 @@ public class CostItemServiceImpl implements ICostItemService {
lqw.like(StringUtils.isNotBlank(bo.getItemName()), CostItem::getItemName, bo.getItemName());
lqw.eq(StringUtils.isNotBlank(bo.getCategory()), CostItem::getCategory, bo.getCategory());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), CostItem::getUnit, bo.getUnit());
lqw.eq(StringUtils.isNotBlank(bo.getQueryCondition()), CostItem::getQueryCondition, bo.getQueryCondition());
return lqw;
}

View File

@@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="category" column="category"/>
<result property="unit" column="unit"/>
<result property="remark" column="remark"/>
<result property="queryCondition" column="query_condition"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>

View File

@@ -85,6 +85,15 @@ public class CrmSalesReportController extends BaseController {
return R.ok(stats);
}
/**
* 查询省份统计数据
*/
@GetMapping("/provinceStats")
public R<List<CrmSalesReportVo.ProvinceStat>> getProvinceStats(CrmSalesReportBo bo) {
List<CrmSalesReportVo.ProvinceStat> stats = iCrmSalesReportService.queryProvinceStats(bo);
return R.ok(stats);
}
/**
* 导出销售报表订单明细
*/

View File

@@ -290,4 +290,35 @@ public class CrmSalesReportVo {
@ExcelProperty(value = "销售金额")
private BigDecimal salesAmount;
}
/**
* 省份统计内部类
*/
@Data
public static class ProvinceStat {
/**
* 省份
*/
@ExcelProperty(value = "省份")
private String province;
/**
* 客户数量
*/
@ExcelProperty(value = "客户数量")
private Integer customerCount;
/**
* 订单数量
*/
@ExcelProperty(value = "订单数量")
private Integer orderCount;
/**
* 销售金额
*/
@ExcelProperty(value = "销售金额")
private BigDecimal salesAmount;
}
}

View File

@@ -54,4 +54,12 @@ public interface CrmSalesReportMapper {
* @return 行业统计列表
*/
List<CrmSalesReportVo.IndustryStat> selectIndustryStats(@Param("bo") CrmSalesReportBo bo);
/**
* 查询省份统计数据
*
* @param bo 查询条件
* @return 省份统计列表
*/
List<CrmSalesReportVo.ProvinceStat> selectProvinceStats(@Param("bo") CrmSalesReportBo bo);
}

View File

@@ -72,4 +72,12 @@ public interface ICrmSalesReportService {
* @return 行业统计列表
*/
List<CrmSalesReportVo.IndustryStat> queryIndustryStats(CrmSalesReportBo bo);
/**
* 查询省份统计数据
*
* @param bo 查询条件
* @return 省份统计列表
*/
List<CrmSalesReportVo.ProvinceStat> queryProvinceStats(CrmSalesReportBo bo);
}

View File

@@ -250,11 +250,9 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
qw.eq("co.del_flag", 0);
//排序规则:
// 1. 置顶优先 (is_top=1 排在前面)
// 2. 状态为1(已生效)的排在前
// 3. 创建时间倒序
// 2. 合同号倒序KLPY+年月日+序号,降序最新在前
qw.orderByDesc("co.is_top")
.orderByDesc("CASE WHEN co.status = 1 THEN 1 ELSE 0 END")
.orderByDesc("co.create_time");
.orderByDesc("co.contract_code");
return qw;
}

View File

@@ -136,4 +136,12 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService {
public List<CrmSalesReportVo.IndustryStat> queryIndustryStats(CrmSalesReportBo bo) {
return baseMapper.selectIndustryStats(bo);
}
/**
* 查询省份统计数据
*/
@Override
public List<CrmSalesReportVo.ProvinceStat> queryProvinceStats(CrmSalesReportBo bo) {
return baseMapper.selectProvinceStats(bo);
}
}

View File

@@ -268,4 +268,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY salesAmount DESC
</select>
<!-- 查询省份统计数据 -->
<select id="selectProvinceStats" resultType="com.klp.crm.domain.vo.CrmSalesReportVo$ProvinceStat">
SELECT
COALESCE(c.province, '其他') as province,
COUNT(DISTINCT c.customer_id) as customerCount,
COUNT(o.order_id) as orderCount,
COALESCE(SUM(o.order_amount), 0) as salesAmount
FROM crm_order o
LEFT JOIN crm_customer c ON o.customer_id = c.customer_id
<include refid="selectCondition"/>
GROUP BY c.province
ORDER BY salesAmount DESC
</select>
</mapper>

View File

@@ -0,0 +1,99 @@
package com.klp.mes.eqp.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.mes.eqp.domain.vo.EqpEquipmentInspectionApprovalVo;
import com.klp.mes.eqp.domain.bo.EqpEquipmentInspectionApprovalBo;
import com.klp.mes.eqp.service.IEqpEquipmentInspectionApprovalService;
import com.klp.common.core.page.TableDataInfo;
/**
* 设备巡检审批(按产线+时间范围审批)
*
* @author klp
* @date 2026-05-29
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/eqp/equipmentInspectionApproval")
public class EqpEquipmentInspectionApprovalController extends BaseController {
private final IEqpEquipmentInspectionApprovalService iEqpEquipmentInspectionApprovalService;
/**
* 查询设备巡检审批(按产线+时间范围审批)列表
*/
@GetMapping("/list")
public TableDataInfo<EqpEquipmentInspectionApprovalVo> list(EqpEquipmentInspectionApprovalBo bo, PageQuery pageQuery) {
return iEqpEquipmentInspectionApprovalService.queryPageList(bo, pageQuery);
}
/**
* 导出设备巡检审批(按产线+时间范围审批)列表
*/
@Log(title = "设备巡检审批(按产线+时间范围审批)", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(EqpEquipmentInspectionApprovalBo bo, HttpServletResponse response) {
List<EqpEquipmentInspectionApprovalVo> list = iEqpEquipmentInspectionApprovalService.queryList(bo);
ExcelUtil.exportExcel(list, "设备巡检审批(按产线+时间范围审批)", EqpEquipmentInspectionApprovalVo.class, response);
}
/**
* 获取设备巡检审批(按产线+时间范围审批)详细信息
*
* @param approvalId 主键
*/
@GetMapping("/{approvalId}")
public R<EqpEquipmentInspectionApprovalVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long approvalId) {
return R.ok(iEqpEquipmentInspectionApprovalService.queryById(approvalId));
}
/**
* 新增设备巡检审批(按产线+时间范围审批)
*/
@Log(title = "设备巡检审批(按产线+时间范围审批)", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody EqpEquipmentInspectionApprovalBo bo) {
return toAjax(iEqpEquipmentInspectionApprovalService.insertByBo(bo));
}
/**
* 修改设备巡检审批(按产线+时间范围审批)
*/
@Log(title = "设备巡检审批(按产线+时间范围审批)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody EqpEquipmentInspectionApprovalBo bo) {
return toAjax(iEqpEquipmentInspectionApprovalService.updateByBo(bo));
}
/**
* 删除设备巡检审批(按产线+时间范围审批)
*
* @param approvalIds 主键串
*/
@Log(title = "设备巡检审批(按产线+时间范围审批)", businessType = BusinessType.DELETE)
@DeleteMapping("/{approvalIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] approvalIds) {
return toAjax(iEqpEquipmentInspectionApprovalService.deleteWithValidByIds(Arrays.asList(approvalIds), true));
}
}

View File

@@ -0,0 +1,75 @@
package com.klp.mes.eqp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 设备巡检审批(按产线+时间范围审批)对象 eqp_equipment_inspection_approval
*
* @author klp
* @date 2026-05-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("eqp_equipment_inspection_approval")
public class EqpEquipmentInspectionApproval extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 审批ID 主键
*/
@TableId(value = "approval_id")
private Long approvalId;
/**
* 产线ID对应你刚改的bigint类型
*/
private Long productionLine;
/**
* 巡检开始时间
*/
private Date insStartTime;
/**
* 巡检结束时间
*/
private Date insEndTime;
/**
* 申请人
*/
private String applyUser;
/**
* 申请时间
*/
private Date applyTime;
/**
* 审批状态 1=待审批 2=已通过 3=已驳回 4=已撤销
*/
private Integer approvalStatus;
/**
* 审批人
*/
private String approvalUser;
/**
* 审批时间
*/
private Date approvalTime;
/**
* 审批意见
*/
private String approvalOpinion;
/**
* 备注
*/
private String remark;
/**
* 删除标识 0正常 2删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -31,7 +31,7 @@ public class EqpEquipmentPart extends BaseEntity {
/**
* 产线
*/
private String productionLine;
private Long productionLine;
/**
* 产线段
*/

View File

@@ -0,0 +1,78 @@
package com.klp.mes.eqp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 设备巡检审批(按产线+时间范围审批)业务对象 eqp_equipment_inspection_approval
*
* @author klp
* @date 2026-05-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class EqpEquipmentInspectionApprovalBo extends BaseEntity {
/**
* 审批ID 主键
*/
private Long approvalId;
/**
* 产线ID对应你刚改的bigint类型
*/
private Long productionLine;
/**
* 巡检开始时间
*/
private Date insStartTime;
/**
* 巡检结束时间
*/
private Date insEndTime;
/**
* 申请人
*/
private String applyUser;
/**
* 申请时间
*/
private Date applyTime;
/**
* 审批状态 1=待审批 2=已通过 3=已驳回 4=已撤销
*/
private Integer approvalStatus;
/**
* 审批人
*/
private String approvalUser;
/**
* 审批时间
*/
private Date approvalTime;
/**
* 审批意见
*/
private String approvalOpinion;
/**
* 备注
*/
private String remark;
}

View File

@@ -68,7 +68,7 @@ public class EqpEquipmentInspectionRecordBo extends BaseEntity {
/**
* 产线
*/
private String productionLine;
private Long productionLine;
/**
* 巡检时间开始

View File

@@ -31,7 +31,7 @@ public class EqpEquipmentPartBo extends BaseEntity {
/**
* 产线
*/
private String productionLine;
private Long productionLine;
/**
* 产线段

View File

@@ -0,0 +1,92 @@
package com.klp.mes.eqp.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
/**
* 设备巡检审批(按产线+时间范围审批)视图对象 eqp_equipment_inspection_approval
*
* @author klp
* @date 2026-05-29
*/
@Data
@ExcelIgnoreUnannotated
public class EqpEquipmentInspectionApprovalVo {
private static final long serialVersionUID = 1L;
/**
* 审批ID 主键
*/
@ExcelProperty(value = "审批ID 主键")
private Long approvalId;
/**
* 产线ID对应你刚改的bigint类型
*/
@ExcelProperty(value = "产线ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "对=应你刚改的bigint类型")
private Long productionLine;
/**
* 巡检开始时间
*/
@ExcelProperty(value = "巡检开始时间")
private Date insStartTime;
/**
* 巡检结束时间
*/
@ExcelProperty(value = "巡检结束时间")
private Date insEndTime;
/**
* 申请人
*/
@ExcelProperty(value = "申请人")
private String applyUser;
/**
* 申请时间
*/
@ExcelProperty(value = "申请时间")
private Date applyTime;
/**
* 审批状态 1=待审批 2=已通过 3=已驳回 4=已撤销
*/
@ExcelProperty(value = "审批状态 1=待审批 2=已通过 3=已驳回 4=已撤销")
private Integer approvalStatus;
/**
* 审批人
*/
@ExcelProperty(value = "审批人")
private String approvalUser;
/**
* 审批时间
*/
@ExcelProperty(value = "审批时间")
private Date approvalTime;
/**
* 审批意见
*/
@ExcelProperty(value = "审批意见")
private String approvalOpinion;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -37,7 +37,7 @@ public class EqpEquipmentPartVo {
* 产线
*/
@ExcelProperty(value = "产线")
private String productionLine;
private Long productionLine;
/**
* 产线段

View File

@@ -0,0 +1,15 @@
package com.klp.mes.eqp.mapper;
import com.klp.mes.eqp.domain.EqpEquipmentInspectionApproval;
import com.klp.mes.eqp.domain.vo.EqpEquipmentInspectionApprovalVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 设备巡检审批(按产线+时间范围审批Mapper接口
*
* @author klp
* @date 2026-05-29
*/
public interface EqpEquipmentInspectionApprovalMapper extends BaseMapperPlus<EqpEquipmentInspectionApprovalMapper, EqpEquipmentInspectionApproval, EqpEquipmentInspectionApprovalVo> {
}

View File

@@ -0,0 +1,49 @@
package com.klp.mes.eqp.service;
import com.klp.mes.eqp.domain.EqpEquipmentInspectionApproval;
import com.klp.mes.eqp.domain.vo.EqpEquipmentInspectionApprovalVo;
import com.klp.mes.eqp.domain.bo.EqpEquipmentInspectionApprovalBo;
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-05-29
*/
public interface IEqpEquipmentInspectionApprovalService {
/**
* 查询设备巡检审批(按产线+时间范围审批)
*/
EqpEquipmentInspectionApprovalVo queryById(Long approvalId);
/**
* 查询设备巡检审批(按产线+时间范围审批)列表
*/
TableDataInfo<EqpEquipmentInspectionApprovalVo> queryPageList(EqpEquipmentInspectionApprovalBo bo, PageQuery pageQuery);
/**
* 查询设备巡检审批(按产线+时间范围审批)列表
*/
List<EqpEquipmentInspectionApprovalVo> queryList(EqpEquipmentInspectionApprovalBo bo);
/**
* 新增设备巡检审批(按产线+时间范围审批)
*/
Boolean insertByBo(EqpEquipmentInspectionApprovalBo bo);
/**
* 修改设备巡检审批(按产线+时间范围审批)
*/
Boolean updateByBo(EqpEquipmentInspectionApprovalBo bo);
/**
* 校验并批量删除设备巡检审批(按产线+时间范围审批)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,125 @@
package com.klp.mes.eqp.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.helper.LoginHelper;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.mes.eqp.domain.bo.EqpEquipmentInspectionApprovalBo;
import com.klp.mes.eqp.domain.vo.EqpEquipmentInspectionApprovalVo;
import com.klp.mes.eqp.domain.EqpEquipmentInspectionApproval;
import com.klp.mes.eqp.mapper.EqpEquipmentInspectionApprovalMapper;
import com.klp.mes.eqp.service.IEqpEquipmentInspectionApprovalService;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 设备巡检审批(按产线+时间范围审批Service业务层处理
*
* @author klp
* @date 2026-05-29
*/
@RequiredArgsConstructor
@Service
public class EqpEquipmentInspectionApprovalServiceImpl implements IEqpEquipmentInspectionApprovalService {
private final EqpEquipmentInspectionApprovalMapper baseMapper;
/**
* 查询设备巡检审批(按产线+时间范围审批)
*/
@Override
public EqpEquipmentInspectionApprovalVo queryById(Long approvalId){
return baseMapper.selectVoById(approvalId);
}
/**
* 查询设备巡检审批(按产线+时间范围审批)列表
*/
@Override
public TableDataInfo<EqpEquipmentInspectionApprovalVo> queryPageList(EqpEquipmentInspectionApprovalBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<EqpEquipmentInspectionApproval> lqw = buildQueryWrapper(bo);
Page<EqpEquipmentInspectionApprovalVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询设备巡检审批(按产线+时间范围审批)列表
*/
@Override
public List<EqpEquipmentInspectionApprovalVo> queryList(EqpEquipmentInspectionApprovalBo bo) {
LambdaQueryWrapper<EqpEquipmentInspectionApproval> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<EqpEquipmentInspectionApproval> buildQueryWrapper(EqpEquipmentInspectionApprovalBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<EqpEquipmentInspectionApproval> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getProductionLine() != null, EqpEquipmentInspectionApproval::getProductionLine, bo.getProductionLine());
lqw.eq(bo.getInsStartTime() != null, EqpEquipmentInspectionApproval::getInsStartTime, bo.getInsStartTime());
lqw.eq(bo.getInsEndTime() != null, EqpEquipmentInspectionApproval::getInsEndTime, bo.getInsEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getApplyUser()), EqpEquipmentInspectionApproval::getApplyUser, bo.getApplyUser());
lqw.eq(bo.getApplyTime() != null, EqpEquipmentInspectionApproval::getApplyTime, bo.getApplyTime());
lqw.eq(bo.getApprovalStatus() != null, EqpEquipmentInspectionApproval::getApprovalStatus, bo.getApprovalStatus());
lqw.eq(StringUtils.isNotBlank(bo.getApprovalUser()), EqpEquipmentInspectionApproval::getApprovalUser, bo.getApprovalUser());
lqw.eq(bo.getApprovalTime() != null, EqpEquipmentInspectionApproval::getApprovalTime, bo.getApprovalTime());
lqw.eq(StringUtils.isNotBlank(bo.getApprovalOpinion()), EqpEquipmentInspectionApproval::getApprovalOpinion, bo.getApprovalOpinion());
return lqw;
}
/**
* 新增设备巡检审批(按产线+时间范围审批)
*/
@Override
public Boolean insertByBo(EqpEquipmentInspectionApprovalBo bo) {
EqpEquipmentInspectionApproval add = BeanUtil.toBean(bo, EqpEquipmentInspectionApproval.class);
add.setApplyUser(LoginHelper.getNickName());
add.setApplyTime(new Date());
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setApprovalId(add.getApprovalId());
}
return flag;
}
/**
* 修改设备巡检审批(按产线+时间范围审批)
*/
@Override
public Boolean updateByBo(EqpEquipmentInspectionApprovalBo bo) {
EqpEquipmentInspectionApproval update = BeanUtil.toBean(bo, EqpEquipmentInspectionApproval.class);
if (bo.getApprovalStatus() != null && (bo.getApprovalStatus() == 2 || bo.getApprovalStatus() == 3)) {
update.setApprovalUser(LoginHelper.getNickName());
update.setApprovalTime(new Date());
}
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(EqpEquipmentInspectionApproval entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除设备巡检审批(按产线+时间范围审批)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -58,7 +58,7 @@ public class EqpEquipmentInspectionRecordServiceImpl implements IEqpEquipmentIns
qw.eq(bo.getRunStatus() != null, "r.run_status", bo.getRunStatus());
qw.eq(StringUtils.isNotBlank(bo.getInspector()), "r.inspector", bo.getInspector());
qw.eq(StringUtils.isNotBlank(bo.getAbnormalDesc()), "r.abnormal_desc", bo.getAbnormalDesc());
qw.eq(StringUtils.isNotBlank(bo.getProductionLine()), "p.production_line", bo.getProductionLine());
qw.eq(bo.getProductionLine() != null, "p.production_line", bo.getProductionLine());
qw.ge(bo.getStartInspectTime() != null, "r.inspect_time", bo.getStartInspectTime());
qw.le(bo.getEndInspectTime() != null, "r.inspect_time", bo.getEndInspectTime());
qw.eq("r.del_flag", 0);

View File

@@ -82,7 +82,7 @@ public class EqpEquipmentPartServiceImpl implements IEqpEquipmentPartService {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<EqpEquipmentPart> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getInspectPart()), EqpEquipmentPart::getInspectPart, bo.getInspectPart());
lqw.eq(StringUtils.isNotBlank(bo.getProductionLine()), EqpEquipmentPart::getProductionLine, bo.getProductionLine());
lqw.eq(bo.getProductionLine() != null, EqpEquipmentPart::getProductionLine, bo.getProductionLine());
lqw.eq(StringUtils.isNotBlank(bo.getLineSection()), EqpEquipmentPart::getLineSection, bo.getLineSection());
lqw.like(StringUtils.isNotBlank(bo.getResponsiblePerson()), EqpEquipmentPart::getResponsiblePerson, bo.getResponsiblePerson());
return lqw;

View File

@@ -70,6 +70,10 @@ public class QcCertificate extends BaseEntity {
* 质保证明说明(注释)
*/
private String note;
/**
* 证书类型(如:出厂合格证、检测报告、质保书等)
*/
private String certificateType;
/**
* 备注
*/

View File

@@ -37,6 +37,10 @@ public class QcCertificateItem extends BaseEntity {
* 钢卷号
*/
private String coilNo;
/**
* 原料卷号
*/
private String rawCoilNo;
/**
* 炉号
*/
@@ -81,10 +85,46 @@ public class QcCertificateItem extends BaseEntity {
* Als
*/
private BigDecimal als;
/**
* 铝(%)
*/
private BigDecimal al;
/**
* 钛(%)
*/
private BigDecimal ti;
/**
* 铬(%)
*/
private BigDecimal cr;
/**
* 镍(%)
*/
private BigDecimal ni;
/**
* 铜(%)
*/
private BigDecimal cu;
/**
* 氮(%)
*/
private BigDecimal n;
/**
* 铁(%)
*/
private BigDecimal fe;
/**
* 硼(%)
*/
private BigDecimal b;
/**
* 拉伸试验-屈服强度(MPa)
*/
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -109,6 +149,18 @@ public class QcCertificateItem extends BaseEntity {
* 表面结构
*/
private String surfaceStructure;
/**
* 表面处理
*/
private String surfaceTreatment;
/**
* 镀层表面结构
*/
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
private BigDecimal coatingMass;
/**
* 边缘状态
*/
@@ -117,6 +169,10 @@ public class QcCertificateItem extends BaseEntity {
* 备注
*/
private String remark;
/**
* 调质度
*/
private String temperDegree;
/**
* 删除标志0=正常1=已删除)
*/

View File

@@ -65,6 +65,38 @@ public class QcChemicalItem extends BaseEntity {
* 酸溶铝(%)
*/
private BigDecimal als;
/**
* 铝(%)
*/
private BigDecimal al;
/**
* 钛(%)
*/
private BigDecimal ti;
/**
* 铬(%)
*/
private BigDecimal cr;
/**
* 镍(%)
*/
private BigDecimal ni;
/**
* 铜(%)
*/
private BigDecimal cu;
/**
* 氮(%)
*/
private BigDecimal n;
/**
* 铁(%)
*/
private BigDecimal fe;
/**
* 硼(%)
*/
private BigDecimal b;
/**
* 备注
*/

View File

@@ -94,6 +94,10 @@ public class QcInspectionTask extends BaseEntity {
* 附件路径(多个用英文逗号分隔)
*/
private String attachmentFiles;
/**
* 厂家卷号集合,多个使用英文逗号分隔
*/
private String supplierCoilNos;
/**
* 删除标志0=正常1=已删除)

View File

@@ -41,6 +41,10 @@ public class QcPhysicalItem extends BaseEntity {
* 拉伸试验-屈服强度(MPa)
*/
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -65,6 +69,14 @@ public class QcPhysicalItem extends BaseEntity {
* 表面结构
*/
private String surfaceStructure;
/**
* 镀层表面结构
*/
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
private BigDecimal coatingMass;
/**
* 边缘状态
*/

View File

@@ -82,6 +82,11 @@ public class QcCertificateBo extends BaseEntity {
*/
private String note;
/**
* 证书类型(如:出厂合格证、检测报告、质保书等)
*/
private String certificateType;
/**
* 备注
*/

View File

@@ -38,6 +38,11 @@ public class QcCertificateItemBo extends BaseEntity {
*/
private String coilNo;
/**
* 原料卷号
*/
private String rawCoilNo;
/**
* 炉号
*/
@@ -93,11 +98,56 @@ public class QcCertificateItemBo extends BaseEntity {
*/
private BigDecimal als;
/**
* 铝(%)
*/
private BigDecimal al;
/**
* 钛(%)
*/
private BigDecimal ti;
/**
* 铬(%)
*/
private BigDecimal cr;
/**
* 镍(%)
*/
private BigDecimal ni;
/**
* 铜(%)
*/
private BigDecimal cu;
/**
* 氮(%)
*/
private BigDecimal n;
/**
* 铁(%)
*/
private BigDecimal fe;
/**
* 硼(%)
*/
private BigDecimal b;
/**
* 拉伸试验-屈服强度(MPa)
*/
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -128,6 +178,21 @@ public class QcCertificateItemBo extends BaseEntity {
*/
private String surfaceStructure;
/**
* 表面处理
*/
private String surfaceTreatment;
/**
* 镀层表面结构
*/
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
private BigDecimal coatingMass;
/**
* 边缘状态
*/
@@ -138,5 +203,10 @@ public class QcCertificateItemBo extends BaseEntity {
*/
private String remark;
/**
* 调质度
*/
private String temperDegree;
}

View File

@@ -73,6 +73,46 @@ public class QcChemicalItemBo extends BaseEntity {
*/
private BigDecimal als;
/**
* 铝(%)
*/
private BigDecimal al;
/**
* 钛(%)
*/
private BigDecimal ti;
/**
* 铬(%)
*/
private BigDecimal cr;
/**
* 镍(%)
*/
private BigDecimal ni;
/**
* 铜(%)
*/
private BigDecimal cu;
/**
* 氮(%)
*/
private BigDecimal n;
/**
* 铁(%)
*/
private BigDecimal fe;
/**
* 硼(%)
*/
private BigDecimal b;
/**
* 备注
*/

View File

@@ -108,4 +108,9 @@ public class QcInspectionTaskBo extends BaseEntity {
* 附件路径(多个用英文逗号分隔)
*/
private String attachmentFiles;
/**
* 厂家卷号集合,多个使用英文逗号分隔
*/
private String supplierCoilNos;
}

View File

@@ -43,6 +43,11 @@ public class QcPhysicalItemBo extends BaseEntity {
*/
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -73,6 +78,16 @@ public class QcPhysicalItemBo extends BaseEntity {
*/
private String surfaceStructure;
/**
* 镀层表面结构
*/
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
private BigDecimal coatingMass;
/**
* 边缘状态
*/

View File

@@ -43,6 +43,12 @@ public class QcCertificateItemVo {
@ExcelProperty(value = "钢卷号")
private String coilNo;
/**
* 原料卷号
*/
@ExcelProperty(value = "原料卷号")
private String rawCoilNo;
/**
* 炉号
*/
@@ -109,12 +115,66 @@ public class QcCertificateItemVo {
@ExcelProperty(value = "Als")
private BigDecimal als;
/**
* 铝(%)
*/
@ExcelProperty(value = "铝(%)")
private BigDecimal al;
/**
* 钛(%)
*/
@ExcelProperty(value = "钛(%)")
private BigDecimal ti;
/**
* 铬(%)
*/
@ExcelProperty(value = "铬(%)")
private BigDecimal cr;
/**
* 镍(%)
*/
@ExcelProperty(value = "镍(%)")
private BigDecimal ni;
/**
* 铜(%)
*/
@ExcelProperty(value = "铜(%)")
private BigDecimal cu;
/**
* 氮(%)
*/
@ExcelProperty(value = "氮(%)")
private BigDecimal n;
/**
* 铁(%)
*/
@ExcelProperty(value = "铁(%)")
private BigDecimal fe;
/**
* 硼(%)
*/
@ExcelProperty(value = "硼(%)")
private BigDecimal b;
/**
* 拉伸试验-屈服强度(MPa)
*/
@ExcelProperty(value = "拉伸试验-屈服强度(MPa)")
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
@ExcelProperty(value = "规定塑性延伸强度(MPa)")
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -151,6 +211,24 @@ public class QcCertificateItemVo {
@ExcelProperty(value = "表面结构")
private String surfaceStructure;
/**
* 表面处理
*/
@ExcelProperty(value = "表面处理")
private String surfaceTreatment;
/**
* 镀层表面结构
*/
@ExcelProperty(value = "镀层表面结构")
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
@ExcelProperty(value = "镀层重量 COATING MASS(g/m²)")
private BigDecimal coatingMass;
/**
* 边缘状态
*/
@@ -163,5 +241,11 @@ public class QcCertificateItemVo {
@ExcelProperty(value = "备注")
private String remark;
/**
* 调质度
*/
@ExcelProperty(value = "调质度")
private String temperDegree;
}

View File

@@ -100,5 +100,11 @@ public class QcCertificateVo {
@ExcelProperty(value = "备注")
private String remark;
/**
* 证书类型(如:出厂合格证、检测报告、质保书等)
*/
@ExcelProperty(value = "证书类型")
private String certificateType;
}

View File

@@ -86,6 +86,54 @@ public class QcChemicalItemVo {
@ExcelProperty(value = "酸溶铝(%)")
private BigDecimal als;
/**
* 铝(%)
*/
@ExcelProperty(value = "铝(%)")
private BigDecimal al;
/**
* 钛(%)
*/
@ExcelProperty(value = "钛(%)")
private BigDecimal ti;
/**
* 铬(%)
*/
@ExcelProperty(value = "铬(%)")
private BigDecimal cr;
/**
* 镍(%)
*/
@ExcelProperty(value = "镍(%)")
private BigDecimal ni;
/**
* 铜(%)
*/
@ExcelProperty(value = "铜(%)")
private BigDecimal cu;
/**
* 氮(%)
*/
@ExcelProperty(value = "氮(%)")
private BigDecimal n;
/**
* 铁(%)
*/
@ExcelProperty(value = "铁(%)")
private BigDecimal fe;
/**
* 硼(%)
*/
@ExcelProperty(value = "硼(%)")
private BigDecimal b;
/**
* 备注
*/

View File

@@ -134,6 +134,11 @@ public class QcInspectionTaskVo {
*/
private String attachmentFiles;
/**
* 厂家卷号集合,多个使用英文逗号分隔
*/
private String supplierCoilNos;
private List<WmsMaterialCoilVo> coilList;

View File

@@ -51,6 +51,12 @@ public class QcPhysicalItemVo {
@ExcelProperty(value = "拉伸试验-屈服强度(MPa)")
private BigDecimal yieldStrength;
/**
* 规定塑性延伸强度(MPa)
*/
@ExcelProperty(value = "规定塑性延伸强度(MPa)")
private BigDecimal plasticExtensionStrength;
/**
* 拉伸试验-抗拉强度(MPa)
*/
@@ -87,6 +93,18 @@ public class QcPhysicalItemVo {
@ExcelProperty(value = "表面结构")
private String surfaceStructure;
/**
* 镀层表面结构
*/
@ExcelProperty(value = "镀层表面结构")
private String coatingSurfaceStructure;
/**
* 镀层重量 COATING MASS(g/m²)
*/
@ExcelProperty(value = "镀层重量 COATING MASS(g/m²)")
private BigDecimal coatingMass;
/**
* 边缘状态
*/

View File

@@ -64,6 +64,7 @@ public class QcCertificateItemServiceImpl implements IQcCertificateItemService {
lqw.eq(bo.getCertificateId() != null, QcCertificateItem::getCertificateId, bo.getCertificateId());
lqw.eq(bo.getCoilId() != null, QcCertificateItem::getCoilId, bo.getCoilId());
lqw.eq(StringUtils.isNotBlank(bo.getCoilNo()), QcCertificateItem::getCoilNo, bo.getCoilNo());
lqw.eq(StringUtils.isNotBlank(bo.getRawCoilNo()), QcCertificateItem::getRawCoilNo, bo.getRawCoilNo());
lqw.eq(StringUtils.isNotBlank(bo.getHeatNo()), QcCertificateItem::getHeatNo, bo.getHeatNo());
lqw.eq(StringUtils.isNotBlank(bo.getMaterialType()), QcCertificateItem::getMaterialType, bo.getMaterialType());
lqw.eq(StringUtils.isNotBlank(bo.getSize()), QcCertificateItem::getSize, bo.getSize());
@@ -75,14 +76,27 @@ public class QcCertificateItemServiceImpl implements IQcCertificateItemService {
lqw.eq(bo.getP() != null, QcCertificateItem::getP, bo.getP());
lqw.eq(bo.getS() != null, QcCertificateItem::getS, bo.getS());
lqw.eq(bo.getAls() != null, QcCertificateItem::getAls, bo.getAls());
lqw.eq(bo.getAl() != null, QcCertificateItem::getAl, bo.getAl());
lqw.eq(bo.getTi() != null, QcCertificateItem::getTi, bo.getTi());
lqw.eq(bo.getCr() != null, QcCertificateItem::getCr, bo.getCr());
lqw.eq(bo.getNi() != null, QcCertificateItem::getNi, bo.getNi());
lqw.eq(bo.getCu() != null, QcCertificateItem::getCu, bo.getCu());
lqw.eq(bo.getN() != null, QcCertificateItem::getN, bo.getN());
lqw.eq(bo.getFe() != null, QcCertificateItem::getFe, bo.getFe());
lqw.eq(bo.getB() != null, QcCertificateItem::getB, bo.getB());
lqw.eq(bo.getYieldStrength() != null, QcCertificateItem::getYieldStrength, bo.getYieldStrength());
lqw.eq(bo.getPlasticExtensionStrength() != null, QcCertificateItem::getPlasticExtensionStrength, bo.getPlasticExtensionStrength());
lqw.eq(bo.getTensileStrength() != null, QcCertificateItem::getTensileStrength, bo.getTensileStrength());
lqw.eq(bo.getElongation() != null, QcCertificateItem::getElongation, bo.getElongation());
lqw.eq(bo.getHardness() != null, QcCertificateItem::getHardness, bo.getHardness());
lqw.eq(StringUtils.isNotBlank(bo.getBendingTest()), QcCertificateItem::getBendingTest, bo.getBendingTest());
lqw.eq(StringUtils.isNotBlank(bo.getSurfaceQuality()), QcCertificateItem::getSurfaceQuality, bo.getSurfaceQuality());
lqw.eq(StringUtils.isNotBlank(bo.getSurfaceStructure()), QcCertificateItem::getSurfaceStructure, bo.getSurfaceStructure());
lqw.eq(StringUtils.isNotBlank(bo.getSurfaceTreatment()), QcCertificateItem::getSurfaceTreatment, bo.getSurfaceTreatment());
lqw.eq(StringUtils.isNotBlank(bo.getCoatingSurfaceStructure()), QcCertificateItem::getCoatingSurfaceStructure, bo.getCoatingSurfaceStructure());
lqw.eq(bo.getCoatingMass() != null, QcCertificateItem::getCoatingMass, bo.getCoatingMass());
lqw.eq(StringUtils.isNotBlank(bo.getEdgeStatus()), QcCertificateItem::getEdgeStatus, bo.getEdgeStatus());
lqw.eq(StringUtils.isNotBlank(bo.getTemperDegree()), QcCertificateItem::getTemperDegree, bo.getTemperDegree());
return lqw;
}

View File

@@ -75,6 +75,7 @@ public class QcCertificateServiceImpl implements IQcCertificateService {
lqw.le(bo.getApproveTimeEnd() != null, QcCertificate::getApproveTime, bo.getApproveTimeEnd());
lqw.eq(StringUtils.isNotBlank(bo.getNote()), QcCertificate::getNote, bo.getNote());
lqw.eq(StringUtils.isNotBlank(bo.getCertificateType()), QcCertificate::getCertificateType, bo.getCertificateType());
return lqw;
}

View File

@@ -79,6 +79,14 @@ public class QcChemicalItemServiceImpl implements IQcChemicalItemService {
lqw.eq(bo.getP() != null, QcChemicalItem::getP, bo.getP());
lqw.eq(bo.getS() != null, QcChemicalItem::getS, bo.getS());
lqw.eq(bo.getAls() != null, QcChemicalItem::getAls, bo.getAls());
lqw.eq(bo.getAl() != null, QcChemicalItem::getAl, bo.getAl());
lqw.eq(bo.getTi() != null, QcChemicalItem::getTi, bo.getTi());
lqw.eq(bo.getCr() != null, QcChemicalItem::getCr, bo.getCr());
lqw.eq(bo.getNi() != null, QcChemicalItem::getNi, bo.getNi());
lqw.eq(bo.getCu() != null, QcChemicalItem::getCu, bo.getCu());
lqw.eq(bo.getN() != null, QcChemicalItem::getN, bo.getN());
lqw.eq(bo.getFe() != null, QcChemicalItem::getFe, bo.getFe());
lqw.eq(bo.getB() != null, QcChemicalItem::getB, bo.getB());
// 根据创建时间倒叙
lqw.orderByDesc(QcChemicalItem::getCreateTime);
return lqw;

View File

@@ -136,6 +136,7 @@ public class QcInspectionTaskServiceImpl implements IQcInspectionTaskService {
lqw.eq(StringUtils.isNotBlank(bo.getResult()), QcInspectionTask::getResult, bo.getResult());
lqw.like(StringUtils.isNotBlank(bo.getCoilIds()), QcInspectionTask::getCoilIds, bo.getCoilIds());
lqw.like(StringUtils.isNotBlank(bo.getEnterCoilNos()), QcInspectionTask::getEnterCoilNos, bo.getEnterCoilNos());
lqw.like(StringUtils.isNotBlank(bo.getSupplierCoilNos()), QcInspectionTask::getSupplierCoilNos, bo.getSupplierCoilNos());
return lqw;
}

View File

@@ -73,12 +73,15 @@ public class QcPhysicalItemServiceImpl implements IQcPhysicalItemService {
lqw.eq(bo.getCoilId() != null, QcPhysicalItem::getCoilId, bo.getCoilId());
lqw.eq(StringUtils.isNotBlank(bo.getCoilNo()), QcPhysicalItem::getCoilNo, bo.getCoilNo());
lqw.eq(bo.getYieldStrength() != null, QcPhysicalItem::getYieldStrength, bo.getYieldStrength());
lqw.eq(bo.getPlasticExtensionStrength() != null, QcPhysicalItem::getPlasticExtensionStrength, bo.getPlasticExtensionStrength());
lqw.eq(bo.getTensileStrength() != null, QcPhysicalItem::getTensileStrength, bo.getTensileStrength());
lqw.eq(bo.getElongation() != null, QcPhysicalItem::getElongation, bo.getElongation());
lqw.eq(bo.getHardness() != null, QcPhysicalItem::getHardness, bo.getHardness());
lqw.eq(StringUtils.isNotBlank(bo.getBendingTest()), QcPhysicalItem::getBendingTest, bo.getBendingTest());
lqw.eq(StringUtils.isNotBlank(bo.getSurfaceQuality()), QcPhysicalItem::getSurfaceQuality, bo.getSurfaceQuality());
lqw.eq(StringUtils.isNotBlank(bo.getSurfaceStructure()), QcPhysicalItem::getSurfaceStructure, bo.getSurfaceStructure());
lqw.eq(StringUtils.isNotBlank(bo.getCoatingSurfaceStructure()), QcPhysicalItem::getCoatingSurfaceStructure, bo.getCoatingSurfaceStructure());
lqw.eq(bo.getCoatingMass() != null, QcPhysicalItem::getCoatingMass, bo.getCoatingMass());
lqw.eq(StringUtils.isNotBlank(bo.getEdgeStatus()), QcPhysicalItem::getEdgeStatus, bo.getEdgeStatus());
// 根据创建时间倒叙
lqw.orderByDesc(QcPhysicalItem::getCreateTime);

View File

@@ -26,17 +26,19 @@ public class MesRollGrindController extends BaseController {
private final IMesRollGrindService iMesRollGrindService;
/** 查询磨削记录列表(不传 rollId 时返回全部,支持时间范围产线筛选) */
/** 查询磨削记录列表(不传 rollId 时返回全部,支持时间范围产线、班组、轧辊类型筛选) */
@GetMapping("/list")
public R<List<MesRollGrindVo>> list(
@RequestParam(required = false) Long rollId,
@RequestParam(required = false) Long lineId,
@RequestParam(required = false) String beginTime,
@RequestParam(required = false) String endTime) {
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String team,
@RequestParam(required = false) String rollType) {
if (rollId != null) {
return R.ok(iMesRollGrindService.listByRoll(rollId));
}
return R.ok(iMesRollGrindService.listByQuery(null, lineId, beginTime, endTime));
return R.ok(iMesRollGrindService.listByQuery(null, lineId, beginTime, endTime, team, rollType));
}
/** 按年份查询月度汇总 */

View File

@@ -82,6 +82,9 @@ public class MesRollGrind extends BaseEntity {
/** 操作者 */
private String operator;
/** 备注 */
private String remark;
@TableLogic
private Integer delFlag;
}

View File

@@ -26,6 +26,9 @@ public class MesRollInfo extends BaseEntity {
/** 产线ID */
private Long lineId;
/** 机架 */
private String frame;
/** 轧辊编号 */
private String rollNo;
@@ -71,6 +74,9 @@ public class MesRollInfo extends BaseEntity {
/** 厂家 */
private String manufacturer;
/** 备注 */
private String remark;
@TableLogic
private Integer delFlag;
}

View File

@@ -37,4 +37,5 @@ public class MesRollGrindBo extends BaseEntity {
private String flawResult;
private BigDecimal hardness;
private String operator;
private String remark;
}

View File

@@ -25,6 +25,9 @@ public class MesRollInfoBo extends BaseEntity {
/** 产线ID查询过滤 / 新增归属) */
private Long lineId;
/** 机架 */
private String frame;
@NotBlank(message = "轧辊编号不能为空", groups = {AddGroup.class, EditGroup.class})
private String rollNo;

View File

@@ -20,6 +20,7 @@ public class MesRollGrindVo {
private Date grindTime;
private String team;
private String rollType;
private BigDecimal diaBefore;
private BigDecimal diaAfter;
private BigDecimal grindAmount;

View File

@@ -25,6 +25,9 @@ public class MesRollInfoVo {
@ExcelProperty("产线名称")
private String lineName;
@ExcelProperty("机架")
private String frame;
@ExcelProperty("轧辊编号")
private String rollNo;

View File

@@ -20,7 +20,9 @@ public interface MesRollGrindMapper extends BaseMapperPlus<MesRollGrindMapper, M
List<MesRollGrindVo> selectList(@Param("rollId") Long rollId,
@Param("lineId") Long lineId,
@Param("beginTime") String beginTime,
@Param("endTime") String endTime);
@Param("endTime") String endTime,
@Param("team") String team,
@Param("rollType") String rollType);
/** 按年份统计每月磨削量 { month, grindCount, totalGrindAmount } */
List<Map<String, Object>> selectMonthlyStats(@Param("rollId") Long rollId, @Param("year") int year);

View File

@@ -15,7 +15,7 @@ public interface IMesRollGrindService {
List<MesRollGrindVo> listByRoll(Long rollId);
/** 通用查询(所有参数可选) */
List<MesRollGrindVo> listByQuery(Long rollId, Long lineId, String beginTime, String endTime);
List<MesRollGrindVo> listByQuery(Long rollId, Long lineId, String beginTime, String endTime, String team, String rollType);
/** 新增磨削记录,同步更新轧辊当前直径和磨削次数 */
Long addGrind(MesRollGrindBo bo);

View File

@@ -35,8 +35,8 @@ public class MesRollGrindServiceImpl implements IMesRollGrindService {
}
@Override
public List<MesRollGrindVo> listByQuery(Long rollId, Long lineId, String beginTime, String endTime) {
return baseMapper.selectList(rollId, lineId, beginTime, endTime);
public List<MesRollGrindVo> listByQuery(Long rollId, Long lineId, String beginTime, String endTime, String team, String rollType) {
return baseMapper.selectList(rollId, lineId, beginTime, endTime, team, rollType);
}
@Override

View File

@@ -77,6 +77,7 @@ public class MesRollInfoServiceImpl implements IMesRollInfoService {
lqw.like(StringUtils.isNotBlank(bo.getRollNo()), MesRollInfo::getRollNo, bo.getRollNo());
lqw.eq(StringUtils.isNotBlank(bo.getRollType()), MesRollInfo::getRollType, bo.getRollType());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), MesRollInfo::getStatus, bo.getStatus());
lqw.like(StringUtils.isNotBlank(bo.getFrame()), MesRollInfo::getFrame, bo.getFrame());
lqw.like(StringUtils.isNotBlank(bo.getManufacturer()), MesRollInfo::getManufacturer, bo.getManufacturer());
lqw.orderByAsc(MesRollInfo::getRollType, MesRollInfo::getRollId);
return lqw;

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.mes.eqp.mapper.EqpEquipmentInspectionApprovalMapper">
<resultMap type="com.klp.mes.eqp.domain.EqpEquipmentInspectionApproval" id="EqpEquipmentInspectionApprovalResult">
<result property="approvalId" column="approval_id"/>
<result property="productionLine" column="production_line"/>
<result property="insStartTime" column="ins_start_time"/>
<result property="insEndTime" column="ins_end_time"/>
<result property="applyUser" column="apply_user"/>
<result property="applyTime" column="apply_time"/>
<result property="approvalStatus" column="approval_status"/>
<result property="approvalUser" column="approval_user"/>
<result property="approvalTime" column="approval_time"/>
<result property="approvalOpinion" column="approval_opinion"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
</mapper>

View File

@@ -9,6 +9,7 @@
<result property="certificateId" column="certificate_id"/>
<result property="coilId" column="coil_id"/>
<result property="coilNo" column="coil_no"/>
<result property="rawCoilNo" column="raw_coil_no"/>
<result property="heatNo" column="heat_no"/>
<result property="materialType" column="material_type"/>
<result property="size" column="size"/>
@@ -20,15 +21,28 @@
<result property="p" column="p"/>
<result property="s" column="s"/>
<result property="als" column="als"/>
<result property="al" column="al"/>
<result property="ti" column="ti"/>
<result property="cr" column="cr"/>
<result property="ni" column="ni"/>
<result property="cu" column="cu"/>
<result property="n" column="n"/>
<result property="fe" column="fe"/>
<result property="b" column="b"/>
<result property="yieldStrength" column="yield_strength"/>
<result property="plasticExtensionStrength" column="plastic_extension_strength"/>
<result property="tensileStrength" column="tensile_strength"/>
<result property="elongation" column="elongation"/>
<result property="hardness" column="hardness"/>
<result property="bendingTest" column="bending_test"/>
<result property="surfaceQuality" column="surface_quality"/>
<result property="surfaceStructure" column="surface_structure"/>
<result property="surfaceTreatment" column="surface_treatment"/>
<result property="coatingSurfaceStructure" column="coating_surface_structure"/>
<result property="coatingMass" column="coating_mass"/>
<result property="edgeStatus" column="edge_status"/>
<result property="remark" column="remark"/>
<result property="temperDegree" column="temper_degree"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>

View File

@@ -18,6 +18,7 @@
<result property="approveTime" column="approve_time"/>
<result property="note" column="note"/>
<result property="remark" column="remark"/>
<result property="certificateType" column="certificate_type"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>

View File

@@ -16,6 +16,14 @@
<result property="p" column="p"/>
<result property="s" column="s"/>
<result property="als" column="als"/>
<result property="al" column="al"/>
<result property="ti" column="ti"/>
<result property="cr" column="cr"/>
<result property="ni" column="ni"/>
<result property="cu" column="cu"/>
<result property="n" column="n"/>
<result property="fe" column="fe"/>
<result property="b" column="b"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>

View File

@@ -23,6 +23,7 @@
<result property="attachmentFiles" column="attachment_files"/>
<result property="coilIds" column="coil_ids"/>
<result property="enterCoilNos" column="enter_coil_nos"/>
<result property="supplierCoilNos" column="supplier_coil_nos"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>

View File

@@ -10,12 +10,15 @@
<result property="coilId" column="coil_id"/>
<result property="coilNo" column="coil_no"/>
<result property="yieldStrength" column="yield_strength"/>
<result property="plasticExtensionStrength" column="plastic_extension_strength"/>
<result property="tensileStrength" column="tensile_strength"/>
<result property="elongation" column="elongation"/>
<result property="hardness" column="hardness"/>
<result property="bendingTest" column="bending_test"/>
<result property="surfaceQuality" column="surface_quality"/>
<result property="surfaceStructure" column="surface_structure"/>
<result property="coatingSurfaceStructure" column="coating_surface_structure"/>
<result property="coatingMass" column="coating_mass"/>
<result property="edgeStatus" column="edge_status"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>

View File

@@ -10,22 +10,26 @@
operator, remark, create_time
FROM mes_roll_grind
WHERE del_flag = 0 AND roll_id = #{rollId}
ORDER BY grind_time ASC, grind_id ASC
ORDER BY grind_time Desc
</select>
<select id="selectList" resultType="com.klp.mes.roll.domain.vo.MesRollGrindVo">
SELECT grind_id, roll_id, roll_no, grind_time, team,
dia_before, dia_after, grind_amount, roll_shape,
flaw_result,
CASE WHEN hardness = '未倒角' THEN 0 ELSE CAST(hardness AS DECIMAL(10,1)) END AS hardness,
operator, remark, create_time
FROM mes_roll_grind
WHERE del_flag = 0
<if test="rollId != null">AND roll_id = #{rollId}</if>
<if test="lineId != null">AND line_id = #{lineId}</if>
<if test="beginTime != null and beginTime != ''">AND grind_time &gt;= #{beginTime}</if>
<if test="endTime != null and endTime != ''">AND grind_time &lt;= #{endTime}</if>
ORDER BY grind_time ASC, grind_id ASC
SELECT g.grind_id, g.roll_id, g.roll_no, g.grind_time, g.team,
g.dia_before, g.dia_after, g.grind_amount, g.roll_shape,
g.flaw_result,
CASE WHEN g.hardness = '未倒角' THEN 0 ELSE CAST(g.hardness AS DECIMAL(10,1)) END AS hardness,
g.operator, g.remark, g.create_time,
ri.roll_type
FROM mes_roll_grind g
LEFT JOIN mes_roll_info ri ON g.roll_id = ri.roll_id
WHERE g.del_flag = 0
<if test="rollId != null">AND g.roll_id = #{rollId}</if>
<if test="lineId != null">AND g.line_id = #{lineId}</if>
<if test="beginTime != null and beginTime != ''">AND g.grind_time &gt;= #{beginTime}</if>
<if test="endTime != null and endTime != ''">AND g.grind_time &lt;= #{endTime}</if>
<if test="team != null and team != ''">AND g.team = #{team}</if>
<if test="rollType != null and rollType != ''">AND ri.roll_type = #{rollType}</if>
ORDER BY g.grind_time DESC
</select>
<select id="selectMonthlyStats" resultType="map">

View File

@@ -73,6 +73,7 @@
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"three": "^0.160.1",
"vditor": "^3.11.1",
"video.js": "^8.23.3",
"vue": "2.6.12",

View File

@@ -26,6 +26,15 @@ export function addPlanDetail(data) {
})
}
// 批量新增排产单明细
export function addPlanDetailBatch(data) {
return request({
url: '/aps/planDetail/batch',
method: 'post',
data: data
})
}
// 修改排产单明细
export function updatePlanDetail(data) {
return request({

View File

@@ -0,0 +1,19 @@
import request from '@/utils/request'
const BASE = '/wms/materialCoil'
export function getCoilHoardingStats(data) {
return request({
url: BASE + '/hoardingStatistics',
method: 'post',
data: data
})
}
export function listCoilHoardingDetail(query) {
return request({
url: BASE + '/listWithQrcode',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,39 @@
import request from '@/utils/request'
export function listEquipmentInspectionApproval(query) {
return request({
url: '/eqp/equipmentInspectionApproval/list',
method: 'get',
params: query
})
}
export function getEquipmentInspectionApproval(approvalId) {
return request({
url: '/eqp/equipmentInspectionApproval/' + approvalId,
method: 'get'
})
}
export function addEquipmentInspectionApproval(data) {
return request({
url: '/eqp/equipmentInspectionApproval',
method: 'post',
data: data
})
}
export function updateEquipmentInspectionApproval(data) {
return request({
url: '/eqp/equipmentInspectionApproval',
method: 'put',
data: data
})
}
export function delEquipmentInspectionApproval(approvalId) {
return request({
url: '/eqp/equipmentInspectionApproval/' + approvalId,
method: 'delete'
})
}

View File

@@ -45,12 +45,14 @@ export function delRecords(id) {
}
// 同步考勤记录
export function syncRecords(starttime) {
export function syncRecords({ starttime, endtime }) {
return attendanceRequest({
url: '/sync_attendance',
method: 'post',
timeout: 60000,
data: {
starttime
starttime,
endtime
}
})
}

View File

@@ -38,8 +38,9 @@ export function updateAttendanceSchedule(data) {
// 删除排班记录(支持批量删除传递csv格式字符串如1,2,3)
export function delAttendanceSchedule(ids) {
return request({
url: '/wms/attendanceSchedule/' + ids,
method: 'delete'
url: '/wms/attendanceSchedule/remove',
method: 'delete',
data: ids,
})
}

View File

@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询排班模板列表
export function listAttendanceTemplate(query) {
return request({
url: '/wms/attendanceTemplate/list',
method: 'get',
params: query
})
}
// 查询排班模板详细
export function getAttendanceTemplate(templateId) {
return request({
url: '/wms/attendanceTemplate/' + templateId,
method: 'get'
})
}
// 新增排班模板
export function addAttendanceTemplate(data) {
return request({
url: '/wms/attendanceTemplate',
method: 'post',
data: data
})
}
// 修改排班模板
export function updateAttendanceTemplate(data) {
return request({
url: '/wms/attendanceTemplate',
method: 'put',
data: data
})
}
// 删除排班模板
export function delAttendanceTemplate(templateId) {
return request({
url: '/wms/attendanceTemplate/' + templateId,
method: 'delete'
})
}

View File

@@ -488,4 +488,12 @@ export function listLightCoil(data) {
timeout: 600000,
data: data
})
}
// 获取可导出的列元数据
export function getExportColumns() {
return request({
url: '/wms/materialCoil/exportColumns',
method: 'get',
})
}

View File

@@ -61,6 +61,14 @@ export function listBoundCoil(query) {
})
}
export function getBoundCoilStatisticsList(query) {
return request({
url: '/wms/deliveryWaybillDetail/statistics',
method: 'get',
params: query
})
}
// 按销售员查询订单明细的卷
export function listDeliveryWaybillDetailBySaleman(principal) {
return request({

View File

@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询钢卷通用维度告警(长度/厚度/宽度)列表
export function listMaterialWarning(query) {
return request({
url: '/wms/materialWarning/list',
method: 'get',
params: query
})
}
// 查询钢卷通用维度告警(长度/厚度/宽度)详细
export function getMaterialWarning(warningId) {
return request({
url: '/wms/materialWarning/' + warningId,
method: 'get'
})
}
// 新增钢卷通用维度告警(长度/厚度/宽度)
export function addMaterialWarning(data) {
return request({
url: '/wms/materialWarning',
method: 'post',
data: data
})
}
// 修改钢卷通用维度告警(长度/厚度/宽度)
export function updateMaterialWarning(data) {
return request({
url: '/wms/materialWarning',
method: 'put',
data: data
})
}
// 删除钢卷通用维度告警(长度/厚度/宽度)
export function delMaterialWarning(warningId) {
return request({
url: '/wms/materialWarning/' + warningId,
method: 'delete'
})
}

View File

@@ -0,0 +1,19 @@
A. 在哪里可以下载阿里妈妈数黑体?
渠道一https://www.iconfont.cn/fonts/detail?cnid=a9fXc2HD9n7s
渠道二fonts.alibabagroup.com
B. 阿里阿里妈妈数黑体简介
基本信息阿里妈妈数黑体为中文简体字库收纳的中文字符包括但不限于GB2312共计6767个汉字英文大小写共52个常用标点符号共206个总计7025个字符。
设计说明:阿里妈妈数黑体字型饱满、体态中正,布白极具现代韵律,落笔厚实而简练;字里行间流露出先锋、前卫和时尚的视觉感受。适用于电商、广告、品牌形象、推广物料等场景。
C. 使用反馈、商业合作等问题请email
alimama-font@list.alibaba-inc.com
——
重要!安装前请先阅读此文档
请先按照下面流程安装文件夹里的字体包。
1. 打开字体文件夹根据不同系统需要选择OTF或TTF版本
2. 字体所包含只有一个字重(双击安装)。

View File

@@ -0,0 +1,15 @@
阿里妈妈数黑体法律声明
1. 阿里妈妈数黑体字体及包含该字体的字库软件,合称“阿里妈妈数黑体”。
2. 阿里妈妈数黑体的知识产权和相关权益归属于淘宝(中国)软件有限公司(以下简称“阿里妈妈”),受《中华人民共和国著作权法》及其他适用法律法规、国际公约、条约的保护。
3. 阿里妈妈授权个人、企业等用户在遵守本声明相关条款的前提下可以下载、安装和使用上述阿里妈妈字体该授权是免费的普通许可用户可基于合法目的用于商业用途或非商业用途但不得以任何违反本声明第4条及法律法规、政策、规章或公序良俗的方式使用。
4. 除本法律声明中明确授权之外阿里妈妈未授予用户关于阿里妈妈数黑体的其他权利。未经阿里妈妈授权任何人不得1对阿里妈妈数黑体进行仿制、转换、翻译、反编译、反向工程、拆分、破解或以其他方式试图从该字库软件获取源代码2删除、覆盖或修改阿里妈妈数黑体法律声明的全部或部分内容3将阿里妈妈数黑体进行单独定价出售、出租、出借、转让、转授权、或采取其他未经阿里妈妈授权的行为4) 发布任何使外界误认其与阿里妈妈或其关联公司存在合作、赞助或背书等商业关联的不实信息。
5. 阿里妈妈授予用户的上述授权不附带任何明示或暗示的保证,不对任何人因从非阿里妈妈官方渠道或指定渠道下载、安装或使用阿里妈妈数黑体而引发的任何直接或间接损失承担责任。
6. 本声明的解释、履行与争议解决适用中华人民共和国的法律。用户与阿里妈妈就阿里妈妈数黑体的使用若发生争议,双方应友好协商,若协商不成,任一方有权向浙江省杭州市有管辖权的人民法院提起诉讼。
反馈与咨询联系方alimama-font@list.alibaba-inc.com

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -1,11 +1,28 @@
<template>
<div class="template-manager">
<div class="left-panel">
<div class="custom-tabs">
<div
:class="['custom-tab', { active: activeTab === 'shared' }]"
@click="switchTab('shared')"
>共享模板</div>
<div
:class="['custom-tab', { active: activeTab === 'personal' }]"
@click="switchTab('personal')"
>自用模板</div>
</div>
<div class="panel-header">
<span class="panel-title">模板列表</span>
<el-button icon="el-icon-plus" size="mini" type="primary" @click="addTemplate">新增</el-button>
<div class="panel-header-actions">
<el-button icon="el-icon-plus" size="mini" type="primary" @click="addTemplate">新增</el-button>
<el-button icon="el-icon-download" size="mini" type="success" @click="exportCsv" :disabled="!currentTemplate.id">导出</el-button>
<el-button icon="el-icon-upload2" size="mini" type="info" @click="importCsv">导入</el-button>
</div>
</div>
<div class="template-list">
<div class="shared-toolbar" v-show="activeTab === 'shared'">
<el-input v-model="sharedQueryParams.templateName" placeholder="搜索模板名称" size="small" clearable prefix-icon="el-icon-search" @input="handleSearchTemplate" style="width: 200px;" />
</div>
<div class="template-list" v-loading="templateLoading">
<div
v-for="template in templateList"
:key="template.id"
@@ -25,7 +42,18 @@
<el-empty description="暂无模板" />
</div>
</div>
<div class="shared-pagination" v-show="activeTab === 'shared'">
<el-pagination
background
layout="prev, pager, next"
:current-page="sharedQueryParams.pageNum"
:page-size="sharedQueryParams.pageSize"
:total="sharedTotal"
@current-change="handleSharedPageChange"
/>
</div>
</div>
<input type="file" ref="csvInput" accept=".csv" style="display:none" @change="handleCsvImport" />
<div class="right-panel">
<div class="panel-header">
<span class="panel-title">员工配置</span>
@@ -62,6 +90,8 @@
</template>
<script>
import { listAttendanceTemplate, addAttendanceTemplate, updateAttendanceTemplate, delAttendanceTemplate } from '@/api/wms/attendanceTemplate'
export default {
name: 'AttendanceTemplateManager',
props: {
@@ -72,7 +102,16 @@ export default {
},
data() {
return {
templateList: [],
activeTab: 'shared',
sharedTemplateList: [],
sharedTemplateLoading: false,
sharedQueryParams: {
pageNum: 1,
pageSize: 20,
templateName: ''
},
sharedTotal: 0,
personalTemplateList: [],
currentTemplate: {
id: '',
name: '',
@@ -83,22 +122,202 @@ export default {
selectedEmployeeIds: [],
}
},
computed: {
templateList() {
return this.activeTab === 'shared' ? this.sharedTemplateList : this.personalTemplateList
},
templateLoading() {
return this.activeTab === 'shared' ? this.sharedTemplateLoading : false
}
},
mounted() {
this.loadTemplates()
},
methods: {
loadTemplates() {
try {
const templates = localStorage.getItem('attendanceTemplates')
this.templateList = templates ? JSON.parse(templates) : []
} catch (e) {
this.templateList = []
if (this.activeTab === 'shared') {
this.sharedTemplateLoading = true
const query = {
pageNum: this.sharedQueryParams.pageNum,
pageSize: this.sharedQueryParams.pageSize
}
if (this.sharedQueryParams.templateName) {
query.templateName = this.sharedQueryParams.templateName
}
listAttendanceTemplate(query).then(res => {
this.sharedTemplateList = (res.rows || []).map(row => ({
id: row.templateId,
name: row.templateName,
employeeIds: this.parseTemplateContent(row.templateContent),
employeeCount: this.parseTemplateContent(row.templateContent).length,
createTime: row.createTime
}))
this.sharedTotal = res.total || 0
}).finally(() => {
this.sharedTemplateLoading = false
})
} else {
try {
const templates = localStorage.getItem('attendanceTemplates')
this.personalTemplateList = templates ? JSON.parse(templates) : []
} catch (e) {
this.personalTemplateList = []
}
}
},
saveTemplates() {
localStorage.setItem('attendanceTemplates', JSON.stringify(this.templateList))
this.$emit('update')
parseTemplateContent(content) {
if (!content) return []
try {
const parsed = JSON.parse(content)
return Array.isArray(parsed) ? parsed : []
} catch (e) {
return content.split(',').filter(Boolean)
}
},
buildTemplateContent(employeeIds) {
return JSON.stringify(employeeIds)
},
handleSearchTemplate() {
this.sharedQueryParams.pageNum = 1
this.loadTemplates()
},
handleSharedPageChange(pageNum) {
this.sharedQueryParams.pageNum = pageNum
this.loadTemplates()
},
switchTab(tab) {
if (this.activeTab === tab) return
this.activeTab = tab
this.loadTemplates()
this.resetForm()
},
savePersonalTemplates() {
localStorage.setItem('attendanceTemplates', JSON.stringify(this.personalTemplateList))
},
exportCsv() {
if (!this.currentTemplate.id || !this.currentTemplate.employeeIds.length) {
this.$message.warning('当前模板没有员工可导出')
return
}
const empMap = {}
this.employeeList.forEach(emp => {
empMap[emp.key] = emp.label
})
let csvContent = '\uFEFF员工ID,员工姓名\n'
this.currentTemplate.employeeIds.forEach(id => {
const name = empMap[id] || id
csvContent += `${id},${name}\n`
})
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })
const link = document.createElement('a')
const url = URL.createObjectURL(blob)
link.setAttribute('href', url)
link.setAttribute('download', `${this.currentTemplate.name}.csv`)
link.style.visibility = 'hidden'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
},
importCsv() {
this.$refs.csvInput.click()
},
handleCsvImport(event) {
const file = event.target.files[0]
if (!file) return
const reader = new FileReader()
reader.onload = async (e) => {
const content = e.target.result
const lines = content.split('\n').filter(line => line.trim())
if (lines.length === 0) {
this.$message.warning('CSV文件内容为空')
event.target.value = ''
return
}
const header = lines[0].trim()
if (header !== '员工ID,员工姓名' && header !== '员工ID\t员工姓名') {
this.$message.warning('CSV文件格式不正确表头应为"员工ID,员工姓名"')
event.target.value = ''
return
}
const empKeySet = new Set()
const empLabelMap = {}
this.employeeList.forEach(emp => {
empKeySet.add(String(emp.key))
empLabelMap[emp.label] = emp.key
})
const matchedIds = []
const notFoundNames = []
const lines_data = lines.slice(1)
for (const line of lines_data) {
const trimmed = line.trim()
if (!trimmed) continue
const parts = trimmed.includes('\t') ? trimmed.split('\t') : trimmed.split(',')
const key = parts[0] ? parts[0].trim() : ''
const label = parts.length > 1 ? parts.slice(1).join(',').trim() : key
if (key && empKeySet.has(String(key))) {
matchedIds.push(key)
} else if (label && empLabelMap[label] !== undefined) {
matchedIds.push(empLabelMap[label])
} else {
notFoundNames.push(label || key)
}
}
if (matchedIds.length === 0) {
this.$message.warning('CSV文件中没有匹配到任何员工')
event.target.value = ''
return
}
const templateName = file.name.replace(/\.csv$/i, '')
if (this.activeTab === 'shared') {
await addAttendanceTemplate({
templateName: templateName,
templateContent: this.buildTemplateContent(matchedIds)
})
this.loadTemplates()
const newTemplate = this.sharedTemplateList.find(t => t.name === templateName)
if (newTemplate) {
this.currentTemplate = JSON.parse(JSON.stringify(newTemplate))
this.selectedEmployeeIds = [...newTemplate.employeeIds]
}
} else {
const templateData = {
id: Date.now().toString(),
name: templateName,
employeeIds: matchedIds,
employeeCount: matchedIds.length,
createTime: new Date().toLocaleString('zh-CN')
}
this.personalTemplateList.push(templateData)
this.savePersonalTemplates()
this.currentTemplate = JSON.parse(JSON.stringify(templateData))
this.selectedEmployeeIds = [...matchedIds]
}
this.$emit('update')
if (notFoundNames.length > 0) {
this.$message.warning(`成功导入${matchedIds.length}名员工,${notFoundNames.length}名未匹配:${notFoundNames.join('、')}`)
} else {
this.$message.success(`成功导入${matchedIds.length}名员工`)
}
}
reader.readAsText(file, 'UTF-8')
event.target.value = ''
},
addTemplate() {
@@ -118,20 +337,29 @@ export default {
},
deleteTemplate(template) {
this.$confirm('确定删除?', '提示', {
const confirmMsg = this.activeTab === 'shared'
? '删除后该模板所有人都无法使用,确定删除?'
: '确定删除?'
this.$confirm(confirmMsg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const index = this.templateList.findIndex(t => t.id === template.id)
if (index > -1) {
this.templateList.splice(index, 1)
this.saveTemplates()
this.$message.success('删除成功')
if (this.currentTemplate.id === template.id) {
this.resetForm()
}).then(async () => {
if (this.activeTab === 'shared') {
await delAttendanceTemplate(template.id)
} else {
const index = this.personalTemplateList.findIndex(t => t.id === template.id)
if (index > -1) {
this.personalTemplateList.splice(index, 1)
this.savePersonalTemplates()
}
}
this.$message.success('删除成功')
if (this.currentTemplate.id === template.id) {
this.resetForm()
}
this.loadTemplates()
this.$emit('update')
}).catch(() => {
this.$message.info('已取消')
})
@@ -142,32 +370,52 @@ export default {
this.selectedEmployeeIds = [...template.employeeIds]
},
saveTemplate() {
async saveTemplate() {
if (!this.currentTemplate.name.trim()) {
this.$message.warning('请输入模板名称')
return
}
const templateData = {
id: this.currentTemplate.id || Date.now().toString(),
name: this.currentTemplate.name.trim(),
employeeIds: [...this.selectedEmployeeIds],
employeeCount: this.selectedEmployeeIds.length,
createTime: this.currentTemplate.id ? this.currentTemplate.createTime : new Date().toLocaleString('zh-CN')
}
if (this.currentTemplate.id) {
const index = this.templateList.findIndex(t => t.id === this.currentTemplate.id)
if (index > -1) {
this.templateList[index] = templateData
if (this.activeTab === 'shared') {
const apiData = {
templateName: this.currentTemplate.name.trim(),
templateContent: this.buildTemplateContent(this.selectedEmployeeIds)
}
this.$message.success('修改成功')
} else {
this.templateList.push(templateData)
this.$message.success('新增成功')
}
this.saveTemplates()
if (this.currentTemplate.id) {
apiData.templateId = this.currentTemplate.id
await updateAttendanceTemplate(apiData)
this.$message.success('修改成功')
} else {
await addAttendanceTemplate(apiData)
this.$message.success('新增成功')
}
this.loadTemplates()
this.$emit('update')
} else {
const templateData = {
id: this.currentTemplate.id || Date.now().toString(),
name: this.currentTemplate.name.trim(),
employeeIds: [...this.selectedEmployeeIds],
employeeCount: this.selectedEmployeeIds.length,
createTime: this.currentTemplate.id ? this.currentTemplate.createTime : new Date().toLocaleString('zh-CN')
}
if (this.currentTemplate.id) {
const index = this.personalTemplateList.findIndex(t => t.id === this.currentTemplate.id)
if (index > -1) {
this.personalTemplateList[index] = templateData
}
this.$message.success('修改成功')
} else {
this.personalTemplateList.push(templateData)
this.$message.success('新增成功')
}
this.savePersonalTemplates()
this.$emit('update')
}
},
resetForm() {
@@ -220,6 +468,21 @@ export default {
color: #303133;
}
.panel-header-actions {
display: flex;
gap: 6px;
}
.shared-toolbar {
margin-bottom: 10px;
}
.shared-pagination {
display: flex;
justify-content: center;
padding: 10px 0 4px;
}
.template-list {
flex: 1;
overflow-y: auto;
@@ -315,4 +578,31 @@ export default {
padding-top: 10px;
border-top: 1px solid #e4e7ed;
}
.custom-tabs {
display: flex;
border-bottom: 1px solid #e4e7ed;
margin-bottom: 12px;
}
.custom-tab {
padding: 6px 14px;
font-size: 13px;
color: #909399;
cursor: pointer;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.2s, border-color 0.2s;
user-select: none;
}
.custom-tab:hover {
color: #606266;
}
.custom-tab.active {
color: #1890ff;
border-bottom-color: #1890ff;
font-weight: 500;
}
</style>

View File

@@ -11,6 +11,12 @@ export const defaultColumns = [
prop: 'currentCoilNo',
showOverflowTooltip: true
},
{
label: '镀铬卷号',
align: 'center',
prop: 'chromelCoilNo',
showOverflowTooltip: true
},
{
label: '存储位置',
align: 'center',
@@ -83,6 +89,12 @@ export const fullPageDefaultColumns = [
prop: 'currentCoilNo',
showOverflowTooltip: true
},
{
label: '镀铬卷号',
align: 'center',
prop: 'chromelCoilNo',
showOverflowTooltip: true
},
{
label: '存储位置',
align: 'center',
@@ -171,6 +183,7 @@ export const fullPageDefaultColumns = [
export const optionalColumns = [
{ label: '入场卷号', value: 'enterCoilNo' },
{ label: '当前卷号', value: 'currentCoilNo' },
{ label: '镀铬卷号', value: 'chromelCoilNo' },
{ label: '厂家钢卷号', value: 'supplierCoilNo' },
{ label: '逻辑库区', value: 'warehouseName' },
{ label: '实际库区', value: 'actualWarehouseName' },
@@ -187,7 +200,11 @@ export const optionalColumns = [
{ label: '厂家', value: 'manufacturer' },
{ label: '表面处理', value: 'surfaceTreatmentDesc' },
{ label: '镀层质量', value: 'zincLayer' },
{ label: '长度', value: 'length' },
{ label: '实测长度', value: 'actualLength' },
{ label: '理论长度', value: 'theoreticalLength' },
{ label: '实测厚度', value: 'actualThickness' },
{ label: '理论厚度', value: 'theoreticalThickness' },
{ label: '实测宽度', value: 'actualWidth' },
{ label: '毛重', value: 'grossWeight' },
{ label: '净重', value: 'netWeight' },
{ label: '创建时间', value: 'createTime' },

View File

@@ -79,6 +79,10 @@
canSelectDisabled :clearInput="false" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark" v-if="orderBy">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable size="small" />
</el-form-item>
<el-form-item>
<el-button v-if="multiple" type="primary" size="small" icon="el-icon-check"

View File

@@ -64,7 +64,7 @@
<span class="param-value">{{ coil.netWeight }}t</span>
</div>
<div class="param-row" v-if="coil.length">
<span class="param-label">长度</span>
<span class="param-label">参考长度</span>
<span class="param-value">{{ coil.length }}m</span>
</div>
<div class="param-row" v-if="coil.actualLength">

Some files were not shown because too many files have changed in this diff Show More