package com.klp.service; import com.klp.domain.vo.WmsCostCoilDailyVo; import com.klp.domain.bo.WmsCostCoilDailyBo; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.klp.domain.vo.WmsCostCoilDailyVo; import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; /** * 钢卷日成本记录表Service接口 * * @author klp * @date 2025-11-25 */ public interface IWmsCostCoilDailyService { /** * 查询钢卷日成本记录表 */ WmsCostCoilDailyVo queryById(Long costId); /** * 查询钢卷日成本记录表列表 */ TableDataInfo queryPageList(WmsCostCoilDailyBo bo, PageQuery pageQuery); /** * 查询钢卷日成本记录表列表 */ List queryList(WmsCostCoilDailyBo bo); /** * 新增钢卷日成本记录表 */ Boolean insertByBo(WmsCostCoilDailyBo bo); /** * 修改钢卷日成本记录表 */ Boolean updateByBo(WmsCostCoilDailyBo bo); /** * 校验并批量删除钢卷日成本记录表信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); /** * 实时计算指定钢卷的成本 * * @param coilId 钢卷ID(可选,不传则计算所有现存钢卷) * @param calcTime 计算时间点(可选,默认当前时间) * @return 成本计算结果 */ Map calculateCost(Long coilId, java.time.LocalDateTime calcTime); /** * 批量计算多个钢卷的成本 * * @param coilIds 钢卷ID列表 * @param calcTime 计算时间点(可选,默认当前时间) * @return 成本计算结果列表,每个元素包含一个钢卷的成本信息 */ List> batchCalculateCost(List coilIds, java.time.LocalDateTime calcTime); /** * 批量计算钢卷成本(定时任务使用) * * @param calcDate 计算日期(前一日) * @return 计算成功的数量 */ int calculateDailyCost(LocalDate calcDate); /** * 查询成本统计报表 * * @param startDate 开始日期 * @param endDate 结束日期 * @param groupBy 分组维度(warehouse/itemType/materialType) * @param warehouseId 库区ID(可选) * @return 统计结果 */ Map queryCostSummary(LocalDate startDate, LocalDate endDate, String groupBy, Long warehouseId); /** * 查询成本趋势分析 * * @param startDate 开始日期 * @param endDate 结束日期 * @return 趋势数据 */ List> queryCostTrend(LocalDate startDate, LocalDate endDate); /** * 按入场钢卷号维度计算成本 * 同一个入场钢卷号可能被分卷成多个钢卷,需要汇总计算 * 未发货的:计算到当日;已发货的:计算到发货前一天 * * @param enterCoilNo 入场钢卷号 * @param calcDate 计算日期(可选,默认当前日期) * @return 成本计算结果(包含各子卷明细和汇总) */ Map calculateCostByEnterCoilNo(String enterCoilNo, LocalDate calcDate); /** * 批量按入场钢卷号维度计算成本(定时任务使用) * 按入场钢卷号分组,计算每个入场钢卷号的总成本 * * @param calcDate 计算日期(可选,默认前一日) * @return 计算成功的入场钢卷号数量 */ int calculateDailyCostByEnterCoilNo(LocalDate calcDate); /** * 现算成本检索(基于 wms_material_coil) * * @param enterCoilNo 入场钢卷号(支持前缀匹配) * @param calcDate 计算日期(可选,默认当前日期) * @param pageNum 页码 * @param pageSize 每页条数 * @return 汇总与分页明细 */ Map searchMaterialCost(String enterCoilNo, LocalDate calcDate, int pageNum, int pageSize); /** * 查询按入场钢卷号统计的成本报表 * * @param startDate 开始日期 * @param endDate 结束日期 * @param enterCoilNo 入场钢卷号(可选,用于精确查询) * @return 统计结果列表 */ List> queryCostByEnterCoilNo(LocalDate startDate, LocalDate endDate, String enterCoilNo); /** * 成本模块首页概览数据 * 统计当前「现存且未发货」钢卷的总成本、总净重、总毛重以及平均在库天数 * * @return 概览数据:totalCost、totalNetWeight、totalGrossWeight、avgStorageDays、totalCoils */ Map queryOverview(); /** * 囤积成本页数据(后台统一计算) * * @param enterCoilNo 入场钢卷号(可选) * @param currentCoilNo 当前钢卷号(可选) * @param pageQuery 分页参数 * @return rows+total+summary 结果 */ Map queryStockpileCostList(String enterCoilNo, String currentCoilNo, PageQuery pageQuery); }