提交 26c9db11 编写于 作者: O o2null

Merge branch 'feature/addUnitLevelOrderNumber' into 'develop_java8'

添加组织层级排序值

See merge request o2oa/o2oa!3375
......@@ -77,6 +77,7 @@ public class Config {
public static final String PATH_CONFIG_COMMUNICATE = "config/communicate.json";
public static final String PATH_CONFIG_EXMAIL = "config/exmail.json";
public static final String PATH_CONFIG_PORTAL = "config/portal.json";
public static final String PATH_CONFIG_ORGANIZATION = "config/organization.json";
public static final String PATH_CONFIG_CACHE = "config/cache.json";
public static final String PATH_CONFIG_COMPONENTS = "config/components.json";
public static final String PATH_CONFIG_EMAIL = "config/email.json";
......@@ -1193,12 +1194,12 @@ public class Config {
public Map<String, JsonObject> customConfig = new HashMap<>();
public static synchronized JsonObject customConfig(String configName) throws Exception {
if(StringUtils.isBlank(configName)){
if (StringUtils.isBlank(configName)) {
return null;
}else{
if(instance().customConfig.get(configName)==null){
JsonObject obj = BaseTools.readConfigObject(DIR_CONFIG+"/"+configName+".json", JsonObject.class);
if(obj!=null){
} else {
if (instance().customConfig.get(configName) == null) {
JsonObject obj = BaseTools.readConfigObject(DIR_CONFIG + "/" + configName + ".json", JsonObject.class);
if (obj != null) {
instance().customConfig.put(configName, obj);
}
}
......@@ -1206,6 +1207,19 @@ public class Config {
}
}
private Organization organization;
public static synchronized Organization organization() throws Exception {
if (null == instance().organization) {
Organization obj = BaseTools.readConfigObject(PATH_CONFIG_ORGANIZATION, Organization.class);
if (null == obj) {
obj = Organization.defaultInstance();
}
instance().organization = obj;
}
return instance().organization;
}
public static Object resource(String name) throws Exception {
return initialContext().lookup(name);
}
......
package com.x.base.core.project.config;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.tools.BaseTools;
import com.x.base.core.project.tools.DefaultCharset;
import com.x.base.core.project.tools.NumberTools;
public class Organization extends ConfigObject {
private static final long serialVersionUID = -2193428649985413384L;
public final static Integer DEFAULT_UNITLEVELORDERNUMBERDIGITS = 10;
public static Organization defaultInstance() {
return new Organization();
}
@FieldDescribe("unit中unitLevelOrderNumber扩充位数,<=0不扩充.")
private Integer unitLevelOrderNumberDigits = DEFAULT_UNITLEVELORDERNUMBERDIGITS;
public Integer getUnitLevelOrderNumberDigits() {
return NumberTools.nullOrLessThan(this.unitLevelOrderNumberDigits, 1) ? DEFAULT_UNITLEVELORDERNUMBERDIGITS
: this.unitLevelOrderNumberDigits;
}
public void save() throws Exception {
File file = new File(Config.base(), Config.PATH_CONFIG_ORGANIZATION);
FileUtils.write(file, XGsonBuilder.toJson(this), DefaultCharset.charset);
BaseTools.executeSyncFile(Config.PATH_CONFIG_ORGANIZATION);
}
}
\ No newline at end of file
......@@ -7,6 +7,8 @@ import com.x.base.core.project.gson.GsonPropertyObject;
public class Unit extends GsonPropertyObject {
private static final long serialVersionUID = 5213623128307370812L;
@FieldDescribe("组织名称")
private String name;
@FieldDescribe("唯一标识")
......@@ -27,6 +29,8 @@ public class Unit extends GsonPropertyObject {
private String superior;
@FieldDescribe("排序号")
private Integer orderNumber;
@FieldDescribe("层级排序号")
private String levelOrderNumber;
@FieldDescribe("企业微信Id")
private String qiyeweixinId;
@FieldDescribe("钉钉Id")
......@@ -148,4 +152,12 @@ public class Unit extends GsonPropertyObject {
this.zhengwuDingdingId = zhengwuDingdingId;
}
public String getLevelOrderNumber() {
return levelOrderNumber;
}
public void setLevelOrderNumber(String levelOrderNumber) {
this.levelOrderNumber = levelOrderNumber;
}
}
package com.x.organization.assemble.control.factory;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.stream.Collectors;
......@@ -10,18 +15,20 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import com.x.base.core.project.config.Config;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.project.cache.Cache.CacheCategory;
import com.x.base.core.project.cache.Cache.CacheKey;
import com.x.base.core.project.cache.CacheManager;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.NumberTools;
import com.x.organization.assemble.control.AbstractFactory;
import com.x.organization.assemble.control.Business;
import com.x.organization.core.entity.PersistenceProperties;
import com.x.organization.core.entity.Unit;
import com.x.organization.core.entity.Unit_;
import com.x.base.core.project.cache.Cache.CacheCategory;
import com.x.base.core.project.cache.Cache.CacheKey;
import com.x.base.core.project.cache.CacheManager;
public class UnitFactory extends AbstractFactory {
......@@ -113,20 +120,19 @@ public class UnitFactory extends AbstractFactory {
}
public <T extends Unit> List<T> sort(List<T> list) throws Exception {
if(Config.person().getPersonUnitOrderByAsc()) {
List<T> os = list.stream().sorted(Comparator.comparing(Unit::getLevel, Comparator.nullsLast(Integer::compareTo))
if (BooleanUtils.isTrue(Config.person().getPersonUnitOrderByAsc())) {
return list.stream().sorted(Comparator.comparing(Unit::getLevel, Comparator.nullsLast(Integer::compareTo))
.thenComparing(Comparator.comparing(Unit::getOrderNumber, Comparator.nullsLast(Integer::compareTo)))
.thenComparing(
Comparator.comparing(Unit::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
.collect(Collectors.toList());
return os;
}else{
List<T> os = list.stream().sorted(Comparator.comparing(Unit::getLevel, Comparator.nullsLast(Integer::compareTo))
.thenComparing(Comparator.comparing(Unit::getOrderNumber, Comparator.nullsLast(Integer::compareTo)).reversed())
} else {
return list.stream().sorted(Comparator.comparing(Unit::getLevel, Comparator.nullsLast(Integer::compareTo))
.thenComparing(Comparator.comparing(Unit::getOrderNumber, Comparator.nullsLast(Integer::compareTo))
.reversed())
.thenComparing(
Comparator.comparing(Unit::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
.collect(Collectors.toList());
return os;
}
}
......@@ -213,19 +219,21 @@ public class UnitFactory extends AbstractFactory {
os.addAll(this.listSubNestedObject(unit));
for (Unit o : os) {
List<Unit> list = this.listSupNestedObject(o);
/** 级别从1开始 */
// 级别从1开始
o.setLevel(list.size() + 1);
List<String> names = ListTools.extractProperty(list, "name", String.class, false, false);
// Collections.reverse(names);
List<String> names = ListTools.extractProperty(list, Unit.name_FIELDNAME, String.class, false, false);
List<Integer> levelOrderNumbers = ListTools.extractProperty(list, Unit.orderNumber_FIELDNAME, Integer.class,
false, false);
names.add(o.getName());
levelOrderNumbers.add(o.getOrderNumber());
o.setLevelName(StringUtils.join(names, PersistenceProperties.Unit.levelNameSplit));
// List<String> inheritControllerList = new ArrayList<>();
// for (Unit u : list) {
// if (ListTools.isNotEmpty(u.getControllerList())) {
// inheritControllerList.addAll(u.getControllerList());
// }
// }
// o.setInheritedControllerList(ListTools.trim(inheritControllerList, true, true));
List<String> levelOrderNumberStrings = new ArrayList<>();
final String format = "%0" + Config.organization().getUnitLevelOrderNumberDigits() + "d";
for (Integer i : levelOrderNumbers) {
// 不支持<0排序
levelOrderNumberStrings.add(String.format(format, (NumberTools.nullOrLessThan(i, 0) ? 0 : i)));
}
o.setLevelOrderNumber(StringUtils.join(levelOrderNumberStrings, PersistenceProperties.Unit.levelNameSplit));
}
}
......@@ -252,7 +260,7 @@ public class UnitFactory extends AbstractFactory {
public List<String> listSubDirect(String id) throws Exception {
if (StringUtils.isEmpty(id)) {
return new ArrayList<String>();
return new ArrayList<>();
}
EntityManager em = this.entityManagerContainer().get(Unit.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
......@@ -285,7 +293,7 @@ public class UnitFactory extends AbstractFactory {
public List<Unit> listSubDirectObject(Unit unit) throws Exception {
if (null == unit) {
return new ArrayList<Unit>();
return new ArrayList<>();
}
EntityManager em = this.entityManagerContainer().get(Unit.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
......
......@@ -44,7 +44,7 @@ class ActionEdit extends BaseAction {
Business business = new Business(emc);
Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
Unit unit = business.unit().pick(flag);
Unit oldUnit = unit;
//Unit oldUnit = unit;
boolean checkFlag = false;
if (null == unit) {
......@@ -78,11 +78,13 @@ class ActionEdit extends BaseAction {
if (this.duplicateName(business, unit)) {
throw new ExceptionDuplicateName(unit.getName());
}
/** 判断是否修改了组织级别或组织名称,如果修改了,需要重新计算当前组织及下属组织的组织级别 */
checkFlag = this.checkUnitTypeName(oldUnit, unit);
if (checkFlag) {
business.unit().adjustInherit(unit);
}
// /** 判断是否修改了组织级别或组织名称,如果修改了,需要重新计算当前组织及下属组织的组织级别 */
// checkFlag = this.checkUnitTypeName(oldUnit, unit);
// if (checkFlag) {
// business.unit().adjustInherit(unit);
// }
// 现在由于可能修改了上级组织排序,所以都需要重新计算.
business.unit().adjustInherit(unit);
emc.check(unit, CheckPersistType.all);
emc.commit();
CacheManager.notify(Unit.class);
......
......@@ -165,6 +165,13 @@ public class Unit extends SliceJpaObject {
@Column(length = JpaObject.length_2K, name = ColumnNamePrefix + levelName_FIELDNAME)
private String levelName;
public static final String levelOrderNumber_FIELDNAME = "levelOrderNumber";
@FieldDescribe("层级排序号,使用" + PersistenceProperties.Unit.levelNameSplit
+ "进行分割.将逐级unit中的orderNumber的Integer值扩充到在Organization配置中指定位数的文本值,前填充0")
@CheckPersist(allowEmpty = true)
@Column(length = JpaObject.length_255B, name = ColumnNamePrefix + levelOrderNumber_FIELDNAME)
private String levelOrderNumber;
public static final String superior_FIELDNAME = "superior";
@FieldDescribe("上级组织.")
@Column(length = JpaObject.length_id, name = ColumnNamePrefix + superior_FIELDNAME)
......@@ -189,18 +196,6 @@ public class Unit extends SliceJpaObject {
@CheckPersist(allowEmpty = true, citationExists = @CitationExist(type = Person.class))
private List<String> controllerList;
// public static final String inheritedControllerList_FIELDNAME = "inheritedControllerList";
// @FieldDescribe("继承自上级组织的管理人员.")
// @PersistentCollection(fetch = FetchType.EAGER)
// @OrderColumn(name = ORDERCOLUMNCOLUMN)
// @ContainerTable(name = TABLE + ContainerTableNameMiddle
// + inheritedControllerList_FIELDNAME, joinIndex = @Index(name = TABLE + IndexNameMiddle
// + inheritedControllerList_FIELDNAME + JoinIndexNameSuffix))
// @ElementColumn(length = JpaObject.length_id, name = ColumnNamePrefix + inheritedControllerList_FIELDNAME)
// @ElementIndex(name = TABLE + IndexNameMiddle + inheritedControllerList_FIELDNAME + ElementIndexNameSuffix)
// @CheckPersist(allowEmpty = true, citationExists = @CitationExist(type = Person.class))
// private List<String> inheritedControllerList;
public static final String dingdingId_FIELDNAME = "dingdingId";
@FieldDescribe("钉钉部门ID.")
@Column(length = length_255B, name = ColumnNamePrefix + dingdingId_FIELDNAME)
......@@ -351,14 +346,6 @@ public class Unit extends SliceJpaObject {
this.distinguishedName = distinguishedName;
}
// public List<String> getInheritedControllerList() {
// return inheritedControllerList;
// }
//
// public void setInheritedControllerList(List<String> inheritedControllerList) {
// this.inheritedControllerList = inheritedControllerList;
// }
public String getDescription() {
return description;
}
......@@ -438,4 +425,12 @@ public class Unit extends SliceJpaObject {
public void setWeLinkHash(String weLinkHash) {
this.weLinkHash = weLinkHash;
}
public String getLevelOrderNumber() {
return levelOrderNumber;
}
public void setLevelOrderNumber(String levelOrderNumber) {
this.levelOrderNumber = levelOrderNumber;
}
}
\ No newline at end of file
......@@ -221,4 +221,14 @@ public class UnitFactory {
return (os.get(0).getOrderNumber() == null) ? defaultValue : os.get(0).getOrderNumber();
}
}
}
/** 根据组织获取层级排序号 */
public String getLevelOrderNumber(String value, String defaultValue) throws Exception {
List<? extends Unit> os = ActionListObject.execute(context, Arrays.asList(value));
if (os.isEmpty()) {
return defaultValue;
} else {
return (os.get(0).getLevelOrderNumber() == null) ? defaultValue : os.get(0).getLevelOrderNumber();
}
}
}
\ No newline at end of file
......@@ -268,6 +268,9 @@ class ActionProcessing extends BaseAction {
// 记录处理身份所在组织的排序号
record.getProperties().setUnitOrderNumber(
business.organization().unit().getOrderNumber(task.getUnit(), Integer.MAX_VALUE));
// 记录处理身份所在组织层级组织排序号
record.getProperties().setUnitLevelOrderNumber(
business.organization().unit().getLevelOrderNumber(task.getUnit(), ""));
// 记录task中身份所有的组织职务.
record.setCompleted(true);
record.setType(Record.TYPE_TASK);
......@@ -320,6 +323,9 @@ class ActionProcessing extends BaseAction {
// 记录处理身份所在组织的排序号
record.getProperties().setUnitOrderNumber(
business.organization().unit().getOrderNumber(task.getUnit(), Integer.MAX_VALUE));
// 记录处理身份所在组织层级组织排序号
record.getProperties()
.setUnitLevelOrderNumber(business.organization().unit().getLevelOrderNumber(task.getUnit(), ""));
// 校验workCompleted,如果存在,那么说明工作已经完成,标识状态为已经完成.
WorkCompleted workCompleted = emc.firstEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME,
task.getJob());
......
......@@ -18,6 +18,9 @@ public class RecordProperties extends JsonProperties {
@FieldDescribe("record中记录的处理人身份所在组织排序值.")
private Integer unitOrderNumber = null;
@FieldDescribe("record中记录的处理人身份所在组织层级排序值.")
private String unitLevelOrderNumber = "";
@FieldDescribe("record中记录的处理人身份所拥有的组织职务,向上递归.")
private List<String> unitDutyList = new ArrayList<>();
......@@ -77,7 +80,7 @@ public class RecordProperties extends JsonProperties {
public static class NextManual {
public NextManual() {
//nothing
// nothing
}
@FieldDescribe("活动")
......@@ -266,4 +269,12 @@ public class RecordProperties extends JsonProperties {
this.unitOrderNumber = unitOrderNumber;
}
public String getUnitLevelOrderNumber() {
return unitLevelOrderNumber;
}
public void setUnitLevelOrderNumber(String unitLevelOrderNumber) {
this.unitLevelOrderNumber = unitLevelOrderNumber;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册