工艺规程增强

This commit is contained in:
2026-05-12 17:15:29 +08:00
parent b44d9d9daf
commit 38138a828c
27 changed files with 1903 additions and 259 deletions

View File

@@ -0,0 +1,45 @@
package com.klp.controller;
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.page.TableDataInfo;
import com.klp.domain.bo.WmsProcessAnomalyBo;
import com.klp.domain.vo.WmsProcessAnomalyVo;
import com.klp.service.IWmsProcessAnomalyService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 工艺参数异常记录
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/processAnomaly")
public class WmsProcessAnomalyController extends BaseController {
private final IWmsProcessAnomalyService wmsProcessAnomalyService;
/** 分页列表(规程方案页按版本/参数/钢卷查询) */
@GetMapping("/list")
public TableDataInfo<WmsProcessAnomalyVo> list(WmsProcessAnomalyBo bo, PageQuery pageQuery) {
return wmsProcessAnomalyService.queryPageList(bo, pageQuery);
}
/** 不分页列表(用于规程方案页全量加载当前版本异常) */
@GetMapping("/listAll")
public R<List<WmsProcessAnomalyVo>> listAll(WmsProcessAnomalyBo bo) {
return R.ok(wmsProcessAnomalyService.queryList(bo));
}
/** 批量新增异常记录(实绩页检测到异常后调用) */
@PostMapping("/batchAdd")
public R<Void> batchAdd(@RequestBody List<WmsProcessAnomalyBo> boList) {
wmsProcessAnomalyService.batchInsert(boList);
return R.ok();
}
}

View File

@@ -0,0 +1,51 @@
package com.klp.controller;
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.page.TableDataInfo;
import com.klp.domain.bo.WmsProcessCoilRecordBo;
import com.klp.domain.vo.WmsProcessCoilRecordVo;
import com.klp.service.IWmsProcessCoilRecordService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 版本钢卷服役记录
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/processCoilRecord")
public class WmsProcessCoilRecordController extends BaseController {
private final IWmsProcessCoilRecordService wmsProcessCoilRecordService;
/** 分页列表(规程版本页查钢卷历史) */
@GetMapping("/list")
public TableDataInfo<WmsProcessCoilRecordVo> list(WmsProcessCoilRecordBo bo, PageQuery pageQuery) {
return wmsProcessCoilRecordService.queryPageList(bo, pageQuery);
}
/** 不分页列表 */
@GetMapping("/listAll")
public R<List<WmsProcessCoilRecordVo>> listAll(WmsProcessCoilRecordBo bo) {
return R.ok(wmsProcessCoilRecordService.queryList(bo));
}
/** 版本下服役钢卷总数 */
@GetMapping("/count")
public R<Long> count(@RequestParam Long versionId) {
return R.ok(wmsProcessCoilRecordService.countByVersion(versionId));
}
/** 新增或更新(幂等接口,前端每次点击钢卷行时调用) */
@PostMapping("/upsert")
public R<Void> upsert(@RequestBody WmsProcessCoilRecordBo bo) {
wmsProcessCoilRecordService.upsert(bo);
return R.ok();
}
}

View File

@@ -0,0 +1,84 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 工艺参数异常记录 wms_process_anomaly
*/
@Data
@TableName("wms_process_anomaly")
public class WmsProcessAnomaly {
private static final long serialVersionUID = 1L;
@TableId(value = "anomaly_id")
private Long anomalyId;
/** 规程版本ID */
private Long versionId;
/** 方案点位ID */
private Long planId;
/** 参数ID */
private Long paramId;
/** 出口钢卷号 */
private String coilId;
/** 入口钢卷号 */
private String enCoilId;
/** 参数编码 */
private String paramCode;
/** 参数名称 */
private String paramName;
/** 单位 */
private String unit;
/** 异常类型: OVER_MAX / UNDER_MIN / BOTH */
private String anomalyType;
/** 规程存储的设定值 */
private BigDecimal storedTarget;
/** 规程存储的上限 */
private BigDecimal storedUpper;
/** 规程存储的下限 */
private BigDecimal storedLower;
/** 本次L1实际设定值 */
private BigDecimal actualTarget;
/** 本次实际最大值 */
private BigDecimal actualMax;
/** 本次实际最小值 */
private BigDecimal actualMin;
/** 最大值偏差 actual_max - stored_upper */
private BigDecimal deviationMax;
/** 最小值偏差 actual_min - stored_lower */
private BigDecimal deviationMin;
/** 检测时间 */
private Date detectedAt;
private String createBy;
private Date createTime;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -0,0 +1,47 @@
package com.klp.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.util.Date;
/**
* 版本钢卷服役记录 wms_process_coil_record
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_process_coil_record")
public class WmsProcessCoilRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId(value = "record_id")
private Long recordId;
/** 规程版本ID */
private Long versionId;
/** 出口钢卷号 */
private String coilId;
/** 入口钢卷号 */
private String enCoilId;
/** 是否存在异常 0否1是 */
private Integer hasAnomaly;
/** 异常参数数量 */
private Integer anomalyCnt;
/** 检测/服役时间 */
private Date processTime;
@TableLogic
private Integer delFlag;
private String remark;
}

