From d70f7cf3cf5afbfa3d9ca396068d9ff4bfe4046f Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Mon, 22 Jul 2019 15:21:06 +0800 Subject: [PATCH] app更新 --- src/main/java/com/moral/service/impl/OrganizationServiceImpl.java | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 167 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java index a262729..da6e198 100644 --- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java +++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java @@ -2,14 +2,27 @@ 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.OrganizationRelation; import com.moral.mapper.OrganizationMapper; @@ -17,6 +30,7 @@ import com.moral.service.OrganizationService; import tk.mybatis.mapper.entity.Example; +import tk.mybatis.mapper.entity.Example.Criteria; @Service public class OrganizationServiceImpl implements OrganizationService { @@ -27,21 +41,170 @@ @Resource private OrganizationRelationMapper organizationRelationMapper; + private static Class ENTITY_CLASS = Organization.class; + @Override public Set<Integer> getChildOrganizationIds(Integer orgId){ Set<Integer> orgIds = new HashSet<Integer>(); orgIds.add(orgId); - Example example = new Example(OrganizationRelation.class); - example.or().andEqualTo("parentId",orgId); + OrganizationRelation relation = new OrganizationRelation(); + relation.setParentId(orgId); Organization organization = organizationMapper.selectByPrimaryKey(orgId); if (IS_DELETE_FALSE.equals(organization.getIsDelete())) { - List<OrganizationRelation> organizationRelations = organizationRelationMapper.selectByExample(example); + 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); } } 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 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); + } + @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; + } + } + @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(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; + } } -- Gitblit v1.8.0