From 2bfc4ed9012c5cae2a01bc67bdce68eeb59dc0b8 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Tue, 03 Sep 2019 13:38:19 +0800
Subject: [PATCH] 完善排名

---
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java |  133 ++++++++++++++++++++++++++++++++++++++------
 1 files changed, 114 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
index fc181d0..da6e198 100644
--- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -1,24 +1,36 @@
 package com.moral.service.impl;
 
+import static com.moral.common.bean.Constants.IS_DELETE_FALSE;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.data.annotation.Transient;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.moral.common.bean.Constants;
 import com.moral.common.bean.PageBean;
+import com.moral.common.exception.BusinessException;
 import com.moral.common.util.ExampleUtil;
 import com.moral.common.util.ValidateUtil;
 import com.moral.entity.Organization;
-import com.moral.entity.exp.OrganizationExp;
 import com.moral.entity.OrganizationRelation;
 import com.moral.mapper.OrganizationMapper;
 import com.moral.mapper.OrganizationRelationMapper;
 import com.moral.service.OrganizationService;
-import org.springframework.stereotype.Service;
+
 import tk.mybatis.mapper.entity.Example;
 import tk.mybatis.mapper.entity.Example.Criteria;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-import static com.moral.common.bean.Constants.IS_DELETE_FALSE;
 
 @Service
 public class OrganizationServiceImpl implements OrganizationService {
@@ -41,7 +53,7 @@
     	if (IS_DELETE_FALSE.equals(organization.getIsDelete())) {
     		List<OrganizationRelation> organizationRelations = organizationRelationMapper.select(relation);
     		for (OrganizationRelation organizationRelation : organizationRelations) {
-    			Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getParentId());
+    			Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getChildId());
     			orgIds.addAll(organizationIds);
     		}
 		}
@@ -56,39 +68,98 @@
 		return organizations;
 	}
 
+	@Override
 	public PageBean queryByPageBean(PageBean pageBean){
 		Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
 		List<Example.Criteria> criteriaList = example.getOredCriteria();
 		if(criteriaList!=null&&criteriaList.size()>0){
 			for(Example.Criteria cri : criteriaList){
-				cri.andNotEqualTo("isDelete","1");
+				cri.andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE);
 			}
 		}else {
-			example.or().andNotEqualTo("isDelete","1");
+			example.or().andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE);
 		}
-		PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize());
-		List<OrganizationExp> organizationExpandList = organizationMapper.selectWithAreaNameByExample(example);
-		return new PageBean(organizationExpandList);
+		if(pageBean.getPageSize()>0){
+			PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize());
+		}
+		if(example.getOrderByClause() == null || example.getOrderByClause().isEmpty()) {
+			example.setOrderByClause("create_time desc");
+		}
+		List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
+		return new PageBean(organizationList);
 	}
+	@Override
 	public void addOrModify(Organization organization){
 		try{
 			if(organization.getId()==null){
 				//���������������������������������������
-				organization.setIsDelete("0");
+				organization.setIsDelete(Constants.IS_DELETE_FALSE);
 				organizationMapper.insertSelective(organization);
 			}else{
-				organizationMapper.updateByPrimaryKeySelective(organization);
+				organizationMapper.updateByPrimaryKey(organization);
+			}
+			if(organization.getId()!=null && !organization.getId().equals(organization.getParentId())){
+				List<Integer> orgIds = organizationMapper.selectLowerOrgIds(organization.getId());
+				boolean isChild = orgIds.stream().anyMatch(
+						item -> {
+							return item!=null && item.equals(organization.getParentId());
+						}
+				);
+				// ������������������������������������������������������������
+				if(!isChild){
+					//���������������������
+					addOrModifyOrgRelation(organization);
+				}else{
+					throw new BusinessException("cannot set the children as father,organization:"+ JSON.toJSONString(organization));
+				}
+			}else {
+				throw new BusinessException("id of organization can't equal to it's parentId,organization:"+ JSON.toJSONString(organization));
 			}
 		}
 		catch (Exception ex){
 			throw  ex;
 		}
 	}
-
+    @Transient
+	private void addOrModifyOrgRelation(Organization organization){
+    	OrganizationRelation relation = new OrganizationRelation();
+    	relation.setChildId(organization.getId());
+    	List<OrganizationRelation> relations =  organizationRelationMapper.select(relation);
+    	if(CollectionUtils.isEmpty(relations)){
+    		if (!ObjectUtils.isEmpty(organization.getParentId())) {
+    			relation.setParentId(organization.getParentId());
+    			organizationRelationMapper.insert(relation);
+			}
+		}else{
+				OrganizationRelation relationOfSelect = relations.get(0);
+				//���������������������������������������
+				if(organization.getParentId() !=null &&
+                   !organization.getParentId().equals(relationOfSelect.getParentId())
+                    ) {
+                    relationOfSelect.setParentId(organization.getParentId());
+                    organizationRelationMapper.updateByPrimaryKey(relationOfSelect);
+                }else if(organization.getParentId() ==null){
+				    //ParentI���null���������������������
+                    organizationRelationMapper.deleteByPrimaryKey(relationOfSelect.getId());
+                }
+				//������������������
+				if(relations.size()>1){
+					relations.remove(0);
+					List<Integer> relationIds = relations.stream().map(
+						element->{
+							return  element.getId();
+						}
+					).collect(Collectors.toList());
+					Example example = new Example(OrganizationRelation.class);
+					example.or().andIn("id",relationIds);
+					organizationRelationMapper.deleteByExample(example);
+				}
+		}
+	}
 	@Override
 	public void deleteByIds(Integer... ids) {
     	Organization organization = new Organization();
-		organization.setIsDelete("1");
+		organization.setIsDelete(Constants.IS_DELETE_TRUE);
 		if(ids!=null&&ids.length>0){
 			if(ids.length==1){
 				organization.setId(ids[0]);
@@ -104,12 +175,36 @@
 	
 	@Override
 	public List<Organization> getOrganizationsByName(String name) {
+		ValidateUtil.notEmpty(name, "param.is.null");
 		Example example = new Example(Organization.class);
 		Criteria criteria = example.createCriteria();
-		criteria.andLike("name", "%" + name + "%");
-		criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE);
+
+		criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%");
+		example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andCondition("getPY(name) like ", "%" + name + "%");
+
 		List<Organization> organizations = organizationMapper.selectByExample(example);
 		return organizations;
 	}
 
+	@Override
+	public Organization getOrganizationById(int id) {
+    	Example example = new Example(ENTITY_CLASS);
+    	example.or().andEqualTo("id",id);
+    	List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
+		return organizationList.size()>0?organizationList.get(0):null;
+	}
+
+    @Override
+    public Organization getFatherOrg(int childId) {
+        OrganizationRelation relation = new OrganizationRelation();
+        relation.setChildId(childId);
+        List<OrganizationRelation> relations = organizationRelationMapper.select(relation);
+        if (!CollectionUtils.isEmpty(relations)){
+            OrganizationRelation relationOfSelect = relations.get(0);
+            if(relationOfSelect.getParentId()!=null){
+                return organizationMapper.selectByPrimaryKey(relationOfSelect.getParentId());
+            }
+        }
+        return null;
+    }
 }

--
Gitblit v1.8.0