Browse Source

fix--个人业务核对

master
buaixuexideshitongxue 1 month ago
parent
commit
583512ab04
  1. 11
      src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java
  2. 3
      src/main/java/com/biutag/supervision/service/BusinessDepartService.java
  3. 530
      src/main/java/com/biutag/supervision/service/BusinessPoliceService.java
  4. 28
      src/main/resources/mapper/BusinessPoliceMapper.xml
  5. 8
      src/main/resources/mapper/GBaseCJDMapper.xml

11
src/main/java/com/biutag/supervision/mapper/BusinessPoliceMapper.java

@ -1,6 +1,6 @@
package com.biutag.supervision.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -9,5 +9,12 @@ import com.biutag.supervision.pojo.model.BusinessPoliceModel;
import org.apache.ibatis.annotations.Param;
public interface BusinessPoliceMapper extends BaseMapper<BusinessPolice> {
Page<BusinessPoliceModel> queryPage(@Param("page") Page<BusinessPoliceModel> page, @Param(Constants.WRAPPER) QueryWrapper<BusinessPoliceModel> queryWrapper);
// Page<BusinessPoliceModel> queryPage(@Param("page") Page<BusinessPoliceModel> page, @Param(Constants.WRAPPER) QueryWrapper<BusinessPoliceModel> queryWrapper);
Page<BusinessPoliceModel> queryPage(Page<?> page,
@Param(Constants.WRAPPER) Wrapper<?> ew,
@Param("sortKey") String sortKey,
@Param("sortOrder") String sortOrder);
}

3
src/main/java/com/biutag/supervision/service/BusinessDepartService.java

@ -114,8 +114,7 @@ public class BusinessDepartService extends ServiceImpl<BusinessDepartMapper, Bus
}
// 1.1 情指行(JJD):externalId = gxdwdm
List<String> jjdExternalIds = gBaseJJDSList.stream().filter(Objects::nonNull).map(GBaseJJD::getGxdwdm).filter(StrUtil::isNotBlank).toList();
// 1.2 执法办案(CASE):SA 用 BADWIDdm,LA 用 LADWBMdm,PA 用 PADWBMdm
// 注意:这里 externalId 口径就是你明确的对齐规则,后续任何地方不要再随意换字段
// 1.2 执法办案(CASE):都用BADWIDdm
List<String> caseExternalIds = new ArrayList<>();
caseExternalIds.addAll(gBaseAJJBXXListSA.stream().filter(Objects::nonNull).map(GBaseAJJBXX::getBADWIDdm).filter(StrUtil::isNotBlank).toList());
caseExternalIds.addAll(gBaseAJJBXXListLA.stream().filter(Objects::nonNull).map(GBaseAJJBXX::getBADWIDdm).filter(StrUtil::isNotBlank).toList());

530
src/main/java/com/biutag/supervision/service/BusinessPoliceService.java

