package com.sy.coinage.workshop.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sy.coinage.app.req.BindReq;
import com.sy.coinage.app.req.HalfBindReq;
import com.sy.coinage.core.vo.CacheUserVO;
import com.sy.coinage.workshop.model.*;
import com.sy.coinage.workshop.req.*;
import com.sy.coinage.workshop.vo.*;

import java.util.Date;

/**
 * -Irfid基础信息登记表Service
 */
public interface IBaseInfoService extends IService<BaseInfo> {
    /**
     * @param rfid
     * @return
     */
    BaseInfo getByRfid(String rfid);

    /**
     * @param rfid
     * @param status 生命周期状态:1初始登记 2:车间入库 3:车间出库 4:总库入库  5:主库抽检出库 6.车间抽检入库确认 7.车间抽检出库8 主库抽检返回确认 9返检总库出库 10:返检车间确认 11拆包 12：已发货 13:返回机台
     * @return
     */
    BaseInfo getByRfid(String rfid, Integer status);


    /**
     * @param securitiesId
     * @param deptId
     * @param status       生命周期状态:1初始登记 2:车间入库 3:车间出库 4:总库入库  5:主库抽检出库 6.车间抽检入库确认 7.车间抽检出库8 主库抽检返回确认
     *                     9返检总库出库 10:返检车间确认 11拆包 12：已发货 13:返回机台
     * @return
     */
    BaseInfo getBySecuritiesId(Integer securitiesId, Integer deptId, Integer status);

    BaseInfo getBySerialNumber(String serialNumber, Integer status);

    BaseInfo getBySerialNumberDesc(String serialNumber, Integer status);

    void halfBind(HalfBindReq req, CacheUserVO user);

    void bind(BindReq req, CacheUserVO user);

    void add(BaseInfoReq model, CacheUserVO user);

    /**
     * 修改抽检状态
     *
     * @param rfid
     * @param oldStatus   原状态
     * @param newStatus   新状态
     * @param now         时间
     * @param checkStatus 抽检状态
     * @return
     */
    BaseInfo updateCheckStatus(String rfid, Integer oldStatus, Integer newStatus, Date now, Integer checkStatus);

    /**
     * 修改返检状态
     *
     * @param rfid
     * @param oldStatus 原状态
     * @param newStatus 新状态
     * @param now       时间
     * @return
     */
    BaseInfo updateReturnCheckStatus(String rfid, Integer oldStatus, Integer newStatus, Date now);

    /**
     * 修改在车间的状态
     *
     * @param rfid
     * @param oldStatus
     * @param newStatus
     * @return
     */
    BaseInfo updateWorkShopStatus(String serialNumber, String rfid, Integer oldStatus, Integer newStatus, Integer wareId
            , Integer areaId, Integer deptId, String dept);

    IPage<BaseInfo> queryPageList(Page<BaseInfo> page, LambdaQueryWrapper<BaseInfo> queryWrapper);

    void print(Integer id, CacheUserVO user);

    /**
     * 打印空白标签
     */
    void printBlankTag();

    /**
     * 自动打印
     * @param model
     */
    void autoPrint(BaseInfo model);

    BaseInfo getByCrown(Integer securitiesId, String crown);

    BaseInfo getLast(Integer deptId);


    /**
     * 修改冠字号相关信息，主要是根据号段，顺序序号，来更新
     * @param req
     */
    void updateRfidInfo(BaseInfoReq req);
}
