package nc.impl.hi.psndoc; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Date; import java.util.List; import nc.bs.dao.BaseDAO; import nc.bs.dao.DAOException; import nc.bs.logging.Logger; import nc.hr.utils.InSQLCreator; import nc.hr.utils.ResHelper; import nc.hr.utils.SQLHelper; import nc.itf.hi.IPsndocTrainService; import nc.jdbc.framework.processor.BeanListProcessor; import nc.vo.hi.psndoc.TrainVO; import nc.vo.hi.wadoc.PsndocWadocVO; import nc.vo.pub.BusinessException; import nc.vo.uif2.LoginContext; import nccloud.commons.lang.ArrayUtils; public class PsndocTrainServiceImpl implements IPsndocTrainService { private final int PSNNAME = 1; private final int PSNCODE = 0; private BaseDAO baseDAO; public BaseDAO getBaseDAO() { if(baseDAO == null) { baseDAO = new BaseDAO(); } return baseDAO; } @Override public TrainVO[] importData2DB(TrainVO[] trainVOs, LoginContext context) throws BusinessException { return extendInertVoinfo(trainVOs, context); } /** * 对导入的数据集进行分析处理
* 1)判断导入数据的各项目是否合法
* 合法:导入数据库
* 非法:判断原因存储,回显给用户
* 2)返回 导入后信息
* * @author xuhw on 2010-4-21 * @param psndocWadocVOs * @return * @throws BusinessException */ private TrainVO[] extendInertVoinfo(TrainVO[] trainVOs, LoginContext context) throws BusinessException{ // 数据合法的记录集合 List successImportList = new ArrayList(); // 不合法的记录集合 List failtureImportList = new ArrayList(); TrainVO aftProVO = null; if (ArrayUtils.isEmpty(trainVOs)) { return trainVOs; } int inttt = 0; for (TrainVO trainVO : trainVOs) { aftProVO = this.expandInertVOInfo(trainVO,context); if(aftProVO == null){ //added by zengcheng 2012-07-12,没有查到人,则需要放入不合法的记录,一般都是因为非谈判薪酬,然后金额不符合级档的规定 failtureImportList.add(aftProVO); continue; } if (aftProVO == null) { failtureImportList.add(trainVO); continue; } successImportList.add(aftProVO); } if(successImportList.size() > 0) { getBaseDAO().insertVOArray(successImportList.toArray(new TrainVO[0])); } return queryWaFailedReason(failtureImportList, context); } private TrainVO expandInertVOInfo(TrainVO trainVO, LoginContext context) throws BusinessException{ StringBuffer sbSql = new StringBuffer(); sbSql.append(" select "); sbSql.append(" "+ SQLHelper.getMultiLangNameColumn("bd_psndoc.name")+ " as psnName, "); sbSql.append(" bd_psndoc.code as psnCode, "); sbSql.append(" hi_psnorg.pk_psnorg,"); sbSql.append(" hi_psnjob.pk_psnjob "); sbSql.append(" from "); sbSql.append(" bd_psndoc "); sbSql.append(" inner join hi_psnorg on bd_psndoc.pk_psndoc = hi_psnorg.pk_psndoc "); sbSql.append(" inner join hi_psnjob on hi_psnjob.pk_psndoc = bd_psndoc.pk_psndoc and hi_psnorg.pk_psnorg = hi_psnjob.pk_psnorg"); 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' "); TrainVO[] trainVOs = this.executeQueryVOs(sbSql.toString()); if(trainVOs != null && trainVOs.length > 0) { trainVO.setPk_psnjob(trainVOs[0].getPk_psnjob()); trainVO.setPk_psnorg(trainVOs[0].getPk_psnorg()); return trainVO; } return null; } /** * 查询理由
*
* * @author xuhw on 2010-4-22 * @param failtureImportList * @param content * @return * @throws BusinessException */ private TrainVO[] queryWaFailedReason(List failtureImportList, LoginContext context) throws BusinessException{ try { // 员工信息中无此员工编码的人员 List vNotInBdpsndocByCode = checkFailedInResult(failtureImportList, this .queryInBdpsndocByCode(failtureImportList, context)); failtureImportList = new ArrayList(); failtureImportList.addAll(vNotInBdpsndocByCode); } catch (Exception ex) { throw new BusinessException(ex.getMessage(), ex); } return failtureImportList.toArray(new TrainVO[0]); } /** * 从结果中剔除已经能够判断错误原因的人员的人员 * * @param results * 待确认错误原因的人员 * @param inQueryResult * 已经存在的人员 * @return 剔除了已经存在人员的结果 */ private List checkFailedInResult(List failtureImportList, TrainVO[] inQueryResult){ List psnReasonPersons = new ArrayList(); List otherReasonPsn = new ArrayList(); int length = 0; if (!ArrayUtils.isEmpty(inQueryResult)) { length = inQueryResult.length; } for (int i = 0; i < failtureImportList.size(); i++) { Logger.debug(new Date() + " : checkFailedInResult ----> + " + i); TrainVO trainVO = failtureImportList.get(i); trainVO.setReason("员工信息中编码为[{"+trainVO.getPsnCode()+"}]的员工不存在!\n"); trainVO.setError_flag(PSNCODE); psnReasonPersons.add(trainVO); for (int j = 0; j < length; j++) { String psncode = inQueryResult[j].getPsnCode(); String psnName = inQueryResult[j].getPsnName(); if (psncode.equals(trainVO.getPsnCode())) { if (!psnName.equals(trainVO.getPsnName())) { trainVO.setReason("员工信息中无姓名为[{"+trainVO.getPsnName()+"}]的员工不存在!\n"); trainVO.setError_flag(PSNNAME); } else { psnReasonPersons.remove(trainVO); trainVO.setReason(null); otherReasonPsn.add(trainVO); } } } } failtureImportList.clear();//removeAll(failtureImportList); failtureImportList.addAll(otherReasonPsn); return psnReasonPersons; } /** * 查询人员编码确定的人是否在人员档案中 * * @author xuhw on 2010-4-21 * @param results * @param context * @return * @throws BusinessException * @throws Exception */ public TrainVO[] queryInBdpsndocByCode(List failtureImportList, LoginContext context) throws BusinessException { if (failtureImportList == null || failtureImportList.size() == 0) { return new TrainVO[0]; } String in = new InSQLCreator().getInSQL(failtureImportList.toArray(new TrainVO[0]), TrainVO.PSNCODE); // List list = FormatVO.seperateValueObject(failtureImportList.toArray(new PsndocWadocVO[0])); // String in = ""; // for (CircularlyAccessibleValueObject[] circularlyAccessibleValueObjects : list) // { // if(!StringUtils.isEmpty(in)){ // in += ","; // } // in += FormatVO.formatArrayToString(circularlyAccessibleValueObjects, PsndocWadocVO.PSNCODE, "'"); // } StringBuffer sbSql = new StringBuffer(); sbSql.append(" select "); sbSql.append(" "+ SQLHelper.getMultiLangNameColumn("bd_psndoc.name")+ " as psnname, "); sbSql.append(" bd_psndoc.code as psncode "); sbSql.append(" from "); sbSql.append(" bd_psndoc "); sbSql.append(" inner join hi_psnorg on bd_psndoc.pk_psndoc = hi_psnorg.pk_psndoc "); sbSql.append(" where "); sbSql.append(" bd_psndoc.code in (").append(in).append(") and "); //sbSql.append(" bd_psndoc.pk_org = '").append(context.getPk_org()).append("' and "); //sbSql.append(" bd_psndoc.pk_group = '").append(context.getPk_group()).append("' and "); //跨集团兼职人员定调资数据无法导入 sbSql.append(" hi_psnorg.indocflag = 'Y' and "); // sbSql.append(" hi_psnorg.endflag = 'N' and "); sbSql.append(" hi_psnorg.lastflag = 'Y' "); return this.executeQueryVOs(sbSql.toString()); } public TrainVO[] executeQueryVOs(String sql) throws DAOException { List list = (List)getBaseDAO().executeQuery(sql, new BeanListProcessor(TrainVO.class)); if (list == null || list.size() == 0) { return (TrainVO[])(Object[])Array.newInstance(TrainVO.class, 0); } return (TrainVO[])list.toArray((Object[])Array.newInstance(TrainVO.class, list.size())); } }