Browse Source

薪资发放说明节点开发

longht 4 years ago
parent
commit
87ca8b8c45
17 changed files with 2447 additions and 1 deletions
  1. 2 1
      hrwa/.classpath
  2. 13 0
      hrwa/META-INF/P_wadataexplain.upm
  3. 105 0
      hrwa/METADATA/waexplain/wa_data_explain.bmf
  4. 56 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainBatchCommitAction.java
  5. 11 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainConsts.java
  6. 238 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainCopyLastPeriod.java
  7. 111 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainQueryAction.java
  8. 38 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainQueryPageGridByPksAction.java
  9. 52 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainSaveAction.java
  10. 56 0
      hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainUnBatchCommitAction.java
  11. 38 0
      hrwa/nccloud/src/client/yyconfig/modules/hrwa/pubinfo/config/action/Wadataexplain.xml
  12. 14 0
      hrwa/nccloud/src/client/yyconfig/modules/hrwa/pubinfo/config/authorize/60131099_authorize.xml
  13. 633 0
      hrwa/src/private/nc/impl/wa/paydata/DataCaculateService.java
  14. 179 0
      hrwa/src/private/nccloud/impl/bd/wadataexplain/WadataexplainServiceImpl.java
  15. 818 0
      hrwa/src/public/nc/vo/hrwa/wadataexplain/Wadataexplain.java
  16. 28 0
      hrwa/src/public/nccloud/itf/bd/wadataexplain/IWadataexplainQryService.java
  17. 55 0
      hrwa/src/public/nccloud/itf/bd/wadataexplain/IWadataexplainService.java

+ 2 - 1
hrwa/.classpath

@@ -3,8 +3,9 @@
 	<classpathentry kind="src" output="out/public" path="src/public"/>
 	<classpathentry kind="src" output="out/public" path="src/public"/>
 	<classpathentry kind="src" output="out/private" path="src/private"/>
 	<classpathentry kind="src" output="out/private" path="src/private"/>
 	<classpathentry kind="src" output="out/client" path="src/client"/>
 	<classpathentry kind="src" output="out/client" path="src/client"/>
-	<classpathentry kind="src" output="out/resources" path="resources"/>
 	<classpathentry kind="src" output="out/test" path="src/test"/>
 	<classpathentry kind="src" output="out/test" path="src/test"/>
+	<classpathentry kind="src" path="nccloud/src/client"/>
+	<classpathentry kind="src" output="out/resources" path="resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="nc.uap.mde.library.container/Ant_Library"/>
 	<classpathentry kind="con" path="nc.uap.mde.library.container/Ant_Library"/>
 	<classpathentry kind="con" path="nc.uap.mde.library.container/Product_Common_Library"/>
 	<classpathentry kind="con" path="nc.uap.mde.library.container/Product_Common_Library"/>

+ 13 - 0
hrwa/META-INF/P_wadataexplain.upm

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding='gb2312'?>
+<module name="hrwa">
+  <public>
+        <component remote="true" singleton="true"  tx="NONE">
+          <interface>nccloud.itf.bd.wadataexplain.IWadataexplainQryService</interface>
+          <implementation>nccloud.impl.bd.wadataexplain.WadataexplainServiceImpl</implementation>
+        </component>
+        <component remote="true" singleton="true"  tx="CMT">
+          <interface>nccloud.itf.bd.wadataexplain.IWadataexplainService</interface>
+          <implementation>nccloud.impl.bd.wadataexplain.WadataexplainServiceImpl</implementation>
+        </component>
+  </public> 
+</module> 

File diff suppressed because it is too large
+ 105 - 0
hrwa/METADATA/waexplain/wa_data_explain.bmf


+ 56 - 0
hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainBatchCommitAction.java

@@ -0,0 +1,56 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import java.util.HashMap;
+import java.util.List;
+
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+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.itf.bd.wadataexplain.IWadataexplainService;
+import nccloud.web.action.NCCAction;
+import nccloud.web.utils.GridModelConvertUtils;
+
+
+public class WadataexplainBatchCommitAction 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());
+		StringBuffer pk_psndoc_buf = new StringBuffer();
+		StringBuffer pk_buf = new StringBuffer();
+		HashMap<String,String> psndocMap = new HashMap<String,String>();
+		for (Wadataexplain vo : vos) {
+			String pk_psndoc = vo.getPk_psndoc();
+			String pk_wa_data_explain = vo.getPk_wa_data_explain();
+			pk_psndoc_buf.append("'").append(pk_psndoc).append("',");
+			pk_buf.append("'").append(pk_wa_data_explain).append("',");
+			psndocMap.put(pk_psndoc, pk_psndoc);
+		}
+		List<Wadataexplain> result  =null;
+		if(pk_psndoc_buf.length()>0 && pk_buf.length()>0){
+			 result = ServiceLocator.find(IWadataexplainService.class).batchCommit(pk_psndoc_buf, pk_buf, psndocMap);
+		}
+		if(null!=result) {
+			
+			grid = gridConvUtl.toGridOpe(WadataexplainConsts.pagecode, result.stream().toArray(Wadataexplain[]::new));
+		}
+		// 处理显示公式
+		GridFormulaHandler gridFormulaHandler = new GridFormulaHandler(grid);
+		gridFormulaHandler.handleLoadFormula();
+		// 翻译器,将主键翻译成名称
+		Translator translator = new Translator();
+		translator.translate(grid);
+		return grid;
+	}
+
+	@Override
+	protected Class getParaClass() {
+		return Grid.class;
+	}
+
+}

+ 11 - 0
hrwa/nccloud/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";
+
+}

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

@@ -0,0 +1,238 @@
+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.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(null!=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 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+"'\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>();		
+		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;
+	}
+	
+	
+}

+ 111 - 0
hrwa/nccloud/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;
+            }
+
+            }

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

@@ -0,0 +1,38 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import nc.impl.pubapp.pattern.database.IDQueryBuilder;
+import nccloud.itf.bd.wadataexplain.IWadataexplainQryService;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nccloud.framework.service.ServiceLocator;
+import nccloud.framework.web.container.IRequest;
+import nccloud.framework.web.ui.pattern.grid.Grid;
+import nccloud.framework.web.ui.pattern.grid.GridOperator;
+import nccloud.web.action.NCCAction;
+
+/***************************************************************
+* 鍥藉鍦板尯鍒嗛〉鏌ヨ
+* @author tangcht
+* @version nccloud1.0
+* @since 2018-9-30
+* @see
+***************************************************************/
+public class WadataexplainQueryPageGridByPksAction extends NCCAction {
+
+@Override
+public <T> Object execute(IRequest request, T para) throws Exception {
+    Grid grid = null;
+    Map<String, Object> paras = (Map<String, Object>) para;
+    String[] pks = (String[]) ((ArrayList) paras.get("pks")).toArray(new String[0]);
+    IDQueryBuilder sqlbuilder = new IDQueryBuilder();
+    String wherePart = sqlbuilder.buildSQL("pk_wa_data_explain", pks);
+    IWadataexplainQryService qryService = ServiceLocator.find(IWadataexplainQryService.class);
+    Wadataexplain[] vos = qryService.query(wherePart);
+    GridOperator opr = new GridOperator(WadataexplainConsts.pagecode);
+    grid = opr.toGrid(vos);
+    return grid;
+    }
+
+    }

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

@@ -0,0 +1,52 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import nccloud.itf.bd.wadataexplain.IWadataexplainService;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.bd.meta.BatchOperateVO;
+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);
+		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;
+	}
+
+}

+ 56 - 0
hrwa/nccloud/src/client/nccloud/web/hrwa/pubinfo/wadataexplain/action/WadataexplainUnBatchCommitAction.java

@@ -0,0 +1,56 @@
+package nccloud.web.hrwa.pubinfo.wadataexplain.action;
+
+import java.util.HashMap;
+import java.util.List;
+
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+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.itf.bd.wadataexplain.IWadataexplainService;
+import nccloud.web.action.NCCAction;
+import nccloud.web.utils.GridModelConvertUtils;
+
+
+public class WadataexplainUnBatchCommitAction 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());
+		StringBuffer pk_psndoc_buf = new StringBuffer();
+		StringBuffer pk_buf = new StringBuffer();
+		HashMap<String,String> psndocMap = new HashMap<String,String>();
+		for (Wadataexplain vo : vos) {
+			String pk_psndoc = vo.getPk_psndoc();
+			String pk_wa_data_explain = vo.getPk_wa_data_explain();
+			pk_psndoc_buf.append("'").append(pk_psndoc).append("',");
+			pk_buf.append("'").append(pk_wa_data_explain).append("',");
+			psndocMap.put(pk_psndoc, pk_psndoc);
+		}
+		List<Wadataexplain> result  =null;
+		if(pk_psndoc_buf.length()>0 && pk_buf.length()>0){
+			 result = ServiceLocator.find(IWadataexplainService.class).batchUncommit(pk_psndoc_buf, pk_buf, psndocMap);
+		}
+		if(null!=result) {
+			
+			grid = gridConvUtl.toGridOpe(WadataexplainConsts.pagecode, result.stream().toArray(Wadataexplain[]::new));
+		}
+		// 处理显示公式
+		GridFormulaHandler gridFormulaHandler = new GridFormulaHandler(grid);
+		gridFormulaHandler.handleLoadFormula();
+		// 翻译器,将主键翻译成名称
+		Translator translator = new Translator();
+		translator.translate(grid);
+		return grid;
+	}
+
+	@Override
+	protected Class getParaClass() {
+		return Grid.class;
+	}
+
+}

