package com.kingdee.eas.custom.esign.service;


import com.kingdee.bos.util.BOSObjectType;
import com.kingdee.bos.util.BOSUuid;


/**
 * 入职薪酬取数
 * @author coyle
 * 202602
 */
public class OnboardingSalaryDataService extends OtherESignConfigDataService {
	public String getSql(String id) {
    	StringBuilder sql = new StringBuilder();
    	
    	// -------------------------- SELECT子句 --------------------------
    	// 基础字段：人员姓名、身份证号、甲方名称、入职日期
    	// 薪资计算字段：固定工资、试用期固定工资、绩效奖金、各类补贴（均为税前）
    	sql.append("SELECT \n");
    	sql.append("    person.FNAME_L2 AS person_name ,\n");
    	sql.append("    person.FIDCardNO AS idcard ,\n");
    	sql.append("    firstParty.FName_l2 as firstPartyName ,\n");
    	sql.append("    elation.FEnterDate AS eDate ,\n");
    	// 1. 固定工资（税前）= 标准基本工资+综合工资+其他工资+加班工资
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS fixed_salary ,\n");
    	// 2. 试用期固定工资（税前）= 标准基本工资+综合工资+其他工资+加班工资
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02') THEN fas.FMoney ELSE 0 END), 0) AS prob_fixed_salary ,\n");
    	// 3. 绩效奖金（税前）= 标准绩效奖金
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD04' THEN fas.FMoney ELSE 0 END), 0) AS perf_bonus ,\n");
    	// 4. 试用期绩效奖金（税前）= 试用期标准绩效奖金
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD74' THEN fas.FMoney ELSE 0 END), 0) AS prob_perf_bonus ,\n");
    	// 5. 国内餐补 = 餐补补贴
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'T014' THEN fas.FMoney ELSE 0 END), 0) AS domestic_meal_subsidy ,\n");
    	// 6. 艰苦补贴 = 艰苦补贴
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD05' THEN fas.FMoney ELSE 0 END), 0) AS hardship_subsidy ,\n");
    	// 7. 社保公积金补贴 = 社保公积金补贴
    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'TD101' THEN fas.FMoney ELSE 0 END), 0) AS social_fund \n");
    	
    	// -------------------------- FROM子句 --------------------------
    	// 表关联逻辑：
    	// 1. T_bd_Person（人员表）关联T_HR_EmpLaborRelation（用工关系表）：取入职日期
    	// 2. 人员表关联T_HR_SFixAdjustSalary（固定薪资调整表）：取薪资金额
    	// 3. 薪资表关联T_HR_SCmpItem（薪资项目表）：按薪资项目编码过滤
    	// 4. 人员表关联T_HR_EmployeeContract（员工合同表）：关联甲方信息
    	// 5. 合同表关联T_HR_LabContractFirstParty（合同甲方表）：取甲方名称
    	sql.append("FROM \n");
    	sql.append("    T_bd_Person person \n");
    	sql.append("LEFT JOIN T_HR_EmpLaborRelation elation on person.fid = elation.FPersonID \n");
    	sql.append("LEFT JOIN T_HR_SFixAdjustSalary fas ON person.FID = fas.FPersonID\n");
    	sql.append("LEFT JOIN T_HR_SCmpItem sitem ON fas.FCmpItemID = sitem.FID\n");
    	sql.append("LEFT JOIN T_HR_EmployeeContract econtract on econtract.FEmployeeID = person.FID\n");
    	sql.append("LEFT JOIN T_HR_LabContractFirstParty firstParty on econtract.FContFirstPartyID = firstParty.FID \n");
    	
 
    	sql.append("WHERE \n");
    	sql.append("    sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T014', 'TD05', 'TD101') \n");
    	sql.append("    and fas.FLeffectDay = '2199-12-31 00:00:00' \n");
        
        BOSUuid read = BOSUuid.read(id);
        BOSObjectType type = read.getType();
    	 if (type.toString().equals("7BD37592")){//id类型为合同
         	sql.append("and  person.fid  in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')" ) ;
         }else  if (type.toString().equals("80EF7DED")){//id类型为员工felse
         	sql.append("and person.fid = '"+id+"'");
         }
    	sql.append("GROUP BY \n");
    	sql.append("    person.FID, person.FNAME_L2 , elation.FEnterDate , person.FIDCardNO , firstParty.FName_l2 \n");
    	
    	// -------------------------- ORDER BY子句 --------------------------
    	// 排序规则：按人员姓名升序排列
    	sql.append("ORDER BY \n");
    	sql.append("    person.FNAME_L2");
    	
    	System.out.print("osfsql"+sql.toString());
    	return sql.toString();
    }
