Utils.java 25 KB

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