package com.jtgh.yjpt.service; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.ResourceBundle; import org.apache.commons.lang.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.util.StringUtils; import com.jtgh.yjpt.common.Utils; import com.jtgh.yjpt.dao.common.MyRepository; import com.jtgh.yjpt.entity.BaseEntity; /** * Service层基类 * * @author 袁晓冬 * * @param * Entity * @param * 主键 */ public abstract class BaseService, ID extends Serializable> implements MyRepository { /** * 获取service执行Dao * * @return */ protected abstract MyRepository getDao(); /** * 资源文件 */ public ResourceBundle resource = ResourceBundle.getBundle(Locale .getDefault().toString() + "/select", Locale.getDefault(), this .getClass().getClassLoader()); @Autowired private JdbcTemplate jdbcTemplate; /** * 根据编号规则生成编号XX-yyMMdd-001 * * @param noRuleType * @return */ public String generateNoByNoRule(String noRuleType) { String sql1 = "SELECT PERFIX perfix,SUFFIX suffix,SEPARATOR separator,DIGIT digit FROM T_YJPT_NORULE WHERE NO_RULE_TYPE=?"; String sql2 = "SELECT CURRENT_NO currentNo FROM T_YJPT_CURRENTNO WHERE PATTERN=?"; String sql3 = "UPDATE T_YJPT_CURRENTNO SET CURRENT_NO=? WHERE PATTERN=?"; String sql4 = "INSERT INTO T_YJPT_CURRENTNO(PATTERN,CURRENT_NO) VALUES(?,?)"; StringBuffer no = new StringBuffer(); String perfix = ""; String suffix = ""; String separator = "-"; String pattern = ""; String currentNo = "0"; int digit = 0; try { SqlRowSet rs = jdbcTemplate.queryForRowSet(sql1, noRuleType); if (rs.next()) { perfix = rs.getString("perfix"); suffix = rs.getString("suffix"); separator = rs.getString("separator") == null ? "" : rs .getString("separator"); digit = rs.getInt("digit"); SimpleDateFormat df = new SimpleDateFormat(suffix); no.append(perfix); no.append(separator); no.append(df.format(new Date())); pattern = no.toString(); rs = jdbcTemplate.queryForRowSet(sql2, pattern); if (rs.next()) { currentNo = rs.getString("currentNo"); currentNo = plusOne(currentNo, digit); jdbcTemplate.update(sql3, currentNo, pattern); } else { currentNo = plusOne(currentNo, digit); jdbcTemplate.update(sql4, pattern, currentNo); } no.append(separator); no.append(currentNo); } } catch (Exception e) { e.printStackTrace(); } return no.toString(); } /** * 生成唯一编号,供权力阳光使用 * * 部门编码(10位)+0000000001(流水号10位) * * @param seqName * @return */ public String generateQlygNo(Long entityId) { StringBuffer no = new StringBuffer(); // if (null != seqName) { no.append(Utils.getCurrentUser().getSzd().getByzd4() + "JT"); // String sql = "SELECT " + seqName + ".nextval FROM dual"; // try { // SqlRowSet rs = jdbcTemplate.queryForRowSet(sql); // if (rs.next()) { String seq = entityId.toString(); if (null != seq && seq.length() > 0) { if (seq.length() < 10) { for (int i = seq.length(); i < 10; i++) { no.append("0"); } no.append(seq); } else { no.append(seq.substring(seq.length() - 10, seq.length())); } } // } // } catch (Exception e) { // e.printStackTrace(); // } // } return no.toString(); } public Long generateEntityId(String seqName) { if (seqName != null) { String sql = "SELECT " + seqName + ".nextval FROM dual"; try { SqlRowSet rs = jdbcTemplate.queryForRowSet(sql); if (rs.next()) { String seq = rs.getString(1); if (null != seq && seq.length() > 0) { return Long.parseLong(seq); } } } catch (Exception e) { e.printStackTrace(); } } return 0l; } /** * 编号加一 *

* 例如,no:003,digit:3,返回004;no:05,digit:4,返回0006 * * @param no * @param digit * @return */ private String plusOne(String no, int digit) { if (!StringUtils.hasLength(no)) return "001"; String str = no; if (no.length() < digit) { for (int i = no.length(); i < digit; i++) { str = "0" + str; } } else { str = no.substring(0, digit); } int n = NumberUtils.toInt("1" + str); n++; return String.valueOf(n).substring(1); } @Override public T findOne(Specification spec) { return getDao().findOne(spec); } @Override public List findAll(Specification spec) { return getDao().findAll(spec); } @Override public Page findAll(Specification spec, Pageable pageable) { return getDao().findAll(spec, pageable); } @Override public List findAll(Specification spec, Sort sort) { return getDao().findAll(spec, sort); } @Override public long count(Specification spec) { return getDao().count(spec); } @Override public Page findAll(Pageable pageable) { return getDao().findAll(pageable); } @Override public long count() { return getDao().count(); } @Override public void delete(ID id) { getDao().delete(id); } @Override public void delete(T entity) { getDao().delete(entity); } @Override public void delete(Iterable entities) { getDao().delete(entities); } @Override public void deleteAll() { getDao().deleteAll(); } @Override public boolean exists(ID id) { return getDao().exists(id); } @Override public T findOne(ID id) { return getDao().findOne(id); } @Override public S save(S entity) { entity.setUpdateDate(new Date()); entity.setUpdateUser(Utils.getCurrentUser()); return getDao().save(entity); } @Override public List findAll() { return getDao().findAll(); } @Override public List findAll(Sort sort) { return getDao().findAll(sort); } @Override public List findAll(Iterable ids) { return getDao().findAll(ids); } @Override public List save(Iterable entities) { for (S entity : entities) { entity.setUpdateDate(new Date()); entity.setUpdateUser(Utils.getCurrentUser()); } return getDao().save(entities); } @Override public void flush() { getDao().flush(); } @Override public T saveAndFlush(T entity) { entity.setUpdateDate(new Date()); entity.setUpdateUser(Utils.getCurrentUser()); return getDao().saveAndFlush(entity); } @Override public void deleteInBatch(Iterable entities) { getDao().deleteInBatch(entities); } @Override public void deleteAllInBatch() { getDao().deleteAllInBatch(); } @Override public void logicDelete(ID id) { getDao().logicDelete(id); } @Override public void logicDelete(T entity) { getDao().logicDelete(entity); } @Override public void logicDelete(Iterable entities) { getDao().logicDelete(entities); } }