From f28149d8183a62f87fa9c8df9ae589070d83f612 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Thu, 24 Dec 2020 13:47:50 +0800
Subject: [PATCH] 波动补偿

---
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java |  273 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 194 insertions(+), 79 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..fa197fe 100644
--- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -1,22 +1,36 @@
 package com.moral.service.impl;
 
+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 com.moral.mapper.AccountMapper;
+import com.moral.service.AccountService;
+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;
 
@@ -24,92 +38,193 @@
 public class OrganizationServiceImpl implements OrganizationService {
 
     @Resource
+    private AccountMapper accountMapper;
+
+    @Resource
     private OrganizationMapper organizationMapper;
 
     @Resource
     private OrganizationRelationMapper organizationRelationMapper;
 
-	private static Class ENTITY_CLASS = Organization.class;
+    private static Class ENTITY_CLASS = Organization.class;
 
     @Override
-    public Set<Integer> getChildOrganizationIds(Integer orgId){
-    	Set<Integer> orgIds = new HashSet<Integer>();
-    	orgIds.add(orgId);
-    	OrganizationRelation relation = new OrganizationRelation();
-    	relation.setParentId(orgId);
-    	Organization organization = organizationMapper.selectByPrimaryKey(orgId);
-    	if (IS_DELETE_FALSE.equals(organization.getIsDelete())) {
-    		List<OrganizationRelation> organizationRelations = organizationRelationMapper.select(relation);
-    		for (OrganizationRelation organizationRelation : organizationRelations) {
-    			Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getParentId());
-    			orgIds.addAll(organizationIds);
-    		}
-		}
-    	return orgIds;
+    public Set<Integer> getChildOrganizationIds(Integer orgId) {
+        Set<Integer> orgIds = new HashSet<Integer>();
+        orgIds.add(orgId);
+        OrganizationRelation relation = new OrganizationRelation();
+        relation.setParentId(orgId);
+        Organization organization = organizationMapper.selectByPrimaryKey(orgId);
+        if (IS_DELETE_FALSE.equals(organization.getIsDelete())) {
+            List<OrganizationRelation> organizationRelations = organizationRelationMapper.select(relation);
+            for (OrganizationRelation organizationRelation : organizationRelations) {
+                Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getChildId());
+                orgIds.addAll(organizationIds);
+            }
+        }
+        return orgIds;
     }
 
+    @Override
+    public List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters) {
+        ValidateUtil.notNull(parameters.get("areaName"), "param.is.null");
+        List<Organization> organizations = organizationMapper.getOrganizationsByAreaName(parameters);
+        return organizations;
+    }
 
-	@Override
-	public List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters) {
-		ValidateUtil.notNull(parameters.get("areaName"), "param.is.null");
-		List<Organization> organizations = organizationMapper.getOrganizationsByAreaName(parameters);
-		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", Constants.IS_DELETE_TRUE);
+            }
+        } else {
+            example.or().andNotEqualTo("isDelete", Constants.IS_DELETE_TRUE);
+        }
+        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);
+    }
 
-	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");
-			}
-		}else {
-			example.or().andNotEqualTo("isDelete","1");
-		}
-		PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize());
-		List<OrganizationExp> organizationExpandList = organizationMapper.selectWithAreaNameByExample(example);
-		return new PageBean(organizationExpandList);
-	}
-	public void addOrModify(Organization organization){
-		try{
-			if(organization.getId()==null){
-				//���������������������������������������
-				organization.setIsDelete("0");
-				organizationMapper.insertSelective(organization);
-			}else{
-				organizationMapper.updateByPrimaryKeySelective(organization);
-			}
-		}
-		catch (Exception ex){
-			throw  ex;
-		}
-	}
+    @Override
+    public void addOrModify(Organization organization) {
+        try {
+            if (organization.getId() == null) {
+                //���������������������������������������
+                organization.setIsDelete(Constants.IS_DELETE_FALSE);
+                organizationMapper.insertSelective(organization);
+            } else {
+                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;
+        }
+    }
 
-	@Override
-	public void deleteByIds(Integer... ids) {
-    	Organization organization = new Organization();
-		organization.setIsDelete("1");
-		if(ids!=null&&ids.length>0){
-			if(ids.length==1){
-				organization.setId(ids[0]);
-				organizationMapper.updateByPrimaryKeySelective(organization);
-			}else{
-				Example example = new Example(ENTITY_CLASS);
-				example.or().andIn("id", Arrays.asList(ids));
-				organizationMapper.updateByExampleSelective(organization,example);
-			}
+    @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 List<Organization> getOrganizationsByName(String name) {
-		Example example = new Example(Organization.class);
-		Criteria criteria = example.createCriteria();
-		criteria.andLike("name", "%" + name + "%");
-		criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE);
-		List<Organization> organizations = organizationMapper.selectByExample(example);
-		return organizations;
-	}
+    @Override
+    public void deleteByIds(Integer... ids) {
+        Organization organization = new Organization();
+        organization.setIsDelete(Constants.IS_DELETE_TRUE);
+        if (ids != null && ids.length > 0) {
+            if (ids.length == 1) {
+                organization.setId(ids[0]);
+                organizationMapper.updateByPrimaryKeySelective(organization);
+            } else {
+                Example example = new Example(ENTITY_CLASS);
+                example.or().andIn("id", Arrays.asList(ids));
+                organizationMapper.updateByExampleSelective(organization, example);
+            }
 
+        }
+    }
+
+    @Override
+    public List<Organization> getOrganizationsByName(String name) {
+        ValidateUtil.notEmpty(name, "param.is.null");
+        Example example = new Example(Organization.class);
+        Criteria criteria = example.createCriteria();
+
+        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;
+    }
+
+    @Override
+    public List<Organization> getOrganizationList(String organizationName) {
+        List<Organization> organizationList = organizationMapper.getOrganizationList(organizationName);
+        return organizationList;
+    }
+
+    @Override
+    public Organization getOrganizationByAccountId(Integer accountId) {
+        Map<String, Object> organizationId = accountMapper.getOrganizationIdByAccountId(accountId);
+        int orgId = (int) organizationId.get("organization_id");
+        Organization org = getOrganizationById(orgId);
+        return org;
+    }
 }

--
Gitblit v1.8.0