提交酸扎串联内容以及磨辊间

This commit is contained in:
2026-05-09 16:44:39 +08:00
parent 43fb05291e
commit 41d561f2f6
21 changed files with 1747 additions and 1 deletions

View File

@@ -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<MesRollGrindVo>> list(@NotNull(message = "轧辊ID不能为空") @RequestParam Long rollId) {
return R.ok(iMesRollGrindService.listByRoll(rollId));
}
/** 按年份查询月度汇总 */
@GetMapping("/monthlyStats")
public R<List<Map<String, Object>>> 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<Long> add(@Validated @RequestBody MesRollGrindBo bo) {
return R.ok(iMesRollGrindService.addGrind(bo));
}
/** 修改磨削记录 */
@Log(title = "磨辊记录", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@RequestBody MesRollGrindBo bo) {
return toAjax(iMesRollGrindService.updateGrind(bo));
}
/** 删除磨削记录 */
@Log(title = "磨辊记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{grindId}")
public R<Void> remove(@NotNull @PathVariable Long grindId) {
return toAjax(iMesRollGrindService.deleteGrind(grindId));
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<MesRollGrindMapper, MesRollGrind, MesRollGrindVo> {
/** 查询某轧辊全部磨削记录(按时间升序) */
List<MesRollGrindVo> selectByRollId(@Param("rollId") Long rollId);
/** 按年份统计每月磨削量 { month, grindCount, totalGrindAmount } */
List<Map<String, Object>> selectMonthlyStats(@Param("rollId") Long rollId, @Param("year") int year);
}

View File

@@ -39,4 +39,15 @@ public interface MesRollInfoMapper extends BaseMapperPlus<MesRollInfoMapper, Mes
int updateStatusByRollNoIfStatus(@Param("rollNo") String rollNo,
@Param("status") String status,
@Param("onlyIfStatus") String onlyIfStatus);
/**
* 磨削后同步:当前直径更新 + 磨削次数+1
* diaAfter 为 null 时仅 grindCount+1 不更新直径
*/
int incrementGrindCount(@Param("rollId") Long rollId,
@Param("diaAfter") java.math.BigDecimal diaAfter);
/** 直接更新当前直径(用于修改磨削记录后重新同步) */
int updateCurrentDia(@Param("rollId") Long rollId,
@Param("currentDia") java.math.BigDecimal currentDia);
}

View File

@@ -0,0 +1,28 @@
package com.klp.mes.roll.service;
import com.klp.mes.roll.domain.bo.MesRollGrindBo;
import com.klp.mes.roll.domain.vo.MesRollGrindVo;
import java.util.List;
import java.util.Map;
/**
* 磨辊记录 Service 接口
*/
public interface IMesRollGrindService {
/** 查询某轧辊全部磨削记录 */
List<MesRollGrindVo> listByRoll(Long rollId);
/** 新增磨削记录,同步更新轧辊当前直径和磨削次数 */
Long addGrind(MesRollGrindBo bo);
/** 修改磨削记录 */
Boolean updateGrind(MesRollGrindBo bo);
/** 删除磨削记录 */
Boolean deleteGrind(Long grindId);
/** 按年份统计每月磨削数据 */
List<Map<String, Object>> monthlyStats(Long rollId, int year);
}

View File

@@ -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<MesRollGrindVo> 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<Map<String, Object>> monthlyStats(Long rollId, int year) {
return baseMapper.selectMonthlyStats(rollId, year);
}
}

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.roll.mapper.MesRollGrindMapper">
<select id="selectByRollId" 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, hardness, operator, remark, create_time
FROM mes_roll_grind
WHERE del_flag = 0 AND roll_id = #{rollId}
ORDER BY grind_time ASC, grind_id ASC
</select>
<select id="selectMonthlyStats" resultType="map">
SELECT
DATE_FORMAT(grind_time, '%Y-%m') AS month,
COUNT(*) AS grindCount,
IFNULL(SUM(grind_amount), 0) AS totalGrindAmount
FROM mes_roll_grind
WHERE del_flag = 0
AND roll_id = #{rollId}
AND YEAR(grind_time) = #{year}
GROUP BY DATE_FORMAT(grind_time, '%Y-%m')
ORDER BY month ASC
</select>
</mapper>

View File

@@ -42,4 +42,18 @@
WHERE del_flag = 0 AND roll_no = #{rollNo} AND status = #{onlyIfStatus}
</update>
<update id="incrementGrindCount">
UPDATE mes_roll_info
SET grind_count = grind_count + 1,
<if test="diaAfter != null">current_dia = #{diaAfter},</if>
update_time = NOW()
WHERE del_flag = 0 AND roll_id = #{rollId}
</update>
<update id="updateCurrentDia">
UPDATE mes_roll_info
SET current_dia = #{currentDia}, update_time = NOW()
WHERE del_flag = 0 AND roll_id = #{rollId}
</update>
</mapper>