Files
klp-oa/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java
Joshi 31648431c8 feat(wms): 完善钢卷操作完成接口功能
- 在completeAction方法中添加newCoilIds参数支持
- 修改updateByBo方法返回值为String类型,支持返回新钢卷ID
- 添加分卷时返回逗号分隔的ID字符串,合卷时返回单个ID的功能
- 在操作完成时记录processedCoilIds信息
- 优化异常处理和返回值验证逻辑
2026-04-15 14:31:27 +08:00

268 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.service;
import com.klp.domain.vo.*;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.domain.bo.WmsMaterialCoilReportSummaryBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.klp.domain.vo.dashboard.CoilTrimStatisticsVo;
import com.klp.domain.vo.dashboard.CategoryWidthStatisticsVo;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
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);
/**
* 查询钢卷物料表列表(包含发货单明细绑定信息)
*/
TableDataInfo<WmsMaterialCoilBindVo> queryPageListWithBindInfo(WmsMaterialCoilBo bo, PageQuery pageQuery);
/**
* 查询钢卷物料表列表
*/
List<WmsMaterialCoilVo> queryList(WmsMaterialCoilBo bo);
/**
* 新增钢卷物料表
*/
WmsMaterialCoilVo insertByBo(WmsMaterialCoilBo bo);
/**
* 修改钢卷物料表
* 如果newCoils不为空则进行批量更新分卷/合卷)
* 如果newCoils为空则进行单个更新
* @return 单个更新或合卷时返回新钢卷ID分卷时返回逗号分隔的新钢卷ID字符串
*/
String updateByBo(WmsMaterialCoilBo bo);
/**
* 合卷操作
* 在批量更新逻辑的基础上为newCoils中的每个被合的卷加入actionId和actionType
* 如果传递了actionId则更新操作记录状态为已完成并设置完成时间和合卷后的钢卷ID到processedCoilIds
* 如果未传actionId则创建新的操作记录
*/
Boolean mergeCoils(WmsMaterialCoilBo bo);
/**
* 简单更新钢卷物料表
* 直接更新属性内容,不进行历史记录处理
*/
Boolean updateSimple(WmsMaterialCoilBo bo);
/**
* 校验并批量删除钢卷物料表信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 钢卷溯源查询
* 根据钢卷ID查询二维码解析content中的steps然后根据steps中的钢卷号反向查询数据库
*
* @param coilId 钢卷ID
* @param currentCoilNo 当前钢卷号(可选,用于查询特定子钢卷)
* @return 溯源结果(包含二维码信息和数据库记录)
*/
Map<String, Object> queryTrace(Long coilId, String currentCoilNo);
/**
* 查询各个库区中不同类型的钢卷分布情况
* 按库区分组统计每种物品类型和物品ID的钢卷数量和重量
*
* @param itemType 物品类型(可选)
* @param itemId 物品ID可选
* @return 分布情况列表包含库区信息、物品类型、物品ID、数量、重量等
*/
List<WmsMaterialCoilVo> getDistributionByWarehouse(String itemType, Long itemId);
/**
* 查询不同类型的钢卷在不同库区的分布情况
* 按物品类型和物品ID分组统计每个库区的钢卷数量和重量
*
* @param itemType 物品类型(可选)
* @param itemId 物品ID可选
* @return 分布情况列表包含物品类型、物品ID、库区信息、数量、重量等
*/
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);
/**
* 发货报表导出数据列表(按 coilIds
*
* @param bo 查询条件(前端通过 POST 传 coilIds
* @return 发货报表导出数据列表
*/
List<WmsMaterialCoilDeliveryExportVo> queryDeliveryExportList(WmsMaterialCoilBo bo);
/**
* 按“所在库区 + 当前钢卷号”精确查询钢卷质量状态(用于良品/次品口径判定)。
*
* 说明:
* - 仅匹配 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);
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 coilId 钢卷ID修改时传入用于排除自身
* @param enterCoilNo 入场钢卷号
* @param currentCoilNo 当前钢卷号
* @param supplierCoilNo 厂家原料卷号
* @return 返回结果Map包含
* - duplicateType: "enter" (入场钢卷号重复), "current" (当前钢卷号重复), "supplier" (厂家原料卷号重复), "both" (都重复), "none" (都不重复)
* - enterCoilNoDuplicate: 入场钢卷号是否重复 (true/false)
* - currentCoilNoDuplicate: 当前钢卷号是否重复 (true/false)
* - supplierCoilNoDuplicate: 厂家原料卷号是否重复 (true/false)
*/
Map<String, Object> checkCoilNoDuplicate(Long coilId, String enterCoilNo, String currentCoilNo, String supplierCoilNo);
/**
* 根据入场钢卷号前缀查询最大的入场钢卷号
* 前端传入入场钢卷号的前四位,查询所有符合的入场钢卷号,返回最大值
*
* @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, Integer actionType);
/**
* 特殊分卷 - 第二步:逐个创建子钢卷
* 生成单个子钢卷并更新二维码信息,不设置母卷为历史数据
*
* @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);
List<CoilTrimStatisticsVo> getCoilTrimStatistics();
List<CategoryWidthStatisticsVo> getCategoryWidthStatistics();
WmsMaterialCoilVo returnCoil(@NotNull(message = "钢卷ID不能为空") Long coilId);
/**
* 原料钢卷库位分布查询:先返回库位,再返回该库位下钢卷
*/
WmsMaterialCoilLocationGridVo queryLocationGrid(Long actualWarehouseId,
String itemType,
String enterCoilNo,
String currentCoilNo,
String manufacturer);
List<WmsMaterialCoilAllExportVo> queryExportListAll(WmsMaterialCoilBo bo);
/**
* 报表汇总(待操作条件 + 钢卷条件)
*/
WmsMaterialCoilReportSummaryVo reportSummary(WmsMaterialCoilReportSummaryBo bo);
/**
* 查询itemId和itemType不匹配的钢卷
* 检查所有钢卷的itemId是否存在于对应的表中根据itemType
* 返回所有不匹配的钢卷记录
*
* @return 不匹配的钢卷列表
*/
List<WmsMaterialCoilVo> queryMismatchedItemCoils();
}