+ 38 - 0
hrwa/nccloud/src/client/yyconfig/modules/hrwa/pubinfo/config/action/Wadataexplain.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<actions>
+    <action>
+        <name>hrwa.wadataexplain.WadataexplainQuery</name>
+        <lable>薪资发放说明查询</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainQueryAction</clazz>
+    </action>
+
+    <action>
+        <name>hrwa.wadataexplain.WadataexplainSave</name>
+        <lable>薪资发放说明保存</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainSaveAction</clazz>
+    </action>
+
+    <action>
+        <name>hrwa.wadataexplain.WadataexplainQueryPageGridByPks</name>
+        <lable>薪资发放说明分页查询</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainQueryPageGridByPksAction</clazz>
+    </action>
+    
+    <action>
+        <name>hrwa.wadataexplain.batchCommit</name>
+        <lable>薪资发放说明提交</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainBatchCommitAction</clazz>
+    </action>
+  
+    <action>
+        <name>hrwa.wadataexplain.batchUnCommit</name>
+        <lable>薪资发放说明收回</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainUnBatchCommitAction</clazz>
+    </action>
+
+    <action>
+        <name>hrwa.wadataexplain.copyLastPeriod</name>
+        <lable>薪资发放说明复制上一期间</lable>
+        <clazz>nccloud.web.hrwa.pubinfo.wadataexplain.action.WadataexplainCopyLastPeriod</clazz>
+    </action>
+</actions>

+ 14 - 0
hrwa/nccloud/src/client/yyconfig/modules/hrwa/pubinfo/config/authorize/60131099_authorize.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<authorizes>
+    <authorize>
+        <appcode>60131099</appcode>
+        <actions>
+            <action>hrwa.wadataexplain.WadataexplainQuery</action>
+            <action>hrwa.wadataexplain.WadataexplainSave</action>
+            <action>hrwa.wadataexplain.WadataexplainQueryPageGridByPks</action>
+            <action>hrwa.wadataexplain.batchCommit</action>
+            <action>hrwa.wadataexplain.batchUnCommit</action>
+            <action>hrwa.wadataexplain.copyLastPeriod</action>
+        </actions>
+    </authorize>
+</authorizes>

+ 633 - 0
hrwa/src/private/nc/impl/wa/paydata/DataCaculateService.java

