Explorar o código

Merge branch 'master' of http://47.92.104.23:3000/LiuYing/tengda

9060 hai 2 meses
pai
achega
3e9281a703

+ 2 - 2
metadata/com/kingdee/eas/custom/esign/app/CT_ESI_ESignTemplateFields.table

@@ -113,7 +113,7 @@
             <isMultilingual>false</isMultilingual>
             <isEncoded>false</isEncoded>
             <isNullable>true</isNullable>
-            <defaultValue />
+            <defaultValue>0</defaultValue>
             <sqlType>INT</sqlType>
             <length>1</length>
             <scale>0</scale>
@@ -127,7 +127,7 @@
             <isMultilingual>false</isMultilingual>
             <isEncoded>false</isEncoded>
             <isNullable>true</isNullable>
-            <defaultValue />
+            <defaultValue>0</defaultValue>
             <sqlType>INT</sqlType>
             <length>1</length>
             <scale>0</scale>

+ 86 - 0
websrc/com/kingdee/eas/custom/esign/service/OnboardingSalaryDataService.java

@@ -0,0 +1,86 @@
+package com.kingdee.eas.custom.esign.service;
+
+ 
+
+
+
+/**
+ * 入职薪酬取数
+ * @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 = 'T025' THEN fas.FMoney ELSE 0 END), 0) AS domestic_meal_subsidy ,\n");
+    	// 6. 艰苦补贴 = 艰苦补贴
+    	sql.append("    ISNULL(SUM(CASE WHEN sitem.FNUMBER = 'T038' 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");
+    	
+    	// -------------------------- WHERE子句 --------------------------
+    	// 过滤条件:
+    	// 1. 薪资项目编码仅包含指定项(固定工资、绩效、补贴等)
+    	// 2. 薪资生效日期为2199-12-31(永久生效)
+    	// 3. 可选条件:按人员ID过滤(启用时删除注释,注意数据库注释用--)
+    	sql.append("WHERE \n");
+    	sql.append("    sitem.FNUMBER IN ('TD01', 'T012', 'T013', 'TD02', 'TD04', 'TD74', 'T025', 'T038', 'TD101') \n");
+    	sql.append("    and fas.FLeffectDay = '2199-12-31 00:00:00' \n");
+    	// 数据库兼容的注释:-- 开头,嵌入SQL内不会报错(如需启用可删除前面的//)
+    	// sql.append("    -- and person.fid = 'X+0AAACrsleA733t' \n");
+    	sql.append("and  person.fid  in (select FEmployeeID from T_HR_EmployeeContract where fid = '"+id+"')  ") ;
+    	// -------------------------- GROUP BY子句 --------------------------
+    	// 分组逻辑:按人员唯一标识+基础信息分组,保证聚合函数(SUM)结果正确
+    	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();
+    }
+ 
+
+     
+}

+ 71 - 61
websrc/com/kingdee/eas/custom/esign/service/OtherESignConfigDataService.java

@@ -26,7 +26,12 @@ import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.util.Map;
 
+import org.apache.log4j.Logger;
+
 public class OtherESignConfigDataService implements IHRMsfService {
+	
+	private static Logger logger = Logger.getLogger(OtherESignConfigDataService.class);
+	
     @Override
     public Object process(Context context, Map map) throws EASBizException, BOSException {
         // 从参数映射中获取"number"参数值,用于定位配置信息
@@ -157,60 +162,64 @@ public class OtherESignConfigDataService implements IHRMsfService {
             // 执行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();
+				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("")) {
-                        value.put("value", iRowSet1.getObject(name));
-                    }
-                    // 设置字段的数据类型(取自数据源字段的类型别名)
-                    //value.put("dataType", dataSourceField.getDataType().getAlias());
+				        // 获取数据源字段的映射键(对应数据库列名)
+				        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) {
@@ -219,16 +228,17 @@ public class OtherESignConfigDataService implements IHRMsfService {
 //                        }
 //                        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);
-                }
-            }
+				        //}
+				        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异常时,封装为运行时异常抛出
@@ -236,7 +246,7 @@ public class OtherESignConfigDataService implements IHRMsfService {
         } catch (SQLException e) {
             // SQL异常时,封装为运行时异常抛出
             throw new RuntimeException(e);
-        }
+        }  
         // 返回封装好的JSON对象
         return jsonObject;
     }