|
@@ -0,0 +1,186 @@
|
|
|
+package com.hb.proj.sys.service;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import com.hb.proj.model.SortCodePO;
|
|
|
+import com.hb.proj.model.SortCodeVO;
|
|
|
+import com.hb.xframework.dao.core.SpringJdbcDAO;
|
|
|
+import com.hb.xframework.dao.util.ColumnNameConverter;
|
|
|
+import com.hb.xframework.dao.util.UUIDHexGenerator;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class SortCodeService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SpringJdbcDAO dao;
|
|
|
+
|
|
|
+ public List<SortCodeVO> loadAll(){
|
|
|
+ return dao.queryForList("select * from tsys_sort_code where del_if=false",SortCodeVO.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> queryCodeTree(List<String> sorts) {
|
|
|
+ if(sorts==null||sorts.size()==0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String sortstr="'"+StringUtils.join(sorts,"','")+"'";
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("select code_id,code_name,father_code_id,assist_code");
|
|
|
+ sql.append(" from tsys_sort_code d");
|
|
|
+ sql.append(" where d.del_if=0 ");
|
|
|
+ sql.append(" and exists (select code_id from t_sort_code d2 where d2.del_if=0 and d2.code_id in ("+sortstr+") and d.assist_code like concat(assist_code,'%'))");
|
|
|
+ return dao.queryForList(sql.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<Map<String, Object>> loadWholeTree(String fatherId){
|
|
|
+ SortCodeVO code=getSortCode(fatherId);
|
|
|
+ if(code==null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return dao.queryForList("select code_id,code_name,father_code_id,assist_code from tsys_sort_code where del_if=0 and assist_code like ? order by display_num", code.getAssistCode()+"%");
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> loadSubCodesByDomain(String fatherId, String domainCode) {
|
|
|
+ String sql = "select code_id,code_name from tsys_sort_code where del_if=0 and father_code_id=? and domain_code=?";
|
|
|
+ return dao.queryForList(sql, fatherId, domainCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<String, Object> loadSortCodeMapping(String fatherId) {
|
|
|
+ String sql = "select code_id,code_name from tsys_sort_code where del_if=0 and father_code_id=?";
|
|
|
+ return dao.queryForMapping(sql, "code_name", "code_id", fatherId);
|
|
|
+ }
|
|
|
+
|
|
|
+ public Map<String, Object> loadSortCodeMapping(List<String> sorts) {
|
|
|
+ if(sorts==null||sorts.size()==0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String sortstr="'"+StringUtils.join(sorts,"','")+"'";
|
|
|
+ String sql = "select code_id,code_name from tsys_sort_code where del_if=0 and code_id in ("+sortstr+")";
|
|
|
+ return dao.queryForMapping(sql, "code_id","code_name");
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> loadCodes(String field, String val, String logic, String valkey, String txtkey) {
|
|
|
+ field = ColumnNameConverter.toUnderline(field);
|
|
|
+ valkey = ColumnNameConverter.toUnderline(valkey);
|
|
|
+ txtkey = ColumnNameConverter.toUnderline(txtkey);
|
|
|
+ if (StringUtils.isEmpty(logic)) {
|
|
|
+ logic = "=";
|
|
|
+ }
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("select " + valkey + " val, " + txtkey + " txt,domain_code from tsys_sort_code d");
|
|
|
+ sql.append(" where d.del_if=0 and " + field + " " + logic + "'" + val + "'");
|
|
|
+ sql.append(" order by display_num");
|
|
|
+ return dao.queryForList(sql.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<Map<String, Object>> queryCodeNodes(String fatherCodeId) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("select code_id id,code_name name,father_code_id p_id,'code' node_type,");
|
|
|
+ sql.append("(select count(1) from tsys_sort_code sub where sub.father_code_id=d.code_id) child_count");
|
|
|
+ sql.append(" from tsys_sort_code d");
|
|
|
+ sql.append(" where d.del_if=0 and d.father_code_id=?");
|
|
|
+ sql.append(" order by d.display_num");
|
|
|
+ return dao.queryForList(sql.toString(), fatherCodeId);
|
|
|
+ }
|
|
|
+
|
|
|
+ public SortCodeVO getSortCode(String codeId) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("select d.*,ifnull(supd.code_name,'') father_code_name from tsys_sort_code d");
|
|
|
+ sql.append(" left join tsys_sort_code supd on d.father_code_id=supd.code_id");
|
|
|
+ sql.append(" where d.code_id=?");
|
|
|
+ return dao.queryForPojo(sql.toString(), SortCodeVO.class,codeId);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String addSortCode(SortCodePO code) {
|
|
|
+ UUIDHexGenerator uuid = UUIDHexGenerator.getInstance();
|
|
|
+ code.setCodeId(uuid.generate());
|
|
|
+ code.setModifyTime(new Date());
|
|
|
+ code.setCreateTime(new Date());
|
|
|
+ code.setDelIf(false);
|
|
|
+ dao.insert(code, "tsys_sort_code");
|
|
|
+ return code.getCodeId();
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean updateSortCode(SortCodePO code, String newAssistCode) {
|
|
|
+ if (StringUtils.isNotEmpty(newAssistCode)) {
|
|
|
+ updateAssistCode(code.getAssistCode(), newAssistCode);
|
|
|
+ code.setAssistCode(newAssistCode);
|
|
|
+ }
|
|
|
+ code.setModifyTime(new Date());
|
|
|
+ code.setDelIf(false);
|
|
|
+ dao.update(code, "tsys_sort_code", "code_id");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 级联删除
|
|
|
+ * @param codeId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean deleteSortCode(String codeId) {
|
|
|
+ SortCodeVO code=getSortCode(codeId);
|
|
|
+ dao.exeUpdate("update tsys_sort_code set del_if=1 where assist_code like ?", code.getAssistCode()+"%");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public String generateLeveledCode(String fatherCodeId) {
|
|
|
+ String superAssistCode = null;
|
|
|
+ if ("0".equals(fatherCodeId)) { // 顶级父节点
|
|
|
+ superAssistCode = "C";
|
|
|
+ } else {
|
|
|
+ SortCodeVO superCode = getSortCode(fatherCodeId);
|
|
|
+ if (superCode == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ superAssistCode = superCode.getAssistCode();
|
|
|
+ if (StringUtils.isEmpty(superAssistCode)) {
|
|
|
+ superAssistCode = "C";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String subMaxSortCode = getMaxAssistCode(fatherCodeId);
|
|
|
+ String superSortCode = superAssistCode != null ? superAssistCode : "C";
|
|
|
+
|
|
|
+ if (subMaxSortCode == null || "null".equalsIgnoreCase(subMaxSortCode)) { // 没有子编码时
|
|
|
+ return superSortCode + "000";
|
|
|
+ }
|
|
|
+ String subSerial = subMaxSortCode.replaceFirst(superSortCode, ""); // 子编码流水号
|
|
|
+
|
|
|
+ int nextNum = Integer.parseInt(subSerial) + 1;
|
|
|
+ subSerial = String.format("%1$03d", nextNum);
|
|
|
+ return superSortCode + subSerial;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean existsCode(String fatherCodeId, String codeName) {
|
|
|
+ String sql = "select count(1) from tsys_sort_code where code_name=? and father_code_id=?";
|
|
|
+ int num = dao.getJdbcTemplate().queryForObject(sql, Integer.class, codeName, fatherCodeId);
|
|
|
+ return num > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean existsDomainCode(String fatherCodeId, String domainCode) {
|
|
|
+ String sql = "select count(1) from tsys_sort_code where domain_code=? and father_code_id=?";
|
|
|
+ int num = dao.getJdbcTemplate().queryForObject(sql, Integer.class, domainCode, fatherCodeId);
|
|
|
+ return num > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private boolean updateAssistCode(String assistCode, String newAssistCode) {
|
|
|
+ StringBuilder sql = new StringBuilder();
|
|
|
+ sql.append("update tsys_sort_code set assist_code=replace(assist_code,?,?)");
|
|
|
+ sql.append(" where assist_code like ?");
|
|
|
+ dao.getJdbcTemplate().update(sql.toString(), assistCode, newAssistCode,assistCode + "%");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getMaxAssistCode(String fatherCodeId) {
|
|
|
+ String sql = "select max(assist_code) assist_code from tsys_sort_code where father_code_id=?";
|
|
|
+ Map<String, Object> rst = dao.queryForMap(sql, fatherCodeId);
|
|
|
+ return rst != null ? (String) rst.get("assistCode") : null;
|
|
|
+ }
|
|
|
+}
|