|
|
|
@ -5,35 +5,31 @@ import cn.hutool.core.date.LocalDateTimeUtil; |
|
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
|
import com.beust.ah.A; |
|
|
|
|
import digital.laboratory.platform.common.core.exception.CheckedException; |
|
|
|
|
import digital.laboratory.platform.common.core.util.R; |
|
|
|
|
import digital.laboratory.platform.common.mybatis.security.service.DLPUser; |
|
|
|
|
import digital.laboratory.platform.entrustment.convert.DrugLiteConvert; |
|
|
|
|
import digital.laboratory.platform.entrustment.convert.EntrustMaterialCheckoutResultConvert; |
|
|
|
|
import digital.laboratory.platform.entrustment.dto.CheckoutResultExcelDTO; |
|
|
|
|
import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO; |
|
|
|
|
import digital.laboratory.platform.entrustment.dto.ResultExcelDTO; |
|
|
|
|
import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult; |
|
|
|
|
import digital.laboratory.platform.entrustment.entity.Entrustment; |
|
|
|
|
import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial; |
|
|
|
|
import digital.laboratory.platform.entrustment.entity.*; |
|
|
|
|
import digital.laboratory.platform.entrustment.enums.EntrustStatusConstants; |
|
|
|
|
import digital.laboratory.platform.entrustment.mapper.EntrustMaterialCheckoutResultMapper; |
|
|
|
|
import digital.laboratory.platform.entrustment.mapper.EntrustmentIdentificationMaterialMapper; |
|
|
|
|
import digital.laboratory.platform.entrustment.query.EntrustMaterialCheckoutResultQuery; |
|
|
|
|
import digital.laboratory.platform.entrustment.service.CommonFeignService; |
|
|
|
|
import digital.laboratory.platform.entrustment.service.EntrustMaterialCheckoutResultService; |
|
|
|
|
import digital.laboratory.platform.entrustment.service.EntrustmentIdentificationMaterialService; |
|
|
|
|
import digital.laboratory.platform.entrustment.service.EntrustmentService; |
|
|
|
|
import digital.laboratory.platform.entrustment.service.*; |
|
|
|
|
import digital.laboratory.platform.entrustment.vo.DetectionRateVO; |
|
|
|
|
import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO; |
|
|
|
|
import digital.laboratory.platform.entrustment.vo.EntrustmentIdentificationMaterialVO; |
|
|
|
|
import digital.laboratory.platform.entrustment.vo.SuspectDetectionVO; |
|
|
|
|
import digital.laboratory.platform.sys.entity.Area; |
|
|
|
|
import digital.laboratory.platform.sys.entity.DrugLite; |
|
|
|
|
import org.apache.poi.ss.usermodel.Cell; |
|
|
|
|
import org.apache.poi.ss.usermodel.Row; |
|
|
|
|
import org.apache.poi.ss.usermodel.Sheet; |
|
|
|
|
import org.apache.poi.ss.usermodel.Workbook; |
|
|
|
@ -47,6 +43,7 @@ import java.io.IOException; |
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.math.RoundingMode; |
|
|
|
|
import java.net.URLEncoder; |
|
|
|
|
import java.sql.*; |
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
|
import java.util.*; |
|
|
|
@ -74,6 +71,12 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl<Entrus |
|
|
|
|
@Resource |
|
|
|
|
private EntrustmentIdentificationMaterialMapper entrustmentIdentificationMaterialMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private SuspectService suspectService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private CaseEventService caseEventService; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 构建委托材料检验结果字符串 |
|
|
|
|
* |
|
|
|
@ -776,6 +779,7 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl<Entrus |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("获取结果数据失败: ", e); |
|
|
|
|
|
|
|
|
|
return Collections.emptyMap(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1018,6 +1022,272 @@ public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl<Entrus |
|
|
|
|
// return entrusts.size();
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean pushSuspectDetectionResult(String entrustmentId, DLPUser user) { |
|
|
|
|
// 参数校验
|
|
|
|
|
if (StringUtils.isBlank(entrustmentId)) { |
|
|
|
|
throw new IllegalArgumentException("entrustmentId不能为空"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 获取委托信息
|
|
|
|
|
Entrustment entrustment = entrustmentService.getById(entrustmentId); |
|
|
|
|
if (entrustment == null) { |
|
|
|
|
throw new IllegalArgumentException("未找到委托信息:" + entrustmentId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 获取案件信息
|
|
|
|
|
CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId()); |
|
|
|
|
if (caseEvent == null) { |
|
|
|
|
throw new IllegalArgumentException("未找到案件信息:" + entrustment.getCaseId()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 获取检验结果
|
|
|
|
|
List<EntrustMaterialCheckoutResult> results = this.lambdaQuery() |
|
|
|
|
.eq(EntrustMaterialCheckoutResult::getEntrustId, entrustmentId) |
|
|
|
|
.isNotNull(EntrustMaterialCheckoutResult::getQualitativeResult) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(results)){ |
|
|
|
|
throw new IllegalArgumentException("没有阳性的检验结果:" + entrustmentId+",无需进行推送!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 获取嫌疑人信息
|
|
|
|
|
List<Suspect> suspects = suspectService.lambdaQuery() |
|
|
|
|
.eq(Suspect::getEntrustId, entrustmentId) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(suspects)){ |
|
|
|
|
throw new IllegalArgumentException("未找到嫌疑人信息:" + entrustmentId+",请先添加嫌疑人信息!"); |
|
|
|
|
} |
|
|
|
|
// 构造物证材料映射
|
|
|
|
|
Map<String, EntrustmentIdentificationMaterial> materialMap = entrustmentIdentificationMaterialService.lambdaQuery() |
|
|
|
|
.eq(EntrustmentIdentificationMaterial::getEntrustmentId, entrustmentId) |
|
|
|
|
.orderByAsc(EntrustmentIdentificationMaterial::getOrderNo) |
|
|
|
|
.list() |
|
|
|
|
.stream() |
|
|
|
|
.collect(Collectors.toMap(EntrustmentIdentificationMaterial::getId, Function.identity(), (a, b) -> a)); |
|
|
|
|
|
|
|
|
|
// 构造检验结果VO
|
|
|
|
|
List<EntrustMaterialCheckoutResultVO> resultVOS = results.stream() |
|
|
|
|
.map(r -> buildResultVO(r, materialMap)) |
|
|
|
|
.sorted(Comparator.comparingInt(EntrustMaterialCheckoutResultVO::getOrderNo)) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 数据推送至目标数据库
|
|
|
|
|
return pushToDatabase(suspects, resultVOS, entrustment, caseEvent, user); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private EntrustMaterialCheckoutResultVO buildResultVO(EntrustMaterialCheckoutResult result, Map<String, EntrustmentIdentificationMaterial> materialMap) { |
|
|
|
|
EntrustMaterialCheckoutResultVO vo = new EntrustMaterialCheckoutResultVO(); |
|
|
|
|
BeanUtils.copyProperties(result, vo); |
|
|
|
|
|
|
|
|
|
EntrustmentIdentificationMaterial material = materialMap.get(result.getId()); |
|
|
|
|
if (material != null) { |
|
|
|
|
vo.setName(material.getName()); |
|
|
|
|
vo.setOrderNo(material.getOrderNo()); |
|
|
|
|
vo.setForm(material.getForm()); |
|
|
|
|
vo.setDrawTime(material.getDrawTime()); |
|
|
|
|
vo.setDrawPlace(material.getDrawPlace()); |
|
|
|
|
vo.setAcceptNo(material.getAcceptNo()); |
|
|
|
|
} |
|
|
|
|
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); |
|
|
|
|
System.out.println("结果的毒品列表:"+result.getQualitativeResult()); |
|
|
|
|
|
|
|
|
|
vo.setQualitativeResult( |
|
|
|
|
DrugLiteConvert.getDrugLites(result.getQualitativeResult()) |
|
|
|
|
.stream().map(DrugLite::getName) |
|
|
|
|
.collect(Collectors.joining("、")) |
|
|
|
|
); |
|
|
|
|
return vo; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private SuspectDetectionVO buildSuspectVO(Suspect suspect, CaseEvent caseEvent, Entrustment entrustment, List<EntrustMaterialCheckoutResultVO> resultVOS, DLPUser user) { |
|
|
|
|
SuspectDetectionVO vo = new SuspectDetectionVO(); |
|
|
|
|
BeanUtils.copyProperties(suspect, vo); |
|
|
|
|
vo.setCaseName(caseEvent.getCaseName()); |
|
|
|
|
vo.setCaseBrief(caseEvent.getCaseBrief()); |
|
|
|
|
vo.setHappenTime(caseEvent.getHappenTime()); |
|
|
|
|
vo.setPushTime(LocalDateTime.now()); |
|
|
|
|
vo.setAcceptNo(entrustment.getAcceptNo()); |
|
|
|
|
vo.setResults(resultVOS); |
|
|
|
|
return vo; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
地址:83.103.24.236 |
|
|
|
|
端口:43306 |
|
|
|
|
数据库:znyp |
|
|
|
|
数据库账号:wsjc |
|
|
|
|
密码:wsjc9985 |
|
|
|
|
*/ |
|
|
|
|
private boolean pushToDatabase(List<Suspect> suspects, List<EntrustMaterialCheckoutResultVO> resultVOS, Entrustment entrustment, CaseEvent caseEvent, DLPUser user) { |
|
|
|
|
String url = "jdbc:mysql://localhost:3306/dlp_inspection?characterEncoding=utf8&serverTimezone=Asia/Shanghai"; |
|
|
|
|
String username = "root"; |
|
|
|
|
String password = "123456"; |
|
|
|
|
|
|
|
|
|
try (Connection connection = DriverManager.getConnection(url, username, password)) { |
|
|
|
|
|
|
|
|
|
// 推送嫌疑人信息
|
|
|
|
|
String sql1 = "INSERT INTO b_suspect (id, name, id_number, phone_number, sex, age, accept_no, order_no, case_name, case_brief, happen_time, push_time, push_user, accept_time,client_org_name) " + |
|
|
|
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " + |
|
|
|
|
"ON DUPLICATE KEY UPDATE name=VALUES(name), id_number=VALUES(id_number), phone_number=VALUES(phone_number), " + |
|
|
|
|
"sex=VALUES(sex), age=VALUES(age), accept_no=VALUES(accept_no), order_no=VALUES(order_no), case_name=VALUES(case_name), " + |
|
|
|
|
"case_brief=VALUES(case_brief), happen_time=VALUES(happen_time), push_time=VALUES(push_time), push_user=VALUES(push_user), " + |
|
|
|
|
"accept_time=VALUES(accept_time) , client_org_name = VALUES(client_org_name)"; |
|
|
|
|
|
|
|
|
|
try (PreparedStatement pstmt = connection.prepareStatement(sql1)) { |
|
|
|
|
for (Suspect s : suspects) { |
|
|
|
|
pstmt.setString(1, s.getId()); |
|
|
|
|
pstmt.setString(2, s.getName()); |
|
|
|
|
pstmt.setString(3, s.getIdNumber()); |
|
|
|
|
pstmt.setString(4, s.getPhoneNumber()); |
|
|
|
|
pstmt.setString(5, s.getSex()); |
|
|
|
|
pstmt.setInt(6, s.getAge()); |
|
|
|
|
pstmt.setString(7, entrustment.getAcceptNo()); |
|
|
|
|
pstmt.setInt(8, s.getOrderNo()); |
|
|
|
|
pstmt.setString(9, caseEvent.getCaseName()); |
|
|
|
|
pstmt.setString(10, caseEvent.getCaseBrief()); |
|
|
|
|
pstmt.setDate(11, java.sql.Date.valueOf(caseEvent.getHappenTime())); |
|
|
|
|
pstmt.setTimestamp(12, Timestamp.valueOf(LocalDateTime.now())); |
|
|
|
|
pstmt.setString(13, user.getName()); |
|
|
|
|
System.out.println(entrustment); |
|
|
|
|
pstmt.setDate(14, java.sql.Date.valueOf(entrustment.getAcceptTime().toLocalDate())); |
|
|
|
|
pstmt.setString(15, entrustment.getClientOrgName()); |
|
|
|
|
pstmt.addBatch(); |
|
|
|
|
} |
|
|
|
|
pstmt.executeBatch(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 推送检验结果
|
|
|
|
|
String sql2 = "INSERT INTO b_result (id, case_accept_no, name, qualitative_result, quantitative_result, other_result, checkout_remark, order_no, form, draw_time, draw_place) " + |
|
|
|
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " + |
|
|
|
|
"ON DUPLICATE KEY UPDATE case_accept_no=VALUES(case_accept_no), name=VALUES(name), qualitative_result=VALUES(qualitative_result), " + |
|
|
|
|
"quantitative_result=VALUES(quantitative_result), other_result=VALUES(other_result), checkout_remark=VALUES(checkout_remark), " + |
|
|
|
|
"order_no=VALUES(order_no), form=VALUES(form), draw_time=VALUES(draw_time), draw_place=VALUES(draw_place)"; |
|
|
|
|
|
|
|
|
|
try (PreparedStatement pstmt2 = connection.prepareStatement(sql2)) { |
|
|
|
|
for (EntrustMaterialCheckoutResultVO r : resultVOS) { |
|
|
|
|
pstmt2.setString(1, r.getId()); |
|
|
|
|
pstmt2.setString(2, entrustment.getAcceptNo()); |
|
|
|
|
pstmt2.setString(3, r.getName()); |
|
|
|
|
pstmt2.setString(4, r.getQualitativeResult()); |
|
|
|
|
pstmt2.setString(5, r.getQuantitativeResult()); |
|
|
|
|
pstmt2.setString(6, r.getOtherResult()); |
|
|
|
|
pstmt2.setString(7, r.getCheckoutRemark()); |
|
|
|
|
pstmt2.setInt(8, r.getOrderNo()); |
|
|
|
|
pstmt2.setString(9, r.getForm()); |
|
|
|
|
pstmt2.setDate(10, java.sql.Date.valueOf(r.getDrawTime().toLocalDate())); |
|
|
|
|
pstmt2.setString(11, r.getDrawPlace()); |
|
|
|
|
pstmt2.addBatch(); |
|
|
|
|
} |
|
|
|
|
pstmt2.executeBatch(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
entrustment.setPlatformFlag(true); |
|
|
|
|
entrustmentService.updateById(entrustment); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 推送嫌疑人毒检结果任务 |
|
|
|
|
* |
|
|
|
|
* @param dlpUser 当前操作用户 |
|
|
|
|
* @return 推送结果 |
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public R pushSuspectDetectionResultTask(DLPUser dlpUser) { |
|
|
|
|
// 查询所有嫌疑人列表
|
|
|
|
|
List<Suspect> suspectList = suspectService.lambdaQuery() |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
// 将嫌疑人按委托ID分组
|
|
|
|
|
Map<String, List<Suspect>> susMap = suspectList.stream() |
|
|
|
|
.collect(Collectors.groupingBy(Suspect::getEntrustId)); |
|
|
|
|
|
|
|
|
|
Set<String> entrustSet = susMap.keySet(); |
|
|
|
|
|
|
|
|
|
List<Entrustment> entrusts = entrustmentService.lambdaQuery() |
|
|
|
|
.in(Entrustment::getId, entrustSet) |
|
|
|
|
.ge(Entrustment::getStatus, EntrustStatusConstants.ENTRUST_STATUS_ACCEPTED.getStatus()) // status >= 9
|
|
|
|
|
.and(qw ->qw |
|
|
|
|
.eq(Entrustment::getPlatformFlag,false) |
|
|
|
|
.or() |
|
|
|
|
.isNull(Entrustment::getPlatformFlag)) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
// 提取委托ID列表
|
|
|
|
|
List<String> entrustIds = entrusts.stream() |
|
|
|
|
.map(Entrustment::getId) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// 查询案件信息,并构造以案件ID为键的映射
|
|
|
|
|
Map<String, CaseEvent> caseMap = caseEventService.lambdaQuery() |
|
|
|
|
.in(CaseEvent::getId, entrusts.stream().map(Entrustment::getCaseId).collect(Collectors.toList())) |
|
|
|
|
.list() |
|
|
|
|
.stream() |
|
|
|
|
.collect(Collectors.toMap(CaseEvent::getId, Function.identity())); |
|
|
|
|
|
|
|
|
|
Map<String, Entrustment> entrustMap = entrusts.stream() |
|
|
|
|
.collect(Collectors.toMap(Entrustment::getId, Function.identity())); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查询毒检结果:必须存在定性结果
|
|
|
|
|
List<EntrustMaterialCheckoutResult> resultList = this.lambdaQuery() |
|
|
|
|
.in(EntrustMaterialCheckoutResult::getEntrustId, entrustIds) |
|
|
|
|
.notLike(EntrustMaterialCheckoutResult::getQualitativeResult, "null") |
|
|
|
|
.isNotNull(EntrustMaterialCheckoutResult::getQualitativeResult) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (resultList.isEmpty()) { |
|
|
|
|
return R.failed("未查询到有定性结果的检材检出结果!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 查询委托检材信息,并按ID去重(按顺序号升序排序)
|
|
|
|
|
Map<String, EntrustmentIdentificationMaterial> materialMap = entrustmentIdentificationMaterialService.lambdaQuery() |
|
|
|
|
.in(EntrustmentIdentificationMaterial::getEntrustmentId, entrustIds) |
|
|
|
|
.orderByAsc(EntrustmentIdentificationMaterial::getOrderNo) |
|
|
|
|
.list() |
|
|
|
|
.stream() |
|
|
|
|
.collect(Collectors.toMap(EntrustmentIdentificationMaterial::getId, Function.identity())); |
|
|
|
|
|
|
|
|
|
if (materialMap.isEmpty()){ |
|
|
|
|
return R.failed("未查询到有检材信息!"); |
|
|
|
|
} |
|
|
|
|
// 构造结果VO列表
|
|
|
|
|
List<EntrustMaterialCheckoutResultVO> resultVOS = resultList.stream() |
|
|
|
|
.map(result -> this.buildResultVO(result, materialMap)) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
// 将VO按委托ID分组
|
|
|
|
|
Map<String, List<EntrustMaterialCheckoutResultVO>> resutlMap = resultVOS.stream() |
|
|
|
|
.collect(Collectors.groupingBy(EntrustMaterialCheckoutResultVO::getEntrustId)); |
|
|
|
|
|
|
|
|
|
Set<String> entrustResultIds = resutlMap.keySet(); |
|
|
|
|
|
|
|
|
|
// 按有数据的委托进行推送
|
|
|
|
|
for (String entrustId : entrustResultIds) { |
|
|
|
|
Entrustment entrust = entrustMap.get(entrustId); |
|
|
|
|
List<EntrustMaterialCheckoutResultVO> vos = resutlMap.get(entrust.getId()); |
|
|
|
|
List<Suspect> suspects = susMap.get(entrust.getId()); |
|
|
|
|
CaseEvent caseEvent = caseMap.get(entrust.getCaseId()); |
|
|
|
|
boolean ret = this.pushToDatabase(suspects, vos, entrust, caseEvent, dlpUser); |
|
|
|
|
if (!ret) { |
|
|
|
|
return R.failed("推送失败"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return R.ok("推送成功"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|