//	/**
//     * 执行SQL查询并将结果封装为JSON对象
//     *
//     * @param sql     要执行的查询SQL
//     * @param context 上下文对象
//     * @param entrys  字段映射明细集合
//     * @return 封装后的JSON对象，包含电子签模板各字段信息
//     */
//    public JSONObject getData(String sql, Context context, FieldMappingEntryCollection entrys) {
//        // 创建JSON对象用于存储最终封装的数据
//        JSONObject jsonObject = new JSONObject();
//        try {
//            // 执行SQL查询，获取结果集
//            IRowSet iRowSet1 = DBUtil.executeQuery(context, sql);
//            // 遍历结果集中的每一行数据
//				while (iRowSet1.next()) {
//				    // 遍历每个字段映射明细项
//				    for (int i = 0; i < entrys.size(); i++) {
//				        // 获取当前索引对应的字段映射明细信息
//				        FieldMappingEntryInfo fieldMappingEntryInfo = entrys.get(i);
//				        // 获取明细项中关联的电子签模板字段信息
//				        ESignTemplateFileEntryFieldInfo eField = fieldMappingEntryInfo.getEField();
//				        // 判断该字段是否无效（已废弃）
//				        boolean invalid = eField.isInvalid();
//				        // 若字段无效，跳过当前循环（不处理）
//				        if (invalid) {
//				            continue;
//				        }
//				        // 获取明细项中关联的电子签模板明细信息
//				        ESignTemplateFileEntryInfo template = fieldMappingEntryInfo.getTemplate();
//				        // 获取电子签模板的ID
//				        String eSignTemplateId = template.getESignTemplateId();
//				        // 从JSON对象中获取该模板ID对应的子JSON对象
//				        JSONObject templateJSON = jsonObject.getJSONObject(eSignTemplateId);
//				        // 若模板对应的子JSON对象不存在，则创建并初始化（设置ID和名称）
//				        if (templateJSON == null) {
//				            templateJSON = new JSONObject();
//				            templateJSON.put("id", eSignTemplateId); // 设置模板ID
//				            templateJSON.put("name", template.getName()); // 设置模板名称
//				            jsonObject.put(eSignTemplateId, templateJSON); // 将模板信息存入主JSON对象
//				        }
//				        // 从模板子JSON对象中获取字段信息对应的子JSON对象
//				        JSONObject fields = templateJSON.getJSONObject("fields");
//				        // 若字段信息子JSON对象不存在，则创建并添加到模板子JSON中
//				        if (fields == null) {
//				            fields = new JSONObject();
//				            templateJSON.put("fields", fields);
//				        }
//				        // 获取电子签模板字段的ID
//				        String templateFieldId = eField.getTemplateFieldId();
//				        // 创建用于存储字段值信息的JSON对象
//				        JSONObject value = new JSONObject();
//				        value.put("name", eField.getTemplateFieldName()); // 设置字段名称
//				        // 获取明细项中关联的数据源字段信息
//				        //DataConfigSelectFieldEntryInfo dataSourceField = fieldMappingEntryInfo.getDataSourceField();
////                    if (dataSourceField==null){
////                        value.put("value","");
////                        value.put("dataFormat", eField.getDataFormat());
////                    }else {
//				        // 获取数据源字段的映射键（对应数据库列名）
//				        String name = fieldMappingEntryInfo.getEFieldMark();
//				        // 去除映射键中的双引号（处理可能的格式问题）
//				        //name = name.replace("\"", "");
//				        // 从结果集中获取该字段对应的值，并存入字段值JSON对象
//				        if (name != null && !name.equals("")) {
//				            try {
//								value.put("value", iRowSet1.getObject(name));
//							} catch (SQLException e) {
//								e.printStackTrace();
//							}
//				        }
//				        // 设置字段的数据类型（取自数据源字段的类型别名）
//				        //value.put("dataType", dataSourceField.getDataType().getAlias());
////                    if (dataSourceField.getDataType().getAlias().equals("Date")) {
////                        Object object = iRowSet1.getObject(name);
////                        if (object != null) {
////                            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
////                            value.put("value", simpleDateFormat.format(iRowSet1.getDate(name)));
////                        }
////                        value.put("dataFormat", eField.getDataFormat());
////                    }
//				        //}
//				        if (eField.getComponentType().getValue() == 6 || eField.getComponentType().getValue() == 106) {
//				            value.put("positionX", eField.getPositionX());
//				            value.put("positionY", eField.getPositionY());
//				            value.put("pageNum", eField.getPageNum());
//				        }
//				        // 将字段值信息存入字段信息子JSON对象（以模板字段ID为键）
//				        fields.put(templateFieldId, value);
//				    }
//				}
//
//
//        } catch (BOSException e) {
//            // BOS异常时，封装为运行时异常抛出
//            throw new RuntimeException(e);
//        } catch (SQLException e) {
//            // SQL异常时，封装为运行时异常抛出
//            throw new RuntimeException(e);
//        }
//        // 返回封装好的JSON对象
//        return jsonObject;
//    }

     
}
