瀏覽代碼

代码优化

yaoyu 1 周之前
父節點
當前提交
538c6427ae

+ 422 - 6
hr/hr/src/client/nc/ui/hr/baod_orders/view/AccumulationFundAllInsertDiaLog.java

@@ -4,12 +4,15 @@ import java.awt.BorderLayout;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.List;
+import java.util.Map;
 
 import nc.bs.framework.common.NCLocator;
 import nc.desktop.ui.WorkbenchEnvironment;
 import nc.itf.hr.SocialInsuranceAllMaintain;
 import nc.itf.uap.IUAPQueryBS;
 import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.jdbc.framework.processor.MapListProcessor;
 import nc.ui.pub.beans.MessageDialog;
 import nc.ui.pub.beans.UIButton;
 import nc.ui.pub.beans.UIDialog;
@@ -19,10 +22,11 @@ import nc.ui.pub.bill.BillCardPanel;
 import nc.ui.pub.bill.BillEditEvent;
 import nc.ui.pub.bill.BillEditListener;
 import nc.vo.ecpubapp.pattern.data.ValueUtils;
+import nc.vo.pubapp.pattern.pub.PubAppTool;
 import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 
 /**
- * 表八:实际集团内其他公司已缴当月工资个人部分已扣新增页
+ * 公积金分摊表新增界
  * @author YaoYu
  *
  */
