18 changed files with 434 additions and 1 deletions
@ -0,0 +1,69 @@ |
|||||
|
package com.epmet.dataaggre.dto.epmetuser.form; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.util.Comparator; |
||||
|
import java.util.Map; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class ResisByPolicyRulesFormDTO { |
||||
|
|
||||
|
private Integer pageNo = 1; |
||||
|
private Integer pageSize = 20; |
||||
|
|
||||
|
/** |
||||
|
* 规则map |
||||
|
*/ |
||||
|
private Map<String, Set<PolicyRule>> rules; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public static class PolicyRule implements Comparator<Integer> { |
||||
|
private String customerId; |
||||
|
/** |
||||
|
* resi:人员信息,house:房屋信息,stat:统计信息 |
||||
|
*/ |
||||
|
private String groupType; |
||||
|
|
||||
|
/** |
||||
|
* 与上一条的关系;and、or |
||||
|
*/ |
||||
|
private String lastLogicalRel; |
||||
|
|
||||
|
/** |
||||
|
* 查询类型:等于、不等于....;来源于字典表sql_query_type |
||||
|
*/ |
||||
|
private String queryType; |
||||
|
|
||||
|
/** |
||||
|
* 表名;人员信息有值; |
||||
|
*/ |
||||
|
private String colTable; |
||||
|
|
||||
|
/** |
||||
|
* 人员信息存储组件对应的列名;房屋信息存储ic_house表的列名;统计信息应该是定义到字典表,这里存储字典key就行吧 |
||||
|
*/ |
||||
|
private String colKey; |
||||
|
|
||||
|
/** |
||||
|
* 参数值 |
||||
|
*/ |
||||
|
private String colVal; |
||||
|
|
||||
|
/** |
||||
|
* 排序字段;同一group_type升序 |
||||
|
*/ |
||||
|
private Integer sort; |
||||
|
|
||||
|
@Override |
||||
|
public int compare(Integer o1, Integer o2) { |
||||
|
return o1.compareTo(o2); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
package com.epmet.dataaggre.dto.epmetuser.result; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class ResiInfoResultDTO { |
||||
|
|
||||
|
private String name; |
||||
|
private String mobile; |
||||
|
private String idCard; |
||||
|
/** |
||||
|
* 小区全名,包含小区前面的属性,比如网格等 |
||||
|
*/ |
||||
|
private String neighborhoodFullName; |
||||
|
private Integer age; |
||||
|
|
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
package com.epmet.dataaggre.service; |
||||
|
|
||||
|
import com.epmet.dataaggre.dto.epmetuser.form.ResisByPolicyRulesFormDTO; |
||||
|
import com.epmet.dataaggre.dto.epmetuser.result.ResiInfoResultDTO; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
/** |
||||
|
* 居民的service |
||||
|
*/ |
||||
|
public interface ResiService { |
||||
|
|
||||
|
/** |
||||
|
* 政策人员预览 |
||||
|
* @param pageNo |
||||
|
* @param pageSize |
||||
|
* @param resiRule |
||||
|
* @param houseRule |
||||
|
*/ |
||||
|
List<ResiInfoResultDTO> listByPolicyRules(Integer pageNo, Integer pageSize, Set<ResisByPolicyRulesFormDTO.PolicyRule> resiRule, |
||||
|
Set<ResisByPolicyRulesFormDTO.PolicyRule> houseRule, |
||||
|
Set<ResisByPolicyRulesFormDTO.PolicyRule> houseStat); |
||||
|
} |
@ -0,0 +1,74 @@ |
|||||
|
package com.epmet.dataaggre.service.impl; |
||||
|
|
||||
|
import com.epmet.commons.tools.utils.EpmetRequestHolder; |
||||
|
import com.epmet.dataaggre.dto.epmetuser.form.ResisByPolicyRulesFormDTO; |
||||
|
import com.epmet.dataaggre.dto.epmetuser.result.ResiInfoResultDTO; |
||||
|
import com.epmet.dataaggre.entity.govorg.IcHouseEntity; |
||||
|
import com.epmet.dataaggre.service.ResiService; |
||||
|
import com.epmet.dataaggre.service.epmetuser.EpmetUserService; |
||||
|
import com.epmet.dataaggre.service.govorg.GovOrgService; |
||||
|
import org.apache.commons.collections4.CollectionUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.Set; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@Service |
||||
|
public class ResiServiceImpl implements ResiService { |
||||
|
|
||||
|
@Autowired |
||||
|
private EpmetUserService epmetUserService; |
||||
|
|
||||
|
@Autowired |
||||
|
private GovOrgService govOrgService; |
||||
|
|
||||
|
@Override |
||||
|
public List<ResiInfoResultDTO> listByPolicyRules(Integer pageNo, Integer pageSize, |
||||
|
Set<ResisByPolicyRulesFormDTO.PolicyRule> resiRule, |
||||
|
Set<ResisByPolicyRulesFormDTO.PolicyRule> houseRule, |
||||
|
Set<ResisByPolicyRulesFormDTO.PolicyRule> houseStat) { |
||||
|
String customerId = EpmetRequestHolder.getLoginUserCustomerId(); |
||||
|
|
||||
|
// 结果集
|
||||
|
List<ResiInfoResultDTO> resultResis = new ArrayList<>(); |
||||
|
|
||||
|
int housePageNo = 0; |
||||
|
do { |
||||
|
// houseIds 为null,说明用户没有指定house和统计的规则,则不应该使用这两项来查询,sql中不应该有这方面的条件
|
||||
|
List<String> houseIds = null; |
||||
|
|
||||
|
// 拿到房屋id列表,去查询居民列表
|
||||
|
if (CollectionUtils.isNotEmpty(houseRule) || CollectionUtils.isNotEmpty(houseStat)) { |
||||
|
List<IcHouseEntity> houseEntities = govOrgService.listHousesByRules(houseRule, houseStat, housePageNo, 50); |
||||
|
houseIds = houseEntities.stream().map(icHouseEntity -> icHouseEntity.getId()).collect(Collectors.toList()); |
||||
|
} |
||||
|
|
||||
|
if (houseIds != null && houseIds.size() == 0) { |
||||
|
// 用户使用了房屋和统计相关的条件,但是没查到房屋,我看就没有走下去了的必要了吧..
|
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
// 查询居民
|
||||
|
List<ResiInfoResultDTO> resis = epmetUserService.listByPolicyRules(customerId, resiRule, houseIds); |
||||
|
resultResis.addAll(resis); |
||||
|
|
||||
|
// 满了20个,或者查不到居民和房屋了(数据空了),则跳出
|
||||
|
// 没有用house的条件,没有循环的必要,查一次居民信息即可,跳出
|
||||
|
if (resultResis.size() >= pageSize || houseIds == null ) { |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
housePageNo ++; |
||||
|
} while (true); |
||||
|
|
||||
|
// 够了20个,那就截取前20个,否则直接返回
|
||||
|
if (resultResis.size() > 20) { |
||||
|
return resultResis.subList(0, 20); |
||||
|
} |
||||
|
return resultResis; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,69 @@ |
|||||
|
package com.epmet.dto.form.resi; |
||||
|
|
||||
|
import lombok.AllArgsConstructor; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
import java.util.Comparator; |
||||
|
import java.util.Map; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public class HeartResisByPolicyRulesFormDTO { |
||||
|
|
||||
|
private Integer pageNo = 1; |
||||
|
private Integer pageSize = 20; |
||||
|
|
||||
|
/** |
||||
|
* 规则map |
||||
|
*/ |
||||
|
private Set<PolicyRule> rules; |
||||
|
|
||||
|
@Data |
||||
|
@NoArgsConstructor |
||||
|
@AllArgsConstructor |
||||
|
public static class PolicyRule implements Comparator<Integer> { |
||||
|
private String customerId; |
||||
|
/** |
||||
|
* resi:人员信息,house:房屋信息,stat:统计信息 |
||||
|
*/ |
||||
|
private String groupType; |
||||
|
|
||||
|
/** |
||||
|
* 与上一条的关系;and、or |
||||
|
*/ |
||||
|
private String lastLogicalRel; |
||||
|
|
||||
|
/** |
||||
|
* 查询类型:等于、不等于....;来源于字典表sql_query_type |
||||
|
*/ |
||||
|
private String queryType; |
||||
|
|
||||
|
/** |
||||
|
* 表名;人员信息有值; |
||||
|
*/ |
||||
|
private String colTable; |
||||
|
|
||||
|
/** |
||||
|
* 人员信息存储组件对应的列名;房屋信息存储ic_house表的列名;统计信息应该是定义到字典表,这里存储字典key就行吧 |
||||
|
*/ |
||||
|
private String colKey; |
||||
|
|
||||
|
/** |
||||
|
* 参数值 |
||||
|
*/ |
||||
|
private String colVal; |
||||
|
|
||||
|
/** |
||||
|
* 排序字段;同一group_type升序 |
||||
|
*/ |
||||
|
private Integer sort; |
||||
|
|
||||
|
@Override |
||||
|
public int compare(Integer o1, Integer o2) { |
||||
|
return o1.compareTo(o2); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue