Просмотр исходного кода

全员收入统计表取值处理

yaoyu 5 месяцев назад
Родитель
Сommit
1547a8dbb4
1 измененных файлов с 253 добавлено и 139 удалено
  1. 253 139
      hr/hr/src/client/nc/ui/hr/baod_orders/view/IncomeStatisticalUI.java

+ 253 - 139
hr/hr/src/client/nc/ui/hr/baod_orders/view/IncomeStatisticalUI.java

@@ -25,6 +25,7 @@ import nc.hr.utils.SpecialDataUtil;
 import nc.itf.uap.IUAPQueryBS;
 import nc.jdbc.framework.processor.ArrayListProcessor;
 import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.log.NcLog;
 import nc.pubitf.rbac.IFunctionPermissionPubService;
 import nc.ui.pub.ButtonObject;
 import nc.ui.pub.SeparatorButtonObject;
@@ -51,7 +52,11 @@ import nc.vo.pubapp.pattern.pub.MathTool;
 import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 import nc.vo.uap.rbac.profile.IFunctionPermProfile;
 
-
+/**
+ * 全员收入统计表
+ * @author Yaoyu
+ *
+ */
 @SuppressWarnings("deprecation")
 public class IncomeStatisticalUI extends ToftPanel {
 	
@@ -106,27 +111,21 @@ public class IncomeStatisticalUI extends ToftPanel {
 	
 	private UIRefPane getOrgPanel() {
 		if (this.ivjOrgPanel == null) {
+			//节点编码
+			String nodeCode = "60H10110";
 			this.ivjOrgPanel = new UIRefPane();
 			this.ivjOrgPanel.setName("pkorg");
 			this.ivjOrgPanel.setRefNodeName("财务组织");
-			IFunctionPermProfile profile = FunctionPermProfileManager.getInstance().getProfile(WorkbenchEnvironment.getInstance().getLoginUser().getUser_code());
-			if (profile != null) {
-				this.ivjOrgPanel.getRefModel().setFilterPks(profile.getPermPkorgs());
-			}
-			
+			//权限组织
+			String[] pkorgs = FunctionPermProfileManager.getInstance().getProfile(WorkbenchEnvironment.getInstance().getLoginUser().getUser_code()).getFuncSubInfo(nodeCode).getFuncPermissionPkorgs();
+			this.ivjOrgPanel.getRefModel().setFilterPks(pkorgs);
 
 			this.ivjOrgPanel.setBounds(new Rectangle(100, 20));
 			this.ivjOrgPanel.setPreferredSize(new Dimension(170, 20));
-			this.ivjOrgPanel.setMultiSelectedEnabled(true);
-			this.ivjOrgPanel.addValueChangedListener(new ValueChangedListener() {
-
+			//this.ivjOrgPanel.setMultiSelectedEnabled(true);
+				this.ivjOrgPanel.addValueChangedListener(new ValueChangedListener() {
 				public void valueChanged(ValueChangedEvent e) {
-					String[] newValue = (String[]) e.getNewValue();
 					IncomeStatisticalUI.this.initialize();
-					if (ivjcostcpanel != null) {
-						((CostCenterTreeRefModel) ivjcostcpanel.getRefModel()).setCurrentOrgCreated(true);
-						((CostCenterTreeRefModel) ivjcostcpanel.getRefModel()).setPk_org(newValue[0]);
-					}
 				}
 			});
 		}
@@ -381,7 +380,7 @@ public class IncomeStatisticalUI extends ToftPanel {
 					String userCode = InvocationInfoProxy.getInstance().getUserCode();
 					String pk_defdoc = queryDftDocUser(userCode);
 						
-					codeTypein.append("bd_defdoc.code in (");
+					codeTypein.append("defname in (");
 					for (int i = 0;i < codeType.length; i++) {
 						//激励类型存在如C1编码,截取第一位用于后续判断
 						String type = codeType[i].substring(0,1);
@@ -389,7 +388,8 @@ public class IncomeStatisticalUI extends ToftPanel {
 						if(pk_defdoc != null && ("A".equals(type) || "B".equals(type) || "C".equals(type) || "F".equals(type))) {
 							//清空拼接的sql信息,重新拼接
 							codeTypein.setLength(0);
-							codeTypein.append("(bd_defdoc.code like 'A%' or bd_defdoc.code like 'B%' or bd_defdoc.code like 'C%' or bd_defdoc.code like 'F%',");
+							//codeTypein.append("(bd_defdoc.code like 'A%' or bd_defdoc.code like 'B%' or bd_defdoc.code like 'C%' or bd_defdoc.code like 'F%',");
+							codeTypein.append("(defname like 'A%' or defname like 'B%' or defname like 'C%' or defname like 'F%',");
 							break;
 						}
 						codeTypein.append("'"+codeType[i]+"',");
@@ -652,38 +652,38 @@ public class IncomeStatisticalUI extends ToftPanel {
 		if(startDate.compareTo(endDate) == 1) {
 			ExceptionUtils.wrappBusinessException("开始期间不能大于结束期间!");
 		}
-		// 创建起始日期的 Calendar 实例  
-        Calendar startCal = Calendar.getInstance();  
-        startCal.setTime(startDate);  
-  
+		// 创建起始日期的 Calendar 实例 
+        Calendar startCal = Calendar.getInstance();
+        startCal.setTime(startDate);
+ 
         // 创建用于迭代的 Calendar 实例,从起始日期开始  
-        Calendar currentCal = Calendar.getInstance();  
-        currentCal.setTime(startDate);  
+        Calendar currentCal = Calendar.getInstance();
+        currentCal.setTime(startDate);
   
-        // 用于构建 SQL IN 子句的 StringBuffer  
+        // 用于构建 SQL IN 子句的 StringBuffer
         StringBuffer wa_periodin = new StringBuffer();
         StringBuffer query_year_monthin = new StringBuffer();
         StringBuffer allin = new StringBuffer();
         allin.append(" in (");
         wa_periodin.append(" in (");
         query_year_monthin.append(" in (");
-        // 循环直到当前日期超过结束日期  
-         while (currentCal.getTime().before(endDate) || currentCal.getTime().equals(endDate)) {  
-            // 获取年份和月份(月份需要 +1,因为 Calendar 月份是从 0 开始的)  
-            int year = currentCal.get(Calendar.YEAR);  
-            int month = currentCal.get(Calendar.MONTH) + 1;  
+        // 循环直到当前日期超过结束日期
+         while (currentCal.getTime().before(endDate) || currentCal.getTime().equals(endDate)) {
+            // 获取年份和月份(月份需要 +1,因为 Calendar 月份是从 0 开始的)
+            int year = currentCal.get(Calendar.YEAR);
+            int month = currentCal.get(Calendar.MONTH) + 1;
             
-            // 格式化年份和月份为字符串(YYYYMM)  
+            // 格式化年份和月份为字符串(YYYYMM)
             String yearMonthStr = String.format("%04d%02d", year, month);
             //2023年情况特殊,上半年和下半年的奖金在不同的表
             if(year == 2023) {
 	            if(month <= 6) {
-	            	query_year_monthin.append("'" + yearMonthStr + "',");  
+	            	query_year_monthin.append("'" + yearMonthStr + "',");
 	            }else {
-	            	wa_periodin.append("'" + yearMonthStr + "',");  	
+	            	wa_periodin.append("'" + yearMonthStr + "',");
 	            }
             }else {
-            	query_year_monthin.append("'" + yearMonthStr + "',"); 
+            	query_year_monthin.append("'" + yearMonthStr + "',");
             	wa_periodin.append("'" + yearMonthStr + "',");  
             }
            
@@ -730,7 +730,18 @@ public class IncomeStatisticalUI extends ToftPanel {
 		sql.append(" hrorgname,");
 		sql.append(" deptname,");
 		sql.append(" postname,");
-		sql.append(" defname,");
+		sql.append(" CASE");
+		sql.append(" 	WHEN EXISTS(");
+		sql.append("	SELECT DISTINCT bd_defdoc1.name");
+		sql.append("	FROM");
+		sql.append("	hi_psnjob hi_psnjob1");
+		sql.append("	LEFT JOIN org_adminorg org_adminorg1 ON hi_psnjob1.pk_org = org_adminorg1.pk_adminorg");
+		sql.append("	LEFT JOIN om_post om_post1 ON hi_psnjob1.jobglbdef30 = om_post1.pk_post");
+		sql.append("	LEFT JOIN bd_defdoc bd_defdoc1 ON om_post1.glbdef1 = bd_defdoc1.pk_defdoc");
+		sql.append("	WHERE");
+		sql.append("	hi_psnjob1.dr = 0	AND org_adminorg1.name = hrorgname	AND hi_psnjob1.clerkcode = psncode");
+		sql.append("	AND hi_psnjob1.ismainjob = 'N' AND bd_defdoc1.name = 'A' AND hi_psnjob1.endflag = 'N'");
+		sql.append("	) THEN 'A' ELSE defname	END AS defname,");
 		sql.append(" ismainjob,");
 		sql.append(" begindate,");
 		sql.append(" enddate,");
@@ -741,7 +752,6 @@ public class IncomeStatisticalUI extends ToftPanel {
 		sql.append(" sum( designbonus ) AS designbonus,");
 		sql.append(" sum( marketbonus ) AS marketbonus,");
 		sql.append(" sum( awardsbonus ) AS awardsbonus,");
-		//sql.append(" sum( managementbonus ) AS managementbonus,");
 		sql.append(" COALESCE( sum( managementbonus ), 0 ) - COALESCE( sum( yfdk ), 0 ) AS managementbonus,");
 		sql.append(" sum( servicebonus ) AS servicebonus,");
 		sql.append(" sum( guaranteebonus1 ) AS guaranteebonus1,");
@@ -754,75 +764,57 @@ public class IncomeStatisticalUI extends ToftPanel {
 		sql.append(" sum( share_bonus ) AS share_bonus");
 		sql.append(" FROM(");
 		sql.append(" SELECT");
-		sql.append(" CASE ");
-		sql.append(" 	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 	COALESCE( laborcost_table.count, 0 ) + COALESCE( PRIM2023_table.count, 0 )");
-		sql.append(" END AS ffyf,");
+		sql.append(" 	NULL AS ffyf,");
 		sql.append(" 	hi_psnjob.clerkcode AS psncode,");
 		sql.append(" 	bd_psndoc.name AS psnname,");
 		sql.append(" 	org_hrorg.name AS hrorgname,");
 		sql.append(" 	org_dept.name AS deptname,");
 		sql.append(" 	om_posts.postname AS postname,");
 		sql.append(" 	bd_defdoc.name AS defname,");
-		sql.append(" CASE");
+		sql.append(" 	CASE");
 		sql.append(" 		hi_psnjob.ismainjob");
 		sql.append(" 		WHEN 'Y' THEN");
 		sql.append(" 		'主职' ELSE '兼职'");
-		sql.append(" END AS ismainjob,");
+		sql.append(" 	END AS ismainjob,");
 		sql.append(" 	hi_psnjob.begindate AS begindate,");
 		sql.append(" 	hi_psnjob.enddate AS enddate,");
-		sql.append(" CASE");
-		sql.append(" 	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 		COALESCE(laborcost_table.bmcd, 0) + COALESCE(PRIM2023_table.bmcd, 0)");
-		sql.append(" END AS bmcd,");
-		sql.append(" CASE");
-		sql.append(" 	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 		COALESCE(laborcost_table.sjyfdk, 0) + COALESCE(PRIM2023_table.sjyfdk, 0) + COALESCE(laborcost_table.glyfdk, 0)+ COALESCE( PRIM2023_table.glyfdk, 0 )");
-		sql.append(" 		END AS yfdk,");
-		sql.append(" CASE");
-		sql.append(" 	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 		COALESCE(laborcost_table.gsbt, 0) + COALESCE(PRIM2023_table.gsbt, 0)");
-		sql.append(" END AS gsbt,");
-		sql.append(" CASE");
-		sql.append(" 	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 	COALESCE(laborcost_table.zzbt, 0) + COALESCE(PRIM2023_table.zzbt, 0)");
-		sql.append(" END AS zzbt,");
-		sql.append(" NULL AS designbonus,");
-		sql.append(" NULL AS marketbonus,");
-		sql.append(" NULL AS awardsbonus,");
-		sql.append(" NULL AS managementbonus,");
-		sql.append(" NULL AS servicebonus,");
-		sql.append(" NULL AS guaranteebonus1,");
-		sql.append(" NULL AS guaranteebonus2,");
-		sql.append(" NULL AS specialbonus,");
-		sql.append(" NULL AS allowancebonus,");
-		sql.append(" CASE");
-		sql.append("	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append("	bonus_table.function_bonus");
-		sql.append(" END AS function_bonus,");
-		sql.append(" CASE");
-		sql.append("	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append("	bonus_table.manage_jsbonus");
-		sql.append(" END AS manage_jsbonus,");
-		sql.append(" CASE");
-		sql.append("	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append("	bonus_table.manage_bdamount");
-		sql.append(" END AS manage_bdamount,");
-		sql.append(" CASE");
-		sql.append("	WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
-		sql.append(" 	bonus_table.share_bonus");
-		sql.append(" END AS share_bonus");
+		sql.append(" 	NULL AS bmcd,");
+		sql.append(" 	NULL AS yfdk,");
+		sql.append(" 	NULL AS gsbt,");
+		sql.append(" 	NULL AS zzbt,");
+		sql.append(" 	NULL AS designbonus,");
+		sql.append(" 	NULL AS marketbonus,");
+		sql.append(" 	NULL AS awardsbonus,");
+		sql.append(" 	NULL AS managementbonus,");
+		sql.append(" 	NULL AS servicebonus,");
+		sql.append(" 	NULL AS guaranteebonus1,");
+		sql.append(" 	NULL AS guaranteebonus2,");
+		sql.append(" 	NULL AS specialbonus,");
+		sql.append(" 	NULL AS allowancebonus,");
+		sql.append(" 	CASE");
+		sql.append("		WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
+		sql.append("		bonus_table.function_bonus");
+		sql.append(" 	END AS function_bonus,");
+		sql.append(" 	CASE");
+		sql.append("		WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
+		sql.append("		bonus_table.manage_jsbonus");
+		sql.append(" 	END AS manage_jsbonus,");
+		sql.append(" 	CASE");
+		sql.append("		WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
+		sql.append("		bonus_table.manage_bdamount");
+		sql.append(" 	END AS manage_bdamount,");
+		sql.append(" 	CASE");
+		sql.append("		WHEN ROW_NUMBER ( ) OVER ( PARTITION BY bd_psndoc.name, org_hrorg.name, org_dept.name, om_post.postname ORDER BY hi_psnjob.begindate DESC ) = 1 THEN");
+		sql.append(" 		bonus_table.share_bonus");
+		sql.append(" 	END AS share_bonus");
 		sql.append(" FROM");
-		sql.append(" 		bd_psndoc bd_psndoc");
+		sql.append(" 	bd_psndoc bd_psndoc");
 		sql.append(" LEFT JOIN hi_psnjob hi_psnjob ON bd_psndoc.pk_psndoc = hi_psnjob.pk_psndoc");
 		sql.append(" LEFT JOIN org_adminorg org_hrorg ON hi_psnjob.pk_org = org_hrorg.pk_adminorg");
 		sql.append(" LEFT JOIN org_dept org_dept ON hi_psnjob.pk_dept = org_dept.pk_dept");
 		sql.append(" LEFT JOIN om_post om_post ON hi_psnjob.pk_post = om_post.pk_post");
 		sql.append(" LEFT JOIN om_post om_posts ON hi_psnjob.jobglbdef30 = om_posts.pk_post");
 		sql.append(" LEFT JOIN bd_defdoc bd_defdoc ON om_posts.glbdef1 = bd_defdoc.pk_defdoc");
-		//sql.append(" LEFT JOIN ( SELECT clerkcode, MAX( begindate ) AS max_begindate FROM hi_psnjob where ismainjob = 'Y'");
-		//sql.append("		AND (( SUBSTR( hi_psnjob.begindate, 1, 7 ) <= '"+endPeriod+"' AND SUBSTR( hi_psnjob.enddate, 1, 7 ) >= '"+startPeriod+"' )OR ( enddate IS NULL ) )  ");
-		//sql.append("       GROUP BY clerkcode  ) max_begindate_table ON hi_psnjob.clerkcode = max_begindate_table.clerkcode");
 		sql.append(" LEFT JOIN (");
 		sql.append("		SELECT");
 		sql.append(" 				vdef1,");
@@ -841,46 +833,6 @@ public class IncomeStatisticalUI extends ToftPanel {
 		sql.append("	AND COALESCE(org_hrorg.name,'N') = COALESCE(bonus_table.cost_corp,'N')");
 		sql.append("	AND COALESCE(org_dept.name,'N') = COALESCE(bonus_table.cost_dept,'N')");
 		sql.append("	AND COALESCE(om_post.postname,'N') = COALESCE(bonus_table.postname,'N')");
-		sql.append(" LEFT JOIN (");
-		sql.append(" 		SELECT");
-		sql.append(" 				workercode,cost_org,cost_dept,post,");
-		sql.append(" 				SUM( CASE WHEN outlaytype = '部门承担人力成本' THEN decimalmny END ) AS bmcd,");
-		sql.append(" 				SUM( CASE WHEN outlaytype = '设计预发待扣' THEN decimalmny END ) AS sjyfdk,");
-		sql.append(" 				SUM( CASE WHEN outlaytype = '管理预发待扣' THEN decimalmny END ) AS glyfdk,");
-		sql.append(" 				SUM( CASE WHEN outlaytype = '公司管理费用' AND wa_type <> '资质补贴' THEN decimalmny END ) AS gsbt,");
-		sql.append(" 				SUM( CASE WHEN wa_type = '资质补贴' THEN decimalmny END ) AS zzbt,");
-		sql.append(" 				SUM( CASE WHEN outlaytype in('部门承担人力成本','设计预发待扣','管理预发待扣','公司管理费用','其他公司管理费用','经济补偿金部门','经济补偿金公司') THEN decimalmny END) AS GDBF,");
-		sql.append("                COUNT(DISTINCT wa_period) AS count");
-		sql.append(" 		FROM");
-		sql.append(" 				hr_laborcost");
-		sql.append("        WHERE");
-		sql.append("        		dr = 0 AND wa_period "+ map.get("wa_periodin"));
-		sql.append(" 		GROUP BY");
-		sql.append(" 				workercode,cost_org,cost_dept,post");
-		sql.append(" ) laborcost_table ON hi_psnjob.clerkcode = laborcost_table.workercode");
-		sql.append("	AND COALESCE( org_hrorg.pk_adminorg, 'N' ) = COALESCE( laborcost_table.cost_org, 'N' )");
-		sql.append("	AND COALESCE( org_dept.pk_dept, 'N' ) = COALESCE( laborcost_table.cost_dept, 'N' )");
-		sql.append("	AND COALESCE( om_post.pk_post, 'N' ) = COALESCE( laborcost_table.post, 'N' )");
-		sql.append(" LEFT JOIN (");
-		sql.append(" 		SELECT");
-		sql.append(" 				clerk_code,company,deptcode,position,");
-		sql.append(" 				SUM( CASE WHEN cost_category = '部门承担人力成本' THEN amount END ) AS bmcd,");
-		sql.append(" 				SUM( CASE WHEN cost_category = '设计预发待扣' THEN amount END ) AS sjyfdk,");
-		sql.append(" 				SUM( CASE WHEN cost_category = '管理预发待扣' THEN amount END ) AS glyfdk,");
-		sql.append(" 				SUM( CASE WHEN cost_category = '公司管理费用' THEN amount END ) AS gsbt,");
-		sql.append(" 				SUM( CASE WHEN cost_category = '资质补贴' THEN amount END ) AS zzbt,");
-		sql.append(" 				SUM( CASE WHEN cost_category in('部门承担人力成本','设计预发待扣','管理预发待扣','公司管理费用','其他公司管理费用','经济补偿金部门','经济补偿金公司') THEN amount END) AS GDBF,");
-		sql.append("                COUNT(DISTINCT query_year_month) AS count");
-		sql.append(" 		FROM");
-		sql.append(" 				EMPLOYEE_SALARY_PRIM2023");
-		sql.append("        WHERE");
-		sql.append("        		TO_CHAR(query_year_month, 'YYYYMM') "+ map.get("query_year_monthin"));
-		sql.append(" 		GROUP BY");
-		sql.append(" 				clerk_code,company,deptcode,position");
-		sql.append(" ) PRIM2023_table ON hi_psnjob.clerkcode = PRIM2023_table.clerk_code");
-		sql.append("	AND COALESCE( org_hrorg.name, 'N' ) = COALESCE( PRIM2023_table.company, 'N' )");
-		sql.append("	AND COALESCE( org_dept.code, 'N' ) = COALESCE( PRIM2023_table.deptcode, 'N' )");
-		sql.append("	AND COALESCE( om_post.postname, 'N' ) = COALESCE( PRIM2023_table.position, 'N' )");
 		sql.append(" WHERE");
 		sql.append(" 		bd_psndoc.dr = 0 AND hi_psnjob.dr = 0");
 		sql.append("        AND om_posts.postname <> '发薪人员'");
@@ -889,18 +841,179 @@ public class IncomeStatisticalUI extends ToftPanel {
 			sql.append(" 	AND	hi_psnjob.clerkcode = '"+psncode+"'");
 		}
 		if(psnname != null && !"".equals(psnname)) {
-			sql.append(" 	AND	bd_psndoc.name = '"+psnname+"'");
-		}
-		if(codeTypein != null && !"".equals(codeTypein)) {
-			sql.append("   AND  " + codeTypein);
+			sql.append(" 	AND	bd_psndoc.name like '%"+psnname+"%'");
 		}
 		sql.append(" AND (( SUBSTR( hi_psnjob.begindate, 1, 7 ) <= '"+endPeriod+"' AND SUBSTR( hi_psnjob.enddate, 1, 7 ) >= '"+startPeriod+"' )OR ( enddate IS NULL ) ) ");
-		sql.append(" UNION ALL");
-		
-		
-		
-		
+		//拼接2023年上半年部分sql
 		
+		sql.append(" UNION ALL");
+		sql.append(" SELECT * FROM(");
+		sql.append(" SELECT");
+		sql.append("	COUNT( DISTINCT es2023.query_year_month ) AS ffyf,");
+		sql.append(" 	es2023.clerk_code AS psncode,");
+		sql.append(" 	es2023.employee_name AS psnname,");
+		sql.append(" 	es2023.company AS hrorgname,");
+		sql.append(" 	org_dept.name AS deptname,");
+		sql.append(" 	om_posts.postname AS postname,");
+		sql.append(" 	bd_defdoc.name AS defname,");
+		sql.append(" CASE");
+		sql.append("	hi_psnjobs.ismainjob");
+		sql.append("	WHEN 'Y' THEN");
+		sql.append(" 	'主职' ELSE '兼职'");
+		sql.append(" END AS ismainjob,");
+		sql.append("	hi_psnjobs.begindate AS begindate,");
+		sql.append("	hi_psnjobs.enddate AS enddate,");
+		sql.append("	SUM( CASE WHEN es2023.cost_category = '部门承担人力成本' THEN es2023.amount END ) AS bmcd,");
+		sql.append("	SUM( CASE WHEN es2023.cost_category = '设计预发待扣' THEN es2023.amount END ) + SUM( CASE WHEN es2023.cost_category = '管理预发待扣' THEN es2023.amount END ) AS yfdk,");
+		sql.append("	SUM( CASE WHEN es2023.cost_category = '公司管理费用' THEN es2023.amount END ) AS gsbt,");
+		sql.append("	SUM( CASE WHEN es2023.cost_category = '资质补贴' THEN es2023.amount END ) AS zzbt,");
+		sql.append("	NULL AS designbonus,");
+		sql.append("	NULL AS marketbonus,");
+		sql.append("	NULL AS awardsbonus,");
+		sql.append("	NULL AS managementbonus,");
+		sql.append("	NULL AS servicebonus,");
+		sql.append("	NULL AS guaranteebonus1,");
+		sql.append("	NULL AS guaranteebonus2,");
+		sql.append("	NULL AS specialbonus,");
+		sql.append("	NULL AS allowancebonus,");
+		sql.append("	NULL AS function_bonus,");
+		sql.append("	NULL AS manage_jsbonus,");
+		sql.append("	NULL AS manage_bdamount,");
+		sql.append("	NULL AS share_bonus ");
+		sql.append(" FROM");
+		sql.append("	EMPLOYEE_SALARY_PRIM2023 es2023");
+		sql.append("	LEFT JOIN org_adminorg org_hrorg ON es2023.company = org_hrorg.name");
+		sql.append("	LEFT JOIN org_dept org_dept ON es2023.deptcode = org_dept.code");
+		sql.append("	LEFT JOIN (");
+		sql.append("		SELECT");
+		sql.append("			hi_psnjob.clerkcode AS clerkcode,");
+		sql.append("			hi_psnjob.pk_org AS pk_org,");
+		sql.append("			hi_psnjob.pk_dept AS pk_dept,");
+		sql.append("			hi_psnjob.pk_post AS pk_post,");
+		sql.append("			om_post.postname AS postname,");
+		sql.append("			hi_psnjob.jobglbdef30 AS jobglbdef30,");
+		sql.append("			hi_psnjob.begindate AS begindate,");
+		sql.append("			hi_psnjob.enddate AS enddate,");
+		sql.append("			hi_psnjob.ismainjob AS ismainjob,");
+		sql.append("			ROW_NUMBER ( ) OVER (PARTITION BY hi_psnjob.clerkcode,hi_psnjob.pk_org,hi_psnjob.pk_dept,hi_psnjob.pk_post,");
+		sql.append("			hi_psnjob.jobglbdef30");
+		sql.append("			ORDER BY hi_psnjob.begindate DESC ) AS rn");
+		sql.append("		FROM");
+		sql.append("			hi_psnjob hi_psnjob");
+		sql.append("			LEFT JOIN om_post om_post ON hi_psnjob.pk_post = om_post.pk_post");
+		sql.append("	) hi_psnjobs ON es2023.clerk_code = hi_psnjobs.clerkcode ");
+		sql.append("		AND COALESCE( org_hrorg.pk_adminorg, 'N' ) = COALESCE( hi_psnjobs.pk_org, 'N' )");
+		sql.append("		AND COALESCE( org_dept.pk_dept, 'N' ) = COALESCE( hi_psnjobs.pk_dept, 'N' )");
+		sql.append("		AND COALESCE( es2023.position, 'N' ) = COALESCE( hi_psnjobs.postname, 'N' )");
+		sql.append("		AND hi_psnjobs.rn = 1");
+		sql.append("	LEFT JOIN om_post om_posts ON hi_psnjobs.jobglbdef30 = om_posts.pk_post");
+		sql.append("	LEFT JOIN bd_defdoc bd_defdoc ON om_posts.glbdef1 = bd_defdoc.pk_defdoc");
+		sql.append(" WHERE");
+		sql.append(" 	TO_CHAR(query_year_month, 'YYYYMM') "+ map.get("query_year_monthin"));
+		sql.append("	AND om_posts.postname <> '发薪人员'");
+		sql.append("    AND org_hrorg.code " + codein);
+		if(psncode != null && !"".equals(psncode)) {
+			sql.append(" 	AND	es2023.clerk_code = '"+psncode+"'");
+		}
+		if(psnname != null && !"".equals(psnname)) {
+			sql.append(" 	AND	es2023.employee_name like '%"+psnname+"%'");
+		}
+		sql.append(" GROUP BY");
+		sql.append("	es2023.clerk_code,");
+		sql.append("	es2023.employee_name,");
+		sql.append("	es2023.company,");
+		sql.append("	org_dept.name,");
+		sql.append("	om_posts.postname,");
+		sql.append("	bd_defdoc.name,");
+		sql.append("	hi_psnjobs.ismainjob,");
+		sql.append("	hi_psnjobs.begindate,");
+		sql.append("	hi_psnjobs.enddate)");
+		sql.append(" WHERE (bmcd <> 0 OR yfdk<> 0 OR gsbt<> 0 OR zzbt<> 0)	");
+		//拼接收入部分sql
+		sql.append(" UNION ALL");
+		sql.append(" SELECT * FROM(");
+		sql.append(" SELECT");
+		sql.append("	COUNT( DISTINCT hr_laborcost.wa_period ) AS ffyf,");
+		sql.append("	hr_laborcost.workercode AS psncode,");
+		sql.append("	hr_laborcost.name AS psnname,");
+		sql.append("	org_hrorg.name AS hrorgname,");
+		sql.append("	org_dept.name AS deptname,");
+		sql.append("	om_posts.postname AS postname,");
+		sql.append("	bd_defdoc.name AS defname,");
+		sql.append(" 	CASE");
+		sql.append("		hi_psnjobs.ismainjob");
+		sql.append("		WHEN 'Y' THEN");
+		sql.append(" 		'主职' ELSE '兼职'");
+		sql.append(" 	END AS ismainjob,");
+		sql.append("	hi_psnjobs.begindate AS begindate,");
+		sql.append("	hi_psnjobs.enddate AS enddate,");
+		sql.append("	SUM( CASE WHEN hr_laborcost.outlaytype = '部门承担人力成本' THEN hr_laborcost.decimalmny END ) AS bmcd,");
+		sql.append("	SUM( CASE WHEN hr_laborcost.outlaytype = '设计预发待扣' THEN hr_laborcost.decimalmny END ) + ");
+		sql.append("		SUM( CASE WHEN hr_laborcost.outlaytype = '管理预发待扣' THEN hr_laborcost.decimalmny END ) AS yfdk,");
+		sql.append("	SUM( CASE WHEN hr_laborcost.outlaytype = '公司管理费用' AND hr_laborcost.wa_type <> '资质补贴' THEN hr_laborcost.decimalmny END ) AS gsbt,");
+		sql.append("	SUM( CASE WHEN hr_laborcost.wa_type = '资质补贴' THEN hr_laborcost.decimalmny END ) AS zzbt,");
+		sql.append("	NULL AS designbonus,");
+		sql.append("	NULL AS marketbonus,");
+		sql.append("	NULL AS awardsbonus,");
+		sql.append("	NULL AS managementbonus,");
+		sql.append("	NULL AS servicebonus,");
+		sql.append("	NULL AS guaranteebonus1,");
+		sql.append("	NULL AS guaranteebonus2,");
+		sql.append("	NULL AS specialbonus,");
+		sql.append("	NULL AS allowancebonus,");
+		sql.append("	NULL AS function_bonus,");
+		sql.append("	NULL AS manage_jsbonus,");
+		sql.append("	NULL AS manage_bdamount,");
+		sql.append("	NULL AS share_bonus");
+		sql.append(" FROM");
+		sql.append("	hr_laborcost hr_laborcost");
+		sql.append("	LEFT JOIN org_adminorg org_hrorg ON hr_laborcost.cost_org = org_hrorg.pk_adminorg");
+		sql.append("	LEFT JOIN org_dept org_dept ON hr_laborcost.cost_dept = org_dept.pk_dept");
+		sql.append("	LEFT JOIN om_post om_post ON hr_laborcost.post = om_post.pk_post");
+		sql.append("	LEFT JOIN (");
+		sql.append("		SELECT");
+		sql.append("			clerkcode,");
+		sql.append("			pk_org,");
+		sql.append("			pk_dept,");
+		sql.append("			pk_post,");
+		sql.append("			jobglbdef30,");
+		sql.append("			begindate,");
+		sql.append("			enddate,");
+		sql.append("			ismainjob,");
+		sql.append("			ROW_NUMBER ( ) OVER ( PARTITION BY clerkcode, pk_org, pk_dept, pk_post, jobglbdef30 ORDER BY begindate DESC ) AS rn");
+		sql.append("		FROM");
+		sql.append("		hi_psnjob");
+		sql.append("		) hi_psnjobs ON hr_laborcost.workercode = hi_psnjobs.clerkcode ");
+		sql.append("		AND COALESCE( hr_laborcost.cost_org, 'N' ) = COALESCE( hi_psnjobs.pk_org, 'N' ) ");
+		sql.append("		AND COALESCE( hr_laborcost.cost_dept, 'N' ) = COALESCE( hi_psnjobs.pk_dept, 'N' ) ");
+		sql.append("		AND COALESCE( hr_laborcost.post, 'N' ) = COALESCE( hi_psnjobs.pk_post, 'N' )");
+		sql.append("		AND hi_psnjobs.rn = 1");
+		sql.append("	LEFT JOIN om_post om_posts ON hi_psnjobs.jobglbdef30 = om_posts.pk_post");
+		sql.append("	LEFT JOIN bd_defdoc bd_defdoc ON om_posts.glbdef1 = bd_defdoc.pk_defdoc");
+		sql.append(" WHERE");
+		sql.append(" 	hr_laborcost.dr = 0");
+		sql.append("	AND wa_period "+ map.get("wa_periodin"));
+		sql.append("	AND om_posts.postname <> '发薪人员' ");
+		sql.append("    AND org_hrorg.code " + codein);
+		if(psncode != null && !"".equals(psncode)) {
+			sql.append(" 	AND	hr_laborcost.workercode = '"+psncode+"'");
+		}
+		if(psnname != null && !"".equals(psnname)) {
+			sql.append(" 	AND	hr_laborcost.name like '%"+psnname+"%'");
+		}
+		sql.append(" GROUP BY");
+		sql.append("	hr_laborcost.workercode,");
+		sql.append("	hr_laborcost.name,");
+		sql.append("	org_hrorg.name,");
+		sql.append("	org_dept.name,");
+		sql.append("	om_posts.postname,");
+		sql.append("	bd_defdoc.name,");
+		sql.append("	hi_psnjobs.begindate,");
+		sql.append("	hi_psnjobs.enddate,");
+		sql.append("	hi_psnjobs.ismainjob)");
+		sql.append(" WHERE (bmcd <> 0 OR yfdk<> 0 OR gsbt<> 0 OR zzbt<> 0)");
+		//拼接奖金部分sql
+		sql.append(" UNION ALL");
 		sql.append(" SELECT");
 		sql.append("	NULL AS ffyf,");
 		sql.append("	hi_psnjob.clerkcode AS psncode,");
@@ -955,10 +1068,7 @@ public class IncomeStatisticalUI extends ToftPanel {
 			sql.append(" 	AND	hi_psnjob.clerkcode = '"+psncode+"'");
 		}
 		if(psnname != null && !"".equals(psnname)) {
-			sql.append(" 	AND	bd_psndoc.name = '"+psnname+"'");
-		}
-		if(codeTypein != null && !"".equals(codeTypein)) {
-			sql.append("   AND  " + codeTypein);
+			sql.append(" 	AND	bd_psndoc.name like '%"+psnname+"%'");
 		}
 		sql.append(" GROUP BY");
 		sql.append(" hi_psnjob.clerkcode,");
@@ -970,7 +1080,11 @@ public class IncomeStatisticalUI extends ToftPanel {
 		sql.append(" hi_psnjobs.begindate,");
 		sql.append(" hi_psnjobs.enddate,");
 		sql.append(" hi_psnjobs.ismainjob");
-		sql.append(" ) GROUP BY psncode,psnname,hrorgname,deptname,postname,defname,ismainjob,begindate,enddate  ORDER BY psncode,begindate");
+		sql.append(" ) ");
+		if(codeTypein != null && !"".equals(codeTypein)) {
+			sql.append("   WHERE  " + codeTypein);
+		}
+		sql.append(" GROUP BY psncode,psnname,hrorgname,deptname,postname,defname,ismainjob,begindate,enddate  ORDER BY psncode,begindate");
 		return (ArrayList<Object>) IUAPQueryBS.executeQuery(sql.toString(), new ArrayListProcessor());
 	}