Browse Source

提升违法受害人入库率

master
kami 1 year ago
parent
commit
a760b6b03d
  1. 7
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java
  2. 6
      src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java
  3. 29
      src/main/java/com/biutag/supervisiondata/pojo/domain/WFSHPerson.java
  4. 341
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java

7
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseSHRXXMapper.java

@ -1,6 +1,7 @@
package com.biutag.supervisiondata.mapper.dwd;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervisiondata.pojo.domain.WFSHPerson;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX;
import org.apache.ibatis.annotations.Param;
@ -25,4 +26,10 @@ public interface GBaseSHRXXMapper extends BaseMapper<GBaseSHRXX> {
" where shrq between #{startTime} and #{endTime} " +
" and ajbh is not null")
List<GBaseSHRXX> selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime);
@Select(" select a.ajbh as ajbh,a.xm as name,a.gmsfhm as idCode,a.lxdh as mobile ,b.badwiddm as departId, b.barq as barq from dwd_asj_zfba_shrxx a " +
" left join dwd_asj_zfba_ajjbxx b on a.ajbh = b.ajbh " +
" where a.gmsfhm is not null and a.ajbh is not null " +
" and b.barq between #{startTime} and #{endTime} ")
List<WFSHPerson> selectSHData(@Param("startTime")String startTime, @Param("endTime")String endTime);
}

6
src/main/java/com/biutag/supervisiondata/mapper/dwd/GBaseWFRXXMapper.java

@ -1,6 +1,7 @@
package com.biutag.supervisiondata.mapper.dwd;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervisiondata.pojo.domain.WFSHPerson;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX;
import org.apache.ibatis.annotations.Param;
@ -26,6 +27,11 @@ public interface GBaseWFRXXMapper extends BaseMapper<GBaseWFRXX> {
" and ajbh is not null")
List<GBaseWFRXX> selectDataToRisk(@Param("startTime")String startTime, @Param("endTime")String endTime);
@Select(" select a.ajbh as ajbh,a.xm as name,a.zjhm as idCode,a.lxdh as mobile ,b.badwiddm as departId, b.barq as barq from dwd_ry_zfba_wfryxx a " +
" left join dwd_asj_zfba_ajjbxx b on a.ajbh = b.ajbh " +
" where a.zjhm is not null and a.ajbh is not null " +
" and b.barq between #{startTime} and #{endTime} ")
List<WFSHPerson> selectWFData(@Param("startTime")String startTime, @Param("endTime")String endTime);
/**
* 5年内犯罪

29
src/main/java/com/biutag/supervisiondata/pojo/domain/WFSHPerson.java

@ -0,0 +1,29 @@
package com.biutag.supervisiondata.pojo.domain;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author kami on 2024-12-11 14:17:28
* @version 0.0.1
* @since 1.8
*/
@Data
public class WFSHPerson implements Serializable {
/**
* 案件编号
*/
String ajbh;
String name;
String idCode;
String mobile;
String departId;
Date barq;
}

341
src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java

