Browse Source

Merge remote-tracking branch 'origin/dev_optimize' into dev_optimize

release
sunyuchao 3 years ago
parent
commit
80176f2c80
  1. 14
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 22
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/AgencyInfoCache.java
  3. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java
  4. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java
  5. 8
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/CustomerAgencyRedis.java
  6. 1
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java
  7. 50
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java
  8. 9
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java
  9. 3
      epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.16__add_index_ic_house.sql
  10. 152
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml
  11. 3
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java
  12. 33
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java
  13. 61
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java
  14. 38
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java
  15. 69
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java
  16. 71
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java
  17. 13
      epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql
  18. 6
      epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml
  19. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/PartyMemberListFormDTO.java
  20. 7
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/SearchByNameFormDTO.java
  21. 5
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/IcStatsResiResultDTO.java
  22. 30
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/SearchByNameResultDTO.java
  23. 176
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java
  24. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java
  25. 31
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PartyMemberAgeExportExcel.java
  26. 31
      epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PartyMemberEducationExportExcel.java
  27. 2
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserImportService.java
  28. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java
  29. 22
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java
  30. 22
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java
  31. 1
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StatsResiWarnServiceImpl.java
  32. 4
      epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.40__member_huji.sql
  33. 0
      epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls
  34. 18
      epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

14
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -10,6 +10,8 @@ package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
@ -763,4 +765,16 @@ public class RedisKeys {
public static String getNextAreaCodeKey(String areaCode) {
return rootPrefix.concat("areaCode:parentCode:").concat(areaCode);
}
/**
* desc:获取分布式锁key
* @param methodName
* @return
*/
public static String getLockByMethodName(String methodName) {
if (StringUtils.isBlank(methodName)){
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"参数错误");
}
return rootPrefix.concat("lock:").concat(methodName);
}
}

22
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/common/bean/AgencyInfoCache.java

@ -145,4 +145,26 @@ public class AgencyInfoCache implements Serializable {
* 中心位置纬度
*/
private String latitude;
/**
* 组织编码
*/
private String code;
/**
* 负责人姓名
*/
private String contacts;
/**
* 联系电话
*/
private String mobile;
//内部接口使用
/**
* open:当前客户新增组织需要选择areaCodeclosed: 无需选择区域编码
*/
private String areaCodeSwitch;
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/HouseController.java

@ -89,11 +89,9 @@ public class HouseController implements ResultDataResolver {
//效验数据
ValidatorUtils.validateEntity(formDTO);
String queryScene = "house_manage";
IcNeighborHoodResultDTO icNeighborHoodResultDTO = houseService.listNeighborhood(null, formDTO.getBuildingId(), formDTO.getOwnerName(),
formDTO.getOwnerPhone(), null,
null, queryScene,
null,
formDTO.getPageNo(), formDTO.getPageSize(),formDTO.getId(),formDTO.getLevel(),formDTO.getRentFlag());
return new Result().ok(icNeighborHoodResultDTO);
@ -129,9 +127,6 @@ public class HouseController implements ResultDataResolver {
buildingName = null;
}
// 使用场景:社区查询
String scene = "community_search";
LoginUserDetailsFormDTO form = new LoginUserDetailsFormDTO();
form.setUserId(loginUser.getUserId());
form.setClient(loginUser.getClient());
@ -142,7 +137,7 @@ public class HouseController implements ResultDataResolver {
null);
IcNeighborHoodResultDTO icNeighborHoodResultDTO = houseService.listNeighborhood(loginUserDetail.getAgencyId(),null, null, null,
neighborhoodName, buildingName, scene, formDTO.getPageNo(), formDTO.getPageSize(),null,null,null);
neighborhoodName, buildingName, formDTO.getPageNo(), formDTO.getPageSize(),null,null,null);
return new Result<IcNeighborHoodResultDTO>().ok(icNeighborHoodResultDTO);
}

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/IcHouseDao.java

