浏览代码

增加组织机构管理

chenwen 2 年之前
父节点
当前提交
0eba597d29

+ 33 - 0
src/main/java/com/hb/proj/model/OrgPO.java

@@ -0,0 +1,33 @@
+package com.hb.proj.model;
+
+import java.util.Date;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Data
+public class OrgPO {
+
+	private String orgId;
+	
+	@NotBlank(message="组织机构名不能为空")
+	private String orgName;
+	
+	private String superId;
+	
+	private Integer displayNum;
+	
+	private String assistCode;
+	
+	private Date  createTime;
+	
+	private Date  modifyTime;
+	
+	private String createBy;
+	
+	private String modifyBy;
+	
+	private Boolean delIf;
+	
+	private String multiPatrolTemp;  //多井模板
+}

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

@@ -0,0 +1,14 @@
+package com.hb.proj.model;
+
+public class OrgVO extends OrgPO {
+
+	private String superName;
+
+	public String getSuperName() {
+		return superName;
+	}
+
+	public void setSuperName(String superName) {
+		this.superName = superName;
+	}
+}

+ 115 - 0
src/main/java/com/hb/proj/sys/controller/OrgController.java

@@ -0,0 +1,115 @@
+package com.hb.proj.sys.controller;
+
+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.OrgPO;
+import com.hb.proj.model.OrgVO;
+import com.hb.proj.sys.service.OrgService;
+import com.hb.proj.utils.RespVO;
+import com.hb.proj.utils.RespVOBuilder;
+
+import jakarta.validation.constraints.NotBlank;
+
+@RestController
+@RequestMapping("/org")
+@Validated
+public class OrgController {
+
+	@Autowired
+	private OrgService  service;
+	
+	/**
+	 * 获得单个组织机构
+	 * @param orgId  组织机构记录id
+	 * @return
+	 */
+	@RequestMapping("/get")
+	public RespVO<OrgVO> get(@NotBlank(message = "组织机构编号不能为空") String orgId){
+		return RespVOBuilder.ok(service.get(orgId));
+	}
+	
+	
+	/**
+	 * 增加新组织机构
+	 * @param org  组织机构实体
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/add")
+	public RespVO<String> add(@Validated OrgPO  org,AccessToken token){
+		
+		if(StringUtils.isBlank(org.getSuperId())){
+			org.setSuperId("0");
+		}
+		String newAssistCode = service.generateLeveledCode(org.getSuperId());
+		if(newAssistCode==null){
+			return RespVOBuilder.error("指定的父组织机构不存在");
+		}
+		org.setAssistCode(newAssistCode);
+		org.setModifyBy(token!=null?token.getTokenId():"unknow");
+		org.setCreateBy(org.getModifyBy());
+		return RespVOBuilder.ok(service.add(org));
+	}
+	
+	/**
+	 * 更新组织机构
+	 * @param org  组织机构实体
+	 * @param token 登录人信息,自动从请求获取
+	 * @return
+	 */
+	@PostMapping("/update")
+	public RespVO<Object> update(@Validated OrgPO  org,AccessToken token){
+		if(StringUtils.isBlank(org.getSuperId())){
+			org.setSuperId("0");
+		}
+		org.setModifyBy(token!=null?token.getTokenId():"unknow");
+		
+		OrgVO dbOrg=service.get(org.getOrgId());
+		
+		//非前台更新数据保留原值
+		org.setAssistCode(dbOrg.getAssistCode());
+		org.setCreateBy(dbOrg.getCreateBy());
+		org.setCreateTime(dbOrg.getCreateTime());
+		org.setDelIf(dbOrg.getDelIf());
+		
+		String superId=org.getSuperId();
+		if (!superId.equals(dbOrg.getSuperId())) { // 隶属关系变动后,修正assistCode
+			String newAssistCode =service.generateLeveledCode(superId);
+			if(newAssistCode==null){
+				return RespVOBuilder.error("指定的父组织机构不存在");
+			}
+			service.update(org,newAssistCode);
+		}
+		else{
+			service.update(org,null);
+		}
+		return RespVOBuilder.ok();
+	}
+	
+	
+	/**
+	 * 删除单个组织机构
+	 * @param orgId  被删除组织机构id
+	 * @return
+	 */
+	@RequestMapping("/delete")
+	public RespVO<Object> delete(@NotBlank(message = "组织机构编号不能为空") String orgId){
+		service.delete(orgId);
+		return RespVOBuilder.ok();
+	}
+	
+	/**
+	 * 获得组织机构子节点
+	 * @param superId   父组织机构id
+	 */
+	@RequestMapping("/loadSubOrgs")
+	public RespVO<Object> loadSubOrgs(String superId){
+		return RespVOBuilder.ok(service.loadBySuperId(StringUtils.isEmpty(superId)?"0":superId));
+	}
+}

