30bbd14fd7fd60745a777c9512efc5990222e29a.svn-base 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package org.jeecg.modules.system.rule;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import io.netty.util.internal.StringUtil;
  5. import org.jeecg.common.handler.IFillRuleHandler;
  6. import org.jeecg.common.util.SpringContextUtils;
  7. import org.jeecg.common.util.YouBianCodeUtil;
  8. import org.jeecg.modules.system.entity.SysDepart;
  9. import org.jeecg.modules.system.service.ISysDepartService;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. /**
  13. * @Author scott
  14. * @Date 2019/12/9 11:33
  15. * @Description: 机构编码生成规则
  16. */
  17. public class OrgCodeRule implements IFillRuleHandler {
  18. @Override
  19. public Object execute(JSONObject params, JSONObject formData) {
  20. ISysDepartService sysDepartService = (ISysDepartService) SpringContextUtils.getBean("sysDepartServiceImpl");
  21. LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
  22. LambdaQueryWrapper<SysDepart> query1 = new LambdaQueryWrapper<SysDepart>();
  23. // 创建一个List集合,存储查询返回的所有SysDepart对象
  24. List<SysDepart> departList = new ArrayList<>();
  25. String[] strArray = new String[2];
  26. //定义部门类型
  27. String orgType = "";
  28. // 定义新编码字符串
  29. String newOrgCode = "";
  30. // 定义旧编码字符串
  31. String oldOrgCode = "";
  32. String parentId = null;
  33. if (formData != null && formData.size() > 0) {
  34. Object obj = formData.get("parentId");
  35. if (obj != null) parentId = obj.toString();
  36. } else {
  37. if (params != null) {
  38. Object obj = params.get("parentId");
  39. if (obj != null) parentId = obj.toString();
  40. }
  41. }
  42. //如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回
  43. if (StringUtil.isNullOrEmpty(parentId)) {
  44. // 线判断数据库中的表是否为空,空则直接返回初始编码
  45. query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId);
  46. query1.orderByDesc(SysDepart::getOrgCode);
  47. departList = sysDepartService.list(query1);
  48. if (departList == null || departList.size() == 0) {
  49. strArray[0] = YouBianCodeUtil.getNextYouBianCode(null);
  50. strArray[1] = "1";
  51. return strArray;
  52. } else {
  53. SysDepart depart = departList.get(0);
  54. oldOrgCode = depart.getOrgCode();
  55. orgType = depart.getOrgType();
  56. newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode);
  57. }
  58. } else {//反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级
  59. // 封装查询同级的条件
  60. query.eq(SysDepart::getParentId, parentId);
  61. // 降序排序
  62. query.orderByDesc(SysDepart::getOrgCode);
  63. // 查询出同级部门的集合
  64. List<SysDepart> parentList = sysDepartService.list(query);
  65. // 查询出父级部门
  66. SysDepart depart = sysDepartService.getById(parentId);
  67. // 获取父级部门的Code
  68. String parentCode = depart.getOrgCode();
  69. // 根据父级部门类型算出当前部门的类型
  70. orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1);
  71. // 处理同级部门为null的情况
  72. if (parentList == null || parentList.size() == 0) {
  73. // 直接生成当前的部门编码并返回
  74. newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null);
  75. } else { //处理有同级部门的情况
  76. // 获取同级部门的编码,利用工具类
  77. String subCode = parentList.get(0).getOrgCode();
  78. // 返回生成的当前部门编码
  79. newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode);
  80. }
  81. }
  82. // 返回最终封装了部门编码和部门类型的数组
  83. strArray[0] = newOrgCode;
  84. strArray[1] = orgType;
  85. return strArray;
  86. }
  87. }