@@ -0,0 +1,633 @@
+package nc.impl.wa.paydata;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import nccloud.commons.lang.StringUtils;
+
+import nc.bs.dao.DAOException;
+import nc.bs.logging.Logger;
+import nc.hr.utils.ResHelper;
+import nc.itf.hr.wa.IHRWADataResCode;
+import nc.itf.hr.wa.WaPowerSqlHelper;
+import nc.jdbc.framework.SQLParameter;
+import nc.jdbc.framework.processor.MapProcessor;
+import nc.vo.dataitem.pub.DataVOUtils;
+import nc.vo.hi.pub.HICommonValue;
+import nc.vo.hr.caculate.CaculateTypeVO;
+import nc.vo.hr.pub.FormatVO;
+import nc.vo.jcom.lang.StringUtil;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.lang.UFBoolean;
+import nc.vo.pub.lang.UFDouble;
+import nc.vo.wa.classitem.WaClassItemVO;
+import nc.vo.wa.func.FuncParse;
+import nc.vo.wa.func.SqlFragment;
+import nc.vo.wa.func.WherePartUtil;
+import nc.vo.wa.item.FromEnumVO;
+import nc.vo.wa.paydata.DataSVO;
+import nc.vo.wa.pub.WaLoginContext;
+
+/**
+ *
+ *
+ * @author: zhangg
+ * @date: 2009-11-23 上午11:18:25
+ * @since: eHR V6.0
+ * @走查人:
+ * @走查日期:
+ * @修改人:
+ * @修改日期:
+ */
+public class DataCaculateService extends AbstractCaculateService {
+
+	private Set<String> pk_wa_itemSet = null;// 需要特殊值的项目
+	private TaxBindService taxBindService = null;
+
+
+
+	/**
+	 * @author zhangg on 2010-6-10
+	 * @return the taxBindService
+	 */
+	private TaxBindService getTaxBindService() {
+		if (taxBindService == null) {
+			taxBindService = new TaxBindService();
+		}
+		return taxBindService;
+	}
+
+	/**
+	 * @author zhangg on 2010-5-21
+	 * @return the pk_wa_itemSet
+	 * @throws DAOException
+	 */
+	private Set<String> setPk_wa_itemSet() throws DAOException {
+		pk_wa_itemSet = new HashSet<String>();
+		StringBuffer sqlBuffer = new StringBuffer();
+		sqlBuffer.append("select distinct pk_wa_classitem from wa_datas ");
+		sqlBuffer.append(" where wa_datas.pk_wa_data in  ");
+		sqlBuffer.append("     (select wa_cacu_data.pk_wa_data "); // 2
+		sqlBuffer.append("        from wa_cacu_data ");
+		sqlBuffer.append("       where wa_cacu_data.pk_wa_class = '" + getLoginContext().getWaLoginVO().getPk_wa_class() + "' )");
+
+		DataSVO[] dataSVOs = executeQueryVOs(sqlBuffer.toString(), DataSVO.class);
+		if (dataSVOs != null) {
+			for (DataSVO dataSVO : dataSVOs) {
+				pk_wa_itemSet.add(dataSVO.getPk_wa_classitem());
+			}
+		}
+
+		return pk_wa_itemSet;
+	}
+
+	/**
+	 *
+	 * @author zhangg on 2009-9-27
+	 * @param selectWhere
+	 *            影响到的pk_wa_data范围
+	 * @throws DAOException
+	 */
+	public DataCaculateService(WaLoginContext loginContext, CaculateTypeVO caculateTypeVO, String selectWhere) throws BusinessException {
+		super(loginContext);
+
+		// 设置计算范围
+		setWaDataCacuRange4Class(caculateTypeVO, selectWhere);
+		// 得到需要获得调整值的项目set
+		setPk_wa_itemSet();
+
+	}
+
+
+	@Override
+	public void doCaculate() throws BusinessException {
+
+		WaClassItemVO[] classItemVOs = getClassItemVOs();
+		doCaculate(classItemVOs);
+
+		//算个人所得税
+		//个税改革后,不在薪资计算的时候进行算税
+//		doPsnTax();
+
+
+		//更改状态
+		updateSates();
+
+		//计算完毕,如果不是调试状态,清空中间表数据
+		clearMidData();
+	}
+
+	public void clearMidData() throws BusinessException {
+		//薪资计算完毕。如果不是调试状态,则删除wa_cacu_data 中所有数据
+
+		StringBuffer deleteWa_cacu_data = new StringBuffer();
+		deleteWa_cacu_data.append("delete from wa_cacu_data  ");
+		deleteWa_cacu_data.append(" where pk_wa_class = '" + getLoginContext().getWaLoginVO().getPk_wa_class() + "' ");
+		executeSQLs(deleteWa_cacu_data);
+
+	}
+
+
+	public void doPsnTax() throws BusinessException {
+		new PsntaxService().doPsnTax(getLoginContext());
+	}
+
+	/**
+	 * 主要为合并计税提出的方法
+	 *
+	 * @author zhangg on 2010-6-11
+	 * @param classItemVOs
+	 * @throws BusinessException
+	 */
+	public void doCaculate(WaClassItemVO[] classItemVOs) throws BusinessException {
+
+		if (classItemVOs == null) {
+			return;
+		}
+		// 清零
+		updateItem2Zero(classItemVOs);
+
+		// 检查并计算是否有合并计税
+		getTaxBindService().doCaculateTaxBind(getLoginContext(),getCacuRangeWhere());
+
+		//将薪资发放表中的 已扣税	已扣税基数	补发扣税	补发金额  同步到中间表,方便税率计算。
+		updateTaxAndRedata(getLoginContext());
+
+
+		for (WaClassItemVO waClassItemVO : classItemVOs) {
+
+			doCaculateSingle(waClassItemVO);
+
+			// 特殊人员数据调整
+			updateSepecalItem(waClassItemVO);
+
+			
+			// 对于代缴税特殊处理f2扣款合计
+			updateF2(waClassItemVO);
+			
+			//add by longht 20210603 重新计算,取薪资发放说明数据进行更新 
+			recalSingle(waClassItemVO);
+
+		}
+
+	}
+
+	
+	/**
+	 * @author longht
+	 * 20210603
+	 * 重新计算,取薪资发放说明数据进行更新 
+	 * @param waClassItemVO
+	 * @throws BusinessException
+	 */
+	private void recalSingle(WaClassItemVO waClassItemVO) throws BusinessException {
+		// TODO Auto-generated method stub
+		String itemkey = waClassItemVO.getItemkey();
+		String pk_wa_classitem = waClassItemVO.getPk_wa_classitem();
+		String pk_wa_class = waClassItemVO.getPk_wa_class();
+		String cyear = waClassItemVO.getCyear();
+		String cperiod = waClassItemVO.getCperiod();
+		
+		//检查是否需要更新
+		String checksql = 
+				"select count(1) exsistrow from wa_data_explain wde  where   wde.iscommit = 'Y'\n" +
+						" and wde.pk_wa_classitem ='"+pk_wa_classitem+"'\n" + 
+						" and wde.pk_wa_class='"+pk_wa_class+"'\n" + 
+						" and wde.def1 ='"+cyear+cperiod+"'\n" + 
+						" and nvl(wde.dr,0)=0\n" + 
+						" and wde.pk_psndoc in (SELECT pk_psndoc FROM wa_data where nvl(dr,0)=0 and pk_wa_class ='"+pk_wa_class+"'\n" + 
+						" and cyearperiod = '"+cyear+cperiod+"' )";
+		HashMap existsrow  = (HashMap) getBaseDao().executeQuery(checksql.toString(),  new MapProcessor());
+		if(null!=existsrow) {
+			int existrow =Integer.parseInt(existsrow.get("exsistrow").toString()) ;
+			if(existrow<=0)
+				return;
+				
+		}else {
+			return;
+		}
+					
+		String upsql =
+				"update wa_data wd set "+itemkey+" =\n" +
+						"( select wde.money from wa_data_explain wde\n" + 
+						"  where wde.pk_psndoc = wd.pk_psndoc\n" + 
+						"  and wde.iscommit = 'Y'\n" + 
+						"  and wde.pk_wa_classitem ='"+pk_wa_classitem+"'\n" + 
+						"  and wde.pk_wa_class ='"+pk_wa_class+"'\n" + 
+						"  and wde.def1 ='"+cyear+cperiod+"'\n" + 
+						"  and nvl(wde.dr,0)=0\n" + 
+						"  ) where wd.pk_wa_class ='"+pk_wa_class+"'\n" + 
+						"  and wd.cyearperiod = '"+cyear+cperiod+"'" +
+                        " and pk_psndoc in (select pk_psndoc from wa_data_explain wde  where   wde.iscommit = 'Y'\n" +
+						" and wde.pk_wa_classitem ='"+pk_wa_classitem+"'\n" + 
+						" and wde.pk_wa_class='"+pk_wa_class+"'\n" + 
+						" and wde.def1 ='"+cyear+cperiod+"'\n" + 
+						" and nvl(wde.dr,0)=0\n" + 
+						" and wde.pk_psndoc in (SELECT pk_psndoc FROM wa_data where nvl(dr,0)=0 and pk_wa_class ='"+pk_wa_class+"'\n" + 
+						" and cyearperiod = '"+cyear+cperiod+"' ))";
+
+		   executeSQLs(upsql);
+		   
+		//更新数据为引用状态
+		String yysql = 
+			"update wa_data_explain wde set wde.isquote = 'Y' where   wde.iscommit = 'Y'\n" +
+			" and wde.pk_wa_classitem ='"+pk_wa_classitem+"'\n" + 
+			" and wde.pk_wa_class='"+pk_wa_class+"'\n" + 
+			" and wde.def1 ='"+cyear+cperiod+"'\n" + 
+			" and nvl(wde.dr,0)=0\n" + 
+			" and wde.pk_psndoc in (SELECT pk_psndoc FROM wa_data where nvl(dr,0)=0 and pk_wa_class ='"+pk_wa_class+"'\n" + 
+			" and cyearperiod = '"+cyear+cperiod+"' )";
+		
+		executeSQLs(yysql);	 
+		
+	}
+
+	/**
+	 * 对于代缴税,系统默认公式中, 本次扣税与本次补发扣税是不应该计入扣款合计的
+	 * @param itemVO
+	 * @throws BusinessException
+	 */
+	private void updateF2(WaClassItemVO itemVO) throws BusinessException {
+		if (itemVO.getItemkey().equalsIgnoreCase("f_2") && itemVO.getIssysformula().booleanValue()) {// 系统定义项目,客户没有变化.
+			String sql = "update wa_data set f_2 = (f_2 - f_5 - f_9) " + getCacuRangeWhere() + " and wa_data.taxtype = 1";
+			executeSQLs(sql);
+		}
+	}
+
+	/**
+	 * 这几个项目没有提供公式 f_6 已扣税基数 f_7 已扣税 f_8 补发金额 f_9 补发扣税
+	 *
+	 * @author zhangg on 2010-6-4
+	 * @param itemVO
+	 * @return
+	 */
+	private boolean isF6TOF9(WaClassItemVO itemVO) {
+		return (itemVO.getItemkey().equalsIgnoreCase("f_6") || itemVO.getItemkey().equalsIgnoreCase("f_7") || itemVO.getItemkey().equalsIgnoreCase("f_8") || itemVO.getItemkey()
+				.equalsIgnoreCase("f_9"));
+	}
+
+	/**
+	 * 计算薪资项目
+	 *
+	 * @author zhangg on 2009-9-28
+	 * @throws DAOException
+	 * @throws BusinessException
+	 */
+	private void doCaculateSingle(WaClassItemVO itemVO) throws BusinessException {
+		try {
+			getLoginContext().setInitData(itemVO);
+			getLoginContext().getWaLoginVO().setClassItemVOs(this.classItemVOs);
+
+			if (itemVO == null) {
+				return;
+			}
+			if (isF6TOF9(itemVO)) {
+				return;
+			}
+			// 如果是手工输入, 返回
+			if (itemVO.getIfromflag().equals(FromEnumVO.USER_INPUT.value())) {
+				return;
+			}
+			// 如果是固定值
+			if (itemVO.getIfromflag().equals(FromEnumVO.FIX_VALUE.value())) {
+				updateConstantItem(itemVO);
+				return;
+			}
+
+			if (itemVO.getVformula() == null) {
+				return;
+			}
+			// 公式和其他数据源
+			if (!itemVO.getIfromflag().equals(FromEnumVO.FORMULA.value())) {
+				execute(itemVO);
+				//对于薪资取社保项目,如果是数值型而且选了取值条件则要判断是否进行清零处理
+				if(itemVO.getIfromflag().equals(FromEnumVO.BM.value()) && itemVO.getIitemtype()==0){
+					String param = itemVO.getVformula().substring(itemVO.getVformula().indexOf("(" )+1, itemVO.getVformula().indexOf(")" ));
+			        String[] params = param.split( ",");
+			        if(params.length==4){
+					       //取值条件没有选择的时候不清零(即为f_f)
+						if(params[3]!=null&&!params[3].equals("f_f")){
+							updateBmItem(itemVO);
+						}
+			        }
+				}
+			} else if (itemVO.getVformula() != null) {
+				IPreTranslate waPreTranslate =new WaPreTranslate();
+				String formua= waPreTranslate.parse(itemVO.getPk_org(), itemVO.getVformula());
+				itemVO.setVformula(formua);
+				List<SqlFragment> fragmentList = FuncParse.parse(formua);
+				if (fragmentList != null && fragmentList.size() > 0) {
+					for (SqlFragment sqlFragment : fragmentList) {
+						execute(itemVO, sqlFragment);
+					}
+				}
+			}
+		} catch (Exception e) {
+			if (e instanceof DAOException) {
+				throw new BusinessException(ResHelper.getString("60130paydata","060130paydata0444")/*@res "薪资项目:"*/ + itemVO.getMultilangName() + ResHelper.getString("60130paydata","060130paydata0445")/*@res "公式设置错误。 请检查。"*/);
+
+			} else if (e instanceof BusinessException) {
+				throw (BusinessException) e;
+			} else {
+				throw new BusinessException(e);
+			}
+		}
+	}
+	/**
+	 * 更新社保项目(根据取值条件按人进行清零,只有为N时才设为0)
+	 *
+	 * @author guoqt on 2014-5-30
+	 * @throws DAOException
+	 */
+	private void updateBmItem(WaClassItemVO itemVO) throws DAOException {
+		String where = getCacuRangeWhere();
+		String sql = "update wa_data set wa_data." + itemVO.getItemkey() + " = 0 " + where;
+        String param = itemVO.getVformula().substring(itemVO.getVformula().indexOf("(" )+1, itemVO.getVformula().indexOf(")" ));
+        String[] params = param.split( ",");
+        StringBuilder sbd = new StringBuilder();
+		sbd.append("  and wa_data.pk_wa_data in ( select pk_wa_data from wa_data where pk_wa_class = ? and cyear= ? and cperiod= ?  ");
+		sbd.append("  and wa_data." + params[3] + " in ('N','n') ) ");
+		sql= sql+sbd.toString();
+		SQLParameter parameter = new SQLParameter();
+		parameter.addParam(itemVO.getPk_wa_class());
+		parameter.addParam(itemVO.getCyear());
+		parameter.addParam(itemVO.getCperiod());
+		getBaseDao().executeUpdate(sql, parameter);
+	}
+	private void execute(WaClassItemVO itemVO) throws BusinessException {
+		String formula = itemVO.getVformula();
+		formula = parse(formula);
+		SqlFragment sqlFragment = new SqlFragment();
+		sqlFragment.setValue(formula);
+		execute(itemVO, sqlFragment);
+	}
+
+	private void execute(WaClassItemVO itemVO, SqlFragment sqlFragment) throws BusinessException {
+
+		try {
+			if(!StringUtils.isBlank(sqlFragment.getValue())){
+				getBaseDao().executeUpdate(translate2ExecutableSql(itemVO, sqlFragment));
+			}
+			updateDigits(itemVO);
+		} catch (Exception e) {
+			Logger.error(e.getMessage(),e);
+			throw new BusinessException(ResHelper.getString("60130paydata","060130paydata0444")/*@res "薪资项目:"*/ + itemVO.getMultilangName() + ResHelper.getString("60130paydata","060130paydata0445")/*@res "公式设置错误。 请检查。"*/);
+		}
+	}
+
+	/**
+	 * 更新固定项目(常数项目)
+	 *
+	 * @author zhangg on 2009-9-27
+	 * @throws DAOException
+	 */
+	private void updateItem2Zero(WaClassItemVO... itemVOs) throws DAOException {
+		String where = getCacuRangeWhere();
+		List<String> items = new LinkedList<String>();
+		for (WaClassItemVO itemVO : itemVOs) {
+			// 如果是手工输入, 返回
+			if (needUpdate2Zero(itemVO)) {
+				if (DataVOUtils.isDigitsAttribute(itemVO.getItemkey())) {
+					items.add("wa_data." + itemVO.getItemkey() + " = 0 ");
+				} else {
+					items.add("wa_data." + itemVO.getItemkey() + " = null ");
+				}
+			}
+		}
+		String sql = "update wa_data set " + FormatVO.formatListToString(items, "") + where;
+		getBaseDao().executeUpdate(sql);
+	}
+
+	/**
+	 *
+	 * @param itemVO
+	 * @return
+	 */
+	private boolean needUpdate2Zero(WaClassItemVO itemVO){
+		//判断一个项目在发放计算前是否需要清空,f_6\f_7\f_8\f_9 不需要清空
+		//手工输入的项目不需要清空
+
+		if(itemVO.getItemkey().equals("f_6") ||
+				itemVO.getItemkey().equals("f_7")||
+				itemVO.getItemkey().equals("f_8")||
+				itemVO.getItemkey().equals("f_9")
+				){
+			return false;
+		}
+		//手工输入,不需要清空
+		if(itemVO.getIfromflag().equals(FromEnumVO.USER_INPUT.value())){
+			return false;
+		}
+
+		//剩余的项目需要去清空
+		return true;
+	}
+
+	/**
+	 *
+	 * @param itemVOs
+	 * @throws DAOException
+	 */
+	private void updateTaxAndRedata(WaLoginContext context) throws DAOException {
+
+		StringBuilder sbd = new StringBuilder();
+		sbd.append(" update wa_cacu_data   set taxed=  (select f_7  from wa_data where wa_data.pk_wa_data = wa_cacu_data.pk_wa_data), ");
+		sbd.append(" taxedBase=  (select f_6  from wa_data where wa_data.pk_wa_data = wa_cacu_data.pk_wa_data), ");
+		sbd.append(" retaxed= ( select f_9  from wa_data where wa_data.pk_wa_data = wa_cacu_data.pk_wa_data), ");
+		sbd.append(" redata =  (select f_8  from wa_data where wa_data.pk_wa_data = wa_cacu_data.pk_wa_data) ");
+
+
+
+		sbd.append( " where wa_cacu_data.pk_wa_class = '"+ context.getPk_wa_class()+"' " );
+		getBaseDao().executeUpdate(sbd.toString());
+	}
+
+
+
+
+	/**
+	 * 更新固定项目(常数项目)
+	 *
+	 * @author zhangg on 2009-9-27
+	 * @throws BusinessException
+	 */
+	private void updateSepecalItem(WaClassItemVO itemVO) throws BusinessException {
+		if (!pk_wa_itemSet.contains(itemVO.getPk_wa_classitem())) {
+			return;
+		}
+
+		// 更新wa_datas中的计算值
+		StringBuffer sqlBuffer = new StringBuffer();
+		sqlBuffer.append("update wa_datas "); // 1
+		sqlBuffer.append("   set wa_datas.caculatevalue = (select " + itemVO.getItemkey() + " "); // 2
+		sqlBuffer.append("                                   from wa_data ");
+		sqlBuffer.append("                                  where wa_data.pk_wa_data = ");
+		sqlBuffer.append("                                        wa_datas.pk_wa_data) ");
+		sqlBuffer.append(" where wa_datas.pk_wa_data in  ");
+		sqlBuffer.append("     (select wa_cacu_data.pk_wa_data "); // 2
+		sqlBuffer.append("        from wa_cacu_data ");
+		sqlBuffer.append("       where wa_cacu_data.pk_wa_class = '" + getLoginContext().getWaLoginVO().getPk_wa_class() + "' )");
+		sqlBuffer.append("       and wa_datas.pk_wa_classitem = '" + itemVO.getPk_wa_classitem() + "'");
+		String updateWa_datasSql = sqlBuffer.toString();
+
+		// 更新wa_data中的特殊值
+		String where = getCacuRangeWhere() + " and wa_data.pk_wa_data in (select pk_wa_data from wa_datas where pk_wa_classitem = '" + itemVO.getPk_wa_classitem() + "') ";
+
+		sqlBuffer = new StringBuffer();
+		sqlBuffer.append("update wa_data "); // 1
+		sqlBuffer.append("   set " + itemVO.getItemkey() + " = (select value "); // 2
+		sqlBuffer.append("                from wa_datas ");
+		sqlBuffer.append("               where wa_datas.pk_wa_data = wa_data.pk_wa_data and wa_datas.pk_wa_classitem = '" + itemVO.getPk_wa_classitem() + "') ");
+		sqlBuffer.append(where);
+
+		String updateWa_dataSql = sqlBuffer.toString();
+		executeSQLs(updateWa_datasSql, updateWa_dataSql);
+	}
+
+	@Override
+	public String getCacuRangeWhere() {
+		return WherePartUtil.addWhereKeyWord2Condition(WherePartUtil.getCacuRange(getLoginContext().getWaLoginVO()));
+	}
+
+	/**
+	 * 更新固定项目(常数项目)
+	 *
+	 * @author zhangg on 2009-9-27
+	 * @throws DAOException
+	 */
+	private void updateConstantItem(WaClassItemVO itemVO) throws DAOException {
+		String where = getCacuRangeWhere();
+		String sql = "update wa_data set wa_data." + itemVO.getItemkey() + " = ? " + where;
+		SQLParameter parameter = new SQLParameter();
+		parameter.addParam(itemVO.getVformula());
+		getBaseDao().executeUpdate(sql, parameter);
+	}
+
+	/**
+	 * 同setWaDataCacuRange4Psn采用不同的策略
+	 *
+	 * @author zhangg on 2010-5-18
+	 * @param where
+	 * @throws BusinessException
+	 */
+
+	private void setWaDataCacuRange4Class(CaculateTypeVO caculateTypeVO, String where) throws BusinessException {
+		if(caculateTypeVO != null){
+			// 计算范围
+			boolean all = caculateTypeVO.getRange().booleanValue();
+			if (StringUtils.isEmpty(where)|| all) {
+				where = null;
+			}
+
+			// 计算方式
+			boolean type = caculateTypeVO.getType().booleanValue();
+			if (type) {
+				String addWhere = "  wa_data.checkflag = 'N'  ";
+				where = where == null ? addWhere : (where + " and   " + addWhere);
+			} else {
+				String addWhere = "  wa_data.checkflag = 'N' and wa_data.caculateflag = 'N'   ";
+				where = where == null ? addWhere : (where + " and   " + addWhere);
+			}
+		}
+		//添加业务权限限制
+		//		String poweConditon = DataPermissionUtils.getDataPermissionSQLWherePart(IHRWADataResCode.WADATA, IHRWAActionCode.CALCULATE);
+
+		//		String poweConditon = WaPowerSqlHelper.getWaPowerSql("",IHRWADataResCode.WADATA, IHRWAActionCode.CALCULATE,"");
+		//        // 添加 add
+		//		if (where == null) {
+		//			where = poweConditon;
+		//		} else {
+		//			where = where + WherePartUtil.formatAddtionalWhere(poweConditon);
+		//		}
+		//数据权限guoqt数据使用权
+		StringBuffer wherepart = new StringBuffer();
+		wherepart.append(where);
+		String powerSql = WaPowerSqlHelper.getWaPowerSql(getLoginContext().getWaLoginVO().getPk_group(),
+                HICommonValue. RESOUCECODE_6007PSNJOB,IHRWADataResCode.WADEFAULT,"wa_data");
+        if (!StringUtil.isEmptyWithTrim(powerSql) && where!=null) {
+        	wherepart.append( " and " + powerSql);
+        	where=wherepart.toString();
+        }
+        
+		setWaDataCacuRange4Class(where);
+
+	}
+
+
+
+	/**
+	 * 更新标志状态
+	 *
+	 * @author zhangg on 2009-9-27
+	 * @throws DAOException
+	 */
+	private void updateSates() throws BusinessException {
+		String where = getCacuRangeWhere();
+		String sql = "update wa_data set  wa_data.caculateflag = 'Y' " + where;
+
+		getBaseDao().executeUpdate(sql);
+
+		// liangxr判断是否已经全部计算,如果全部计算修改期间状态
+		where = WherePartUtil.getCommonWhereCondtion4Data(getLoginContext().getWaLoginVO());
+		sql = "select 1 from wa_data where caculateflag = 'N' and stopflag = 'N' and " + where;
+		if (!isValueExist(sql)) {
+			where = WherePartUtil.getCommonWhereCondtion4PeriodState(getLoginContext().getWaLoginVO());
+			updateTableByColKey("wa_periodstate", "caculateflag", UFBoolean.TRUE, where);
+		}
+	}
+	/**
+	 *
+	 * @author zhangg on 2010-7-27
+	 * @param itemVO
+	 * @throws BusinessException
+	 */
+	private void updateDigits(WaClassItemVO itemVO) throws BusinessException {
+		if (DataVOUtils.isDigitsAttribute(itemVO.getItemkey())) {
+
+			int digits = itemVO.getIflddecimal();
+			/**
+			 * 四舍五入, 进位, 舍位 薪资提供的进行方式同普通意义上的进位不同, 需求如下:
+			 *
+			 * 在小数位数后增加进位方式属性,下拉选择,系统提供进位 舍位和四舍五入三种舍位方式
+			 * 进位,根据用户设定的小数位数,当计算结果中小数位数的的后一位不等于0时小数位数的最后一位加1
+			 * 舍位,根据用户设定的小数位数,不论计算结果中小数位数的后一位是否等于0,均直接舍弃
+			 * 四舍五入,根据用户设定的小数位数,计算结果中小数位数的后一位按照四舍五入的规则进行进位或舍位计算
+			 */
+
+			if (itemVO.getRound_type() == null || itemVO.getRound_type().intValue() == 0) {// 四舍五入
+
+				// String where = getCacuRangeWhere();
+				// String sql = "update wa_data set wa_data." +
+				// itemVO.getItemkey() + " = round((wa_data." +
+				// itemVO.getItemkey() + "), " + digits + " )" + where;
+				// executeSQLs(sql);
+			} else {
+				UFDouble f = UFDouble.ZERO_DBL;
+				if (itemVO.getRound_type().intValue() == 1) {// 进位
+					f = new UFDouble(0.4f);
+				} else if (itemVO.getRound_type().intValue() == 2) {// 舍位操作
+					f = new UFDouble(-0.5f);
+				} else {// 默认四舍五入
+					f = UFDouble.ZERO_DBL;
+				}
+
+				f = f.multiply(Math.pow(0.1, digits));
+				String where = getCacuRangeWhere() + " and wa_data." + itemVO.getItemkey() + " > 0";
+				String sql = "update wa_data set wa_data." + itemVO.getItemkey() + " = round(((wa_data." + itemVO.getItemkey() + ") + " + f + "), " + digits + " )" + where;
+
+				String where1 = getCacuRangeWhere() + " and wa_data." + itemVO.getItemkey() + " < 0";
+				f = f.multiply(-1);
+				String sql1 = "update wa_data set wa_data." + itemVO.getItemkey() + " = round(((wa_data." + itemVO.getItemkey() + ") + " + f + "), " + digits + " )" + where1;
+
+				executeSQLs(sql, sql1);
+			}
+
+		}
+
+	}
+
+
+}

