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

import cn.estsh.i3plus.ext.mes.pcn.pojo.model.SxThirdPartyDbCollectDataModel;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import io.swagger.annotations.ApiOperation;

import java.util.List;
import java.util.Map;

/**
 * @Author: wangjie
 * @CreateDate: 2021/01/18 11:22 上午
 * @Description:
 **/
public interface ISxThirdPartyDbCollectDataDispatchService {

    /**
     * 验证是否配置固定字段
     * @param collect 数据对象
     * @param fieldValue 字段
     * @param field 字段配置代码
     * @param fieldName 字段名称
     * @return 结果
     */
    @ApiOperation(value = "验证是否配置固定字段", notes = "验证是否配置固定字段")
    default Boolean checkFieldIsNull(SxThirdPartyDbCollectDataModel collect, String fieldValue, String field, String fieldName) { return true; }

    /**
     * 验证必要字段数组是否配置在对象结构集合中
     * @param collect 数据对象
     * @param arr 必要字段数组
     * @param fieldCodeList 对象结构集合
     * @param field 字段配置代码
     * @return 结果
     */
    @ApiOperation(value = "验证必要字段数组是否配置在对象结构集合中", notes = "验证必要字段数组是否配置在对象结构集合中")
    default Boolean checkFieldIsExistObjectCfg(SxThirdPartyDbCollectDataModel collect, String[] arr, List<String> fieldCodeList, String field) { return true; }

    /**
     * 分解条码字段
     * @param snField 条码拼接字段
     * @return 条码字段数组
     */
    @ApiOperation(value = "分解条码字段", notes = "分解条码字段")
    default String[] getArr(String snField) { return null; }

    /**
     * 解析条码
     *
     * @param map     数据集
     * @param snField 条码字段
     */
    @ApiOperation(value = "解析条码", notes = "解析条码")
    default String assembleSn(Map<String, Object> map, String snField) { return null; }

    /**
     * 反射写入动态数据
     * @param collect 数据对象
     * @param map 数据集
     * @param obj 目标对象
     */
    @ApiOperation(value = "反射写入动态数据", notes = "反射写入动态数据")
    default void packDynamicsField(SxThirdPartyDbCollectDataModel collect, Map<String, Object> map, Object obj) {}

    /**
     * 反射写入默认数据
     * @param collect 数据对象
     * @param baseBean 目标对象
     */
    @ApiOperation(value = "反射写入默认数据", notes = "反射写入默认数据")
    default void packDefaultField(SxThirdPartyDbCollectDataModel collect, BaseBean baseBean) {}

    /**
     * 反射写入数据
     * @param obj 目标对象
     * @param fieldName 目标字段
     * @param value 值
     */
    @ApiOperation(value = "反射写入数据", notes = "反射写入数据")
    default void setObjectAttr(Object obj, String fieldName, Object value) {}

    /**
     * 业务字段通过自定义方法写入数据
     * @param collect 数据对象
     * @param obj 目标对象
     */
    default void execMethodField(SxThirdPartyDbCollectDataModel collect, Object obj) {}

    /**
     * 保存对等同步数据
     * @param collect 数据对象
     * @return 结果
     */
    default Boolean saveParitySyncData(SxThirdPartyDbCollectDataModel collect) { return true; }

}
