规程添加绑定功能

This commit is contained in:
2026-05-13 13:56:19 +08:00
parent dce80a225b
commit 5e3d0f0c00
11 changed files with 1110 additions and 33 deletions

View File

@@ -7,6 +7,7 @@ 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.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -42,10 +43,28 @@ public class WmsProcessCoilRecordController extends BaseController {
return R.ok(wmsProcessCoilRecordService.countByVersion(versionId));
}
/** 新增或更新(幂等接口,前端每次点击钢卷行时调用 */
/** 新增或更新(幂等接口) */
@PostMapping("/upsert")
public R<Void> upsert(@RequestBody WmsProcessCoilRecordBo bo) {
wmsProcessCoilRecordService.upsert(bo);
return R.ok();
}
/**
* 批量重绑:将所选钢卷从 oldVersionId 迁移到 newVersionId。
* oldVersionId 可为空(此时只新增,不删除旧记录)。
*/
@PostMapping("/batchRebind")
public R<Void> batchRebind(@RequestBody BatchRebindRequest req) {
wmsProcessCoilRecordService.batchRebind(req.getCoilIds(), req.getNewVersionId(), req.getOldVersionId());
return R.ok();
}
@Data
static class BatchRebindRequest {
private List<String> coilIds;
private Long newVersionId;
/** 可为空;非空时先删除该版本下的旧记录 */
private Long oldVersionId;
}
}

View File

@@ -25,4 +25,12 @@ public class WmsProcessCoilRecordVo {
private Date createTime;
private String remark;
// ── 连接字段(来自 wms_process_spec_version / wms_process_spec ──
private String versionCode;
private Integer isActive;
private String versionStatus;
private Long specId;
private String specCode;
private String specName;
}

View File

@@ -1,11 +1,23 @@
package com.klp.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.mapper.BaseMapperPlus;
import com.klp.domain.WmsProcessCoilRecord;
import com.klp.domain.bo.WmsProcessCoilRecordBo;
import com.klp.domain.vo.WmsProcessCoilRecordVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 版本钢卷服役记录 Mapper
*/
public interface WmsProcessCoilRecordMapper extends BaseMapperPlus<WmsProcessCoilRecordMapper, WmsProcessCoilRecord, WmsProcessCoilRecordVo> {
/** 带版本/规程名称的分页列表JOIN 查询) */
IPage<WmsProcessCoilRecordVo> selectVoPageJoin(Page<WmsProcessCoilRecordVo> page, @Param("bo") WmsProcessCoilRecordBo bo);
/** 带版本/规程名称的不分页列表 */
List<WmsProcessCoilRecordVo> selectVoListJoin(@Param("bo") WmsProcessCoilRecordBo bo);
}

View File

@@ -12,13 +12,20 @@ import java.util.List;
*/
public interface IWmsProcessCoilRecordService {
/** 分页列表,携带版本/规程名称JOIN */
TableDataInfo<WmsProcessCoilRecordVo> queryPageList(WmsProcessCoilRecordBo bo, PageQuery pageQuery);
List<WmsProcessCoilRecordVo> queryList(WmsProcessCoilRecordBo bo);
/** 按版本统计服役钢卷总数(含异常数) */
/** 按版本统计服役钢卷总数 */
long countByVersion(Long versionId);
/** 新增或更新(按 version_id + coil_id 唯一键) */
void upsert(WmsProcessCoilRecordBo bo);
/**
* 批量重绑:将指定钢卷的服役记录从旧版本迁移到新版本。
* oldVersionId 非空时先删除旧记录,再写入新版本记录。
*/
void batchRebind(List<String> coilIds, Long newVersionId, Long oldVersionId);
}

View File