@ -6,10 +6,8 @@ import com.biutag.supervisiondata.pojo.ClueData;
import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.database.PointOrg;
import com.biutag.supervisiondata.pojo.domain.TaskParamDomain;
import com.biutag.supervisiondata.pojo.domain.WFSHPerson;
import com.biutag.supervisiondata.pojo.entity.ads.GBaseSYRKXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseAJJBXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseJJD;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseSHRXX;
import com.biutag.supervisiondata.pojo.entity.dwd.GBaseWFRXX;
import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue;
import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonal;
@ -53,8 +51,6 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
private final GBaseSYRKXXRepository gBaseSYRKXXRepository;
private final GBaseAJJBXXRepository ajjbxxRepository;
private final RiskPersonalService riskPersonalService;
private final GBaseZDRYRepository zdryRepository;
@ -66,10 +62,8 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
List<PointOrg> orgs = zdryRepository.getBaseMapper().selectOrg();
List<SupExternalDepart> supDeparts = externalDepartRepository.list(new LambdaQueryWrapper<SupExternalDepart>()
.select(SupExternalDepart::getExternalId, SupExternalDepart::getInternalId, SupExternalDepart::getInternalName, SupExternalDepart::getSource)
.in(SupExternalDepart::getSource, List.of("重点人员", "情指行")));
Map<String, List<SupExternalDepart>> amp = supDeparts.stream().collect(Collectors.groupingBy(SupExternalDepart::getSource));
Map<String, SupExternalDepart> pointExternalDepart = amp.get("重点人员").stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val));
Map<String, SupExternalDepart> jqExternalDepart = amp.get("情指行").stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val));
.in(SupExternalDepart::getSource, List.of("情指行")));
Map<String, SupExternalDepart> externalDepart = supDeparts.stream().collect(Collectors.toMap(SupExternalDepart::getExternalId, Function.identity(), (val, old) -> val));
Map<String, PointOrg> orgIdMap = new WeakHashMap<>();
Map<String, PointOrg> orgCodeMap = new WeakHashMap<>();
@ -78,233 +72,66 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
orgCodeMap.put(org.getDm(), org);
}
List<GBaseSHRXX> shrList = new ArrayList<>();
List<GBaseWFRXX> wxrList = new ArrayList<>();
// 统计出所有的案件编号批量查询
List<String> ajNos = new ArrayList<>();
// 手机号
List<String> mobiles = new ArrayList<>();
// 身份证
List<String> idCards = new ArrayList<>();
List<WFSHPerson> shrTmp = new ArrayList<>();
List<WFSHPerson> wfrTmp = new ArrayList<>();
// 分别拉取受害人和违法人信息
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> {
List<GBaseSHRXX> shrTmp = shrxxRepository.getBaseMapper().selectDataToRisk(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
for (GBaseSHRXX gBaseSHRXX : shrTmp) {
if (gBaseSHRXX.getGmsfhm() != null) {
idCards.add(gBaseSHRXX.getGmsfhm());
} else if (gBaseSHRXX.getLxdh() != null) {
mobiles.add(gBaseSHRXX.getLxdh());
} else {
CompletableFutureUtil.runSyncObject(() -> shrTmp.addAll(shrxxRepository.getBaseMapper().selectSHData(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))),
CompletableFutureUtil.runSyncObject(() -> wfrTmp.addAll(wfrxxRepository.getBaseMapper().selectWFData("2019-12-06 00:00:00",
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))))
).join();
// 信息全的数据
Map<String, WFSHPerson> tmpMap = new WeakHashMap<>();
// 要补全的数据
List<String> idCodes = new ArrayList<>();
for (WFSHPerson wfshPerson : shrTmp) {
if (tmpMap.get(wfshPerson.getIdCode()) != null) {
continue;
}
shrList.add(gBaseSHRXX);
ajNos.add(gBaseSHRXX.getAjbh());
}
}),
CompletableFutureUtil.runSyncObject(() -> {
List<GBaseWFRXX> wfrTmp = wfrxxRepository.getBaseMapper().selectDataToRisk("2019-12-06 00:00:00",
end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
for (GBaseWFRXX gBaseWFRXX : wfrTmp) {
if (gBaseWFRXX.getZjhm() != null) {
idCards.add(gBaseWFRXX.getZjhm());
} else if (gBaseWFRXX.getLxdh() != null) {
mobiles.add(gBaseWFRXX.getLxdh());
} else {
if (wfshPerson.getName() == null || wfshPerson.getName().isEmpty() || wfshPerson.getMobile() == null
|| wfshPerson.getMobile().isEmpty() || wfshPerson.getMobile().equals("无")) {
idCodes.add(wfshPerson.getIdCode());
continue;
}
wxrList.add(gBaseWFRXX);
ajNos.add(gBaseWFRXX.getAjbh());
tmpMap.put(wfshPerson.getIdCode(), wfshPerson);
}
})
).join();
List<String> distinctAJ = ajNos.stream().distinct().toList();
// 切割 每次查10000条
List<List<String>> ajs = IntStream.range(0, (distinctAJ.size() + 9999) / 10000)
.mapToObj(i -> distinctAJ.subList(i * 10000, Math.min((i + 1) * 10000, distinctAJ.size())))
.toList();
List<String> idCards2 = idCards.stream().distinct().toList();
List<String> mobiles2 = mobiles.stream().distinct().toList();
List<GBaseAJJBXX> xxList = new ArrayList<>();
for (List<String> aj : ajs) {
xxList.addAll(ajjbxxRepository.list(new LambdaQueryWrapper<GBaseAJJBXX>()
.select(GBaseAJJBXX::getAjbh, GBaseAJJBXX::getBadwidmc, GBaseAJJBXX::getBadwiddm, GBaseAJJBXX::getBarq)
.in(GBaseAJJBXX::getAjbh, aj)));
for (WFSHPerson wfshPerson : wfrTmp) {
if (tmpMap.get(wfshPerson.getIdCode()) != null) {
continue;
}
if (wfshPerson.getName() == null || wfshPerson.getName().isEmpty() || wfshPerson.getMobile() == null
|| wfshPerson.getMobile().isEmpty() || wfshPerson.getMobile().equals("无")) {
idCodes.add(wfshPerson.getIdCode());
continue;
}
tmpMap.put(wfshPerson.getIdCode(), wfshPerson);
}
// 案件转map方便提取
Map<String, GBaseAJJBXX> xxMap = xxList.stream().collect(Collectors.toMap(GBaseAJJBXX::getAjbh, Function.identity(), (oldValue, newValue) -> newValue));
// 人员信息查询
// 身份证查到的人
List<GBaseSYRKXX> sFms = new ArrayList<>();
// 手机号查到的人
List<GBaseSYRKXX> lXfs = new ArrayList<>();
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> {
List<List<String>> idCode = IntStream.range(0, (idCards2.size() + 9999) / 10000)
.mapToObj(i -> idCards2.subList(i * 10000, Math.min((i + 1) * 10000, idCards2.size())))
List<String> idCards = idCodes.stream().distinct().toList();
List<List<String>> idCode = IntStream.range(0, (idCards.size() + 9999) / 10000)
.mapToObj(i -> idCards.subList(i * 10000, Math.min((i + 1) * 10000, idCards.size())))
.toList();
log.info("获取补全违法人和受害人:{}", idCode.size());
List<GBaseSYRKXX> xxList = new ArrayList<>();
int count = idCode.size();
for (List<String> arr : idCode) {
List<GBaseSYRKXX> list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
xxList.addAll(gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
.select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXbdm, GBaseSYRKXX::getSspcsdm)
.in(GBaseSYRKXX::getGmsfhm, arr));
sFms.addAll(list);
.in(GBaseSYRKXX::getGmsfhm, arr)));
log.info("身份证进度 | {}", --count);
}
}),
CompletableFutureUtil.runSyncObject(() -> {
List<List<String>> mobile = IntStream.range(0, (mobiles2.size() + 9999) / 10000)
.mapToObj(i -> mobiles2.subList(i * 10000, Math.min((i + 1) * 10000, mobiles2.size())))
.toList();
int count = mobile.size();
for (List<String> arr : mobile) {
List<GBaseSYRKXX> list = gBaseSYRKXXRepository.list(new LambdaQueryWrapper<GBaseSYRKXX>()
.select(GBaseSYRKXX::getLxdh, GBaseSYRKXX::getGmsfhm, GBaseSYRKXX::getXm, GBaseSYRKXX::getXbdm, GBaseSYRKXX::getSspcsdm)
.in(GBaseSYRKXX::getLxdh, arr));
lXfs.addAll(list);
log.info("手机号进度 | {}", --count);
}
})
).join();
Map<String, GBaseSYRKXX> idCodeMap = sFms.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue));
Map<String, List<GBaseSYRKXX>> mobileMap = lXfs.stream().collect(Collectors.groupingBy(GBaseSYRKXX::getLxdh));
List<RiskPersonal> personals = new ArrayList<>();
Map<String, GBaseSYRKXX> idCodeMap = xxList.stream().collect(Collectors.toMap(GBaseSYRKXX::getGmsfhm, Function.identity(), (oldValue, newValue) -> newValue));
Map<String, List<GBaseAJJBXX>> shrMap = new HashMap<>();
for (GBaseSHRXX gBaseSHRXX : shrList) {
GBaseAJJBXX ajjbxx = xxMap.get(gBaseSHRXX.getAjbh());
if (ajjbxx == null) {
continue;
}
GBaseSYRKXX rkxx = Optional.ofNullable(gBaseSHRXX.getGmsfhm()).map(idCodeMap::get)
.orElse(null);
if (gBaseSHRXX.getLxdh() != null && rkxx == null) {
List<GBaseSYRKXX> rkxxList = mobileMap.get(gBaseSHRXX.getLxdh());
if (rkxxList != null) {
rkxx = compare(rkxxList, gBaseSHRXX.getXm());
}
}
if (rkxx != null) {
RiskPersonal person = createPerson(Default.SHR_TAG, ajjbxx, rkxx);
if (rkxx.getSspcsdm() != null) {
PointOrg org = orgCodeMap.get(rkxx.getSspcsdm());
org = findOrg(org, orgIdMap);
if (org != null) {
SupExternalDepart depart = pointExternalDepart.get(org.getDm());
if (depart != null) {
person.setControlDepartId(depart.getInternalId());
person.setControlDepartName(depart.getInternalName());
person.setControlDepartType(DepartType.HUMAN.getType());
person.setControlTime(LocalDateTime.now());
person.setCreateTime(person.getControlTime());
}
}
}
List<RiskPersonal> toInsert1 = createInsertData(Default.WFR_TAG, wfrTmp, tmpMap, idCodeMap, orgCodeMap, orgIdMap, externalDepart);
List<RiskPersonal> toInsert2 = createInsertData(Default.SHR_TAG, shrTmp, tmpMap, idCodeMap, orgCodeMap, orgIdMap, externalDepart);
if (person.getIdCode() != null) {
shrMap.computeIfAbsent(person.getIdCode(), k -> new ArrayList<>()).add(ajjbxx);
}
personals.add(person);
}
}
for (GBaseWFRXX gBaseWFRXX : wxrList) {
GBaseAJJBXX ajjbxx = xxMap.get(gBaseWFRXX.getAjbh());
if (ajjbxx == null) {
continue;
}
GBaseSYRKXX rkxx = null;
if (gBaseWFRXX.getZjhm() != null) {
rkxx = idCodeMap.get(gBaseWFRXX.getZjhm());
}
if (gBaseWFRXX.getLxdh() != null && rkxx == null) {
List<GBaseSYRKXX> rkxxList = mobileMap.get(gBaseWFRXX.getLxdh());
if (rkxxList != null) {
rkxx = compare(rkxxList, gBaseWFRXX.getXm());
}
}
if (rkxx != null) {
RiskPersonal person = createPerson(Default.WFR_TAG, ajjbxx, rkxx);
if (rkxx.getSspcsdm() != null) {
PointOrg org = orgCodeMap.get(rkxx.getSspcsdm());
org = findOrg(org, orgIdMap);
if (org != null) {
SupExternalDepart depart = pointExternalDepart.get(org.getDm());
if (depart != null) {
person.setControlDepartId(depart.getInternalId());
person.setControlDepartName(depart.getInternalName());
person.setControlDepartType(DepartType.HUMAN.getType());
person.setControlTime(LocalDateTime.now());
person.setCreateTime(person.getControlTime());
}
}
}
shrMap.computeIfAbsent(person.getIdCode(), k -> new ArrayList<>()).add(ajjbxx);
personals.add(person);
}
}
for (RiskPersonal personal : personals) {
if (personal.getControlDepartType() != null && personal.getControlDepartType() >= DepartType.HUMAN.getType()) {
continue;
}
List<GBaseAJJBXX> tmp = shrMap.get(personal.getIdCode());
if (tmp == null || tmp.isEmpty()) {
continue;
}
GBaseAJJBXX jjx = null;
for (GBaseAJJBXX gBaseAJJBXX : tmp) {
if (jjx == null) {
jjx = gBaseAJJBXX;
continue;
}
try {
LocalDateTime time = gBaseAJJBXX.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
if (time.isAfter(jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())) {
jjx = gBaseAJJBXX;
}
} catch (Exception e) {
log.info("报警时间处理异常");
}
}
if (jjx == null || jjx.getBadwiddm() == null) {
personal.setControlDepartId(null);
personal.setControlDepartName(null);
personal.setControlTime(null);
personal.setControlDepartType(null);
continue;
}
PointOrg org = orgCodeMap.get(jjx.getBadwiddm());
org = findOrg(org, orgIdMap);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null);
if (depart == null) {
personal.setControlDepartId(null);
personal.setControlDepartName(null);
personal.setControlTime(null);
personal.setControlDepartType(null);
continue;
}
personal.setControlDepartId(depart.getInternalId());
personal.setControlDepartName(depart.getInternalName());
personal.setControlDepartType(DepartType.OTHER.getType());
// 如果有报警时间,暂时填报警时间 处理标签回正
try {
LocalDateTime time = jjx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
personal.setCreateTime(time);
personal.setControlTime(time);
} catch (Exception e) {
personal.setCreateTime(LocalDateTime.now());
log.info("报警时间处理异常");
}
}
log.info("人数: {}", personals.size());
riskPersonalService.formatAndSave(personals, Default.BIG_TAG_SHWFR);
log.info("违法人数: {}", toInsert1.size());
riskPersonalService.formatAndSave(toInsert1, Default.WFR_TAG);
log.info("受害人数: {}", toInsert2.size());
riskPersonalService.formatAndSave(toInsert2, Default.SHR_TAG);
}
private final RiskTaskRepository taskRepository;
@ -585,33 +412,75 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
return info;
}
RiskPersonal createPerson(String tag, GBaseAJJBXX ajjbxx, GBaseSYRKXX rkxx) {
RiskPersonal createPerson(WFSHPerson person, GBaseSYRKXX xx, String tag) {
RiskPersonal personal = new RiskPersonal();
personal.setIdCode(rkxx.getGmsfhm());
personal.setName(rkxx.getXm());
personal.setMobileNumber(rkxx.getLxdh());
personal.setControlDepartId(ajjbxx.getBadwiddm());
personal.setControlDepartName(ajjbxx.getBadwidmc());
personal.setGender(IdCodeUtil.idCard2Gender(rkxx.getGmsfhm()));
if (personal.getGender() == null) {
personal.setGender(rkxx.getXbdm());
}
personal.setControlDepartType(DepartType.OTHER.getType());
// 如果有报警时间,暂时填报警时间 处理标签回正
personal.setIdCode(person.getIdCode());
if (xx != null) {
personal.setName(xx.getXm());
personal.setMobileNumber(xx.getLxdh());
personal.setControlTime(LocalDateTime.now());
} else {
personal.setName(person.getName());
personal.setName(person.getMobile());
try {
LocalDateTime time = ajjbxx.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
personal.setCreateTime(time);
personal.setControlTime(time);
personal.setControlTime(person.getBarq().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
} catch (Exception e) {
personal.setCreateTime(LocalDateTime.now());
log.info("报警时间处理异常");
log.error("案件日期转换异常");
}
}
personal.setGender(IdCodeUtil.idCard2Gender(person.getIdCode()));
personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1));
// 这里暂时将小标签放到预览属性 处理标签回正
personal.setCreateTime(LocalDateTime.now());
personal.setTags(tag);
return personal;
}
List<RiskPersonal> createInsertData(String tag, List<WFSHPerson> list, Map<String, WFSHPerson> tmpMap, Map<String, GBaseSYRKXX> idCodeMap,
Map<String, PointOrg> orgCodeMap, Map<String, PointOrg> orgIdMap, Map<String, SupExternalDepart> externalDepart) {
Map<String, SupExternalDepart> departMap = new WeakHashMap<>();
Map<String, Byte[]> exist = new WeakHashMap<>();
List<RiskPersonal> toInsert = new ArrayList<>();
for (WFSHPerson person : list) {
if (exist.get(person.getIdCode()) != null) {
continue;
}
WFSHPerson result = tmpMap.get(person.getIdCode());
RiskPersonal personal;
String departId;
if (result != null) {
personal = createPerson(result, null, tag);
personal.setControlDepartType(DepartType.OTHER.getType());
departId = result.getDepartId();
} else {
GBaseSYRKXX xx = idCodeMap.get(person.getIdCode());
personal = createPerson(person, xx, tag);
personal.setControlDepartType(DepartType.HUMAN.getType());
departId = xx.getSspcsdm();
}
if (departId == null) {
toInsert.add(personal);
continue;
}
SupExternalDepart depart = departMap.get(departId);
if (depart == null) {
PointOrg org = orgCodeMap.get(departId);
org = findOrg(org, orgIdMap);
if (org != null) {
depart = externalDepart.get(org.getDm());
departMap.put(departId, depart);
}
}
if (depart != null) {
personal.setControlDepartId(depart.getInternalId());
personal.setControlDepartName(depart.getInternalName());
}
toInsert.add(personal);
exist.put(person.getIdCode(), new Byte[0]);
}
return toInsert;
}
PointOrg findOrg(PointOrg org, Map<String, PointOrg> orgIdMap) {
if (org == null) {
return null;

Loading…
Cancel
Save