@ -7,10 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.supervision.mapper.*;
import com.biutag.supervision.pojo.entity.BusinessLog;
import com.biutag.supervision.pojo.entity.BusinessPolice;
import com.biutag.supervision.pojo.entity.GBaseAJJBXX;
import com.biutag.supervision.pojo.entity.GBaseCJD;
import com.biutag.supervision.pojo.entity.*;
import com.biutag.supervision.pojo.model.BusinessPoliceModel;
import com.biutag.supervision.pojo.param.BusinessQueryParam;
import lombok.RequiredArgsConstructor;
@ -23,9 +20,10 @@ import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
@Slf4j
@ -45,26 +43,27 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
private final SupExternalDepartMapper supExternalDepartMapper;
private final SupDepartMapper supDepartMapper;
private final StatisticsGroupService statisticsGroupService;
public Page<BusinessPoliceModel> page(BusinessQueryParam businessQueryParam) {
if (businessQueryParam.getDepartName()!=null && businessQueryParam.getDepartName().equals("开始导入今年所有的数据")) {
LocalDate start = LocalDate.parse("2024-01-01");
LocalDate end = LocalDate.parse("2024-12-25");
for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {
List<Date> happenTime = new ArrayList<>();
Date startDate = Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
Date endDate = Date.from(date.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());
happenTime.add(startDate);
happenTime.add(endDate);
generate(happenTime);
log.info("已经导入{}的个人数据", date.format(DateTimeFormatter.ofPattern("yyyy年M月d日")));
}
} else if (businessQueryParam.getDepartName() != null && businessQueryParam.getDepartName().equals("开始导入今天所有的数据")) {
List<Date> happenTime = new ArrayList<>();
Date start = Date.from(LocalDateTime.parse("2024-09-02T00:00:00", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant());
Date end = Date.from(LocalDateTime.parse("2024-10-14T09:59:59", DateTimeFormatter.ISO_DATE_TIME).atZone(ZoneId.systemDefault()).toInstant());
happenTime.add(start);
happenTime.add(end);
if ("测试导入".equals(businessQueryParam.getPoliceName()) && businessQueryParam.getHappenTime() != null && businessQueryParam.getHappenTime().size() == 2) {
Date startInput = businessQueryParam.getHappenTime().get(0);
Date endInput = businessQueryParam.getHappenTime().get(1);
ZoneId zoneId = ZoneId.systemDefault();
LocalDate startDate = startInput.toInstant().atZone(zoneId).toLocalDate();
LocalDateTime startOfDay = startDate.atStartOfDay();
LocalDate endDate = endInput.toInstant().atZone(zoneId).toLocalDate();
LocalDateTime endOfDay = endDate.atTime(LocalTime.MAX);
List<Date> happenTime = new ArrayList<>(2);
happenTime.add(Date.from(startOfDay.atZone(zoneId).toInstant()));
happenTime.add(Date.from(endOfDay.atZone(zoneId).toInstant()));
log.info("【个人业务-测试导入】归一化后时间范围=[{} ~ {}]", happenTime.get(0), happenTime.get(1));
generate(happenTime);
log.info("【个人业务-测试导入】导入执行完成");
}
String empNo = "";
if (businessQueryParam.getEmpNo() != null && !businessQueryParam.getEmpNo().isEmpty()) {
@ -74,13 +73,18 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
queryWrapper.like(StrUtil.isNotBlank(businessQueryParam.getPoliceName()), "police_name", businessQueryParam.getPoliceName())
.like(StrUtil.isNotBlank(empNo), "emp_no", empNo)
.like(StrUtil.isNotBlank(businessQueryParam.getDepartName()), "depart_name", businessQueryParam.getDepartName())
.eq(StrUtil.isNotBlank(businessQueryParam.getGroupName()), "group_name", businessQueryParam.getGroupName())
.groupBy("police_name")
.orderBy(StrUtil.isNotBlank(businessQueryParam.getSortField()), businessQueryParam.getSortOrder().equals("ASC"), businessQueryParam.getSortField());
.eq(StrUtil.isNotBlank(businessQueryParam.getGroupName()), "group_name", businessQueryParam.getGroupName());
// .groupBy("police_name")
// .orderBy(StrUtil.isNotBlank(businessQueryParam.getSortField()), businessQueryParam.getSortOrder().equals("ASC"), businessQueryParam.getSortField());
if (businessQueryParam.getHappenTime().size() == 2) {
queryWrapper.between("date", businessQueryParam.getHappenTime().get(0), businessQueryParam.getHappenTime().get(1));
}
return baseMapper.queryPage(Page.of(businessQueryParam.getCurrent(), businessQueryParam.getSize()), queryWrapper);
return baseMapper.queryPage(
Page.of(businessQueryParam.getCurrent(), businessQueryParam.getSize()),
queryWrapper,
businessQueryParam.getSortField(),
businessQueryParam.getSortOrder()
);
}
public void generate(List<Date> happenTime) {
@ -101,45 +105,74 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
Map<String, GBaseAJJBXX> gBaseAJJBXXMapPR = new HashMap<>();
// 生成案件信息的映射
generateAJJBXXMap(zfbaresult, gBaseAJJBXXMapSR, gBaseAJJBXXMapLR, gBaseAJJBXXMapPR);
List<String> departIds = new ArrayList<>();
// 生成管辖单位代码
generateDepartIds(gBaseCJDSList, departIds, zfbaresult);
if (departIds.isEmpty()) {
return;
}
// 通过管辖单位代码从数据库中获取单位 ID 和内部 ID和 内部名字
List<Map<String, Object>> idsByDepartIds = supExternalDepartMapper.getIdsByDepartIds(departIds);// 430100221100-1011
Map<String, String> resultMap2 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap(
map -> (String) map.get("external_id"),
map -> map.get("internal_id") == null ? "" : (String) map.get("internal_id")
));
List<String> values = resultMap2.values().stream().filter(Objects::nonNull).toList();// 1011
Map<String, String> resultMap3 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap(
map -> (String) map.get("external_id"),
map -> map.get("internal_short_name") == null ? "" : (String) map.get("internal_short_name")
));
List<Map<String, Object>> resultList = statisticsDepartMapper.getGroupIdsByDepartIds(values);
Map<String, Long> resultMap = resultList.stream().collect(Collectors.toMap(
map -> (String) map.get("departId"),
map -> (Long) map.get("groupId")
));
List<Long> groupIds = new ArrayList<>();
generateBusinessPoliceList(happenTime, gBaseCJDSList, resultMap, resultMap2, resultMap3, groupIds, businessPoliceList, gBaseAJJBXXMapSR, gBaseAJJBXXMapLR, gBaseAJJBXXMapPR);
List<Map<Long, Object>> nameList = statisticsGroupMapper.getNameByGroupIds(groupIds);
Map<Long, String> names = nameList.stream().collect(Collectors.toMap(
map -> (Long) map.get("groupId"),
map -> (String) map.get("name")
));
for (BusinessPolice businessPolice : businessPoliceList) {
businessPolice.setGroupName(names.get(businessPolice.getGroupId()));
businessPolice.setCreateTime(LocalDateTime.now());
List<String> qzxExternalIds = gBaseCJDSList.stream()
.filter(Objects::nonNull)
.map(GBaseCJD::getCjdxssdwdm)
.filter(StrUtil::isNotBlank)
.toList();
List<String> zfbaExternalIds = new ArrayList<>();
zfbaExternalIds.addAll(gBaseAJJBXXMapSR.values().stream().map(GBaseAJJBXX::getBADWIDdm).filter(StrUtil::isNotBlank).toList());
zfbaExternalIds.addAll(gBaseAJJBXXMapLR.values().stream().map(GBaseAJJBXX::getBADWIDdm).filter(StrUtil::isNotBlank).toList());
zfbaExternalIds.addAll(gBaseAJJBXXMapPR.values().stream().map(GBaseAJJBXX::getBADWIDdm).filter(StrUtil::isNotBlank).toList());
DepartMapping qzxMapping = buildMapping(qzxExternalIds, "情指行");
DepartMapping zfbaMapping = buildMapping(zfbaExternalIds, "执法办案");
appendCjdBusiness(businessPoliceList, gBaseCJDSList, qzxMapping);
appendZfbaBusiness(businessPoliceList, gBaseAJJBXXMapSR.values(), zfbaMapping, 4);
appendZfbaBusiness(businessPoliceList, gBaseAJJBXXMapLR.values(), zfbaMapping, 5);
appendZfbaBusiness(businessPoliceList, gBaseAJJBXXMapPR.values(), zfbaMapping, 6);
Map<String, StatisticsGroup> groupMap = statisticsGroupService.groupIdMap();
for (BusinessPolice bp : businessPoliceList) {
StatisticsGroup g = groupMap.get(String.valueOf(bp.getGroupId()));
bp.setGroupName(g != null ? g.getName() : null);
bp.setCreateTime(LocalDateTime.now());
}
log.info("个人业务数据准备插入:{}", businessPoliceList.size());
List<BatchResult> insert = baseMapper.insert(businessPoliceList);
log.info("个人业务数据插入成功");
int actualNum = (int) Arrays.stream(insert.get(0).getUpdateCounts()).parallel().filter(num -> num != 0).count();
businessLogMapper.insert(new BusinessLog().setType("个人业务数据").setNum(gBaseCJDSList.size()).setActualNum(actualNum).setCreateTime(LocalDateTime.now()));
businessLogMapper.insert(new BusinessLog().setType("个人业务数据").setNum(businessPoliceList.size()).setActualNum(actualNum).setCreateTime(LocalDateTime.now()));
// List<String> departIds = new ArrayList<>();
// // 生成管辖单位代码
// generateDepartIds(gBaseCJDSList, departIds, zfbaresult);
// if (departIds.isEmpty()) {
// return;
// }
// // 通过管辖单位代码从数据库中获取单位 ID 和内部 ID和 内部名字
// List<Map<String, Object>> idsByDepartIds = supExternalDepartMapper.getIdsByDepartIds(departIds);// 430100221100-1011
// Map<String, String> resultMap2 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap(
// map -> (String) map.get("external_id"),
// map -> map.get("internal_id") == null ? "" : (String) map.get("internal_id")
// ));
// List<String> values = resultMap2.values().stream().filter(Objects::nonNull).toList();// 1011
// Map<String, String> resultMap3 = idsByDepartIds.stream().filter(map -> map.get("external_id") != null).collect(Collectors.toMap(
// map -> (String) map.get("external_id"),
// map -> map.get("internal_short_name") == null ? "" : (String) map.get("internal_short_name")
// ));
// List<Map<String, Object>> resultList = statisticsDepartMapper.getGroupIdsByDepartIds(values);
// Map<String, Long> resultMap = resultList.stream().collect(Collectors.toMap(
// map -> (String) map.get("departId"),
// map -> (Long) map.get("groupId")
// ));
// List<Long> groupIds = new ArrayList<>();
//
// generateBusinessPoliceList(happenTime, gBaseCJDSList, resultMap, resultMap2, resultMap3, groupIds, businessPoliceList, gBaseAJJBXXMapSR, gBaseAJJBXXMapLR, gBaseAJJBXXMapPR);
// List<Map<Long, Object>> nameList = statisticsGroupMapper.getNameByGroupIds(groupIds);
// Map<Long, String> names = nameList.stream().collect(Collectors.toMap(
// map -> (Long) map.get("groupId"),
// map -> (String) map.get("name")
// ));
// for (BusinessPolice businessPolice : businessPoliceList) {
// businessPolice.setGroupName(names.get(businessPolice.getGroupId()));
// businessPolice.setCreateTime(LocalDateTime.now());
// }
// log.info("个人业务数据准备插入:{}", businessPoliceList.size());
// List<BatchResult> insert = baseMapper.insert(businessPoliceList);
// log.info("个人业务数据插入成功");
// int actualNum = (int) Arrays.stream(insert.get(0).getUpdateCounts()).parallel().filter(num -> num != 0).count();
// businessLogMapper.insert(new BusinessLog().setType("个人业务数据").setNum(gBaseCJDSList.size()).setActualNum(actualNum).setCreateTime(LocalDateTime.now()));
}
private static void generateBusinessPoliceList(List<Date> happenTime, List<GBaseCJD> gBaseCJDSList, Map<String, Long> resultMap, Map<String, String> resultMap2, Map<String, String> resultMap3, List<Long> groupIds, List<BusinessPolice> businessPoliceList, Map<String, GBaseAJJBXX> gBaseAJJBXXMapSR, Map<String, GBaseAJJBXX> gBaseAJJBXXMapLR, Map<String, GBaseAJJBXX> gBaseAJJBXXMapPR) {
@ -205,157 +238,55 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
}
private static void generateAJJBXXMap(ZFBAResult zfbaresult, Map<String, GBaseAJJBXX> gBaseAJJBXXMapSR, Map<String, GBaseAJJBXX> gBaseAJJBXXMapLR, Map<String, GBaseAJJBXX> gBaseAJJBXXMapPR) {
for (Map<String, Object> bar : zfbaresult.bar1()) {
if (bar.get("BAR1ID") == null) {
continue;
}
if (gBaseAJJBXXMapSR.containsKey((String)bar.get("BAR1ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapSR.get((String) bar.get("BAR1ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR1ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
for (Map<String, Object> bar : zfbaresult.bar2()) {
if (bar.get("BAR2ID") == null) {
continue;
}
if (gBaseAJJBXXMapSR.containsKey((String)bar.get("BAR2ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapSR.get((String) bar.get("BAR2ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR2ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapSR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
for (Map<String, Object> bar : zfbaresult.bar3()) {
if (bar.get("BAR1ID") == null) {
continue;
}
if (gBaseAJJBXXMapLR.containsKey((String)bar.get("BAR1ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapLR.get((String) bar.get("BAR1ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR1ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
for (Map<String, Object> bar : zfbaresult.bar4()) {
if (bar.get("BAR2ID") == null) {
continue;
}
if (gBaseAJJBXXMapLR.containsKey((String)bar.get("BAR2ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapLR.get((String) bar.get("BAR2ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR2ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapLR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
for (Map<String, Object> bar : zfbaresult.bar5()) {
if (bar.get("BAR1ID") == null) {
continue;
}
if (gBaseAJJBXXMapPR.containsKey((String)bar.get("BAR1ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapPR.get((String) bar.get("BAR1ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR1ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
for (Map<String, Object> bar : zfbaresult.bar6()) {
if (bar.get("BAR2ID") == null) {
continue;
}
if (gBaseAJJBXXMapPR.containsKey((String)bar.get("BAR2ID"))) {
GBaseAJJBXX gBaseAJJBXX = gBaseAJJBXXMapPR.get((String) bar.get("BAR2ID"));
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID((String)bar.get("BAR2ID"));
gBaseAJJBXX.setBADWIDdm((String)bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String)bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String)bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String)bar.get("JH"));
gBaseAJJBXXMapPR.put(gBaseAJJBXX.getBARID(), gBaseAJJBXX);
}
}
// 受案:bar1(BAR1ID) + bar2(BAR2ID) → SLRQ
mergeZfbaBars(zfbaresult.bar1(), "BAR1ID", gBaseAJJBXXMapSR, GBaseAJJBXX::setSLRQ);
mergeZfbaBars(zfbaresult.bar2(), "BAR2ID", gBaseAJJBXXMapSR, GBaseAJJBXX::setSLRQ);
// 立案:bar3(BAR1ID) + bar4(BAR2ID) → LARQ
mergeZfbaBars(zfbaresult.bar3(), "BAR1ID", gBaseAJJBXXMapLR, GBaseAJJBXX::setLARQ);
mergeZfbaBars(zfbaresult.bar4(), "BAR2ID", gBaseAJJBXXMapLR, GBaseAJJBXX::setLARQ);
// 破案:bar5(BAR1ID) + bar6(BAR2ID) → PARQ
mergeZfbaBars(zfbaresult.bar5(), "BAR1ID", gBaseAJJBXXMapPR, GBaseAJJBXX::setPARQ);
mergeZfbaBars(zfbaresult.bar6(), "BAR2ID", gBaseAJJBXXMapPR, GBaseAJJBXX::setPARQ);
}
private ZFBAResult getZfbaResult(List<Date> happenTime) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 4:受案
List<Map<String, Object>> bar1 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
List<Map<String, Object>> bar1 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.SLRQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " +
"WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar2 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR1ID IS NOT NULL " +
"GROUP BY DATE(a.SLRQ), a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar2 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.SLRQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " +
"WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
"WHERE a.SLRQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR2ID IS NOT NULL " +
"GROUP BY DATE(a.SLRQ), a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
// 5:立案
List<Map<String, Object>> bar3 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
List<Map<String, Object>> bar3 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.LARQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " +
"WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar4 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR1ID IS NOT NULL " +
"GROUP BY DATE(a.LARQ), a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar4 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.LARQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " +
"WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
"WHERE a.LARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR2ID IS NOT NULL " +
"GROUP BY DATE(a.LARQ), a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
// 6:破案
List<Map<String, Object>> bar5 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR1ID) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
List<Map<String, Object>> bar5 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.PARQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR1ID = b.ZJ " +
"WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar6 = modelClueDataMapper.selectByUniqueKeys("select COUNT(a.BAR2ID) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR1ID IS NOT NULL " +
"GROUP BY DATE(a.PARQ), a.BAR1ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
List<Map<String, Object>> bar6 = modelClueDataMapper.selectByUniqueKeys("select CAST(DATE(a.PARQ) AS DATETIME) AS statDate, COUNT(1) as num, a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH " +
"FROM dwd_asj_zfba_ajjbxx a " +
"LEFT JOIN dwd_ry_zfba_baryxx b ON a.BAR2ID = b.ZJ " +
"WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 " +
"GROUP BY a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
"WHERE a.PARQ BETWEEN '" + formatter.format(happenTime.get(0)) + "' AND '" + formatter.format(happenTime.get(1)) + "' AND a.AJBZdm !=3 AND a.BAR2ID IS NOT NULL " +
"GROUP BY DATE(a.PARQ), a.BAR2ID, a.BADWIDdm, a.BADWIDmc, b.XM, b.JH;");
ZFBAResult zfbaresult = new ZFBAResult(bar1, bar2, bar3, bar4, bar5, bar6);
return zfbaresult;
}
@ -414,7 +345,7 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
queryWrapper.eq("cjfsdm", "6");
queryWrapper.isNotNull("cjdxdm");
queryWrapper.between("cjsj", happenTime.get(0), happenTime.get(1));
queryWrapper.groupBy("cjdxname", "cjdxdm", "cjdxssdwdm", "cjdxssdwmc");
queryWrapper.groupBy("DATE(cjsj)","cjdxname", "cjdxdm", "cjdxssdwdm", "cjdxssdwmc");
return gBaseCJDMapper.selectCJDList(queryWrapper);
}
@ -440,4 +371,215 @@ public class BusinessPoliceService extends ServiceImpl<BusinessPoliceMapper, Bus
}
private static void mergeZfbaBars(List<Map<String, Object>> rows, String barIdKey, Map<String, GBaseAJJBXX> targetMap, BiConsumer<GBaseAJJBXX, Date> dateSetter
) {
if (rows == null || rows.isEmpty()) return;
for (Map<String, Object> bar : rows) {
if (bar.get(barIdKey) == null) {
continue;
}
Date statDate = (Date) bar.get("statDate");
String barId = (String) bar.get(barIdKey);
String key = statDate.getTime() + "_" + barId;
if (targetMap.containsKey(key)) {
GBaseAJJBXX gBaseAJJBXX = targetMap.get(key);
gBaseAJJBXX.setBARNum(gBaseAJJBXX.getBARNum() + Math.toIntExact((Long) bar.get("num")));
} else {
GBaseAJJBXX gBaseAJJBXX = new GBaseAJJBXX();
gBaseAJJBXX.setBARID(barId);
dateSetter.accept(gBaseAJJBXX, statDate);
gBaseAJJBXX.setBADWIDdm((String) bar.get("BADWIDdm"));
gBaseAJJBXX.setBADWIDmc((String) bar.get("BADWIDmc"));
gBaseAJJBXX.setXM((String) bar.get("XM"));
gBaseAJJBXX.setBARNum(Math.toIntExact((Long) bar.get("num")));
gBaseAJJBXX.setJH((String) bar.get("JH"));
targetMap.put(key, gBaseAJJBXX);
}
}
}
private DepartMapping buildMapping(Collection<String> externalIds, String source) {
if (externalIds == null || externalIds.isEmpty()) {
return new DepartMapping(Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap());
}
List<String> distinctExternalIds = externalIds.stream()
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (distinctExternalIds.isEmpty()) {
return new DepartMapping(Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap());
}
List<Map<String, Object>> rows = supExternalDepartMapper.getIdsByExternalIdsAndSource(distinctExternalIds, source);
Map<String, String> externalToInternalId = (rows == null ? Collections.<Map<String, Object>>emptyList() : rows)
.stream()
.filter(m -> m != null && m.get("external_id") != null)
.collect(Collectors.toMap(
m -> String.valueOf(m.get("external_id")),
m -> m.get("internal_id") == null ? null : String.valueOf(m.get("internal_id")),
(a, b) -> StrUtil.isNotBlank(a) ? a : b
));
Map<String, String> externalToInternalShortName = (rows == null ? Collections.<Map<String, Object>>emptyList() : rows)
.stream()
.filter(m -> m != null && m.get("external_id") != null)
.collect(Collectors.toMap(
m -> String.valueOf(m.get("external_id")),
m -> m.get("internal_short_name") == null ? null : String.valueOf(m.get("internal_short_name")),
(a, b) -> StrUtil.isNotBlank(a) ? a : b
));
List<String> internalIds = externalToInternalId.values().stream()
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (internalIds.isEmpty()) {
return new DepartMapping(externalToInternalId, externalToInternalShortName, Collections.emptyMap());
}
List<Map<String, Object>> groupRows = supDepartMapper.getGroupIdsByDepartIds(internalIds);
Map<String, Long> internalIdToGroupId = (groupRows == null ? Collections.<Map<String, Object>>emptyList() : groupRows)
.stream()
.filter(m -> m != null && m.get("departId") != null && m.get("groupId") != null)
.collect(Collectors.toMap(
m -> String.valueOf(m.get("departId")),
m -> ((Number) m.get("groupId")).longValue(),
(a, b) -> a
));
return new DepartMapping(externalToInternalId, externalToInternalShortName, internalIdToGroupId);
}
public static class DepartMapping {
private final Map<String, String> externalToInternalId;
private final Map<String, String> externalToInternalShortName;
private final Map<String, Long> internalIdToGroupId;
private DepartMapping(Map<String, String> externalToInternalId,
Map<String, String> externalToInternalShortName,
Map<String, Long> internalIdToGroupId) {
this.externalToInternalId = externalToInternalId;
this.externalToInternalShortName = externalToInternalShortName;
this.internalIdToGroupId = internalIdToGroupId;
}
public Long resolveGroupId(String externalId) {
if (StrUtil.isBlank(externalId)) return null;
String internalId = externalToInternalId.get(externalId);
if (StrUtil.isBlank(internalId)) return null;
return internalIdToGroupId.get(internalId);
}
public String resolveInternalId(String externalId) {
return StrUtil.isBlank(externalId) ? null : externalToInternalId.get(externalId);
}
public String resolveInternalShortName(String externalId) {
return StrUtil.isBlank(externalId) ? null : externalToInternalShortName.get(externalId);
}
public Set<String> mappedExternalIds() {
return externalToInternalId.keySet();
}
}
private void appendCjdBusiness(List<BusinessPolice> out,
List<GBaseCJD> list,
DepartMapping mapping) {
if (out == null || list == null || list.isEmpty()) return;
for (GBaseCJD cjd : list) {
if (cjd == null) continue;
String externalId = cjd.getCjdxssdwdm();
if (StrUtil.isBlank(externalId)) continue;
Long groupId = mapping.resolveGroupId(externalId);
if (groupId == null) continue;
BusinessPolice bp = new BusinessPolice();
bp.setDate(cjd.getCjsj());
bp.setDepartId(mapping.resolveInternalId(externalId));
bp.setDepartName(mapping.resolveInternalShortName(externalId));
bp.setGroupId(groupId);
bp.setNumber(cjd.getCjdxdmTotal());
bp.setPoliceName(cjd.getCjdxname());
bp.setEmpNo(cjd.getCjdxdm());
bp.setPoliceIdCode(hashConcatenatedStrings(bp.getPoliceName(), bp.getEmpNo()));
if (groupId == 10L) {
bp.setBusinessType("1");
bp.setBusinessTypeName("110接处警");
} else if (groupId == 11L) {
bp.setBusinessType("2");
bp.setBusinessTypeName("122接处警");
} else {
continue;
}
out.add(bp);
}
}
private void appendZfbaBusiness(List<BusinessPolice> out,
Collection<GBaseAJJBXX> list,
DepartMapping mapping,
int type /* 4/5/6 */) {
if (out == null || list == null || list.isEmpty()) return;
for (GBaseAJJBXX a : list) {
if (a == null) continue;
String externalId = a.getBADWIDdm();
if (StrUtil.isBlank(externalId)) continue;
Long groupId = mapping.resolveGroupId(externalId);
if (groupId == null) continue;
BusinessPolice bp = new BusinessPolice();
// ✅ date 按类型取你聚合出来的当天
if (type == 4) {
bp.setDate(a.getSLRQ());
bp.setBusinessType("4");
bp.setBusinessTypeName("执法办案(受案)");
} else if (type == 5) {
bp.setDate(a.getLARQ());
bp.setBusinessType("5");
bp.setBusinessTypeName("执法办案(立案)");
} else if (type == 6) {
bp.setDate(a.getPARQ());
bp.setBusinessType("6");
bp.setBusinessTypeName("执法办案(破案)");
} else {
continue;
}
bp.setDepartId(mapping.resolveInternalId(externalId));
bp.setDepartName(mapping.resolveInternalShortName(externalId));
bp.setGroupId(groupId);
bp.setNumber(a.getBARNum());
bp.setPoliceName(a.getXM());
bp.setEmpNo(a.getJH());
bp.setPoliceIdCode(hashConcatenatedStrings(bp.getPoliceName(), bp.getEmpNo()));
out.add(bp);
}
}
}

28
src/main/resources/mapper/BusinessPoliceMapper.xml

@ -18,7 +18,35 @@
SUM(CASE WHEN business_type = 10 THEN number ELSE 0 END) AS jiashirenkaoshi
from business_police
${ew.getCustomSqlSegment}
GROUP BY police_name, emp_no, depart_name, group_name
<choose>
<when test="sortKey == 'police_name'"> ORDER BY police_name </when>
<when test="sortKey == 'emp_no'"> ORDER BY emp_no </when>
<when test="sortKey == 'depart_name'"> ORDER BY depart_name </when>
<when test="sortKey == 'group_name'"> ORDER BY group_name </when>
<when test="sortKey == 'jiechujing110'"> ORDER BY jiechujing110 </when>
<when test="sortKey == 'jiechujing122'"> ORDER BY jiechujing122 </when>
<when test="sortKey == 'shenfenzhengyewu'"> ORDER BY shenfenzhengyewu </when>
<when test="sortKey == 'zhifabananSA'"> ORDER BY zhifabananSA </when>
<when test="sortKey == 'zhifabananLA'"> ORDER BY zhifabananLA </when>
<when test="sortKey == 'zhifabananPA'"> ORDER BY zhifabananPA </when>
<when test="sortKey == 'hukouyewu'"> ORDER BY hukouyewu </when>
<when test="sortKey == 'churujingyewu'"> ORDER BY churujingyewu </when>
<when test="sortKey == 'cheliangshangpai'"> ORDER BY cheliangshangpai </when>
<when test="sortKey == 'jiashirenkaoshi'"> ORDER BY jiashirenkaoshi </when>
<otherwise> ORDER BY jiechujing110 </otherwise>
</choose>
<choose>
<when test="sortOrder != null and (sortOrder == 'ASC' or sortOrder == 'asc')"> ASC </when>
<otherwise> DESC </otherwise>
</choose>
</select>
</mapper>

8
src/main/resources/mapper/GBaseCJDMapper.xml

@ -5,7 +5,13 @@
<mapper namespace="com.biutag.supervision.mapper.GBaseCJDMapper">
<select id="selectCJDList" resultType="com.biutag.supervision.pojo.entity.GBaseCJD">
select count( DISTINCT jjdbh ) as cjdxdmTotal, cjdxname, cjdxdm, cjdxssdwdm, cjdxssdwmc
select
CAST(DATE(cjsj) AS DATETIME) as cjsj,
count( DISTINCT jjdbh ) as cjdxdmTotal,
cjdxname,
cjdxdm,
cjdxssdwdm,
cjdxssdwmc
from dwd_asj_zhtx_cjd
${ew.getCustomSqlSegment}
</select>

Loading…
Cancel
Save