@@ -13,6 +13,7 @@ import com.klp.mapper.WmsProcessCoilRecordMapper;
import com.klp.service.IWmsProcessCoilRecordService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -27,13 +28,13 @@ public class WmsProcessCoilRecordServiceImpl implements IWmsProcessCoilRecordSer
@Override
public TableDataInfo<WmsProcessCoilRecordVo> queryPageList(WmsProcessCoilRecordBo bo, PageQuery pageQuery) {
Page<WmsProcessCoilRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(bo));
return TableDataInfo.build(result);
Page<WmsProcessCoilRecordVo> page = pageQuery.build();
return TableDataInfo.build(baseMapper.selectVoPageJoin(page, bo));
}
@Override
public List<WmsProcessCoilRecordVo> queryList(WmsProcessCoilRecordBo bo) {
return baseMapper.selectVoList(buildQueryWrapper(bo));
return baseMapper.selectVoListJoin(bo);
}
@Override
@@ -60,6 +61,24 @@ public class WmsProcessCoilRecordServiceImpl implements IWmsProcessCoilRecordSer
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void batchRebind(List<String> coilIds, Long newVersionId, Long oldVersionId) {
for (String coilId : coilIds) {
if (oldVersionId != null) {
baseMapper.delete(Wrappers.<WmsProcessCoilRecord>lambdaQuery()
.eq(WmsProcessCoilRecord::getVersionId, oldVersionId)
.eq(WmsProcessCoilRecord::getCoilId, coilId));
}
WmsProcessCoilRecordBo bo = new WmsProcessCoilRecordBo();
bo.setVersionId(newVersionId);
bo.setCoilId(coilId);
bo.setHasAnomaly(0);
bo.setAnomalyCnt(0);
upsert(bo);
}
}
private LambdaQueryWrapper<WmsProcessCoilRecord> buildQueryWrapper(WmsProcessCoilRecordBo bo) {
LambdaQueryWrapper<WmsProcessCoilRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getVersionId() != null, WmsProcessCoilRecord::getVersionId, bo.getVersionId());

View File

@@ -18,4 +18,58 @@
<result property="remark" column="remark"/>
</resultMap>
<resultMap type="com.klp.domain.vo.WmsProcessCoilRecordVo" id="WmsProcessCoilRecordVoJoinResult">
<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="createTime" column="create_time"/>
<result property="remark" column="remark"/>
<result property="versionCode" column="version_code"/>
<result property="isActive" column="is_active"/>
<result property="versionStatus" column="version_status"/>
<result property="specId" column="spec_id"/>
<result property="specCode" column="spec_code"/>
<result property="specName" column="spec_name"/>
</resultMap>
<sql id="joinSpec">
FROM wms_process_coil_record r
LEFT JOIN wms_process_spec_version v ON r.version_id = v.version_id AND v.del_flag = 0
LEFT JOIN wms_process_spec s ON v.spec_id = s.spec_id AND s.del_flag = 0
WHERE r.del_flag = 0
<if test="bo.versionId != null">
AND r.version_id = #{bo.versionId}
</if>
<if test="bo.coilId != null and bo.coilId != ''">
AND r.coil_id LIKE CONCAT('%', #{bo.coilId}, '%')
</if>
<if test="bo.enCoilId != null and bo.enCoilId != ''">
AND r.en_coil_id LIKE CONCAT('%', #{bo.enCoilId}, '%')
</if>
<if test="bo.hasAnomaly != null">
AND r.has_anomaly = #{bo.hasAnomaly}
</if>
ORDER BY r.process_time DESC
</sql>
<select id="selectVoPageJoin" resultMap="WmsProcessCoilRecordVoJoinResult">
SELECT r.record_id, r.version_id, r.coil_id, r.en_coil_id,
r.has_anomaly, r.anomaly_cnt, r.process_time, r.create_time, r.remark,
v.version_code, v.is_active, v.status AS version_status,
s.spec_id, s.spec_code, s.spec_name
<include refid="joinSpec"/>
</select>
<select id="selectVoListJoin" resultMap="WmsProcessCoilRecordVoJoinResult">
SELECT r.record_id, r.version_id, r.coil_id, r.en_coil_id,
r.has_anomaly, r.anomaly_cnt, r.process_time, r.create_time, r.remark,
v.version_code, v.is_active, v.status AS version_status,
s.spec_id, s.spec_code, s.spec_name
<include refid="joinSpec"/>
</select>
</mapper>