View File

@@ -59,6 +59,16 @@ public class WmsProcessPlanParam extends BaseEntity {
*/
private String unit;
/**
* 实际值来源钢卷号(首次写入时的 ENCOILID
*/
private String actualSrcId;
/**
* L1 预设值来源钢卷号(首次写入时的 COILID
*/
private String presetSrcId;
@TableLogic
private Integer delFlag;

View File

@@ -0,0 +1,35 @@
package com.klp.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 工艺参数异常记录业务对象
*/
@Data
public class WmsProcessAnomalyBo {
private Long versionId;
private Long planId;
private Long paramId;
private String coilId;
private String enCoilId;
private String paramCode;
private String paramName;
private String unit;
private String anomalyType;
private BigDecimal storedTarget;
private BigDecimal storedUpper;
private BigDecimal storedLower;
private BigDecimal actualTarget;
private BigDecimal actualMax;
private BigDecimal actualMin;
private BigDecimal deviationMax;
private BigDecimal deviationMin;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private Date detectedAt;
private String remark;
}

View File

@@ -0,0 +1,33 @@
package com.klp.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 版本钢卷服役记录业务对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsProcessCoilRecordBo extends BaseEntity {
private Long recordId;
private Long versionId;
private String coilId;
private String enCoilId;
private Integer hasAnomaly;
private Integer anomalyCnt;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private Date processTime;
private String remark;
}

View File

@@ -39,5 +39,9 @@ public class WmsProcessPlanParamBo extends BaseEntity {
private String unit;
private String actualSrcId;
private String presetSrcId;
private String remark;
}

View File

@@ -0,0 +1,41 @@
package com.klp.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 工艺参数异常记录视图对象
*/
@Data
public class WmsProcessAnomalyVo {
private Long anomalyId;
private Long versionId;
private Long planId;
private Long paramId;
private String coilId;
private String enCoilId;
private String paramCode;
private String paramName;
private String unit;
private String anomalyType;
private BigDecimal storedTarget;
private BigDecimal storedUpper;
private BigDecimal storedLower;
private BigDecimal actualTarget;
private BigDecimal actualMax;
private BigDecimal actualMin;
private BigDecimal deviationMax;
private BigDecimal deviationMin;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date detectedAt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String remark;
}

View File

@@ -0,0 +1,28 @@
package com.klp.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* 版本钢卷服役记录视图对象
*/
@Data
public class WmsProcessCoilRecordVo {
private Long recordId;
private Long versionId;
private String coilId;
private String enCoilId;
private Integer hasAnomaly;
private Integer anomalyCnt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date processTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String remark;
}

View File

@@ -41,6 +41,12 @@ public class WmsProcessPlanParamVo {
@ExcelProperty(value = "单位")
private String unit;
@ExcelProperty(value = "实际值来源钢卷号")
private String actualSrcId;
@ExcelProperty(value = "L1设定值来源钢卷号")
private String presetSrcId;
@ExcelProperty(value = "备注")
private String remark;

View File

@@ -0,0 +1,11 @@
package com.klp.mapper;
import com.klp.common.core.mapper.BaseMapperPlus;
import com.klp.domain.WmsProcessAnomaly;
import com.klp.domain.vo.WmsProcessAnomalyVo;
/**
* 工艺参数异常记录 Mapper
*/
public interface WmsProcessAnomalyMapper extends BaseMapperPlus<WmsProcessAnomalyMapper, WmsProcessAnomaly, WmsProcessAnomalyVo> {
}

View File

@@ -0,0 +1,11 @@
package com.klp.mapper;
import com.klp.common.core.mapper.BaseMapperPlus;
import com.klp.domain.WmsProcessCoilRecord;
import com.klp.domain.vo.WmsProcessCoilRecordVo;
/**
* 版本钢卷服役记录 Mapper
*/
public interface WmsProcessCoilRecordMapper extends BaseMapperPlus<WmsProcessCoilRecordMapper, WmsProcessCoilRecord, WmsProcessCoilRecordVo> {
}

View File

@@ -0,0 +1,21 @@
package com.klp.service;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.bo.WmsProcessAnomalyBo;
import com.klp.domain.vo.WmsProcessAnomalyVo;
import java.util.List;
/**
* 工艺参数异常记录 Service
*/
public interface IWmsProcessAnomalyService {
TableDataInfo<WmsProcessAnomalyVo> queryPageList(WmsProcessAnomalyBo bo, PageQuery pageQuery);
List<WmsProcessAnomalyVo> queryList(WmsProcessAnomalyBo bo);
/** 批量插入异常记录 */
void batchInsert(List<WmsProcessAnomalyBo> boList);
}

View File

@@ -0,0 +1,24 @@
package com.klp.service;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.bo.WmsProcessCoilRecordBo;
import com.klp.domain.vo.WmsProcessCoilRecordVo;
import java.util.List;
/**
* 版本钢卷服役记录 Service
*/
public interface IWmsProcessCoilRecordService {
TableDataInfo<WmsProcessCoilRecordVo> queryPageList(WmsProcessCoilRecordBo bo, PageQuery pageQuery);
List<WmsProcessCoilRecordVo> queryList(WmsProcessCoilRecordBo bo);
/** 按版本统计服役钢卷总数(含异常数) */
long countByVersion(Long versionId);
/** 新增或更新(按 version_id + coil_id 唯一键) */
void upsert(WmsProcessCoilRecordBo bo);
}

View File

@@ -0,0 +1,67 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsProcessAnomaly;
import com.klp.domain.bo.WmsProcessAnomalyBo;
import com.klp.domain.vo.WmsProcessAnomalyVo;
import com.klp.mapper.WmsProcessAnomalyMapper;
import com.klp.service.IWmsProcessAnomalyService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 工艺参数异常记录 Service 实现
*/
@RequiredArgsConstructor
@Service
public class WmsProcessAnomalyServiceImpl implements IWmsProcessAnomalyService {
private final WmsProcessAnomalyMapper baseMapper;
@Override
public TableDataInfo<WmsProcessAnomalyVo> queryPageList(WmsProcessAnomalyBo bo, PageQuery pageQuery) {
Page<WmsProcessAnomalyVo> result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(bo));
return TableDataInfo.build(result);
}
@Override
public List<WmsProcessAnomalyVo> queryList(WmsProcessAnomalyBo bo) {
return baseMapper.selectVoList(buildQueryWrapper(bo));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void batchInsert(List<WmsProcessAnomalyBo> boList) {
if (boList == null || boList.isEmpty()) return;
Date now = new Date();
List<WmsProcessAnomaly> entities = boList.stream().map(bo -> {
WmsProcessAnomaly e = BeanUtil.toBean(bo, WmsProcessAnomaly.class);
if (e.getDetectedAt() == null) e.setDetectedAt(now);
e.setCreateTime(now);
return e;
}).collect(Collectors.toList());
entities.forEach(baseMapper::insert);
}
private LambdaQueryWrapper<WmsProcessAnomaly> buildQueryWrapper(WmsProcessAnomalyBo bo) {
LambdaQueryWrapper<WmsProcessAnomaly> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getVersionId() != null, WmsProcessAnomaly::getVersionId, bo.getVersionId());
lqw.eq(bo.getPlanId() != null, WmsProcessAnomaly::getPlanId, bo.getPlanId());
lqw.eq(StringUtils.isNotBlank(bo.getCoilId()), WmsProcessAnomaly::getCoilId, bo.getCoilId());
lqw.eq(StringUtils.isNotBlank(bo.getParamCode()), WmsProcessAnomaly::getParamCode, bo.getParamCode());
lqw.eq(StringUtils.isNotBlank(bo.getAnomalyType()), WmsProcessAnomaly::getAnomalyType, bo.getAnomalyType());
lqw.orderByDesc(WmsProcessAnomaly::getDetectedAt);
return lqw;
}
}

View File

@@ -0,0 +1,71 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.WmsProcessCoilRecord;
import com.klp.domain.bo.WmsProcessCoilRecordBo;
import com.klp.domain.vo.WmsProcessCoilRecordVo;
import com.klp.mapper.WmsProcessCoilRecordMapper;
import com.klp.service.IWmsProcessCoilRecordService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 版本钢卷服役记录 Service 实现
*/
@RequiredArgsConstructor
@Service
public class WmsProcessCoilRecordServiceImpl implements IWmsProcessCoilRecordService {
private final WmsProcessCoilRecordMapper baseMapper;
@Override
public TableDataInfo<WmsProcessCoilRecordVo> queryPageList(WmsProcessCoilRecordBo bo, PageQuery pageQuery) {
Page<WmsProcessCoilRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(bo));
return TableDataInfo.build(result);
}
@Override
public List<WmsProcessCoilRecordVo> queryList(WmsProcessCoilRecordBo bo) {
return baseMapper.selectVoList(buildQueryWrapper(bo));
}
@Override
public long countByVersion(Long versionId) {
return baseMapper.selectCount(Wrappers.<WmsProcessCoilRecord>lambdaQuery()
.eq(WmsProcessCoilRecord::getVersionId, versionId));
}
@Override
public void upsert(WmsProcessCoilRecordBo bo) {
LambdaQueryWrapper<WmsProcessCoilRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(WmsProcessCoilRecord::getVersionId, bo.getVersionId());
lqw.eq(WmsProcessCoilRecord::getCoilId, bo.getCoilId());
WmsProcessCoilRecord existing = baseMapper.selectOne(lqw);
if (existing != null) {
existing.setHasAnomaly(bo.getHasAnomaly());
existing.setAnomalyCnt(bo.getAnomalyCnt());
existing.setProcessTime(bo.getProcessTime());
existing.setEnCoilId(bo.getEnCoilId());
baseMapper.updateById(existing);
} else {
WmsProcessCoilRecord record = BeanUtil.toBean(bo, WmsProcessCoilRecord.class);
baseMapper.insert(record);
}
}
private LambdaQueryWrapper<WmsProcessCoilRecord> buildQueryWrapper(WmsProcessCoilRecordBo bo) {
LambdaQueryWrapper<WmsProcessCoilRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getVersionId() != null, WmsProcessCoilRecord::getVersionId, bo.getVersionId());
lqw.eq(bo.getCoilId() != null, WmsProcessCoilRecord::getCoilId, bo.getCoilId());
lqw.eq(bo.getHasAnomaly() != null, WmsProcessCoilRecord::getHasAnomaly, bo.getHasAnomaly());
lqw.orderByDesc(WmsProcessCoilRecord::getProcessTime);
return lqw;
}
}