+ 179 - 0
hrwa/src/private/nccloud/impl/bd/wadataexplain/WadataexplainServiceImpl.java

@@ -0,0 +1,179 @@
+package nccloud.impl.bd.wadataexplain;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import nc.bs.bd.baseservice.md.BatchBaseService;
+import nc.bs.dao.BaseDAO;
+import nc.bs.framework.common.NCLocator;
+import nc.bs.logging.Logger;
+import nc.jdbc.framework.processor.BeanListProcessor;
+import nc.jdbc.framework.processor.ColumnListProcessor;
+import nc.jdbc.framework.processor.MapListProcessor;
+import nc.md.persist.framework.IMDPersistenceQueryService;
+import nc.vo.bd.meta.BatchOperateVO;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.pub.BusinessException;
+import nc.vo.pubapp.pattern.exception.ExceptionUtils;
+import nccloud.itf.bd.wadataexplain.IWadataexplainQryService;
+import nccloud.itf.bd.wadataexplain.IWadataexplainService;
+
+
+public class WadataexplainServiceImpl extends BatchBaseService<Wadataexplain>
+		implements IWadataexplainService, IWadataexplainQryService {
+
+	private IMDPersistenceQueryService queryService = null;
+
+	public WadataexplainServiceImpl() {
+		super("cfcfc751-a268-4c9e-b7a0-f38533e78990");
+	}
+
+	@Override
+	public BatchOperateVO batchSaveCurrtype(BatchOperateVO vo) throws BusinessException {
+		return batchSave(vo);
+	}
+
+	@Override
+	public Wadataexplain findByPK(String key) throws BusinessException {
+		Wadataexplain wadataexplain = null;
+		try {
+			Object vo = new BaseDAO().retrieveByPK(Wadataexplain.class, key);
+			wadataexplain = (vo == null ? null : (Wadataexplain) vo);
+		} catch (Exception e) {
+			Logger.error(e.getMessage(), e);
+			throw new BusinessException(e);
+		}
+
+		return wadataexplain;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Wadataexplain[] queryAll() throws BusinessException {
+		Collection<Wadataexplain> col = getQueryService().queryBillOfVOByCondWithOrder(Wadataexplain.class, "1=1", true,
+				false, new String[] {});
+		return col.toArray(new Wadataexplain[0]);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Wadataexplain[] query(String where) throws BusinessException {
+		Collection<Wadataexplain> col = getQueryService().queryBillOfVOByCondWithOrder(Wadataexplain.class, where, true,
+				false, new String[] {});
+
+		return col.toArray(new Wadataexplain[0]);
+	}
+
+	private IMDPersistenceQueryService getQueryService() {
+		if (queryService == null)
+			queryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class);
+		return queryService;
+
+	}
+
+	@Override
+	public String[] queryPKs(String where) throws BusinessException {
+		String[] pks = null;
+		StringBuilder querySQL = new StringBuilder("select ");
+		querySQL.append(" pk_wa_data_explain ");
+		querySQL.append(" from ");
+		querySQL.append(" wa_data_explain ");
+		querySQL.append(" where ");
+		querySQL.append(where);
+		querySQL.append(" order by ");
+		querySQL.append(" ts ");
+
+		List<String> pkList = (ArrayList<String>) new BaseDAO().executeQuery(querySQL.toString(),
+				new ColumnListProcessor());
+		if (pkList != null && pkList.size() > 0) {
+			pks = pkList.toArray(new String[pkList.size()]);
+		}
+
+		return pks;
+	}
+
+	@Override
+	public List<Wadataexplain> batchCommit(StringBuffer pk_psndoc_buf, StringBuffer pk_buf, HashMap<String, String> psndocMap)
+			throws BusinessException {
+		// TODO Auto-generated method stub
+		StringBuffer dataBuf = new StringBuffer();
+		dataBuf.append(" select pk_wa_data from wa_data");
+		dataBuf.append(" where checkflag = 'Y'");
+		dataBuf.append(" and pk_wa_data in ( ");
+		dataBuf.append(pk_psndoc_buf.substring(0, pk_psndoc_buf.length()-1));
+		dataBuf.append(" ) and nvl(dr,0)=0");
+		
+		List<Map<String, Object>> dataList = (List<Map<String, Object>>)getNcDAO().executeQuery(dataBuf.toString(), new MapListProcessor());
+		if(dataList!=null && dataList.size()>0){
+			StringBuffer retbuf = new StringBuffer();
+			retbuf.append("薪资发放节点数据已审核,不允许提交: ");
+			for(int i=0;i<dataList.size();i++){
+				retbuf.append(psndocMap.get(dataList.get(i).get("pk_wa_data")));
+				retbuf.append(" ");
+			}
+			ExceptionUtils.wrappBusinessException( retbuf.toString());
+		}
+		
+		StringBuffer updatesql = new StringBuffer();
+		updatesql.append(" update wa_data_explain");
+		updatesql.append(" set iscommit = 'Y'");
+		updatesql.append(" where pk_wa_data_explain in ( ");
+		updatesql.append(pk_buf.substring(0, pk_buf.length()-1));
+		updatesql.append(" )");
+		
+		int updateret = getNcDAO().executeUpdate(updatesql.toString());
+		String sql = "select * from wa_data_explain where pk_wa_data_explain in (" +pk_buf.substring(0, pk_buf.length()-1)+")";
+		 List<Wadataexplain> result = (List<Wadataexplain>)getNcDAO().executeQuery(sql,  new BeanListProcessor(Wadataexplain.class));
+		
+		return result;
+	}
+
+	@Override
+	public List<Wadataexplain> batchUncommit(StringBuffer pk_psndoc_buf, StringBuffer pk_buf, HashMap<String, String> psndocMap)
+			throws BusinessException {
+		// TODO Auto-generated method stub
+		StringBuffer dataBuf = new StringBuffer();
+		dataBuf.append(" select pk_wa_data from wa_data");
+		dataBuf.append(" where checkflag = 'Y'");
+		dataBuf.append(" and pk_wa_data in ( ");
+		dataBuf.append(pk_psndoc_buf.substring(0, pk_psndoc_buf.length()-1));
+		dataBuf.append(" ) and nvl(dr,0)=0");
+		
+		List<Map<String, Object>> dataList = (List<Map<String, Object>>)getNcDAO().executeQuery(dataBuf.toString(), new MapListProcessor());
+		if(dataList!=null && dataList.size()>0){
+			StringBuffer retbuf = new StringBuffer();
+			retbuf.append("薪资发放节点数据已审核,不允许收回: ");
+			for(int i=0;i<dataList.size();i++){
+				retbuf.append(psndocMap.get(dataList.get(i).get("pk_wa_data")));
+				retbuf.append(" ");
+			}
+			ExceptionUtils.wrappBusinessException( retbuf.toString());
+		}
+		
+		StringBuffer updatesql = new StringBuffer();
+		updatesql.append(" update wa_data_explain");
+		updatesql.append(" set iscommit = 'N'");
+		updatesql.append(" where pk_wa_data_explain in ( ");
+		updatesql.append(pk_buf.substring(0, pk_buf.length()-1));
+		updatesql.append(" )");
+		
+		int updateret = getNcDAO().executeUpdate(updatesql.toString());
+		String sql = "select * from wa_data_explain where pk_wa_data_explain in (" +pk_buf.substring(0, pk_buf.length()-1)+")";
+		 List<Wadataexplain> result = (List<Wadataexplain>)getNcDAO().executeQuery(sql,  new BeanListProcessor(Wadataexplain.class));
+		
+		return result;
+	}
+	
+	
+	
+	private BaseDAO baseDAO;//NC系统数据源
+	private BaseDAO getNcDAO() {
+		if(this.baseDAO==null){
+			this.baseDAO = new BaseDAO();
+		}
+		return this.baseDAO;
+	}
+}

+ 818 - 0
hrwa/src/public/nc/vo/hrwa/wadataexplain/Wadataexplain.java

@@ -0,0 +1,818 @@
+package nc.vo.hrwa.wadataexplain;
+
+import nc.vo.pub.*;
+import nc.vo.pubapp.pattern.model.meta.entity.vo.VOMetaFactory;
+
+/**
+ * <b> 此处简要描述此类功能 </b>
+ * <p>
+ *   此处添加类的描述信息
+ * </p>
+ *  创建日期:2021-5-18
+ * @author yonyouBQ
+ * @version NCPrj ??
+ */
+public class Wadataexplain extends nc.vo.pub.SuperVO{
+	
+    private java.lang.String pk_wa_data_explain;
+    private java.lang.String pk_wa_class;
+    private java.lang.String pk_psndoc;
+    private java.lang.String pk_wa_classitem;
+    private nc.vo.pub.lang.UFDouble money;
+    private java.lang.String explain;
+    private java.lang.String calculationset;
+    private nc.vo.pub.lang.UFBoolean iscommit;
+    private nc.vo.pub.lang.UFBoolean isquote;
+    private java.lang.String creator;
+    private nc.vo.pub.lang.UFDateTime creationtime;
+    private java.lang.String modifier;
+    private nc.vo.pub.lang.UFDateTime modifiedtime;
+    private java.lang.String pk_group;
+    private java.lang.String pk_org;
+    private java.lang.String pk_org_v;
+    private java.lang.String def1;
+    private java.lang.String def2;
+    private java.lang.String def3;
+    private java.lang.String def4;
+    private java.lang.String def5;
+    private java.lang.String def6;
+    private java.lang.String def7;
+    private java.lang.String def8;
+    private java.lang.String def9;
+    private java.lang.String def10;
+    private java.lang.String def11;
+    private java.lang.String def12;
+    private java.lang.String def13;
+    private java.lang.String def14;
+    private java.lang.String def15;
+    private java.lang.String def16;
+    private java.lang.String def17;
+    private java.lang.String def18;
+    private java.lang.String def19;
+    private java.lang.String def20;
+    private java.lang.Integer dr = 0;
+    private nc.vo.pub.lang.UFDateTime ts;    
+    
+    private java.lang.String cyear;
+    private java.lang.String cperiod;
+
+	
+    public static final String PK_WA_DATA_EXPLAIN = "pk_wa_data_explain";
+    public static final String PK_WA_CLASS = "pk_wa_class";
+    public static final String PK_PSNDOC = "pk_psndoc";
+    public static final String PK_WA_CLASSITEM = "pk_wa_classitem";
+    public static final String MONEY = "money";
+    public static final String EXPLAIN = "explain";
+    public static final String CALCULATIONSET = "calculationset";
+    public static final String ISCOMMIT = "iscommit";
+    public static final String ISQUOTE = "isquote";
+    public static final String CREATOR = "creator";
+    public static final String CREATIONTIME = "creationtime";
+    public static final String MODIFIER = "modifier";
+    public static final String MODIFIEDTIME = "modifiedtime";
+    public static final String PK_GROUP = "pk_group";
+    public static final String PK_ORG = "pk_org";
+    public static final String PK_ORG_V = "pk_org_v";
+    public static final String DEF1 = "def1";
+    public static final String DEF2 = "def2";
+    public static final String DEF3 = "def3";
+    public static final String DEF4 = "def4";
+    public static final String DEF5 = "def5";
+    public static final String DEF6 = "def6";
+    public static final String DEF7 = "def7";
+    public static final String DEF8 = "def8";
+    public static final String DEF9 = "def9";
+    public static final String DEF10 = "def10";
+    public static final String DEF11 = "def11";
+    public static final String DEF12 = "def12";
+    public static final String DEF13 = "def13";
+    public static final String DEF14 = "def14";
+    public static final String DEF15 = "def15";
+    public static final String DEF16 = "def16";
+    public static final String DEF17 = "def17";
+    public static final String DEF18 = "def18";
+    public static final String DEF19 = "def19";
+    public static final String DEF20 = "def20";
+    
+    public static final String CYEAR = "cyear";
+    public static final String CPERIOD = "cperiod";
+
+
+	/**
+	 * 属性 pk_wa_data_explain的Getter方法.属性名:主键
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_wa_data_explain () {
+		return pk_wa_data_explain;
+	}   
+	/**
+	 * 属性pk_wa_data_explain的Setter方法.属性名:主键
+	 * 创建日期:2021-5-18
+	 * @param newPk_wa_data_explain java.lang.String
+	 */
+	public void setPk_wa_data_explain (java.lang.String newPk_wa_data_explain ) {
+	 	this.pk_wa_data_explain = newPk_wa_data_explain;
+	} 	 
+	
+	/**
+	 * 属性 pk_wa_class的Getter方法.属性名:薪资方案
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_wa_class () {
+		return pk_wa_class;
+	}   
+	/**
+	 * 属性pk_wa_class的Setter方法.属性名:薪资方案
+	 * 创建日期:2021-5-18
+	 * @param newPk_wa_class java.lang.String
+	 */
+	public void setPk_wa_class (java.lang.String newPk_wa_class ) {
+	 	this.pk_wa_class = newPk_wa_class;
+	} 	 
+	
+	/**
+	 * 属性 pk_psndoc的Getter方法.属性名:人员
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_psndoc () {
+		return pk_psndoc;
+	}   
+	/**
+	 * 属性pk_psndoc的Setter方法.属性名:人员
+	 * 创建日期:2021-5-18
+	 * @param newPk_psndoc java.lang.String
+	 */
+	public void setPk_psndoc (java.lang.String newPk_psndoc ) {
+	 	this.pk_psndoc = newPk_psndoc;
+	} 	 
+	
+	/**
+	 * 属性 pk_wa_classitem的Getter方法.属性名:薪资发放项目
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_wa_classitem () {
+		return pk_wa_classitem;
+	}   
+	/**
+	 * 属性pk_wa_classitem的Setter方法.属性名:薪资发放项目
+	 * 创建日期:2021-5-18
+	 * @param newPk_wa_classitem java.lang.String
+	 */
+	public void setPk_wa_classitem (java.lang.String newPk_wa_classitem ) {
+	 	this.pk_wa_classitem = newPk_wa_classitem;
+	} 	 
+	
+	/**
+	 * 属性 money的Getter方法.属性名:金额
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFDouble
+	 */
+	public nc.vo.pub.lang.UFDouble getMoney () {
+		return money;
+	}   
+	/**
+	 * 属性money的Setter方法.属性名:金额
+	 * 创建日期:2021-5-18
+	 * @param newMoney nc.vo.pub.lang.UFDouble
+	 */
+	public void setMoney (nc.vo.pub.lang.UFDouble newMoney ) {
+	 	this.money = newMoney;
+	} 	 
+	
+	/**
+	 * 属性 explain的Getter方法.属性名:情况说明
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getExplain () {
+		return explain;
+	}   
+	/**
+	 * 属性explain的Setter方法.属性名:情况说明
+	 * 创建日期:2021-5-18
+	 * @param newExplain java.lang.String
+	 */
+	public void setExplain (java.lang.String newExplain ) {
+	 	this.explain = newExplain;
+	} 	 
+	
+	/**
+	 * 属性 calculationset的Getter方法.属性名:计算设置
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getCalculationset () {
+		return calculationset;
+	}   
+	/**
+	 * 属性calculationset的Setter方法.属性名:计算设置
+	 * 创建日期:2021-5-18
+	 * @param newCalculationset java.lang.String
+	 */
+	public void setCalculationset (java.lang.String newCalculationset ) {
+	 	this.calculationset = newCalculationset;
+	} 	 
+	
+	/**
+	 * 属性 iscommit的Getter方法.属性名:是否提交
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFBoolean
+	 */
+	public nc.vo.pub.lang.UFBoolean getIscommit () {
+		return iscommit;
+	}   
+	/**
+	 * 属性iscommit的Setter方法.属性名:是否提交
+	 * 创建日期:2021-5-18
+	 * @param newIscommit nc.vo.pub.lang.UFBoolean
+	 */
+	public void setIscommit (nc.vo.pub.lang.UFBoolean newIscommit ) {
+	 	this.iscommit = newIscommit;
+	} 	 
+	
+	/**
+	 * 属性 isquote的Getter方法.属性名:是否引用
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFBoolean
+	 */
+	public nc.vo.pub.lang.UFBoolean getIsquote () {
+		return isquote;
+	}   
+	/**
+	 * 属性isquote的Setter方法.属性名:是否引用
+	 * 创建日期:2021-5-18
+	 * @param newIsquote nc.vo.pub.lang.UFBoolean
+	 */
+	public void setIsquote (nc.vo.pub.lang.UFBoolean newIsquote ) {
+	 	this.isquote = newIsquote;
+	} 	 
+	
+	/**
+	 * 属性 creator的Getter方法.属性名:创建人
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getCreator () {
+		return creator;
+	}   
+	/**
+	 * 属性creator的Setter方法.属性名:创建人
+	 * 创建日期:2021-5-18
+	 * @param newCreator java.lang.String
+	 */
+	public void setCreator (java.lang.String newCreator ) {
+	 	this.creator = newCreator;
+	} 	 
+	
+	/**
+	 * 属性 creationtime的Getter方法.属性名:创建时间
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFDateTime
+	 */
+	public nc.vo.pub.lang.UFDateTime getCreationtime () {
+		return creationtime;
+	}   
+	/**
+	 * 属性creationtime的Setter方法.属性名:创建时间
+	 * 创建日期:2021-5-18
+	 * @param newCreationtime nc.vo.pub.lang.UFDateTime
+	 */
+	public void setCreationtime (nc.vo.pub.lang.UFDateTime newCreationtime ) {
+	 	this.creationtime = newCreationtime;
+	} 	 
+	
+	/**
+	 * 属性 modifier的Getter方法.属性名:修改人
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getModifier () {
+		return modifier;
+	}   
+	/**
+	 * 属性modifier的Setter方法.属性名:修改人
+	 * 创建日期:2021-5-18
+	 * @param newModifier java.lang.String
+	 */
+	public void setModifier (java.lang.String newModifier ) {
+	 	this.modifier = newModifier;
+	} 	 
+	
+	/**
+	 * 属性 modifiedtime的Getter方法.属性名:修改时间
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFDateTime
+	 */
+	public nc.vo.pub.lang.UFDateTime getModifiedtime () {
+		return modifiedtime;
+	}   
+	/**
+	 * 属性modifiedtime的Setter方法.属性名:修改时间
+	 * 创建日期:2021-5-18
+	 * @param newModifiedtime nc.vo.pub.lang.UFDateTime
+	 */
+	public void setModifiedtime (nc.vo.pub.lang.UFDateTime newModifiedtime ) {
+	 	this.modifiedtime = newModifiedtime;
+	} 	 
+	
+	/**
+	 * 属性 pk_group的Getter方法.属性名:集团
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_group () {
+		return pk_group;
+	}   
+	/**
+	 * 属性pk_group的Setter方法.属性名:集团
+	 * 创建日期:2021-5-18
+	 * @param newPk_group java.lang.String
+	 */
+	public void setPk_group (java.lang.String newPk_group ) {
+	 	this.pk_group = newPk_group;
+	} 	 
+	
+	/**
+	 * 属性 pk_org的Getter方法.属性名:组织
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_org () {
+		return pk_org;
+	}   
+	/**
+	 * 属性pk_org的Setter方法.属性名:组织
+	 * 创建日期:2021-5-18
+	 * @param newPk_org java.lang.String
+	 */
+	public void setPk_org (java.lang.String newPk_org ) {
+	 	this.pk_org = newPk_org;
+	} 	 
+	
+	/**
+	 * 属性 pk_org_v的Getter方法.属性名:组织版本
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getPk_org_v () {
+		return pk_org_v;
+	}   
+	/**
+	 * 属性pk_org_v的Setter方法.属性名:组织版本
+	 * 创建日期:2021-5-18
+	 * @param newPk_org_v java.lang.String
+	 */
+	public void setPk_org_v (java.lang.String newPk_org_v ) {
+	 	this.pk_org_v = newPk_org_v;
+	} 	 
+	
+	public java.lang.String getCyear() {
+		return cyear;
+	}
+	public void setCyear(java.lang.String cyear) {
+		this.cyear = cyear;
+	}
+	public java.lang.String getCperiod() {
+		return cperiod;
+	}
+	public void setCperiod(java.lang.String cperiod) {
+		this.cperiod = cperiod;
+	}
+
+	/**
+	 * 属性 def1的Getter方法.属性名:自定义项1
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef1 () {
+		return def1;
+	}   
+	/**
+	 * 属性def1的Setter方法.属性名:自定义项1
+	 * 创建日期:2021-5-18
+	 * @param newDef1 java.lang.String
+	 */
+	public void setDef1 (java.lang.String newDef1 ) {
+	 	this.def1 = newDef1;
+	} 	 
+	
+	/**
+	 * 属性 def2的Getter方法.属性名:自定义项2
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef2 () {
+		return def2;
+	}   
+	/**
+	 * 属性def2的Setter方法.属性名:自定义项2
+	 * 创建日期:2021-5-18
+	 * @param newDef2 java.lang.String
+	 */
+	public void setDef2 (java.lang.String newDef2 ) {
+	 	this.def2 = newDef2;
+	} 	 
+	
+	/**
+	 * 属性 def3的Getter方法.属性名:自定义项3
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef3 () {
+		return def3;
+	}   
+	/**
+	 * 属性def3的Setter方法.属性名:自定义项3
+	 * 创建日期:2021-5-18
+	 * @param newDef3 java.lang.String
+	 */
+	public void setDef3 (java.lang.String newDef3 ) {
+	 	this.def3 = newDef3;
+	} 	 
+	
+	/**
+	 * 属性 def4的Getter方法.属性名:自定义项4
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef4 () {
+		return def4;
+	}   
+	/**
+	 * 属性def4的Setter方法.属性名:自定义项4
+	 * 创建日期:2021-5-18
+	 * @param newDef4 java.lang.String
+	 */
+	public void setDef4 (java.lang.String newDef4 ) {
+	 	this.def4 = newDef4;
+	} 	 
+	
+	/**
+	 * 属性 def5的Getter方法.属性名:自定义项5
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef5 () {
+		return def5;
+	}   
+	/**
+	 * 属性def5的Setter方法.属性名:自定义项5
+	 * 创建日期:2021-5-18
+	 * @param newDef5 java.lang.String
+	 */
+	public void setDef5 (java.lang.String newDef5 ) {
+	 	this.def5 = newDef5;
+	} 	 
+	
+	/**
+	 * 属性 def6的Getter方法.属性名:自定义项6
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef6 () {
+		return def6;
+	}   
+	/**
+	 * 属性def6的Setter方法.属性名:自定义项6
+	 * 创建日期:2021-5-18
+	 * @param newDef6 java.lang.String
+	 */
+	public void setDef6 (java.lang.String newDef6 ) {
+	 	this.def6 = newDef6;
+	} 	 
+	
+	/**
+	 * 属性 def7的Getter方法.属性名:自定义项7
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef7 () {
+		return def7;
+	}   
+	/**
+	 * 属性def7的Setter方法.属性名:自定义项7
+	 * 创建日期:2021-5-18
+	 * @param newDef7 java.lang.String
+	 */
+	public void setDef7 (java.lang.String newDef7 ) {
+	 	this.def7 = newDef7;
+	} 	 
+	
+	/**
+	 * 属性 def8的Getter方法.属性名:自定义项8
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef8 () {
+		return def8;
+	}   
+	/**
+	 * 属性def8的Setter方法.属性名:自定义项8
+	 * 创建日期:2021-5-18
+	 * @param newDef8 java.lang.String
+	 */
+	public void setDef8 (java.lang.String newDef8 ) {
+	 	this.def8 = newDef8;
+	} 	 
+	
+	/**
+	 * 属性 def9的Getter方法.属性名:自定义项9
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef9 () {
+		return def9;
+	}   
+	/**
+	 * 属性def9的Setter方法.属性名:自定义项9
+	 * 创建日期:2021-5-18
+	 * @param newDef9 java.lang.String
+	 */
+	public void setDef9 (java.lang.String newDef9 ) {
+	 	this.def9 = newDef9;
+	} 	 
+	
+	/**
+	 * 属性 def10的Getter方法.属性名:自定义项10
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef10 () {
+		return def10;
+	}   
+	/**
+	 * 属性def10的Setter方法.属性名:自定义项10
+	 * 创建日期:2021-5-18
+	 * @param newDef10 java.lang.String
+	 */
+	public void setDef10 (java.lang.String newDef10 ) {
+	 	this.def10 = newDef10;
+	} 	 
+	
+	/**
+	 * 属性 def11的Getter方法.属性名:自定义项11
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef11 () {
+		return def11;
+	}   
+	/**
+	 * 属性def11的Setter方法.属性名:自定义项11
+	 * 创建日期:2021-5-18
+	 * @param newDef11 java.lang.String
+	 */
+	public void setDef11 (java.lang.String newDef11 ) {
+	 	this.def11 = newDef11;
+	} 	 
+	
+	/**
+	 * 属性 def12的Getter方法.属性名:自定义项12
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef12 () {
+		return def12;
+	}   
+	/**
+	 * 属性def12的Setter方法.属性名:自定义项12
+	 * 创建日期:2021-5-18
+	 * @param newDef12 java.lang.String
+	 */
+	public void setDef12 (java.lang.String newDef12 ) {
+	 	this.def12 = newDef12;
+	} 	 
+	
+	/**
+	 * 属性 def13的Getter方法.属性名:自定义项13
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef13 () {
+		return def13;
+	}   
+	/**
+	 * 属性def13的Setter方法.属性名:自定义项13
+	 * 创建日期:2021-5-18
+	 * @param newDef13 java.lang.String
+	 */
+	public void setDef13 (java.lang.String newDef13 ) {
+	 	this.def13 = newDef13;
+	} 	 
+	
+	/**
+	 * 属性 def14的Getter方法.属性名:自定义项14
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef14 () {
+		return def14;
+	}   
+	/**
+	 * 属性def14的Setter方法.属性名:自定义项14
+	 * 创建日期:2021-5-18
+	 * @param newDef14 java.lang.String
+	 */
+	public void setDef14 (java.lang.String newDef14 ) {
+	 	this.def14 = newDef14;
+	} 	 
+	
+	/**
+	 * 属性 def15的Getter方法.属性名:自定义项15
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef15 () {
+		return def15;
+	}   
+	/**
+	 * 属性def15的Setter方法.属性名:自定义项15
+	 * 创建日期:2021-5-18
+	 * @param newDef15 java.lang.String
+	 */
+	public void setDef15 (java.lang.String newDef15 ) {
+	 	this.def15 = newDef15;
+	} 	 
+	
+	/**
+	 * 属性 def16的Getter方法.属性名:自定义项16
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef16 () {
+		return def16;
+	}   
+	/**
+	 * 属性def16的Setter方法.属性名:自定义项16
+	 * 创建日期:2021-5-18
+	 * @param newDef16 java.lang.String
+	 */
+	public void setDef16 (java.lang.String newDef16 ) {
+	 	this.def16 = newDef16;
+	} 	 
+	
+	/**
+	 * 属性 def17的Getter方法.属性名:自定义项17
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef17 () {
+		return def17;
+	}   
+	/**
+	 * 属性def17的Setter方法.属性名:自定义项17
+	 * 创建日期:2021-5-18
+	 * @param newDef17 java.lang.String
+	 */
+	public void setDef17 (java.lang.String newDef17 ) {
+	 	this.def17 = newDef17;
+	} 	 
+	
+	/**
+	 * 属性 def18的Getter方法.属性名:自定义项18
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef18 () {
+		return def18;
+	}   
+	/**
+	 * 属性def18的Setter方法.属性名:自定义项18
+	 * 创建日期:2021-5-18
+	 * @param newDef18 java.lang.String
+	 */
+	public void setDef18 (java.lang.String newDef18 ) {
+	 	this.def18 = newDef18;
+	} 	 
+	
+	/**
+	 * 属性 def19的Getter方法.属性名:自定义项19
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef19 () {
+		return def19;
+	}   
+	/**
+	 * 属性def19的Setter方法.属性名:自定义项19
+	 * 创建日期:2021-5-18
+	 * @param newDef19 java.lang.String
+	 */
+	public void setDef19 (java.lang.String newDef19 ) {
+	 	this.def19 = newDef19;
+	} 	 
+	
+	/**
+	 * 属性 def20的Getter方法.属性名:自定义项20
+	 *  创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getDef20 () {
+		return def20;
+	}   
+	/**
+	 * 属性def20的Setter方法.属性名:自定义项20
+	 * 创建日期:2021-5-18
+	 * @param newDef20 java.lang.String
+	 */
+	public void setDef20 (java.lang.String newDef20 ) {
+	 	this.def20 = newDef20;
+	} 	 
+	
+	/**
+	 * 属性 dr的Getter方法.属性名:dr
+	 *  创建日期:2021-5-18
+	 * @return java.lang.Integer
+	 */
+	public java.lang.Integer getDr () {
+		return dr;
+	}   
+	/**
+	 * 属性dr的Setter方法.属性名:dr
+	 * 创建日期:2021-5-18
+	 * @param newDr java.lang.Integer
+	 */
+	public void setDr (java.lang.Integer newDr ) {
+	 	this.dr = newDr;
+	} 	 
+	
+	/**
+	 * 属性 ts的Getter方法.属性名:ts
+	 *  创建日期:2021-5-18
+	 * @return nc.vo.pub.lang.UFDateTime
+	 */
+	public nc.vo.pub.lang.UFDateTime getTs () {
+		return ts;
+	}   
+	/**
+	 * 属性ts的Setter方法.属性名:ts
+	 * 创建日期:2021-5-18
+	 * @param newTs nc.vo.pub.lang.UFDateTime
+	 */
+	public void setTs (nc.vo.pub.lang.UFDateTime newTs ) {
+	 	this.ts = newTs;
+	} 	 
+	
+	
+	/**
+	  * <p>取得父VO主键字段.
+	  * <p>
+	  * 创建日期:2021-5-18
+	  * @return java.lang.String
+	  */
+	public java.lang.String getParentPKFieldName() {
+	    return null;
+	}   
+    
+	/**
+	  * <p>取得表主键.
+	  * <p>
+	  * 创建日期:2021-5-18
+	  * @return java.lang.String
+	  */
+	public java.lang.String getPKFieldName() {
+			
+		return "pk_wa_data_explain";
+	}
+    
+	/**
+	 * <p>返回表名称
+	 * <p>
+	 * 创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public java.lang.String getTableName() {
+		return "wa_data_explain";
+	}    
+	
+	/**
+	 * <p>返回表名称.
+	 * <p>
+	 * 创建日期:2021-5-18
+	 * @return java.lang.String
+	 */
+	public static java.lang.String getDefaultTableName() {
+		return "wa_data_explain";
+	}    
+    
+    /**
+	  * 按照默认方式创建构造子.
+	  *
+	  * 创建日期:2021-5-18
+	  */
+     public Wadataexplain() {
+		super();	
+	}    
+	
+	
+	@nc.vo.annotation.MDEntityInfo(beanFullclassName =  "nc.vo.hrwa.wadataexplain.Wadataexplain" )
+	public IVOMeta getMetaData() {
+		return VOMetaFactory.getInstance().getVOMeta("hrwa.wadataexplain");
+		
+   	}
+     
+}

+ 28 - 0
hrwa/src/public/nccloud/itf/bd/wadataexplain/IWadataexplainQryService.java

@@ -0,0 +1,28 @@
+package nccloud.itf.bd.wadataexplain;
+
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.pub.BusinessException;
+
+/**
+* <b> </b>
+*
+* <p>
+    *
+    * </p>
+*
+* Create at 2009-12-25 上午09:32:55
+*
+* @author bq
+* @since V6.0
+*/
+
+public interface IWadataexplainQryService {
+
+    public Wadataexplain[] queryAll() throws BusinessException;
+
+    public Wadataexplain[] query(String where) throws BusinessException;
+
+    public String[] queryPKs(String where) throws BusinessException;
+
+    public Wadataexplain findByPK(String key) throws BusinessException;
+}

+ 55 - 0
hrwa/src/public/nccloud/itf/bd/wadataexplain/IWadataexplainService.java

@@ -0,0 +1,55 @@
+package nccloud.itf.bd.wadataexplain;
+
+import java.util.HashMap;
+import java.util.List;
+
+import nc.vo.bd.meta.BatchOperateVO;
+import nc.vo.hrwa.wadataexplain.Wadataexplain;
+import nc.vo.pub.BusinessException;
+
+/**
+* <b>   </b>
+*
+* <p>
+    *
+    * </p>
+*
+* Create at 2009-12-25 上午09:29:16
+*
+* @author bq
+* @since V6.0
+*/
+
+public interface IWadataexplainService {
+
+    /**
+    * 批量保存VO
+    *
+    * @param vo 批量VO
+    * @return
+    * @throws BusinessException
+    */
+    BatchOperateVO batchSaveCurrtype(BatchOperateVO vo) throws BusinessException;
+    
+    /**
+          * 提交
+     * @param pk_psndoc_buf
+     * @param pk_buf
+     * @param psndocMap
+     * @return
+     * @throws BusinessException
+     */
+	public List<Wadataexplain>  batchCommit(StringBuffer pk_psndoc_buf,StringBuffer pk_buf,HashMap<String,String> psndocMap) throws BusinessException;
+	
+	
+	/**
+	  * 收回 
+	 * @param pk_psndoc_buf
+	 * @param pk_buf
+	 * @param psndocMap
+	 * @return
+	 * @throws BusinessException
+	 */
+	public List<Wadataexplain> batchUncommit(StringBuffer pk_psndoc_buf,StringBuffer pk_buf,HashMap<String,String> psndocMap) throws BusinessException;
+
+}