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

import cn.estsh.i3plus.ext.mes.pojo.bean.MesPartExt;
import cn.estsh.i3plus.ext.mes.pojo.model.MatchRuleCodeModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProductEncodeCfg;
import io.swagger.annotations.ApiOperation;

/**
 * @Author: wangjie
 * @CreateDate: 2021/01/19 15:06 下午
 * @Description: 编码规则
 **/
public interface IProductEncodeCfgExtService {

    /**
     * 按条件分页查询产品编码配置信息
     *
     * @param productEncodeCfg    产品编码配置
     * @param pager               分页条件
     * @return 分页数据
     */
    @ApiOperation(value = "按条件分页查询产品编码配置信息", notes = "按条件分页查询产品编码配置信息")
    ListPager<MesProductEncodeCfg> queryMesProductEncodeCfgByPager(MesProductEncodeCfg productEncodeCfg, Pager pager);

    /**
     * 新增mes产品编码配置表信息
     *
     * @param productEncodeCfg 产品编码配置
     * @return 新增后的产品编码配置
     */
    @ApiOperation(value = "新增产品编码配置信息", notes = "新增产品编码配置信息")
    MesProductEncodeCfg insertMesProductEncodeCfg(MesProductEncodeCfg productEncodeCfg);

    /**
     * 更新产品编码配置表信息
     *
     * @param productEncodeCfg 产品编码配置
     * @return 更新后的产品编码配置
     */
    @ApiOperation(value = "更新产品编码配置信息", notes = "更新产品编码配置信息")
    MesProductEncodeCfg updateMesProductEncodeCfg(MesProductEncodeCfg productEncodeCfg);

    /**
     * 更新产品编码配置状态(启用、禁用)
     *
     * @param id       产品编码配置id
     * @param status   更新状态
     * @param userName 操作人
     * @return 操作行数
     */
    @ApiOperation(value = "更新产品编码配置状态(启用、禁用)", notes = "更新产品编码配置状态(启用、禁用)")
    int updateMesProductEncodeCfgStatusById(Long id, int status, String userName);

    /**
     * 获取编码规则
     * @param organizeCode 组织代码
     * @param codeType 编码类型
     * @param partDb 物料信息
     * @param workCenterCode 生产线代码
     * @return 编码规则代码
     */
    String getRuleCodeByMatchType(String organizeCode, Integer codeType, MesPartExt partDb, String workCenterCode);

    /**
     * 获取编码规则
     * @param matchRuleCodeModel 编码配置信息
     * @return 编码规则代码
     */
    @ApiOperation("获取编码规则")
    String getRuleCodeByMatchType(MatchRuleCodeModel matchRuleCodeModel);

    /**
     * 按条件分页查询产品编码配置信息
     *
     * @param productEncodeCfg    产品编码配置
     * @return 数据
     */
    @ApiOperation(value = "按条件查询产品编码配置信息", notes = "按条件查询产品编码配置信息")
    MesProductEncodeCfg getMesProductEncodeCfg(MesProductEncodeCfg productEncodeCfg);

}
