Bladeren bron

薪资发放说明

chenzhfa 3 jaren geleden
bovenliggende
commit
e71ee95de7

+ 38 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/HrwaClassitemdevFilter.java

@@ -0,0 +1,38 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import nc.vo.pubapp.pattern.pub.PubAppTool;
+import nccloud.framework.web.processor.IRefSqlBuilder;
+import nccloud.framework.web.processor.refgrid.RefQueryInfo;
+import nccloud.framework.web.ui.meta.RefMeta;
+import nccloud.framework.web.container.SessionContext;
+import nccloud.pubitf.platform.db.SqlParameterCollection;
+
+public class HrwaClassitemdevFilter implements IRefSqlBuilder {
+
+	@Override
+	public String getExtraSql(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+	
+		String pk_wa_class = null==para.getQueryCondition().get("pk_wa_class")?null:para.getQueryCondition().get("pk_wa_class").toString();
+		String cuser =  SessionContext.getInstance().getClientInfo().getUserid();
+		return "  wa_classitem.pk_wa_item in( " 
+				+ "   SELECT pk_wa_item FROM wa_itempower where pk_wa_class = '" + pk_wa_class + "' "		
+						+ "and ( pk_subject = '" + cuser + "'"
+			    +" or pk_subject in ( SELECT sur.pk_role FROM sm_user_role sur where sur.cuserid = '"
+				+ cuser + "')))";
+
+	}
+
+	@Override
+	public SqlParameterCollection getExtraSqlParameter(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getOrderSql(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}

+ 36 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/HrwaPsndocdevFilter.java

@@ -0,0 +1,36 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import nc.vo.pubapp.pattern.pub.PubAppTool;
+import nccloud.framework.web.processor.IRefSqlBuilder;
+import nccloud.framework.web.processor.refgrid.RefQueryInfo;
+import nccloud.framework.web.ui.meta.RefMeta;
+import nccloud.pubitf.platform.db.SqlParameterCollection;
+
+public class HrwaPsndocdevFilter implements IRefSqlBuilder {
+
+	@Override
+	public String getExtraSql(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+	
+		String pk_wa_class = null==para.getQueryCondition().get("pk_wa_class")?null:para.getQueryCondition().get("pk_wa_class").toString();
+		String cyearperiod = null==para.getQueryCondition().get("cyearperiod")?null:para.getQueryCondition().get("cyearperiod").toString();
+		
+//		return "and pk_psndoc in ( SELECT pk_psndoc FROM wa_data "
+//				+ "where   nvl(stopflag ,'N')='N' AND  pk_wa_class = '" + pk_wa_class + "' and cyearperiod = '"
+//				+ cyearperiod + "')";
+		return "";
+	}
+
+	@Override
+	public SqlParameterCollection getExtraSqlParameter(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getOrderSql(RefQueryInfo para, RefMeta meta) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}

+ 11 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainConsts.java

@@ -0,0 +1,11 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+public class WadataexplainConsts {
+
+public static String pagecode =  "60131099_wadataexplain";
+
+public static String tableid =  "head";
+
+public static String searchid = "search";
+
+}

+ 243 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainCopyLastPeriod.java

@@ -0,0 +1,243 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import nc.itf.uap.IUAPQueryBS;
+import nc.jdbc.framework.processor.MapListProcessor;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.VOStatus;
+import nc.vo.pub.lang.UFBoolean;
+import nc.vo.pub.lang.UFDateTime;
+import nc.vo.pubapp.pattern.exception.ExceptionUtils;
+import nc.vo.pubapp.pattern.pub.PubAppTool;
+import nccloud.commons.collections.CollectionUtils;
+import nccloud.framework.core.json.IJson;
+import nccloud.framework.service.ServiceLocator;
+import nccloud.framework.web.container.ClientInfo;
+import nccloud.framework.web.container.IRequest;
+import nccloud.framework.web.container.SessionContext;
+import nccloud.framework.web.convert.translate.Translator;
+import nccloud.framework.web.json.JsonFactory;
+import nccloud.framework.web.ui.pattern.grid.Grid;
+import nccloud.framework.web.ui.pattern.grid.GridFormulaHandler;
+import nccloud.web.action.NCCAction;
+import nccloud.web.utils.GridModelConvertUtils;
+
+/**复制上一期间*/
+public class WadataexplainCopyLastPeriod extends NCCAction {
+
+
+	@Override
+	public <T> Object execute(IRequest request, T para) throws Exception {
+		IJson json = JsonFactory.create();
+	    String read = request.read();
+	    String areacode = "head";
+	    Map<String,Object> map = json.fromJson(read, Map.class);
+	    Map<String,Object> newmap = json.fromJson(map.get("model").toString(), Map.class);
+	    if(null==newmap.get("reqpara"))
+	    	ExceptionUtils.wrappBusinessException("参数reqpara不能为空,请检查");
+	    if(null!=newmap.get("areacode"))
+	    	areacode=newmap.get("areacode").toString();
+	    Map<String,Object> reqpara = json.fromJson(newmap.get("reqpara").toString(), Map.class);
+	    
+	    //获取上一期间
+	    List<Wadataexplain> result  = getLastperiodDatas(reqpara);
+
+		
+	    
+		Grid grid = (Grid) para;
+		
+		GridModelConvertUtils gridConvUtl = new GridModelConvertUtils();
+
+		if(CollectionUtils.isNotEmpty(result)) {
+			
+			grid = gridConvUtl.toGridOpe(WadataexplainConsts.pagecode, result.stream().toArray(Wadataexplain[]::new));
+		}
+		
+		grid.getModel().setAreacode(areacode);
+		// 处理显示公式
+		GridFormulaHandler gridFormulaHandler = new GridFormulaHandler(grid);
+		gridFormulaHandler.handleLoadFormula();
+		// 翻译器,将主键翻译成名称
+		Translator translator = new Translator();
+		translator.translate(grid);
+		return grid;
+	}
+
+	
+	/**
+	 * 获取上一期间数据
+	 * @param reqpara
+	 * @throws BusinessException 
+	 */
+	private List<Wadataexplain> getLastperiodDatas(Map<String, Object> reqpara) throws BusinessException {
+		// TODO Auto-generated method stub
+	    String pk_org = reqpara.get("pk_org").toString();
+	    String pk_wa_class = reqpara.get("pk_wa_class").toString();
+	    String cyearperiod = reqpara.get("cyearperiod").toString();
+	    String copyear = cyearperiod.substring(0,4);//年
+		String copperiod = cyearperiod.substring(4,6);//月
+	    
+	    String beforeyear = copyear;  
+		String beformonth =  copperiod;
+		
+		if("01".equals(copperiod)){
+			beformonth = "12";
+			beforeyear= String.valueOf(Integer.parseInt(copyear)-1);
+		}else if("12".equals(copperiod) || "11".equals(copperiod)){
+			beformonth = String.valueOf(Integer.parseInt(copperiod)-1);
+		}else{
+			beformonth = "0"+String.valueOf(Integer.parseInt(copperiod)-1);
+		}
+	    
+		// 校验用户信息
+		ClientInfo clientInfo = SessionContext.getInstance().getClientInfo();
+		String userid = clientInfo.getUserid();
+		
+		
+		StringBuffer selectSql = new StringBuffer();//上一期间薪资发放说明的所有数据
+		selectSql.append("pk_wa_class = '");
+		selectSql.append(pk_wa_class);
+		selectSql.append("' and def1 = '");
+		selectSql.append(beforeyear+beformonth);
+		selectSql.append("' and nvl(dr,0)=0 ");
+		
+		StringBuffer thiswadataSql = new StringBuffer();//本期间薪资方案的所有数据,即所有的人员
+		thiswadataSql.append(" select wa_data.pk_psndoc, wa_data.pk_wa_data");
+		thiswadataSql.append(" from wa_data");
+		//thiswadataSql.append(" inner join bd_psndoc on wa_data.psnid = bd_psndoc.pk_psndoc");
+		thiswadataSql.append(" where wa_data.pk_wa_class = '");
+		thiswadataSql.append(pk_wa_class);
+		thiswadataSql.append("' and wa_data.cyearperiod = '");
+		thiswadataSql.append(copyear+copperiod);
+		thiswadataSql.append("' and wa_data.stopflag = 'N'");
+		List<Map<String, String>> thiswadataList = (List<Map<String, String>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(thiswadataSql.toString(), new MapListProcessor());
+		Map<String,String> thiswadataMap = new HashMap<String,String>();//本期间薪资方案的人员编码-薪资方案PK
+		if(thiswadataList!=null && thiswadataList.size()>0){
+			for(int i=0;i<thiswadataList.size();i++){
+				String pk_psndoc = thiswadataList.get(i).get("pk_psndoc");
+				String pk_wa_data = thiswadataList.get(i).get("pk_wa_data");
+				thiswadataMap.put(pk_psndoc, pk_wa_data);
+			}
+		}else{
+			ExceptionUtils.wrappBusinessException("本期间薪资方案没有数据,请检查");
+		}
+		
+		//获取对照关系 
+		String sql = 
+			"select wa_classitem.pk_wa_classitem,wa_item.pk_wa_item\n" +
+			"  from wa_classitem\n" + 
+			" inner join wa_item\n" + 
+			"    on wa_classitem.pk_wa_item = wa_item.pk_wa_item\n" + 
+			"    where nvl(wa_classitem.dr,0)=0\n" + 
+			"    and nvl(wa_item.dr,0)=0\n" + 
+			"    and wa_classitem.pk_org = '"+pk_org+"'\n" + 
+			"    and wa_classitem.cyear='"+beforeyear+"'\n" + 
+			"    and wa_classitem.cperiod='"+beformonth+"'\n" + 
+			"    and wa_classitem.pk_wa_class='"+pk_wa_class+"'\n" + 
+			" order by wa_item.code";
+
+		List<Map<String, String>> thiswadataitemList = (List<Map<String, String>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(sql.toString(), new MapListProcessor());
+		Map<String,String> lastwadataitemMap = new HashMap<String,String>();
+		if(thiswadataitemList!=null && thiswadataitemList.size()>0){
+			for(int i=0;i<thiswadataitemList.size();i++){
+				String pk_wa_classitem = thiswadataitemList.get(i).get("pk_wa_classitem");
+				String pk_wa_item = thiswadataitemList.get(i).get("pk_wa_item");
+				lastwadataitemMap.put(pk_wa_classitem, pk_wa_item);
+			}
+		}else{
+			ExceptionUtils.wrappBusinessException("上一期间没有设置薪资项目,请检查");
+		}
+		
+		
+		
+		
+		//String cuser =  SessionContext.getInstance().getClientInfo().getUserid();
+		String powersql = "select wa_itempower.pk_itempower,\n" 
+		        + "       wa_classitem.pk_wa_class,\n"
+				+ "       wa_classitem.pk_wa_item,\n" 
+		        + "       wa_classitem.name name,\n"
+				+ "       wa_classitem.pk_wa_classitem,\n" 
+		        + "       wa_itempower.editflag,\n"
+				+ "       wa_itempower.moduleflag,\n" 
+		        + "       wa_classitem.pk_org,\n"
+				+ "       wa_classitem.pk_group,\n" 
+		        + "       wa_itempower.ts,\n" 
+				+ "       wa_classitem.ifromflag,\n"
+				+ "       wa_itempower.subject_type,\n" 
+				+ "       wa_itempower.pk_subject\n" 
+				+ "   from wa_classitem\n"
+				+ "   inner join wa_waclass\n" 
+				+ "   on wa_waclass.pk_org = wa_classitem.pk_org\n"
+				+ "   and wa_waclass.pk_wa_class = wa_classitem.pk_wa_class\n"
+				+ "   and wa_waclass.cyear = wa_classitem.cyear\n"
+				+ "   and wa_waclass.cperiod = wa_classitem.cperiod\n" 
+				+ "   inner join wa_item\n"
+				+ "   on wa_classitem.pk_wa_item = wa_item.pk_wa_item\n" 
+				+ "   left outer join wa_itempower\n"
+				+ "   on wa_itempower.pk_wa_item = wa_classitem.pk_wa_item\n"
+				+ "   and wa_itempower.pk_wa_class = wa_classitem.pk_wa_class\n"
+				+ "   and wa_itempower.pk_org = wa_classitem.pk_org\n" 
+				+ "   and wa_itempower.pk_subject = '"+ userid + "'"
+			    +" or pk_subject in ( SELECT sur.pk_role FROM sm_user_role sur where sur.cuserid = '"
+				+ userid +"')\n" 
+				+ "   where wa_waclass.pk_org = '"+pk_org+"' \n"
+				+ "   and wa_waclass.pk_wa_class = '"+pk_wa_class+"'\n" 
+				+ "   and wa_item.mid = 'N'\n"
+				+ "   and wa_itempower.editflag ='Y'";
+
+		List<Map<String, Object>> thisclassitemList = (List<Map<String, Object>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(powersql, new MapListProcessor());
+		Map<String,String> thisclassitemMap = new HashMap<String,String>();//本期间薪资方案的人员编码-薪资方案PK
+		if(thisclassitemList!=null && thisclassitemList.size()>0){
+			for(int i=0;i<thisclassitemList.size();i++){
+				Object pk_wa_classitem = thisclassitemList.get(i).get("pk_wa_classitem");
+				Object vname = thisclassitemList.get(i).get("name");
+				Object iitemid =  thisclassitemList.get(i).get("pk_wa_item");
+				thisclassitemMap.put(String.valueOf(iitemid), String.valueOf(pk_wa_classitem));
+			}
+		}else{
+			ExceptionUtils.wrappBusinessException("本期间没有可用的薪资发放项目或该操作人员无可用项目权限,请检查"); 
+		}
+		
+		List<Wadataexplain> vos = (List<Wadataexplain>) ServiceLocator.find(IUAPQueryBS.class).retrieveByClause(Wadataexplain.class, selectSql.toString());
+		List<Wadataexplain> volist = new ArrayList<Wadataexplain>();		
+		if(CollectionUtils.isNotEmpty(vos)) {
+			
+			vos.forEach(vo->{
+				String pk_psndoc = vo.getPk_psndoc();
+				String pk_wa_classitem = vo.getPk_wa_classitem();
+				String itemid = lastwadataitemMap.get(pk_wa_classitem);//先根据对照,把itemid拿出来 
+				String thiswaitem = thisclassitemMap.get(itemid);//根据itemid拿出最新的waitem
+				if(thiswadataMap.containsKey(pk_psndoc)&&!PubAppTool.isNull(thiswaitem)) {
+					vo.setCreationtime(new UFDateTime());
+					vo.setCreator(userid);
+					vo.setCyear(copyear);
+					vo.setCperiod(copperiod);
+					vo.setDef1(copyear+copperiod);
+					vo.setStatus(VOStatus.NEW);
+					vo.setPk_wa_data_explain(null);
+					vo.setPk_wa_classitem(thiswaitem);
+					vo.setIscommit(UFBoolean.FALSE);
+					vo.setIsquote(UFBoolean.FALSE);
+					vo.setModifiedtime(null);
+					vo.setModifier(null);
+					volist.add(vo);
+				}
+				
+			});
+		}
+		
+		return volist;
+	}
+
+	@Override
+	protected Class getParaClass() {
+		return Grid.class;
+	}
+	
+	
+}

+ 19 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainPrint.java

@@ -0,0 +1,19 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import nccloud.web.platform.print.AbstractPrintAction;
+
+public class WadataexplainPrint  extends AbstractPrintAction{
+
+	@Override
+	public String getPrintServiceModule() {
+		// TODO Auto-generated method stub
+		return "hrwa";
+	}
+
+	@Override
+	public String getPrintServiceName() {
+		// TODO Auto-generated method stub
+		return "nccloud.impl.hrwa.pubinfo.wadataexplain.print.WadataexplainPrintService";
+	}
+
+}

+ 111 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainQueryAction.java

@@ -0,0 +1,111 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import nc.impl.pubapp.pattern.database.IDQueryBuilder;
+import nccloud.itf.bd.wadataexplain.IWadataexplainQryService;
+import nc.ui.querytemplate.querytree.IQueryScheme;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nccloud.dto.baseapp.querytree.dataformat.QueryTreeFormatVO;
+import nccloud.framework.service.ServiceLocator;
+import nccloud.framework.web.container.IRequest;
+import nccloud.framework.web.convert.translate.Translator;
+import nccloud.framework.web.ui.model.PageInfo;
+import nccloud.framework.web.ui.pattern.grid.Grid;
+import nccloud.framework.web.ui.pattern.grid.GridOperator;
+import nccloud.pubitf.platform.query.INCCloudQueryService;
+import nccloud.web.action.NCCAction;
+
+/***************************************************************
+* @author tangcht
+* @version nccloud1.0
+* @since 2019-1-7
+* @see
+***************************************************************/
+public class WadataexplainQueryAction extends NCCAction {
+
+@Override
+public <T> Object execute(IRequest request, T para) throws Exception {
+    QueryTreeFormatVO info = (QueryTreeFormatVO) para;
+    Grid grid = null;
+    // 1、根据传入的参数构建scheme
+    INCCloudQueryService qservice = ServiceLocator.find(INCCloudQueryService.class);
+    IQueryScheme scheme = qservice.convertCondition(info);
+    // 调用接口查询数据
+    IWadataexplainQryService service = ServiceLocator.find(IWadataexplainQryService.class);
+    String wherepart = scheme.getWhereSQLOnly();
+    wherepart = wherepart == null ? "1=1" : wherepart;
+    String[] ids = service.queryPKs(wherepart);
+    if(ids == null || ids.length <= 0) {
+    return grid;
+    }
+    int pageSize = Integer.parseInt(info.getPageInfo().getPageSize());
+    int pageIndex = Integer.parseInt(info.getPageInfo().getPageIndex());
+    PageInfo pageInfo = new PageInfo();
+    pageInfo.setTotal(ids.length);
+    pageInfo.setPageSize(pageSize);
+    pageInfo.setTotalPage(this.getTotalPage(pageInfo, ids.length));
+    setPageIndex(pageInfo,pageIndex);
+    String[] PageIds = this.getCurrPageIds(ids, pageInfo);
+
+    IDQueryBuilder sqlbuilder = new IDQueryBuilder();
+    String wherePart = sqlbuilder.buildSQL("pk_wa_data_explain", PageIds);
+    IWadataexplainQryService qryService = ServiceLocator.find(IWadataexplainQryService.class);
+    Wadataexplain[] vos = qryService.query(wherePart);
+
+    if(vos != null && vos.length > 0){
+
+    GridOperator gridOperator = new GridOperator(WadataexplainConsts.pagecode);
+    grid = gridOperator.toGrid(vos);
+
+    // 翻译器,将主键翻译成名称
+    Translator translator = new Translator();
+    translator.translate(grid);
+
+    grid.getModel().setPageinfo(pageInfo);
+    grid.getModel().setAllpks(ids);
+    }
+    return grid;
+    }
+
+    @Override
+    protected Class getParaClass() {
+    return QueryTreeFormatVO.class;
+    }
+
+    private String[] getCurrPageIds(String[] ids,PageInfo page){
+    List<String> list = new ArrayList<String>();
+            int end = Math.min((page.getPageIndex()+1)*page.getPageSize(), page.getTotal());
+            int start = ((page.getPageIndex()<0?0:page.getPageIndex()))*page.getPageSize()+1;
+            int sum = end - start + 1;
+            for(int i=0;i<sum;i++){
+            list.add(ids[start-1]);
+            start++;
+            }
+
+            return list.toArray(new String[0]);
+            }
+
+            private void setPageIndex(PageInfo page,int pageIndex){
+            if(pageIndex<0)pageIndex =0;
+            if((pageIndex+1)*page.getPageSize() < page.getTotal()){
+            page.setPageIndex(pageIndex);
+            }else{
+            page.setPageIndex(page.getTotalPage()-1);
+            }
+            }
+
+            private int getTotalPage(PageInfo pageInfo, int len) {
+
+            int size = pageInfo.getPageSize();
+            int total = 0;
+            if (len % size == 0) {
+            total = len / size;
+            } else {
+            total = len / size + 1;
+            }
+            return total;
+            }
+
+            }

+ 272 - 0
hrwa/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainSaveAction.java

@@ -0,0 +1,272 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import nccloud.itf.bd.wadataexplain.IWadataexplainService;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.pubapp.pattern.exception.ExceptionUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import nc.bs.logging.Logger;
+import nc.itf.uap.IUAPQueryBS;
+import nc.jdbc.framework.processor.MapListProcessor;
+import nc.vo.bd.meta.BatchOperateVO;
+import nccloud.commons.collections.CollectionUtils;
+import nccloud.framework.service.ServiceLocator;
+import nccloud.framework.web.container.IRequest;
+import nccloud.framework.web.convert.translate.Translator;
+import nccloud.framework.web.ui.pattern.grid.Grid;
+import nccloud.framework.web.ui.pattern.grid.GridFormulaHandler;
+import nccloud.framework.web.ui.pattern.grid.GridOperator;
+import nccloud.vo.utils.BatchVOTool;
+import nccloud.web.action.NCCAction;
+import nccloud.web.utils.GridModelConvertUtils;
+
+/***************************************************************
+ * @author tangcht
+ * @version nccloud1.0
+ * @since 2018-7-10
+ * @see
+ ***************************************************************/
+public class WadataexplainSaveAction extends NCCAction {
+
+	@Override
+	public <T> Object execute(IRequest request, T para) throws Exception {
+		Grid grid = (Grid) para;
+		GridModelConvertUtils gridConvUtl = new GridModelConvertUtils();
+		Wadataexplain[] vos = gridConvUtl.toVOs(Wadataexplain.class, grid.getModel());
+		BatchVOTool<Wadataexplain> tool = new BatchVOTool<Wadataexplain>(Wadataexplain.class);
+		BatchOperateVO batchVO = tool.getBatchOperateVO(vos);
+		
+		//add by longht 校验当前保存vo的期间是否可以保存 start
+		StringBuffer pk_wa_class_buf = new StringBuffer();
+		StringBuffer cyearperiodbuff = new StringBuffer();
+		StringBuffer pk_databuf = new StringBuffer();
+		
+		
+		List<String> cyplist = new ArrayList<String>();
+		List<String> waclasslist = new ArrayList<String>();
+		List<String> pk_datalist = new ArrayList<String>();
+		
+		StringBuffer pk_psndoc_buf = new StringBuffer();
+		StringBuffer cyp1buf = new StringBuffer();
+		StringBuffer pk_cybuf = new StringBuffer();
+		StringBuffer drbuf = new StringBuffer();
+		StringBuffer pwitembuf = new StringBuffer();
+		List<String> cyp1list = new ArrayList<String>();
+		List<String> pk_psndoclist = new ArrayList<String>();
+		List<String> pkcylist = new ArrayList<String>();
+		List<String> drlist = new ArrayList<String>();
+		List<String> pwitemlist = new ArrayList<String>();
+		//List<String> pnlist = new ArrayList<String>();
+		
+		Wadataexplain[] addvos = (Wadataexplain[]) batchVO.getAddObjs();
+		Wadataexplain[] upvos = (Wadataexplain[]) batchVO.getUpdObjs();
+		List<Wadataexplain> batchvos = new ArrayList<Wadataexplain>();
+	
+		//判断是否是新增或修改过
+		if(addvos!=null||upvos!=null) {
+			
+			if(addvos!=null) {
+				
+			 for(Wadataexplain vo : addvos) {
+				 //String pk_psndoc =vo.getPk_psndoc() ;
+				// String cyp1 = vo.getDef1();
+				 String pk_cp1 = vo.getPk_psndoc()+vo.getDef1()+vo.getPk_wa_classitem();
+				
+			if(!pkcylist.contains(pk_cp1)) {
+				 
+				//if(!pkcylist.contains(pk_psndoc))
+				//	pk_psndoc_buf.append("'").append(pk_psndoc).append("',");
+				//if(!pkcylist.contains(cyp1))
+				//	cyp1buf.append("'").append(cyp1).append("',");	
+				
+				pk_cybuf.append("'").append(pk_cp1).append("',");
+				
+				pkcylist.add(pk_cp1);
+				batchvos.add(vo);
+			}else {
+				
+			String sql = "select name as "+"姓名"+" from bd_psndoc where pk_psndoc = "+"'"+vo.getPk_psndoc()+"'";
+						
+				List<Map<String, String>> thiswadataitemList = (List<Map<String, String>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(sql.toString(), new MapListProcessor());
+				ExceptionUtils.wrappBusinessException("新增的数据有重复人员:"+thiswadataitemList);
+			}		 
+		}
+			 
+
+//		StringBuffer psnbyf = new StringBuffer;
+//		List<String> pnlist = new ArrayList<String>();
+//		for(Wadataexplain vo : addvos) {
+//		String pk_cp1 = vo.getPk_psndoc()+vo.getDef1()+vo.getPk_wa_classitem();
+//		pkcylist.add(pk_cp1);
+//			}
+			
+//			for(Wadataexplain vo : addvos) {
+//				String pk_pn = vo.getPk_psndoc();
+//				if(!pnlist.contains(pk_pn))
+//				psnbyf.append("'").append(pk_pn).append("',");
+//				pnlist.add(pk_pn);
+//				
+//					}
+			
+//	for(Wadataexplain vo : addvos) {
+//			for(int i=0;i<pkcylist.size();i++){
+//				for(int j=i+1;j<pkcylist.size();j++){
+//						if(pkcylist.get(i).equals(pkcylist.get(j))){
+//
+//
+//						StringBuffer sqlBufall = new StringBuffer();
+//						sqlBufall.append("select name as ");
+//						sqlBufall.append("姓名");
+//						sqlBufall.append(" from bd_psndoc where pk_psndoc in ( ");
+//						
+//						sqlBufall.append(psnbyf.substring(0, cyearperiodbuff.length()-1));
+//						
+//						sqlBufall.append(" ) ");
+//
+//														
+//						List<Map<String, String>> thiswadataitemList = (List<Map<String, String>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(sqlBufall.toString(), new MapListProcessor());
+//						
+//						ExceptionUtils.wrappBusinessException("新增的数据有重复人员:"+thiswadataitemList);
+//							
+//					}else{
+//						batchvos.add(vo);
+//						}
+//										
+//					}
+//				}
+//				batchvos.add(vo);
+//			}			 
+	
+				
+	
+				
+			 		
+}
+			
+			if(upvos!=null) {
+				for(Wadataexplain vo : upvos) {
+				    String pk_wadata =	vo.getPk_wa_data_explain();
+					if(!pk_datalist.contains(pk_wadata))
+						pk_databuf.append("'").append(pk_wadata).append("',");
+					pk_datalist.add(pk_wadata);
+					
+					batchvos.add(vo);
+				
+					}
+				}
+		
+		
+		for (Wadataexplain vo : batchvos) {
+			String pk_wa_class = vo.getPk_wa_class();
+			String cyp = vo.getDef1();
+			
+			if(!waclasslist.contains(pk_wa_class))
+				pk_wa_class_buf.append("'").append(pk_wa_class).append("',");
+			if(!cyplist.contains(cyp))
+				cyearperiodbuff.append("'").append(cyp).append("',");
+			
+			cyplist.add(cyp);
+			waclasslist.add(pk_wa_class);
+		}
+		
+		//当前会计期间已经 全部审批,不允许保存
+		StringBuffer dataBufall = new StringBuffer();
+		dataBufall.append(" select pk_wa_data from wa_data");
+		dataBufall.append(" where checkflag = 'N' and stopflag = 'N'");
+		dataBufall.append(" and pk_wa_class in ( ");
+		dataBufall.append(pk_wa_class_buf.substring(0, pk_wa_class_buf.length()-1));
+		dataBufall.append(" )");
+		dataBufall.append(" and cyearperiod in ( ");
+		dataBufall.append(cyearperiodbuff.substring(0, cyearperiodbuff.length()-1));
+		dataBufall.append(" )");
+		dataBufall.append(" and nvl(dr,0)=0");
+		
+		List<Map<String, Object>> alldatalist = (List<Map<String, Object>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(dataBufall.toString(), new MapListProcessor());
+		if(CollectionUtils.isEmpty(alldatalist))
+			ExceptionUtils.wrappBusinessException("薪资发放节点数据已全部审核,不允许保存");
+		
+
+	
+		
+		for (Wadataexplain vo : batchvos) {
+			String pk_psndoc = vo.getPk_psndoc();
+			String cyp1 = vo.getDef1();
+			String dr = vo.getDr().toString();
+			String pk_wa_classitem = vo.getPk_wa_classitem();
+		if(!pk_psndoclist.contains(pk_psndoc)) {
+			pk_psndoc_buf.append("'").append(pk_psndoc).append("',");
+			pk_psndoclist.add(pk_psndoc);
+		}
+		if(!cyp1list.contains(cyp1)) {
+			cyp1buf.append("'").append(cyp1).append("',");
+			cyp1list.add(cyp1);
+		}
+		
+			if(!drlist.contains(dr)) {
+				drbuf.append("'").append(dr).append("',");
+				drlist.add(dr);
+			}
+			
+			if(!pwitemlist.contains(pk_wa_classitem)) {
+				pwitembuf.append("'").append(pk_wa_classitem).append("',");
+				pwitemlist.add(pk_wa_classitem);
+			}
+		}
+		//过滤同一期间条件
+		StringBuffer Bufall = new StringBuffer();
+		Bufall.append(" select pk_psndoc,def1,dr,pk_wa_data_explain from wa_data_explain where pk_psndoc in(");
+		Bufall.append(pk_psndoc_buf.substring(0, pk_psndoc_buf.length()-1));
+		Bufall.append(" ) ");
+		Bufall.append(" and def1 in (");
+		Bufall.append(cyp1buf.substring(0, cyp1buf.length()-1));
+		Bufall.append(" ) ");
+		
+		Bufall.append(" and dr in (");
+		Bufall.append(drbuf.substring(0, drbuf.length()-1));
+		Bufall.append(" ) ");
+		
+		Bufall.append(" and pk_wa_classitem in (");
+		Bufall.append(pwitembuf.substring(0, pwitembuf.length()-1));
+		Bufall.append(" ) ");
+		
+		if( null!=batchVO.getUpdObjs()) {
+			
+			Bufall.append(" and pk_wa_data_explain not in (");
+			Bufall.append(pk_databuf.substring(0, pk_databuf.length()-1));
+			Bufall.append("  )");
+			
+		}
+		List<Map<String, Object>> bill = (List<Map<String, Object>>)ServiceLocator.find(IUAPQueryBS.class).executeQuery(Bufall.toString(), new MapListProcessor());
+		if(!CollectionUtils.isEmpty(bill))
+			ExceptionUtils.wrappBusinessException("同一期间人员重复");
+		}
+		
+		//add by longht 校验当前保存vo的期间是否可以保存 end 
+		BatchOperateVO savedBatchVO = ServiceLocator.find(IWadataexplainService.class).batchSaveCurrtype(batchVO);
+		Wadataexplain[] saveVOs = tool.getVOsByBatchVO(savedBatchVO);
+		if (saveVOs != null && saveVOs.length > 0) {
+			grid = gridConvUtl.toGridOpe(WadataexplainConsts.pagecode, saveVOs);
+			 //GridOperator gridOperator = new GridOperator(WadataexplainConsts.pagecode);
+			 //grid = gridOperator.toGrid(saveVOs);
+			
+		}
+		
+		// 处理显示公式
+		GridFormulaHandler gridFormulaHandler = new GridFormulaHandler(grid);
+		gridFormulaHandler.handleLoadFormula();
+		// 翻译器,将主键翻译成名称
+		Translator translator = new Translator();
+		translator.translate(grid);
+		return grid;
+	}
+
+	@Override
+	protected Class getParaClass() {
+		return Grid.class;
+	}
+
+}