+ 127 - 0
src/main/java/com/hb/proj/sys/service/OrgService.java

@@ -0,0 +1,127 @@
+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.OrgPO;
+import com.hb.proj.model.OrgVO;
+import com.hb.xframework.dao.core.SpringJdbcDAO;
+import com.hb.xframework.dao.util.UUIDHexGenerator;
+
+@Service
+public class OrgService {
+
+	@Autowired
+	private SpringJdbcDAO dao;
+	
+	/**
+	 * 通过父节点查询直接子节点
+	 * @param superId
+	 * @return
+	 */
+	public List<Map<String,Object>>  loadBySuperId(String superId){
+		StringBuilder sql=new StringBuilder();
+		sql.append("select * from tsys_org");
+		sql.append(" where del_if=false and super_id=?");
+		return dao.queryForList(sql.toString(), superId);
+	}
+	
+	public String add(OrgPO org) {
+		UUIDHexGenerator uuid = UUIDHexGenerator.getInstance();
+		org.setOrgId(uuid.generate());
+		org.setCreateTime(new Date());
+		org.setModifyTime(new Date());
+		org.setDelIf(false);
+		dao.insert(org, "tsys_org");
+		return org.getOrgId();
+		
+	}
+	
+	public boolean delete(String orgId) {
+		String sql="update  tsys_org set del_if=true where org_id=?";
+		dao.exeUpdate(sql,orgId);
+		return true;
+	}
+	
+	public OrgVO  get(String orgId) {
+		return dao.queryForPojo("select * from tsys_org where org_id=?", OrgVO.class, orgId);
+	}
+	
+	/**
+	 * 更新组织机构
+	 * @param org  组织机构实体
+	 * @param newAssistCode  更新后的新助记码
+	 * @return
+	 */
+	public boolean update(OrgPO org,String newAssistCode){
+		if(StringUtils.isNotEmpty(newAssistCode)){
+			updateAssistCode(org.getAssistCode(),newAssistCode);
+			org.setAssistCode(newAssistCode);
+		}
+		dao.update(org, "tsys_org", "org_id");
+		return true;
+	}
+	
+	/**
+	 * 创建指定级别下的最大assistCode
+	 * @param superId
+	 * @return
+	 */
+	public String generateLeveledCode(String superId) {
+		String superAssistCode=null;
+		if("0".equals(superId)){  //顶级父节点
+			superAssistCode="C";
+		}
+		else{
+			OrgVO superNode=get(superId);
+			if(superNode==null){
+				return null;
+			}
+			superAssistCode=superNode.getAssistCode();
+			if(StringUtils.isEmpty(superAssistCode)){
+				superAssistCode="C";
+			}
+		}
+		
+		String subMaxAssistCode = getMaxSubAssistCode(superId);
+		
+		if (subMaxAssistCode == null || "null".equalsIgnoreCase(subMaxAssistCode)) { // 没有子编码时
+			return superAssistCode + "000";
+		}
+		String subSerial = subMaxAssistCode.replaceFirst(superAssistCode, ""); // 子编码流水号
+
+		int nextNum = Integer.parseInt(subSerial) + 1;
+		subSerial = String.format("%1$03d", nextNum);
+		return superAssistCode + subSerial;
+	}
+	
+	
+	/**
+	 * 获取指定父级下的最大子节点助记码
+	 * @param superId
+	 * @return
+	 */
+	private String getMaxSubAssistCode(String superId) {
+		String sql = "select max(assist_code) assist_code from tsys_org where super_id=?";
+		return dao.queryForObject(sql, String.class, superId);
+	}
+	
+	/**
+	 * 批量更新某类编码的助记码
+	 * @param assistCode
+	 * @param newAssistCode
+	 * @return
+	 */
+	private boolean updateAssistCode(String assistCode, String newAssistCode) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("update tsys_org set assist_code=replace(assist_code,?,?)");
+		sql.append(" where assist_code like ?");
+		dao.exeUpdate(sql.toString(), assistCode, newAssistCode, assistCode + "%");
+		return true;
+	}
+}