@ -24,14 +24,6 @@ import java.util.Set;
@Mapper
public interface IcHouseDao extends BaseDao<IcHouseEntity> {
// IPage<Map<String, Object>> searchHouseByPage(IPage<IcHouseEntity> page,
// @Param(Constants.WRAPPER) QueryWrapper<IcNeighborHoodEntity> neighborHoodEntityQueryWrapper,
// @Param("ew1") QueryWrapper<IcBuildingEntity> buildingEntityQueryWrapper,
// @Param("ew2") QueryWrapper<IcHouseEntity> houseEntityQueryWrapper);
// IPage<Map<String, Object>> searchHouseByPage(IPage<IcHouseEntity> page,
// @Param("neighbor") IcNeighborHoodEntity neighbor,
// @Param("building") IcBuildingEntity building,
// @Param("house") IcHouseEntity house);
IPage<Map<String, Object>> searchHouseByPage(IPage<IcHouseEntity> page,
@Param("pids") String pids,
@Param("buildingId") String buildingId,
@ -39,7 +31,6 @@ public interface IcHouseDao extends BaseDao<IcHouseEntity> {
@Param("ownerPhone") String ownerPhone,
@Param("neighborHoodName") String neighborHoodName,
@Param("buildingName") String buildingName,
@Param("queryScene") String queryScene,
@Param("id")String id,
@Param("level")String level,
@Param("rentFlag")String rentFlag);

8
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/redis/CustomerAgencyRedis.java

@ -20,7 +20,7 @@ package com.epmet.redis;
import cn.hutool.core.bean.BeanUtil;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.dto.CustomerAgencyDTO;
import com.epmet.commons.tools.redis.common.bean.AgencyInfoCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -44,19 +44,19 @@ public class CustomerAgencyRedis {
redisUtils.delete(key);
}
public void set(String agencyId, CustomerAgencyDTO value){
public void set(String agencyId, AgencyInfoCache value){
String key = RedisKeys.getAgencyByIdKey(agencyId);
Map<String, Object> map = BeanUtil.beanToMap(value, false, true);
redisUtils.hMSet(key, map);
}
public CustomerAgencyDTO get(String agencyId){
public AgencyInfoCache get(String agencyId){
String key = RedisKeys.getAgencyByIdKey(agencyId);
Map<String, Object> resultMap = redisUtils.hGetAll(key);
if (CollectionUtils.isEmpty(resultMap)) {
return null;
}
return BeanUtil.mapToBean(resultMap, CustomerAgencyDTO.class, true);
return BeanUtil.mapToBean(resultMap, AgencyInfoCache.class, true);
}
}

1
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/HouseService.java

@ -60,7 +60,6 @@ public interface HouseService {
String ownerPhone,
String neighborHoodName,
String buildingName,
String queryScene,
Integer pageNo,
Integer pageSize,
String id,

50
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java

@ -20,6 +20,7 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
@ -490,16 +491,53 @@ public class AgencyServiceImpl implements AgencyService {
@Override
public CustomerAgencyDTO getAgencyById(String agencyId) {
CustomerAgencyDTO cachedAgency = customerAgencyRedis.get(agencyId);
if (cachedAgency == null) {
cachedAgency = new CustomerAgencyDTO();
AgencyInfoCache agencyInfoCache = customerAgencyRedis.get(agencyId);
if (agencyInfoCache == null) {
agencyInfoCache = new AgencyInfoCache();
CustomerAgencyEntity agencyEntity = customerAgencyDao.selectById(agencyId);
if (agencyEntity != null) {
BeanUtils.copyProperties(agencyEntity, cachedAgency);
//设置行政地区编码全路径
if (StringUtils.isNotBlank(agencyEntity.getAreaCode()) && StringUtils.isNotBlank(agencyEntity.getParentAreaCode())) {
agencyInfoCache.setAreaCodePath(queryAreaCodePath(agencyEntity));
}
customerAgencyRedis.set(agencyId, cachedAgency);
BeanUtils.copyProperties(agencyEntity, agencyInfoCache);
}
return cachedAgency;
customerAgencyRedis.set(agencyId, agencyInfoCache);
}
CustomerAgencyDTO customerAgencyDTO=ConvertUtils.sourceToTarget(agencyInfoCache,CustomerAgencyDTO.class);
return customerAgencyDTO;
}
private List<String> queryAreaCodePath(CustomerAgencyEntity customerAgencyEntity) {
List<String> areaCodePath = new ArrayList<>();
switch (customerAgencyEntity.getLevel()) {
case Constant.COMMUNITY:
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.TWO));
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.FOUR));
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.SIX));
areaCodePath.add(customerAgencyEntity.getParentAreaCode());
areaCodePath.add(customerAgencyEntity.getAreaCode());
break;
case Constant.STREET:
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.TWO));
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.FOUR));
areaCodePath.add(customerAgencyEntity.getParentAreaCode());
areaCodePath.add(customerAgencyEntity.getAreaCode());
break;
case Constant.DISTRICT:
areaCodePath.add(customerAgencyEntity.getAreaCode().substring(NumConstant.ZERO, NumConstant.TWO));
areaCodePath.add(customerAgencyEntity.getParentAreaCode());
areaCodePath.add(customerAgencyEntity.getAreaCode());
break;
case Constant.CITY:
areaCodePath.add(customerAgencyEntity.getParentAreaCode());
areaCodePath.add(customerAgencyEntity.getAreaCode());
break;
case Constant.PROVINCE:
areaCodePath.add(customerAgencyEntity.getAreaCode());
break;
}
return areaCodePath;
}
@Override

