package cn.estsh.i3plus.ext.mes.api.base;

import cn.estsh.i3plus.ext.mes.pojo.bean.MesPartExt;
import cn.estsh.i3plus.ext.mes.pojo.model.MesPartExtModel;
import cn.estsh.i3plus.ext.mes.pojo.model.SxBatchUploadFileModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;


/**
 * @Description : MES物料服务
 * @Reference :
 * @Author : xiangming.liao
 * @CreateDate : 2020-02-21
 * @Modify:
 **/
public interface IPartExtDataService {

    /*************MES物料服务*****start***********/

    /**
     * 按条件分页查询物料信息
     *
     * @param part  物料信息
     * @param pager 分页条件
     * @return 分页数据
     */
    @ApiOperation(value = "按条件分页查询物料信息")
    ListPager<MesPartExtModel> queryMesPartExtByPager(MesPartExt part, Pager pager);

    /**
     * 新增mes物料信息
     *
     * @param part 物料信息
     * @param file 图片信息
     * @return 新增后的物料信息
     */
    @ApiOperation(value = "新增物料信息", notes = "新增物料信息")
    MesPartExt insertMesPartExt(MultipartFile file,MesPartExt part);

    /**
     * 更新物料信息
     *
     * @param part 物料信息
     * @return 更新后的物料信息
     */
    @ApiOperation(value = "更新物料信息", notes = "更新物料信息")
    MesPartExt updateMesPartExt(MultipartFile file,MesPartExt part);

    /**
     * 更新物料状态(启用、禁用)
     *
     * @param id       物料id
     * @param status   更新状态
     * @param userName 操作人
     */
    @ApiOperation(value = "更新物料状态(启用、禁用)")
    void updateMesPartExtStatusById(Long id, int status, String userName);

    /**
     * 批量上传物料文件
     * @param files 批量文件
     * @param lotNo 导入批次号
     * @param organizeCode 组织代码
     * @param userName 用户信息
     * @return 结果
     */
    @ApiOperation(value = "批量上传物料文件", notes = "批量上传物料文件")
    SxBatchUploadFileModel doBatchUploadPartFile(MultipartFile[] files, String lotNo, String organizeCode, String userName);

    /**
     * 新增物料字段变更履历
     * @param sourceData 源数据
     * @param newData 新数据
     * @param clazz 比较类
     */
    @ApiOperation(value = "新增物料字段变更履历", notes = "新增物料字段变更履历")
    void doRecordChangeData(MesPartExtModel sourceData, MesPartExtModel newData, Class clazz, List<String> fields);


    /**
     * 获取model对象
     * @param partExt
     * @return
     */
    MesPartExtModel getModel(MesPartExt partExt);
    /*************MES物料服务*****end***********/


}
