Files
klp-oa/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java

227 lines
8.3 KiB
Java
Raw Normal View History

2025-10-28 12:20:20 +08:00
package com.klp.service;
import com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo;
2025-10-28 12:20:20 +08:00
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
2025-12-02 13:28:52 +08:00
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
2025-10-28 12:20:20 +08:00
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 钢卷物料表Service接口
*
* @author Joshi
* @date 2025-07-18
*/
public interface IWmsMaterialCoilService {
/**
* 查询钢卷物料表
*/
WmsMaterialCoilVo queryById(Long coilId);
/**
* 查询钢卷物料表列表
*/
TableDataInfo<WmsMaterialCoilVo> queryPageList(WmsMaterialCoilBo bo, PageQuery pageQuery);
/**
* 查询钢卷物料表列表
*/
List<WmsMaterialCoilVo> queryList(WmsMaterialCoilBo bo);
/**
* 新增钢卷物料表
*/
WmsMaterialCoilVo insertByBo(WmsMaterialCoilBo bo);
2025-10-28 12:20:20 +08:00
/**
* 修改钢卷物料表
* 如果newCoils不为空则进行批量更新分卷/合卷
* 如果newCoils为空则进行单个更新
*/
Boolean updateByBo(WmsMaterialCoilBo bo);
/**
* 简单更新钢卷物料表
* 直接更新属性内容不进行历史记录处理
*/
Boolean updateSimple(WmsMaterialCoilBo bo);
/**
* 校验并批量删除钢卷物料表信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 钢卷溯源查询
* 根据钢卷ID查询二维码解析content中的steps然后根据steps中的钢卷号反向查询数据库
2025-10-28 12:20:20 +08:00
*
* @param coilId 钢卷ID
2025-10-28 12:20:20 +08:00
* @param currentCoilNo 当前钢卷号可选用于查询特定子钢卷
* @return 溯源结果包含二维码信息和数据库记录
*/
Map<String, Object> queryTrace(Long coilId, String currentCoilNo);
2025-10-29 14:13:06 +08:00
/**
* 查询各个库区中不同类型的钢卷分布情况
2025-10-29 14:40:09 +08:00
* 按库区分组统计每种物品类型和物品ID的钢卷数量和重量
2025-10-29 14:13:06 +08:00
*
2025-10-29 14:40:09 +08:00
* @param itemType 物品类型可选
* @param itemId 物品ID可选
* @return 分布情况列表包含库区信息物品类型物品ID数量重量等
2025-10-29 14:13:06 +08:00
*/
2025-10-29 14:40:09 +08:00
List<WmsMaterialCoilVo> getDistributionByWarehouse(String itemType, Long itemId);
2025-10-29 14:13:06 +08:00
/**
* 查询不同类型的钢卷在不同库区的分布情况
2025-10-29 14:40:09 +08:00
* 按物品类型和物品ID分组统计每个库区的钢卷数量和重量
2025-10-29 14:13:06 +08:00
*
2025-10-29 14:40:09 +08:00
* @param itemType 物品类型可选
* @param itemId 物品ID可选
* @return 分布情况列表包含物品类型物品ID库区信息数量重量等
2025-10-29 14:13:06 +08:00
*/
2025-10-29 14:40:09 +08:00
List<WmsMaterialCoilVo> getDistributionByItemType(String itemType, Long itemId);
List<WmsMaterialCoilVo> getDistributionByActualWarehouse(String itemType, Long itemId);
List<WmsMaterialCoilVo> getDistributionByActualItemType(String itemType, Long itemId);
/**
* 查询钢卷导出数据列表
*
* @param bo 查询条件
* @return 导出数据列表
*/
List<com.klp.domain.vo.WmsMaterialCoilExportVo> queryExportList(WmsMaterialCoilBo bo);
2025-12-02 13:28:52 +08:00
/**
* 发货报表导出数据列表 coilIds
*
* @param bo 查询条件前端通过 POST coilIds
* @return 发货报表导出数据列表
*/
List<WmsMaterialCoilDeliveryExportVo> queryDeliveryExportList(WmsMaterialCoilBo bo);
2026-01-30 17:37:27 +08:00
/**
* 所在库区 + 当前钢卷号精确查询钢卷质量状态用于良品/次品口径判定
*
* 说明
* - 仅匹配 data_type=1 del_flag=0 的当前有效数据
* - 若匹配不到返回 null调用方按忽略不计处理
*
* @param warehouseId 所在库区IDwms_material_coil.warehouse_id
* @param currentCoilNo 当前钢卷号wms_material_coil.current_coil_no
* @return qualityStatus "C+","C","C-","D+","D","D-" null
*/
String queryQualityStatusByWarehouseIdAndCurrentCoilNo(Long warehouseId, String currentCoilNo);
2025-12-02 13:28:52 +08:00
int exportCoil(@NotEmpty(message = "主键不能为空") Long coilId);
Boolean batchUpdateDeliveryStatus(List<Long> coilIdList, Integer status);
/**
* 根据更新前的钢卷ID列表获取更新后的钢卷ID列表
*
* @param oldCoilIds 更新前的钢卷ID列表
* @return 更新后的钢卷ID列表
*/
Map<Long, String> getUpdatedCoilIdsByOldCoilIds(List<Long> oldCoilIds);
int withdrawExportCoil(@NotNull(message = "主键不能为空") Long coilId);
/**
* 检查钢卷号是否重复
* 根据入场钢卷号和当前钢卷号查询数据库判断哪个钢卷号重复
*
* @param enterCoilNo 入场钢卷号
* @param currentCoilNo 当前钢卷号
* @return 返回结果Map包含
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "both" (都重复), "none" (都不重复)
* - enterCoilNoDuplicate: 入场钢卷号是否重复 (true/false)
* - currentCoilNoDuplicate: 当前钢卷号是否重复 (true/false)
*/
Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo);
/**
* 根据入场钢卷号前缀查询最大的入场钢卷号
* 前端传入入场钢卷号的前四位查询所有符合的入场钢卷号返回最大值
*
* @param enterCoilNoPrefix 入场钢卷号前缀前四位
* @return 返回结果Map包含
* - maxEnterCoilNo: 最大的入场钢卷号
* - prefix: 前缀值
*/
Map<String, Object> getMaxEnterCoilNoByPrefix(String enterCoilNoPrefix);
/**
* 查询data_type=1时的重复钢卷分组
* 将入场钢卷号重复的分为一组将当前钢卷号重复的分为一组
* 返回结构
* {
* enterGroups: [ { enterCoilNo: "xxx", coils: [WmsMaterialCoilVo...] }, ...],
* currentGroups: [ { currentCoilNo: "yyy", coils: [WmsMaterialCoilVo...] }, ...]
* }
*/
Map<String, Object> getDuplicateCoilGroups();
/**
* 回滚钢卷操作
* 根据当前钢卷ID找到历史钢卷并恢复删除当前钢卷
* 用于撤销单个更新合卷或分卷操作
*
* @param currentCoilId 当前钢卷ID需要回滚的钢卷
* @return 操作结果包含恢复的历史钢卷信息
*/
Map<String, Object> rollbackCoil(@NotNull(message = "当前钢卷ID不能为空") Long currentCoilId);
/**
* 特殊分卷 - 第一步锁定钢卷
* 设置钢卷独占状态
*
* @param coilId 被分卷的钢卷ID
* @return 待操作记录ID
*/
Boolean startSpecialSplit(@NotNull(message = "钢卷ID不能为空") Long coilId);
/**
* 特殊分卷 - 第二步逐个创建子钢卷
* 生成单个子钢卷并更新二维码信息不设置母卷为历史数据
*
* @param parentCoilId 母卷ID
* @param childCoilBo 子钢卷数据
* @param pendingActionId 待操作记录ID
* @return 创建的子钢卷信息
*/
WmsMaterialCoilVo createChildCoilInSpecialSplit(@NotNull(message = "母卷ID不能为空") Long parentCoilId,
@NotNull(message = "子钢卷数据不能为空") WmsMaterialCoilBo childCoilBo,
@NotNull(message = "待操作记录ID不能为空") Long pendingActionId);
/**
* 特殊分卷 - 第三步完成分卷操作
* 批量更新二维码追溯信息设置母卷为历史数据解除独占状态
*
* @param pendingActionId 待操作记录ID
* @return 操作结果
*/
Map<String, Object> completeSpecialSplit(@NotNull(message = "待操作记录ID不能为空") Long pendingActionId);
Map<String, Object> cancelSpecialSplit(@NotNull(message = "待操作记录ID不能为空") Long pendingActionId);
/**
* 钢卷退货操作
* 将钢卷退货到退货仓创建新钢卷记录将原钢卷设置为历史钢卷
*
* @param coilId 原钢卷ID
* @return 退货后的新钢卷信息
*/
WmsMaterialCoilVo returnCoil(@NotNull(message = "钢卷ID不能为空") Long coilId);
2025-10-28 12:20:20 +08:00
}