fengxiang
2018-09-27 7c46bd2e4c3921fe6f77682f1c80ff5c7e927539
组织指定父组织
8 files modified
139 ■■■■ changed files
src/main/java/com/moral/controller/OrganizationController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/entity/Organization.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/OrganizationService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/DeviceServiceImpl.java patch | view | raw | blame | history
src/main/java/com/moral/service/impl/OrganizationServiceImpl.java 55 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 15 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/OrganizationMapper.xml 8 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/OrganizationController.java
@@ -39,10 +39,16 @@
        List<Organization> organizations = organizationService.getOrganizationsByName(name);
        return new ResultBean<List<Organization>>(organizations);
    }
    @GetMapping("get-my-org")
    public ResultBean<Organization> getMyOrganization(JwtAuthenticationToken token){
        UserContext userContext = token.getPrincipal();
        Organization organization = organizationService.getOrganizationById(userContext.getOrganizationId());
        return new ResultBean<>(organization);
    }
    @GetMapping("getforg")
    public ResultBean<Organization> getFatherOrg(Integer cid){
        Organization organization = organizationService.getFatherOrg(cid);
        return new ResultBean<>(organization);
    }
}
src/main/java/com/moral/controller/ScreenController.java
@@ -10,6 +10,7 @@
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.*;
import com.moral.common.util.BeanUtils;
import com.moral.common.util.ParameterUtils;
import com.moral.common.util.StringUtils;
import com.moral.entity.*;
@@ -136,20 +137,28 @@
                if(!((Integer) orgId).equals(dictionaryDataService.querySupperOrgId())) {
                    Organization organization = organizationService.getOrganizationById((Integer) orgId);
                    if(organization.getAreaNames()!=null){
                            Map<String,String> areaNameMap = BeanUtils.beanToMap(organization.getAreaNames());
                            List<String> names = areaNameMap.entrySet().stream().filter(item -> {
                                return item.getValue()!=null;
                            }).map(item -> {
                                return  item.getValue();
                            }).collect(Collectors.toList());
                        AreaNames areaNames =  organization.getAreaNames();
                        if(!StringUtils.isNullOrEmpty(areaNames.getProvinceName())){
                            areaNamesBuilder.append("/");
                            areaNamesBuilder.append(areaNames.getProvinceName());
                            if(!StringUtils.isNullOrEmpty(areaNames.getCityName())){
                                areaNamesBuilder.append("/");
                                areaNamesBuilder.append(areaNames.getCityName());
                                if(!StringUtils.isNullOrEmpty(areaNames.getAreaName())){
                                    areaNamesBuilder.append("/");
                                    areaNamesBuilder.append(areaNames.getAreaName());
                            areaNamesBuilder.append(String.join("/",names));
                                }
                    // 企业用户
                    if( 0 == organization.getRank()) {
                        resultMap.put("type","enterprise");
                    }else{
                        resultMap.put("type","government");
                            }
                        }
                    }
                    resultMap.put("areaCode",
                            organization.getVillageCode()|
                            organization.getTownCode()|
                            organization.getAreaCode()|
                            organization.getCityCode()|
                            organization.getProvinceCode());
                }
                resultMap.put("mapPath",areaNamesBuilder.toString());
            }
src/main/java/com/moral/entity/Organization.java
@@ -88,7 +88,31 @@
     * @mbggenerated  Thu Dec 07 15:18:16 CST 2017
     */
    private String description;
    private Long townCode;
    private Long villageCode;
    public Integer getProvinceCode() {
        return provinceCode==null?0:provinceCode;
    }
    public Integer getCityCode() {
        return cityCode==null?0:cityCode;
    }
    public Integer getAreaCode() {
        return areaCode==null?0:areaCode;
    }
    public Long getTownCode() {
        return townCode==null?0:townCode;
    }
    public Long getVillageCode() {
        return villageCode==null?0:villageCode;
    }
    @Transient
    private Integer parentId;
    @Transient
    private AreaNames areaNames;