9
epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/HouseServiceImpl.java

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.enums.OrgTypeEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.RenException;
@ -254,26 +255,22 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver {
String ownerPhone,
String neighborHoodName,
String buildingName,
String queryScene,
Integer pageNo,
Integer pageSize,
String id,String level, String rentFlag) {
IcNeighborHoodResultDTO result = new IcNeighborHoodResultDTO();
//如果类型是house 查房屋
//IPage<Map<String, Object>> resultMap = searchHouse(buildingId, ownerName, ownerPhone, neighborHoodName, buildingName, pageNo, pageSize);
// 查询pids
String pids = null;
if (StringUtils.isNotBlank(ancestorAgencyId)) {
pids = getPids(ancestorAgencyId);
}
if (StringUtils.isNotBlank(level) && level.equals("agency")){
if (StringUtils.isNotBlank(level) && OrgTypeEnum.AGENCY.getCode().equals(level)){
pids = getPids(ancestorAgencyId);
}
IPage<IcHouseEntity> page = new Page<IcHouseEntity>(pageNo,pageSize);
IPage<Map<String, Object>> mapIPage = icHouseDao.searchHouseByPage(page, pids, buildingId, ownerName, ownerPhone, neighborHoodName, buildingName, queryScene,id,level,rentFlag);
IPage<Map<String, Object>> mapIPage = icHouseDao.searchHouseByPage(page, pids, buildingId, ownerName, ownerPhone, neighborHoodName, buildingName,id,level,rentFlag);
List<Map<String, Object>> records = mapIPage.getRecords();
records.forEach(item->{
item.put("houseType", HouseTypeEnums.getTypeValue(item.get("houseTypeKey")));

3
epmet-module/gov-org/gov-org-server/src/main/resources/db/migration/V0.0.16__add_index_ic_house.sql

@ -0,0 +1,3 @@
ALTER TABLE `epmet_gov_org`.`ic_house`
ADD INDEX `idx_building_id`(`BUILDING_ID`) USING BTREE COMMENT '楼宇id',
ADD INDEX `idx_hood_id`(`NEIGHBOR_HOOD_ID`) USING BTREE COMMENT '小区id';

152
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

@ -70,83 +70,6 @@
)
</update>
<!--<select id="searchHouseByPage" resultType="map">
select
a.ID as houseId,
a.HOUSE_NAME as houseName,
a.DOOR_NAME as doorName,
a.HOUSE_TYPE as houseType,
a.PURPOSE as purpose,
a.RENT_FLAG as rentFlag,
a.OWNER_NAME as ownerName,
a.OWNER_PHONE as ownerPhone,
a.OWNER_ID_CARD as ownerIdCard,
b.BUILDING_NAME as buildingName,
c.NEIGHBOR_HOOD_NAME as neighborHoodName,
d.UNIT_NUM as unitName
from ic_house a
INNER JOIN ic_building b on a.BUILDING_ID = b.ID
and c.ID in (select e.ID from ic_building e ${ew1.customSqlSegment})
INNER JOIN ic_neighbor_hood c on a.NEIGHBOR_HOOD_ID = c.ID
and c.ID in (select f.ID from ic_neighbor_hood f
INNER JOIN customer_agency g on f.AGENCY_ID = g.ID
INNER JOIN customer_grid h on f.GRID_ID = h.ID
${ew2.customSqlSegment}
)
LEFT JOIN ic_building_unit d on a.BUILDING_UNIT_ID = d.ID
${ew.customSqlSegment}
</select>-->
<!--<select id="searchHouseByPage" resultType="map">
select
a.ID as houseId,
a.HOUSE_NAME as houseName,
a.DOOR_NAME as doorName,
a.HOUSE_TYPE as houseType,
a.PURPOSE as purpose,
a.RENT_FLAG as rentFlag,
a.OWNER_NAME as ownerName,
a.OWNER_PHONE as ownerPhone,
a.OWNER_ID_CARD as ownerIdCard,
b.BUILDING_NAME as buildingName,
c.NEIGHBOR_HOOD_NAME as neighborHoodName,
d.UNIT_NUM as unitName
from ic_house a
INNER JOIN ic_building b on a.BUILDING_ID = b.ID
<if test="building.id != null and building.id.trim() != ''">
AND b.ID = #{building.id}
</if>
<if test="building.buildingName != null and building.buildingName.trim() != ''">
AND b.BUILDING_NAME like concat('%',trim(#{building.buildingName}),'%')
</if>
INNER JOIN ic_neighbor_hood c on a.NEIGHBOR_HOOD_ID = c.ID
<if test="neighbor.id != null and neighbor.id.trim() != ''">
AND c.ID = #{neighbor.id}
</if>
<if test="neighbor.agencyId != null and neighbor.agencyId.trim() != ''">
AND c.AGENCY_ID = #{neighbor.agencyId}
</if>
<if test="neighbor.gridId != null and neighbor.gridId.trim() != ''">
AND c.GRID_ID = #{neighbor.gridId}
</if>
<if test="neighbor.neighborHoodName != null and neighbor.neighborHoodName.trim() != ''">
AND c.NEIGHBOR_HOOD_NAME like concat('%',trim(#{neighbor.neighborHoodName}),'%')
</if>
LEFT JOIN ic_building_unit d on a.BUILDING_UNIT_ID = d.ID
<where>
<if test="house.ownerName != null and house.ownerName.trim() != ''">
AND a.OWNER_NAME = #{house.ownerName}
</if>
<if test="house.OWNER_PHONE != null and house.OWNER_PHONE.trim() != ''">
AND a.OWNER_PHONE = #{house.ownerPhone}
</if>
<if test="house.delFlag != null and house.delFlag.trim() != ''">
AND a.DEL_FLAG = #{building.delFlag}
</if>
</where>
</select>-->
<select id="searchHouseByPage" resultType="map">
select
a.HOUSE_NAME as houseName,
@ -178,7 +101,7 @@
LEFT JOIN ic_neighbor_hood c on a.NEIGHBOR_HOOD_ID = c.ID and c.DEL_FLAG = '0'
LEFT JOIN ic_building_unit d on a.BUILDING_UNIT_ID = d.ID and d.DEL_FLAG = '0'
<where>
a.del_flag = '0'
1 = 1
<if test="pids != null and pids != ''">
and case c.AGENCY_PIDS when '' then CONCAT(c.AGENCY_ID) like CONCAT(#{pids}, '%')
else CONCAT(c.AGENCY_PIDS, ':', c.AGENCY_ID) like CONCAT(#{pids}, '%') end
@ -213,22 +136,14 @@
<if test="rentFlag != null and rentFlag.trim() != ''">
AND a.rent_flag = #{rentFlag}
</if>
and a.del_flag = '0'
</where>
/*排序规则:如果是社区查询则根据小区、楼栋、单元、房屋名字分别升序排序*/
<choose>
<when test="queryScene == 'community_search'">
ORDER BY CONVERT(c.NEIGHBOR_HOOD_NAME using gbk) ASC,
CONVERT(b.BUILDING_NAME USING gbk) ASC,
CONVERT(d.UNIT_NAME USING gbk) ASC,
CONVERT(a.HOUSE_NAME using gbk) ASC
</when>
<when test="queryScene == 'house_manage'">
ORDER BY CAST(d.UNIT_NUM AS SIGNED), a.DOOR_NAME
</when>
<otherwise>
ORDER BY CAST(d.UNIT_NUM AS SIGNED), a.DOOR_NAME
</otherwise>
</choose>
/*排序规则:根据小区、楼栋、单元、门牌号(分别按照数字和中文)分别升序排序*/
ORDER BY CONVERT(c.NEIGHBOR_HOOD_NAME using gbk),
CONVERT(b.BUILDING_NAME USING gbk),
CONVERT(d.UNIT_NAME USING gbk),
CAST(a.DOOR_NAME AS SIGNED),
CONVERT(a.DOOR_NAME using gbk)
</select>
<select id="searchAllHouse" resultType="com.epmet.excel.IcHouseExcel">
select
@ -260,59 +175,8 @@
<if test="house.delFlag != null and house.delFlag.trim() != ''">
AND a.DEL_FLAG = #{house.delFlag}
</if>
</where>
</select>
<!-- <select id="searchAllHouse" resultType="com.epmet.excel.IcHouseExcel">
select
a.HOUSE_NAME as houseName,
a.DOOR_NAME as doorName,
a.HOUSE_TYPE as houseType,
a.PURPOSE as purpose,
a.RENT_FLAG as rentFlag,
a.OWNER_NAME as ownerName,
a.OWNER_PHONE as ownerPhone,
a.OWNER_ID_CARD as ownerIdCard,
b.BUILDING_NAME as buildingName,
c.NEIGHBOR_HOOD_NAME as neighborHoodName,
d.UNIT_NUM as unitName
from ic_house a
INNER JOIN ic_building b on a.BUILDING_ID = b.ID
<if test="building.id != null and building.id.trim() != ''">
AND b.ID = #{building.id}
</if>
<if test="building.buildingName != null and building.buildingName.trim() != ''">
AND b.BUILDING_NAME like concat('%',trim(#{building.buildingName}),'%')
</if>
INNER JOIN ic_neighbor_hood c on a.NEIGHBOR_HOOD_ID = c.ID
<if test="neighbor.id != null and neighbor.id.trim() != ''">
AND c.ID = #{neighbor.id}
</if>
<if test="neighbor.agencyId != null and neighbor.agencyId.trim() != ''">
AND c.AGENCY_ID = #{neighbor.agencyId}
</if>
<if test="neighbor.gridId != null and neighbor.gridId.trim() != ''">
AND c.GRID_ID = #{neighbor.gridId}
</if>
<if test="neighbor.neighborHoodName != null and neighbor.neighborHoodName.trim() != ''">
AND c.NEIGHBOR_HOOD_NAME like concat('%',trim(#{neighbor.neighborHoodName}),'%')
</if>
LEFT JOIN ic_building_unit d on a.BUILDING_UNIT_ID = d.ID
<where>
<if test="house.ownerName != null and house.ownerName.trim() != ''">
AND a.OWNER_NAME = #{house.ownerName}
</if>
<if test="house.OWNER_PHONE != null and house.OWNER_PHONE.trim() != ''">
AND a.OWNER_PHONE = #{house.ownerPhone}
</if>
<if test="house.delFlag != null and house.delFlag.trim() != ''">
AND a.DEL_FLAG = #{building.delFlag}
</if>
</where>
</select>-->
<select id="queryHouseInfo" parameterType="map" resultType="com.epmet.dto.result.HouseInfoDTO">

3
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java

@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @Description OpenData服务启动类
@ -14,6 +14,7 @@ import org.springframework.context.annotation.ComponentScan;
* @author wxz
* @date 2021.10.13 15:16:05
*/
@EnableScheduling
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients

33
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java

@ -0,0 +1,33 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.opendata.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.opendata.entity.GriderOnlineNumEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 在线网格员人数
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-10-14
*/
@Mapper
public interface GriderOnlineNumDao extends BaseDao<GriderOnlineNumEntity> {
}

61
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java

@ -0,0 +1,61 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.opendata.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 用户巡查主记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-10-14
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("grider_online_num")
public class GriderOnlineNumEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 客户Id
*/
private String customerId;
private String qxGridId;
/**
* 推送时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date pushTime;
/**
* 在线数
*/
private Integer onlineNum;
}

38
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java

@ -0,0 +1,38 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.opendata.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.opendata.entity.GriderOnlineNumEntity;
/**
* 用户巡查主记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-10-14
*/
public interface GriderOnlineNumService extends BaseService<GriderOnlineNumEntity> {
/**
* desc:插入巡查中的网格员数据
* @return boolean
*/
Boolean insertData(String agencyId);
}

69
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java

@ -0,0 +1,69 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.opendata.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.form.PatrolCountFormDTO;
import com.epmet.dto.result.PatrolCountResultDTO;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.opendata.dao.GriderOnlineNumDao;
import com.epmet.opendata.entity.GriderOnlineNumEntity;
import com.epmet.opendata.service.GriderOnlineNumService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 用户巡查主记录
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2021-10-14
*/
@Slf4j
@Service
public class GriderOnlineNumServiceImpl extends BaseServiceImpl<GriderOnlineNumDao, GriderOnlineNumEntity> implements GriderOnlineNumService {
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Override
public Boolean insertData(String agencyId) {
PatrolCountFormDTO param = new PatrolCountFormDTO();
param.setAgencyId(agencyId);
Result<PatrolCountResultDTO> patrolCountResult = epmetUserOpenFeignClient.patrolCount(param);
log.debug("insertData patrolCountResult return:{}", JSON.toJSONString(patrolCountResult));
if (patrolCountResult == null || !patrolCountResult.success()) {
log.warn("insertData patrolCount fail,return null");
return false;
}
PatrolCountResultDTO data = patrolCountResult.getData();
int count = data.getPatrollingCount() == null ? NumConstant.ZERO : data.getPatrollingCount();
GriderOnlineNumEntity entity = new GriderOnlineNumEntity();
entity.setCustomerId(StrConstant.PY_CUSTOMER);
entity.setPushTime(new Date());
entity.setOnlineNum(count);
baseDao.insert(entity);
return true;
}
}

71
epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java

@ -0,0 +1,71 @@
package com.epmet.opendata.task;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.distributedlock.DistributedLock;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.opendata.service.GriderOnlineNumService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* desc:
*
* @author: LiuJanJun
* @date: 2022/4/12 4:21 下午
* @version: 1.0
*/
@Slf4j
@Component
public class ExtractBizDataToOpenData {
@Autowired
private DistributedLock distributedLock;
@Autowired
private GriderOnlineNumService griderOnlineNumService;
@Scheduled(cron = "0 30 */2 * * *")
//@Scheduled(cron = "0/15 * * * * *")
public void extractGridMemberPatrollingCount() {
String currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN);
log.info("extractGridMemberPatrollingCount start,date:{}", currentTime);
RLock rLock = null;
try {
rLock = distributedLock.tryLock(RedisKeys.getLockByMethodName("extractGridMemberPatrollingCount"));
if (rLock == null || !rLock.isLocked()) {
log.warn("tryLock method extractGridMemberPatrollingCount fail");
return;
}
boolean patrolCountResult;
int retryTime = NumConstant.THREE;
do {
//StrConstant.PY_ROOT_AGENCY
patrolCountResult = griderOnlineNumService.insertData(StrConstant.PY_ROOT_AGENCY);
if (!patrolCountResult) {
break;
}
//如果 重试次数为1了 就让歇个 5分钟
if (retryTime == 1) {
Thread.sleep(NumConstant.FIVE * NumConstant.SIXTY * NumConstant.ONE_THOUSAND);
}
} while (retryTime-- > 0);
if (!patrolCountResult) {
log.error("插入网格员在线人数失败,请检查原因,时间:{}", currentTime);
}
} catch (Exception e) {
log.warn("tryLock method extractGridMemberPatrollingCount fail");
} finally {
distributedLock.unLock(rLock);
}
log.info("extractGridMemberPatrollingCount end");
}
}

13
epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql

@ -0,0 +1,13 @@
CREATE TABLE `grider_online_num` (
`ID` varchar(64) NOT NULL COMMENT '主键',
`CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id',
`ONLINE_NUM` int(11) NOT NULL COMMENT '在线人数',
`PUSH_TIME` datetime NOT NULL COMMENT '推送时间',
`DEL_FLAG` bigint(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
`REVISION` int(11) NOT NULL COMMENT '乐观锁',
`CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
`CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
`UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网格员在线人数';

6
epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.opendata.dao.GriderOnlineNumDao">
</mapper>

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/PartyMemberListFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.dto.form.PageFormDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -11,7 +12,7 @@ import java.io.Serializable;
* @Date 2021/12/10 15:49
*/
@Data
public class PartyMemberListFormDTO implements Serializable {
public class PartyMemberListFormDTO extends PageFormDTO implements Serializable {
private static final long serialVersionUID = -6085134769034337175L;
@NotBlank(message = "组织类型不能为空")
@ -19,6 +20,4 @@ public class PartyMemberListFormDTO implements Serializable {
@NotBlank(message = "组织ID不能为空")
private String orgId;
private String code;
private Integer pageNo = 1;
private Integer pageSize = 20;
}

7
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/SearchByNameFormDTO.java

@ -17,7 +17,7 @@ public class SearchByNameFormDTO implements Serializable {
private static final long serialVersionUID = -5017695783909884799L;
public interface SearchByNameForm{}
public interface SearchByCategoryForm{}
@NotBlank(message = "name不能为空",groups = SearchByNameForm.class)
private String name;
@ -27,4 +27,9 @@ public class SearchByNameFormDTO implements Serializable {
@NotNull(message = "pageNo不能为空",groups = SearchByNameForm.class)
private Integer pageNo;
@NotBlank(message = "columnName不能为空",groups = SearchByCategoryForm.class)
private String columnName;
private String customerId;
private String userId;
}

5
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/IcStatsResiResultDTO.java

@ -40,5 +40,8 @@ public class IcStatsResiResultDTO implements Serializable {
private String managementIcon;
private String dataIcon;
private String houseShowIcon;
/**
* 列名
*/
private String columnName;
}

30
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/SearchByNameResultDTO.java

@ -55,6 +55,31 @@ public class SearchByNameResultDTO implements Serializable {
*/
private String userId;
/**
* 手机号
*/
private String mobile;
/**
* 性别
*/
private String gender;
/**
* 身份证号
*/
private String idCard;
/**
* 出生日期
*/
private String birthday;
/**
* 备注
*/
private String remarks;
public SearchByNameResultDTO() {
this.sort = NumConstant.ZERO;
this.name = "";
@ -62,5 +87,10 @@ public class SearchByNameResultDTO implements Serializable {
this.neighborHoodName = "";
this.buildNum = "";
this.userId = "";
this.mobile="";
this.gender="";
this.idCard="";
this.birthday="";
this.remarks="";
}
}

176
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcResiUserController.java

@ -43,6 +43,7 @@ import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.*;
import com.epmet.commons.tools.utils.poi.excel.FreezeAndFilter;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.constant.SystemMessageType;
import com.epmet.constants.ImportTaskConstants;
@ -50,6 +51,8 @@ import com.epmet.dto.IcResiUserDTO;
import com.epmet.dto.form.*;
import com.epmet.dto.result.*;
import com.epmet.enums.IcResiUserTableEnum;
import com.epmet.excel.PartyMemberAgeExportExcel;
import com.epmet.excel.PartyMemberEducationExportExcel;
import com.epmet.excel.support.ExportResiUserItemDTO;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.OperCustomizeOpenFeignClient;
@ -59,6 +62,7 @@ import com.epmet.service.IcResiUserService;
import feign.RequestInterceptor;
import jodd.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
@ -72,6 +76,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
@ -84,6 +89,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -135,7 +141,7 @@ public class IcResiUserController implements ResultDataResolver {
* 模板枚举
*/
public enum IcUserTemplateEnums {
IC_RESI_IMPORT_TEMPLATE("excel/ic_resi_info_import_cid_for_easy_excel.xls", "居民信息导入模板.xls"),
IC_RESI_IMPORT_TEMPLATE("excel/ic_resi_import_template.xls", "居民信息导入模板.xls"),
IC_RESI_EXPORT_TEMPLATE("excel/ic_resi_info_cid_for_easy_excel.xlsx", "居民信息导出模板.xlsx");
private String pathInApp;
@ -157,18 +163,13 @@ public class IcResiUserController implements ResultDataResolver {
{
// 初始化上传目录
String home = System.getProperty("user.home");
Path importDir = Paths.get(home, "epmet_files", "ic_user_import");
if (Files.notExists(importDir)) {
try {
Files.createDirectories(importDir);
IC_RESI_UPLOAD_DIR = com.epmet.commons.tools.utils.FileUtils.getAndCreateDirUnderEpmetFilesDir("ic_user_import");
} catch (IOException e) {
log.error("创建数字赋能平台上传目录失败");
log.error("初始化居民信息上传目录失败:{}", ExceptionUtils.getErrorStackTrace(e));
}
}
IC_RESI_UPLOAD_DIR = importDir;
Path exportDir = Paths.get(home, "epmet_files", "ic_user_export");
Path exportDir = Paths.get(System.getProperty("user.home"), "epmet_files", "ic_user_export");
if (Files.notExists(exportDir)) {
try {
Files.createDirectories(exportDir);
@ -469,10 +470,10 @@ public class IcResiUserController implements ResultDataResolver {
// 三.异步执行导入
executorService.execute(() -> {
boolean isAllSuccess = false;
try {
List<FormItemResult> formItemList = icResiUserService.listFormItems(customerId,IcFormCodeEnum.RESI_BASE_INFO.getCode());
icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
isAllSuccess = icResiUserImportService.importIcResiInfoFromExcel(importTaskId, formItemList, importTempFileSavePath.toString(), response, IC_RESI_UPLOAD_DIR);
} catch (Throwable e) {
String errorMsg = ExceptionUtils.getThrowableErrorStackTrace(e);
log.error("【导入居民信息失败】导入失败:{}", errorMsg);
@ -488,8 +489,13 @@ public class IcResiUserController implements ResultDataResolver {
icResiUserImportService.finishImportTask(importTaskId, operatorId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL, resultDesc, null);
} finally {
try {
// 都导入成功了没问题,才删除
if (importTempFileSavePath != null){
if (isAllSuccess) {
Files.delete(importTempFileSavePath);
} else {
log.error("【导入居民信息】未完全成功,上传文件:{}", importTempFileSavePath);
}
}
} catch (IOException e) {
log.error("【导入居民信息失败】清理上传的文件失败:{}", ExceptionUtils.getErrorStackTrace(e));
@ -531,8 +537,24 @@ public class IcResiUserController implements ResultDataResolver {
*/
@PostMapping("searchbyname")
public Result<PageData<SearchByNameResultDTO>> searchByName(@RequestBody SearchByNameFormDTO formDTO, @LoginUser TokenDto tokenDto) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(formDTO, SearchByNameFormDTO.SearchByNameForm.class);
return new Result<PageData<SearchByNameResultDTO>>().ok(icResiUserService.searchByName(formDTO, tokenDto));
return new Result<PageData<SearchByNameResultDTO>>().ok(icResiUserService.searchByName(formDTO));
}
/**
* 需求 http://zentao.elinkservice.cn/task-view-4193.html 第11条
* @param formDTO
* @param tokenDto
* @return 根据分类搜索
*/
@PostMapping("searchbycategory")
public Result<PageData<SearchByNameResultDTO>> search(@RequestBody SearchByNameFormDTO formDTO, @LoginUser TokenDto tokenDto) {
formDTO.setCustomerId(tokenDto.getCustomerId());
formDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(formDTO, SearchByNameFormDTO.SearchByCategoryForm.class);
return new Result<PageData<SearchByNameResultDTO>>().ok(icResiUserService.searchByName(formDTO));
}
@NotNull
@ -585,28 +607,30 @@ public class IcResiUserController implements ResultDataResolver {
/**
* 下载ic居民信息导入excel模板
* @param loginUserInfo
* @return
*/
@PostMapping("import/download-template")
public ResponseEntity<byte[]> downloadIcResiDownloadTemplate(@LoginUser TokenDto loginUserInfo) {
String customerId = loginUserInfo.getCustomerId();
public void downloadIcResiDownloadTemplate(HttpServletResponse response) {
InputStream is = null;
ServletOutputStream os = null;
try {
File icResiImportTemplateFile = getIcResiTemplateFile(customerId, IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE);
os = response.getOutputStream();
HttpHeaders headers = new HttpHeaders();
headers.add("Access-Control-Expose-Headers", "Content-Disposition");
headers.add("content-Type", "application/vnd.ms-excel");
headers.add("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE.getTemplateName(), "UTF-8"));
is = this.getClass().getClassLoader().getResourceAsStream(IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE.getPathInApp());
return new ResponseEntity<>(FileUtil.readBytes(icResiImportTemplateFile), headers, HttpStatus.OK);
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(IcUserTemplateEnums.IC_RESI_IMPORT_TEMPLATE.getTemplateName(), "UTF-8"));
IOUtils.copy(is, os);
} catch (Exception e) {
String errorStackTrace = ExceptionUtils.getErrorStackTrace(e);
log.error("下载IC居民信息导入模板失败:{}", errorStackTrace);
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "下载IC居民信息导入模板失败");
} finally {
org.apache.poi.util.IOUtils.closeQuietly(is);
org.apache.poi.util.IOUtils.closeQuietly(os);
}
}
@ -637,6 +661,56 @@ public class IcResiUserController implements ResultDataResolver {
return new Result<PageData<PartyMemberAgeResultDTO>>().ok(icResiUserService.getPartyMemberAgeList(formDTO));
}
@NoRepeatSubmit
@PostMapping("partymemberagelist/export")
public void partyMemberAgeListExport(@LoginUser TokenDto tokenDto, @RequestBody PartyMemberListFormDTO formDTO, HttpServletResponse response) {
ExcelWriter excelWriter = null;
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
formDTO.setIsPage(false);
List<PartyMemberAgeExportExcel> exportList = new ArrayList<>();
try {
String fileName = "";
switch (formDTO.getCode()) {
case NumConstant.ZERO_STR:
fileName = "50岁以下党员信息.xlsx";
break;
case NumConstant.ONE_STR:
fileName = "50-59岁党员信息.xlsx";
break;
case NumConstant.TWO_STR:
fileName = "60-69岁党员信息.xlsx";
break;
case NumConstant.THREE_STR:
fileName = "70-79岁党员信息.xlsx";
break;
case NumConstant.FOUR_STR:
fileName = "80岁以上党员信息.xlsx";
break;
default:
fileName = "党员年龄信息.xlsx";
break;
}
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), PartyMemberAgeExportExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("党员列表").registerWriteHandler(new FreezeAndFilter()).build();
List<PartyMemberAgeResultDTO> list = icResiUserService.getPartyMemberAgeList(formDTO).getList();
AtomicInteger i = new AtomicInteger(1);
if (CollectionUtils.isNotEmpty(list)) {
exportList = list.stream().map(item -> {
PartyMemberAgeExportExcel excel = ConvertUtils.sourceToTarget(item, PartyMemberAgeExportExcel.class);
excel.setIndex(i.getAndIncrement());
return excel;
}).collect(Collectors.toList());
}
excelWriter.write(exportList, writeSheet);
} catch (Exception e) {
log.error("export exception", e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
/**
* 党员学历统计
* @Param formDTO
@ -663,6 +737,62 @@ public class IcResiUserController implements ResultDataResolver {
return new Result<PageData<PartyMemberEducationResultDTO>>().ok(icResiUserService.getPartyMemberEducationList(formDTO));
}
@NoRepeatSubmit
@PostMapping("partymembereducationlist/export")
public void partyMemberEducationListExport(@LoginUser TokenDto tokenDto, @RequestBody PartyMemberListFormDTO formDTO, HttpServletResponse response) {
ExcelWriter excelWriter = null;
formDTO.setPageSize(NumConstant.TEN_THOUSAND);
formDTO.setIsPage(false);
List<PartyMemberEducationExportExcel> exportList = new ArrayList<>();
try {
String fileName = "";
switch (formDTO.getCode()) {
case NumConstant.ZERO_STR:
fileName = "小学及文盲党员信息.xlsx";
break;
case NumConstant.ONE_STR:
fileName = "初中学历党员信息.xlsx";
break;
case NumConstant.TWO_STR:
fileName = "高中学历党员信息.xlsx";
break;
case NumConstant.THREE_STR:
fileName = "大专学历党员信息.xlsx";
break;
case NumConstant.FOUR_STR:
fileName = "本科学历党员信息.xlsx";
break;
case NumConstant.FIVE_STR:
fileName = "硕士学历党员信息.xlsx";
break;
case NumConstant.SIX_STR:
fileName = "博士学历党员信息.xlsx";
break;
default:
fileName = "党员学历信息.xlsx";
break;
}
excelWriter = EasyExcel.write(ExcelUtils.getOutputStreamForExcel(fileName, response), PartyMemberEducationExportExcel.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("党员列表").registerWriteHandler(new FreezeAndFilter()).build();
List<PartyMemberEducationResultDTO> list = icResiUserService.getPartyMemberEducationList(formDTO).getList();
AtomicInteger i = new AtomicInteger(1);
if (CollectionUtils.isNotEmpty(list)) {
exportList = list.stream().map(item -> {
PartyMemberEducationExportExcel excel = ConvertUtils.sourceToTarget(item, PartyMemberEducationExportExcel.class);
excel.setIndex(i.getAndIncrement());
return excel;
}).collect(Collectors.toList());
}
excelWriter.write(exportList, writeSheet);
} catch (Exception e) {
log.error("export exception", e);
} finally {
if (excelWriter != null) {
excelWriter.finish();
}
}
}
/**
* 根据居民id查询居民信息简介
* @param resiUserId

2
epmet-user/epmet-user-server/src/main/java/com/epmet/dao/IcResiUserDao.java

@ -124,7 +124,7 @@ public interface IcResiUserDao extends BaseDao<IcResiUserEntity> {
* @author zxc
* @date 2021/11/3 2:05 下午
*/
List<SearchByNameResultDTO> searchByName(@Param("name") String name, @Param("agencyId") String agencyId, @Param("pageNo") Integer pageNo);
List<SearchByNameResultDTO> searchByName(@Param("name") String name, @Param("columnName") String columnName, @Param("agencyId") String agencyId, @Param("pageNo") Integer pageNo);
Set<String> selectUserDemandCode(String icResiUserId);

31
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PartyMemberAgeExportExcel.java

@ -0,0 +1,31 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.Data;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/4/13 10:46
*/
@Data
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44)
public class PartyMemberAgeExportExcel {
@ColumnWidth(8)
@ExcelProperty(value = "序号",order = 1)
private Integer index;
@ColumnWidth(15)
@ExcelProperty(value = "姓名",order = 2)
private String name;
@ColumnWidth(8)
@ExcelProperty(value = "年龄",order = 3)
private String age;
@ColumnWidth(20)
@ExcelProperty(value = "手机号码",order = 4)
@Excel(name = "手机号码", width = 30)
private String mobile;
}

31
epmet-user/epmet-user-server/src/main/java/com/epmet/excel/PartyMemberEducationExportExcel.java

@ -0,0 +1,31 @@
package com.epmet.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
import lombok.Data;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/4/13 10:46
*/
@Data
@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44)
public class PartyMemberEducationExportExcel {
@ColumnWidth(8)
@ExcelProperty(value = "序号",order = 1)
private Integer index;
@ColumnWidth(15)
@ExcelProperty(value = "姓名",order = 2)
private String name;
@ColumnWidth(11)
@ExcelProperty(value = "学历",order = 3)
private String education;
@ColumnWidth(20)
@ExcelProperty(value = "手机号码",order = 4)
@Excel(name = "手机号码", width = 30)
private String mobile;
}

2
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserImportService.java

@ -13,7 +13,7 @@ import java.util.List;
*/
public interface IcResiUserImportService {
void importIcResiInfoFromExcel(String importTaskId, List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response, Path importTempPath);
boolean importIcResiInfoFromExcel(String importTaskId, List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response, Path importTempPath);
/**
* 创建导入任务

3
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcResiUserService.java

@ -98,11 +98,10 @@ public interface IcResiUserService extends BaseService<IcResiUserEntity> {
/**
* @Description 根据名字搜索
* @param formDTO
* @param tokenDto
* @author zxc
* @date 2021/11/3 1:42 下午
*/
PageData<SearchByNameResultDTO> searchByName(SearchByNameFormDTO formDTO, TokenDto tokenDto);
PageData<SearchByNameResultDTO> searchByName(SearchByNameFormDTO formDTO);
/**

22
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java

@ -13,7 +13,6 @@ import com.epmet.bean.ResiImportChangedData;
import com.epmet.commons.tools.constant.AppClientConstant;
import com.epmet.commons.tools.constant.ServiceConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.constant.ThreadLocalConstant;
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult;
import com.epmet.commons.tools.dto.result.OptionResultDTO;
import com.epmet.commons.tools.exception.EpmetErrorCode;
@ -24,7 +23,6 @@ import com.epmet.commons.tools.feign.ResultDataResolver;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.redis.common.CustomerStaffRedis;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.EpmetRequestHolder;
import com.epmet.commons.tools.utils.Result;
@ -211,9 +209,11 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
* @param formItemList item列表
* @param excelPathName excel缓存路径
* @param response 响应对象
* @return
*/
@Override
public void importIcResiInfoFromExcel(String importTaskId, List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response, Path importTempPath) {
public boolean importIcResiInfoFromExcel(String importTaskId, List<FormItemResult> formItemList, String excelPathName, HttpServletResponse response, Path importTempPath) {
boolean isAllSuccess = false;
String app = EpmetRequestHolder.getHeader(AppClientConstant.APP);
String client = EpmetRequestHolder.getHeader(AppClientConstant.CLIENT);
@ -276,6 +276,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
}
finishImportTask(importTaskId, loginUserId, ImportTaskConstants.PROCESS_STATUS_FINISHED_FAIL,null, resultDescFilePath);
} else {
isAllSuccess = true;
finishImportTask(importTaskId, loginUserId, ImportTaskConstants.PROCESS_STATUS_FINISHED_SUCCESS,null, null);
}
@ -298,6 +299,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
resiCategoryColumnNameAndLabel.remove();
itemIdAndOptionsCache.invalidateAll();
}
return isAllSuccess;
}
/**
@ -536,10 +539,18 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
private void specifiedCheck(LinkedHashMap<String, String> columnAndValues) {
String idCard = columnAndValues.get("ID_CARD");
String mobile = columnAndValues.get("MOBILE");
String name = columnAndValues.get("NAME");
List<String> errors = new ArrayList<>();
if (StringUtils.isNotBlank(idCard) && idCard.length() > 18) {
if (StringUtils.isBlank(idCard)) {
log.debug("【居民信息导入】specifiedCheck身份证号为空的:{},{}", mobile, name);
String errorMsg = "身份证号不能为空";
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), errorMsg, errorMsg);
}
if (idCard.length() > 18) {
// 身份证号超长了哦,不可以的
errors.add("身份证号过长");
}
@ -570,9 +581,6 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res
LinkedHashMap<String, String> columnAndValues = new LinkedHashMap<>();
String loginUserApp = EpmetRequestHolder.getHeader(AppClientConstant.APP);
String loginUserClient = EpmetRequestHolder.getHeader(AppClientConstant.CLIENT);
String loginUserId = EpmetRequestHolder.getHeader(AppClientConstant.USER_ID.toLowerCase());
String loginUserCustomerId = EpmetRequestHolder.getHeader(AppClientConstant.CUSTOMER_ID.toLowerCase());
// 遍历每一行,将行内容转化为

22
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserServiceImpl.java

@ -835,19 +835,18 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
/**
* @Description 根据名字搜索
* @param formDTO
* @param tokenDto
* @author zxc
* @date 2021/11/3 1:42 下午
*/
@Override
public PageData<SearchByNameResultDTO> searchByName(SearchByNameFormDTO formDTO, TokenDto tokenDto) {
public PageData<SearchByNameResultDTO> searchByName(SearchByNameFormDTO formDTO) {
// 查询工作人员所属组织
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(tokenDto.getCustomerId(), tokenDto.getUserId());
CustomerStaffInfoCacheResult staffInfo = CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(), formDTO.getUserId());
if (null == staffInfo){
throw new RenException("未查询到当前工作人员所属组织");
}
Integer no = (formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize();
PageInfo<SearchByNameResultDTO> pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.searchByName(formDTO.getName(), staffInfo.getAgencyId(), no));
PageInfo<SearchByNameResultDTO> pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.searchByName(formDTO.getName(), formDTO.getColumnName(),staffInfo.getAgencyId(), no));
List<SearchByNameResultDTO> result = pageInfo.getList();
if (CollectionUtils.isEmpty(result)){
return new PageData<>(new ArrayList<>(), pageInfo.getTotal());
@ -1484,11 +1483,15 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
*/
@Override
public PageData<PartyMemberAgeResultDTO> getPartyMemberAgeList(PartyMemberListFormDTO formDTO) {
if (formDTO.getIsPage()) {
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize());
List<PartyMemberAgeResultDTO> list = baseDao.getPartyMemberAgeList(formDTO.getOrgType(), formDTO.getOrgId(), formDTO.getCode());
PageInfo<PartyMemberAgeResultDTO> pageInfo = new PageInfo<>(list);
return new PageData<>(list, pageInfo.getTotal());
}
List<PartyMemberAgeResultDTO> list = baseDao.getPartyMemberAgeList(formDTO.getOrgType(), formDTO.getOrgId(), formDTO.getCode());
return new PageData<>(list, null == list?NumConstant.ZERO:list.size());
}
/**
* 党员文化程度统计
@ -1543,6 +1546,7 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
*/
@Override
public PageData<PartyMemberEducationResultDTO> getPartyMemberEducationList(PartyMemberListFormDTO formDTO) {
if (formDTO.getIsPage()) {
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize());
List<PartyMemberEducationResultDTO> list = baseDao.getPartyMemberEducationList(formDTO.getOrgType(), formDTO.getOrgId(), formDTO.getCode());
Result<Map<String, String>> mapResult = epmetAdminOpenFeignClient.dictMap(DictTypeEnum.EDUCATION.getCode());
@ -1554,4 +1558,14 @@ public class IcResiUserServiceImpl extends BaseServiceImpl<IcResiUserDao, IcResi
}
return new PageData<>(list, pageInfo.getTotal());
}
List<PartyMemberEducationResultDTO> list = baseDao.getPartyMemberEducationList(formDTO.getOrgType(), formDTO.getOrgId(), formDTO.getCode());
Result<Map<String, String>> mapResult = epmetAdminOpenFeignClient.dictMap(DictTypeEnum.EDUCATION.getCode());
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
item.setEducation(null == mapResult.getData().get(item.getEducation()) ? "" : mapResult.getData().get(item.getEducation()));
});
}
return new PageData<>(list, null == list?NumConstant.ZERO:list.size());
}
}

1
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/StatsResiWarnServiceImpl.java

@ -238,6 +238,7 @@ public class StatsResiWarnServiceImpl implements StatsResiWarnService {
resultDTO.setDataIcon(item.getDataIcon());
resultDTO.setHouseShowIcon(item.getHouseShowIcon());
resultDTO.setManagementIcon(item.getManagementIcon());
resultDTO.setColumnName(item.getColumnName());
//根据id ,level 获取count
//Integer count = icStatsResiWarnDao.countListByLevelAndCol(customerId,item.getTableName(),item.getColumnName(),id,level);
Map<String, BigDecimal> orDefault = tableColumnCountMap.getOrDefault(item.getTableName(), new HashMap<>());

4
epmet-user/epmet-user-server/src/main/resources/db/migration/V0.0.40__member_huji.sql

@ -1,2 +1,6 @@
alter table ic_resi_member add COLUMN DOMICILE_PLACE VARCHAR(128) comment '户籍所在地' AFTER YMJZ;
alter table ic_resi_member add COLUMN WORK_PLACE VARCHAR(128) comment '单位或学校' AFTER DOMICILE_PLACE;
-- 居民信息表添加租户列
alter table ic_resi_user add column IS_TENANT char(1) comment '是否租户【是:1 否:0】' after IS_SPECIAL;
update ic_resi_user set ic_resi_user.IS_TENANT='0' where ic_resi_user.IS_TENANT is null or ic_resi_user.IS_TENANT='';

0
epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_info_import_cid_for_easy_excel.xls → epmet-user/epmet-user-server/src/main/resources/excel/ic_resi_import_template.xls

18
epmet-user/epmet-user-server/src/main/resources/mapper/IcResiUserDao.xml

@ -196,11 +196,25 @@
`NAME`,
VILLAGE_ID AS neighborHoodId,
BUILD_ID,
GRID_ID
GRID_ID,
MOBILE,
( case when GENDER='1'then '男'
when GENDER='2' then '女'
else '未知'
end
) as GENDER,
ID_CARD,
IFNULL(BIRTHDAY,'') AS BIRTHDAY,
IFNULL(REMARKS,'') AS REMARKS
FROM ic_resi_user
WHERE DEL_FLAG = '0'
AND (AGENCY_ID = #{agencyId} OR PIDS LIKE CONCAT('%',#{agencyId},'%'))
<if test="name != null and name != ''">
AND `NAME` LIKE CONCAT('%',#{name},'%')
</if>
<if test="columnName != null and columnName != ''">
and ${columnName}='1'
</if>
ORDER BY `NAME`
</select>
@ -454,6 +468,7 @@
<if test="null != code and '' != code">
WHERE ageGroup = #{code}
</if>
ORDER BY CONVERT(NAME USING GBK) ASC
</select>
<select id="getPartyMemberEducationList" resultType="com.epmet.dto.result.PartyMemberEducationResultDTO">
@ -479,6 +494,7 @@
AND (AGENCY_ID = #{orgId} OR PIDS LIKE CONCAT('%',#{orgId},'%'))
</otherwise>
</choose>
ORDER BY CONVERT(NAME USING GBK) ASC
</select>
<select id="getPartyMemberEducationStatistics" resultType="com.epmet.commons.tools.dto.result.OptionDataResultDTO">
SELECT

Loading…
Cancel
Save