提交酸扎串联内容以及磨辊间
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user