EmployeeListHandlerEx.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. package com.kingdee.eas.custom.synctask.handler;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.metadata.entity.*;
  7. import com.kingdee.bos.metadata.query.util.CompareType;
  8. import com.kingdee.eas.basedata.org.*;
  9. import com.kingdee.eas.basedata.person.IPerson;
  10. import com.kingdee.eas.basedata.person.PersonCollection;
  11. import com.kingdee.eas.basedata.person.PersonFactory;
  12. import com.kingdee.eas.basedata.person.PersonInfo;
  13. import com.kingdee.eas.common.EASBizException;
  14. import com.kingdee.eas.cp.taskmng.util.StringUtil;
  15. import com.kingdee.eas.custom.log.ISyncLog;
  16. import com.kingdee.eas.custom.log.SyncLogFactory;
  17. import com.kingdee.eas.custom.log.SyncLogInfo;
  18. import com.kingdee.eas.custom.log.app.DataDirectionEnum;
  19. import com.kingdee.eas.custom.log.app.DockingSystemEnum;
  20. import com.kingdee.eas.custom.log.app.SyncEntityNameEnum;
  21. import com.kingdee.eas.custom.log.app.SyncStatusEnum;
  22. import com.kingdee.eas.custom.synctask.SyncTranForIOTFacade;
  23. import com.kingdee.eas.custom.synctask.SyncTranForIOTFacadeFactory;
  24. import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
  25. import com.kingdee.eas.custom.synctask.util.ExpiringMapCache;
  26. import com.kingdee.eas.hr.ats.AtsUtil;
  27. import com.kingdee.eas.hr.base.EmployeeTypeInfo;
  28. import com.kingdee.eas.hr.emp.IPersonPosition;
  29. import com.kingdee.eas.hr.emp.PersonPositionCollection;
  30. import com.kingdee.eas.hr.emp.PersonPositionFactory;
  31. import com.kingdee.eas.hr.emp.PersonPositionInfo;
  32. import com.kingdee.eas.hr.emp.web.handler.EmployeeListHandler;
  33. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
  34. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  35. import com.kingdee.shr.base.syssetting.context.SHRContext;
  36. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  37. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  38. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  39. import com.kingdee.util.StringUtils;
  40. import okhttp3.*;
  41. import org.apache.log4j.Logger;
  42. import org.springframework.ui.ModelMap;
  43. import org.springframework.util.DigestUtils;
  44. import javax.servlet.http.HttpServletRequest;
  45. import javax.servlet.http.HttpServletResponse;
  46. import java.io.FileInputStream;
  47. import java.io.IOException;
  48. import java.util.*;
  49. /**
  50. * @author qingwu
  51. * @date 2024/10/24
  52. * @apiNote 员工信息维护扩展
  53. */
  54. public class EmployeeListHandlerEx extends EmployeeListHandler {
  55. public static Logger logger = Logger.getLogger(EmployeeListHandlerEx.class);
  56. private Context ctx = SHRContext.getInstance().getContext();
  57. private static Map<String, String> personStatusMap = new HashMap<String, String>();
  58. private Properties propt = new Properties();
  59. private static ExpiringMapCache<String, String> cache = new ExpiringMapCache();
  60. public EmployeeListHandlerEx() throws BOSException {
  61. String syncOAConfigPath = System.getProperty("EAS_HOME") + "/server/properties/scy/syncIOTConfig.properties";
  62. try {
  63. propt.load(new FileInputStream(syncOAConfigPath));
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. String errorMsg = "获取配置文件报错,请检查配置:" + syncOAConfigPath + " " + e.getMessage();
  67. throw new BOSException(errorMsg);
  68. }
  69. }
  70. static {
  71. personStatusMap.put("001", "1");//试用员工
  72. personStatusMap.put("011", "1");//待岗
  73. personStatusMap.put("006", "1");//长期病假
  74. personStatusMap.put("007", "1");//停薪留职
  75. personStatusMap.put("005", "1");//出国
  76. personStatusMap.put("012", "1");//返聘员工
  77. personStatusMap.put("031", "1");//长学
  78. personStatusMap.put("S01", "1");//实习生
  79. personStatusMap.put("S02", "1");//劳务派遣
  80. personStatusMap.put("S05", "1");//待分配
  81. personStatusMap.put("S03", "1");//顾问
  82. personStatusMap.put("S20", "1");//临时工
  83. personStatusMap.put("002", "3");//辞退
  84. personStatusMap.put("010", "3");//辞职
  85. personStatusMap.put("009", "3");//退休
  86. personStatusMap.put("003", "3");//下岗
  87. personStatusMap.put("004", "3");//离休
  88. personStatusMap.put("013", "3");//开除
  89. personStatusMap.put("020", "3");//解聘
  90. personStatusMap.put("021", "3");//失踪
  91. personStatusMap.put("030", "3");//死亡
  92. personStatusMap.put("S04", "3");//返聘终止
  93. personStatusMap.put("S08", "3");//离职
  94. personStatusMap.put("S09", "3");//派遣终止
  95. personStatusMap.put("035", "3");//临时工终止
  96. personStatusMap.put("S07", "3");//实习终止
  97. }
  98. /**
  99. * 获取人员批处理信息
  100. *
  101. * @param request
  102. * @param response
  103. * @param modelMap
  104. * @return
  105. */
  106. public void getPersonBatchInfoAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, ShrWebBizException {
  107. try {
  108. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  109. PersonCollection personCollection = null;
  110. String ids = request.getParameter("ids");
  111. if (StringUtil.isEmpty(ids)) {
  112. personCollection = iPerson.getPersonCollection();
  113. } else {
  114. Set<String> adminOrgIds = AtsUtil.toSet(ids);
  115. FilterInfo filterInfo = new FilterInfo();
  116. FilterItemCollection filterItems = filterInfo.getFilterItems();
  117. filterItems.add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE));
  118. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  119. personCollection = iPerson.getPersonCollection(entityViewInfo);
  120. }
  121. List list = new ArrayList();
  122. for (int i = 0; i < personCollection.size(); i++) {
  123. PersonInfo personInfo = personCollection.get(i);
  124. Map personMap = new HashMap();
  125. personMap.put("person.name", personInfo.getName());
  126. personMap.put("person.number", personInfo.getNumber());
  127. personMap.put("person.id", personInfo.getId().toString());
  128. personMap.put("id", personInfo.getId().toString());
  129. list.add(personMap);
  130. }
  131. JSONUtils.SUCCESS(list);
  132. } catch (Exception e) {
  133. e.printStackTrace();
  134. throw new ShrWebBizException(e);
  135. }
  136. }
  137. /**
  138. * 同步IOT人员
  139. * 后续如需部署生产去掉Ex
  140. * @param request
  141. * @param response
  142. * @param modelMap
  143. * @throws BOSException
  144. * @throws EASBizException
  145. * @throws SHRWebException
  146. */
  147. public void syncPersonToIotExAction(HttpServletRequest request,
  148. HttpServletResponse response,
  149. ModelMap modelMap) throws BOSException, ShrWebBizException {
  150. String billId = request.getParameter("billId");
  151. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  152. PersonCollection personCollection = null;
  153. Set personIds = null;
  154. Map<String, String> personNameAndNumberMap = new HashMap<String, String>();
  155. if (StringUtils.isEmpty(billId)) {
  156. personCollection = iPerson.getPersonCollection("select id,number");
  157. StringBuilder sb = new StringBuilder();
  158. for (int i = 0; i < personCollection.size(); i++) {
  159. PersonInfo personInfo = personCollection.get(i);
  160. String personId = personInfo.getId().toString();
  161. String personNumber = personInfo.getNumber().toString();
  162. sb.append(personId).append(",");
  163. personNameAndNumberMap.put(personNumber, personId);
  164. }
  165. sb.deleteCharAt(sb.lastIndexOf(","));
  166. billId = sb.toString();
  167. } else {
  168. personCollection = iPerson.getPersonCollection("select id,number where id in (" + AtsUtil.getStrFromString(billId) + ")");
  169. }
  170. personIds = AtsUtil.toSet(billId);
  171. //调用同步IOT人员
  172. try {
  173. Map<String, String> resultMap = SyncTranForIOTFacadeFactory.getLocalInstance(ctx).syncPersonToIot(billId);
  174. //Map<String, String> resultMap = syncPersonToIot(billId);
  175. int failure = 0;
  176. int success = personIds.size();
  177. BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
  178. for (int i = 0; i < personCollection.size(); i++) {
  179. BatchMessageTipsBody body = new BatchMessageTipsBody();
  180. PersonInfo personInfo = personCollection.get(i);
  181. body.setId(personInfo.getId().toString());
  182. String personNumber = personInfo.getNumber();
  183. if (resultMap.containsKey(personNumber)) {
  184. //失败
  185. body.setMuitTipsState(false);
  186. body.setMuitTipsMessage(resultMap.get(personNumber));
  187. failure++;
  188. } else {
  189. body.setMuitTipsState(true);
  190. }
  191. batchMessageTipsHeader.addResult(body);
  192. }
  193. success -= failure;
  194. //for (int i = 0; i < list.size(); i++) {
  195. // BatchMessageTipsBody body = new BatchMessageTipsBody();
  196. // Map<String, String> map = list.get(i);
  197. // //personNameAndNumberMap
  198. // String personId = personNameAndNumberMap.get(map.get("id"));
  199. // //body.setId(map.get("id"));
  200. // body.setId(personId);
  201. // body.setMuitTipsState(Boolean.FALSE);
  202. // logger.error("result--personId--" + personId);
  203. // logger.error("result--msg--" + map.get("msg"));
  204. // body.setMuitTipsMessage(map.get("msg"));
  205. // batchMessageTipsHeader.addResult(body);
  206. //}
  207. logger.error("handleEnableWithTips----- >> ");
  208. batchMessageTipsHeader.setBillId(billId);
  209. batchMessageTipsHeader.setFailureCount(failure);
  210. batchMessageTipsHeader.setSuccessCount(success);
  211. ObjectMapper mapper = new ObjectMapper();
  212. logger.error("handleEnableWithTips----- >> " + mapper.writeValueAsString(batchMessageTipsHeader));
  213. logger.error("handleEnableWithTips--size--- >> " + batchMessageTipsHeader.getResult().size());
  214. //logger.error("batchMessageTipsHeader " + batchMessageTipsHeader.getSuccessCount());
  215. request.setAttribute("res_method_data", batchMessageTipsHeader);
  216. this.writeSuccessData(batchMessageTipsHeader);
  217. logger.error("handleEnableWithTips----- end ");
  218. } catch (Exception e) {
  219. e.printStackTrace();
  220. throw new ShrWebBizException(e);
  221. }
  222. }
  223. public Map<String, String> syncPersonToIot(String billIds) throws BOSException, EASBizException, SHRWebException {
  224. ISyncLog iSyncLog = SyncLogFactory.getLocalInstance(ctx);
  225. SyncLogInfo syncLogInfo = new SyncLogInfo();
  226. syncLogInfo.setEntityName(SyncEntityNameEnum.person);
  227. syncLogInfo.setDataDirection(DataDirectionEnum.outflow);
  228. syncLogInfo.setDockingSystem(DockingSystemEnum.IOT);
  229. IPersonPosition iPersonPosition = PersonPositionFactory.getLocalInstance(ctx);
  230. FilterInfo filterInfo = new FilterInfo();
  231. FilterItemCollection filterItems = filterInfo.getFilterItems();
  232. Set personIds = AtsUtil.toSet(billIds);
  233. logger.error("syncPersonToIot---personIds---" + personIds);
  234. filterItems.add(new FilterItemInfo("person", personIds, CompareType.INCLUDE));
  235. SelectorItemCollection sic = new SelectorItemCollection();
  236. sic.add("*");
  237. sic.add("person.number");
  238. sic.add("person.name");
  239. sic.add("person.id");
  240. sic.add("person.hireDate");
  241. sic.add("person.nCell");
  242. sic.add("person.gender");
  243. sic.add("person.email");
  244. sic.add("person.employeeType.number");
  245. sic.add("personDep.name");
  246. sic.add("personDep.number");
  247. sic.add("personDep.id");
  248. sic.add("personDep.parent.id");
  249. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  250. PersonPositionCollection personPositionCollection = iPersonPosition.getPersonPositionCollection(entityViewInfo);
  251. JSONObject jsonObject = new JSONObject();
  252. jsonObject.put("dataSyncRule", 1);//1:组织ID存在时更新 2:组织ID存在时跳过不更新。默认值1
  253. List dataList = new ArrayList();
  254. for (int i = 0; i < personPositionCollection.size(); i++) {
  255. Map personMap = new HashMap();
  256. PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
  257. PersonInfo person = personPositionInfo.getPerson();
  258. //personMap.put("id", person.getId().toString());//来源方用户ID
  259. personMap.put("id", person.getNumber());//来源方用户ID
  260. personMap.put("name", person.getName());//用户姓名
  261. personMap.put("phone", person.getNCell());//手机号
  262. personMap.put("gender", person.getGender() == null ? null : person.getGender().getValue());//性别
  263. personMap.put("email", person.getEmail());//邮箱
  264. EmployeeTypeInfo employeeType = person.getEmployeeType();
  265. String number = employeeType.getNumber();
  266. String personStatus = personStatusMap.get(number);
  267. personMap.put("status", personStatus);//状态
  268. AdminOrgUnitInfo personDep = personPositionInfo.getPersonDep();
  269. List orgIds = new ArrayList();
  270. orgIds.add(personDep.getParent().getId().toString());
  271. personMap.put("orgIds", orgIds);//来源方组织ID列表
  272. dataList.add(personMap);
  273. //员工编码
  274. Map paramsMap = new HashMap();
  275. paramsMap.put("employeeNo", person.getNumber());
  276. personMap.put("params", paramsMap);
  277. }
  278. jsonObject.put("data", dataList);//1:组织ID存在时更新 2:组织ID存在时跳过不更新。默认值1
  279. //执行同步人员到Iot
  280. return syncPerson(jsonObject.toString(), syncLogInfo);
  281. }
  282. /**
  283. * 请求方法
  284. *
  285. * @param data
  286. */
  287. public Map<String, String> syncPerson(String data, SyncLogInfo syncLogInfo) throws BOSException, EASBizException {
  288. Response response = null;
  289. Map<String, String> result = new HashMap<>();
  290. try {
  291. String syncOrgUnitApiUrl = this.propt.getProperty("syncUserApiUrl");
  292. //String syncOrgUnitApiUrl = "http://10.0.3.87/api/open/enterpriseright/org-manage/v1/external/org/batch";
  293. if (org.apache.commons.lang3.StringUtils.isBlank(syncOrgUnitApiUrl)) {
  294. throw new BOSException("syncOrgUnitApiUrl不能为空!");
  295. }
  296. logger.error("syncOrg---data-----" + data);
  297. OkHttpClient client = new OkHttpClient();
  298. MediaType mediaType = MediaType.parse("application/json");
  299. RequestBody body = RequestBody.create(mediaType, data);
  300. Request request = new Request.Builder()
  301. .url(syncOrgUnitApiUrl)
  302. .post(body)
  303. //.addHeader("Authorization", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ2UzVMT29mYiIsInNlcnZlciI6dHJ1ZSwidXNlcl9uYW1lIjoic0hSIiwicHJvamVjdE1hcCI6IntcIlNDWVwiOlwiMTMwMDgwNTYwNDAwNDA0NDgwMFwifSIsInNjb3BlIjpbInNlcnZlciJdLCJuYW1lIjoic0hSIiwicHJvamVjdCI6IiIsImV4cCI6MTczMDkxMzQwOSwidGVuYW50IjoidGFpb3QiLCJjbGllbnRfaWQiOiJzeXMifQ.hS1LVZ56rHPvVZmRdipay3XNAmmtFBZKt-wPc7UK2rg ")
  304. .addHeader("Authorization", getToken())
  305. .addHeader("Accept", "*/*")
  306. .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
  307. .addHeader("Connection", "keep-alive")
  308. .addHeader("Content-Type", "application/json")
  309. .build();
  310. response = client.newCall(request).execute();
  311. String string = response.body().string();
  312. logger.error("string-----" + string);
  313. if (response.isSuccessful()) {
  314. ObjectMapper objectMapper = new ObjectMapper();
  315. Map<String, List<Map<String, String>>> resultMap = objectMapper.readValue(string, Map.class);
  316. List<Map<String, String>> list = resultMap.get("data");
  317. for (int i = 0; i < list.size(); i++) {
  318. Map<String, String> map = list.get(i);
  319. result.put(map.get("id"), map.get("msg"));
  320. }
  321. //todo
  322. //return (String) result.get("token");
  323. syncLogInfo.setSyncStatus(SyncStatusEnum.SUCCESS);
  324. //syncLogInfo.setSyncCount(total);
  325. //syncLogInfo.setSuccessNum(success);
  326. //syncLogInfo.setFailNum(fail);
  327. SyncLogFactory.getLocalInstance(ctx).save(syncLogInfo);
  328. } else {
  329. syncLogInfo.setSyncStatus(SyncStatusEnum.ERROR);
  330. //syncLogInfo.setSyncCount(total);
  331. //syncLogInfo.setSuccessNum(success);
  332. //syncLogInfo.setFailNum(fail);
  333. SyncLogFactory.getLocalInstance(ctx).save(syncLogInfo);
  334. }
  335. } catch (IOException | BOSException e) {
  336. e.printStackTrace();
  337. throw new RuntimeException("同步IOT平台人员失败: " + e.getMessage());
  338. }
  339. return result;
  340. }
  341. /**
  342. * 获取token
  343. * 本地缓存token,有效时长6.5小时
  344. *
  345. * @return
  346. */
  347. public String getToken() {
  348. String token = cache.get("token");
  349. if (org.apache.commons.lang3.StringUtils.isBlank(token)) {
  350. token = getTokenByRemote();
  351. }
  352. return token;
  353. }
  354. /**
  355. * 远程获取Token
  356. *
  357. * @return
  358. */
  359. private String getTokenByRemote() {
  360. Response response = null;
  361. Map result = null;
  362. try {
  363. long now = System.currentTimeMillis();
  364. Map<String, String> params = new HashMap<>();
  365. String getTokenApiUrl = this.propt.getProperty("getTokenApiUrl");
  366. if (org.apache.commons.lang3.StringUtils.isBlank(getTokenApiUrl)) {
  367. throw new BOSException("获取token接口地址不能为空!");
  368. }
  369. String appid = this.propt.getProperty("appid");
  370. if (org.apache.commons.lang3.StringUtils.isBlank(appid)) {
  371. throw new BOSException("appid不能为空!");
  372. }
  373. String secret = this.propt.getProperty("secret");
  374. if (org.apache.commons.lang3.StringUtils.isBlank(secret)) {
  375. throw new BOSException("secret不能为空!");
  376. }
  377. params.put("appid", appid);
  378. params.put("sign_method", "md5");
  379. params.put("timestamp", now + secret);
  380. //生成签名
  381. String sign = DigestUtils.md5DigestAsHex((appendUrl(null, params)).getBytes());
  382. params.put("timestamp", String.valueOf(now));
  383. params.put("sign", sign);
  384. String requestUrl = appendUrl(getTokenApiUrl, params);
  385. logger.error("getTokenByRemote -> requestUrl " + requestUrl);
  386. OkHttpClient client = new OkHttpClient().newBuilder()
  387. .build();
  388. Request request = new Request.Builder()
  389. .url(requestUrl)
  390. .get()
  391. .build();
  392. response = client.newCall(request).execute();
  393. String string = response.body().string();
  394. ObjectMapper objectMapper = new ObjectMapper();
  395. result = objectMapper.readValue(string, Map.class);
  396. logger.error("getTokenByRemote -> result " + result);
  397. } catch (IOException | BOSException e) {
  398. e.printStackTrace();
  399. throw new RuntimeException("远程获取IOT平台token失败: " + e.getMessage());
  400. }
  401. if (response.isSuccessful()) {
  402. String token = (String) result.get("token");
  403. //缓存token
  404. cache.put("token", token, 27000000);//6.5小时
  405. return token;
  406. } else {
  407. throw new RuntimeException((String) result.get("msg"));
  408. }
  409. }
  410. /**
  411. * 拼接地址参数
  412. */
  413. private String appendUrl(String url, Map<String, String> data) {
  414. StringBuilder paramStr = new StringBuilder();
  415. for (String key : data.keySet()) {
  416. paramStr.append(key).append("=").append(data.get(key)).append("&");
  417. }
  418. paramStr.deleteCharAt(paramStr.lastIndexOf("&"));
  419. if (!org.apache.commons.lang3.StringUtils.isEmpty(url)) {
  420. return url.contains("?") ? (url + "&" + paramStr) : (url + "?" + paramStr);
  421. }
  422. return paramStr.toString();
  423. }
  424. /**
  425. * 同步OA人员
  426. *
  427. * @param request
  428. * @param response
  429. * @param modelMap
  430. * @throws BOSException
  431. * @throws EASBizException
  432. * @throws SHRWebException
  433. */
  434. public void syncPersonToOAAction(HttpServletRequest request,
  435. HttpServletResponse response,
  436. ModelMap modelMap) throws BOSException, EASBizException, SHRWebException {
  437. Enumeration<String> headerNames = request.getHeaderNames();
  438. while (headerNames.hasMoreElements()) {
  439. String headerName = headerNames.nextElement();
  440. String headerValue = request.getHeader(headerName);
  441. logger.error("----headerNames------key【" + headerName + "】-value【 " + headerValue + "】");
  442. }
  443. Enumeration enu = request.getParameterNames();
  444. while (enu.hasMoreElements()) {
  445. String paraName = (String) enu.nextElement();
  446. logger.error("----ParameterNames------key【" + paraName + "】-value【 " + request.getParameter(paraName) + "】");
  447. }
  448. //String billId = request.getParameter("billId[]");
  449. ////}
  450. //if (StringUtils.isEmpty(billId)) {
  451. // billId = (String) request.getAttribute("billId[]");
  452. //}
  453. //if (StringUtils.isEmpty(billId)) {
  454. // billId = request.getParameter("billIds[]");
  455. //}
  456. //if (StringUtils.isEmpty(billId)) {
  457. // billId = (String) request.getAttribute("billIds[]");
  458. //}
  459. //logger.error("----headerNames------billId----" + billId);
  460. this.handleEnableWithTips(request, "");
  461. }
  462. protected void handleEnableWithTips(HttpServletRequest request, String methodName) throws SHRWebException {
  463. //String billId = this.getBillId(request);
  464. String billId = request.getParameter("billId");
  465. //}
  466. if (StringUtils.isEmpty(billId)) {
  467. billId = (String) request.getAttribute("billId");
  468. }
  469. if (StringUtils.isEmpty(billId)) {
  470. billId = request.getParameter("billIds[]");
  471. }
  472. if (StringUtils.isEmpty(billId)) {
  473. billId = (String) request.getAttribute("billId[]");
  474. }
  475. try {
  476. IPerson iPerson = PersonFactory.getLocalInstance(ctx);
  477. if (StringUtils.isEmpty(billId)) {
  478. PersonCollection personCollection = iPerson.getPersonCollection("select id");
  479. StringBuilder sb = new StringBuilder();
  480. for (int i = 0; i < personCollection.size(); i++) {
  481. String personId = personCollection.get(i).getId().toString();
  482. sb.append(personId).append(",");
  483. }
  484. sb.deleteCharAt(sb.lastIndexOf(","));
  485. billId = sb.toString();
  486. }
  487. Map<String, Object> resultMap = SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPersonToOA(billId, null);
  488. logger.error("handleEnableWithTips----- resultMap----" + resultMap);
  489. if (resultMap != null && !resultMap.isEmpty()) {
  490. logger.error("handleEnableWithTips----- start ");
  491. logger.error("handleEnableWithTips----- billId-- " + billId);
  492. PersonCollection personCollection = iPerson.getPersonCollection("select id,number where id in (" + AtsUtil.getStrFromString(billId) + ")");
  493. int sucess = 0;
  494. int failure = 0;
  495. BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
  496. for (int i = 0; i < personCollection.size(); i++) {
  497. BatchMessageTipsBody body = new BatchMessageTipsBody();
  498. PersonInfo personInfo = personCollection.get(i);
  499. body.setId(personInfo.getId().toString());
  500. String personNumber = personInfo.getNumber();
  501. Map<String, String> map = (Map<String, String>) resultMap.get(personNumber);
  502. logger.error("map----" + map);
  503. if (map == null) {
  504. ++failure;
  505. body.setMuitTipsState(Boolean.FALSE);
  506. body.setMuitTipsMessage("同步数据不能为空或检查是否同步OA字段是否等于否!");
  507. } else {
  508. if ("success".equals(map.get("state"))) {
  509. ++sucess;
  510. body.setMuitTipsState(Boolean.TRUE);
  511. body.setMuitTipsMessage(map.get("msg"));
  512. } else {
  513. ++failure;
  514. body.setMuitTipsState(Boolean.FALSE);
  515. body.setMuitTipsMessage(map.get("msg"));
  516. }
  517. }
  518. batchMessageTipsHeader.addResult(body);
  519. }
  520. //if (StringUtils.isEmpty(billId)) {
  521. // Set setPersonIds = (Set) resultMap.get("setPersonIds");
  522. // FilterInfo filterInfo = new FilterInfo();
  523. // filterInfo.getFilterItems().add(new FilterItemInfo("id", setPersonIds, CompareType.NOTINCLUDE));
  524. // EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
  525. // PersonCollection personCollection2 = iPerson.getPersonCollection(entityViewInfo);
  526. // StringBuilder sb = new StringBuilder();
  527. // for (int i = 0; i < personCollection2.size(); i++) {
  528. // PersonInfo personInfo = personCollection2.get(i);
  529. // sb.append(personInfo.getId().toString()).append(",");
  530. // }
  531. // sb.deleteCharAt(sb.lastIndexOf(","));
  532. // billId = sb.toString();
  533. //}
  534. logger.error("handleEnableWithTips----- >> ");
  535. batchMessageTipsHeader.setBillId(billId);
  536. batchMessageTipsHeader.setFailureCount(failure);
  537. batchMessageTipsHeader.setSuccessCount(sucess);
  538. logger.error("batchMessageTipsHeader " + batchMessageTipsHeader.getSuccessCount());
  539. request.setAttribute("res_method_data", batchMessageTipsHeader);
  540. this.writeSuccessData(batchMessageTipsHeader);
  541. logger.error("handleEnableWithTips----- end ");
  542. }
  543. } catch (Exception e) {
  544. e.printStackTrace();
  545. throw new ShrWebBizException(e);
  546. }
  547. }
  548. }