diff --git a/klp-admin/src/main/java/com/klp/framework/client/SqlServerApiClient.java b/klp-admin/src/main/java/com/klp/framework/client/SqlServerApiClient.java index 47db1d68..f0bbe420 100644 --- a/klp-admin/src/main/java/com/klp/framework/client/SqlServerApiClient.java +++ b/klp-admin/src/main/java/com/klp/framework/client/SqlServerApiClient.java @@ -414,6 +414,71 @@ public class SqlServerApiClient { return multiValueMap; } + public ExecuteSqlResponse queryRollDataAll() { + return executeSql( + "oracle", + "SELECT * FROM JXPLTCM.ROLL_DATA WHERE STATUS = 'ONLINE' ORDER BY STANDID", + emptyParams() + ); + } + + public ExecuteSqlResponse queryRollDataFiltered(String type, String status) { + java.util.HashMap params = new java.util.HashMap<>(); + StringBuilder sql = new StringBuilder("SELECT * FROM JXPLTCM.ROLL_DATA WHERE 1=1"); + if (type != null && !type.trim().isEmpty()) { + sql.append(" AND TYPE = :type"); + params.put("type", type.trim()); + } + if (status != null && !status.trim().isEmpty()) { + sql.append(" AND STATUS = :status"); + params.put("status", status.trim()); + } + sql.append(" ORDER BY STANDID"); + return executeSql("oracle", sql.toString(), params); + } + + public ExecuteSqlResponse queryRollHistoryByRollId(String rollId) { + return executeSql( + "oracle", + "SELECT * FROM JXPLTCM.ROLL_HISTORY WHERE ROLLID = :rollId ORDER BY CHANGE_TIME DESC", + singletonParam("rollId", rollId) + ); + } + + public ExecuteSqlResponse queryRollHistoryList(int page, int pageSize, String rollId, Integer standId) { + java.util.HashMap params = new java.util.HashMap<>(); + StringBuilder inner = new StringBuilder("SELECT * FROM JXPLTCM.ROLL_HISTORY WHERE 1=1"); + if (rollId != null && !rollId.trim().isEmpty()) { + inner.append(" AND ROLLID = :rollId"); + params.put("rollId", rollId.trim()); + } + if (standId != null) { + inner.append(" AND STANDID = :standId"); + params.put("standId", standId); + } + inner.append(" ORDER BY CHANGE_TIME DESC"); + int endRow = page * pageSize; + int startRow = endRow - pageSize; + params.put("endRow", endRow); + params.put("startRow", startRow); + String sql = "SELECT * FROM (SELECT t.*, ROWNUM rn FROM (" + inner + ") t WHERE ROWNUM <= :endRow) WHERE rn > :startRow"; + return executeSql("oracle", sql, params); + } + + public ExecuteSqlResponse queryRollHistoryCount(String rollId, Integer standId) { + java.util.HashMap params = new java.util.HashMap<>(); + StringBuilder sql = new StringBuilder("SELECT COUNT(*) as total FROM JXPLTCM.ROLL_HISTORY WHERE 1=1"); + if (rollId != null && !rollId.trim().isEmpty()) { + sql.append(" AND ROLLID = :rollId"); + params.put("rollId", rollId.trim()); + } + if (standId != null) { + sql.append(" AND STANDID = :standId"); + params.put("standId", standId); + } + return executeSql("oracle", sql.toString(), params); + } + private Map singletonParam(String key, Object value) { java.util.HashMap params = new java.util.HashMap(); if (value != null) { diff --git a/klp-admin/src/main/java/com/klp/framework/service/SqlServerApiBusinessService.java b/klp-admin/src/main/java/com/klp/framework/service/SqlServerApiBusinessService.java index 10932c26..fbcb6462 100644 --- a/klp-admin/src/main/java/com/klp/framework/service/SqlServerApiBusinessService.java +++ b/klp-admin/src/main/java/com/klp/framework/service/SqlServerApiBusinessService.java @@ -129,6 +129,46 @@ public class SqlServerApiBusinessService { ); } + /** + * 轧辊数据:返回全部在辊/备辊数据。 + */ + public RollListView getRollData() { + return RollListView.fromExecuteSqlResponse(client.queryRollDataAll()); + } + + /** + * 轧辊数据:按类型和状态过滤。 + */ + public RollListView getRollDataFiltered(String type, String status) { + return RollListView.fromExecuteSqlResponse(client.queryRollDataFiltered(type, status)); + } + + /** + * 换辊历史:按轧辊号查询(供配辊页内联使用)。 + */ + public List> getRollHistory(String rollId) { + return asRowList(client.queryRollHistoryByRollId(rollId)); + } + + /** + * 换辊历史列表(分页 + 可选过滤)。 + */ + public RollHistoryPageView getRollHistoryList(int page, int pageSize, String rollId, Integer standId) { + List> rows = asRowList(client.queryRollHistoryList(page, pageSize, rollId, standId)); + return new RollHistoryPageView(rows); + } + + /** + * 换辊历史总条数(用于前端分页器)。 + */ + public long getRollHistoryCount(String rollId, Integer standId) { + SqlServerApiClient.ExecuteSqlResponse resp = client.queryRollHistoryCount(rollId, standId); + List> rows = asRowList(resp); + if (rows.isEmpty()) return 0L; + Number n = asNumber(rows.get(0).get("total")); + return n == null ? 0L : n.longValue(); + } + private static PlanListView toPlanListView(SqlServerApiClient.ExecuteSqlResponse response) { return PlanListView.fromExecuteSqlResponse(response); } @@ -297,6 +337,34 @@ public class SqlServerApiBusinessService { } } + public static class RollListView { + private final List> rows; + + public RollListView(List> rows) { + this.rows = rows; + } + + public List> getRows() { + return rows; + } + + public static RollListView fromExecuteSqlResponse(SqlServerApiClient.ExecuteSqlResponse response) { + return new RollListView(asRowList(response)); + } + } + + public static class RollHistoryPageView { + private final List> rows; + + public RollHistoryPageView(List> rows) { + this.rows = rows; + } + + public List> getRows() { + return rows; + } + } + public static class RealtimeDataBundle { private final SqlServerApiClient.ExecuteSqlResponse gauge; private final SqlServerApiClient.ExecuteSqlResponse shape; diff --git a/klp-admin/src/main/java/com/klp/framework/sqlserver/SqlServerApiController.java b/klp-admin/src/main/java/com/klp/framework/sqlserver/SqlServerApiController.java index 43f27f03..4ae0052b 100644 --- a/klp-admin/src/main/java/com/klp/framework/sqlserver/SqlServerApiController.java +++ b/klp-admin/src/main/java/com/klp/framework/sqlserver/SqlServerApiController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -76,4 +77,49 @@ public class SqlServerApiController { public R realtime(@PathVariable String matId) { return R.ok(businessService.getRealtimeData(matId)); } + + /** + * 轧辊数据:type / status 均可选,不传则返回全量。 + */ + @GetMapping("/rolls") + public R rollList( + @RequestParam(required = false) String type, + @RequestParam(required = false) String status) { + if ((type != null && !type.isEmpty()) || (status != null && !status.isEmpty())) { + return R.ok(businessService.getRollDataFiltered(type, status)); + } + return R.ok(businessService.getRollData()); + } + + /** + * 换辊历史:按轧辊号查询(配辊页内联用)。 + */ + @GetMapping("/rolls/{rollId}/history") + public R>> rollHistory(@PathVariable String rollId) { + return R.ok(businessService.getRollHistory(rollId)); + } + + /** + * 换辊历史列表(分页)。rollId / standId 均可选。 + */ + @GetMapping("/rolls/history") + public R rollHistoryList( + @RequestParam(defaultValue = "1") int page, + @RequestParam(defaultValue = "50") int pageSize, + @RequestParam(required = false) String rollId, + @RequestParam(required = false) Integer standId) { + return R.ok(businessService.getRollHistoryList(page, pageSize, rollId, standId)); + } + + /** + * 换辊历史总条数。 + */ + @GetMapping("/rolls/history/count") + public R> rollHistoryCount( + @RequestParam(required = false) String rollId, + @RequestParam(required = false) Integer standId) { + Map result = new HashMap<>(); + result.put("total", businessService.getRollHistoryCount(rollId, standId)); + return R.ok(result); + } } diff --git a/klp-admin/src/main/resources/db/migration/V13__mes_roll_grind.sql b/klp-admin/src/main/resources/db/migration/V13__mes_roll_grind.sql new file mode 100644 index 00000000..75490216 --- /dev/null +++ b/klp-admin/src/main/resources/db/migration/V13__mes_roll_grind.sql @@ -0,0 +1,51 @@ +-- ===================================================================== +-- 磨辊记录表 +-- 记录每次磨削的参数,并通过触发 Service 逻辑同步更新 mes_roll_info +-- ===================================================================== +CREATE TABLE IF NOT EXISTS mes_roll_grind ( + grind_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '磨削记录ID', + roll_id BIGINT NOT NULL COMMENT '关联轧辊ID', + roll_no VARCHAR(50) COMMENT '轧辊编号(冗余,方便查询)', + grind_time DATETIME COMMENT '磨削时间', + team VARCHAR(50) COMMENT '磨削班组/负责人', + dia_before DECIMAL(10,2) COMMENT '磨前直径(mm)', + dia_after DECIMAL(10,2) COMMENT '磨后直径(mm)', + grind_amount DECIMAL(10,2) COMMENT '磨削量(mm) = dia_before - dia_after', + roll_shape VARCHAR(100) COMMENT '辊型/辊面状态', + flaw_result VARCHAR(200) COMMENT '探伤结果', + hardness VARCHAR(50) COMMENT '硬度检测值', + operator VARCHAR(50) COMMENT '操作人员', + remark VARCHAR(500) COMMENT '备注', + + del_flag INT NOT NULL DEFAULT 0 COMMENT '删除标志(0正常 1删除)', + create_by VARCHAR(64) COMMENT '创建人', + create_time DATETIME COMMENT '创建时间', + update_by VARCHAR(64) COMMENT '更新人', + update_time DATETIME COMMENT '更新时间', + + PRIMARY KEY (grind_id), + KEY idx_roll_id (roll_id), + KEY idx_grind_time (grind_time) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='轧辊磨削记录'; + + +-- ===================================================================== +-- 菜单:磨辊间 +-- 运行前请先查询轧辊管理父菜单 ID: +-- SELECT menu_id, menu_name, path FROM sys_menu WHERE path LIKE '%roll%'; +-- 将下方的 @roll_parent 替换为实际的父菜单 ID,再执行。 +-- ===================================================================== +-- 示例(请先确认父菜单 ID): +-- +-- SET @roll_parent = ( +-- SELECT menu_id FROM sys_menu +-- WHERE path = 'roll' AND parent_id != 0 +-- LIMIT 1 +-- ); +-- +-- INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, +-- is_frame, is_cache, menu_type, visible, status, perms, icon, +-- create_by, create_time, update_by, update_time, remark) +-- VALUES ('磨辊间', @roll_parent, 3, 'grind', 'mes/roll/grind/index', +-- 1, 0, 'C', '0', '0', NULL, 'tool', +-- 'admin', NOW(), 'admin', NOW(), '磨辊间管理'); diff --git a/klp-mes/src/main/java/com/klp/mes/roll/controller/MesRollGrindController.java b/klp-mes/src/main/java/com/klp/mes/roll/controller/MesRollGrindController.java new file mode 100644 index 00000000..f7ec598e --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/controller/MesRollGrindController.java @@ -0,0 +1,64 @@ +package com.klp.mes.roll.controller; + +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.R; +import com.klp.common.enums.BusinessType; +import com.klp.mes.roll.domain.bo.MesRollGrindBo; +import com.klp.mes.roll.domain.vo.MesRollGrindVo; +import com.klp.mes.roll.service.IMesRollGrindService; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; + +/** + * 磨辊记录 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mes/rollGrind") +public class MesRollGrindController extends BaseController { + + private final IMesRollGrindService iMesRollGrindService; + + /** 查询某轧辊的磨削记录列表 */ + @GetMapping("/list") + public R> list(@NotNull(message = "轧辊ID不能为空") @RequestParam Long rollId) { + return R.ok(iMesRollGrindService.listByRoll(rollId)); + } + + /** 按年份查询月度汇总 */ + @GetMapping("/monthlyStats") + public R>> monthlyStats( + @NotNull @RequestParam Long rollId, + @RequestParam(defaultValue = "0") int year) { + int y = year > 0 ? year : java.time.LocalDate.now().getYear(); + return R.ok(iMesRollGrindService.monthlyStats(rollId, y)); + } + + /** 新增磨削记录(同步更新轧辊直径和磨削次数) */ + @Log(title = "磨辊记录", businessType = BusinessType.INSERT) + @PostMapping + public R add(@Validated @RequestBody MesRollGrindBo bo) { + return R.ok(iMesRollGrindService.addGrind(bo)); + } + + /** 修改磨削记录 */ + @Log(title = "磨辊记录", businessType = BusinessType.UPDATE) + @PutMapping + public R edit(@RequestBody MesRollGrindBo bo) { + return toAjax(iMesRollGrindService.updateGrind(bo)); + } + + /** 删除磨削记录 */ + @Log(title = "磨辊记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{grindId}") + public R remove(@NotNull @PathVariable Long grindId) { + return toAjax(iMesRollGrindService.deleteGrind(grindId)); + } +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/domain/MesRollGrind.java b/klp-mes/src/main/java/com/klp/mes/roll/domain/MesRollGrind.java new file mode 100644 index 00000000..aeed6715 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/domain/MesRollGrind.java @@ -0,0 +1,84 @@ +package com.klp.mes.roll.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 磨辊记录 mes_roll_grind + * + * DDL: + * CREATE TABLE mes_roll_grind ( + * grind_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '磨削记录ID', + * roll_id BIGINT NOT NULL COMMENT '轧辊ID', + * roll_no VARCHAR(50) NOT NULL COMMENT '轧辊编号', + * grind_time DATETIME COMMENT '磨削时间', + * team VARCHAR(50) COMMENT '班组', + * dia_before DECIMAL(10,2) COMMENT '磨前直径(mm)', + * dia_after DECIMAL(10,2) COMMENT '磨后直径(mm)', + * grind_amount DECIMAL(10,2) COMMENT '磨削量(mm)', + * roll_shape VARCHAR(20) COMMENT '辊型(平/凸/凹)', + * flaw_result VARCHAR(20) COMMENT '探伤结果', + * hardness DECIMAL(6,1) COMMENT '硬度', + * operator VARCHAR(50) COMMENT '操作者', + * remark VARCHAR(500) COMMENT '备注', + * del_flag TINYINT NOT NULL DEFAULT 0, + * create_by VARCHAR(64) DEFAULT '', + * create_time DATETIME, + * update_by VARCHAR(64) DEFAULT '', + * update_time DATETIME, + * PRIMARY KEY (grind_id) + * ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='磨辊记录'; + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("mes_roll_grind") +public class MesRollGrind extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableId(value = "grind_id") + private Long grindId; + + /** 轧辊ID */ + private Long rollId; + + /** 轧辊编号 */ + private String rollNo; + + /** 磨削时间 */ + private Date grindTime; + + /** 班组 */ + private String team; + + /** 磨前直径(mm) */ + private BigDecimal diaBefore; + + /** 磨后直径(mm) */ + private BigDecimal diaAfter; + + /** 磨削量(mm) = diaBefore - diaAfter */ + private BigDecimal grindAmount; + + /** 辊型:平 / 凸 / 凹 */ + private String rollShape; + + /** 探伤结果 */ + private String flawResult; + + /** 硬度 */ + private BigDecimal hardness; + + /** 操作者 */ + private String operator; + + @TableLogic + private Integer delFlag; +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/domain/bo/MesRollGrindBo.java b/klp-mes/src/main/java/com/klp/mes/roll/domain/bo/MesRollGrindBo.java new file mode 100644 index 00000000..37c4a9c6 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/domain/bo/MesRollGrindBo.java @@ -0,0 +1,37 @@ +package com.klp.mes.roll.domain.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 磨辊记录 业务对象 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MesRollGrindBo extends BaseEntity { + + private Long grindId; + + @NotNull(message = "轧辊ID不能为空") + private Long rollId; + + private String rollNo; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date grindTime; + + private String team; + private BigDecimal diaBefore; + private BigDecimal diaAfter; + private BigDecimal grindAmount; + private String rollShape; + private String flawResult; + private BigDecimal hardness; + private String operator; +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/domain/vo/MesRollGrindVo.java b/klp-mes/src/main/java/com/klp/mes/roll/domain/vo/MesRollGrindVo.java new file mode 100644 index 00000000..e5ce4d24 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/domain/vo/MesRollGrindVo.java @@ -0,0 +1,34 @@ +package com.klp.mes.roll.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 磨辊记录 视图对象 + */ +@Data +public class MesRollGrindVo { + + private Long grindId; + private Long rollId; + private String rollNo; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date grindTime; + + private String team; + private BigDecimal diaBefore; + private BigDecimal diaAfter; + private BigDecimal grindAmount; + private String rollShape; + private String flawResult; + private BigDecimal hardness; + private String operator; + private String remark; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollGrindMapper.java b/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollGrindMapper.java new file mode 100644 index 00000000..2c354749 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollGrindMapper.java @@ -0,0 +1,21 @@ +package com.klp.mes.roll.mapper; + +import com.klp.common.core.mapper.BaseMapperPlus; +import com.klp.mes.roll.domain.MesRollGrind; +import com.klp.mes.roll.domain.vo.MesRollGrindVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 磨辊记录 Mapper + */ +public interface MesRollGrindMapper extends BaseMapperPlus { + + /** 查询某轧辊全部磨削记录(按时间升序) */ + List selectByRollId(@Param("rollId") Long rollId); + + /** 按年份统计每月磨削量 { month, grindCount, totalGrindAmount } */ + List> selectMonthlyStats(@Param("rollId") Long rollId, @Param("year") int year); +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollInfoMapper.java b/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollInfoMapper.java index 94630552..31a57a50 100644 --- a/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollInfoMapper.java +++ b/klp-mes/src/main/java/com/klp/mes/roll/mapper/MesRollInfoMapper.java @@ -39,4 +39,15 @@ public interface MesRollInfoMapper extends BaseMapperPlus listByRoll(Long rollId); + + /** 新增磨削记录,同步更新轧辊当前直径和磨削次数 */ + Long addGrind(MesRollGrindBo bo); + + /** 修改磨削记录 */ + Boolean updateGrind(MesRollGrindBo bo); + + /** 删除磨削记录 */ + Boolean deleteGrind(Long grindId); + + /** 按年份统计每月磨削数据 */ + List> monthlyStats(Long rollId, int year); +} diff --git a/klp-mes/src/main/java/com/klp/mes/roll/service/impl/MesRollGrindServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/roll/service/impl/MesRollGrindServiceImpl.java new file mode 100644 index 00000000..92c14e46 --- /dev/null +++ b/klp-mes/src/main/java/com/klp/mes/roll/service/impl/MesRollGrindServiceImpl.java @@ -0,0 +1,102 @@ +package com.klp.mes.roll.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.utils.StringUtils; +import com.klp.mes.roll.domain.MesRollGrind; +import com.klp.mes.roll.domain.MesRollInfo; +import com.klp.mes.roll.domain.bo.MesRollGrindBo; +import com.klp.mes.roll.domain.vo.MesRollGrindVo; +import com.klp.mes.roll.domain.vo.MesRollInfoVo; +import com.klp.mes.roll.mapper.MesRollGrindMapper; +import com.klp.mes.roll.mapper.MesRollInfoMapper; +import com.klp.mes.roll.service.IMesRollGrindService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 磨辊记录 Service 实现 + */ +@RequiredArgsConstructor +@Service +public class MesRollGrindServiceImpl implements IMesRollGrindService { + + private final MesRollGrindMapper baseMapper; + private final MesRollInfoMapper rollInfoMapper; + + @Override + public List listByRoll(Long rollId) { + return baseMapper.selectByRollId(rollId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addGrind(MesRollGrindBo bo) { + MesRollGrind add = BeanUtil.toBean(bo, MesRollGrind.class); + + // 默认磨削时间为当前时间 + if (add.getGrindTime() == null) { + add.setGrindTime(new Date()); + } + + // 自动计算磨削量 + if (add.getDiaBefore() != null && add.getDiaAfter() != null) { + add.setGrindAmount(add.getDiaBefore().subtract(add.getDiaAfter())); + } + + // 同步轧辊编号 + if (StringUtils.isBlank(add.getRollNo())) { + MesRollInfoVo info = rollInfoMapper.selectVoById(add.getRollId()); + if (info != null) { + add.setRollNo(info.getRollNo()); + } + } + + baseMapper.insert(add); + + // 同步更新 mes_roll_info:当前直径 + 磨削次数 +1 + MesRollInfo update = new MesRollInfo(); + update.setRollId(add.getRollId()); + if (add.getDiaAfter() != null) { + update.setCurrentDia(add.getDiaAfter()); + } + // grindCount = 当前次数 + 1(先查后加,避免并发问题用 SQL UPDATE) + rollInfoMapper.incrementGrindCount(add.getRollId(), add.getDiaAfter()); + + return add.getGrindId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateGrind(MesRollGrindBo bo) { + MesRollGrind update = BeanUtil.toBean(bo, MesRollGrind.class); + if (update.getDiaBefore() != null && update.getDiaAfter() != null) { + update.setGrindAmount(update.getDiaBefore().subtract(update.getDiaAfter())); + } + boolean ok = baseMapper.updateById(update) > 0; + if (ok && update.getDiaAfter() != null) { + // 以最新一条磨削记录的磨后直径为准更新当前直径 + MesRollGrindVo latest = baseMapper.selectByRollId(update.getRollId()) + .stream().reduce((a, b) -> b).orElse(null); + if (latest != null && latest.getDiaAfter() != null) { + rollInfoMapper.updateCurrentDia(update.getRollId(), latest.getDiaAfter()); + } + } + return ok; + } + + @Override + public Boolean deleteGrind(Long grindId) { + return baseMapper.deleteById(grindId) > 0; + } + + @Override + public List> monthlyStats(Long rollId, int year) { + return baseMapper.selectMonthlyStats(rollId, year); + } +} diff --git a/klp-mes/src/main/resources/mapper/roll/MesRollGrindMapper.xml b/klp-mes/src/main/resources/mapper/roll/MesRollGrindMapper.xml new file mode 100644 index 00000000..72521562 --- /dev/null +++ b/klp-mes/src/main/resources/mapper/roll/MesRollGrindMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml b/klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml index c2b0e2f1..51f60fb6 100644 --- a/klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml +++ b/klp-mes/src/main/resources/mapper/roll/MesRollInfoMapper.xml @@ -42,4 +42,18 @@ WHERE del_flag = 0 AND roll_no = #{rollNo} AND status = #{onlyIfStatus} + + UPDATE mes_roll_info + SET grind_count = grind_count + 1, + current_dia = #{diaAfter}, + update_time = NOW() + WHERE del_flag = 0 AND roll_id = #{rollId} + + + + UPDATE mes_roll_info + SET current_dia = #{currentDia}, update_time = NOW() + WHERE del_flag = 0 AND roll_id = #{rollId} + + diff --git a/klp-ui/src/api/l2/timing.js b/klp-ui/src/api/l2/timing.js index 0801ec12..5bf18059 100644 --- a/klp-ui/src/api/l2/timing.js +++ b/klp-ui/src/api/l2/timing.js @@ -48,3 +48,38 @@ export function getTimingRealtimeData(matId) { method: 'get' }) } + +// 轧辊数据,type/status 可选过滤 +export function getRollData(type, status) { + return request({ + url: '/sql-server-api/rolls', + method: 'get', + params: { type, status } + }) +} + +// 换辊历史(按轧辊号,配辊页用) +export function getRollHistory(rollId) { + return request({ + url: '/sql-server-api/rolls/' + rollId + '/history', + method: 'get' + }) +} + +// 换辊历史列表(分页 + 过滤,历史页用) +export function getRollHistoryList(page = 1, pageSize = 50, rollId, standId) { + return request({ + url: '/sql-server-api/rolls/history', + method: 'get', + params: { page, pageSize, rollId, standId } + }) +} + +// 换辊历史总条数 +export function getRollHistoryCount(rollId, standId) { + return request({ + url: '/sql-server-api/rolls/history/count', + method: 'get', + params: { rollId, standId } + }) +} diff --git a/klp-ui/src/api/mes/roll/rollGrind.js b/klp-ui/src/api/mes/roll/rollGrind.js new file mode 100644 index 00000000..62c39793 --- /dev/null +++ b/klp-ui/src/api/mes/roll/rollGrind.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询轧辊磨削记录列表 +export function listRollGrind(rollId) { + return request({ url: '/mes/rollGrind/list', method: 'get', params: { rollId } }) +} + +// 查询月度汇总 +export function getMonthlyStats(rollId, year) { + return request({ url: '/mes/rollGrind/monthlyStats', method: 'get', params: { rollId, year } }) +} + +// 新增磨削记录 +export function addRollGrind(data) { + return request({ url: '/mes/rollGrind', method: 'post', data }) +} + +// 修改磨削记录 +export function updateRollGrind(data) { + return request({ url: '/mes/rollGrind', method: 'put', data }) +} + +// 删除磨削记录 +export function delRollGrind(grindId) { + return request({ url: '/mes/rollGrind/' + grindId, method: 'delete' }) +} diff --git a/klp-ui/src/views/mes/roll/grind/index.vue b/klp-ui/src/views/mes/roll/grind/index.vue new file mode 100644 index 00000000..44a30e59 --- /dev/null +++ b/klp-ui/src/views/mes/roll/grind/index.vue @@ -0,0 +1,490 @@ + + + + + + + + diff --git a/klp-ui/src/views/mes/roll/overview/index.vue b/klp-ui/src/views/mes/roll/overview/index.vue index ae9fdaff..d42b57f5 100644 --- a/klp-ui/src/views/mes/roll/overview/index.vue +++ b/klp-ui/src/views/mes/roll/overview/index.vue @@ -46,6 +46,12 @@ + + + + + + @@ -236,6 +242,7 @@ export default { queryParams: { pageNum: 1, pageSize: 20, + lineCode: undefined, // 产线筛选(暂写死双机架,后续接字段) rollNo: undefined, rollType: undefined, status: undefined @@ -269,6 +276,7 @@ export default { this.getList() }, resetQuery() { + this.queryParams.lineCode = undefined this.resetForm('queryForm') this.handleQuery() }, diff --git a/klp-ui/src/views/micro/pages/acid/index.vue b/klp-ui/src/views/micro/pages/acid/index.vue index ac7844a2..8ce4dd87 100644 --- a/klp-ui/src/views/micro/pages/acid/index.vue +++ b/klp-ui/src/views/micro/pages/acid/index.vue @@ -30,6 +30,14 @@ 实绩 + + + 配辊 + + + + 换辊历史 + + {{ sv(pos.standby, 'rollid') }} + {{ nv(pos.standby, 'diameter') }} + {{ nv(pos.standby, 'crown') }} + {{ nv(pos.standby, 'rough') }} + + + {{ sv(pos.online, 'rollid') }} + {{ dispPos(pos.online && pos.online.position) }} + {{ dispType(pos.online && pos.online.type) }} + {{ nv(pos.online, 'diameter') }} + {{ nv(pos.online, 'crown') }} + {{ nv(pos.online, 'rough') }} + {{ iv(pos.online, 'rolled_length') }} + {{ iv(pos.online, 'rolled_weight') }} + {{ dv(pos.online, 'instal_time') }} + + + {{ iv(pos.online, 'rolled_length') }} + {{ iv(pos.online, 'total_rolled_length') }} + {{ iv(pos.online, 'rolled_weight') }} + {{ iv(pos.online, 'total_rolled_weight') }} + + + + + + + + + + +