@@ -141,7 +145,7 @@ public class AccumulationFundAllInsertDiaLog extends UIDialog implements ActionL
 			//循环表单行数
 			for (int i = 0; i < cp.getRowCount(); i++) {
 				String tableName = ValueUtils.getString(cp.getBodyValueAt(i, "tablename"));//表
-				String orgCode = QueyrOrgCode(ValueUtils.getString(cp.getBodyValueAt(i, "orgcode")));//公司
+				String orgCode = queyrOrgCode(ValueUtils.getString(cp.getBodyValueAt(i, "orgcode")));//公司
 				String contributoryOrgName = ValueUtils.getString(cp.getBodyValueAt(i, "contributoryorg"));//成本归属公司
 				String period = ValueUtils.getString(cp.getBodyValueAt(i, "period"));//年月
 				String clerkCode = ValueUtils.getString(cp.getBodyValueAt(i, "clerkcode"));//员工编号
@@ -154,9 +158,30 @@ public class AccumulationFundAllInsertDiaLog extends UIDialog implements ActionL
 				contributoryOrgName = contributoryOrgName == null ? "" : contributoryOrgName;
 				String combinedField = tableName + contributoryOrgName + clerkCode + clerkName;
 				if(queryTable(orgCode, period, combinedField)) {
-					MessageDialog.showHintDlg(this, "提示", "成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + "当月数据已存在不允许重新新增");
+					MessageDialog.showHintDlg(this, "提示", "成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
 				return;
 				}
+				if(tableName.equals("表一:由个人承担")) {
+					queryTableOne(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表二:由外部公司承担")) {
+					queryTableTwo(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表三:由部门承担或全额公司承担")) {
+					queryTableThree(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表四:个人部分已在集团内其他公司扣除")) {
+					queryTableFour(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表五:月薪工资表中当月扣当月缴纳")) {
+					queryTableFive(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表六:实际已缴当月工资个人部分未扣")) {
+					queryTableSix(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表七:实际未缴当月工资个人部分已扣")) {
+					queryTableSeven(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
 				StringBuilder insertSQL = new StringBuilder("INSERT INTO accumulation_fund VALUES (");
 				insertSQL.append("'").append("公积金分摊表").append("', ");
 				insertSQL.append("'").append(orgCode).append("', ");
@@ -197,8 +222,30 @@ public class AccumulationFundAllInsertDiaLog extends UIDialog implements ActionL
 	
 	
 	@Override
-	public void afterEdit(BillEditEvent arg0) {
-		
+	public void afterEdit(BillEditEvent e) {
+		try {
+			if("orgcode".equals(e.getKey())) {
+				String pk_org = String.valueOf(e.getValue());
+				UIRefPane clerkCodeRef = (UIRefPane) this.jlcardPanel.getBodyItem("clerkcode").getComponent();
+				// 设置当前组织
+				clerkCodeRef.setPk_org(pk_org);
+			}
+			if("clerkcode".equals(e.getKey())) {
+				String clerkcode = String.valueOf(e.getValue());
+				if(clerkcode != null) {
+					String sql = "SELECT name FROM bd_psndoc WHERE pk_psndoc = '"+clerkcode+"'";
+					String clerkname = (String) iuap.executeQuery(sql, new ColumnProcessor());
+					//赋值姓名
+					this.jlcardPanel.setBodyValueAt(clerkname, 0, "clerkname");
+				}else {
+					//清空姓名
+					this.jlcardPanel.setBodyValueAt(null, 0, "clerkname");
+				}
+				
+			}
+		} catch (Exception e1) {
+			MessageDialog.showHintDlg(this, "提示", e1.getMessage());
+		}
 	}
 
 	@Override
@@ -233,6 +280,375 @@ public class AccumulationFundAllInsertDiaLog extends UIDialog implements ActionL
 		
 	}
 	
+	/**
+	 * 查询个人承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableOne(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT ");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t.CLERKCODE AS clerkcode,");
+		sql.append(" T1.CLERKNAME AS clerkname,");
+		sql.append(" t1.housing_fund_base AS basicssum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" SUM( NVL( t.VALUE, 0 ) ) AS orgsum,");
+		sql.append(" t1.mark AS mark");
+		sql.append(" from NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" WHERE");
+		sql.append(" t.key = '公积金公司税后扣款' and t.VALUE <> 0 and t.ym='"+period+"'||'-01' and t1.ORGCODE_HOUSE='"+orgCode+"' and t1.ENDOWMENT_BASE is not null");
+		sql.append(" GROUP BY t.CLERKCODE,T1.CLERKNAME,t1.housing_fund_base,t1.mark");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	
+	/**
+	 * 查询外部公司承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableTwo(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode as clerkcode,");
+		sql.append(" clerkname as clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark AS mark");
+		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
+		sql.append(" WHERE");
+		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '"+period+"' AND t.ORGCODE = '"+orgCode+"'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	
+	/**
+	 * 查询由部门承担或全额公司承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableThree(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode AS clerkcode,");
+		sql.append(" clerkname AS clerkname,");
+		sql.append(" housing_fund_base AS basicssum,");
+		sql.append(" HOUSING_FUND_STAFF AS staffsum,");
+		sql.append(" HOUSING_FUND_ORG AS orgsum,");
+		sql.append(" NULL AS mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" T.housing_fund_base,T.CLERKCODE,T.CLERKNAME,T.HOUSING_FUND_ORG,T.HOUSING_FUND_STAFF,T.ORGCODE_HOUSE,T.PAY_MONTH,T.MARK");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY T");
+		sql.append(" WHERE");
+		sql.append(" T.PK_POST IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname = '残保金人员' ) AND T.HOUSING_FUND_ORG <> 0");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" t1.housing_fund_base,t1.CLERKCODE,t1.CLERKNAME,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,T1.ORGCODE_HOUSE,t1.PAY_MONTH,T1.MARK");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1 ");
+		sql.append(" WHERE");
+		sql.append(" t1.MARK = '表三') t2");
+		sql.append(" WHERE");
+		sql.append(" t2.PAY_MONTH = '"+period+"' AND t2.ORGCODE_HOUSE = '"+orgCode+"'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询个人部分已在集团内其他公司扣除是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableFour(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" housing_fund_base AS basicssum,");
+		sql.append(" HOUSING_FUND_STAFF AS staffsum,");
+		sql.append(" HOUSING_FUND_ORG AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t.c_23 AS salocation,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE");
+		sql.append(" AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" WHERE");
+		sql.append(" t.key = '社保个人合计' AND t.VALUE <> 0 AND t.ym = '"+period+"' || '-01' AND t1.ORGCODE_HOUSE = '"+orgCode+"' AND t1.HOUSING_FUND_PAY_ORG <> t.c_23");
+		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.housing_fund_base,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t.c_23,t1.mark");
+		sql.append(" ORDER BY t.c_23)");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+
+	/**
+	 * 查询月薪工资表中当月扣当月缴纳是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableFive(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" costorgname AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" housing_fund_base AS basicssum,");
+		sql.append(" HOUSING_FUND_STAFF AS staffsum,");
+		sql.append(" HOUSING_FUND_ORG AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,T13.Name AS costorgname,t.c_23 AS salocation,t1.HOUSING_FUND_ORG - nvl( t15.sum_per_cost, 0 ) - nvl( t16.HOUSING_FUND_ORG, 0 ) AS HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark ");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE");
+		sql.append(" AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT");
+		sql.append(" t12.CLERK_CODE,");
+		sql.append(" t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '"+period+"', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" LEFT JOIN nc6337.person_afford_sbgjj_g t15 ON t15.CLERKCODE = t.CLERKCODE AND t.YM = t15.ym");
+		sql.append(" LEFT JOIN nc6337.DEPT_AFFORD_SBGJJ t16 ON t16.CLERKCODE = t.CLERKCODE AND t.YM = t16.PAY_MONTH");
+		sql.append(" WHERE");
+		sql.append(" t.key IN ( '公积金个人合计', '费用调整公积金', '公积金个人扣款', '费用调整公积金t' )AND t.VALUE <> 0 AND t.ym = '"+period+"' || '-01' AND t1.ORGCODE_HOUSE = '"+orgCode+"' AND t1.Housing_Fund_Pay_Org = t.c_23");
+		sql.append(" AND t.CLERKCODE NOT IN ( SELECT t11.WORKERCODE FROM nc6337.v_hr_allocationratio_gjjshareF t11 WHERE t11.WA_PERIOD = '"+period+"' || '-01' )");
+		sql.append(" GROUP BY t.CLERKCODE,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.housing_fund_base,t1.HOUSING_FUND_ORG - nvl( t15.sum_per_cost, 0 ) - nvl( t16.HOUSING_FUND_ORG, 0 ),t1.HOUSING_FUND_STAFF,T13.Name,t.c_23,t1.mark");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" t.WORKERCODE AS CLERKCODE,t1.CLERKNAME,t.WA_PERIOD AS ym,0 AS sum_per_cost,T6.NAME AS costorgname,'上海天华' AS salocation,round( nvl( t1.HOUSING_FUND_ORG, 0 ) * nvl( t.perc, 0 ), 2 ) AS HOUSING_FUND_ORG,");
+		sql.append(" round( nvl( t1.HOUSING_FUND_STAFF, 0 ) * nvl( t.perc, 0 ), 2 ) AS HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.v_hr_allocationratio_gjjshareF t");
+		sql.append(" LEFT JOIN nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.WORKERCODE AND t1.PAY_MONTH || '-01' = t.WA_PERIOD");
+		sql.append(" LEFT JOIN ( SELECT DISTINCT T5.CODE, T5.NAME, t5.pk_corp FROM nc6337.ORG_CORP T5 ) T6 ON T6.pk_corp = T.COST_ORG");
+		sql.append(" WHERE");
+		sql.append(" t.WA_PERIOD = '"+period+"' || '-01'AND t1.CLERKNAME IS NOT NULL AND t1.ORGCODE_HOUSE = '"+orgCode+"' UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.PAY_MONTH || '-01' AS ym,0 AS sum_per_cost,T1.Housing_Fund_Pay_Org AS costorgname,'上海天华' AS salocation,t1.HOUSING_FUND_ORG,0 AS HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" WHERE");
+		sql.append(" t1.MARK IN ( '资质人员', '上海公司承担' )AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+
+	/**
+	 * 查询实际已缴纳当月工资个人部分未扣是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableSix(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT");
+		sql.append(" clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" T13.Name AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" housing_fund_staff AS staffsum,");
+		sql.append(" housing_fund_org AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT");
+		sql.append(" t12.CLERK_CODE,");
+		sql.append(" t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '"+period+"', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE");
+		sql.append(" t1.CLERKCODE NOT IN (");
+		sql.append(" SELECT");
+		sql.append(" t2.CLERKCODE");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE,sum( nvl( t.VALUE, 0 ) ) AS sumVALUE");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" WHERE");
+		sql.append(" t.key IN ( '公积金个人合计', '公积金个人扣款' )AND t.ym = '"+period+"' || '-01'");
+		sql.append(" GROUP BY t.CLERKCODE) t2");
+		sql.append(" WHERE");
+		sql.append(" t2.sumVALUE > 0)");
+		sql.append(" AND T1.PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname IN ( '残保金人员', '资质人员' ) ) AND t1.out_org IS NULL");
+		sql.append(" AND t1.housing_fund_base <> 0 AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"' AND clerkname = '"+clerkName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+
+	/**
+	 * 查询实际未缴当月工资个人部分已扣是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableSeven(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT");
+		sql.append(" clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" housing_fund_base AS basicssum,");
+		sql.append(" housing_fund_staff AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.housing_fund_base,( t16.sumvalue - t1.HOUSING_FUND_STAFF ) AS HOUSING_FUND_STAFF,0 AS so_org_sum,T13.Name AS orgname,t1.mark ");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT");
+		sql.append(" t12.CLERK_CODE,t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12 ");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '"+period+"', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" LEFT JOIN nc6337.person_deduction_sbgjj_g t16 ON t16.CLERKCODE = t1.CLERKCODE ");
+		sql.append(" AND t1.pay_month || '-01' = t16.ym");
+		sql.append(" WHERE");
+		sql.append(" t1.CLERKCODE IN (");
+		sql.append(" SELECT");
+		sql.append(" t2.CLERKCODE");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE,sum( nvl( t.VALUE, 0 ) ) AS sumVALUE");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t ");
+		sql.append(" WHERE");
+		sql.append(" t.key IN ( '公积金个人合计', '公积金个人扣款' ) AND t.ym = '"+period+"' || '-01'");
+		sql.append(" GROUP BY t.CLERKCODE) t2");
+		sql.append(" WHERE");
+		sql.append(" t2.sumVALUE > 0) ");
+		sql.append(" AND T12.NC_PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname IN ( '残保金人员', '资质人员' ) )");
+		sql.append(" AND t1.out_org IS NULL AND t1.housing_fund_base <> 0 AND ( t16.sumvalue - t1.HOUSING_FUND_STAFF ) <> 0");
+		sql.append(" AND t1.PAY_MONTH = '"+period+"' AND t1.ORGCODE_HOUSE = '"+orgCode+"'");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.housing_fund_base,t1.HOUSING_FUND_STAFF,t1.HOUSING_FUND_ORG,T13.Name AS orgname,t1.mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT");
+		sql.append(" t12.CLERK_CODE,t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '"+period+"', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE");
+		sql.append(" t1.mark LIKE '%表七%' AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
 	/**
 	 * 查询中间表是否存在数据
 	 * @param orgCode 查询组织
@@ -261,7 +677,7 @@ public class AccumulationFundAllInsertDiaLog extends UIDialog implements ActionL
 	 * @return
 	 * @throws Exception
 	 */
-	public String QueyrOrgCode(String orgName) throws Exception {
+	public String queyrOrgCode(String orgName) throws Exception {
 		String sql = "select code from org_financeorg where name ='"+orgName+"' and enablestate = '2' and dr = 0";
 		return  (String) iuap.executeQuery(sql.toString(), new ColumnProcessor());
 	}

+ 2 - 2
hr/hr/src/client/nc/ui/hr/baod_orders/view/AccumulationFundAllUpdateDialog.java

@@ -104,7 +104,7 @@ public class AccumulationFundAllUpdateDialog extends UIDialog {
 			int index = str.indexOf("-");
 			int tableNumber = Integer.parseInt(str.substring(0, index));
 			String orgName = str.substring(index + 1);
-			Object[] rowData = { GetTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5],
+			Object[] rowData = { getTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5],
 					data[6] };
 			dataList.add(rowData);
 		}
@@ -220,7 +220,7 @@ public class AccumulationFundAllUpdateDialog extends UIDialog {
 	 * @param tableNumber 小标题编号
 	 * @return
 	 */
-	private String GetTableName(int tableNumber) {
+	private String getTableName(int tableNumber) {
 		switch (tableNumber) {
 		case 1:
 			return "表一:由个人承担";

+ 135 - 35
hr/hr/src/client/nc/ui/hr/baod_orders/view/AccumulationFundAllocationUI.java

@@ -81,7 +81,7 @@ import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 public class AccumulationFundAllocationUI extends ToftPanel {
 	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
 	private ButtonObject bt_query = new ButtonObject("查询", "", 2, "bt_query");
-	private ButtonObject bt_insert = new ButtonObject("表八新增", "", 2, "bt_insert");
+	private ButtonObject bt_insert = new ButtonObject("新增", "", 2, "bt_insert");
 	private ButtonObject bt_update = new ButtonObject("修改", "", 2, "bt_update");
 	private ButtonObject bt_output = new ButtonObject("导出", "", 2, "bt_output");
 	private ButtonObject bt_voucher = new ButtonObject("生成凭证", "", 2, "bt_voucher");
@@ -351,6 +351,11 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 				if (null != pk_recbill) {
 					ExceptionUtils.wrappBusinessException("内部应收单【" + period + "】已经生成!不能重复生成!");
 				}
+				//2025-06-10 start
+				if(null == tableFourSelfMap||tableFourSelfMap.isEmpty()) {
+					ExceptionUtils.wrappBusinessException("本月无数据!");
+				}
+				//2025-06-10 end
 				MessageDialog.showHintDlg(this, "", "生成内部应收单开始");
 				// 组装应收单数据新增应收单
 				String billNO = addReceivableBill(getTablePanel());
@@ -699,17 +704,30 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableOne(String orgCode, String period) throws Exception {
+		String title = "表一:由个人承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,sum_per_cost AS orgsum,mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM AS seq,t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t1.housing_fund_base as endowment_base,t1.mark");
+		sql.append(" (SELECT ");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t.CLERKCODE AS clerkcode,");
+		sql.append(" T1.CLERKNAME AS clerkname,");
+		sql.append(" CAST( t1.housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST( NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST( SUM( NVL( t.VALUE, 0 ) ) AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" t1.mark AS mark");
 		sql.append(" from NC6337.v_data_xz_gjjshare t");
 		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE AND t1.PAY_MONTH || '-01' = t.ym");
 		sql.append(" WHERE");
 		sql.append(" t.key = '公积金公司税后扣款' and t.VALUE <> 0 and t.ym='"+period+"'||'-01' and t1.ORGCODE_HOUSE='"+orgCode+"' and t1.ENDOWMENT_BASE is not null");
-		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.housing_fund_base,t1.mark ORDER BY ROWNUM)");
+		sql.append(" GROUP BY t.CLERKCODE,T1.CLERKNAME,t1.housing_fund_base,t1.mark");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
+	
+
+	
 
 	/**
 	 * 查询外部公司承担
@@ -720,14 +738,23 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableTwo(String orgCode, String period) throws Exception {
+		String title = "表二:由外部公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum AS staffsum,so_org_sum AS orgsum,mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t.*");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode as clerkcode,");
+		sql.append(" clerkname as clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark AS mark");
 		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
 		sql.append(" WHERE");
 		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '"+period+"' AND t.ORGCODE = '"+orgCode+"'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -740,10 +767,18 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableThree(String orgCode, String period) throws Exception {
+		String title = "表三:由部门承担或全额公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append(" SELECT clerkcode,clerkname,housing_fund_base AS basicssum,HOUSING_FUND_STAFF AS staffsum,HOUSING_FUND_ORG AS orgsum");
+		sql.append(" SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t2.*");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode AS clerkcode,");
+		sql.append(" clerkname AS clerkname,");
+		sql.append(" CAST(housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(HOUSING_FUND_STAFF AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(HOUSING_FUND_ORG AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" NULL AS mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" T.housing_fund_base,T.CLERKCODE,T.CLERKNAME,T.HOUSING_FUND_ORG,T.HOUSING_FUND_STAFF,T.ORGCODE_HOUSE,T.PAY_MONTH,T.MARK");
@@ -760,7 +795,8 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" t1.MARK = '表三') t2");
 		sql.append(" WHERE");
 		sql.append(" t2.PAY_MONTH = '"+period+"' AND t2.ORGCODE_HOUSE = '"+orgCode+"'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -773,10 +809,18 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableFour(String orgCode, String period) throws Exception {
+		String title = "表四:个人部分已在集团内其他公司扣除";
 		StringBuffer sql = new StringBuffer();
-		sql.append(" SELECT salocation as orgname,clerkcode,clerkname,housing_fund_base AS basicssum,HOUSING_FUND_STAFF AS staffsum,HOUSING_FUND_ORG AS orgsum,mark");
+		sql.append(" SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM AS seq,t11.*");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(HOUSING_FUND_STAFF AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(HOUSING_FUND_ORG AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t.c_23 AS salocation,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark");
@@ -787,8 +831,9 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" WHERE");
 		sql.append(" t.key = '社保个人合计' AND t.VALUE <> 0 AND t.ym = '"+period+"' || '-01' AND t1.ORGCODE_HOUSE = '"+orgCode+"' AND t1.HOUSING_FUND_PAY_ORG <> t.c_23");
 		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.housing_fund_base,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t.c_23,t1.mark");
-		sql.append(" ORDER BY t.c_23) t11");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(" ORDER BY t.c_23)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -801,9 +846,18 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableFive(String orgCode, String period) throws Exception {
+		String title = "表五:月薪工资表中当月扣当月缴纳";
 		StringBuffer sql = new StringBuffer();
-		sql.append(" SELECT");
-		sql.append(" costorgname AS orgname,clerkcode,clerkname,housing_fund_base AS basicssum,HOUSING_FUND_STAFF AS staffsum,HOUSING_FUND_ORG AS orgsum,mark");
+		sql.append(" SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" costorgname AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(HOUSING_FUND_STAFF AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(HOUSING_FUND_ORG AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,T13.Name AS costorgname,t.c_23 AS salocation,t1.HOUSING_FUND_ORG - nvl( t15.sum_per_cost, 0 ) - nvl( t16.HOUSING_FUND_ORG, 0 ) AS HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark ");
@@ -843,8 +897,9 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" FROM");
 		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
 		sql.append(" WHERE");
-		sql.append(" t1.MARK IN ( '资质人员', '上海公司承担' )AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"'");
-		sql.append(" )ORDER BY costorgname");
+		sql.append(" t1.MARK IN ( '资质人员', '上海公司承担' )AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"')");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -857,11 +912,19 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableSix(String orgCode, String period) throws Exception {
+		String title = "表六:实际已缴当月工资个人部分未扣";
 		StringBuffer sql = new StringBuffer();
 		sql.append(" SELECT");
-		sql.append(" orgname,clerkcode,clerkname,endowment_base AS basicssum,housing_fund_staff AS staffsum,housing_fund_org AS orgsum,mark ");
+		sql.append(" orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT t1.*,T13.Name AS orgname");
+		sql.append(" (SELECT");
+		sql.append(" T13.Name AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(housing_fund_staff AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(housing_fund_org AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1");
 		sql.append(" LEFT JOIN (");
@@ -891,7 +954,8 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" t2.sumVALUE > 0)");
 		sql.append(" AND T1.PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname IN ( '残保金人员', '资质人员' ) ) AND t1.out_org IS NULL");
 		sql.append(" AND t1.housing_fund_base <> 0 AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"'");
-		sql.append(" )ORDER BY orgname");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -904,9 +968,19 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableSeven(String orgCode, String period) throws Exception {
+		String title = "表七:实际未缴当月工资个人部分已扣";
 		StringBuffer sql = new StringBuffer();
 		sql.append(" SELECT");
-		sql.append(" orgname,clerkcode,clerkname,housing_fund_base AS basicssum,housing_fund_staff as staffsum,so_org_sum AS orgsum,mark");
+		sql.append(" orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(housing_fund_staff AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.housing_fund_base,( t16.sumvalue - t1.HOUSING_FUND_STAFF ) AS HOUSING_FUND_STAFF,0 AS so_org_sum,T13.Name AS orgname,t1.mark ");
@@ -957,8 +1031,9 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
 		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
 		sql.append(" WHERE");
-		sql.append(" t1.mark LIKE '%表七%' AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"'");
-		sql.append(" )ORDER BY orgname");
+		sql.append(" t1.mark LIKE '%表七%' AND t1.PAY_MONTH = '"+period+"'AND t1.ORGCODE_HOUSE = '"+orgCode+"')");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -979,7 +1054,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" WHERE");
 		sql.append(" tablename = '公积金分摊表' AND combined_field LIKE '表八:实际集团内其他公司已缴当月工资个人部分已扣%'");
 		sql.append("  AND orgcode = '" + orgCode + "' AND period = '" + period + "'");
-		sql.append(" ORDER BY CONTRIBUTORYORG");
+		sql.append(" ORDER BY CONTRIBUTORYORG,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -1025,6 +1100,30 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		}
 		return map;
 	}
+	
+	/**
+	 * 拼接中间表sql
+	 * @param title
+	 * @param orgCode
+	 * @param period
+	 * @return
+	 */
+	public StringBuffer jointSql(String title, String orgCode, String period) {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" contributoryorg  AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" basicssum,");
+		sql.append(" staffsum,");
+		sql.append(" orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM accumulation_fund");
+		sql.append(" WHERE");
+		sql.append(" tablename = '公积金分摊表' AND combined_field LIKE '"+title+"%' AND orgcode = '"+orgCode+"' AND period = '"+period+"' ");
+		return sql;
+	}
 
 	/**
 	 * 查询中间表数据并处理
@@ -1081,14 +1180,14 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 				return;
 			} else {
 				for (int i = 0; i < rows.length; i++) {
+					Object obj = table.getTable().getValueAt(rows[i], 7);
+					if (obj == null) {
+						MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
+						return;
+					}
 					// 小标题加上组织和表组合为8位
 					Object[] rowData = new Object[8];
 					for (int j = 0; j < 8; j++) {
-						Object obj = table.getTable().getValueAt(rows[i], 7);
-						if (obj == null) {
-							MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
-							return;
-						}
 						rowData[j] = table.getTable().getValueAt(rows[i], j);
 					}
 					selectedData.add(rowData);
@@ -1106,7 +1205,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 	}
 
 	/**
-	 * 打开表八:实际集团内其他公司已缴当月工资个人部分已扣新增页面
+	 * 打开新增页面
 	 */
 	private void insert() {
 		try {
@@ -1232,13 +1331,14 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		String pk_org = getPk_financeorg(orgCode);
 		// 组织版本
 		String pk_group = InvocationInfoProxy.getInstance().getGroupId();// 集团
-		 String yearperiod = period.substring(0, 4);// 会计年度
-		 String monthperiod = period.substring(5, 7);// 会计月份
+		String yearperiod = period.substring(0, 4);// 会计年度
+		String monthperiod = period.substring(5, 7);// 会计月份
 		Date newDate = convertStringToDate(period + "-01", "yyyy-MM-dd");
 		String nexMonthDate = getMonthFirstDate(newDate);// 下月最后一天
 		String year = nexMonthDate.substring(0, 4);// 会计年度
 		String month = nexMonthDate.substring(5, 7);// 会计月份
-		String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
+		//String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
+		String pk_user = getpk_user("XTPZ000101");//制单人
 		String pk_accountGlbook = tran_accountingbook(pk_org);// 核算账簿
 		String pk_vouchertype = vouchertypeGetCode("03");// 凭证类型03;
 		String pk_org_v = getPkorgv(pk_org);
@@ -1251,7 +1351,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		voucher.setPk_manager("N/A");
 		voucher.setPk_prepared(pk_user);
 		voucher.setCreator(pk_user);
-		voucher.setPk_system("GJ");// 新增来源系统(社保公积金),用来和手工区分
+		voucher.setPk_system("GL");// 新增来源系统(社保公积金),用来和手工区分
 		// voucher.setPrepareddate(new UFDate(period + "-30"));// 凭证日期
 		if ("02".equals(month)) {
 			voucher.setPrepareddate(new UFDate(nexMonthDate));// 凭证日期

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

@@ -424,7 +424,7 @@ public class IncomeStatisticalUI extends ToftPanel {
 				"公司级管理者保底补差","分红"};
 		Vector<Object> vTitle = convertovector(m_sTitle);
 		Vector<Vector<Object>> vresult = new Vector<Vector<Object>>();
-		ArrayList<Object> list = QueryData(codein, startPeriod, endPeriod, map,psncode,psnname,codeTypein);
+		ArrayList<Object> list = queryData(codein, startPeriod, endPeriod, map,psncode,psnname,codeTypein);
 		UFDouble totalsrzj = new UFDouble(UFDouble.ZERO_DBL);
 		UFDouble totalgdbf = new UFDouble(UFDouble.ZERO_DBL);
 		UFDouble totalfdbf = new UFDouble(UFDouble.ZERO_DBL);
@@ -720,7 +720,7 @@ public class IncomeStatisticalUI extends ToftPanel {
 	/*
 	 * 自求多福
 	 */
-	private ArrayList<Object> QueryData(String codein,String startPeriod,String endPeriod, Map<String,String> map,String psncode,String psnname,String codeTypein) throws BusinessException{
+	private ArrayList<Object> queryData(String codein,String startPeriod,String endPeriod, Map<String,String> map,String psncode,String psnname,String codeTypein) throws BusinessException{
 		
 		StringBuffer sql = new StringBuffer();
 		sql.append(" SELECT  ");

+ 493 - 0
hr/hr/src/client/nc/ui/hr/baod_orders/view/ServiceChargeAllInsertDiaLog.java

@@ -0,0 +1,493 @@
+package nc.ui.hr.baod_orders.view;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.List;
+import java.util.Map;
+
+import nc.bs.framework.common.NCLocator;
+import nc.desktop.ui.WorkbenchEnvironment;
+import nc.itf.hr.SocialInsuranceAllMaintain;
+import nc.itf.uap.IUAPQueryBS;
+import nc.jdbc.framework.processor.ColumnProcessor;
+import nc.jdbc.framework.processor.MapListProcessor;
+import nc.ui.pub.beans.MessageDialog;
+import nc.ui.pub.beans.UIButton;
+import nc.ui.pub.beans.UIDialog;
+import nc.ui.pub.beans.UIPanel;
+import nc.ui.pub.beans.UIRefPane;
+import nc.ui.pub.bill.BillCardPanel;
+import nc.ui.pub.bill.BillEditEvent;
+import nc.ui.pub.bill.BillEditListener;
+import nc.vo.ecpubapp.pattern.data.ValueUtils;
+import nc.vo.pubapp.pattern.pub.PubAppTool;
+import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
+
+/**
+ * 服务费分摊表新增界面
+ * @author YaoYu
+ *
+ */
+public class ServiceChargeAllInsertDiaLog extends UIDialog implements ActionListener,BillEditListener{
+
+	private static final long serialVersionUID = 1L;
+	private SocialInsuranceAllMaintain siaMaintain = NCLocator.getInstance().lookup(SocialInsuranceAllMaintain.class);
+	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
+	private UIPanel btnUIPanel;
+	private BillCardPanel jlcardPanel = null;//卡面面板
+	private UIButton btnOK;
+	private UIButton btnAddRow;
+	private UIButton btnRemoveRow;
+	private UIPanel ivjUIPanel = null;
+	
+	@SuppressWarnings("deprecation")
+	public ServiceChargeAllInsertDiaLog() throws Exception {
+		initialize();
+	}
+	
+	private void initialize() {
+	    setLayout(new BorderLayout());
+	    setSize(new Dimension(1050, 350));
+	    this.setResizable(true);
+	    add(getUIPanel(), BorderLayout.CENTER);
+	    this.addListenerEvent();
+	    doAddAction();
+	}
+	
+	
+	private UIPanel getUIPanel() {
+		if (this.ivjUIPanel == null) {
+			this.ivjUIPanel = new UIPanel();
+			this.ivjUIPanel.setLayout(new BorderLayout());
+			this.ivjUIPanel.setPreferredSize(new Dimension(0, 500));
+			this.ivjUIPanel.add(getBtnUIPanel(), BorderLayout.SOUTH);
+			this.ivjUIPanel.add(getJlcardPanel(), BorderLayout.CENTER);
+		}
+		return this.ivjUIPanel;
+	}	
+
+	private void addListenerEvent() {
+		this.getJlcardPanel().addEditListener(this);
+		this.getBtnOK().addActionListener(this);
+		this.getBtnAddRow().addActionListener(this);
+		this.getBtnRemoveRowRow().addActionListener(this);
+	}
+	
+	
+	
+	private BillCardPanel getJlcardPanel() {
+		if(this.jlcardPanel == null){
+			this.jlcardPanel = new BillCardPanel();
+			this.jlcardPanel.setName("jlcardPanel");
+			//根据单据模板编码加载模板
+			this.jlcardPanel.loadTemplet("fwfxz",null,WorkbenchEnvironment.getInstance().getLoginUser().getPrimaryKey(),
+					WorkbenchEnvironment.getInstance().getLoginUser().getPk_org());
+			UIRefPane orgCodeRef = (UIRefPane) this.jlcardPanel.getBodyItem("orgcode").getComponent();
+			UIRefPane orgCodeRefs = (UIRefPane) this.jlcardPanel.getBodyItem("contributoryorg").getComponent();
+			//节点编码
+			String nodeCode = "60H20105";
+			//权限组织
+			String[] pkorgs = FunctionPermProfileManager.getInstance().getProfile(WorkbenchEnvironment.getInstance().getLoginUser().getUser_code()).getFuncSubInfo(nodeCode).getFuncPermissionPkorgs();
+			//公司字段设置组织权限
+			orgCodeRef.getRefModel().setFilterPks(pkorgs);
+			//成本归属公司设置组织权限
+			orgCodeRefs.getRefModel().setFilterPks(pkorgs);
+		}
+		return this.jlcardPanel;
+	}
+
+	private UIPanel getBtnUIPanel() {
+		if (this.btnUIPanel == null) {
+			this.btnUIPanel = new nc.ui.pub.beans.UIPanel();
+			//btnUIPanel.add(this.getBtnAddRow(), this.getBtnAddRow().getName());
+			//btnUIPanel.add(this.getBtnRemoveRowRow(), this.getBtnRemoveRowRow().getName());
+			this.btnUIPanel.add(this.getBtnOK(), this.getBtnOK().getName());
+		}
+		return this.btnUIPanel;
+	}
+	
+	private UIButton getBtnAddRow() {
+	    if (this.btnAddRow == null) {
+	    	this.btnAddRow = new UIButton();
+	        this.btnAddRow.setName("btnAddRow");
+	        this.btnAddRow.setText("新增行");
+	    }
+	    return this.btnAddRow;
+	}
+	
+	private UIButton getBtnRemoveRowRow() {
+	    if (this.btnRemoveRow == null) {
+	    	this.btnRemoveRow = new UIButton();
+	    	this.btnRemoveRow.setName("btnRemoveRow");
+	    	this.btnRemoveRow.setText("删除行");
+	    }
+	    return this.btnRemoveRow;
+	}
+
+
+	private UIButton getBtnOK() {
+		if (this.btnOK == null) {
+			this.btnOK = new UIButton();
+			this.btnOK.setName("btnOK");
+			this.btnOK.setText("确定(Y)");
+		}
+		return this.btnOK;
+	}
+
+	private void doOKAction() {
+		try {
+			BillCardPanel cp = this.jlcardPanel;
+			//判断必填项
+			this.jlcardPanel.dataNotNullValidate();	
+
+			//循环表单行数
+			for (int i = 0; i < cp.getRowCount(); i++) {
+				String tableName = ValueUtils.getString(cp.getBodyValueAt(i, "tablename"));//表
+				String orgCode = queyrOrgCode(ValueUtils.getString(cp.getBodyValueAt(i, "orgcode")));//公司
+				String contributoryOrgName = ValueUtils.getString(cp.getBodyValueAt(i, "contributoryorg"));//成本归属公司
+				String period = ValueUtils.getString(cp.getBodyValueAt(i, "period"));//年月
+				String clerkCode = ValueUtils.getString(cp.getBodyValueAt(i, "clerkcode"));//员工编号
+				String clerkName = ValueUtils.getString(cp.getBodyValueAt(i, "clerkname"));//姓名
+				String basicssum = ValueUtils.getString(cp.getBodyValueAt(i, "basicssum"));//缴纳基数
+				String staffsum = ValueUtils.getString(cp.getBodyValueAt(i, "staffsum"));//个人部分
+				String orgsum = ValueUtils.getString(cp.getBodyValueAt(i, "orgsum"));//公司部分
+				String mark = ValueUtils.getString(cp.getBodyValueAt(i, "mark"));//备注
+				//contributoryOrgName可能存在为空的情况,拼接的时候会把null拼接到新的字符串,使用三目运算处理改问题
+				contributoryOrgName = contributoryOrgName == null ? "" : contributoryOrgName;
+				String combinedField = tableName + contributoryOrgName + clerkCode + clerkName;
+				if(queryTable(orgCode, period, combinedField)) {
+					MessageDialog.showHintDlg(this, "提示", "成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+				return;
+				}
+				if(tableName.equals("表一:个人承担")) {
+					queryTableOne(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表二:外部公司承担")) {
+					queryTableTwo(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表三:由部门承担或全额公司承担")) {
+					queryTableThree(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表四:由公司承担")) {
+					queryTableFour(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				StringBuilder insertSQL = new StringBuilder("INSERT INTO accumulation_fund VALUES (");
+				insertSQL.append("'").append("服务费分摊表").append("', ");
+				insertSQL.append("'").append(orgCode).append("', ");
+				insertSQL.append("'").append(period).append("', ");
+				insertSQL.append("'").append(combinedField).append("', ");
+				insertSQL.append(getString(contributoryOrgName)).append(", ");
+				insertSQL.append(getString(clerkCode)).append(", ");
+				insertSQL.append(getString(clerkName)).append(", ");
+				insertSQL.append(getString(basicssum)).append(", ");
+				insertSQL.append(getString(staffsum)).append(", ");
+				insertSQL.append(getString(orgsum)).append(", ");
+				insertSQL.append(getString(mark)).append(", ");
+				insertSQL.append("sysdate,");
+				insertSQL.append("null)");
+				siaMaintain.executeBaseDAO(insertSQL.toString());
+			}
+			//关闭弹框
+			this.dispose();
+		} catch (Exception e) {
+			MessageDialog.showHintDlg(this, "提示", e.getMessage());
+		}
+	}
+
+	
+	/**
+	 *往最后一行插入一行
+	 */
+	private void doAddAction() {
+		 this.jlcardPanel.getBillModel().addLine();
+	}
+	
+	/**
+	 * 删除最后一行
+	 */
+	private void doRemoveAction() {
+		this.jlcardPanel.delLine();
+	}
+	
+	
+	@Override
+	public void afterEdit(BillEditEvent e) {
+		try {
+			if("tablename".equals(e.getKey())) {
+				String tablename = String.valueOf(e.getValue());
+				//只有表一:个人承担需要填写个人部分,选择其他时隐藏个人部分列并清空该单元格数据
+				if("表一:个人承担".equals(tablename)) {
+					this.jlcardPanel.showBodyTableCol("staffsum");
+				}else {
+					this.jlcardPanel.hideBodyTableCol("staffsum");
+					this.jlcardPanel.setBodyValueAt(null, 0, "staffsum");
+				}
+			}
+			if("orgcode".equals(e.getKey())) {
+				String pk_org = String.valueOf(e.getValue());
+				UIRefPane clerkCodeRef = (UIRefPane) this.jlcardPanel.getBodyItem("clerkcode").getComponent();
+				// 设置当前组织
+				clerkCodeRef.setPk_org(pk_org);
+			}
+			if("clerkcode".equals(e.getKey())) {
+				String clerkcode = String.valueOf(e.getValue());
+				if(clerkcode != null) {
+					String sql = "SELECT name FROM bd_psndoc WHERE pk_psndoc = '"+clerkcode+"'";
+					String clerkname = (String) iuap.executeQuery(sql, new ColumnProcessor());
+					//赋值姓名
+					this.jlcardPanel.setBodyValueAt(clerkname, 0, "clerkname");
+				}else {
+					//清空姓名
+					this.jlcardPanel.setBodyValueAt(null, 0, "clerkname");
+				}
+			}
+		} catch (Exception e1) {
+			MessageDialog.showHintDlg(this, "提示", e1.getMessage());
+		}
+	}
+
+	@Override
+	public void bodyRowChange(BillEditEvent arg0) {
+		
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		if (e.getSource() == this.getBtnOK()) {
+			// 确定按钮执行事件
+			this.doOKAction();
+		}else if (e.getSource() == this.getBtnAddRow()) {
+			// 新增行按钮执行事件
+			this.doAddAction();
+		}else {
+			// 删除行按钮执行事件
+			this.doRemoveAction();
+		}	
+	}
+	
+	/**
+	 * 将Object转换成适用sql拼接字符
+	 * @param value
+	 * @return
+	 */
+	private String getString(Object value) {
+		if("".equals(value) || value == null) {
+			return null;
+		}
+		return "'"+value+"'";
+		
+	}
+	
+	/**
+	 * 查询个人承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableOne(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" NULL AS orgsum,");
+		sql.append(" NULL AS mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT ROWNUM AS seq,t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t1.ENDOWMENT_BASE");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" WHERE");
+		sql.append(" t.key = '社保公司税后扣款' AND t.VALUE <> 0 AND t.ym = '" + period + "' || '-01' AND t1.ORGCODE = '" + orgCode + "'");
+		sql.append(" AND t1.ENDOWMENT_BASE IS NOT NULL");
+		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE");
+		sql.append(" ORDER BY ROWNUM)");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询外部公司承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableTwo(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" AGENCY_MONEY AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
+		sql.append(" WHERE");
+		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '" + period + "' AND t.ORGCODE = '" + orgCode + "'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询部门承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableThree(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" AGENCY_MONEY AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT T.Endowment_Base,T.CLERKCODE,T.CLERKNAME,T.so_org_sum,T.so_staff_sum,T.ORGCODE,T.PAY_MONTH,");
+		sql.append(" T.AGENCY_MONEY,T.MARK");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY T");
+		sql.append(" WHERE");
+		sql.append(" T.PK_POST IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname = '残保金人员' )");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT t1.Endowment_Base,t1.CLERKCODE,t1.CLERKNAME,t1.so_org_sum,t1.so_staff_sum,T1.ORGCODE,");
+		sql.append(" t1.PAY_MONTH,T1.AGENCY_MONEY,T1.MARK");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" WHERE");
+		sql.append(" t1.MARK = '表三') t2");
+		sql.append(" WHERE");
+		sql.append(" t2.PAY_MONTH = '" + period + "'AND t2.ORGCODE = '" + orgCode + "'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+
+	
+	/**
+	 * 查询公司承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableFour(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" NULL AS basicssum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" AGENCY_MONEY AS orgsum,");
+		sql.append(" NULL AS mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE, T1.CLERKNAME, t.ym, sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,");
+		sql.append(" T13.Name AS costorgname, T13.Name AS salocation, to_number( t1.AGENCY_MONEY ) AS AGENCY_MONEY");
+		sql.append(" FROM NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE  AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" LEFT JOIN (SELECT t12.CLERK_CODE, t12.NC_PK_POST FROM nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' ) ) T12 ON t12.CLERK_CODE = t.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE t.key IN ( '社保个人合计', '费用调整社保', '社保个人扣款', '费用调整社保T' )");
+		sql.append(" AND t.ym = '" + period + "' || '-01'  AND t1.ORGCODE = '" + orgCode + "' ");
+		sql.append(" AND t.CLERKCODE NOT IN ( SELECT t11.WORKERCODE FROM nc6337.v_hr_allocationratio_gjjshareF t11 WHERE t11.WA_PERIOD = '" + period + "' || '-01' ) ");
+		sql.append(" AND t1.CLERKNAME <> '李旭光'  AND t14.PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname = '残保金人员' ) ");
+		sql.append(" GROUP BY t.CLERKCODE, T1.CLERKNAME, t.ym, t1.AGENCY_MONEY, T13.Name UNION ALL");
+		sql.append(" SELECT t.WORKERCODE AS CLERKCODE, t1.CLERKNAME, t.WA_PERIOD AS ym, 0 AS sum_per_cost, T6.NAME AS costorgname, '上海天华' AS salocation,");
+		sql.append(" round( nvl( t1.AGENCY_MONEY, 0 ) * nvl( t.perc, 0 ), 3 ) AS AGENCY_MONEY ");
+		sql.append(" FROM nc6337.v_hr_allocationratio_gjjshareF t");
+		sql.append(" LEFT JOIN nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.WORKERCODE ");
+		sql.append(" AND t1.PAY_MONTH || '-01' = t.WA_PERIOD");
+		sql.append(" LEFT JOIN ( SELECT DISTINCT T5.CODE, T5.NAME, t5.pk_corp FROM nc6337.ORG_CORP T5 ) T6 ON T6.pk_corp = T.COST_ORG ");
+		sql.append(" WHERE t.WA_PERIOD = '" + period + "' || '-01'  AND t1.CLERKNAME IS NOT NULL  AND t1.ORGCODE = '" + orgCode + "' UNION ALL");
+		sql.append(" SELECT t1.CLERKCODE, t1.CLERKNAME, t1.PAY_MONTH || '-01' AS ym, 0 AS sum_per_cost, T1.PAY_SOS_ORG AS costorgname,");
+		sql.append(" '上海天华' AS salocation, to_number( t1.AGENCY_MONEY ) AS AGENCY_MONEY ");
+		sql.append(" FROM NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1 ");
+		sql.append(" WHERE t1.MARK IN ( '资质人员', '上海公司承担' )  AND t1.PAY_MONTH = '" + period + "'  AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询中间表是否存在数据
+	 * @param orgCode 查询组织
+	 * @param period 查询期间
+	 * @param combinedField 小标题名字+小标题组织+员工号+姓名组合
+	 * @return
+	 * @throws Exception
+	 */
+	private Boolean queryTable(String orgCode, String period,String combinedField) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT");
+		sql.append(" combined_field,basicssum,staffsum,orgsum,mark from accumulation_fund");
+		sql.append(" WHERE ");
+		sql.append(" tablename = '服务费分摊表' AND combined_field = '" + combinedField + "'");
+		sql.append(" AND orgcode = '" + orgCode + "' AND period = '" + period + "' ");
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) == null) {
+			return false;
+		} else {
+			return true;
+		}
+	}
+	
+	/**
+	 * 根据组织名称查询组织编码
+	 * @param orgName
+	 * @return
+	 * @throws Exception
+	 */
+	public String queyrOrgCode(String orgName) throws Exception {
+		String sql = "select code from org_financeorg where name ='"+orgName+"' and enablestate = '2' and dr = 0";
+		return  (String) iuap.executeQuery(sql.toString(), new ColumnProcessor());
+	}
+}

+ 28 - 11
hr/hr/src/client/nc/ui/hr/baod_orders/view/ServiceChargeAllUpdateDialog.java

@@ -40,6 +40,7 @@ public class ServiceChargeAllUpdateDialog extends UIDialog{
 	private JTable table;
 	private String orgCode;
 	private String period;
+	private int tableNumber = 0; 
 
 	public ServiceChargeAllUpdateDialog(List<Object[]> selectedData, String orgCode, String period) throws Exception {
 		this.selectedData = selectedData;
@@ -93,23 +94,30 @@ public class ServiceChargeAllUpdateDialog extends UIDialog{
 	private void addComponents() throws Exception {
 		JPanel panel = new JPanel(new BorderLayout());
 		List<Object[]> dataList = new ArrayList<Object[]>();
-		String[] columnNames = { "表", "成本归属公司", "员工编号", "姓名", "缴费基数", "个人部分", "公司部分", "备注" };
+		String[] columnNames;
+		
 		for (int i = 0; i < selectedData.size(); i++) {
 			Object[] data = selectedData.get(i);
 			// 获取小标题编号和公司组合字段
 			String str = String.valueOf(selectedData.get(i)[7]);
 			int index = str.indexOf("-");
-			int tableNumber = Integer.parseInt(str.substring(0, index));
-			
+			if(i == 0) {
+				tableNumber = Integer.parseInt(str.substring(0, index));
+			}
 			String orgName = str.substring(index + 1);
-			Object[] rowData = { GetTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5], data[6] };
-			Object[] rowData2 = { GetTableName(tableNumber), orgName, data[1], data[2], data[3], null, data[4], data[6] };
-			if(tableNumber>=2){
+			Object[] rowData = { getTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5], data[6] };
+			Object[] rowData2 = { getTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5] };
+			if(tableNumber >= 2){
 				dataList.add(rowData2);	
 			}else{
-				dataList.add(rowData);	
+				dataList.add(rowData);
 			}
 		}
+		if(tableNumber >= 2){
+			columnNames = new String[]{ "表", "成本归属公司", "员工编号", "姓名", "缴费基数", "公司部分", "备注"};
+		}else{
+			columnNames = new String[]{ "表", "成本归属公司", "员工编号", "姓名", "缴费基数", "个人部分", "公司部分", "备注" };
+		}
 		Object[][] dataArray = new Object[dataList.size()][columnNames.length];
 		for (int i = 0; i < dataList.size(); i++) {
 			Object[] rowData = dataList.get(i);
@@ -154,9 +162,18 @@ public class ServiceChargeAllUpdateDialog extends UIDialog{
 				String clerkCode = ValueUtils.getString(table.getValueAt(i, 2));//员工编号
 				String clerkName = ValueUtils.getString(table.getValueAt(i, 3));//姓名
 				String basicssum = ValueUtils.getString(table.getValueAt(i, 4));//缴纳基数
-				String staffsum = ValueUtils.getString(table.getValueAt(i, 5));//个人部分
-				String orgsum = ValueUtils.getString(table.getValueAt(i, 6));//公司部分
-				String mark = ValueUtils.getString(table.getValueAt(i, 7));//备注
+				//只有表一修改存在个人部分列,其它表修改默认null;
+				String staffsum = null;//个人部分
+				String orgsum = null;//公司部分
+				String mark = null;//备注
+				if(tableNumber == 1) {
+					staffsum = ValueUtils.getString(table.getValueAt(i, 5));
+					orgsum = ValueUtils.getString(table.getValueAt(i, 6));
+					mark = ValueUtils.getString(table.getValueAt(i, 7));
+				}else {
+					orgsum = ValueUtils.getString(table.getValueAt(i, 5));//公司部分
+					mark = ValueUtils.getString(table.getValueAt(i, 6));//备注
+				}
 				String combinedField = table_name + table_org + clerkCode + clerkName;
 				//第一次处理调新增,第二次处理调修改
 				if(queryTable(orgCode, period, combinedField)) {
@@ -219,7 +236,7 @@ public class ServiceChargeAllUpdateDialog extends UIDialog{
 	 * @param tableNumber 小标题编号
 	 * @return
 	 */
-	private String GetTableName(int tableNumber) {
+	private String getTableName(int tableNumber) {
 		switch (tableNumber) {
 		case 1:
 			return "表一:个人承担";

+ 141 - 50
hr/hr/src/client/nc/ui/hr/baod_orders/view/ServiceChargeAllocationUI.java

@@ -74,6 +74,7 @@ import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 public class ServiceChargeAllocationUI extends ToftPanel {
 	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
 	private ButtonObject bt_query = new ButtonObject("查询", "", 2, "bt_query");
+	private ButtonObject bt_insert = new ButtonObject("新增", "", 2, "bt_insert");
 	private ButtonObject bt_update = new ButtonObject("修改", "", 2, "bt_update");
 	private ButtonObject bt_output = new ButtonObject("导出", "", 2, "bt_output");
 	private ButtonObject bt_voucher = new ButtonObject("生成凭证", "", 2, "bt_voucher");
@@ -115,7 +116,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		add(getUIPanel0(), BorderLayout.NORTH);
 		add(getUIPanel2(), BorderLayout.CENTER);
 		add(getUIPanel4(), BorderLayout.SOUTH);
-		setButtons(new ButtonObject[] { this.bt_query, this.bt_update, this.bt_output, this.bt_voucher, this.bt_linkvouchar });// 添加按钮
+		setButtons(new ButtonObject[] { this.bt_query, this.bt_insert, this.bt_update, this.bt_output, this.bt_voucher, this.bt_linkvouchar });// 添加按钮
 	}
 
 	private UILabel getOrgLabel() {
@@ -274,14 +275,13 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				Vector v = (Vector) periodData.get(0);
 				period = v.get(0).toString();
 			}
-			if (orgCode == null || period == null) {
+			if (!"bt_insert".equals(bt.getCode()) && (orgCode == null || period == null)) {
 				ExceptionUtils.wrappBusinessException("财务组织、年月必须选择,请选择后再操作!");
 			}
 			if ("bt_query".equals(bt.getCode())) {
-				// 初始化
-				beforePsgMoney = new HashMap<String, Map<String, UFDouble>>();
-				afterPsgMoney = new HashMap<String, Map<String, UFDouble>>();
-				TableProcessing();
+				tableProcessing();
+			} else if ("bt_insert".equals(bt.getCode())) {
+				insert();
 			} else if ("bt_update".equals(bt.getCode())) {
 				update(getTablePanel());
 			} else if ("bt_output".equals(bt.getCode())) {
@@ -430,13 +430,13 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 					if (i + 1 == ListMap.size()) {
 						// 第一行和最后一行输出小计
 						// 输出小计
-						dataList.add(new Object[] { "小计", null, null, null, subtotalOrg });
+						dataList.add(new Object[] { "小计", null, null, null, subtotalStaff,subtotalOrg });
 						subtotalStaff = new UFDouble(0.00, 2);
 						subtotalOrg = new UFDouble(0.00, 2);
 					} else if (!orgName.equals(ListMap.get(i + 1).get("orgname"))) {
 						// 如果当前行组织不等于下一行组织输出小计
 						// 输出小计
-						dataList.add(new Object[] { "小计", null, null, null, subtotalOrg });
+						dataList.add(new Object[] { "小计", null, null, null, subtotalStaff,subtotalOrg });
 						subtotalStaff = new UFDouble(0.00, 2);
 						subtotalOrg = new UFDouble(0.00, 2);
 					}
@@ -521,7 +521,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 						dataList.add(new Object[] { orgName });
 					}
 					// 输出行数据
-					dataList.add(new Object[] { i + 1, clerkcode, clerkname, null, orgMoney, mark, null, str + orgName });
+					dataList.add(new Object[] { i + 1, clerkcode, clerkname, basicsMoney, orgMoney, mark, null, str + orgName });
 					// 统计小计
 					subtotalOrg = subtotalOrg.add(orgMoney);
 					if (i + 1 == ListMap.size()) {
@@ -557,7 +557,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	 * @param period
 	 * @throws Exception
 	 */
-	private void TableProcessing() throws Exception {
+	private void tableProcessing() throws Exception {
 		// 初始化
 		beforePsgMoney = new HashMap<String, Map<String, UFDouble>>();
 		afterPsgMoney = new HashMap<String, Map<String, UFDouble>>();
@@ -692,27 +692,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			}
 		}
 	}
-
-	/**
-	 * 查询中间表数据并处理
-	 * 
-	 * @return
-	 * @throws Exception
-	 */
-	private void queryMiddleTable() throws Exception {
-		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT");
-		sql.append(" combined_field,basicssum,staffsum,orgsum,mark from accumulation_fund");
-		sql.append(" WHERE ");
-		sql.append(" tablename = '服务费分摊表' AND combined_field NOT LIKE '表八:实际集团内其他公司已缴当月工资个人部分已扣%'");
-		sql.append(" AND orgcode = '" + orgCode + "' AND period = '" + period + "'");
-		List<Map<String, String>> listMap = (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
-		for (int i = 0; i < listMap.size(); i++) {
-			Map<String, String> map = listMap.get(i);
-			middleTableData.put(map.get("combined_field"), map);
-		}
-	}
-
+	
 	/**
 	 * 查询个人承担
 	 * 
@@ -722,9 +702,18 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableOne(String orgCode, String period) throws Exception {
+		String title = "表一:个人承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT");
-		sql.append(" clerkcode,clerkname,endowment_base AS basicssum,0 AS staffsum");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" NULL AS mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT ROWNUM AS seq,t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t1.ENDOWMENT_BASE");
 		sql.append(" FROM");
@@ -735,6 +724,8 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		sql.append(" AND t1.ENDOWMENT_BASE IS NOT NULL");
 		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE");
 		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -747,14 +738,23 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableTwo(String orgCode, String period) throws Exception {
+		String title = "表二:外部公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,AGENCY_MONEY AS orgsum,mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t.*");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(AGENCY_MONEY AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
 		sql.append(" WHERE");
 		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '" + period + "' AND t.ORGCODE = '" + orgCode + "'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -767,10 +767,18 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableThree(String orgCode, String period) throws Exception {
+		String title = "表三:由部门承担或全额公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,AGENCY_MONEY AS orgsum,mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t2.*");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(AGENCY_MONEY AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT T.Endowment_Base,T.CLERKCODE,T.CLERKNAME,T.so_org_sum,T.so_staff_sum,T.ORGCODE,T.PAY_MONTH,");
 		sql.append(" T.AGENCY_MONEY,T.MARK");
@@ -787,7 +795,8 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		sql.append(" t1.MARK = '表三') t2");
 		sql.append(" WHERE");
 		sql.append(" t2.PAY_MONTH = '" + period + "'AND t2.ORGCODE = '" + orgCode + "'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -800,8 +809,18 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableFour(String orgCode, String period) throws Exception {
+		String title = "表四:由公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT salocation as orgname,clerkcode,clerkname,AGENCY_MONEY AS orgsum ");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(AGENCY_MONEY AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" NULL AS mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" t.CLERKCODE, T1.CLERKNAME, t.ym, sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,");
@@ -827,7 +846,9 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		sql.append(" SELECT t1.CLERKCODE, t1.CLERKNAME, t1.PAY_MONTH || '-01' AS ym, 0 AS sum_per_cost, T1.PAY_SOS_ORG AS costorgname,");
 		sql.append(" '上海天华' AS salocation, to_number( t1.AGENCY_MONEY ) AS AGENCY_MONEY ");
 		sql.append(" FROM NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1 ");
-		sql.append(" WHERE t1.MARK IN ( '资质人员', '上海公司承担' )  AND t1.PAY_MONTH = '" + period + "'  AND t1.ORGCODE = '" + orgCode + "') ORDER BY orgname");
+		sql.append(" WHERE t1.MARK IN ( '资质人员', '上海公司承担' )  AND t1.PAY_MONTH = '" + period + "'  AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -856,6 +877,50 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		}
 		return map;
 	}
+	
+	/**
+	 * 拼接中间表sql
+	 * @param title
+	 * @param orgCode
+	 * @param period
+	 * @return
+	 */
+	public StringBuffer jointSql(String title, String orgCode, String period) {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" contributoryorg  AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" basicssum,");
+		sql.append(" staffsum,");
+		sql.append(" orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM accumulation_fund");
+		sql.append(" WHERE");
+		sql.append(" tablename = '服务费分摊表' AND combined_field LIKE '"+title+"%' AND orgcode = '"+orgCode+"' AND period = '"+period+"' ");
+		return sql;
+	}
+
+	/**
+	 * 查询中间表数据并处理
+	 * 
+	 * @return
+	 * @throws Exception
+	 */
+	private void queryMiddleTable() throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT");
+		sql.append(" combined_field,basicssum,staffsum,orgsum,mark from accumulation_fund");
+		sql.append(" WHERE ");
+		sql.append(" tablename = '服务费分摊表' AND combined_field NOT LIKE '表八:实际集团内其他公司已缴当月工资个人部分已扣%'");
+		sql.append(" AND orgcode = '" + orgCode + "' AND period = '" + period + "'");
+		List<Map<String, String>> listMap = (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
+		for (int i = 0; i < listMap.size(); i++) {
+			Map<String, String> map = listMap.get(i);
+			middleTableData.put(map.get("combined_field"), map);
+		}
+	}
 
 	/**
 	 * 将Object转成UFDouble,设置保留几位小数
@@ -867,6 +932,20 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 	public UFDouble nvl(Object obj, int power) {
 		return MathTool.nvl(ValueUtils.getUFDouble(obj)).setScale(2, UFDouble.ROUND_HALF_UP);
 	}
+	
+	/**
+	 * 打开新增页面
+	 */
+	private void insert() {
+		try {
+			// 0表示有实际新增,而不是点击弹框后关闭了
+			if (new ServiceChargeAllInsertDiaLog().showModal() == 0) {
+				MessageDialog.showHintDlg(this, "提示", "新增成功!");
+			}
+		} catch (Exception e) {
+			MessageDialog.showHintDlg(this, "提示", e.getMessage());
+		}
+	}
 
 	private void update(UITablePane table) {
 		try {
@@ -876,15 +955,27 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				MessageDialog.showHintDlg(this, "提示", "请选择需要修改的数据!");
 				return;
 			} else {
+				int tableNumber = 0;
 				for (int i = 0; i < rows.length; i++) {
+					String value = ValueUtils.getString(table.getTable().getValueAt(rows[i], 7));
+					if (value == null) {
+						MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
+						return;
+					}else {
+						int index = value.indexOf("-");
+						int number = Integer.parseInt(value.substring(0, index));
+						if(i == 0) {
+							tableNumber = number;
+						}else {
+							if(tableNumber != number) {
+								MessageDialog.showHintDlg(this, "提示", "因表一和其他表字段有差异不可以同时修改");
+								return;
+							}
+						}
+					}
 					// 小标题加上组织和表组合为8位
 					Object[] rowData = new Object[8];
 					for (int j = 0; j < 8; j++) {
-						Object obj = table.getTable().getValueAt(rows[i], 7);
-						if (obj == null) {
-							MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
-							return;
-						}
 						rowData[j] = table.getTable().getValueAt(rows[i], j);
 					}
 					selectedData.add(rowData);
@@ -893,7 +984,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			// 0表示有实际修改,而不是点击弹框后关闭了
 			if (new ServiceChargeAllUpdateDialog(selectedData, orgCode, period).showModal() == 0) {
 				// 刷新
-				TableProcessing();
+				tableProcessing();
 				MessageDialog.showHintDlg(this, "提示", "修改成功!");
 			}
 		} catch (Exception e) {
@@ -980,8 +1071,8 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		String nexMonthDate = getMonthFirstDate(newDate);// 下月最后一天
 		String year = nexMonthDate.substring(0, 4);// 会计年度
 		String month = nexMonthDate.substring(5, 7);// 会计月份
-		String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
-		// String pk_user = getpk_user("XTPZ000101");//制单人
+		//String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
+		String pk_user = getpk_user("XTPZ000101");//制单人
 		String pk_accountGlbook = tran_accountingbook(pk_org);// 核算账簿
 		String pk_vouchertype = vouchertypeGetCode("03");// 凭证类型03;
 		String pk_org_v = getPkorgv(pk_org);
@@ -994,7 +1085,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		voucher.setPk_manager("N/A");
 		voucher.setPk_prepared(pk_user);
 		voucher.setCreator(pk_user);
-		voucher.setPk_system("GJ");// 新增来源系统(社保公积金),用来和手工区分
+		voucher.setPk_system("GL");// 新增来源系统(社保公积金),用来和手工区分
 		// voucher.setPrepareddate(new UFDate(period+"-30"));//凭证日期
 		if ("02".equals(month)) {
 			voucher.setPrepareddate(new UFDate(nexMonthDate));// 凭证日期

+ 398 - 6
hr/hr/src/client/nc/ui/hr/baod_orders/view/SocialInsuranceAllInsertDialog.java

@@ -19,10 +19,11 @@ import nc.ui.pub.bill.BillCardPanel;
 import nc.ui.pub.bill.BillEditEvent;
 import nc.ui.pub.bill.BillEditListener;
 import nc.vo.ecpubapp.pattern.data.ValueUtils;
+import nc.vo.pubapp.pattern.pub.PubAppTool;
 import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 
 /**
- * 表八:实际集团内其他公司已缴当月工资个人部分已扣新增页
+ * 社保分摊表新增界
  * @author YaoYu
  *
  */
@@ -139,7 +140,7 @@ public class SocialInsuranceAllInsertDialog extends UIDialog implements ActionLi
 			//循环表单行数
 			for (int i = 0; i < cp.getRowCount(); i++) {
 				String tableName = ValueUtils.getString(cp.getBodyValueAt(i, "tablename"));//表
-				String orgCode = QueyrOrgCode(ValueUtils.getString(cp.getBodyValueAt(i, "orgcode")));//公司
+				String orgCode = queyrOrgCode(ValueUtils.getString(cp.getBodyValueAt(i, "orgcode")));//公司
 				String contributoryOrgName = ValueUtils.getString(cp.getBodyValueAt(i, "contributoryorg"));//成本归属公司
 				String period = ValueUtils.getString(cp.getBodyValueAt(i, "period"));//年月
 				String clerkCode = ValueUtils.getString(cp.getBodyValueAt(i, "clerkcode"));//员工编号
@@ -152,9 +153,30 @@ public class SocialInsuranceAllInsertDialog extends UIDialog implements ActionLi
 				contributoryOrgName = contributoryOrgName == null ? "" : contributoryOrgName;
 				String combinedField = tableName + contributoryOrgName + clerkCode + clerkName;
 				if(queryTable(orgCode, period, combinedField)) {
-					MessageDialog.showHintDlg(this, "提示", "成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + "当月数据已存在不允许重新新增");
+					MessageDialog.showHintDlg(this, "提示", "成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
 				return;
 				}
+				if(tableName.equals("表一:由个人承担")) {
+					queryTableOne(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表二:由外部公司承担")) {
+					queryTableTwo(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表三:由部门承担或全额公司承担")) {
+					queryTableThree(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表四:个人部分已在集团内其他公司扣除")) {
+					queryTableFour(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表五:月薪工资表中当月扣当月缴纳")) {
+					queryTableFive(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表六:实际已缴当月工资个人部分未扣")) {
+					queryTableSix(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
+				if(tableName.equals("表七:实际未缴当月工资个人部分已扣")) {
+					queryTableSeven(orgCode, period, contributoryOrgName, clerkCode, clerkName);
+				}
 				StringBuilder insertSQL = new StringBuilder("INSERT INTO accumulation_fund VALUES (");
 				insertSQL.append("'").append("社保分摊表").append("', ");
 				insertSQL.append("'").append(orgCode).append("', ");
@@ -195,8 +217,30 @@ public class SocialInsuranceAllInsertDialog extends UIDialog implements ActionLi
 	
 	
 	@Override
-	public void afterEdit(BillEditEvent arg0) {
-		
+	public void afterEdit(BillEditEvent e) {
+		try {
+			if("orgcode".equals(e.getKey())) {
+				String pk_org = String.valueOf(e.getValue());
+				UIRefPane clerkCodeRef = (UIRefPane) this.jlcardPanel.getBodyItem("clerkcode").getComponent();
+				// 设置当前组织
+				clerkCodeRef.setPk_org(pk_org);
+			}
+			if("clerkcode".equals(e.getKey())) {
+				String clerkcode = String.valueOf(e.getValue());
+				if(clerkcode != null) {
+					String sql = "SELECT name FROM bd_psndoc WHERE pk_psndoc = '"+clerkcode+"'";
+					String clerkname = (String) iuap.executeQuery(sql, new ColumnProcessor());
+					//赋值姓名
+					this.jlcardPanel.setBodyValueAt(clerkname, 0, "clerkname");
+				}else {
+					//清空姓名
+					this.jlcardPanel.setBodyValueAt(null, 0, "clerkname");
+				}
+				
+			}
+		} catch (Exception e1) {
+			MessageDialog.showHintDlg(this, "提示", e1.getMessage());
+		}
 	}
 
 	@Override
@@ -231,6 +275,354 @@ public class SocialInsuranceAllInsertDialog extends UIDialog implements ActionLi
 		
 	}
 	
+	/**
+	 * 查询个人承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableOne(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t.CLERKCODE as clerkcode,");
+		sql.append(" T1.CLERKNAME as clerkname,");
+		sql.append(" sum( nvl( t.VALUE, 0 ) ) AS orgsum,");
+		sql.append(" NULL AS staffsum,");
+		sql.append(" t1.ENDOWMENT_BASE AS basicssum,");
+		sql.append(" t1.mark as mark");
+		sql.append(" from NC6337.v_data_xz_gjjshare t");
+		sql.append(" left join NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 on t1.CLERKCODE=t.CLERKCODE and t1.PAY_MONTH||'-01'=t.ym");
+		sql.append(" where");
+		sql.append(" t.key = '社保公司税后扣款' and t.VALUE <> 0 and t.ym='" + period + "'||'-01' and t1.ORGCODE='" + orgCode + "' and t1.ENDOWMENT_BASE is not null");
+		sql.append(" group by ROWNUM,t.CLERKCODE, T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.mark");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询个人承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableTwo(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
+		sql.append(" WHERE");
+		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '" + period + "' AND t.ORGCODE = '" + orgCode + "'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询由部门承担或全额公司承担是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableThree(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t2.clerkcode AS clerkcode,");
+		sql.append(" t2.clerkname AS clerkname,");
+		sql.append(" t2.endowment_base AS basicssum,");
+		sql.append(" t2.so_staff_sum AS staffsum,");
+		sql.append(" t2.so_org_sum AS orgsum,");
+		sql.append(" NULL AS mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" T.Endowment_Base,T.CLERKCODE,T.CLERKNAME,T.so_org_sum,T.so_staff_sum,T.ORGCODE,T.PAY_MONTH");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY T");
+		sql.append(" WHERE");
+		sql.append(" T.PK_POST IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname = '残保金人员' )");
+		sql.append(" UNION ALL SELECT");
+		sql.append(" t1.Endowment_Base,t1.CLERKCODE,t1.CLERKNAME,t1.so_org_sum,t1.so_staff_sum,T1.ORGCODE,t1.PAY_MONTH ");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" WHERE");
+		sql.append(" t1.MARK LIKE '%表三%'");
+		sql.append(" ) t2");
+		sql.append(" WHERE");
+		sql.append(" t2.PAY_MONTH = '" + period + "' AND t2.ORGCODE = '" + orgCode + "'");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询个人部分已在集团内其他公司扣除是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableFour(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append("SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,decode( t.c_23, '青岛天华易境建筑设计有限公司', 0, sum( nvl( t.VALUE, 0 ) ) ) AS sum_per_cost,");
+		sql.append(" t.c_23 AS salocation,decode( t.c_23, '青岛天华易境建筑设计有限公司', t1.so_org_sum + t1.so_staff_sum, t1.so_org_sum ) AS so_org_sum,");
+		sql.append(" t1.so_staff_sum,t1.ENDOWMENT_BASE,T1.MARK");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" WHERE t.key = '社保个人合计'  AND t.VALUE <> 0 AND t.ym = '" + period + "' || '-01' AND t1.ORGCODE = '" + orgCode + "' AND t1.PAY_SOS_ORG <> t.c_23");
+		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.so_org_sum,t1.so_staff_sum,t.c_23,T1.MARK");
+		sql.append(" ORDER BY t.c_23");
+		sql.append(" ) t11");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询月薪工资表中当月扣当月缴纳是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableFive(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT ");
+		sql.append(" costorgname AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,T13.Name AS costorgname,t.c_23 AS salocation,");
+		sql.append(" t1.so_org_sum - nvl( t15.sum_per_cost, 0 ) - nvl( t16.SO_ORG_SUM, 0 ) AS so_org_sum,t1.so_staff_sum,t1.ENDOWMENT_BASE,t1.mark");
+		sql.append(" FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t");
+		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT t12.CLERK_CODE,t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" LEFT JOIN nc6337.person_afford_sbgjj t15 ON t15.CLERKCODE = t.CLERKCODE AND t.YM = t15.ym");
+		sql.append(" LEFT JOIN nc6337.DEPT_AFFORD_SBGJJ t16 ON t16.CLERKCODE = t.CLERKCODE AND t.YM = t16.PAY_MONTH ");
+		sql.append(" WHERE");
+		sql.append(" t.key IN ( '社保个人合计', '费用调整社保', '社保个人扣款', '费用调整社保T' )AND t.VALUE <> 0 AND t.ym = '" + period + "' || '-01' ");
+		sql.append(" AND t1.ORGCODE = '" + orgCode + "'AND t1.PAY_SOS_ORG = t.c_23");
+		sql.append(" AND t.CLERKCODE NOT IN ( SELECT t11.WORKERCODE FROM nc6337.v_hr_allocationratio_gjjshareF t11 WHERE t11.WA_PERIOD = '" + period + "' || '-01' )");
+		sql.append(" GROUP BY t.CLERKCODE,T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.so_org_sum - nvl( t15.sum_per_cost, 0 ) - nvl( t16.SO_ORG_SUM, 0 ),");
+		sql.append(" t1.so_staff_sum,T13.Name,t.c_23,t1.mark");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT t.WORKERCODE AS CLERKCODE,t1.CLERKNAME,t.WA_PERIOD AS ym,0 AS sum_per_cost,T6.NAME AS costorgname,'上海天华' AS salocation,");
+		sql.append(" round( nvl( t1.so_org_sum, 0 ) * nvl( t.perc, 0 ), 3 ) AS so_org_sum,round( nvl( t1.so_staff_sum, 0 ) * nvl( t.perc, 0 ), 3 ) AS so_staff_sum,");
+		sql.append(" t1.Endowment_Base,t1.mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.v_hr_allocationratio_gjjshareF t");
+		sql.append(" LEFT JOIN nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.WORKERCODE AND t1.PAY_MONTH || '-01' = t.WA_PERIOD");
+		sql.append(" LEFT JOIN ( SELECT DISTINCT T5.CODE, T5.NAME, t5.pk_corp FROM nc6337.ORG_CORP T5 ) T6 ON T6.pk_corp = T.COST_ORG");
+		sql.append(" WHERE");
+		sql.append(" t.WA_PERIOD = '" + period + "' || '-01' AND t1.CLERKNAME IS NOT NULL AND t1.ORGCODE = '" + orgCode + "'");
+		sql.append(" UNION ALL");
+		sql.append(" SELECT t1.CLERKCODE,t1.CLERKNAME,t1.PAY_MONTH || '-01' AS ym,0 AS sum_per_cost,T1.PAY_SOS_ORG AS costorgname,'上海天华' AS salocation,");
+		sql.append(" decode( t1.mark, '资质人员', t1.so_org_sum + t1.so_staff_sum, t1.so_org_sum ) AS so_org_sum,0 AS so_staff_sum,");
+		sql.append(" t1.Endowment_Base,t1.mark");
+		sql.append(" FROM");
+		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" WHERE");
+		sql.append(" t1.MARK IN ( '资质人员', '上海公司承担' )AND t1.PAY_MONTH = '" + period + "'AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"' AND clerkname = '"+clerkName+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询实际已缴纳当月工资个人部分未扣是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableSix(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT");
+		sql.append(" clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,t1.so_org_sum,t1.so_staff_sum,t1.mark,T13.Name AS orgname");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1");
+		sql.append(" LEFT JOIN (SELECT t12.CLERK_CODE,t12.NC_PK_POST FROM nc6337.monthly_position_gjj t12 WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE");
+		sql.append(" t1.CLERKCODE NOT IN (SELECT t2.CLERKCODE FROM(SELECT t.CLERKCODE,sum( nvl( t.VALUE, 0 ) ) AS sumVALUE");
+		sql.append(" FROM NC6337.v_data_xz_gjjshare t WHERE t.key IN ( '社保个人合计', '社保个人扣款' ) AND t.ym = '" + period + "' || '-01'");
+		sql.append(" GROUP BY t.CLERKCODE ");
+		sql.append(" ) t2 WHERE t2.sumVALUE > 0)");
+		sql.append(" AND T1.PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname IN ( '残保金人员', '资质人员' ) )");
+		sql.append(" AND t1.out_org IS NULL AND t1.Endowment_Base <> 0 AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "'");
+		sql.append(" UNION ALL SELECT");
+		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,t1.so_org_sum,t1.so_staff_sum,t1.mark,T13.Name AS orgname");
+		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1 LEFT JOIN (SELECT t12.CLERK_CODE,t12.NC_PK_POST FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' ) ");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE");
+		sql.append(" t1.mark LIKE '%表六%' ");
+		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"' AND clerkname = '"+clerkName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
+	/**
+	 * 查询实际未缴当月工资个人部分已扣是否存在数据
+	 * @param orgCode 财务组织
+	 * @param period 年月
+	 * @param contributoryOrgName 成本归属公司
+	 * @param clerkCode 员工号
+	 * @param clerkName 姓名
+	 * @throws Exception
+	 */
+	private void queryTableSeven(String orgCode, String period, String contributoryOrgName, String clerkCode, String clerkName) throws Exception {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT");
+		sql.append(" clerkcode");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" endowment_base AS basicssum,");
+		sql.append(" so_staff_sum AS staffsum,");
+		sql.append(" so_org_sum AS orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,( t16.sumvalue - t1.so_staff_sum ) AS so_staff_sum,");
+		sql.append(" 0 AS so_org_sum,T13.Name AS orgname,t1.mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t1");
+		sql.append(" LEFT JOIN (SELECT t12.CLERK_CODE,t12.NC_PK_POST FROM nc6337.monthly_position_gjj t12 WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' )");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" LEFT JOIN nc6337.person_deduction_sbgjj t16 ON t16.CLERKCODE = t1.CLERKCODE AND t1.pay_month || '-01' = t16.ym");
+		sql.append(" WHERE");
+		sql.append(" t1.CLERKCODE IN (SELECT t2.CLERKCODE FROM (SELECT t.CLERKCODE,sum( nvl( t.VALUE, 0 ) ) AS sumVALUE FROM");
+		sql.append(" NC6337.v_data_xz_gjjshare t WHERE t.key IN ( '社保个人扣款', '社保个人合计' ) AND t.ym = '" + period + "' || '-01'");
+		sql.append(" GROUP BY t.CLERKCODE");
+		sql.append(" ) t2 WHERE t2.sumVALUE > 0)");
+		sql.append(" AND T1.PK_POST NOT IN ( SELECT T3.PK_POST FROM NC6337.om_post t3 WHERE T3.postname IN ( '残保金人员', '资质人员' ) )");
+		sql.append(" AND t1.out_org IS NULL AND t1.Endowment_Base <> 0 AND ( t16.sumvalue - t1.so_staff_sum ) > 0");
+		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "'");
+		sql.append(" UNION ALL SELECT");
+		sql.append(" t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,t1.so_staff_sum,t1.so_org_sum,T13.Name AS orgname,t1.mark");
+		sql.append(" FROM");
+		sql.append(" nc6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
+		sql.append(" LEFT JOIN (SELECT t12.CLERK_CODE,t12.NC_PK_POST FROM nc6337.monthly_position_gjj t12 WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '" + period + "', 'yyyy-mm' ) ), 'yyyy-mm-dd' ) ");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" WHERE");
+		sql.append(" t1.mark LIKE '%表七%'");
+		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(" ) where clerkcode ='"+clerkCode+"'");
+		if(!PubAppTool.isNull(contributoryOrgName)) {
+			sql.append(" AND orgname = '"+contributoryOrgName+"' AND clerkname = '"+clerkName+"'");
+		}
+		if (iuap.executeQuery(sql.toString(), new ColumnProcessor()) != null) {
+			throw new Exception("成本归属公司:" +contributoryOrgName+ ",员工编号:" + clerkCode + ",员工姓名:"+clerkName+",当月数据已存在不允许重复新增");
+		}
+	}
+	
 	/**
 	 * 查询中间表是否存在数据
 	 * @param orgCode 查询组织
@@ -259,7 +651,7 @@ public class SocialInsuranceAllInsertDialog extends UIDialog implements ActionLi
 	 * @return
 	 * @throws Exception
 	 */
-	public String QueyrOrgCode(String orgName) throws Exception {
+	public String queyrOrgCode(String orgName) throws Exception {
 		String sql = "select code from org_financeorg where name ='"+orgName+"' and enablestate = '2' and dr = 0";
 		return  (String) iuap.executeQuery(sql.toString(), new ColumnProcessor());
 	}

+ 2 - 2
hr/hr/src/client/nc/ui/hr/baod_orders/view/SocialInsuranceAllUpdateDialog.java

@@ -104,7 +104,7 @@ public class SocialInsuranceAllUpdateDialog extends UIDialog {
 			int index = str.indexOf("-");
 			int tableNumber = Integer.parseInt(str.substring(0, index));
 			String orgName = str.substring(index + 1);
-			Object[] rowData = { GetTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5],
+			Object[] rowData = { getTableName(tableNumber), orgName, data[1], data[2], data[3], data[4], data[5],
 					data[6] };
 			dataList.add(rowData);
 		}
@@ -220,7 +220,7 @@ public class SocialInsuranceAllUpdateDialog extends UIDialog {
 	 * @param tableNumber 小标题编号
 	 * @return
 	 */
-	private String GetTableName(int tableNumber) {
+	private String getTableName(int tableNumber) {
 		switch (tableNumber) {
 		case 1:
 			return "表一:由个人承担";

+ 133 - 33
hr/hr/src/client/nc/ui/hr/baod_orders/view/SocialInsuranceAllocationUI.java

@@ -81,7 +81,7 @@ import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
 public class SocialInsuranceAllocationUI extends ToftPanel {
 	private IUAPQueryBS iuap = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
 	private ButtonObject bt_query = new ButtonObject("查询", "", 2, "bt_query");
-	private ButtonObject bt_insert = new ButtonObject("表八新增", "", 2, "bt_insert");
+	private ButtonObject bt_insert = new ButtonObject("新增", "", 2, "bt_insert");
 	private ButtonObject bt_update = new ButtonObject("修改", "", 2, "bt_update");
 	private ButtonObject bt_output = new ButtonObject("导出", "", 2, "bt_output");
 	private ButtonObject bt_voucher = new ButtonObject("生成凭证", "", 2, "bt_voucher");
@@ -350,6 +350,11 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 				if (null != pk_recbill) {
 					ExceptionUtils.wrappBusinessException("内部应收单【" + period + "】已经生成!不能重复生成!");
 				}
+				//2025-06-10 start
+				if(null == tableFourSelfMap||tableFourSelfMap.isEmpty()) {
+					ExceptionUtils.wrappBusinessException("本月无数据!");
+				}
+				//2025-06-10 end
 				MessageDialog.showHintDlg(this, "", "生成内部应收单开始");
 				// 组装应收单数据新增应收单
 				String billNO = addReceivableBill(getTablePanel());
@@ -709,15 +714,25 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableOne(String orgCode, String period) throws Exception {
+		String title = "表一:由个人承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,sum_per_cost AS orgsum");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM AS seq, t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t1.ENDOWMENT_BASE,t1.mark");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t.CLERKCODE as clerkcode,");
+		sql.append(" T1.CLERKNAME as clerkname,");
+		sql.append(" CAST(t1.ENDOWMENT_BASE AS VARCHAR2 ( 50 ) ) as basicssum,");
+		sql.append(" CAST( NULL AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(sum( nvl( t.VALUE, 0 ) )AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" t1.mark as mark");
 		sql.append(" from NC6337.v_data_xz_gjjshare t");
 		sql.append(" left join NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 on t1.CLERKCODE=t.CLERKCODE and t1.PAY_MONTH||'-01'=t.ym");
 		sql.append(" where");
 		sql.append(" t.key = '社保公司税后扣款' and t.VALUE <> 0 and t.ym='" + period + "'||'-01' and t1.ORGCODE='" + orgCode + "' and t1.ENDOWMENT_BASE is not null");
-		sql.append(" group by ROWNUM,t.CLERKCODE, T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.mark)");
+		sql.append(" group by ROWNUM,t.CLERKCODE, T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.mark");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -730,14 +745,23 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableTwo(String orgCode, String period) throws Exception {
+		String title = "表二:由外部公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum AS staffsum,so_org_sum AS orgsum, mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t.*");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM nc6337.V_SUM_TB_HR_SOCIAL_SECURITY t");
 		sql.append(" WHERE");
 		sql.append(" t.out_org IS NOT NULL AND t.PAY_MONTH = '" + period + "' AND t.ORGCODE = '" + orgCode + "'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -750,10 +774,18 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableThree(String orgCode, String period) throws Exception {
+		String title = "表三:由部门承担或全额公司承担";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum AS staffsum,so_org_sum AS orgsum");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM,t2.clerkcode,t2.clerkname,t2.endowment_base,t2.so_staff_sum,t2.so_org_sum");
+		sql.append(" (SELECT");
+		sql.append(" NULL AS orgname,");
+		sql.append(" t2.clerkcode as clerkcode,");
+		sql.append(" t2.clerkname as clerkname,");
+		sql.append(" CAST(t2.endowment_base AS VARCHAR2 ( 50 ) ) as basicssum,");
+		sql.append(" CAST(t2.so_staff_sum AS VARCHAR2 ( 50 ) ) as staffsum,");
+		sql.append(" CAST(t2.so_org_sum AS VARCHAR2 ( 50 ) ) as orgsum,");
+		sql.append(" NULL AS mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" T.Endowment_Base,T.CLERKCODE,T.CLERKNAME,T.so_org_sum,T.so_staff_sum,T.ORGCODE,T.PAY_MONTH");
@@ -770,7 +802,8 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" ) t2");
 		sql.append(" WHERE");
 		sql.append(" t2.PAY_MONTH = '" + period + "' AND t2.ORGCODE = '" + orgCode + "'");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -783,10 +816,18 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableFour(String orgCode, String period) throws Exception {
+		String title = "表四:个人部分已在集团内其他公司扣除";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT salocation as orgname,clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum AS staffsum,so_org_sum AS orgsum,mark");
+		sql.append("SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
-		sql.append(" (SELECT ROWNUM AS seq,t11.*");
+		sql.append(" (SELECT");
+		sql.append(" salocation AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
 		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,decode( t.c_23, '青岛天华易境建筑设计有限公司', 0, sum( nvl( t.VALUE, 0 ) ) ) AS sum_per_cost,");
@@ -799,7 +840,8 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.ENDOWMENT_BASE,t1.so_org_sum,t1.so_staff_sum,t.c_23,T1.MARK");
 		sql.append(" ORDER BY t.c_23");
 		sql.append(" ) t11");
-		sql.append(" ORDER BY ROWNUM)");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append(" )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -812,8 +854,18 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableFive(String orgCode, String period) throws Exception {
+		String title = "表五:月薪工资表中当月扣当月缴纳";
 		StringBuffer sql = new StringBuffer();
-		sql.append("select costorgname as orgname,clerkcode,clerkname,endowment_base AS basicssum, so_staff_sum as staffsum,so_org_sum AS orgsum,mark ");
+		sql.append(" SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT ");
+		sql.append(" costorgname AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,T13.Name AS costorgname,t.c_23 AS salocation,");
 		sql.append(" t1.so_org_sum - nvl( t15.sum_per_cost, 0 ) - nvl( t16.SO_ORG_SUM, 0 ) AS so_org_sum,t1.so_staff_sum,t1.ENDOWMENT_BASE,t1.mark");
@@ -855,7 +907,8 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" NC6337.V_SUM_TB_HR_SOCIAL_SECURITY_D t1");
 		sql.append(" WHERE");
 		sql.append(" t1.MARK IN ( '资质人员', '上海公司承担' )AND t1.PAY_MONTH = '" + period + "'AND t1.ORGCODE = '" + orgCode + "')");
-		sql.append(" ORDER BY costorgname");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -868,8 +921,19 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableSix(String orgCode, String period) throws Exception {
+		String title = "表六:实际已缴当月工资个人部分未扣";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT orgname,clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum as staffsum,so_org_sum AS orgsum,mark");
+		sql.append(" SELECT");
+		sql.append(" orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,t1.so_org_sum,t1.so_staff_sum,t1.mark,T13.Name AS orgname");
 		sql.append(" FROM");
@@ -897,8 +961,9 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
 		sql.append(" WHERE");
 		sql.append(" t1.mark LIKE '%表六%' ");
-		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "'");
-		sql.append(" )ORDER BY orgname");
+		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -911,8 +976,19 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	 * @throws Exception
 	 */
 	private List<Map<String, String>> queryTableSeven(String orgCode, String period) throws Exception {
+		String title = "表七:实际未缴当月工资个人部分已扣";
 		StringBuffer sql = new StringBuffer();
-		sql.append("SELECT orgname,clerkcode,clerkname,endowment_base AS basicssum,so_staff_sum as staffsum,so_org_sum AS orgsum,mark");
+		sql.append(" SELECT");
+		sql.append(" orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
+		sql.append(" FROM");
+		sql.append(" (SELECT");
+		sql.append(" orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" CAST(endowment_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
+		sql.append(" CAST(so_staff_sum AS VARCHAR2 ( 50 ) ) AS staffsum,");
+		sql.append(" CAST(so_org_sum AS VARCHAR2 ( 50 ) ) AS orgsum,");
+		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT t1.CLERKCODE,t1.CLERKNAME,t1.Endowment_Base,( t16.sumvalue - t1.so_staff_sum ) AS so_staff_sum,");
 		sql.append(" 0 AS so_org_sum,T13.Name AS orgname,t1.mark");
@@ -943,8 +1019,9 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
 		sql.append(" WHERE");
 		sql.append(" t1.mark LIKE '%表七%'");
-		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "'");
-		sql.append(" )ORDER BY orgname");
+		sql.append(" AND t1.PAY_MONTH = '" + period + "' AND t1.ORGCODE = '" + orgCode + "')");
+		sql.append(jointSql(title, orgCode, period));
+		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -965,7 +1042,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" WHERE");
 		sql.append(" tablename = '社保分摊表' AND combined_field LIKE '表八:实际集团内其他公司已缴当月工资个人部分已扣%'");
 		sql.append("  AND orgcode = '" + orgCode + "' AND period = '" + period + "'");
-		sql.append(" ORDER BY CONTRIBUTORYORG");
+		sql.append(" ORDER BY CONTRIBUTORYORG,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
 	}
 
@@ -1013,6 +1090,30 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		}
 		return map;
 	}
+	
+	/**
+	 * 拼接中间表sql
+	 * @param title
+	 * @param orgCode
+	 * @param period
+	 * @return
+	 */
+	public StringBuffer jointSql(String title, String orgCode, String period) {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" UNION ALL");
+		sql.append(" SELECT");
+		sql.append(" contributoryorg  AS orgname,");
+		sql.append(" clerkcode,");
+		sql.append(" clerkname,");
+		sql.append(" basicssum,");
+		sql.append(" staffsum,");
+		sql.append(" orgsum,");
+		sql.append(" mark");
+		sql.append(" FROM accumulation_fund");
+		sql.append(" WHERE");
+		sql.append(" tablename = '社保分摊表' AND combined_field LIKE '"+title+"%' AND orgcode = '"+orgCode+"' AND period = '"+period+"' ");
+		return sql;
+	}
 
 	/**
 	 * 查询中间表数据并处理
@@ -1069,14 +1170,14 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 				return;
 			} else {
 				for (int i = 0; i < rows.length; i++) {
+					Object obj = table.getTable().getValueAt(rows[i], 7);
+					if (obj == null) {
+						MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
+						return;
+					}
 					// 小标题加上组织和表组合为8位
 					Object[] rowData = new Object[8];
 					for (int j = 0; j < 8; j++) {
-						Object obj = table.getTable().getValueAt(rows[i], 7);
-						if (obj == null) {
-							MessageDialog.showHintDlg(this, "提示", "请选择正确的行修改!");
-							return;
-						}
 						rowData[j] = table.getTable().getValueAt(rows[i], j);
 					}
 					selectedData.add(rowData);
@@ -1094,7 +1195,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 	}
 
 	/**
-	 * 打开表八:实际集团内其他公司已缴当月工资个人部分已扣新增页面
+	 * 打开新增页面
 	 */
 	private void insert() {
 		try {
@@ -1246,8 +1347,8 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		String nexMonthDate = getMonthFirstDate(newDate);// 下月最后一天
 		String year = nexMonthDate.substring(0, 4);// 会计年度
 		String month = nexMonthDate.substring(5, 7);// 会计月份
-		String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
-		// String pk_user = getpk_user("XTPZ000101");//制单人
+		//String pk_user = InvocationInfoProxy.getInstance().getUserId();// 制单人
+		String pk_user = getpk_user("XTPZ000101");//制单人
 		String pk_accountGlbook = tran_accountingbook(pk_org);// 核算账簿
 		String pk_vouchertype = vouchertypeGetCode("03");// 凭证类型03;
 		String pk_org_v = getPkorgv(pk_org);
@@ -1260,7 +1361,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		voucher.setPk_manager("N/A");
 		voucher.setPk_prepared(pk_user);
 		voucher.setCreator(pk_user);
-		voucher.setPk_system("GJ");// 新增来源系统(社保公积金),用来和手工区分
+		voucher.setPk_system("GL");// 新增来源系统(社保公积金),用来和手工区分
 		if ("02".equals(month)) {
 			voucher.setPrepareddate(new UFDate(nexMonthDate));// 凭证日期
 		} else {
@@ -1380,7 +1481,6 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 					itemVO.setAss((AssVO[]) arrassvo.toArray(new AssVO[0]));
 					itemarr.add(itemVO);	
 				}
-				
 			} else if ("其他应收款/单位往来".equals(key)) {
 				km_code = "122101";// 其他应收款/单位往来
 				debitamount = entry.getValue();// 借方发生额
@@ -1393,7 +1493,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 					ArrayList<AssVO> arrassvo = new ArrayList<AssVO>();
 					arrassvo.add(assvos[0]);
 					itemVO.setAss((AssVO[]) arrassvo.toArray(new AssVO[0]));
-					itemarr.add(itemVO);	
+					itemarr.add(itemVO);
 				}
 				
 			}