package com.kingdee.eas.hr.perf.osf; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.bsf.service.app.IHRMsfService; import com.kingdee.bos.rabbitmq.guava.Lists; import com.kingdee.bos.util.BOSUuid; import com.kingdee.eas.base.message.MessageCategoryFactory; import com.kingdee.eas.base.message.MessageCenterFactory; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.util.app.ContextUtil; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import com.kingdee.shr.base.syssetting.service.MessageServiceUtil; import org.apache.log4j.Logger; import java.sql.*; import java.util.*; import java.util.Date; public class TargetsOrgTaskOSFService implements IHRMsfService { private static final Logger logger = Logger.getLogger(TargetsOrgTaskOSFService.class); @Override public Object process(Context context, Map map) throws EASBizException, BOSException { try { String itypeId = (String) map.get("itypeId"); String id = BOSUuid.create("630FB566").toString(); String creatar = ContextUtil.getCurrentUserInfo(context).getId().toString(); StringBuilder selSql = new StringBuilder(); selSql.append(" select intoDesc,evalStandard,FUSESTATES,FREFSTATES,itypeId, "); selSql.append(" FEFFDT,FSHRBASICITEMID,FUSEPOLICY,FISSYSPRESET,FSTATE, "); selSql.append(" rownum as nums,FHRORGUNITID,itName,itNumber,FCREATORID, "); selSql.append(" FCREATETIME,FLASTUPDATEUSERID,FLASTUPDATETIME,FCONTROLUNITID,fid, "); selSql.append(" qualiOrRation,unit,scoringFormula,rejection,evalStandard1, "); selSql.append(" FRANGE,adminId,FSIMPLENAME "); selSql.append(" from ( "); selSql.append(" select it.FINDECATORDESC \"intoDesc\",it.FEVALSTANDARD \"evalStandard\",'0' FUSESTATES,'0' FREFSTATES,isnull(it.FIndecatorType,'" + itypeId + "') \"itypeId\", "); selSql.append(" sysdate FEFFDT,'jpoAAAGCqGuTc4ee' FSHRBASICITEMID,'100' FUSEPOLICY,'0' FISSYSPRESET,'1' FSTATE, "); selSql.append(" '00000000-0000-0000-0000-000000000000CCE7AED4' FHRORGUNITID, it.FNAME_L2 \"itName\",isnull(it.FNUMBER,(it.FNAME_L2)) \"itNumber\", '" + creatar + "' FCREATORID, "); selSql.append(" sysdate FCREATETIME, '" + creatar + "' FLASTUPDATEUSERID,sysdate FLASTUPDATETIME,'00000000-0000-0000-0000-000000000000CCE7AED4' FCONTROLUNITID,newbosid('630FB561') fid, "); selSql.append(" it.FQualiOrRation \"qualiOrRation\",it.FUNIT \"unit\",it.FSCORINGFORMULA \"scoringFormula\",it.FREJECTION \"rejection\",it.FEVALSTANDARD \"evalStandard1\", "); selSql.append(" '1' FRANGE,peo.FADMINORGUNITID adminId,'" + id + "' FSIMPLENAME"); selSql.append(" from T_EVA_PerfEvaObject peo "); selSql.append(" left join T_EVA_IndicatorTarget it on it.FEvaObjID= peo.fid "); selSql.append(" left join t_org_admin org on org.fid= peo.FADMINORGUNITID "); selSql.append(" where peo.FISORG=1 and peo.FPERSONALGOALSTATUS='3' and peo.FUNITGOALSSTATUS=1 and it.fid is not null "); // selSql.append(" and (it.FNAME_L2||isnull(it.FNUMBER,(it.FNAME_L2))||org.fid) "); // selSql.append(" not in (select t1.fName_l2||isnull(t1.FNUMBER,(t1.FNAME_L2)||t2.fid) "); // selSql.append(" from T_PEF_PerfIndecator t1 left join t_org_admin t2 on t1.FADMINORGUNIT=t2.fid) "); selSql.append(" group by it.FINDECATORDESC ,it.FEVALSTANDARD ,isnull(it.FIndecatorType,'" + itypeId + "'), "); selSql.append(" it.FNAME_L2,isnull(it.FNUMBER,(it.FNAME_L2)),it.FQualiOrRation,it.FUNIT, "); selSql.append(" it.FSCORINGFORMULA,it.FREJECTION,it.FEVALSTANDARD,peo.FADMINORGUNITID ) t1 "); IRowSet rs = DbUtil.executeQuery(context, selSql.toString()); Map> mapMap = Maps.newHashMap(); Map> perfIndecator = Maps.newHashMap(); //进行相同指标合并 while (rs.next()) { Map perfMap = Maps.newLinkedHashMap(); perfMap.put("FINDECATORDESC_L2", rs.getString("intoDesc")); perfMap.put("FEVALSTANDARD", rs.getString("evalStandard")); perfMap.put("FUSESTATES", rs.getString("FUSESTATES")); perfMap.put("FREFSTATES", rs.getString("FREFSTATES")); perfMap.put("FINDECATORTYPEID", rs.getString("itypeId")); perfMap.put("FEFFDT", rs.getDate("FEFFDT")); perfMap.put("FSHRBASICITEMID", rs.getString("FSHRBASICITEMID")); perfMap.put("FUSEPOLICY", rs.getString("FUSEPOLICY")); perfMap.put("FISSYSPRESET", rs.getString("FISSYSPRESET")); perfMap.put("FSTATE", rs.getString("FSTATE")); perfMap.put("FINDEX", rs.getString("nums")); perfMap.put("FHRORGUNITID", rs.getString("FHRORGUNITID")); perfMap.put("FNAME_L2", rs.getString("itName")); perfMap.put("FNUMBER", rs.getString("itNumber")); perfMap.put("FCREATORID", rs.getString("FCREATORID")); perfMap.put("FCREATETIME", rs.getDate("FCREATETIME")); perfMap.put("FLASTUPDATEUSERID", rs.getString("FLASTUPDATEUSERID")); perfMap.put("FLASTUPDATETIME", rs.getDate("FLASTUPDATETIME")); perfMap.put("FCONTROLUNITID", rs.getString("FCONTROLUNITID")); perfMap.put("FID", rs.getString("fid")); perfMap.put("FQUALIORRATION", rs.getString("qualiOrRation")); perfMap.put("FUNIT", rs.getString("unit")); perfMap.put("FSCORINGFORMULAID", rs.getString("scoringFormula")); perfMap.put("FREJECTION", rs.getString("rejection")); perfMap.put("FEVALSTANDARD_L2", rs.getString("evalStandard1")); perfMap.put("FRANGE", rs.getString("FRANGE")); perfMap.put("FADMINORGUNIT", rs.getString("adminId")); perfMap.put("FSIMPLENAME", rs.getString("FSIMPLENAME")); String adminId = rs.getString("adminId"); String key = rs.getString("itName") + rs.getString("itNumber"); Map perfMap1 = perfIndecator.get(key); if(null!=perfMap1) { Set perfSet = (Set) perfMap1.get("perfSet"); if (null == perfSet) { perfSet = Sets.newHashSet(); perfSet.add(adminId); } else { perfSet.add(adminId); } perfMap.put("perfSet", perfSet); }else { Set perfSet = Sets.newHashSet(); perfSet.add(adminId); perfMap.put("perfSet", perfSet); } perfIndecator.put(key, perfMap); String fid = (String) perfMap.get("FID"); String FADMINORGUNIT = (String) perfMap.get("FADMINORGUNIT"); String key2 = (fid + FADMINORGUNIT); Map orgMap = Maps.newHashMap(); orgMap.put("FPERFINDECATORID", fid); orgMap.put("FADMINORGUNIT", FADMINORGUNIT); orgMap.put("key", key); mapMap.put(key2, orgMap); } //进行组织合并 for(Map.Entry> mapEntry : perfIndecator.entrySet()) { String perfKey = mapEntry.getKey(); Map perfMap = mapEntry.getValue(); Set perfSet = (Set) perfMap.get("perfSet"); for (Map.Entry> entry : mapMap.entrySet()){ Map orgMap = entry.getValue(); String orgKey = (String) orgMap.get("key"); String FADMINORGUNIT= (String) orgMap.get("FADMINORGUNIT"); if(perfKey.equals(orgKey)&&perfSet.contains(FADMINORGUNIT)){ orgMap.put("FPERFINDECATORID",perfMap.get("FID")); } } } //插入指标库 for (Map.Entry> entry : perfIndecator.entrySet()) { String key = entry.getKey(); Map perfMap = entry.getValue(); Set perfSet = (Set) perfMap.get("perfSet"); perfMap.remove("perfSet"); StringBuilder sql = new StringBuilder(); sql.append(" select t1.fid "); sql.append(" from T_PEF_PerfIndecator t1 where t1.fName_l2||isnull(t1.FNUMBER,(t1.FNAME_L2))='"+key+"' "); IRowSet rsqy = DbUtil.executeQuery(context, sql.toString()); if (!rsqy.next()){ StringBuilder insertSql = new StringBuilder(); insertSql.append(" insert into T_PEF_PerfIndecator ( "); insertSql.append(" FINDECATORDESC_L2,FEVALSTANDARD,FUSESTATES,FREFSTATES,FINDECATORTYPEID, "); insertSql.append(" FEFFDT,FSHRBASICITEMID,FUSEPOLICY,FISSYSPRESET,FSTATE, "); insertSql.append(" FINDEX,FHRORGUNITID,FNAME_L2,FNUMBER,FCREATORID, "); insertSql.append(" FCREATETIME,FLASTUPDATEUSERID,FLASTUPDATETIME,FCONTROLUNITID,FID, "); insertSql.append(" FQUALIORRATION,FUNIT,FSCORINGFORMULAID,FREJECTION,FEVALSTANDARD_L2, "); insertSql.append(" FRANGE,FADMINORGUNIT,FSIMPLENAME "); insertSql.append(" ) values ( "); insertSql.append(" ?,?,?,?,?,"); insertSql.append(" ?,?,?,?,?,"); insertSql.append(" ?,?,?,?,?,"); insertSql.append(" ?,?,?,?,?,"); insertSql.append(" ?,?,?,?,?,"); insertSql.append(" ?,?,? )"); DbUtil.execute(context, insertSql.toString(), (perfMap.values().toArray())); }else{ String fid = rsqy.getString("fid"); for (Map.Entry> entryMap : mapMap.entrySet()){ Map orgMap = entryMap.getValue(); String orgKey = (String) orgMap.get("key"); String FADMINORGUNIT= (String) orgMap.get("FADMINORGUNIT"); if(key.equals(orgKey)&&perfSet.contains(FADMINORGUNIT)){ orgMap.put("FPERFINDECATORID",fid); } } } } //插入指标库的组织范围 for (Map.Entry> entry : mapMap.entrySet()) { //String key = entry.getKey(); Map orgMap = entry.getValue(); String FPERFINDECATORID = (String) orgMap.get("FPERFINDECATORID"); String FADMINORGUNIT = (String) orgMap.get("FADMINORGUNIT"); String key = FPERFINDECATORID+FADMINORGUNIT; StringBuilder sql = new StringBuilder(); sql.append(" select (FPERFINDECATORID || FADMINID) as ad_orId,fid from T_EVA_IndecatorAdminUseRange where FPERFINDECATORID=?"); IRowSet rsqy = DbUtil.executeQuery(context, sql.toString(), new Object[]{FPERFINDECATORID}); List list1 = Lists.newArrayList(); while (rsqy.next()) { String ad_orId = rsqy.getString("ad_orId"); list1.add(ad_orId); } if (!list1.contains(key)) { StringBuilder insertRangeSql = new StringBuilder(); insertRangeSql.append(" insert into T_EVA_IndecatorAdminUseRange( "); insertRangeSql.append(" FPERFINDECATORID, FADMINID, FISALLOWDOWN, FLASTUPDATEUSERID, FLASTUPDATETIME, FID "); insertRangeSql.append(" ) values(?,?,'1',?,sysdate,newbosid('81B38884'));"); // insertRangeSql.append(" select fid, FADMINORGUNIT, '1', ?, sysdate, newbosid('81B38884') "); // insertRangeSql.append(" from T_PEF_PerfIndecator where FSIMPLENAME=? "); // insertRangeSql.append(" and ((fid || FADMINORGUNIT) not in(select FPERFINDECATORID || FADMINID from T_EVA_IndecatorAdminUseRange)) "); DbUtil.execute(context, insertRangeSql.toString(), new Object[]{FPERFINDECATORID, FADMINORGUNIT, creatar}); } } } catch (Exception e) { logger.error(e.getMessage(), e); this.setErrorMessage(map, e.getMessage(), e.getMessage()); return "err"; } return "ok"; } @Override public void setErrorMessage(Map param, String bizCode, String errorMsg) { IHRMsfService.super.setErrorMessage(param, "500", errorMsg); } }