View File

@@ -0,0 +1,31 @@
<?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.mapper.WmsProcessAnomalyMapper">
<resultMap type="com.klp.domain.WmsProcessAnomaly" id="WmsProcessAnomalyResult">
<result property="anomalyId" column="anomaly_id"/>
<result property="versionId" column="version_id"/>
<result property="planId" column="plan_id"/>
<result property="paramId" column="param_id"/>
<result property="coilId" column="coil_id"/>
<result property="enCoilId" column="en_coil_id"/>
<result property="paramCode" column="param_code"/>
<result property="paramName" column="param_name"/>
<result property="unit" column="unit"/>
<result property="anomalyType" column="anomaly_type"/>
<result property="storedTarget" column="stored_target"/>
<result property="storedUpper" column="stored_upper"/>
<result property="storedLower" column="stored_lower"/>
<result property="actualTarget" column="actual_target"/>
<result property="actualMax" column="actual_max"/>
<result property="actualMin" column="actual_min"/>
<result property="deviationMax" column="deviation_max"/>
<result property="deviationMin" column="deviation_min"/>
<result property="detectedAt" column="detected_at"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,21 @@
<?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.mapper.WmsProcessCoilRecordMapper">
<resultMap type="com.klp.domain.WmsProcessCoilRecord" id="WmsProcessCoilRecordResult">
<result property="recordId" column="record_id"/>
<result property="versionId" column="version_id"/>
<result property="coilId" column="coil_id"/>
<result property="enCoilId" column="en_coil_id"/>
<result property="hasAnomaly" column="has_anomaly"/>
<result property="anomalyCnt" column="anomaly_cnt"/>
<result property="processTime" column="process_time"/>
<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"/>
<result property="remark" column="remark"/>
</resultMap>
</mapper>

View File

@@ -11,6 +11,8 @@
<result property="lowerLimit" column="lower_limit"/>
<result property="upperLimit" column="upper_limit"/>
<result property="unit" column="unit"/>
<result property="actualSrcId" column="actual_src_id"/>
<result property="presetSrcId" column="preset_src_id"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>