Przeglądaj źródła

1、修复多租户下普通用户登录人员组织中人员展现重复的问题
2、修复并发创建同一手机号码用户都能成功的问题
3、修改管理员创建的用户不归属任何租户下

o2sword 5 lat temu
rodzic
commit
fab9778163

+ 18 - 9
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/identity/ActionCreate.java

@@ -1,6 +1,9 @@
 package com.x.organization.assemble.control.jaxrs.identity;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -88,25 +91,31 @@ class ActionCreate extends BaseAction {
 				emc.beginTransaction(Person.class);
 
 				emc.persist(identity, CheckPersistType.all);
-				List<Unit> topUnits = business.unit().pick(
-						ListTools.trim(person.getTopUnitList(), true, true, this.topUnit(business, unit).getId()));
-				person.setTopUnitList(ListTools.extractField(topUnits, Unit.id_FIELDNAME, String.class, true, true));
+				Set<String> topUnits = new HashSet<>();
+				topUnits.add(this.topUnit(business, unit).getId());
+				for (Identity o : others){
+					Unit u = business.unit().pick(o.getUnit());
+					if(u != null){
+						topUnits.add(this.topUnit(business, u).getId());
+					}
+				}
+				person.setTopUnitList(new ArrayList<>(topUnits));
 				emc.persist(person, CheckPersistType.all);
 
 				emc.commit();
 				wo.setId(identity.getId());
-				
+
 				/**创建 组织变更org消息通信 */
 				OrgMessageFactory  orgMessageFactory = new OrgMessageFactory();
 				orgMessageFactory.createMessageCommunicate("add", "identity", identity, effectivePerson);
-				
+
 			}
 			CacheManager.notify(Identity.class);
 			CacheManager.notify(Person.class);
-			
-		
-			
-			
+
+
+
+
 			result.setData(wo);
 			return result;
 		}

+ 2 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionCreate.java

@@ -52,8 +52,8 @@ class ActionCreate extends BaseAction {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
-			if ((!Config.token().isInitialManager(effectivePerson.getDistinguishedName()))
-					&& (!effectivePerson.isCipher())) {
+			if (!effectivePerson.isManager() && business.hasAnyRole(effectivePerson, OrganizationDefinition.OrganizationManager,
+					OrganizationDefinition.Manager)) {
 				Person current = business.person().pick(effectivePerson.getDistinguishedName());
 				List<Unit> topUnits = business.unit().pick(current.getTopUnitList());
 				person.setTopUnitList(ListTools.extractField(topUnits, Unit.id_FIELDNAME, String.class, true, true));

+ 18 - 3
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListNext.java

@@ -3,6 +3,8 @@ package com.x.organization.assemble.control.jaxrs.person;
 import java.util.List;
 import java.util.Optional;
 
+import com.x.base.core.project.organization.OrganizationDefinition;
+import com.x.base.core.project.tools.ListTools;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
@@ -41,9 +43,19 @@ class ActionListNext extends BaseAction {
 					}
 					id = o.getId();
 				}
-	
-				result = this.standardListNext(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
-						business.personPredicateWithTopUnit(effectivePerson));
+
+				if (effectivePerson.isManager() || business.hasAnyRole(effectivePerson, OrganizationDefinition.Manager,
+						OrganizationDefinition.OrganizationManager)) {
+					result = this.standardListNext(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+				}else{
+					result = this.standardListNext(Wo.copier2, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+					List<String> list = ListTools.extractField(result.getData(), Person.id_FIELDNAME, String.class, true, true);
+					List<Wo> wos = Wo.copier.copy(business.person().pick(list));
+					result.setData(wos);
+					result.setCount((long)wos.size());
+				}
 
 				Co co = new Co(result.getData(), result.getCount());
 				CacheManager.put(business.cache(), cacheKey, co);
@@ -88,6 +100,9 @@ class ActionListNext extends BaseAction {
 		static WrapCopier<Person, Wo> copier = WrapCopierFactory.wo(Person.class, Wo.class,
 				JpaObject.singularAttributeField(Person.class, true, true), null);
 
+		static WrapCopier<Person, Wo> copier2 = WrapCopierFactory.wo(Person.class, Wo.class,
+				ListTools.toList(Person.id_FIELDNAME), null);
+
 		private Long rank;
 
 		public Long getRank() {

+ 18 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/ActionListPrev.java

@@ -3,6 +3,8 @@ package com.x.organization.assemble.control.jaxrs.person;
 import java.util.List;
 import java.util.Optional;
 
+import com.x.base.core.project.organization.OrganizationDefinition;
+import com.x.base.core.project.tools.ListTools;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
@@ -41,8 +43,18 @@ class ActionListPrev extends BaseAction {
 					}
 					id = o.getId();
 				}
-				result = this.standardListPrev(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
-						business.personPredicateWithTopUnit(effectivePerson));
+				if (effectivePerson.isManager() || business.hasAnyRole(effectivePerson, OrganizationDefinition.Manager,
+						OrganizationDefinition.OrganizationManager)) {
+					result = this.standardListPrev(Wo.copier, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+				}else{
+					result = this.standardListPrev(Wo.copier2, id, count, JpaObject.sequence_FIELDNAME, DESC,
+							business.personPredicateWithTopUnit(effectivePerson));
+					List<String> list = ListTools.extractField(result.getData(), Person.id_FIELDNAME, String.class, true, true);
+					List<Wo> wos = Wo.copier.copy(business.person().pick(list));
+					result.setData(wos);
+					result.setCount((long)wos.size());
+				}
 
 				Co co = new Co(result.getData(), result.getCount());
 				CacheManager.put(business.cache(), cacheKey, co);
@@ -89,6 +101,10 @@ class ActionListPrev extends BaseAction {
 		static WrapCopier<Person, Wo> copier = WrapCopierFactory.wo(Person.class, Wo.class,
 				JpaObject.singularAttributeField(Person.class, true, true), null);
 
+		static WrapCopier<Person, Wo> copier2 = WrapCopierFactory.wo(Person.class, Wo.class,
+				ListTools.toList(Person.id_FIELDNAME), null);
+
+
 		private Long rank;
 
 		public Long getRank() {

+ 2 - 2
o2server/x_organization_core_entity/src/main/java/com/x/organization/core/entity/Person.java

@@ -300,7 +300,7 @@ public class Person extends SliceJpaObject {
 	@FieldDescribe("必填,手机号.")
 	@Column(length = JpaObject.length_32B, name = ColumnNamePrefix + mobile_FIELDNAME)
 	/** 其他地区手机号不一致,所以这里使用外部校验,不使用mobileString */
-	@Index(name = TABLE + IndexNameMiddle + mobile_FIELDNAME)
+	@Index(name = TABLE + IndexNameMiddle + mobile_FIELDNAME, unique = true)
 	@CheckPersist(allowEmpty = false, citationNotExists = @CitationNotExist(fields = mobile_FIELDNAME, type = Person.class))
 	private String mobile;
 
@@ -834,4 +834,4 @@ public class Person extends SliceJpaObject {
 	public void setIpAddress(String ipAddress) {
 		this.ipAddress = ipAddress;
 	}
-}
+}