package com.kingdee.eas.custom.dataconfig.utils.service;

import com.alibaba.fastjson.JSONArray;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.Context;
import com.kingdee.bos.bsf.service.app.IHRMsfService;
import com.kingdee.bos.metadata.entity.EntityObjectInfo;
import com.kingdee.eas.common.EASBizException;
import com.kingdee.eas.custom.dataconfig.utils.SqlUtils;

import java.util.Map;

/**
 * 获取选择字段的服务类
 * 实现IHRMsfService接口，用于在金蝶EAS平台中处理获取指定实体选择字段的业务请求
 */
public class GetSelectFieldService implements IHRMsfService {
    /**
     * 处理业务请求的核心方法
     * 实现IHRMsfService接口的process方法，用于接收请求参数并返回处理结果
     * @param context 系统上下文对象，包含用户信息、会话等上下文数据
     * @param map 存放请求参数的Map集合，包含业务所需的输入参数
     * @return 处理结果，返回JSONArray类型的选择字段信息
     * @throws EASBizException 抛出EAS业务异常，用于处理业务逻辑错误
     * @throws BOSException 抛出BOS平台异常，用于处理平台级错误
     */
    @Override
    public Object process(Context context, Map map) throws EASBizException, BOSException {
        // 从请求参数map中获取键为"entryFull1"的值，该值通常代表实体的完整标识（如实体全路径）
        Object o = map.get("entryFull1");
        // 从请求参数map中获取键为"alias"的值，该值通常代表实体的别名（用于筛选字段）
        Object o1 = map.get("alias");

        // 判断"entryFull1"对应的参数是否为空
        if(o==null){
            // 若"entryFull1"为空，则抛出运行时异常，提示"编号不能为空"
            throw new RuntimeException("编号不能为空");
        }

        // 将"entryFull1"的参数值转换为字符串类型，便于后续使用
        String entryFull1 = o.toString();
        // 创建SqlUtils工具类的实例，用于调用其提供的工具方法
        SqlUtils sqlUtils = new SqlUtils();
        // 调用SqlUtils的getEntryInfo方法，根据实体完整标识和上下文获取实体对象信息（元数据）
        EntityObjectInfo entryInfo1 = sqlUtils.getEntryInfo(entryFull1, context);

        // 定义JSONArray类型的变量selectField，用于存储获取到的选择字段信息
        JSONArray selectField = null;

        // 判断"alias"对应的参数是否为空
        if (o1==null){
            // 若"alias"为空，则调用SqlUtils的getSelectField方法，传入实体信息和上下文，获取无别名筛选的选择字段
            selectField = sqlUtils.getSelectField(entryInfo1, null, context);
        }else {
            // 若"alias"不为空，则将其转换为字符串，调用SqlUtils的getSelectField方法，传入实体信息、别名和上下文，获取带别名筛选的选择字段
            selectField = sqlUtils.getSelectField(entryInfo1,o1.toString(),context);
        }

        // 返回获取到的选择字段信息（JSONArray类型）
        return selectField;
    }
}