Utils.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. package com.jtgh.yjpt.common;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.io.StringWriter;
  5. import java.lang.reflect.Field;
  6. import java.lang.reflect.Modifier;
  7. import java.math.BigDecimal;
  8. import java.math.RoundingMode;
  9. import java.security.MessageDigest;
  10. import java.security.NoSuchAlgorithmException;
  11. import java.text.SimpleDateFormat;
  12. import java.util.ArrayList;
  13. import java.util.Calendar;
  14. import java.util.Date;
  15. import java.util.HashMap;
  16. import java.util.Iterator;
  17. import java.util.List;
  18. import java.util.Locale;
  19. import java.util.ResourceBundle;
  20. import javax.persistence.criteria.CriteriaBuilder;
  21. import javax.persistence.criteria.CriteriaQuery;
  22. import javax.persistence.criteria.Predicate;
  23. import javax.persistence.criteria.Root;
  24. import javax.persistence.criteria.Subquery;
  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpSession;
  27. import org.springframework.jdbc.core.JdbcTemplate;
  28. import org.springframework.jdbc.support.rowset.SqlRowSet;
  29. import org.springframework.stereotype.Component;
  30. import org.springframework.util.StringUtils;
  31. import org.springframework.web.context.request.RequestContextHolder;
  32. import org.springframework.web.context.request.ServletRequestAttributes;
  33. import sun.misc.BASE64Decoder;
  34. import sun.misc.BASE64Encoder;
  35. import com.jtgh.qlyg.entity.ApplyFormItem;
  36. import com.jtgh.yjpt.common.servlet.InitServlet;
  37. import com.jtgh.yjpt.entity.BaseEntity;
  38. import com.jtgh.yjpt.entity.auth.UserEntity;
  39. import com.jtgh.yjpt.entity.common.AccessoryEntity;
  40. import com.jtgh.yjpt.entity.common.CodeEntity;
  41. import com.jtgh.yjpt.entity.common.TaskInfoEntity;
  42. import com.jtgh.yjpt.entity.qlyg.ApplyEntity;
  43. import com.jtgh.yjpt.entity.qlyg.ApplyProcessEntity;
  44. import com.jtgh.yjpt.entity.zysqbp.ZysqbpEntity;
  45. import com.jtgh.yjpt.webService.common.AuthHandler;
  46. import flex.messaging.FlexContext;
  47. /**
  48. * 系统静态工具方法类。
  49. */
  50. @Component
  51. public abstract class Utils {
  52. /**
  53. * 比较密码是否一致
  54. *
  55. * @param pwd
  56. * @param md5Pwd
  57. * @return
  58. */
  59. public static boolean pwdEquals(String pwd, String md5Pwd) {
  60. if (pwd == null || md5Pwd == null)
  61. return false;
  62. return md5Pwd.equals(encrypt(pwd));
  63. }
  64. /**
  65. * 返回MD5加密后的密码
  66. *
  67. * @param pwd
  68. * @return
  69. */
  70. public static String encrypt(String password) {
  71. String str = "";
  72. try {
  73. MessageDigest md = MessageDigest.getInstance("MD5");
  74. md.update(password.getBytes());
  75. byte b[] = md.digest();
  76. int i;
  77. StringBuffer buf = new StringBuffer("");
  78. for (int offset = 0; offset < b.length; offset++) {
  79. i = b[offset];
  80. if (i < 0)
  81. i += 256;
  82. if (i < 16)
  83. buf.append("0");
  84. buf.append(Integer.toHexString(i));
  85. }
  86. str = buf.toString();
  87. } catch (NoSuchAlgorithmException e) {
  88. e.printStackTrace();
  89. }
  90. return str;
  91. }
  92. /**
  93. * 二进制流解析为字符串
  94. *
  95. * @param content
  96. * @return
  97. */
  98. public static String encodeBase64(byte[] content) {
  99. BASE64Encoder encoder = new BASE64Encoder();
  100. return encoder.encode(content);
  101. }
  102. /**
  103. * 字符串解析为二进制流
  104. *
  105. * @param content
  106. * @return
  107. */
  108. public static byte[] decodeBase64(String content) {
  109. BASE64Decoder decoder = new BASE64Decoder();
  110. try {
  111. return decoder.decodeBuffer(content);
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115. return null;
  116. }
  117. /**
  118. * 获取资源文件
  119. *
  120. * @param bundle
  121. * 包名
  122. * @param key
  123. * @return
  124. */
  125. public static String getResource(String bundle, String key) {
  126. ResourceBundle resource = ResourceBundle.getBundle(Locale.getDefault()
  127. .toString() + "/" + bundle, Locale.getDefault(),
  128. Utils.class.getClassLoader());
  129. if (resource.containsKey(key))
  130. return resource.getString(key);
  131. return key;
  132. }
  133. /**
  134. * 服务器端判断客户端浏览器类型(IE/FF/SF)
  135. *
  136. * @param request
  137. * @return
  138. */
  139. public static String getBrowser(HttpServletRequest request) {
  140. String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
  141. if (UserAgent != null) {
  142. if (UserAgent.indexOf("msie") >= 0)
  143. return "IE";
  144. if (UserAgent.indexOf("firefox") >= 0)
  145. return "FF";
  146. if (UserAgent.indexOf("safari") >= 0)
  147. return "SF";
  148. }
  149. return null;
  150. }
  151. /**
  152. * 根据开始日期和时间段,得到到期日
  153. *
  154. * @param startDate
  155. * @param during
  156. * @param type
  157. * 承诺时限单位(0天/1工作日/2月/3年)
  158. * @return
  159. */
  160. public static Date getDueDate(Date startDate, Integer during, String type) {
  161. if (startDate == null)
  162. return null;
  163. JdbcTemplate jdbcTemplate = (JdbcTemplate) ApplicationContextHelper
  164. .getBean(JdbcTemplate.class);
  165. if (during == null)
  166. during = 0;
  167. Calendar c = Calendar.getInstance();
  168. c.setTime(startDate);
  169. if (Constants.QLYG_APPLY_PROMISE_TYPE_DAY.equals(type)) {
  170. // 按天计算
  171. c.add(Calendar.DATE, during);
  172. } else if (Constants.QLYG_APPLY_PROMISE_TYPE_WORKING_DAY.equals(type)) {
  173. // 按工作日计算
  174. String sql = "SELECT 1 FROM T_YJPT_WORKING_CALENDAR WHERE WORKING_DATE=? AND IS_WORKING=?";
  175. SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
  176. while (during > 0) {
  177. String date = sf.format(c.getTime());
  178. if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
  179. || c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
  180. SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, date,
  181. Constants.YES);
  182. if (rs.next()) {
  183. during--;
  184. }
  185. c.add(Calendar.DATE, 1);
  186. } else {
  187. SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, date,
  188. Constants.NO);
  189. if (!rs.next()) {
  190. during--;
  191. }
  192. c.add(Calendar.DATE, 1);
  193. }
  194. }
  195. } else if (Constants.QLYG_APPLY_PROMISE_TYPE_MONTH.equals(type)) {
  196. // 按月计算
  197. c.add(Calendar.MONTH, during);
  198. } else if (Constants.QLYG_APPLY_PROMISE_TYPE_YEAR.equals(type)) {
  199. // 按年计算
  200. c.add(Calendar.YEAR, during);
  201. }
  202. return c.getTime();
  203. }
  204. /**
  205. * 根据开始日期和时间段,得到预警日期4/5
  206. *
  207. * @param startDate
  208. * @param during
  209. * @param type
  210. * 承诺时限单位(0天/1工作日/2月/3年)
  211. * @return
  212. */
  213. public static Date getWarnDate(Date startDate, Integer during, String type) {
  214. if (startDate == null)
  215. return null;
  216. if (during == null)
  217. during = 0;
  218. during = BigDecimal.valueOf(during * 0.8)
  219. .setScale(0, RoundingMode.CEILING).intValue();
  220. return getDueDate(startDate, during, type);
  221. }
  222. /**
  223. * 根据配置文件设置办件信息
  224. *
  225. * @param entity
  226. * @param processKey
  227. */
  228. public static void setApplyProperties(ApplyEntity entity, String processKey) {
  229. HashMap<String, Object> applyMap = GlobalData.qlygApplyMap
  230. .get(processKey);
  231. if (applyMap == null)
  232. return;
  233. Iterator<String> it = applyMap.keySet().iterator();
  234. while (it.hasNext()) {
  235. String key = it.next();
  236. try {
  237. ApplyEntity.class.getMethod(
  238. "set" + key.toUpperCase().substring(0, 1)
  239. + key.substring(1),
  240. applyMap.get(key).getClass()).invoke(entity,
  241. applyMap.get(key));
  242. } catch (Exception e) {
  243. e.printStackTrace();
  244. }
  245. }
  246. String orgId = Utils.getCurrentUser().getSzd().getByzd4();
  247. // 部门编码
  248. entity.setOrgId(orgId + "JT");
  249. // 权力编码前面10位的部门编号是所在地的备用字段4
  250. if (!StringUtils.isEmpty(entity.getItemId())) {
  251. entity.setItemId(orgId + "JT-" + entity.getItemId());
  252. }
  253. // 办理处室使用所在地的备用字段5
  254. entity.setDepartment(getCurrentUser().getSzd().getByzd5());
  255. }
  256. /**
  257. * 根据配置文件设置办件过程信息
  258. *
  259. * @param entity
  260. * @param processKey
  261. */
  262. public static void setApplyItemProperties(ApplyProcessEntity entity,
  263. String processKey, String taskKey) {
  264. HashMap<String, HashMap<String, Object>> applyMap = GlobalData.qlygApplyItemMap
  265. .get(processKey);
  266. if (applyMap == null)
  267. return;
  268. HashMap<String, Object> applyItemMap = applyMap.get(taskKey);
  269. if (applyItemMap == null)
  270. return;
  271. Iterator<String> it = applyItemMap.keySet().iterator();
  272. while (it.hasNext()) {
  273. String key = it.next();
  274. try {
  275. ApplyProcessEntity.class.getMethod(
  276. "set" + key.toUpperCase().substring(0, 1)
  277. + key.substring(1),
  278. applyItemMap.get(key).getClass()).invoke(entity,
  279. applyItemMap.get(key));
  280. } catch (Exception e) {
  281. e.printStackTrace();
  282. }
  283. }
  284. }
  285. /**
  286. * 根据配置文件生成办件基本信息form
  287. *
  288. * @param entity
  289. * @param processKey
  290. * @return
  291. */
  292. public static String getApplyForm(BaseEntity<?> entity, String processKey) {
  293. StringBuffer sb = new StringBuffer();
  294. sb.append("<?XML VERSION=\"1.0\" ENCODING=\"GBK\"?><FORMDATA>");
  295. if (processKey != null
  296. && GlobalData.qlygApplyFormMap.get(processKey) != null) {
  297. List<ApplyFormItem> list = (List<ApplyFormItem>) GlobalData.qlygApplyFormMap
  298. .get(processKey);
  299. if (list != null && list.size() > 0) {
  300. for (ApplyFormItem formItem : list) {
  301. sb.append("<DATA>");
  302. sb.append("<KEY>");
  303. sb.append(formItem.getKey());
  304. sb.append("</KEY>");
  305. sb.append("<NAME>");
  306. sb.append(formItem.getName());
  307. sb.append("</NAME>");
  308. sb.append("<VALUE>");
  309. try {
  310. if (formItem.getId() != null) {
  311. Object parentObj = entity;
  312. String[] props = formItem.getId().split("\\.");
  313. for (String prop : props) {
  314. Object obj = parentObj
  315. .getClass()
  316. .getMethod(
  317. "get"
  318. + prop.toUpperCase()
  319. .substring(0, 1)
  320. + prop.substring(1))
  321. .invoke(parentObj);
  322. parentObj = obj;
  323. if (parentObj == null) {
  324. break;
  325. }
  326. }
  327. if (parentObj == null) {
  328. // 空值
  329. } else if ("date".equals(formItem.getType())) {
  330. Date d = (Date) parentObj;
  331. sb.append(new SimpleDateFormat(
  332. "yyyy-MM-dd HH:mm:ss").format(d));
  333. } else {
  334. if (!StringUtils.isEmpty(formItem.getLocale())) {
  335. sb.append(getResource(formItem.getLocale(),
  336. parentObj.toString()));
  337. } else {
  338. sb.append(parentObj.toString());
  339. }
  340. }
  341. }
  342. } catch (Exception e) {
  343. e.printStackTrace();
  344. }
  345. sb.append("</VALUE>");
  346. sb.append("</DATA>");
  347. }
  348. }
  349. }
  350. sb.append("</FORMDATA>");
  351. return sb.toString();
  352. }
  353. /**
  354. * 设置对象属性
  355. *
  356. * @param obj
  357. * @param params
  358. * @param name
  359. * @param clazz
  360. */
  361. public static void setField(Object obj, Object params, String name,
  362. Class<?> clazz) {
  363. try {
  364. Field fld = clazz.getDeclaredField(name);
  365. int mod = fld.getModifiers();
  366. if (null == obj && Modifier.isStatic(mod)) {
  367. if (!Modifier.isFinal(mod)) {
  368. if (!fld.isAccessible())
  369. fld.setAccessible(true);
  370. fld.set(null, params);
  371. }
  372. } else {
  373. if (!fld.isAccessible())
  374. fld.setAccessible(true);
  375. fld.set(obj, params);
  376. }
  377. } catch (SecurityException e) {
  378. e.printStackTrace();
  379. } catch (NoSuchFieldException e) {
  380. e.printStackTrace();
  381. } catch (IllegalArgumentException e) {
  382. e.printStackTrace();
  383. } catch (IllegalAccessException e) {
  384. e.printStackTrace();
  385. }
  386. }
  387. /**
  388. * 获取session
  389. *
  390. * @return
  391. */
  392. public static HttpSession getSession() {
  393. if (FlexContext.getHttpRequest() != null) {
  394. HttpSession session = FlexContext.getHttpRequest().getSession();
  395. // System.out.println("Flex session id:" + session.getId());
  396. // flex客户端取session
  397. return session;
  398. }
  399. if (RequestContextHolder.getRequestAttributes() != null) {
  400. HttpSession session = ((ServletRequestAttributes) RequestContextHolder
  401. .getRequestAttributes()).getRequest().getSession();
  402. // System.out.println("Http session id:" + session.getId());
  403. return session;
  404. }
  405. return null;
  406. }
  407. public static Long JunitUserId = 1l;
  408. /**
  409. * 获取当前登录人
  410. *
  411. * @return
  412. */
  413. public static UserEntity getCurrentUser() {
  414. if (GlobalData.isJunit) {
  415. UserEntity testUser = new UserEntity();
  416. testUser.setId(JunitUserId);
  417. testUser.setCode("user_junit");
  418. testUser.setName("junit用户");
  419. return testUser;
  420. }
  421. HttpSession session = getSession();
  422. if (session == null) {
  423. if (AuthHandler.getCurrentUser() != null) {
  424. return AuthHandler.getCurrentUser();
  425. }
  426. return null;
  427. }
  428. Object user = session.getAttribute(GlobalData.USER_SESSION_KEY);
  429. return (UserEntity) user;
  430. }
  431. /**
  432. * WebService登录用户
  433. *
  434. * @return
  435. */
  436. public static UserEntity getWebServiceUser() {
  437. if (AuthHandler.getCurrentUser() != null) {
  438. return AuthHandler.getCurrentUser();
  439. }
  440. return null;
  441. }
  442. /**
  443. * 获取当前登录人姓名
  444. *
  445. * @return
  446. */
  447. public static String getCurrentUserCode() {
  448. HttpSession session = getSession();
  449. if (session != null) {
  450. Object user = session.getAttribute(GlobalData.USER_SESSION_KEY);
  451. if (user != null)
  452. return ((UserEntity) user).getCode();
  453. }
  454. return "";
  455. }
  456. /**
  457. * 获取当前登录人姓名
  458. *
  459. * @return
  460. */
  461. public static String getCurrentUserName() {
  462. HttpSession session = getSession();
  463. if (session != null) {
  464. Object user = session.getAttribute(GlobalData.USER_SESSION_KEY);
  465. if (user != null)
  466. return ((UserEntity) user).getName();
  467. }
  468. return "";
  469. }
  470. /**
  471. * 根据所属区域代码获得webservice的ip
  472. *
  473. * @param ssqyId
  474. * @return
  475. */
  476. public static String getWsIpBySsqy(Long ssqyId) {
  477. if (ssqyId == null)
  478. return "";
  479. String wsIp = "";
  480. if (InitServlet.groupcodeMap.get(Constants.GROUP_CODE_SZD_WS_IP) != null) {
  481. List<CodeEntity> ips = InitServlet.groupcodeMap
  482. .get(Constants.GROUP_CODE_SZD_WS_IP);
  483. for (CodeEntity ip : ips) {
  484. if (ip.getParent() != null
  485. && ssqyId.toString().indexOf(
  486. ip.getParent().getId().toString()) == 0) {
  487. wsIp = ip.getCode();
  488. break;
  489. }
  490. }
  491. }
  492. return wsIp;
  493. }
  494. /**
  495. * 根据所属区域代码获得webservice的port
  496. *
  497. * @param ssqyId
  498. * @return
  499. */
  500. public static String getWsPortBySsqy(Long ssqyId) {
  501. if (ssqyId == null)
  502. return "";
  503. String wsPort = "";
  504. if (InitServlet.groupcodeMap.get(Constants.GROUP_CODE_SZD_WS_PORT) != null) {
  505. List<CodeEntity> ports = InitServlet.groupcodeMap
  506. .get(Constants.GROUP_CODE_SZD_WS_PORT);
  507. for (CodeEntity port : ports) {
  508. if (port.getParent() != null
  509. && ssqyId.toString().indexOf(
  510. port.getParent().getId().toString()) == 0) {
  511. wsPort = port.getCode();
  512. break;
  513. }
  514. }
  515. }
  516. return wsPort;
  517. }
  518. /**
  519. * 返回当前角色的上级角色
  520. *
  521. * @param currRole
  522. * @return
  523. */
  524. public static String getParentRole(String currRole) {
  525. if (StringUtils.isEmpty(currRole)
  526. || currRole.length() <= Constants.ROLE_LENGTH) {
  527. return "";
  528. }
  529. return currRole.substring(0, currRole.length() - Constants.ROLE_LENGTH);
  530. }
  531. public static List<Predicate> setWorkflowSpec(List<Predicate> list,
  532. CriteriaBuilder cb, CriteriaQuery<?> query,
  533. Root<? extends BaseEntity<?>> root, String lcStatus) {
  534. // 根据流程状态过滤
  535. if (null != lcStatus && !"".equals(lcStatus)) {
  536. if (String.valueOf(BaseEntity.RECORD_STATE_VALID).equals(lcStatus)
  537. || String.valueOf(BaseEntity.RECORD_STATE_COMPLETED)
  538. .equals(lcStatus)) {
  539. list.add(cb.equal(root.get("recordStatus").as(String.class),
  540. lcStatus));
  541. } else {
  542. Subquery<TaskInfoEntity> subquery = query
  543. .subquery(TaskInfoEntity.class);
  544. Root<TaskInfoEntity> taskRoot = subquery
  545. .from(TaskInfoEntity.class);
  546. subquery.select(taskRoot);
  547. List<Predicate> subQueryPredicates = new ArrayList<Predicate>();
  548. subQueryPredicates.add(cb.equal(
  549. root.get("id").as(String.class), taskRoot.get("busId")
  550. .as(String.class)));
  551. subQueryPredicates.add(cb.equal(
  552. taskRoot.get("currName").as(String.class), lcStatus));
  553. subQueryPredicates.add(cb.notEqual(
  554. taskRoot.get("state").as(Long.class),
  555. BaseEntity.RECORD_STATE_COMPLETED));
  556. // List<Predicate> subOrList = new
  557. // ArrayList<Predicate>();
  558. // subOrList.add(cb.equal(taskRoot
  559. // .get("roleCode").as(String.class),
  560. // getCurrentRoleCode(functionId)));
  561. // subOrList.add(cb.equal(taskRoot
  562. // .get("runner").as(UserEntity.class),
  563. // Utils.getCurrentUser()));
  564. // subQueryPredicates.add(cb.or(subOrList.toArray(new
  565. // Predicate[] {})));
  566. subquery.where(subQueryPredicates.toArray(new Predicate[] {}));
  567. list.add(cb.exists(subquery));
  568. }
  569. }
  570. return list;
  571. }
  572. public static List<Predicate> setAuditNameSpec(List<Predicate> list,
  573. CriteriaBuilder cb, CriteriaQuery<?> query,
  574. Root<? extends BaseEntity<?>> root, String lcStatus, String name) {
  575. if(null != name && !"".equals(name)) {
  576. Subquery<TaskInfoEntity> subquery = query
  577. .subquery(TaskInfoEntity.class);
  578. Root<TaskInfoEntity> taskRoot = subquery.from(TaskInfoEntity.class);
  579. subquery.select(taskRoot);
  580. List<Predicate> subQueryPredicates = new ArrayList<Predicate>();
  581. subQueryPredicates.add(cb.equal(root.get("id").as(String.class),
  582. taskRoot.get("busId").as(String.class)));
  583. subQueryPredicates.add(cb.or(new Predicate[] {
  584. cb.equal(taskRoot.get("busKey").as(String.class),
  585. ZysqbpEntity.AUTO_PROCESS_DEFINITION_KEY),
  586. cb.equal(taskRoot.get("busKey").as(String.class),
  587. ZysqbpEntity.PROCESS_DEFINITION_KEY) }));
  588. subQueryPredicates.add(cb.like(
  589. taskRoot.get("auditUsername").as(String.class), "%" + name
  590. + "%"));
  591. if (null != lcStatus && !"".equals(lcStatus)) {
  592. if (String.valueOf(BaseEntity.RECORD_STATE_VALID).equals(
  593. lcStatus)
  594. || String.valueOf(BaseEntity.RECORD_STATE_COMPLETED)
  595. .equals(lcStatus)) {
  596. list.add(cb
  597. .equal(root.get("recordStatus").as(String.class),
  598. lcStatus));
  599. } else {
  600. subQueryPredicates.add(cb.notEqual(
  601. taskRoot.get("state").as(Long.class),
  602. BaseEntity.RECORD_STATE_COMPLETED));
  603. }
  604. }
  605. subquery.where(subQueryPredicates.toArray(new Predicate[] {}));
  606. list.add(cb.exists(subquery));
  607. } else {
  608. // 根据流程状态过滤
  609. if (null != lcStatus && !"".equals(lcStatus)) {
  610. if (String.valueOf(BaseEntity.RECORD_STATE_VALID).equals(lcStatus)
  611. || String.valueOf(BaseEntity.RECORD_STATE_COMPLETED)
  612. .equals(lcStatus)) {
  613. list.add(cb.equal(root.get("recordStatus").as(String.class),
  614. lcStatus));
  615. } else {
  616. Subquery<TaskInfoEntity> subquery = query
  617. .subquery(TaskInfoEntity.class);
  618. Root<TaskInfoEntity> taskRoot = subquery
  619. .from(TaskInfoEntity.class);
  620. subquery.select(taskRoot);
  621. List<Predicate> subQueryPredicates = new ArrayList<Predicate>();
  622. subQueryPredicates.add(cb.equal(
  623. root.get("id").as(String.class), taskRoot.get("busId")
  624. .as(String.class)));
  625. subQueryPredicates.add(cb.equal(
  626. taskRoot.get("currName").as(String.class), lcStatus));
  627. subQueryPredicates.add(cb.notEqual(
  628. taskRoot.get("state").as(Long.class),
  629. BaseEntity.RECORD_STATE_COMPLETED));
  630. subquery.where(subQueryPredicates.toArray(new Predicate[] {}));
  631. list.add(cb.exists(subquery));
  632. }
  633. }
  634. }
  635. return list;
  636. }
  637. /**
  638. * 将传入的附件拼成固定格式的String返回
  639. */
  640. public static String getWord(List<AccessoryEntity> list) {
  641. StringBuffer sbf = new StringBuffer();
  642. String str = "<?XML VERSION=\"1.0\" ENCODING=\"GBK\"?><DOCUMENTDATA>";
  643. sbf.append(str);
  644. if (list != null && list.size() > 0) {
  645. for (AccessoryEntity accessoryEntity : list) {
  646. sbf.append("<DOCUMENT>");
  647. sbf.append("<DOCUMENT_ID>").append(accessoryEntity.getId())
  648. .append("</DOCUMENT_ID>");
  649. sbf.append("<DOCUMENT_NAME>")
  650. .append(getResource("fileType", accessoryEntity
  651. .getType().getName()))
  652. .append("</DOCUMENT_NAME>");
  653. sbf.append("<FILE_NAME>").append(accessoryEntity.getName())
  654. .append("</FILE_NAME>");
  655. sbf.append("<FILE_CONTENT>")
  656. .append(encodeBase64(accessoryEntity.getContent()
  657. .getValue())).append("</FILE_CONTENT>");
  658. sbf.append("</DOCUMENT>");
  659. }
  660. }
  661. sbf.append("</DOCUMENTDATA>");
  662. return sbf.toString();
  663. }
  664. /**
  665. * 该天最早的时候
  666. *
  667. * @param date
  668. * @return
  669. */
  670. public static Date getDateFirstTime(Date date) {
  671. if (null == date) {
  672. return null;
  673. }
  674. Calendar c = Calendar.getInstance();
  675. c.setTime(date);
  676. c.set(java.util.Calendar.HOUR_OF_DAY, 0);
  677. c.set(java.util.Calendar.MINUTE, 0);
  678. c.set(java.util.Calendar.SECOND, 0);
  679. return c.getTime();
  680. }
  681. /**
  682. * 该天最迟的时候
  683. *
  684. * @param date
  685. * @return
  686. */
  687. public static Date getDateLastTime(Date date) {
  688. if (null == date) {
  689. return null;
  690. }
  691. Calendar c = Calendar.getInstance();
  692. c.setTime(date);
  693. c.set(java.util.Calendar.HOUR_OF_DAY, 23);
  694. c.set(java.util.Calendar.MINUTE, 59);
  695. c.set(java.util.Calendar.SECOND, 59);
  696. return c.getTime();
  697. }
  698. public static String getExeMsg(Throwable t) {
  699. StringWriter sw = new StringWriter();
  700. t.printStackTrace(new PrintWriter(sw));
  701. return sw.toString();
  702. }
  703. }