From 2f4d9d83ae0ac1e8a44227e2a4cd2746ef010e5f Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Thu, 27 Sep 2018 14:49:36 +0800 Subject: [PATCH] 制定父组织功能完善 --- src/main/java/com/moral/service/impl/OrganizationServiceImpl.java | 75 ++++++++++++++++++++++++++++++++++++- 1 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java index 29a321f..594bf60 100644 --- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java +++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java @@ -1,8 +1,10 @@ package com.moral.service.impl; +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; @@ -10,12 +12,15 @@ import com.moral.mapper.OrganizationMapper; import com.moral.mapper.OrganizationRelationMapper; import com.moral.service.OrganizationService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.data.annotation.Transient; 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 java.util.stream.Collectors; import static com.moral.common.bean.Constants.IS_DELETE_FALSE; @@ -55,6 +60,7 @@ return organizations; } + @Override public PageBean queryByPageBean(PageBean pageBean){ Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean); List<Example.Criteria> criteriaList = example.getOredCriteria(); @@ -74,6 +80,7 @@ List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example); return new PageBean(organizationList); } + @Override public void addOrModify(Organization organization){ try{ if(organization.getId()==null){ @@ -81,14 +88,64 @@ 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)){ + 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(); @@ -126,4 +183,18 @@ 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