Procházet zdrojové kódy

Merge branch 'master' of http://183.56.220.107:50005/FSGAS_NCC/HR.git

longht před 2 roky
rodič
revize
4614d2f5c8

+ 1 - 1
hrhi/resources/cloudapi.properties

@@ -6,5 +6,5 @@
 #prod
 cloudapi.apikey=e8765865-58b1-4d11-8c33-95e6b5336fea
 cloudapi.secretKey=54705a73-1f8f-43f0-baff-6b9b6c964a87
-cloudapi.url=https://sdcs-api-dpb.yunxuetang.cn
+cloudapi.url=http://sdcs-api-dpb.yunxuetang.cn
 

+ 1 - 1
hrhi/src/private/nc/impl/hi/psndoc/PsndocTrainServiceImpl.java

@@ -96,7 +96,7 @@ public class PsndocTrainServiceImpl implements IPsndocTrainService {
 		sbSql.append("	where  ");
 		sbSql.append("	bd_psndoc.code = '").append(trainVO.getPsnCode()).append("' and  ");
 		sbSql.append("	hi_psnorg.indocflag = 'Y' and  ");
-		sbSql.append("	hi_psnorg.lastflag = 'Y'   ");
+		sbSql.append("	hi_psnorg.lastflag = 'Y'  and hi_psnjob.lastflag = 'Y' and hi_psnjob.endflag = 'N' and hi_psnorg.endflag = 'N' and hi_psnjob.ismainjob = 'Y' ");
 		TrainVO[] trainVOs = this.executeQueryVOs(sbSql.toString());
 		if(trainVOs != null && trainVOs.length > 0) {
 			trainVO.setPk_psnjob(trainVOs[0].getPk_psnjob());

+ 2 - 1
hrhi/src/private/nc/impl/hr/train/CloudOnlineuserknowledgePlugin.java

@@ -97,6 +97,7 @@ public class CloudOnlineuserknowledgePlugin implements IBackgroundWorkPlugin {
 				updateDate = sdf.format(c.getTime());
 				c.add(Calendar.DAY_OF_MONTH, 30-nums);
 				updateEndDate = sdf.format(c.getTime());
+				months = Integer.valueOf(arg0.getKeyMap().get("nums").toString());
 			}
 		} else {
 			c.add(Calendar.DAY_OF_MONTH, -1);
@@ -119,7 +120,7 @@ public class CloudOnlineuserknowledgePlugin implements IBackgroundWorkPlugin {
 			c.setTime(today);
 			for(int i = 0; i < months; i++) {
 				updateEndDate = sdf.format(c.getTime());
-				c.add(Calendar.MONTH, -1);
+				c.add(Calendar.MONTH, -(i+1));
 				updateDate = sdf.format(c.getTime());
 				bodyMap.put("updateDate", updateDate);
 				bodyMap.put("updateEndDate", updateEndDate);

+ 139 - 0
hrhi/src/public/nc/bs/hrhi/common/HrkqMgrReceiver.java

@@ -0,0 +1,139 @@
+package nc.bs.hrhi.common;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.alibaba.fastjson.JSONObject;
+
+import nc.bs.framework.common.NCLocator;
+import nc.bs.logging.Logger;
+import nc.itf.hi.IPsndocQryService;
+import nc.itf.uap.IUAPQueryBS;
+import nc.jdbc.framework.processor.BeanListProcessor;
+import nc.vo.er.exception.ExceptionHandler;
+import nc.vo.hi.psndoc.PsnJobVO;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.compiler.PfParameterVO;
+import nc.vo.pub.pf.plugin.IPfMsgCustomReceiver;
+import nc.vo.pub.pf.plugin.ReceiverVO;
+import nc.vo.sm.UserVO;
+
+public class HrkqMgrReceiver implements IPfMsgCustomReceiver {
+
+	@Override
+	public ReceiverVO[] createReceivers() {
+		ReceiverVO lrr = new ReceiverVO();
+		lrr.setName("假勤管理员");
+		lrr.setCode("hrkqMgr");
+		return new ReceiverVO[] {lrr};
+	}
+
+	@Override
+	public UserVO[] queryUsers(ReceiverVO arg0, PfParameterVO paravo) {
+		return queryOperatorByPsn(paravo);
+	}
+
+	private UserVO[] queryOperatorByPsn(PfParameterVO paravo) {
+		try {
+			String pk_psndoc = null;
+			String pk_psnjob = null;
+			String pk_dept = null;
+			if(paravo.m_preValueVo.getParentVO() != null) {
+//				pk_psndoc = (String) paravo.m_preValueVo.getParentVO().getAttributeValue("pk_psndoc");
+				pk_psnjob = (String) paravo.m_preValueVo.getParentVO().getAttributeValue("pk_psnjob");
+			}
+			List<UserVO> list = new ArrayList();
+			Logger.debug("测试日志1:"+pk_psndoc+"有人员");
+			//单据人员的组织和这个职责所关联的人员的组织相同噢
+			if (pk_psnjob != null) {
+				if(pk_dept == null) {
+					PsnJobVO psnJobVO = this.queryPsnJob(pk_psnjob);
+					pk_dept = psnJobVO.getPk_dept();
+				}
+				UserVO[] users = this.queryUserByPkDept(pk_dept);
+				Logger.debug("测试日志2:"+JSONObject.toJSONString(users));
+				if(users != null && users.length > 0) {
+					for(UserVO vo : users) {
+						list.add(vo);
+					}
+				}
+			}
+			
+			return list.toArray(new UserVO[0]);
+			
+		} catch (Exception e) {
+			Logger.debug("测试日志3:"+e.getMessage());
+			ExceptionHandler.handleExceptionRuntime(e);
+		}
+		return new UserVO[0];
+	}
+	
+	public PsnJobVO queryPsnJob(String pk_psnjob) throws BusinessException{
+//	    StringBuffer where = new StringBuffer();
+//	    where.append(" bd_psndoc.dr = 0 and hi_psnorg.dr = 0 and hi_psnjob.dr = 0 and hi_psnorg.lastflag = 'Y' and hi_psnjob.lastflag = 'Y' and hi_psnjob.psntype = 0 and hi_psnorg.indocflag ='Y' and hi_psnjob.ismainjob = 'Y' and hi_psnjob.endflag = 'N' and bd_psndoc.enablestate = 2");
+//
+//	    where.append(" and bd_psndoc.pk_psndoc = ");
+//	    if (StringUtils.isNotBlank(pk_psndoc)) {
+//	      where.append("'" + pk_psndoc + "'");
+//	    }  
+		
+//	    List<PsnJobVO> psnJobList = null;
+//	    try {
+//			psnJobList = ((IPsndocQryService)NCLocator.getInstance().lookup(IPsndocQryService.class)).queryPsninfoByCondition(where.toString());
+//	    } catch (BusinessException e) {
+//	      Logger.error(e.getMessage(), e);
+//	    } 
+//	    if (psnJobList == null ) {
+//	    	throw new BusinessException("找不到对应的工作记录");
+//	    }
+		PsnJobVO psnjobVO = null;
+		try {
+			 PsnJobVO[] psnjobs = ((IPsndocQryService)NCLocator.getInstance().lookup(IPsndocQryService.class)).queryPsnjobByPKs(new String[] {pk_psnjob});
+			 if(psnjobs != null) {
+				 psnjobVO = psnjobs[0];
+			 }
+		} catch (BusinessException e) {
+	      Logger.error(e.getMessage(), e);
+	    } 
+		if (psnjobVO == null ) {
+	    	throw new BusinessException("找不到对应的工作记录");
+	    }
+	    return null;
+	}
+	
+	public UserVO[] queryUserByPkDept(String pk_dept) throws BusinessException{
+		StringBuffer sqlstr=new StringBuffer("");
+		sqlstr.append("select sm_user.*").append("\r\n");
+		sqlstr.append("  from sm_user").append("\r\n");
+		sqlstr.append("  left join bd_psndoc").append("\r\n");
+		sqlstr.append("    on bd_psndoc.pk_psndoc = sm_user.pk_psndoc").append("\r\n");
+		sqlstr.append(" inner join hi_psnorg").append("\r\n");
+		sqlstr.append("    on bd_psndoc.pk_psndoc = hi_psnorg.pk_psndoc").append("\r\n");
+		sqlstr.append(" inner join hi_psnjob").append("\r\n");
+		sqlstr.append("    on hi_psnorg.pk_psnorg = hi_psnjob.pk_psnorg").append("\r\n");
+		sqlstr.append(" left join sm_user_role").append("\r\n");
+		sqlstr.append("    on sm_user_role.cuserid = sm_user.cuserid").append("\r\n");
+		sqlstr.append(" left join sm_role").append("\r\n");
+		sqlstr.append("    on sm_role.pk_role = sm_user_role.pk_role").append("\r\n");
+		sqlstr.append(" left join sm_perm_func").append("\r\n");
+		sqlstr.append("    on sm_perm_func.subjectid = sm_role.pk_role").append("\r\n");
+		sqlstr.append(" left join sm_responsibility").append("\r\n");
+		sqlstr.append("    on sm_responsibility.pk_responsibility = sm_perm_func.ruleid").append("\r\n");
+		sqlstr.append(" where bd_psndoc.dr = 0").append("\r\n");
+		sqlstr.append("   and hi_psnorg.dr = 0").append("\r\n");
+		sqlstr.append("   and hi_psnjob.dr = 0").append("\r\n");
+		sqlstr.append("   and hi_psnorg.lastflag = 'Y'").append("\r\n");
+		sqlstr.append("   and hi_psnjob.lastflag = 'Y'").append("\r\n");
+		sqlstr.append("   and hi_psnjob.psntype = 0").append("\r\n");
+		sqlstr.append("   and hi_psnorg.indocflag = 'Y'").append("\r\n");
+		sqlstr.append("   and hi_psnjob.ismainjob = 'Y'").append("\r\n");
+		sqlstr.append("   and hi_psnjob.endflag = 'N'").append("\r\n");
+		sqlstr.append("   and bd_psndoc.enablestate = 2").append("\r\n");
+		sqlstr.append("   and sm_responsibility.name = '假勤管理人'").append("\r\n");
+		sqlstr.append("   and hi_psnjob.pk_dept = '"+pk_dept+"'"); 
+		List<UserVO> userList = (List<UserVO>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sqlstr.toString(), new BeanListProcessor(UserVO.class));
+		if(userList != null && userList.size() > 0) {
+			return userList.toArray(new UserVO[0]);
+		}
+		return null;
+	}
+}

+ 27 - 0
hrhi/src/public/nc/hrhi/httpUtil/MyX509TrustManager.java

@@ -0,0 +1,27 @@
+package nc.hrhi.httpUtil;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.X509TrustManager;
+
+public class MyX509TrustManager implements X509TrustManager {
+    /* (non-Javadoc)
+    * @see javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String)
+    */
+    public void checkClientTrusted(X509Certificate[] arg0, String arg1)
+            throws CertificateException {
+
+    }
+    /* (non-Javadoc)
+     * @see javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String)
+     */
+    public void checkServerTrusted(X509Certificate[] arg0, String arg1)
+            throws CertificateException {
+
+    }
+    /* (non-Javadoc)
+     * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
+     */
+    public X509Certificate[] getAcceptedIssuers() {
+        return null;
+    }
+}

+ 53 - 17
hrkq/hrkq/src/client/nccloud/hrkq/hrkq/monthottimevo/action/MonthOtTimeVOCheckSaveAction.java

@@ -4,12 +4,18 @@ import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
+
 import nc.bs.logging.Logger;
+import nc.itf.om.IPostQueryService;
 import nc.vo.hi.psndoc.PsnJobVO;
 import nc.vo.hrkq.monthottime.AggMonthOtTimeVO;
 import nc.vo.hrkq.monthottime.MonthOtTimeBVO;
 import nc.vo.hrkq.monthottime.MonthOtTimeVO;
+import nc.vo.om.post.AggPostVO;
+import nc.vo.om.post.PostVO;
 import nc.vo.pub.BusinessException;
+import nc.vo.pub.lang.UFBoolean;
 import nc.vo.pub.lang.UFDate;
 import nc.vo.pub.lang.UFDateTime;
 import nc.vo.pub.lang.UFDouble;
@@ -110,19 +116,44 @@ public class MonthOtTimeVOCheckSaveAction implements ICommonAction {
 		    		result = "加班日期"+msg2+"不属于节假日加班,请选择正确的加班类型";
 		    	}
 		    }
-		    doBeforeCheck(aggVO);
-		    String dateCheckMsg = CommonUtil.checkSelf(bvos);
-		    if(dateCheckMsg != null) {
-		    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+		    String pk_post = psnjobVO.getPk_post();
+		    if(StringUtils.isNotBlank(pk_post)) {
+		    	aggVO.setChildrenVO(bvos);
+		    	AggPostVO aggPostVO = ServiceLocator.find(IPostQueryService.class).queryByPk(pk_post);
+		    	if(aggPostVO != null) {
+			    	PostVO postVO = (PostVO) aggPostVO.getParentVO();
+			    	Object glbdef1 = postVO.getAttributeValue("glbdef1");
+			    	if(glbdef1 == null || !UFBoolean.valueOf(glbdef1.toString()).booleanValue()) {
+			    		doBeforeCheck(aggVO);
+			    	}
+		    	}
 		    }
-		    
-		    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
-		    if(oldBvos != null && oldBvos.size() > 0) {
-			    String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
-			    if(dateTwoCheckMsg != null) {
-			    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+		    if("1".equals(otapplytype)) {//按次
+		    	String dateCheckMsg = CommonUtil.checkSelfTimes(bvos);
+			    if(dateCheckMsg != null) {
+			    	throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+			    }
+			    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+			    if(oldBvos != null && oldBvos.size() > 0) {
+			    	String dateTwoCheckMsg = CommonUtil.checkTwoListTimes(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+			    	if(dateTwoCheckMsg != null) {
+			    		throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateTwoCheckMsg);
+			    	}
+			    }
+		    }else if("2".equals(otapplytype)) {//普通
+			    String dateCheckMsg = CommonUtil.checkSelf(bvos);
+			    if(dateCheckMsg != null) {
+			    	throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+			    }
+			    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+			    if(oldBvos != null && oldBvos.size() > 0) {
+			    	String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+			    	if(dateTwoCheckMsg != null) {
+			    		throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+			    	}
 			    }
 		    }
+		    
 		}catch (BusinessException ex) {
 			Logger.error(ex.getMessage(), ex);
 			ExceptionUtils.wrapException(ex);
@@ -143,13 +174,18 @@ public class MonthOtTimeVOCheckSaveAction implements ICommonAction {
 			  Map<String, UFDouble> map = service.queryMonth(pk_psndoc);
 			  UFDouble totalHours = UFDouble.ZERO_DBL;
 			  MonthOtTimeBVO[] bvos = (MonthOtTimeBVO[]) aggvo.getChildrenVO();
-			  for(MonthOtTimeBVO bvo : bvos) {
-				  UFDate otdate = (UFDate) bvo.getAttributeValue(MonthOtTimeBVO.OTDATE);
-				  String monthday = dateToStr(otdate);
-				  UFDouble hours = map.get(monthday) == null ? UFDouble.ZERO_DBL : map.get(monthday);
-				  totalHours = hours.add(bvo.getOthours());
-				  if(totalHours.toDouble() > 36) {
-					  checkFlag = Boolean.TRUE;
+			  if(map != null && bvos != null && bvos.length > 0) {
+				  for(MonthOtTimeBVO bvo : bvos) {
+					  UFDate otdate = bvo.getAttributeValue(MonthOtTimeBVO.OTDATE) == null ? ((UFDateTime)bvo.getAttributeValue(MonthOtTimeBVO.OVERTIMEBEGINTIME)).getDate() : (UFDate) bvo.getAttributeValue(MonthOtTimeBVO.OTDATE);
+					  if(otdate != null) {
+						  String monthday = dateToStr(otdate);
+						  UFDouble hours = map.get(monthday) == null ? UFDouble.ZERO_DBL : map.get(monthday);
+						  UFDouble othours = bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS) == null ? UFDouble.ZERO_DBL : (UFDouble) bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS);
+						  totalHours = hours.add(othours);
+						  if(totalHours.toDouble() > 36) {
+							  checkFlag = Boolean.TRUE;
+						  }
+					  }
 				  }
 			  }
 			  if(checkFlag) {

+ 33 - 10
hrkq/hrkq/src/client/nccloud/hrkq/hrkq/monthottimevo/action/MonthOtTimeVOCommitAction.java

@@ -5,14 +5,21 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
+
 import nc.bs.logging.Logger;
+import nc.itf.om.IPostQueryService;
 import nc.md.persist.framework.IMDPersistenceQueryService;
+import nc.vo.hi.psndoc.PsnJobVO;
 import nc.vo.hrkq.monthottime.AggMonthOtTimeVO;
 import nc.vo.hrkq.monthottime.MonthOtTimeBVO;
 import nc.vo.hrkq.monthottime.MonthOtTimeVO;
+import nc.vo.om.post.AggPostVO;
+import nc.vo.om.post.PostVO;
 import nc.vo.pf.change.PfUtilBaseTools;
 import nc.vo.pf.pub.util.SQLUtil;
 import nc.vo.pub.BusinessException;
+import nc.vo.pub.lang.UFBoolean;
 import nc.vo.pub.lang.UFDate;
 import nc.vo.pub.lang.UFDateTime;
 import nc.vo.pub.lang.UFDouble;
@@ -20,6 +27,7 @@ import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill;
 import nc.vo.uap.pf.PfProcessBatchRetObject;
 import nccloud.framework.core.exception.ExceptionUtils;
 import nccloud.framework.core.json.IJson;
+import nccloud.framework.service.ServiceLocator;
 import nccloud.framework.web.action.itf.ICommonAction;
 import nccloud.framework.web.container.IRequest;
 import nccloud.framework.web.json.JsonFactory;
@@ -32,6 +40,7 @@ import nccloud.itf.hrkq.hrkq.IMonthottimevoMaintain;
 import nccloud.pubitf.riart.pflow.CloudPFlowContext;
 import nccloud.pubitf.riart.pflow.ICloudScriptPFlowService;
 import nccloud.vo.hrkq.hrkq.MonthOtTimeVOConst;
+import nccloud.web.hrkq.common.utils.AttendDataUtil;
 import nccloud.web.workflow.approve.util.NCCFlowUtils;
 
 public class MonthOtTimeVOCommitAction implements ICommonAction{
@@ -46,8 +55,18 @@ public class MonthOtTimeVOCommitAction implements ICommonAction{
 	    	AggMonthOtTimeVO[] operaVOs = this.queryBillsByPks(operaParam);
 	      // ts赋值
 	      CommonUtil.setBillsTs(operaParam.getPkMapTs(), operaVOs);
-	      
-	      doBefore(operaVOs);
+	      PsnJobVO psnjobVO = AttendDataUtil.queryPsnJob(null);
+	      String pk_post = psnjobVO.getPk_post();
+		  if(StringUtils.isNotBlank(pk_post)) {
+			  AggPostVO aggPostVO = ServiceLocator.find(IPostQueryService.class).queryByPk(pk_post);
+			  if(aggPostVO != null) {
+				  PostVO postVO = (PostVO) aggPostVO.getParentVO();
+				  Object glbdef1 = postVO.getAttributeValue("glbdef1");
+				  if(glbdef1 == null || !UFBoolean.valueOf(glbdef1.toString()).booleanValue()) {
+					  doBefore(operaVOs);
+				  }
+			  }
+		  }
 	      
 	      // 对查询结果执行具体业务处理
 	      Object resultVOs = this.commit(operaVOs, operaParam.getUserObj());
@@ -76,14 +95,18 @@ public class MonthOtTimeVOCommitAction implements ICommonAction{
 			  UFDouble totalHours = UFDouble.ZERO_DBL;
 			  MonthOtTimeBVO[] bvos = (MonthOtTimeBVO[]) aggvo.getChildrenVO();
 			  for(MonthOtTimeBVO bvo : bvos) {
-				  UFDate otdate = (UFDate) bvo.getAttributeValue(MonthOtTimeBVO.OTDATE);
-				  String monthday = dateToStr(otdate);
-				  UFDouble hours = map == null || map.size() == 0 || map.get(monthday) == null ? UFDouble.ZERO_DBL : map.get(monthday);
-				  totalHours = hours.add(new UFDouble(bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS).toString()));
-				  if(totalHours.toDouble() > 36) {
-					  checkFlag = Boolean.TRUE;
-				  } else {
-					  map.put(monthday, totalHours);
+				  UFDate otdate = bvo.getAttributeValue(MonthOtTimeBVO.OTDATE) == null ? ((UFDateTime)bvo.getAttributeValue(MonthOtTimeBVO.OVERTIMEBEGINTIME)).getDate() : (UFDate) bvo.getAttributeValue(MonthOtTimeBVO.OTDATE);
+				  if(otdate != null) {
+					  String monthday = dateToStr(otdate);
+					  UFDouble hours = map == null || map.size() == 0 || map.get(monthday) == null ? UFDouble.ZERO_DBL : map.get(monthday);
+	//				  totalHours = hours.add(new UFDouble(bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS).toString()));
+					  UFDouble othours = bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS) == null ? UFDouble.ZERO_DBL : (UFDouble) bvo.getAttributeValue(MonthOtTimeBVO.OTHOURS);
+					  totalHours = hours.add(othours);
+					  if(totalHours.toDouble() > 36) {
+						  checkFlag = Boolean.TRUE;
+					  } else {
+						  map.put(monthday, totalHours);
+					  }
 				  }
 			  }
 		  }

+ 26 - 11
hrkq/hrkq/src/client/nccloud/hrkq/hrkq/monthottimevo/action/MonthOtTimeVOCommonSaveAction.java

@@ -54,6 +54,7 @@ public class MonthOtTimeVOCommonSaveAction implements ICommonAction {
 		try {
 			BillCardOperator billCardOperator = new BillCardOperator();
 			setValue(vo,psnJob,appCode);
+			vo.setAttributeValue(MonthOtTimeVO.WITNESS, bvos[0].getAttributeValue(MonthOtTimeBVO.VBDEF8));
 			AggMonthOtTimeVO aggVO = new AggMonthOtTimeVO();
 			aggVO.setParentVO(vo);
 			for(MonthOtTimeBVO bvo : bvos) {
@@ -309,9 +310,9 @@ public class MonthOtTimeVOCommonSaveAction implements ICommonAction {
 	    }
 		String pk_psndoc = (String) parent.getAttributeValue(MonthOtTimeVO.PK_PSNDOC);
 	    MonthOtTimeBVO[] bvos = (MonthOtTimeBVO[]) vo.getChildrenVO();
+	    //加班类型,1为按次ottimestype,2为普通otdatetype
+	    String otapplytype = (String) parent.getAttributeValue(MonthOtTimeVO.OTAPPLYTYPE);
 	    if(bvos != null && bvos.length > 0) {
-	    	//加班类型,1为按次ottimestype,2为普通otdatetype
-	    	String otapplytype = (String) parent.getAttributeValue(MonthOtTimeVO.OTAPPLYTYPE);
 	    	IMonthottimevoMaintain service = ServiceLocator.find(IMonthottimevoMaintain.class);
 	    	List<Map<String, UFDate>> listMap = service.queryHoliday(pk_psndoc, psnjobVO.getPk_org());
 	    	List<String> defdocList = service.queryDefdoc();//查询节假日类型主键
@@ -382,17 +383,31 @@ public class MonthOtTimeVOCommonSaveAction implements ICommonAction {
 	    	}
 	    }
 	    
-	    String dateCheckMsg = CommonUtil.checkSelf(bvos);
-	    if(dateCheckMsg != null) {
-	    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
-	    }
-	    
-	    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
-	    if(oldBvos != null && oldBvos.size() > 0) {
-		    String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
-		    if(dateTwoCheckMsg != null) {
+	    if("1".equals(otapplytype)) {//按次
+        	String dateCheckMsg = CommonUtil.checkSelfTimes(bvos);
+    	    if(dateCheckMsg != null) {
+    	    	throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+    	    }
+    	    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+    	    if(oldBvos != null && oldBvos.size() > 0) {
+    	    	String dateTwoCheckMsg = CommonUtil.checkTwoListTimes(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+    	    	if(dateTwoCheckMsg != null) {
+    	    		throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateTwoCheckMsg);
+    	    	}
+    	    }
+	    }else if("2".equals(otapplytype)) {//普通
+		    String dateCheckMsg = CommonUtil.checkSelf(bvos);
+		    if(dateCheckMsg != null) {
 		    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
 		    }
+		    
+		    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+		    if(oldBvos != null && oldBvos.size() > 0) {
+			    String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+			    if(dateTwoCheckMsg != null) {
+			    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+			    }
+		    }
 	    }
 	}
 	

+ 37 - 13
hrkq/hrkq/src/client/nccloud/hrkq/hrkq/monthottimevo/action/MonthOtTimeVOSaveAction.java

@@ -155,9 +155,9 @@ public class MonthOtTimeVOSaveAction implements ICommonAction {
     }
     
     MonthOtTimeBVO[] bvos = (MonthOtTimeBVO[]) vo.getChildrenVO();
+    //加班类型,1为按次ottimestype,2为普通otdatetype
+    String otapplytype = (String) parent.getAttributeValue(MonthOtTimeVO.OTAPPLYTYPE);
     if(bvos != null && bvos.length > 0) {
-    	//加班类型,1为按次ottimestype,2为普通otdatetype
-    	String otapplytype = (String) parent.getAttributeValue(MonthOtTimeVO.OTAPPLYTYPE);
     	IMonthottimevoMaintain service = ServiceLocator.find(IMonthottimevoMaintain.class);
     	List<Map<String, UFDate>> listMap = service.queryHoliday(pk_psndoc, psnjobVO.getPk_org());
     	List<String> defdocList = service.queryDefdoc();//查询节假日类型主键
@@ -224,19 +224,43 @@ public class MonthOtTimeVOSaveAction implements ICommonAction {
     	}
     	
     }
-    
-    String dateCheckMsg = CommonUtil.checkSelf(bvos);
-    if(dateCheckMsg != null) {
-    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
-    }
-    
-    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
-    if(oldBvos != null && oldBvos.size() > 0) {
-	    String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
-	    if(dateTwoCheckMsg != null) {
-	    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+    if("1".equals(otapplytype)) {//按次
+    	String dateCheckMsg = CommonUtil.checkSelfTimes(bvos);
+	    if(dateCheckMsg != null) {
+	    	throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+	    }
+	    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+	    if(oldBvos != null && oldBvos.size() > 0) {
+	    	String dateTwoCheckMsg = CommonUtil.checkTwoListTimes(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+	    	if(dateTwoCheckMsg != null) {
+	    		throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateTwoCheckMsg);
+	    	}
+	    }
+    }else if("2".equals(otapplytype)) {//普通
+	    String dateCheckMsg = CommonUtil.checkSelf(bvos);
+	    if(dateCheckMsg != null) {
+	    	throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+	    }
+	    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+	    if(oldBvos != null && oldBvos.size() > 0) {
+	    	String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+	    	if(dateTwoCheckMsg != null) {
+	    		throw new BusinessException("加班时间范围内存在冲突的加班单据,冲突时间:"+dateCheckMsg);
+	    	}
 	    }
     }
+//    String dateCheckMsg = CommonUtil.checkSelf(bvos);
+//    if(dateCheckMsg != null) {
+//    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+//    }
+//    
+//    List<MonthOtTimeBVO> oldBvos = CommonUtil.getMaintainService().queryBVOByPkPsndoc(pk_psndoc);
+//    if(oldBvos != null && oldBvos.size() > 0) {
+//	    String dateTwoCheckMsg = CommonUtil.checkTwoList(bvos,oldBvos.toArray(new MonthOtTimeBVO[0]));
+//	    if(dateTwoCheckMsg != null) {
+//	    	throw new BusinessException("加班时间范围内存在冲突的加班单据");
+//	    }
+//    }
   }
   
   /**

+ 73 - 1
hrkq/hrkq/src/client/nccloud/hrkq/hrkq/monthottimevo/hrkq/util/CommonUtil.java

@@ -3,6 +3,8 @@ package nccloud.hrkq.hrkq.monthottimevo.hrkq.util;
 
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import nc.md.persist.framework.IMDPersistenceQueryService;
@@ -194,7 +196,7 @@ public class CommonUtil {
                   continue; // 前台如果是旧数据修改不能再跟自己比较
               }
               
-              if(J_S == null || J_E == null) {
+              if(J_S == null || J_E == null || I_S == null || I_E == null) {
             	  continue;
               }
               
@@ -212,6 +214,68 @@ public class CommonUtil {
       return res;
   }
   
+  /**
+   * 按次
+   * @Param:
+   * @Description: list自身查询有无时间冲突,
+   * 优化1: 如果自身的list过大, j遍历不能从0开始,只需要往后面数据比较大小
+   * @Author: zyf    2019/3/29
+   */
+  public static String checkSelfTimes(MonthOtTimeBVO[] list) {
+      String res = null;
+      if (list.length == 0) {
+          return res;
+      }
+      List<String> keys = new ArrayList();
+      for (int i = 0; i < list.length; i++) {
+    	  Object otdate = list[i].getAttributeValue(MonthOtTimeBVO.OTDATE);
+    	  String ottimestype = (String) list[i].getAttributeValue(MonthOtTimeBVO.OTTIMESTYPE);
+    	  if(otdate != null) {
+	    	  String key = dateToStr((UFDate)otdate) + ottimestype;
+	    	  if(keys.contains(key)) {
+	    		  res = (res == null ? "" : res) + dateToStr((UFDate)otdate) + " ";
+	    		  continue;
+	    	  }
+	    	  keys.add(key);
+    	  }
+      }
+      return res;
+  }
+  
+  /**
+   * 按次
+   * @Param: listNew 前端传的list
+   * @Param: listOld 数据库list,
+   * 优化2*****后端查询数据库可以根据前端的list里面最大时间和最小时间区间作为条件查询出来
+   * @Description: 比较前端传的list跟数据库list有无时间冲突
+   * @Author: zyf    2019/3/29
+   */
+  public static String checkTwoListTimes(MonthOtTimeBVO[] listNew, MonthOtTimeBVO[] listOld) {
+      String res = null;  //没有冲突返回null,有冲突返回冲突的时间段
+      List<String> keys = new ArrayList();
+      for (int i = 0; i < listOld.length; i++) {
+    	  Object otdate = listOld[i].getAttributeValue(MonthOtTimeBVO.OTDATE);
+    	  String ottimestype = (String) listOld[i].getAttributeValue(MonthOtTimeBVO.OTTIMESTYPE);
+    	  if(otdate != null) {
+	    	  String key = dateToStr((UFDate)otdate) + ottimestype;
+	    	  keys.add(dateToStr((UFDate)otdate) + ottimestype);
+    	  }
+      }
+      for (int i = 0; i < listNew.length; i++) {
+    	  Object otdate = listNew[i].getAttributeValue(MonthOtTimeBVO.OTDATE);
+    	  String ottimestype = (String) listNew[i].getAttributeValue(MonthOtTimeBVO.OTTIMESTYPE);
+    	  if(otdate != null) {
+    		  String key = dateToStr((UFDate)otdate) + ottimestype;
+    		  if(keys.contains(key)) {
+    			  res = (res == null ? "" : res) + dateToStr((UFDate)otdate) + " ";
+    			  continue;
+    		  }
+    		  keys.add(key);
+    	  }
+      }
+      return res;
+  }
+  
   public static final String DATE_FORMAT_Y_M_DHM = "yyyy-MM-dd HH:mm:ss";
   public static String dateToStr(UFDateTime date) {
       String strDate = "";
@@ -219,4 +283,12 @@ public class CommonUtil {
       strDate = sdf.format(date.getDate().toDate());
       return strDate;
   }
+  
+  public static final String DATE_FORMAT_Y_M_D = "yyyy-MM-dd";
+  public static String dateToStr(UFDate date) {
+      String strDate = "";
+      SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_Y_M_D);
+      strDate = sdf.format(date.toDate());
+      return strDate;
+  }
 }

+ 438 - 0
hrkq/hrkq/src/private/nccloud/impl/hrkq/diwork/HRKQQuerySerivceImpl.java

@@ -0,0 +1,438 @@
+package nccloud.impl.hrkq.diwork;
+
+import nc.bs.framework.common.NCLocator;
+import nc.bs.logging.Logger;
+import nc.hr.utils.InSQLCreator;
+import nc.hr.utils.ResHelper;
+import nc.hr.utils.StringPiecer;
+import nc.itf.hr.frame.IPersistenceRetrieve;
+import nc.itf.hr.org.IPrimaryOrgQry;
+import nc.itf.org.IOrgConst;
+import nc.itf.uap.IUAPQueryBS;
+import nc.vo.org.DeptVO;
+import nc.vo.org.OrgVO;
+import nc.vo.pub.BusinessException;
+import nc.vo.pub.SuperVO;
+import nccloud.commons.collections.CollectionUtils;
+import nccloud.commons.lang.StringUtils;
+import nccloud.itf.hrkq.IHRKQQueryService;
+import nccloud.pub.hrkq.util.IAttendCommonUtil;
+import nccloud.pub.hrkq.util.StringListProcessor;
+import nccloud.pubitf.baseapp.apprbac.IAppAndOrgPermQueryPubService;
+import nccloud.vo.hrkq.attendance.AttendanceVO;
+import nccloud.vo.hrkq.leave.LeaveVO;
+import nccloud.vo.hrkq.leaveoff.LeaveoffVO;
+import nccloud.vo.hrkq.outside.OutSideVO;
+import nccloud.vo.hrkq.overtime.OverTimeVO;
+import nccloud.vo.hrkq.trip.TripVO;
+import nccloud.vo.hrkq.tripoff.TripoffVO;
+import org.apache.commons.lang3.ArrayUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class HRKQQuerySerivceImpl implements IHRKQQueryService {
+
+    @Override
+    public List<String> queryPsnBillList(String billType, String order, String beginDate, String endDate,
+                                         String pkPsndoc, String pkGroup, String userId, String appCode) throws BusinessException {
+        // 定义查询条件
+        StringBuffer where = new StringBuffer(" where 1=1 ");
+        if (StringUtils.isNotEmpty(beginDate) || StringUtils.isNotEmpty(endDate)) {
+            String dateSql = getDateFilterSql(billType, beginDate, endDate);
+            if (StringUtils.isNotBlank(dateSql)) {
+                where.append(dateSql);
+            }
+        }
+        where.append(" and pk_psndoc ='" + pkPsndoc + "' ");
+        return doQueryBillList(billType, where.toString(), order, pkGroup, userId, appCode);
+    }
+
+    @Override
+    public List<String> queryDeptBillList(String billType, String order, String beginDate, String endDate,
+                                          String pkDept, String psnName, String jobId, String pkGroup, String userId, String appCode, boolean isIncludeSub) throws BusinessException {
+        StringBuffer where = genQuerySql(billType, beginDate, endDate, psnName, pkDept, jobId, isIncludeSub, getPowerDeptMap(userId, pkGroup, appCode));
+        return doQueryBillList(billType, where.toString(), order, pkGroup, userId, appCode);
+    }
+
+    @Override
+    public List<String> queryAdminBillList(String billType, String order, String beginDate, String endDate,
+                                           String pkDept, String tempWhere, String pkGroup, String userId, String appCode) throws BusinessException {
+        StringBuffer where = genQuerySql(billType, beginDate, endDate, null, pkDept, null, false, getPowerDeptMap(userId, pkGroup, appCode));
+        // 权限组织条件
+        String[] powerOrgIds = queryPowerOrgList(userId, pkGroup, appCode);
+        if (ArrayUtils.isEmpty(powerOrgIds)) {
+            return Collections.emptyList();
+        }
+        InSQLCreator inSqlCreator = new InSQLCreator();
+
+        String strInSQL = inSqlCreator.getInSQL(powerOrgIds);
+
+        where.append(" and pk_org in (" + strInSQL + ")");
+
+        if (StringUtils.isNotBlank(tempWhere)) {
+            where.append(" and " + tempWhere);
+        }
+        return doQueryBillList(billType, where.toString(), order, pkGroup, userId, appCode);
+    }
+
+    private StringBuffer genQuerySql(String billType, String beginDate, String endDate, String psnName, String pkDept,
+                                     String jobId, boolean isIncludeSub, Map<String, String> deptMap) {
+        // 在职条件过滤
+        StringBuffer psnSqlIn = new StringBuffer();
+        psnSqlIn.append("SELECT ");
+        psnSqlIn.append("DISTINCT job.pk_psndoc ");
+        psnSqlIn.append("FROM ");
+        psnSqlIn.append("hi_psnjob job INNER JOIN BD_PSNDOC doc ON job.pk_psndoc = doc.pk_psndoc ");
+        psnSqlIn.append("WHERE ");
+        // 主任职
+        psnSqlIn.append("job.ISMAINJOB = 'Y' ");
+        // 生效记录
+        psnSqlIn.append("AND job.lastflag = 'Y' ");
+        // 职务过滤
+        if (StringUtils.isNotBlank(jobId)) {
+            String[] jobArray = jobId.split(",");
+            InSQLCreator creator = new InSQLCreator();
+            try {
+                String jobInSql = creator.getInSQL(jobArray);
+                psnSqlIn.append(" AND job.PK_JOB in (" + jobInSql + ") ");
+            } catch (nc.vo.pub.BusinessException e) {
+                Logger.error(e.getMessage(), e);
+                throw new RuntimeException(ResHelper.getString("6020hrkq", "6020hrkq00023")
+                        /*@res "职务查询异常" */);
+            }
+        }
+
+        // 定义查询条件
+        StringBuffer where = new StringBuffer(" where 1=1 ");
+        if (StringUtils.isNotEmpty(beginDate) || StringUtils.isNotEmpty(endDate)) {
+            String dateSql = getDateFilterSql(billType, beginDate, endDate);
+            if (StringUtils.isNotBlank(dateSql)) {
+                where.append(dateSql);
+            }
+        }
+        // 人员姓名模糊条件
+        if (StringUtils.isNotBlank(psnName)) {
+            // 姓名模糊检索
+            psnSqlIn.append("AND doc.name LIKE '%" + psnName + "%' ");
+        }
+        where.append(" and pk_psndoc in (" + psnSqlIn.toString() + ")");
+        // 部门过滤
+        if (StringUtils.isNotBlank(pkDept)) {
+            if (isIncludeSub) {
+                String strInSql = getChildrenDeptById(pkDept, deptMap);
+                if (StringUtils.isNotEmpty(strInSql)) {
+                    if (strInSql.startsWith("(")) {
+                        where.append(" and pk_dept in " + strInSql);
+                    } else {
+                        where.append(" and pk_dept in (" + strInSql + ")");
+                    }
+                }
+            } else {
+                if (!deptMap.isEmpty() && deptMap.containsKey(pkDept)) {
+                    where.append(" and pk_dept = '" + pkDept + "'");
+                } else {
+                    where.append(" and pk_dept = '#####'");
+                }
+            }
+        } else if (deptMap != null && deptMap.size() > 0) {
+            String[] powerDept = deptMap.keySet().toArray(new String[deptMap.size()]);
+            InSQLCreator creator = new InSQLCreator();
+            try {
+                String inSQL = creator.getInSQL(powerDept);
+                where.append(" AND pk_dept in (" + inSQL + ") ");
+            } catch (nc.vo.pub.BusinessException e) {
+                Logger.error(e.getMessage(), e);
+                throw new RuntimeException(ResHelper.getString("6020hrkq", "6020hrkq00014")
+                        /*@res "查询有权限部门异常" */);
+            }
+        }
+        return where;
+    }
+
+    /**
+     * 根据开始日期结束日期生成sql片段 因为每个单据的日期字段不一样,所以这样处理
+     *
+     * @param billType
+     * @param beginDate
+     * @param endDate
+     * @return
+     */
+    private static String getDateFilterSql(String billType, String beginDate, String endDate) {
+        StringBuffer dateSql = new StringBuffer();
+        String beginDateField = "";
+        String endDateField = "";
+        switch (billType) {
+            case IAttendCommonUtil.BILL_TYPE_LEAVE:
+                beginDateField = LeaveVO.BEGINTIME;
+                endDateField = LeaveVO.ENDTIME;
+                break;
+
+            case IAttendCommonUtil.BILL_TYPE_ATTENDANCE:
+                beginDateField = AttendanceVO.FILL_DATE;
+                break;
+
+            case IAttendCommonUtil.BILL_TYPE_TRIPOFF:
+                beginDateField = TripoffVO.TRIPOFFBEGINTIME;
+                endDateField = TripoffVO.TRIPOFFENDTIME;
+                break;
+
+            case IAttendCommonUtil.BILL_TYPE_LEAVEOFF:
+                beginDateField = LeaveoffVO.LEAVEOFFBEGINTIME;
+                endDateField = LeaveoffVO.LEAVEOFFENDTIME;
+                break;
+
+            case IAttendCommonUtil.BILL_TYPE_OUTSIDE:
+                beginDateField = OutSideVO.SIGNDATE;
+                break;
+
+            case IAttendCommonUtil.BILL_TYPE_OVERTIME:
+                beginDateField = OverTimeVO.OVERTIMEBEGINTIME;
+                endDateField = OverTimeVO.OVERTIMEENDTIME;
+                break;
+            case IAttendCommonUtil.BILL_TYPE_TRIP:
+                beginDateField = TripVO.TRIPBEGINTIME;
+                endDateField = TripVO.TRIPENDTIME;
+                break;
+
+            default:
+                break;
+        }
+        dateSql.append(" and ( ");
+        if (StringUtils.isNotEmpty(beginDateField)) {
+            dateSql.append("( ");
+            if (StringUtils.isNotBlank(beginDate)) {
+                dateSql.append(beginDateField + " >= '" + beginDate + " 00:00:00' ");
+            }
+            if (StringUtils.isNotBlank(endDate)) {
+                dateSql.append(" and " + beginDateField + " <= '" + endDate + " 23:59:59' ");
+            }
+            dateSql.append(") ");
+        }
+        if (StringUtils.isNotEmpty(endDateField)) {
+            dateSql.append("or ( ");
+            if (StringUtils.isNotBlank(beginDate)) {
+                dateSql.append(endDateField + " >= '" + beginDate + " 00:00:00' ");
+            }
+            if (StringUtils.isNotBlank(endDate)) {
+                dateSql.append(" and " + endDateField + " <= '" + endDate + " 23:59:59' ");
+            }
+            dateSql.append(") ");
+        }
+        if (StringUtils.isNotEmpty(beginDateField) && StringUtils.isNotEmpty(endDateField)) {
+            dateSql.append("or (");
+            if (StringUtils.isNotBlank(beginDate)) {
+                dateSql.append(beginDateField + " <= '" + beginDate + " 00:00:00' ");
+            }
+            if (StringUtils.isNotBlank(endDate)) {
+                dateSql.append(" and " + endDateField + " >= '" + endDate + " 23:59:59' ");
+            }
+            dateSql.append(") ");
+        }
+        dateSql.append(")");
+        return dateSql.toString();
+    }
+
+    /**
+     * 查询hr组织
+     *
+     * @return String[]
+     * @throws BusinessException BusinessException
+     */
+    @SuppressWarnings("unchecked")
+    private String[] queryOrgList() throws BusinessException {
+        String sql = "select pk_adminorg from org_adminorg";
+        List<String> orgList = (List<String>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sql,
+                new StringListProcessor());
+        if (CollectionUtils.isEmpty(orgList)) {
+            return null;
+        }
+        String[] pkOrgs = orgList.toArray(new String[0]);
+        // 行政组织
+        OrgVO[] orgVOs = NCLocator.getInstance().lookup(IPrimaryOrgQry.class)
+                .queryPrimaryOrgVOs(IPrimaryOrgQry.CONTROLTYPE_ADMINORG, pkOrgs);
+
+        return StringPiecer.getStrArray(orgVOs, OrgVO.PK_ORG);
+    }
+
+
+    /**
+     * 查询有权限的组织
+     *
+     * @param userId userId
+     * @param pkGroup pkGroup
+     * @param appCode appCode
+     * @return String[]
+     */
+    private String[] queryPowerOrgList(String userId, String pkGroup, String appCode) {
+        try {
+            String[] orgIds = NCLocator.getInstance().lookup(IAppAndOrgPermQueryPubService.class).queryUserPermOrgPksByAppAndWithOrgTypesFilter(userId,appCode,new String[]{IOrgConst.ADMINORGTYPE},pkGroup);
+            if (orgIds == null || orgIds.length == 0) {
+                return null;
+            }
+            InSQLCreator isc = new InSQLCreator();
+            String strInSql = isc.getInSQL(orgIds);
+            String sql = null;
+            if(strInSql.startsWith("(")) {
+                sql = "(select org_adminorg.pk_adminorg from org_adminorg inner join org_admin_enable on org_adminorg.pk_adminorg=org_admin_enable.pk_adminorg where org_adminorg.enablestate = 2 and org_adminorg.islastversion = 'Y' and org_adminorg.dr = 0 and org_adminorg.pk_adminorg in "+ strInSql + ")";
+            } else {
+                sql = "(select org_adminorg.pk_adminorg from org_adminorg inner join org_admin_enable on org_adminorg.pk_adminorg=org_admin_enable.pk_adminorg where org_adminorg.enablestate = 2 and org_adminorg.islastversion = 'Y' and org_adminorg.dr = 0 and org_adminorg.pk_adminorg in ("+ strInSql + "))";
+            }
+            List<String> powerOrgIds = (List<String>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sql,
+                    new StringListProcessor());
+            if(CollectionUtils.isEmpty(powerOrgIds)) {
+                return null;
+            }
+            return powerOrgIds.toArray(new String[0]);
+        } catch (BusinessException e) {
+            Logger.error(e.getMessage(), e);
+        }
+        return null;
+    }
+
+
+    @SuppressWarnings({"unchecked", "deprecation"})
+    private List<String> doQueryBillList(String billType, String where, String order, String pkGroup, String userId, String appCode) throws BusinessException {
+        // 按排序查询所有数据的pk
+        StringBuffer sqlAll = new StringBuffer(" select ");
+        SuperVO superVO = IAttendCommonUtil.beanMap.get(billType);
+        String pkFieldName = superVO.getPKFieldName();
+        String tableName = superVO.getTableName();
+        sqlAll.append(pkFieldName + " ");
+        sqlAll.append(" from ");
+        sqlAll.append(tableName + " ");
+        sqlAll.append(where);
+        if (StringUtils.isNotBlank(pkGroup)) {
+            sqlAll.append(" and pk_group = '" + pkGroup + "'");
+        }
+        if (StringUtils.isNotBlank(order)) {
+            sqlAll.append(" order by " + order);
+        }
+        Logger.error("sqlAll:" + sqlAll);
+        return (List<String>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sqlAll.toString(),
+                new StringListProcessor());
+    }
+
+
+    /**
+     * 获取当前登录人有权限的部门
+     *
+     * @param userId  用户
+     * @param PkGroup 集团
+     * @param appCode appCode
+     * @return 返回sql
+     * @throws BusinessException
+     */
+    private String getPowerDeptCondition(String userId, String PkGroup, String appCode) throws BusinessException {
+        IAppAndOrgPermQueryPubService service = NCLocator.getInstance().lookup(IAppAndOrgPermQueryPubService.class);
+
+        String[] deptIds = service.queryUserPermOrgPksByAppAndWithOrgTypesFilter(userId, appCode, new String[]{IOrgConst.DEPTORGTYPE}, PkGroup);
+        if (deptIds == null || deptIds.length == 0) {
+            return null;
+        }
+        InSQLCreator isc = new InSQLCreator();
+        String strInSql = null;
+        try {
+            strInSql = isc.getInSQL(deptIds);
+        } catch (BusinessException e) {
+            Logger.error(e.getMessage(), e);
+            throw new RuntimeException(ResHelper.getString("6020hrkq", "6020hrkq00014")
+                    /*@res "查询有权限部门异常!" */);
+        }
+        if (strInSql.startsWith("(")) {
+            return "(select org_dept.pk_dept from org_dept inner join org_admin_enable on org_dept.pk_org=org_admin_enable.pk_adminorg where org_dept.hrcanceled<>'Y' and org_dept.pk_dept in " + strInSql + ")";
+        } else {
+            return "(select org_dept.pk_dept from org_dept inner join org_admin_enable on org_dept.pk_org=org_admin_enable.pk_adminorg where org_dept.hrcanceled<>'Y' and org_dept.pk_dept in (" + strInSql + "))";
+        }
+    }
+
+
+    /**
+     * 获取有权限部门map
+     *
+     * @param userId  userId
+     * @param PkGroup pkGroup
+     * @param appCode appCode
+     * @return map
+     * @throws BusinessException BusinessException
+     */
+    private Map<String, String> getPowerDeptMap(String userId, String PkGroup, String appCode) throws BusinessException {
+        IAppAndOrgPermQueryPubService service = NCLocator.getInstance().lookup(IAppAndOrgPermQueryPubService.class);
+
+        String[] deptIds = service.queryUserPermOrgPksByAppAndWithOrgTypesFilter(userId, appCode, new String[]{IOrgConst.DEPTORGTYPE}, PkGroup);
+        if (deptIds == null || deptIds.length == 0) {
+            return null;
+        }
+        InSQLCreator isc = new InSQLCreator();
+        String strInSql = null;
+        try {
+            strInSql = isc.getInSQL(deptIds);
+        } catch (BusinessException e) {
+            Logger.error(e.getMessage(), e);
+            throw new RuntimeException(ResHelper.getString("6020hrkq", "6020hrkq00014")
+                    /*@res "查询有权限部门异常!" */);
+        }
+        String sql;
+        if (strInSql.startsWith("(")) {
+            sql = "(select org_dept.pk_dept from org_dept inner join org_admin_enable on org_dept.pk_org=org_admin_enable.pk_adminorg where org_dept.hrcanceled<>'Y' and org_dept.pk_dept in " + strInSql + ")";
+        } else {
+            sql = "(select org_dept.pk_dept from org_dept inner join org_admin_enable on org_dept.pk_org=org_admin_enable.pk_adminorg where org_dept.hrcanceled<>'Y' and org_dept.pk_dept in (" + strInSql + "))";
+        }
+        List<String> powerDeptIds = (List<String>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sql,
+                new StringListProcessor());
+        Map<String, String> deptMap = new HashMap<>();
+        for (String powerDeptId : powerDeptIds) {
+            if (!deptMap.containsKey(powerDeptId)) {
+                deptMap.put(powerDeptId, "1");
+            }
+        }
+        if (deptMap.isEmpty()) {
+            return null;
+        }
+        return deptMap;
+    }
+
+
+    /**
+     * 查询部门的下级部门
+     *
+     * @param pkDept 部门id
+     * @return string
+     */
+    private String getChildrenDeptById(String pkDept, Map<String, String> deptMap) {
+        IPersistenceRetrieve persistenceRetrieve = NCLocator.getInstance().lookup(IPersistenceRetrieve.class);
+        SuperVO deptVO;
+        String strInSql;
+        try {
+            deptVO = persistenceRetrieve.retrieveByPk(DeptVO.class, pkDept, null);
+            if (deptVO == null) {
+                return null;
+            }
+            // 获取所选部门的innercode
+            String innercode = (String) deptVO.getAttributeValue("innercode");
+            String sql = "select org_dept.pk_dept from org_dept inner join org_admin_enable on org_dept.pk_org=org_admin_enable.pk_adminorg where org_dept.hrcanceled<>'Y' and org_dept.innercode like '" + innercode + "%'";
+            List<String> deptIds = (List<String>) NCLocator.getInstance().lookup(IUAPQueryBS.class).executeQuery(sql,
+                    new StringListProcessor());
+            InSQLCreator isc = new InSQLCreator();
+            if(deptMap.isEmpty()) {
+                strInSql = isc.getInSQL(deptIds.toArray(new String[0]));
+            } else {
+                List<String> ids = new ArrayList<>();
+                for (String deptId : deptIds) {
+                    if (deptMap.containsKey(deptId)) {
+                        ids.add(deptId);
+                    }
+                }
+                strInSql = isc.getInSQL(ids.toArray(new String[0]));
+            }
+        } catch (BusinessException e) {
+            Logger.error(e.getMessage(), e);
+            throw new RuntimeException(ResHelper.getString("6020hrkq", "6020hrkq00039")
+                    /*@res "查询下级部门异常!" */);
+        }
+        return strInSql;
+    }
+}

+ 1 - 1
hrkq/hrkq/src/private/nccloud/impl/hrkq/hrkq/MonthottimevoMaintainImpl.java

@@ -90,7 +90,7 @@ public class MonthottimevoMaintainImpl extends AceAggbusiMonthOtTimeVOPubService
 		public AggMonthOtTimeVO queryByPk(String pk) throws BusinessException {
 			AggMonthOtTimeVO aggvo = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByPK(AggMonthOtTimeVO.class, pk, false);
 			if(aggvo != null) {
-				Collection<MonthOtTimeBVO> bbills = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByCond(MonthOtTimeBVO.class, "pk_monthottime" + "='" + pk + "'", true,
+				Collection<MonthOtTimeBVO> bbills = MDPersistenceService.lookupPersistenceQueryService().queryBillOfVOByCond(MonthOtTimeBVO.class, "pk_monthottime" + "='" + pk + "' and dr = 0", true,
 		                false);
 				aggvo.setChildrenVO(bbills.toArray(new MonthOtTimeBVO[0]));
 			}

+ 59 - 7
hrrpt/nccloud/src/client/nccloud/web/hr/rpt/action/WaRptQryAfterEditAction.java

@@ -22,6 +22,7 @@ import nc.vo.uif2.LoginContext;
 import nc.vo.wa.category.WaClassVO;
 import nc.vo.wa.classitem.WaClassItemVO;
 import nc.vo.wa.item.WaItemVO;
+import nc.vo.wa.paydata.WaClassItemShowInfVO;
 import nc.vo.wa.paydata.WaPaydataDspVO;
 import nc.vo.wa.pub.PeriodStateVO;
 import nc.vo.wa.pub.WaLoginContext;
@@ -41,6 +42,8 @@ import nccloud.web.hr.pub.HRNccTemplateUtils;
 import nccloud.web.hr.pub.HRNccUtils;
 import nccloud.web.hr.rpt.pub.INccHrRptConst;
 import nccloud.web.hrhi.pub.PsndocTempUtils;
+import nccloud.web.hrwa.helper.WaLoginContextUtils;
+import nccloud.web.hrwa.paydata.action.WaPaydataClassItemHelper;
 import nccloud.web.uapbd.commons.web.ParamUtils;
 
 /**
@@ -52,6 +55,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 	public <T> Object execute(IRequest iRequest, T t) throws Exception {
 		ParamUtils param = new ParamUtils(iRequest);
 		LoginContext loginContext = HRNccUtils.getLoginContext(param);
+		WaLoginContext context = WaLoginContextUtils.getWaLoginContext(param);
 
 		String areaCode = param.getString("area_code", null);
 		if (StringUtils.isBlank(areaCode)) {
@@ -90,7 +94,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 				waGlobalVO.setWaClassPK(waClassPk);
 				waGlobalVO.setWaYear(Cyear);
 				result.put("item_list", getItemList(waGlobalVO, 0));
-				extracted(result, vo);
+				extracted(result, vo,context);
 				return result;
 			}
 		} else if ("WaItemQueryConditionPanelForGroup".equals(areaCode) || "WaBaseQueryConditionPanel".equals(areaCode) || "WaSumByPsnclQueryConditionPanel".equals(areaCode)
@@ -134,7 +138,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 					waGlobalVO.setCurUserid(loginContext.getPk_loginUser());
 				}
 				result.put("item_list", getItemList(waGlobalVO, 0));
-				extracted(result, vo);
+				extracted(result, vo,context);
 				if ("WaBaseQueryConditionPanel".equals(areaCode) || "WaSumByDeptQueryConditionPanel".equals(areaCode) || "WaItemQueryConditionPanel".equals(areaCode)) {
 					// 这三个要查询数值型薪资项目和字符型薪资项目
 					IPaydataQueryService service = ServiceLocator.find(IPaydataQueryService.class);
@@ -195,7 +199,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 				waGlobalVO.setWaClassPK(waClassPk);
 				waGlobalVO.setWaYear(Cyear);
 				result.put("item_list", getItemList(waGlobalVO, 0));
-				extracted(result, vo);
+				extracted(result, vo,context);
 				return result;
 			}
 		} else if ("WaMultiRptQueryConditionPanel".equals(areaCode)) {
@@ -225,7 +229,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 				}
 				WaItemVO[] items = ServiceLocator.find(IClassitemQry.class).queryItemInfoWithPowerForMutiClasses(waGlobalVOs, 0);
 				result.put("item_list", createList(items));
-				extracted(result, vo);
+				extracted(result, vo,context);
 				return result;
 			}
 		} else if ("OrgWaAccountQueryConditionPanel".equals(areaCode) || "DeptWaAccountQueryConditionPanel".equals(areaCode)) {
@@ -252,7 +256,7 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 		return result;
 	}
 
-	private void extracted(HashMap result, GeneralVO vo) throws BusinessException {
+	private void extracted(HashMap result, GeneralVO vo,WaLoginContext context) throws BusinessException {
 		//add by@chenzf 添加薪资发放设置的通用项目 2022-5-23 17:49:52 begin 
 		if(result.get("item_list") != null) {
 			List<Map> map = (List<Map>) result.get("item_list");
@@ -260,21 +264,69 @@ public class WaRptQryAfterEditAction extends HRCommonAction {
 			List<Map> ymap = new ArrayList();//已选
 			if(map.size() > 0) {
 				String waClassPk = (String) vo.getAttributeValue(WaProviderConst.WA_CLASS_PK);
-//				select * from wa_paydatadsp where type = 0 and pk_wa_class = '1001A1100000000MYC7Z' and bshow = 'Y' and iswaitem = 'Y' order by displayseq;
+				String baseCperiod = (String) vo.getAttributeValue(WaProviderConst.BASE_CPERIOD);
+				WaLoginVO waLoginVO = null;
+				if (baseCperiod != null && baseCperiod.length() == 6) {
+					String m_waYear = baseCperiod.substring(0, 4);
+					String m_waPeriod = baseCperiod.substring(4, baseCperiod.length());
+					// 设置薪资类别参数
+					waLoginVO = new WaLoginVO();
+					waLoginVO.setPk_wa_class(waClassPk);
+					waLoginVO.setPk_prnt_class(waClassPk);
+					waLoginVO.setCyear(m_waYear);
+					waLoginVO.setCperiod(m_waPeriod);
+					waLoginVO.setPk_org(context.getPk_org());
+					waLoginVO.setPk_group(context.getPk_group());
+					context.setWaLoginVO(waLoginVO);
+				}
 				List<WaPaydataDspVO> list = ServiceLocator.find(IClassitemQry.class).queryWaPaydataDspVOByPkWaClass(waClassPk);
 				if(list != null && list.size() > 0) {
 					List<String> keyList = new ArrayList();
 					for(WaPaydataDspVO dspVO : list) {
 						keyList.add(dspVO.getItem_key());
 					}
+					for(String key : keyList) {
+						for(Map m : map) {
+							if(key.equals(m.get("itemkey"))) {
+								ymap.add(m);
+							}
+						}
+					}
 					for(Map m : map) {
 						if(keyList.contains(m.get("itemkey"))) {
-							ymap.add(m);
+//							ymap.add(m);
 						} else {
 							dmap.add(m);
 						}
 					}
 				}
+//				WaClassItemVO[] waClassItemVO = ServiceLocator.find(IClassitemQry.class).getUserShowClassItemVOs(context);
+//				if(list != null && list.size() > 0) {
+//					List<String> keyList = new ArrayList();
+//					if(waClassItemVO != null && waClassItemVO.length > 0) {
+//						for(WaClassItemVO item : waClassItemVO) {
+//							for(WaPaydataDspVO dspVO : list) {
+//								if(item.getItemkey().equals(dspVO.getItem_key())) {
+//									keyList.add(item.getItemkey());
+//								}
+//							}
+//						}
+//					}
+//					for(String key : keyList) {
+//						for(Map m : map) {
+//							if(key.equals(m.get("itemkey"))) {
+//								ymap.add(m);
+//							}
+//						}
+//					}
+//					for(Map m : map) {
+//						if(keyList.contains(m.get("itemkey"))) {
+////							ymap.add(m);
+//						} else {
+//							dmap.add(m);
+//						}
+//					}
+//				}
 			}
 			result.put("item_list", dmap);
 			result.put("yitem_list", ymap);

+ 118 - 0
hrrpt/nccloud/src/client/nccloud/web/hr/rpt/action/WaRptQryBeforeEditAction.java

@@ -0,0 +1,118 @@
+package nccloud.web.hr.rpt.action;
+
+import nc.vo.hr.tools.pub.GeneralVO;
+import nc.vo.pub.BusinessRuntimeException;
+import nc.vo.uif2.LoginContext;
+import nc.wa.smartmodel.provider.util.WaProviderConst;
+import nccloud.framework.web.container.IRequest;
+import nccloud.web.hr.pub.HRCommonAction;
+import nccloud.web.hr.pub.HRNccTemplateUtils;
+import nccloud.web.hr.pub.HRNccUtils;
+import nccloud.web.hrhi.pub.PsndocTempUtils;
+import nccloud.web.uapbd.commons.web.ParamUtils;
+import nccloud.commons.lang.StringUtils;
+
+import java.util.HashMap;
+
+/**
+ * 编辑前事件
+ */
+public class WaRptQryBeforeEditAction extends HRCommonAction {
+
+	@Override
+	public <T> Object execute(IRequest iRequest, T t) throws Exception {
+		ParamUtils param = new ParamUtils(iRequest);
+		LoginContext loginContext = HRNccUtils.getLoginContext(param);
+
+		String areaCode = param.getString("area_code", null);
+		if (StringUtils.isBlank(areaCode)) {
+			throw new BusinessRuntimeException("Parameter Error!");
+		}
+
+		String itemKey = param.getString("key", null);
+		if (StringUtils.isBlank(itemKey)) {
+			throw new BusinessRuntimeException("Parameter Error!");
+		}
+		HashMap result = new HashMap();
+		result.put("editable", true);
+		// model参数
+		GeneralVO vo = HRNccTemplateUtils.getVOFromForm(GeneralVO.class, PsndocTempUtils.getModelStr(param, null));
+		if ("WaAccountByYearQueryConditionPanel".equals(areaCode)) {
+			// 单位年度工资台账
+			if (WaProviderConst.BASE_CYEAR.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_wa_class", vo.getAttributeValue(WaProviderConst.WA_CLASS_PK));
+				result.put("refParam", refParam);
+				return result;
+			} else if (WaProviderConst.WA_CLASS_PK.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_org", loginContext.getPk_org());
+				refParam.put("pk_group", loginContext.getPk_group());
+				result.put("refParam", refParam);
+				return result;
+			}
+		} else if ("WaItemQueryConditionPanelForGroup".equals(areaCode) || "WaBaseQueryConditionPanel".equals(areaCode) || "WaSumByPsnclQueryConditionPanel".equals(areaCode)
+				|| "WaSumByDeptQueryConditionPanel".equals(areaCode) || "WaItemQueryConditionPanel".equals(areaCode)) {
+			// 集团级薪资明细表&薪资变动***表&人员类别汇总表&部门汇总表&薪资明细表
+			if (WaProviderConst.BASE_CPERIOD.equals(itemKey) || WaProviderConst.COMPARE_CPERIOD.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_wa_class", vo.getAttributeValue(WaProviderConst.WA_CLASS_PK));
+				result.put("refParam", refParam);
+				return result;
+			} else if (WaProviderConst.WA_CLASS_PK.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_org", loginContext.getPk_org());
+				refParam.put("pk_group", loginContext.getPk_group());
+				result.put("refParam", refParam);
+				return result;
+			}
+		} else if ("WaAccountByMonthQueryConditionPanel".equals(areaCode)) {
+			// 年度对比分析
+			if (WaProviderConst.BASE_CYEAR.equals(itemKey) || WaProviderConst.COMPARE_CYEAR.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_wa_class", vo.getAttributeValue(WaProviderConst.WA_CLASS_PK));
+				result.put("refParam", refParam);
+				return result;
+			} else if (WaProviderConst.WA_CLASS_PK.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_org", loginContext.getPk_org());
+				refParam.put("pk_group", loginContext.getPk_group());
+				result.put("refParam", refParam);
+				return result;
+			}
+		} else if ("WaMultiRptQueryConditionPanel".equals(areaCode)) {
+			if (WaProviderConst.WA_CLASS_PK.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("waYear", vo.getAttributeValue(WaProviderConst.CAC_CYEAR));
+				String cacCperiod = (String) vo.getAttributeValue(WaProviderConst.CAC_CPERIOD);
+				if (cacCperiod != null && cacCperiod.trim().length() == 1) {
+					cacCperiod = "0" + cacCperiod.trim();
+				}
+				refParam.put("waPeriod", cacCperiod);
+				refParam.put("pk_org", loginContext.getPk_org());
+				result.put("refParam", refParam);
+				return result;
+			}
+		}
+		
+		if("WaSumByDeptQueryConditionPanel".equals(areaCode) || "DeptWaAccountQueryConditionPanel".equals(areaCode)){
+			if (WaProviderConst.SUM_DEPT.equals(itemKey)) {
+				HashMap refParam = new HashMap();
+				// ) 子表的部门不限制是否撤销,保存时交验
+				refParam.put("pk_org", loginContext.getPk_org());
+				refParam.put("pk_group", loginContext.getPk_group());
+				result.put("refParam", refParam);
+				return result;
+			}
+		}
+
+		return result;
+	}
+}

+ 91 - 0
hrrpt/nccloud/src/private/nc/impl/wa/rpt/ClassitemImpl.java

@@ -6,15 +6,21 @@ import java.util.List;
 import java.util.Vector;
 
 import nc.bs.dao.BaseDAO;
+import nc.hr.utils.PubEnv;
 import nc.hr.utils.SQLHelper;
 import nc.itf.hr.wa.IClassitemQry;
 import nc.itf.org.IOrgConst;
+import nc.jdbc.framework.SQLParameter;
 import nc.jdbc.framework.processor.BeanListProcessor;
 import nc.jdbc.framework.processor.ResultSetProcessor;
 import nc.vo.hr.pub.FormatVO;
 import nc.vo.pub.BusinessException;
+import nc.vo.wa.classitem.WaClassItemVO;
+import nc.vo.wa.func.WherePartUtil;
 import nc.vo.wa.item.WaItemVO;
 import nc.vo.wa.paydata.WaPaydataDspVO;
+import nc.vo.wa.pub.WaLoginContext;
+import nc.vo.wa.pub.WaLoginVO;
 import nc.wa.smartmodel.provider.util.WaGlobalVO;
 import nccloud.commons.lang.StringUtils;
 /**
@@ -283,4 +289,89 @@ public class ClassitemImpl implements IClassitemQry{
 		List<WaPaydataDspVO> list = (List<WaPaydataDspVO>) dao.executeQuery(sql, new BeanListProcessor(WaPaydataDspVO.class));
 		return list;
 	}
+	
+	/**
+	 * 查询用户设置显示的项目
+	 * 
+	 * wa_classitemdsp 该表已经不用了
+	 *
+	 * @author liangxr on 2010-7-2
+	 * @param loginVO
+	 * @return
+	 * @throws BusinessException
+	 */
+	public WaClassItemVO[] getUserShowClassItemVOs(WaLoginContext loginVO) throws BusinessException {
+		String condition = " wa_classitem.pk_wa_classitem not in (select pk_wa_classitem from wa_classitemdsp "
+				+ "where pk_wa_class = '" + loginVO.getWaLoginVO().getPk_wa_class() + "' and cyear = '" + loginVO.getWaLoginVO().getCyear()
+				+ "' and cperiod = '" + loginVO.getWaLoginVO().getCperiod()+ "' and pk_user = '" + PubEnv.getPk_user()
+				+ "' and bshow = 'N' )";
+		WaClassItemVO[] classitems = testgetRoleClassItemVOs(loginVO.getWaLoginVO(), condition);
+		return classitems;
+	}
+	
+	/**
+	 * 获取薪资发放项目
+	 *
+	 * @author liangxr on 2010-5-13
+	 * @param waLoginVO
+	 * @return
+	 * @throws BusinessException
+	 */
+	private WaClassItemVO[] testgetRoleClassItemVOs(WaLoginVO waLoginVO, String condition) throws BusinessException {
+
+		StringBuffer sqlBuffer = new StringBuffer();
+		sqlBuffer.append(" select wa_item.itemkey, wa_item.iitemtype,wa_item.defaultflag, ");
+		sqlBuffer.append(" wa_item.ifldwidth,wa_item.category_id, ");
+		sqlBuffer.append(" wa_classitem.*, 'Y' editflag,");
+		sqlBuffer.append(" 'Y' as showflag,");
+		sqlBuffer.append(" wa_classitem.idisplayseq as idisplayseq,  ");
+		sqlBuffer.append("itempower.editflag ");
+		sqlBuffer.append("from wa_classitem , wa_item,");
+		sqlBuffer.append("(SELECT pk_wa_item,MAX(editflag) as editflag");
+		sqlBuffer.append("   FROM wa_itempower ");
+		// 判断是否是多次发放
+		// WaClassVO parentvo = NCLocator.getInstance().lookup(IWaClass.class)
+		// .queryParentClass(waLoginVO.getPk_wa_class(),
+		// waLoginVO.getCyear(), waLoginVO.getCperiod());
+
+		sqlBuffer.append("  WHERE pk_wa_class = '" + waLoginVO.getPk_prnt_class() + "'");
+		sqlBuffer.append("    AND pk_group ='" + waLoginVO.getPk_group() + "'");
+
+		// 20160104 shenliangc NCdp205568081 已审批通过的发放申请通知消息,打开单据后,单据子表的审批项目丢失
+		// 历史遗留问题,通知消息双击打开发放申请节点,查询审批项目时waLoginVO.getPk_org()得到的是系统默认主组织,而不是正确的方案主组织。
+		sqlBuffer.append("    AND pk_org = (select pk_org from wa_waclass where pk_wa_class = '"
+				+ waLoginVO.getPk_prnt_class() + "')");
+		// sqlBuffer.append(" AND pk_org = '"+waLoginVO.getPk_org()+"'");
+
+		sqlBuffer.append("    AND ( pk_subject IN(SELECT pk_role ");
+		sqlBuffer.append("				       FROM sm_user_role ");
+		sqlBuffer.append("				      WHERE cuserid = '" + PubEnv.getPk_user() + "'");
+		sqlBuffer.append("                   ) or pk_subject = '" + PubEnv.getPk_user() + "') ");
+		sqlBuffer.append("  GROUP BY pk_wa_item ) as itempower");
+		sqlBuffer.append(" where wa_classitem.pk_wa_item = wa_item.pk_wa_item ");
+		sqlBuffer.append(" and wa_classitem.pk_wa_item = itempower.pk_wa_item ");
+		sqlBuffer.append(" and wa_classitem.pk_wa_class = ? ");
+		sqlBuffer.append(" and wa_classitem.cyear = ?  and wa_classitem.cperiod = ? ");
+		sqlBuffer.append(WherePartUtil.formatAddtionalWhere(condition));
+		sqlBuffer.append(" order by wa_classitem.idisplayseq");
+
+		SQLParameter parameter = this.getCommonParameter(waLoginVO);
+		List<WaClassItemVO> list = (List<WaClassItemVO>) dao.executeQuery(sqlBuffer.toString(), parameter, new BeanListProcessor(WaClassItemVO.class));
+		return list.toArray(new WaClassItemVO[0]);
+	}
+	
+	/**
+	 * pk_wa_class year, period
+	 *
+	 * @author zhangg on 2009-12-2
+	 * @param waLoginVO
+	 * @return
+	 */
+	public SQLParameter getCommonParameter(WaLoginVO waLoginVO) {
+		SQLParameter parameter = new SQLParameter();
+		parameter.addParam(waLoginVO.getPk_wa_class());
+		parameter.addParam(waLoginVO.getCyear());
+		parameter.addParam(waLoginVO.getCperiod());
+		return parameter;
+	}
 }

+ 13 - 0
hrrpt/nccloud/src/public/nc/itf/hr/wa/IClassitemQry.java

@@ -3,8 +3,10 @@ package nc.itf.hr.wa;
 import java.util.List;
 
 import nc.vo.pub.BusinessException;
+import nc.vo.wa.classitem.WaClassItemVO;
 import nc.vo.wa.item.WaItemVO;
 import nc.vo.wa.paydata.WaPaydataDspVO;
+import nc.vo.wa.pub.WaLoginContext;
 import nc.wa.smartmodel.provider.util.WaGlobalVO;
 /**
  * 薪资项目 查询 服务接口
@@ -51,5 +53,16 @@ public interface IClassitemQry {
 	 */
 	public abstract List<WaPaydataDspVO> queryWaPaydataDspVOByPkWaClass(String pk_wa_class) throws BusinessException;
 	
+	/**
+	 * 查询用户设置显示的项目
+	 * 
+	 * wa_classitemdsp 该表已经不用了
+	 *
+	 * @author liangxr on 2010-7-2
+	 * @param loginVO
+	 * @return
+	 * @throws BusinessException
+	 */
+	public WaClassItemVO[] getUserShowClassItemVOs(WaLoginContext loginVO) throws BusinessException;
 }
 

+ 2 - 0
hrtrn/src/client/nccloud/web/hryf/transapply/action/TransAddAction.java

@@ -70,6 +70,8 @@ public class TransAddAction extends TransBaseAction {
              ((StapplyVO) aggvo.getParentVO()).setBusiness_type(flow[0].getPk_businesstype());
         }
 		
+		//默认为false
+		((StapplyVO) aggvo.getParentVO()).setAttributeValue("ifsynwork", UFBoolean.FALSE);
 		//返回前后项目模板
 		PageMeta pm = showAllSetItems(context, HRYFConst.APPCODE_TRANAPPLY, HRYFConst.PAGECODE_TRANAPPLY, true, items, false);
         ((FormMeta) pm.getAreaMeta(TRNConst.TRNS_NEWINFO_TAB)).getItemByCode(StapplyVO.NEWPK_POSTSERIES).setDisabled(false);