From 7c46bd2e4c3921fe6f77682f1c80ff5c7e927539 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Thu, 27 Sep 2018 08:54:07 +0800
Subject: [PATCH] 组织指定父组织

---
 src/main/java/com/moral/entity/Organization.java                  |   24 ++++++++
 src/main/java/com/moral/service/OrganizationService.java          |    2 
 src/main/java/com/moral/controller/OrganizationController.java    |    6 ++
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java |   55 ++++++++++++++++++
 src/main/java/com/moral/controller/ScreenController.java          |   39 ++++++++-----
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java       |    2 
 src/main/resources/application.yml                                |   15 ++--
 src/main/resources/mapper/OrganizationMapper.xml                  |    8 ++
 8 files changed, 126 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/moral/controller/OrganizationController.java b/src/main/java/com/moral/controller/OrganizationController.java
index 039953d..b515654 100644
--- a/src/main/java/com/moral/controller/OrganizationController.java
+++ b/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);
+    }
 }
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 2478a83..4541cd3 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/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.*;
@@ -135,21 +136,29 @@
                 StringBuilder areaNamesBuilder = new StringBuilder("������");
                 if(!((Integer) orgId).equals(dictionaryDataService.querySupperOrgId())) {
                     Organization organization = organizationService.getOrganizationById((Integer) orgId);
-                    if(organization.getAreaNames()!=null){
-                        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());
-                                }
-                            }
-                        }
-                    }
+						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();
+							areaNamesBuilder.append("/");
+							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());
             }
diff --git a/src/main/java/com/moral/entity/Organization.java b/src/main/java/com/moral/entity/Organization.java
index 50295d7..e727199 100644
--- a/src/main/java/com/moral/entity/Organization.java
+++ b/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;
 
diff --git a/src/main/java/com/moral/service/OrganizationService.java b/src/main/java/com/moral/service/OrganizationService.java
index 4c3cb5e..fe1dcc3 100644
--- a/src/main/java/com/moral/service/OrganizationService.java
+++ b/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);
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 345dceb..ba6b76a 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -346,7 +346,7 @@
 		}
 	}
 	@Override
-	public PageBean queryByPageBean(PageBean pageBean) {
+	public PageBean 	queryByPageBean(PageBean pageBean) {
 		Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
 //		addDeletesToExample(example);
 		if(pageBean.getPageSize()>0){
diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
index 7b8d709..2dca7d1 100644
--- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
+++ b/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;
+    }
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index b5a49fb..ccef0eb 100644
--- a/src/main/resources/application.yml
+++ b/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
diff --git a/src/main/resources/mapper/OrganizationMapper.xml b/src/main/resources/mapper/OrganizationMapper.xml
index 982b7a2..7865ab7 100644
--- a/src/main/resources/mapper/OrganizationMapper.xml
+++ b/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

--
Gitblit v1.8.0