Kaynağa Gözat

增加编码管理接口、服务类

chenwen 2 yıl önce
ebeveyn
işleme
43a747cf47

+ 1 - 3
src/main/java/com/hb/proj/auth/controller/MenuController.java

@@ -111,9 +111,7 @@ public class MenuController {
 	
 	/**
 	 * 获得菜单子节点
-	 * @param superId
-	 * @param targetDepth
-	 * @param response
+	 * @param superId   父菜单id
 	 */
 	@PostMapping("/treeNode")
 	public RespVO<Object> treeNode(String superId){

+ 172 - 0
src/main/java/com/hb/proj/model/SortCodePO.java

@@ -0,0 +1,172 @@
+package com.hb.proj.model;
+
+import java.util.Date;
+
+public class SortCodePO {
+
+	private String codeId;
+	
+	private String codeName;
+	
+	private String fatherCodeId;
+	
+	private Integer displayNum;
+	
+	private String assistCode;
+	
+	private String domainCode;
+	
+	private String py;
+	
+	private String spare1;
+	
+	private String spare2;
+	
+	private String spare3;
+	
+	private String spare4;
+	
+	private String modifyBy;
+	
+	private Date modifyTime;
+	
+	private String createBy;
+	
+	private Date createTime;
+	
+	private Boolean delIf;
+
+	public String getCodeId() {
+		return codeId;
+	}
+
+	public void setCodeId(String codeId) {
+		this.codeId = codeId;
+	}
+
+	public String getCodeName() {
+		return codeName;
+	}
+
+	public void setCodeName(String codeName) {
+		this.codeName = codeName;
+	}
+
+	public String getFatherCodeId() {
+		return fatherCodeId;
+	}
+
+	public void setFatherCodeId(String fatherCodeId) {
+		this.fatherCodeId = fatherCodeId;
+	}
+
+	public Integer getDisplayNum() {
+		return displayNum;
+	}
+
+	public void setDisplayNum(Integer displayNum) {
+		this.displayNum = displayNum;
+	}
+
+	public String getAssistCode() {
+		return assistCode;
+	}
+
+	public void setAssistCode(String assistCode) {
+		this.assistCode = assistCode;
+	}
+
+	public String getDomainCode() {
+		return domainCode;
+	}
+
+	public void setDomainCode(String domainCode) {
+		this.domainCode = domainCode;
+	}
+
+	public String getPy() {
+		return py;
+	}
+
+	public void setPy(String py) {
+		this.py = py;
+	}
+
+	public String getSpare1() {
+		return spare1;
+	}
+
+	public void setSpare1(String spare1) {
+		this.spare1 = spare1;
+	}
+
+	public String getSpare2() {
+		return spare2;
+	}
+
+	public void setSpare2(String spare2) {
+		this.spare2 = spare2;
+	}
+
+	public String getSpare3() {
+		return spare3;
+	}
+
+	public void setSpare3(String spare3) {
+		this.spare3 = spare3;
+	}
+
+	
+	
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	
+
+	public String getModifyBy() {
+		return modifyBy;
+	}
+
+	public void setModifyBy(String modifyBy) {
+		this.modifyBy = modifyBy;
+	}
+
+	public String getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Boolean getDelIf() {
+		return delIf;
+	}
+
+	public void setDelIf(Boolean delIf) {
+		this.delIf = delIf;
+	}
+
+	public String getSpare4() {
+		return spare4;
+	}
+
+	public void setSpare4(String spare4) {
+		this.spare4 = spare4;
+	}
+	
+}

+ 14 - 0
src/main/java/com/hb/proj/model/SortCodeVO.java

@@ -0,0 +1,14 @@
+package com.hb.proj.model;
+
+public class SortCodeVO extends SortCodePO {
+
+	private String fatherCodeName;
+
+	public String getFatherCodeName() {
+		return fatherCodeName;
+	}
+
+	public void setFatherCodeName(String fatherCodeName) {
+		this.fatherCodeName = fatherCodeName;
+	}
+}

+ 121 - 0
src/main/java/com/hb/proj/sys/controller/SortCodeController.java

@@ -0,0 +1,121 @@
+package com.hb.proj.sys.controller;
+
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.hb.proj.allconfig.AccessToken;
+import com.hb.proj.model.SortCodePO;
+import com.hb.proj.model.SortCodeVO;
+import com.hb.proj.sys.service.SortCodeService;
+import com.hb.proj.utils.RespVO;
+import com.hb.proj.utils.RespVOBuilder;
+
+import jakarta.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/code")
+@Validated
+public class SortCodeController {
+
+	@Autowired
+	private SortCodeService service;
+	
+	/**
+	 * 获取所有编码记录
+	 * @return
+	 */
+	@RequestMapping("/loadAll")
+	public RespVO<List<SortCodeVO>> loadAll(){
+		return RespVOBuilder.ok(service.loadAll());
+	}
+	
+	/**
+	 * 获得单个编码
+	 * @param menuId  编码记录id
+	 * @return
+	 */
+	@RequestMapping("/get")
+	public RespVO<SortCodeVO> get(@NotBlank(message = "编码id不能为空") String codeId){
+		
+		return RespVOBuilder.ok(service.getSortCode(codeId));
+	}
+	
+	/**
+	 * 增加新编码
+	 * @param code  编码实体
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/add")
+	public RespVO<String> add(@Validated SortCodePO  code,AccessToken token){
+		
+		if(StringUtils.isBlank(code.getFatherCodeId())){
+			code.setFatherCodeId("0");
+		}
+		String newAssistCode = service.generateLeveledCode(code.getFatherCodeId());
+		if(newAssistCode==null){
+			return RespVOBuilder.error("指定的父编码不存在");
+		}
+		code.setAssistCode(newAssistCode);
+		code.setModifyBy(token!=null?token.getTokenId():"unknow");
+		code.setCreateBy(code.getModifyBy());
+		return RespVOBuilder.ok(service.addSortCode(code));
+	}
+	
+	
+	/**
+	 * 更新编码
+	 * @param code  编码实体
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/update")
+	public RespVO<Object> update(@Validated SortCodePO  code,AccessToken token){
+		if(StringUtils.isEmpty(code.getFatherCodeId())){
+			code.setFatherCodeId("0");
+		}
+		code.setModifyBy(token!=null?token.getTokenId():"unknow");
+		
+		SortCodeVO dbCode=service.getSortCode(code.getCodeId());
+		
+		//非更新数据保留原值
+		code.setAssistCode(dbCode.getAssistCode());
+		code.setCreateBy(dbCode.getCreateBy());
+		code.setCreateTime(dbCode.getCreateTime());
+		code.setDelIf(dbCode.getDelIf());
+		
+		String fatherCodeId=code.getFatherCodeId();
+		if (!fatherCodeId.equals(dbCode.getFatherCodeId())) { // 隶属关系变动后,修正assistCode
+			String newAssistCode =service.generateLeveledCode(fatherCodeId);
+			if(newAssistCode==null){
+				return RespVOBuilder.error("指定的父编码不存在");
+			}
+			service.updateSortCode(code,newAssistCode);
+		}
+		else{
+			service.updateSortCode(code,null);
+		}
+		return RespVOBuilder.ok();
+	}
+	
+	/**
+	 * 删除单个编码
+	 * @param codeId  被删除编码id
+	 * @return
+	 */
+	@RequestMapping("/delete")
+	public RespVO<Object> delete(@NotBlank(message = "编码id不能为空") String codeId){
+		service.deleteSortCode(codeId);
+		return RespVOBuilder.ok();
+	}
+	
+	
+	
+	
+}

+ 186 - 0
src/main/java/com/hb/proj/sys/service/SortCodeService.java

@@ -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;
+	}
+}