b82f4ab493d60d7d9179715b7b4d6cce4de400ee.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. package com.kingdee.shr.compensation.service;
  2. import java.math.BigDecimal;
  3. import java.sql.SQLException;
  4. import java.text.DecimalFormat;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Calendar;
  8. import java.util.Collection;
  9. import java.util.HashMap;
  10. import java.util.HashSet;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.Set;
  14. import org.apache.log4j.Logger;
  15. import com.kingdee.bos.BOSException;
  16. import com.kingdee.bos.Context;
  17. import com.kingdee.bos.metadata.MetaDataLoaderFactory;
  18. import com.kingdee.bos.metadata.MetaDataPK;
  19. import com.kingdee.bos.metadata.entity.EntityObjectInfo;
  20. import com.kingdee.eas.base.core.util.EmptyUtil;
  21. import com.kingdee.eas.util.app.ContextUtil;
  22. import com.kingdee.eas.util.app.DbUtil;
  23. import com.kingdee.jdbc.rowset.IRowSet;
  24. import com.kingdee.shr.compensation.CalSchemeInfo;
  25. import com.kingdee.shr.compensation.app.formula.SalaryCalFunction;
  26. import com.kingdee.shr.compensation.app.formula.data.Tools;
  27. import com.kingdee.shr.compensation.app.integrate.CalSubmitItemCollection;
  28. import com.kingdee.shr.compensation.app.integrate.CalSubmitItemDataType;
  29. import com.kingdee.shr.compensation.app.integrate.CalSubmitItemFactory;
  30. import com.kingdee.shr.compensation.app.integrate.CalSubmitItemInfo;
  31. import com.kingdee.shr.compensation.app.integrate.DateTypeEnum;
  32. import com.kingdee.shr.compensation.app.integrate.SubmitElementCollection;
  33. import com.kingdee.shr.compensation.app.integrate.SubmitElementFactory;
  34. import com.kingdee.shr.compensation.app.integrate.SubmitElementInfo;
  35. import com.kingdee.shr.compensation.util.CmpDateUtil;
  36. import com.kingdee.util.StringUtils;
  37. public class CalFunctionIntegrateServiceEx extends SalaryCalFunction
  38. {
  39. private static Logger logger = Logger.getLogger("com.kingdee.shr.compensation.service.CalFunctionIntegrateServiceEx");
  40. public double getTransferSalaryData(Map paramMap, HashMap tempMap, Map<String, BigDecimal> currencyMap, CalSchemeInfo calScheme, String mainTableRowFilter, String calSubmitScheme, String calSubmitItem, String company, double needSubOrg, String beginDate, String endDate,String hrNum)
  41. {
  42. String key = new StringBuilder().append("TransferSalaryEx:").append(calScheme.getNumber()).append("-").append(calSubmitScheme).append("-").append(calSubmitItem).append("-").append(company).append("-").append(needSubOrg).append(beginDate).append("-").append(endDate).toString();
  43. String relyKey = new StringBuilder().append("TransferSalaryEx-").append(calScheme.getNumber()).append("-").append(calSubmitScheme).append("-").append(calSubmitItem).append("-").append(company).append("-").append(needSubOrg).append(beginDate).append("-").append(endDate).append("-").append("Rely").toString();
  44. Map salaryMap = new HashMap();
  45. String calItem = (String)paramMap.get("CALITEM");
  46. // logger.error("tempMap.get(key) ====="+tempMap.get(key) );
  47. if (tempMap.get(key) == null) {
  48. String personFilter = getPersonFilterSql(calScheme, company, needSubOrg, beginDate, endDate, mainTableRowFilter);
  49. logger.error("personFilter====="+personFilter);
  50. Map methodParamMap = new HashMap();
  51. methodParamMap.put("calSubmitScheme", calSubmitScheme);
  52. methodParamMap.put("calSubmitItem", calSubmitItem);
  53. methodParamMap.put("personFilter", personFilter);
  54. methodParamMap.put("key", key);
  55. methodParamMap.put("relyKey", relyKey);
  56. methodParamMap.put("isNumber", Boolean.valueOf(true));
  57. methodParamMap.put("isCycleScheme", Boolean.valueOf(false));
  58. combineTransSalaryData(tempMap, currencyMap, methodParamMap,hrNum);
  59. // logger.error("tempMap=="+tempMap);
  60. }
  61. String personId = (String)paramMap.get("T_HR_SCMPCALTABLE_FPERSONID");
  62. logger.error("key=="+key);
  63. logger.error("personId=="+personId);
  64. salaryMap = (Map)tempMap.get(key);
  65. logger.error("salaryMap=="+salaryMap);
  66. putSubmitDataToParam(paramMap, tempMap, calItem, relyKey);
  67. logger.error("salaryMap.containsKey(personId)="+salaryMap.containsKey(personId));
  68. logger.error("((salaryMap.containsKey(personId)) ? EmptyUtil.isEmpty(salaryMap.get(personId))?0.0D:((BigDecimal)salaryMap.get(personId)).doubleValue() : 0.0D)=="+((salaryMap.containsKey(personId)) ? EmptyUtil.isEmpty(salaryMap.get(personId))?0.0D:((BigDecimal)salaryMap.get(personId)).doubleValue() : 0.0D));
  69. return ((salaryMap.containsKey(personId)) ? EmptyUtil.isEmpty(salaryMap.get(personId))?0.0D:((BigDecimal)salaryMap.get(personId)).doubleValue() : 0.0D);
  70. }
  71. private String getPersonFilterSql(CalSchemeInfo calScheme, String company, double needSubOrg, String beginDate, String endDate, String mainTableRowFilter)
  72. {
  73. String calschemeid = calScheme.getId().toString();
  74. int calTime = calScheme.getCalTime();
  75. int periodYear = calScheme.getPeriodYear();
  76. int periodMonth = calScheme.getPeriodMonth();
  77. boolean haveSubOrg = 1.0D == needSubOrg;
  78. String salaryPeriod = new StringBuilder().append(periodYear).append("-").append(periodMonth).append("-").append(calTime).toString();
  79. String beginDateSql = new StringBuilder().append("{ts '").append(beginDate).append("'}").toString(); String endDateSql = new StringBuilder().append("{ts '").append(endDate).append("'}").toString();
  80. StringBuilder str = new StringBuilder();
  81. str.append(" select FPersonID from T_HR_SCmpCalTable where FcalSchemeID = '").append(calschemeid).append("' ");
  82. str.append(" and FperiodYear = ").append(periodYear);
  83. str.append(" and FperiodMonth = ").append(periodMonth);
  84. str.append(" and FcalTime = ").append(calTime);
  85. if (!(StringUtils.isEmpty(mainTableRowFilter))) {
  86. str.append(" and ").append(mainTableRowFilter);
  87. }
  88. String personSql = str.toString();
  89. String adminOrgSql = getAdminOrgIdFilterSql(company, haveSubOrg);
  90. str = new StringBuilder();
  91. str.append(" WHERE ").append(adminOrgSql);
  92. str.append(new StringBuilder().append(" AND FPERSONID IN ( ").append(personSql).append(" )").toString());
  93. str.append(" AND FEFFECTDATE >= ").append(beginDateSql);
  94. str.append(" AND FEFFECTDATE <= ").append(endDateSql);
  95. str.append(" AND FCALSTATE = '03' ");
  96. str.append(" AND FSALARYPERIOD ='").append(salaryPeriod).append("'");
  97. return str.toString();
  98. }
  99. private void combineTransSalaryData(HashMap tempMap, Map<String, BigDecimal> currencyMap, Map<String, Object> methodParamMap,String hrNum)
  100. {
  101. String calSubmitScheme = (String)methodParamMap.get("calSubmitScheme");
  102. String calSubmitItem = (String)methodParamMap.get("calSubmitItem");
  103. String personFilter = (String)methodParamMap.get("personFilter");
  104. String key = (String)methodParamMap.get("key");
  105. String relyKey = (String)methodParamMap.get("relyKey");
  106. Boolean isNumber = (Boolean)methodParamMap.get("isNumber");
  107. Boolean isCycleScheme = (Boolean)methodParamMap.get("isCycleScheme");
  108. Boolean isDate = (Boolean)methodParamMap.get("isDate");
  109. Boolean dateTypeToDay = (Boolean)methodParamMap.get("dateTypeToDay");
  110. Context ctx = Tools.getInstance().getCtx();
  111. Map salaryMap = new HashMap();
  112. Map relyMap = new HashMap();
  113. List relyList = new ArrayList();
  114. String calItem = (String)this.paramMap.get("CALITEM");
  115. //取所有提报单对应的临时表
  116. ArrayList schemeTableNameList = initSubmitSchemeTable(ctx, tempMap, calSubmitItem);
  117. if (EmptyUtil.isEmpty(schemeTableNameList)) {
  118. tempMap.put(key, salaryMap);
  119. return;
  120. }
  121. CalSubmitItemInfo itemInfo = initSubmitItem(ctx, tempMap, calSubmitItem);
  122. if (null == itemInfo) {
  123. tempMap.put(key, salaryMap);
  124. return;
  125. }
  126. String itemSn = new StringBuilder().append("S").append(itemInfo.getFieldSn()).toString();
  127. String itemDatatTypeValue = itemInfo.getDataType().getValue();
  128. DecimalFormat df = new DecimalFormat((null == itemInfo.getDataDot()) ? "0" : itemInfo.getDataDot().toString());
  129. DateTypeEnum dateTypeEnum = itemInfo.getDateType();
  130. if ((itemDatatTypeValue != null) && ("2".equals(itemDatatTypeValue))) {
  131. isDate = Boolean.valueOf(true);
  132. if ((dateTypeEnum != null) && (10 == dateTypeEnum.getValue())) {
  133. dateTypeToDay = Boolean.valueOf(true);
  134. }
  135. }
  136. Set schemeItemSet = initSchemeItem(ctx, tempMap, calSubmitItem);
  137. if (!(schemeItemSet.contains(new StringBuilder().append(itemInfo.getFieldSn()).append("").toString()))) {
  138. tempMap.put(key, salaryMap);
  139. return;
  140. }
  141. //循环拼接 union all 提报临时表 按提报项目查询金额
  142. StringBuilder str = new StringBuilder();
  143. str.append("/*dialect*/ select t.fbillid,t.FPERSONID,t.FSALARYPERIOD,t.FID,t.FCURRENCYID, ").append("t."+itemSn).append(" from (");
  144. for (int i = 0; i < schemeTableNameList.size(); i++) {
  145. str= str.append(" SELECT fbillid,FPERSONID,FSALARYPERIOD,FID,FCURRENCYID,").append(itemSn);
  146. str=str.append(" FROM ").append(schemeTableNameList.get(i)).append(" t ");
  147. str.append(personFilter);
  148. if (isCycleScheme.booleanValue()) {
  149. str= str.append(" ORDER BY t.FTransYear desc,t.FTransMonth desc, t.FTransTime desc,t.FPERSONID, t.FEFFECTDATE DESC, t.FCREATETIME DESC ");
  150. }
  151. else if (!(isNumber.booleanValue())) {
  152. str= str.append(" ORDER BY t.FPERSONID, t.FEFFECTDATE DESC, t.sFCREATETIME DESC ");
  153. }
  154. if(schemeTableNameList.size()>1&&i!=schemeTableNameList.size()-1) {
  155. str= str.append(" union all");
  156. }
  157. }
  158. str.append(") as t ");
  159. str=str.append(" left join T_HR_SBatchSubmitShemeBill t1 on t.fbillid = t1.fid ");
  160. str=str.append(" left join T_ORG_BaseUnit t2 on t1.FHrOrgUnitID = t2.fid ");
  161. str.append(" where nvl(t2.fnumber,'##') ='"+hrNum+"' ");
  162. logger.error("temp_table_sql ===== "+str.toString());
  163. SimpleDateFormat yearMonthFormat = new SimpleDateFormat("yyyy-MM");
  164. SimpleDateFormat yearMonthDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  165. try
  166. {
  167. logger.error("sql===="+str.toString());
  168. IRowSet rowSet = DbUtil.executeQuery(ctx, str.toString());
  169. String moneyStr = "";
  170. while (rowSet.next()) {
  171. String personId = rowSet.getString("FPersonID");
  172. logger.error("isCycleScheme ===== "+isCycleScheme);
  173. Map personRelyMap = new HashMap();
  174. personRelyMap.put("SUBMITITEMID", null);
  175. personRelyMap.put("SUBMITITEMTABLE", null);
  176. if (isCycleScheme.booleanValue()) {
  177. if (isNumber.booleanValue()) {
  178. String currencyId = rowSet.getString("FCURRENCYID");
  179. BigDecimal money = rowSet.getBigDecimal(itemSn);
  180. personRelyMap.put("SUBMITMONEY", df.format(money.doubleValue()));
  181. BigDecimal rate = (null == currencyMap.get(currencyId)) ? new BigDecimal(1) : (BigDecimal)currencyMap.get(currencyId);
  182. if (salaryMap.containsKey(personId)) {
  183. continue;
  184. }
  185. salaryMap.put(personId, money.multiply(rate));
  186. }
  187. else
  188. {
  189. if ((isDate != null) && (isDate.booleanValue())) {
  190. java.sql.Date date = rowSet.getDate(itemSn);
  191. if (date != null) {
  192. java.util.Date utilDate = new java.util.Date(date.getTime());
  193. if ((dateTypeToDay != null) && (dateTypeToDay.booleanValue()))
  194. moneyStr = yearMonthDateFormat.format(utilDate);
  195. else
  196. moneyStr = yearMonthFormat.format(utilDate);
  197. }
  198. else {
  199. moneyStr = "";
  200. }
  201. } else {
  202. moneyStr = (null == rowSet.getString(itemSn)) ? "" : rowSet.getString(itemSn);
  203. if ("0".equals(itemDatatTypeValue)) {
  204. BigDecimal money = rowSet.getBigDecimal(itemSn);
  205. if (money == null) {
  206. moneyStr = "";
  207. } else {
  208. boolean isSQLServerDB = "MS SQL Server".equalsIgnoreCase(ContextUtil.getDbType(ctx));
  209. if (isSQLServerDB)
  210. moneyStr = df.format(money.doubleValue());
  211. else {
  212. moneyStr = (null == rowSet.getString(itemSn)) ? "" : rowSet.getString(itemSn);
  213. }
  214. }
  215. }
  216. }
  217. personRelyMap.put("SUBMITMONEY", moneyStr);
  218. if (salaryMap.containsKey(personId)) {
  219. continue;
  220. }
  221. salaryMap.put(personId, moneyStr);
  222. }
  223. }
  224. else if (isNumber.booleanValue()) {
  225. String currencyId = rowSet.getString("FCURRENCYID");
  226. BigDecimal money = EmptyUtil.isEmpty(rowSet.getBigDecimal(itemSn))?BigDecimal.ZERO:rowSet.getBigDecimal(itemSn);
  227. logger.error("money===="+money);
  228. personRelyMap.put("SUBMITMONEY", df.format(money.doubleValue()));
  229. BigDecimal rate = (null == currencyMap.get(currencyId)) ? new BigDecimal(1) : (BigDecimal)currencyMap.get(currencyId);
  230. BigDecimal sum = (null == salaryMap.get(personId)) ? money.multiply(rate) : ((BigDecimal)salaryMap.get(personId)).add(money.multiply(rate));
  231. salaryMap.put(personId, sum);
  232. } else {
  233. if ((isDate != null) && (isDate.booleanValue())) {
  234. java.sql.Date date = rowSet.getDate(itemSn);
  235. if (date != null) {
  236. java.util.Date utilDate = new java.util.Date(date.getTime());
  237. if ((dateTypeToDay != null) && (dateTypeToDay.booleanValue()))
  238. moneyStr = yearMonthDateFormat.format(utilDate);
  239. else
  240. moneyStr = yearMonthFormat.format(utilDate);
  241. }
  242. else {
  243. moneyStr = "";
  244. }
  245. } else {
  246. moneyStr = (null == rowSet.getString(itemSn)) ? "" : rowSet.getString(itemSn);
  247. if ("0".equals(itemDatatTypeValue)) {
  248. BigDecimal money = rowSet.getBigDecimal(itemSn);
  249. if (money == null) {
  250. moneyStr = "";
  251. } else {
  252. boolean isSQLServerDB = "MS SQL Server".equalsIgnoreCase(ContextUtil.getDbType(ctx));
  253. if (isSQLServerDB)
  254. moneyStr = df.format(money.doubleValue());
  255. else {
  256. moneyStr = (null == rowSet.getString(itemSn)) ? "" : rowSet.getString(itemSn);
  257. }
  258. }
  259. }
  260. }
  261. personRelyMap.put("SUBMITMONEY", moneyStr);
  262. if (salaryMap.containsKey(personId)) {
  263. continue;
  264. }
  265. salaryMap.put(personId, moneyStr);
  266. }
  267. personRelyMap.put("SUBMITTABLE", schemeTableNameList.get(0));
  268. personRelyMap.put("SUBMITTABLEID", rowSet.getString("FID"));
  269. personRelyMap.put("CALITEM", calItem);
  270. personRelyMap.put("SUBMITNUMBER", calSubmitItem);
  271. personRelyMap.put("ISBASIC", Integer.valueOf(0));
  272. if (relyMap.containsKey(personId))
  273. relyList = (List)relyMap.get(personId);
  274. else {
  275. relyList = new ArrayList();
  276. }
  277. relyList.add(personRelyMap);
  278. relyMap.put(personId, relyList);
  279. }
  280. } catch (Exception e) {
  281. e.printStackTrace();
  282. }
  283. tempMap.put(key, salaryMap);
  284. tempMap.put(relyKey, relyMap);
  285. }
  286. private void putSubmitDataToParam(Map paramMap, HashMap tempMap, String calItem, String relyKey)
  287. {
  288. String personId = (String)paramMap.get("T_HR_SCMPCALTABLE_FPERSONID");
  289. List relyList = new ArrayList();
  290. Map relyMap = (Map)tempMap.get(relyKey);
  291. if ((null == relyMap) || (!(relyMap.containsKey(personId)))) {
  292. return;
  293. }
  294. if (paramMap.containsKey("SUBMITRELY")) {
  295. Map paramRelayMap = (Map)paramMap.get("SUBMITRELY");
  296. if (paramRelayMap.containsKey(calItem)) {
  297. relyList = (List)paramRelayMap.get(calItem);
  298. relyList.addAll((Collection)relyMap.get(personId));
  299. } else {
  300. paramRelayMap.put(calItem, relyMap.get(personId));
  301. }
  302. } else {
  303. Map paramRelayMap = new HashMap();
  304. paramRelayMap.put(calItem, relyMap.get(personId));
  305. paramMap.put("SUBMITRELY", paramRelayMap);
  306. }
  307. }
  308. public String getAdminOrgIdFilterSql(String companyNum, boolean haveSubOrg)
  309. {
  310. Context ctx = Tools.getInstance().getCtx();
  311. StringBuffer sqlBuffer = new StringBuffer();
  312. String queryOrg = new StringBuilder().append("SELECT FLONGNUMBER,FID FROM T_ORG_ADMIN WHERE FNUMBER = '").append(companyNum).append("'").toString();
  313. String companyLongNumber = ""; String adminOrgUnitId = "";
  314. try
  315. {
  316. IRowSet executeQuery = DbUtil.executeQuery(ctx, queryOrg);
  317. while (executeQuery.next()) {
  318. companyLongNumber = executeQuery.getString("fLongNumber");
  319. adminOrgUnitId = executeQuery.getString("fid");
  320. }
  321. if (StringUtils.isEmpty(companyLongNumber)) {
  322. return null;
  323. }
  324. if (haveSubOrg)
  325. sqlBuffer.append(new StringBuilder().append(" FADMINORGUNITID IN (SELECT FID FROM T_ORG_ADMIN WHERE FLONGNUMBER LIKE '").append(companyLongNumber).append("%')").toString());
  326. else {
  327. sqlBuffer.append(new StringBuilder().append(" FADMINORGUNITID IN ('").append(adminOrgUnitId).append("')").toString());
  328. }
  329. }
  330. catch (BOSException e)
  331. {
  332. e.printStackTrace();
  333. } catch (SQLException e) {
  334. e.printStackTrace();
  335. }
  336. return sqlBuffer.toString();
  337. }
  338. public static List<String> getCalShemeTableName(Context ctx, String calSubmitSchemeNum, String calSubmitItemNum)
  339. {
  340. List list = new ArrayList();
  341. String sql = new StringBuilder().append("Select n.FCalShemeTableName, m.fieldSn from T_HR_SCalSubmitScheme e inner join T_HR_SCalShemeTableRelation n on n.FSubmitSchemeID = e.fid inner join T_HR_SCalSubmitSchemeItem sm on sm.FCalSubmitSchemeID = e.fid inner join T_HR_SCalSubmitItem m on m.fid = sm.FCalSubmitItemID where e.FNumber = '").append(calSubmitSchemeNum).append("' and m.FNumber = '").append(calSubmitItemNum).append("' ").toString();
  342. try
  343. {
  344. IRowSet rs = DbUtil.executeQuery(ctx, sql);
  345. while (rs.next())
  346. {
  347. list.add(rs.getString("FCalShemeTableName"));
  348. list.add(new StringBuilder().append("S").append(rs.getString("fieldSn")).toString());
  349. }
  350. } catch (Exception e) {
  351. e.printStackTrace();
  352. }
  353. return list;
  354. }
  355. public ArrayList initSubmitSchemeTable(Context ctx, HashMap tempMap, String schemeNumber)
  356. {
  357. String key = "CALFUNCTIONINTEGRATESERVICE_SCHEMETABLE_EXT_"+schemeNumber;
  358. ArrayList list = new ArrayList<String>();
  359. Map schemeMap = new HashMap();
  360. if (null == tempMap.get(key)) {
  361. StringBuilder str = new StringBuilder();
  362. str.append(" SELECT REL.FCALSHEMETABLENAME PROPERTYTABLE, REL.FBILLENTRYTABLENAME DATATABLE, SCHEME.FNUMBER ");
  363. str.append(" FROM T_HR_SCALSHEMETABLERELATION REL ");
  364. str.append(" INNER JOIN T_HR_SCALSUBMITSCHEME SCHEME ON REL.FSUBMITSCHEMEID = SCHEME.FID ");
  365. str.append(" INNER JOIN T_HR_SCALSUBMITSCHEMEITEM SCHEMEITEM ON SCHEME.FID = SCHEMEITEM.FCALSUBMITSCHEMEID ");
  366. str.append(" INNER JOIN T_HR_SCALSUBMITITEM ITEM ON ITEM.FID = SCHEMEITEM.FCALSUBMITITEMID ");
  367. str.append(" where ITEM.fnumber ='"+schemeNumber+"' ");
  368. logger.error("initSubmitSchemeTable====="+str.toString());
  369. try {
  370. IRowSet rowSet = DbUtil.executeQuery(ctx, str.toString());
  371. while (rowSet.next()) {
  372. schemeMap.put(rowSet.getString("FNUMBER"), rowSet.getString("DATATABLE"));
  373. list.add(rowSet.getString("DATATABLE"));
  374. }
  375. }
  376. catch (Exception e) {
  377. e.printStackTrace();
  378. }
  379. tempMap.put(key, schemeMap);
  380. } else {
  381. schemeMap = (Map)tempMap.get(key);
  382. }
  383. return list;
  384. }
  385. public SubmitElementInfo initElementItem(Context ctx, HashMap tempMap, String elementItemNum)
  386. {
  387. String key = "INITELEMENTITEM_SERVICE_SUBMITITEM";
  388. Map itemMap = new HashMap();
  389. if (null == tempMap.get(key)) {
  390. SubmitElementCollection itemColl = null;
  391. try {
  392. itemColl = SubmitElementFactory.getLocalInstance(ctx).getSubmitElementCollection("select id, number, name ");
  393. } catch (BOSException e) {
  394. e.printStackTrace();
  395. }
  396. for (int i = 0; i < itemColl.size(); ++i) {
  397. SubmitElementInfo submitElementInfo = itemColl.get(i);
  398. itemMap.put(submitElementInfo.getNumber(), submitElementInfo);
  399. }
  400. tempMap.put(key, itemMap);
  401. } else {
  402. itemMap = (Map)tempMap.get(key);
  403. }
  404. SubmitElementInfo submitElementInfo = (SubmitElementInfo)itemMap.get(elementItemNum);
  405. if (null == submitElementInfo)
  406. return null;
  407. return ((SubmitElementInfo)itemMap.get(elementItemNum));
  408. }
  409. public CalSubmitItemInfo initSubmitItem(Context ctx, HashMap tempMap, String itemNumber)
  410. {
  411. String key = "CALFUNCTIONINTEGRATESERVICE_SUBMITITEM_EXT_"+itemNumber;
  412. String basicItemKey = new StringBuilder().append("CALFUNCTIONINTEGRATESERVICE_SUBMITITEM_").append(itemNumber).toString();
  413. Map itemMap = new HashMap();
  414. if (null == tempMap.get(key)) {
  415. CalSubmitItemCollection itemColl = null;
  416. try {
  417. itemColl = CalSubmitItemFactory.getLocalInstance(ctx).getCalSubmitItemCollection("select id, fieldSn, number, dateType, dataType,dataDot,filterField.entityName ");
  418. } catch (BOSException e) {
  419. e.printStackTrace();
  420. }
  421. for (int i = 0; i < itemColl.size(); ++i) {
  422. CalSubmitItemInfo calSubmitItemInfo = itemColl.get(i);
  423. itemMap.put(calSubmitItemInfo.getNumber(), calSubmitItemInfo);
  424. }
  425. tempMap.put(key, itemMap);
  426. } else {
  427. itemMap = (Map)tempMap.get(key);
  428. }
  429. CalSubmitItemInfo calSubmitItemInfo = (CalSubmitItemInfo)itemMap.get(itemNumber);
  430. if (null == calSubmitItemInfo)
  431. return null;
  432. if ((calSubmitItemInfo.getDataType().equals(CalSubmitItemDataType.F7)) && (null == tempMap.get(basicItemKey))) {
  433. Map basicItemMap = new HashMap();
  434. String entityName = calSubmitItemInfo.getFilterField().getEntity();
  435. MetaDataPK meataDataPk = MetaDataPK.create(entityName);
  436. EntityObjectInfo entityInfo = MetaDataLoaderFactory.getRemoteMetaDataLoader().getEntity(meataDataPk);
  437. String tableName = entityInfo.getTable().getName();
  438. String sql = new StringBuilder().append("SELECT FID, FNUMBER FROM ").append(tableName).toString();
  439. try {
  440. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  441. while (rowSet.next()) {
  442. basicItemMap.put(rowSet.getString("FNUMBER"), new StringBuilder().append(rowSet.getString("FID")).append("###").append(rowSet.getString("FNUMBER")).toString());
  443. }
  444. basicItemMap.put("TABLENAME", tableName);
  445. } catch (Exception e) {
  446. e.printStackTrace();
  447. }
  448. tempMap.put(basicItemKey, basicItemMap);
  449. }
  450. return ((CalSubmitItemInfo)itemMap.get(itemNumber));
  451. }
  452. public Set<String> initSchemeItem(Context ctx, HashMap tempMap, String schemeNumber)
  453. {
  454. String key = "CALFUNCTIONINTEGRATESERVICE_SCHEMEITEM";
  455. Set itemSet = new HashSet();
  456. Map<String, Set<String>> schemeItemMap = new HashMap<String, Set<String>>();
  457. if (null == tempMap.get(key)) {
  458. StringBuilder str = new StringBuilder();
  459. str.append(" SELECT ITEM.FNUMBER, ITEM.FIELDSN ");
  460. str.append(" FROM T_HR_SCALSUBMITSCHEME SCHEME ");
  461. str.append(" INNER JOIN T_HR_SCALSUBMITSCHEMEITEM SCHEMEITEM ON SCHEME.FID = SCHEMEITEM.FCALSUBMITSCHEMEID ");
  462. str.append(" INNER JOIN T_HR_SCALSUBMITITEM ITEM ON ITEM.FID = SCHEMEITEM.FCALSUBMITITEMID ");
  463. try {
  464. IRowSet rowSet = DbUtil.executeQuery(ctx, str.toString());
  465. while (rowSet.next()) {
  466. String number = rowSet.getString("FNUMBER");
  467. if (schemeItemMap.containsKey(number)) {
  468. ((Set)schemeItemMap.get(number)).add(rowSet.getString("FIELDSN"));
  469. }
  470. itemSet = new HashSet();
  471. itemSet.add(rowSet.getString("FIELDSN"));
  472. schemeItemMap.put(number, itemSet);
  473. }
  474. }
  475. catch (Exception e) {
  476. e.printStackTrace();
  477. }
  478. } else {
  479. schemeItemMap = (Map)tempMap.get(key);
  480. }
  481. return schemeItemMap.containsKey(schemeNumber) ? schemeItemMap.get(schemeNumber) : new HashSet<String>();
  482. }
  483. }