BaseService.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package com.jtgh.yjpt.service;
  2. import java.io.Serializable;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.List;
  6. import java.util.Locale;
  7. import java.util.ResourceBundle;
  8. import org.apache.commons.lang.math.NumberUtils;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.data.domain.Page;
  11. import org.springframework.data.domain.Pageable;
  12. import org.springframework.data.domain.Sort;
  13. import org.springframework.data.jpa.domain.Specification;
  14. import org.springframework.jdbc.core.JdbcTemplate;
  15. import org.springframework.jdbc.support.rowset.SqlRowSet;
  16. import org.springframework.util.StringUtils;
  17. import com.jtgh.yjpt.common.Utils;
  18. import com.jtgh.yjpt.dao.common.MyRepository;
  19. import com.jtgh.yjpt.entity.BaseEntity;
  20. /**
  21. * Service层基类
  22. *
  23. * @author 袁晓冬
  24. *
  25. * @param <T>
  26. * Entity
  27. * @param <ID>
  28. * 主键
  29. */
  30. public abstract class BaseService<T extends BaseEntity<ID>, ID extends Serializable>
  31. implements MyRepository<T, ID> {
  32. /**
  33. * 获取service执行Dao
  34. *
  35. * @return
  36. */
  37. protected abstract MyRepository<T, ID> getDao();
  38. /**
  39. * 资源文件
  40. */
  41. public ResourceBundle resource = ResourceBundle.getBundle(Locale
  42. .getDefault().toString() + "/select", Locale.getDefault(), this
  43. .getClass().getClassLoader());
  44. @Autowired
  45. private JdbcTemplate jdbcTemplate;
  46. /**
  47. * 根据编号规则生成编号XX-yyMMdd-001
  48. *
  49. * @param noRuleType
  50. * @return
  51. */
  52. public String generateNoByNoRule(String noRuleType) {
  53. String sql1 = "SELECT PERFIX perfix,SUFFIX suffix,SEPARATOR separator,DIGIT digit FROM T_YJPT_NORULE WHERE NO_RULE_TYPE=?";
  54. String sql2 = "SELECT CURRENT_NO currentNo FROM T_YJPT_CURRENTNO WHERE PATTERN=?";
  55. String sql3 = "UPDATE T_YJPT_CURRENTNO SET CURRENT_NO=? WHERE PATTERN=?";
  56. String sql4 = "INSERT INTO T_YJPT_CURRENTNO(PATTERN,CURRENT_NO) VALUES(?,?)";
  57. StringBuffer no = new StringBuffer();
  58. String perfix = "";
  59. String suffix = "";
  60. String separator = "-";
  61. String pattern = "";
  62. String currentNo = "0";
  63. int digit = 0;
  64. try {
  65. SqlRowSet rs = jdbcTemplate.queryForRowSet(sql1, noRuleType);
  66. if (rs.next()) {
  67. perfix = rs.getString("perfix");
  68. suffix = rs.getString("suffix");
  69. separator = rs.getString("separator") == null ? "" : rs
  70. .getString("separator");
  71. digit = rs.getInt("digit");
  72. SimpleDateFormat df = new SimpleDateFormat(suffix);
  73. no.append(perfix);
  74. no.append(separator);
  75. no.append(df.format(new Date()));
  76. pattern = no.toString();
  77. rs = jdbcTemplate.queryForRowSet(sql2, pattern);
  78. if (rs.next()) {
  79. currentNo = rs.getString("currentNo");
  80. currentNo = plusOne(currentNo, digit);
  81. jdbcTemplate.update(sql3, currentNo, pattern);
  82. } else {
  83. currentNo = plusOne(currentNo, digit);
  84. jdbcTemplate.update(sql4, pattern, currentNo);
  85. }
  86. no.append(separator);
  87. no.append(currentNo);
  88. }
  89. } catch (Exception e) {
  90. e.printStackTrace();
  91. }
  92. return no.toString();
  93. }
  94. /**
  95. * 生成唯一编号,供权力阳光使用
  96. *
  97. * 部门编码(10位)+0000000001(流水号10位)
  98. *
  99. * @param seqName
  100. * @return
  101. */
  102. public String generateQlygNo(Long entityId) {
  103. StringBuffer no = new StringBuffer();
  104. // if (null != seqName) {
  105. no.append(Utils.getCurrentUser().getSzd().getByzd4() + "JT");
  106. // String sql = "SELECT " + seqName + ".nextval FROM dual";
  107. // try {
  108. // SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
  109. // if (rs.next()) {
  110. String seq = entityId.toString();
  111. if (null != seq && seq.length() > 0) {
  112. if (seq.length() < 10) {
  113. for (int i = seq.length(); i < 10; i++) {
  114. no.append("0");
  115. }
  116. no.append(seq);
  117. } else {
  118. no.append(seq.substring(seq.length() - 10, seq.length()));
  119. }
  120. }
  121. // }
  122. // } catch (Exception e) {
  123. // e.printStackTrace();
  124. // }
  125. // }
  126. return no.toString();
  127. }
  128. public Long generateEntityId(String seqName) {
  129. if (seqName != null) {
  130. String sql = "SELECT " + seqName + ".nextval FROM dual";
  131. try {
  132. SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);
  133. if (rs.next()) {
  134. String seq = rs.getString(1);
  135. if (null != seq && seq.length() > 0) {
  136. return Long.parseLong(seq);
  137. }
  138. }
  139. } catch (Exception e) {
  140. e.printStackTrace();
  141. }
  142. }
  143. return 0l;
  144. }
  145. /**
  146. * 编号加一
  147. * <p>
  148. * 例如,no:003,digit:3,返回004;no:05,digit:4,返回0006
  149. *
  150. * @param no
  151. * @param digit
  152. * @return
  153. */
  154. private String plusOne(String no, int digit) {
  155. if (!StringUtils.hasLength(no))
  156. return "001";
  157. String str = no;
  158. if (no.length() < digit) {
  159. for (int i = no.length(); i < digit; i++) {
  160. str = "0" + str;
  161. }
  162. } else {
  163. str = no.substring(0, digit);
  164. }
  165. int n = NumberUtils.toInt("1" + str);
  166. n++;
  167. return String.valueOf(n).substring(1);
  168. }
  169. @Override
  170. public T findOne(Specification<T> spec) {
  171. return getDao().findOne(spec);
  172. }
  173. @Override
  174. public List<T> findAll(Specification<T> spec) {
  175. return getDao().findAll(spec);
  176. }
  177. @Override
  178. public Page<T> findAll(Specification<T> spec, Pageable pageable) {
  179. return getDao().findAll(spec, pageable);
  180. }
  181. @Override
  182. public List<T> findAll(Specification<T> spec, Sort sort) {
  183. return getDao().findAll(spec, sort);
  184. }
  185. @Override
  186. public long count(Specification<T> spec) {
  187. return getDao().count(spec);
  188. }
  189. @Override
  190. public Page<T> findAll(Pageable pageable) {
  191. return getDao().findAll(pageable);
  192. }
  193. @Override
  194. public long count() {
  195. return getDao().count();
  196. }
  197. @Override
  198. public void delete(ID id) {
  199. getDao().delete(id);
  200. }
  201. @Override
  202. public void delete(T entity) {
  203. getDao().delete(entity);
  204. }
  205. @Override
  206. public void delete(Iterable<? extends T> entities) {
  207. getDao().delete(entities);
  208. }
  209. @Override
  210. public void deleteAll() {
  211. getDao().deleteAll();
  212. }
  213. @Override
  214. public boolean exists(ID id) {
  215. return getDao().exists(id);
  216. }
  217. @Override
  218. public T findOne(ID id) {
  219. return getDao().findOne(id);
  220. }
  221. @Override
  222. public <S extends T> S save(S entity) {
  223. entity.setUpdateDate(new Date());
  224. entity.setUpdateUser(Utils.getCurrentUser());
  225. return getDao().save(entity);
  226. }
  227. @Override
  228. public List<T> findAll() {
  229. return getDao().findAll();
  230. }
  231. @Override
  232. public List<T> findAll(Sort sort) {
  233. return getDao().findAll(sort);
  234. }
  235. @Override
  236. public List<T> findAll(Iterable<ID> ids) {
  237. return getDao().findAll(ids);
  238. }
  239. @Override
  240. public <S extends T> List<S> save(Iterable<S> entities) {
  241. for (S entity : entities) {
  242. entity.setUpdateDate(new Date());
  243. entity.setUpdateUser(Utils.getCurrentUser());
  244. }
  245. return getDao().save(entities);
  246. }
  247. @Override
  248. public void flush() {
  249. getDao().flush();
  250. }
  251. @Override
  252. public T saveAndFlush(T entity) {
  253. entity.setUpdateDate(new Date());
  254. entity.setUpdateUser(Utils.getCurrentUser());
  255. return getDao().saveAndFlush(entity);
  256. }
  257. @Override
  258. public void deleteInBatch(Iterable<T> entities) {
  259. getDao().deleteInBatch(entities);
  260. }
  261. @Override
  262. public void deleteAllInBatch() {
  263. getDao().deleteAllInBatch();
  264. }
  265. @Override
  266. public void logicDelete(ID id) {
  267. getDao().logicDelete(id);
  268. }
  269. @Override
  270. public void logicDelete(T entity) {
  271. getDao().logicDelete(entity);
  272. }
  273. @Override
  274. public void logicDelete(Iterable<T> entities) {
  275. getDao().logicDelete(entities);
  276. }
  277. }