src/main/java/com/moral/service/OrganizationService.java
@@ -21,4 +21,6 @@
    
    List<Organization> getOrganizationsByName(String name);
    public Organization getOrganizationById(int id);
    public Organization getFatherOrg(int childId);
}
src/main/java/com/moral/service/impl/DeviceServiceImpl.java
src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -10,12 +10,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 +58,7 @@
        return organizations;
    }
    @Override
    public PageBean queryByPageBean(PageBean pageBean){
        Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
        List<Example.Criteria> criteriaList = example.getOredCriteria();
@@ -84,12 +88,47 @@
            }else{
                organizationMapper.updateByPrimaryKey(organization);
            }
            //更新父组织关系
            addOrModifyOrgRelation(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();
@@ -127,4 +166,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;
    }
}
src/main/resources/application.yml
@@ -13,14 +13,16 @@
    cache: false
  datasource:
    url: jdbc:mysql://47.96.26.152:3306/monitor_db?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    #url: jdbc:mysql://192.168.99.100:3306/monitor_db?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    username: root
    password: xOlx8z9L7Pt6y9YI
    #password: root123
    #driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    initialSize: 1
    minIdle: 3
    initialSize: 10
    minIdle: 10
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
@@ -32,6 +34,7 @@
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    keepAlive: true
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
@@ -49,14 +52,12 @@
    username: guest
    password: guest
    channelCacheSize: 10
  redis:
    host: 47.100.8.247
    port: 6379
    password:
    password: moral_2018
    database: 1
    timeout: 0
    timeout: 5000
    pool:
      max-active: 8
      max-wait: -1
@@ -75,7 +76,7 @@
spring.profiles: default
moral.security.jwt:
  tokenExpirationTime: 5 # Number of minutes
  tokenExpirationTime: 129600 # Number of minutes
  refreshTokenExpTime: 60 # Minutes
  tokenIssuer: http://monitor.7drlb.com
  tokenSigningKey: xm9EV6Hy5RAFL8EEACIDAwQus
src/main/resources/mapper/OrganizationMapper.xml
@@ -8,6 +8,8 @@
    <result column="province_code" jdbcType="INTEGER" property="provinceCode" />
    <result column="city_code" jdbcType="INTEGER" property="cityCode" />
    <result column="area_code" jdbcType="INTEGER" property="areaCode" />
    <result column="town_code" jdbcType="BIGINT" property="townCode" />
    <result column="village_code" jdbcType="BIGINT" property="villageCode" />
    <result column="address" jdbcType="VARCHAR" property="address" />
    <result column="telephone" jdbcType="VARCHAR" property="telephone" />
    <result column="email" jdbcType="VARCHAR" property="email" />
@@ -20,6 +22,8 @@
          <result column="province_name" property="provinceName" jdbcType="VARCHAR" />
          <result column="city_name" property="cityName" jdbcType="VARCHAR" />
          <result column="area_name" property="areaName" jdbcType="VARCHAR" />
          <result column="town_name" property="townName" jdbcType="VARCHAR" />
          <result column="village_name" property="villageName" jdbcType="VARCHAR" />
      </association>
  </resultMap>
  <sql id="Example_Where_Clause">
@@ -56,7 +60,7 @@
    create_time, expire_time, description
  </sql>
   <sql id="Relation_Province_City_Area_List">
       are.area_name, cti.city_name, pro.province_name
       are.area_name, cti.city_name, pro.province_name,tow.town_name,vil.village_name
  </sql>
  <select id="selectWithAreaNameByExample" parameterType="tk.mybatis.mapper.entity.Example" resultMap="BaseResultMap">
    select
@@ -67,6 +71,8 @@
      ,
      <include refid="Relation_Province_City_Area_List" />
      from organization
      left join village vil on organization.village_code = vil.village_code
      left join town tow on organization.town_code = tow.town_code
      left join area are on organization.area_code = are.area_code
      left join city cti on organization.city_code = cti.city_code
      left join province pro on organization.province_code = pro.province_code