From 48b5d73bbf89b23bc2ee8c88321fbf1d3b64d54f Mon Sep 17 00:00:00 2001
From: chen <2710907404@qq.com>
Date: Thu, 2 Jan 2025 15:20:44 +0800
Subject: [PATCH] =?UTF-8?q?20250102=20=E6=9B=B4=E6=96=B0=201.=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=E5=BD=95=E5=85=A5=E6=A3=80=E6=9D=90=E6=A3=80=E5=87=BA?=
=?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 6 +
...trustMaterialCheckoutResultController.java | 71 +++++++
.../EntrustMaterialCheckoutResultConvert.java | 37 ++++
.../dto/CheckoutResultExcelDTO.java | 71 +++++++
.../dto/EntrustMaterialCheckoutResultDTO.java | 60 ++++++
.../entity/EntrustMaterialCheckoutResult.java | 51 +++++
.../EntrustMaterialCheckoutResultMapper.java | 20 ++
.../service/CommonFeignService.java | 10 +
.../EntrustMaterialCheckoutResultService.java | 33 +++
.../service/impl/CommonFeignServiceImpl.java | 21 +-
...rustMaterialCheckoutResultServiceImpl.java | 199 ++++++++++++++++++
.../vo/EntrustMaterialCheckoutResultVO.java | 53 +++++
.../EntrustMaterialCheckoutResultMapper.xml | 28 +++
13 files changed, 659 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/convert/EntrustMaterialCheckoutResultConvert.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/dto/CheckoutResultExcelDTO.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/dto/EntrustMaterialCheckoutResultDTO.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustMaterialCheckoutResultMapper.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java
create mode 100644 src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java
create mode 100644 src/main/resources/mapper/EntrustMaterialCheckoutResultMapper.xml
diff --git a/pom.xml b/pom.xml
index 3fc990f..5f06e01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
2022.10.11-snapshots
2021.1
+ 1.0.0
@@ -139,6 +140,11 @@
2.11.0
+
+ cn.idev.excel
+ fastexcel
+ ${fastexcel.version}
+
diff --git a/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java
new file mode 100644
index 0000000..fb62fca
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/controller/EntrustMaterialCheckoutResultController.java
@@ -0,0 +1,71 @@
+package digital.laboratory.platform.entrustment.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import digital.laboratory.platform.common.core.exception.CheckedException;
+import digital.laboratory.platform.common.core.util.R;
+import digital.laboratory.platform.entrustment.convert.EntrustMaterialCheckoutResultConvert;
+import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO;
+import digital.laboratory.platform.entrustment.service.EntrustMaterialCheckoutResultService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 委托检材--检出定性定量结果信息
+ *
+ * @author chenjiangbao
+ * @describe 委托检材--检出定性定量结果信息相关接口 前端控制器
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/papp/checkoutResult")
+@Api(tags = "017-委托检材--检出定性定量结果信息相关接口")
+public class EntrustMaterialCheckoutResultController {
+
+ private static final Logger log = LoggerFactory.getLogger(EntrustMaterialCheckoutResultController.class);
+ @Resource
+ private EntrustMaterialCheckoutResultService entrustMaterialCheckoutResultService;
+
+ @ApiOperation("查询检出得定性定量结果")
+ @GetMapping("/query")
+ public R query(@RequestParam("id") String id) {
+ return R.ok(
+ EntrustMaterialCheckoutResultConvert.entityToVO(entrustMaterialCheckoutResultService.getById(id)),
+ "查询检出得定性定量结果成功!"
+ );
+ }
+
+ @ApiOperation("保存检出得定性定量结果")
+ @PostMapping("/save")
+ public R save(@RequestBody EntrustMaterialCheckoutResultDTO dto) {
+ boolean success = false;
+ try {
+ success = entrustMaterialCheckoutResultService.save(dto);
+ } catch (CheckedException e) {
+ return R.failed(e.getMessage());
+ }
+ return success ? R.ok("保存检出得定性定量结果成功!") : R.ok("保存检出得定性定量结果失败!");
+ }
+
+ @ApiOperation("导出检材检出结果的excel表格")
+ @PostMapping("/exportExcel")
+ public void exportExcel(@RequestBody List entrustIds, HttpServletResponse response) {
+ if (CollUtil.isEmpty(entrustIds)) {
+ throw new CheckedException("请选择要导出的委托检出结果信息!");
+ }
+ try {
+ entrustMaterialCheckoutResultService.exportExcel(entrustIds, response);
+ } catch (IOException e) {
+ throw new CheckedException("导出excel失败!");
+ }
+ }
+
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/convert/EntrustMaterialCheckoutResultConvert.java b/src/main/java/digital/laboratory/platform/entrustment/convert/EntrustMaterialCheckoutResultConvert.java
new file mode 100644
index 0000000..395eee5
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/convert/EntrustMaterialCheckoutResultConvert.java
@@ -0,0 +1,37 @@
+package digital.laboratory.platform.entrustment.convert;
+
+import cn.hutool.core.util.StrUtil;
+import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO;
+import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult;
+import digital.laboratory.platform.entrustment.vo.EntrustMaterialCheckoutResultVO;
+
+import java.util.stream.Collectors;
+
+/**
+ * 托检材--检出定性定量结果信息 转换类
+ */
+public class EntrustMaterialCheckoutResultConvert {
+
+ public static EntrustMaterialCheckoutResult dtoToEntity(EntrustMaterialCheckoutResultDTO dto) {
+ if (dto == null) return null;
+ EntrustMaterialCheckoutResult entrustMaterialCheckoutResult = new EntrustMaterialCheckoutResult();
+ entrustMaterialCheckoutResult.setQualitativeResult(dto.getQualitativeResult());
+ entrustMaterialCheckoutResult.setQuantitativeResult(dto.getQuantitativeResult().stream().collect(Collectors.joining("、")));
+ entrustMaterialCheckoutResult.setOtherResult(dto.getOtherResult());
+ entrustMaterialCheckoutResult.setCheckoutRemark(dto.getCheckoutRemark());
+ return entrustMaterialCheckoutResult;
+
+ }
+
+ public static EntrustMaterialCheckoutResultVO entityToVO(EntrustMaterialCheckoutResult entity) {
+ if (entity == null) return new EntrustMaterialCheckoutResultVO();
+ EntrustMaterialCheckoutResultVO vo = new EntrustMaterialCheckoutResultVO();
+ vo.setId(entity.getId());
+ vo.setQualitativeResult(entity.getQualitativeResult());
+ vo.setQuantitativeResult(StrUtil.split(entity.getQuantitativeResult(), "、"));
+ vo.setOtherResult(entity.getOtherResult());
+ vo.setCheckoutRemark(entity.getCheckoutRemark());
+ return vo;
+ }
+
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/CheckoutResultExcelDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/CheckoutResultExcelDTO.java
new file mode 100644
index 0000000..798be5e
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/dto/CheckoutResultExcelDTO.java
@@ -0,0 +1,71 @@
+package digital.laboratory.platform.entrustment.dto;
+
+import cn.idev.excel.annotation.ExcelProperty;
+import digital.laboratory.platform.sys.entity.DrugLite;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel(value = "CheckoutResultExcelDTO", description = "存储要导出的检出结果excel数据DTO对象")
+public class CheckoutResultExcelDTO {
+
+ @ApiModelProperty("序号")
+ @ExcelProperty("序号")
+ private Integer order;
+
+ @ApiModelProperty("送检日期")
+ @ExcelProperty("送检日期")
+ private String deliverTime;
+
+ @ApiModelProperty("送检单位")
+ @ExcelProperty("送检单位")
+ private String clientOrgName;
+
+ @ApiModelProperty("检材采集地-省")
+ @ExcelProperty(value = "检材采集地", index = 3)
+ private String provinceCollectPlace;
+
+ @ApiModelProperty("检材采集地-市")
+ @ExcelProperty(value = "检材采集地", index = 4)
+ private String cityCollectPlace;
+
+ @ApiModelProperty(value="受理编号")
+ @ExcelProperty("受理编号")
+ private String acceptNo;
+
+ @ApiModelProperty(value = "委托检材顺序号,由系统根据录入顺序生成")
+ @ExcelProperty("检材编号")
+ private Integer orderNo;
+
+ @ApiModelProperty(value = "检材类别名称:继承所取物证的类别或从物证类别选择")
+ @ExcelProperty("检材类型")
+ private String typeName;
+
+ @ApiModelProperty(value = "检材颜色:继承所取物证颜色或手动填入")
+ @ExcelProperty("检材颜色")
+ private String color;
+
+ @ApiModelProperty(value = "检材性状名称:继承所取物证性状或从物证性状类别选择")
+ @ExcelProperty("检材形态")
+ private String formName;
+
+ @ApiModelProperty("定性结果")
+ @ExcelProperty("定性结果")
+ private String qualitativeResult;
+
+ @ApiModelProperty("定量结果")
+ @ExcelProperty("定量结果")
+ private String quantitativeResult;
+
+ @ApiModelProperty("其他鉴定结果")
+ @ExcelProperty("其他鉴定结果")
+ private String otherResult;
+
+ @ApiModelProperty("备注")
+ @ExcelProperty("备注")
+ private String remark;
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustMaterialCheckoutResultDTO.java b/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustMaterialCheckoutResultDTO.java
new file mode 100644
index 0000000..c174ec5
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/dto/EntrustMaterialCheckoutResultDTO.java
@@ -0,0 +1,60 @@
+package digital.laboratory.platform.entrustment.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import digital.laboratory.platform.common.mybatis.base.BaseEntity;
+import digital.laboratory.platform.sys.entity.DrugLite;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 委托检材--检出定性定量结果信息
+ * @TableName b_entrust_material_checkout_result
+ */
+@Data
+@ApiModel(value = "EntrustMaterialCheckoutResultDTO", description = "委托检材--检出定性定量结果信息DTO")
+public class EntrustMaterialCheckoutResultDTO {
+ /**
+ * 委托检材id
+ */
+ @ApiModelProperty("委托检材id列表, 支持批量")
+ private List ids;
+
+ /**
+ * 委托检材id
+ */
+ @ApiModelProperty("委托id")
+ private String entrustId;
+
+ /**
+ * 定性结果
+ */
+ @ApiModelProperty("定性结果")
+ private List qualitativeResult;
+
+ /**
+ * 定量结果
+ */
+ @ApiModelProperty("定量结果")
+ private List quantitativeResult;
+
+ /**
+ * 其他鉴定结果
+ */
+ @ApiModelProperty("其他鉴定结果")
+ private String otherResult;
+
+ /**
+ * 检出结果的备注信息
+ */
+ @ApiModelProperty("检出结果的备注信息")
+ private String checkoutRemark;
+
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java
new file mode 100644
index 0000000..c44b6b4
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/entity/EntrustMaterialCheckoutResult.java
@@ -0,0 +1,51 @@
+package digital.laboratory.platform.entrustment.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import digital.laboratory.platform.common.mybatis.base.BaseEntity;
+import digital.laboratory.platform.sys.entity.DrugLite;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 委托检材--检出定性定量结果信息
+ * @TableName b_entrust_material_checkout_result
+ */
+@TableName(value ="b_entrust_material_checkout_result", autoResultMap = true)
+@Data
+public class EntrustMaterialCheckoutResult extends BaseEntity {
+ /**
+ * 委托检材id
+ */
+ @TableId(value = "entrust_material_id", type = IdType.ASSIGN_ID)
+ private String id;
+
+ /**
+ * 定性结果
+ */
+ @TableField(typeHandler = FastjsonTypeHandler.class)
+ private List qualitativeResult;
+
+ /**
+ * 定量结果
+ */
+ private String quantitativeResult;
+
+ /**
+ * 其他鉴定结果
+ */
+ private String otherResult;
+
+ /**
+ * 检出结果的备注信息
+ */
+ private String checkoutRemark;
+
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustMaterialCheckoutResultMapper.java b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustMaterialCheckoutResultMapper.java
new file mode 100644
index 0000000..9f83ed1
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/mapper/EntrustMaterialCheckoutResultMapper.java
@@ -0,0 +1,20 @@
+package digital.laboratory.platform.entrustment.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author ChenJiangBao
+* @description 针对表【b_entrust_material_checkout_result(委托检材--检出定性定量结果信息)】的数据库操作Mapper
+* @createDate 2024-12-30 16:16:25
+* @Entity generator.entity.EntrustMaterialCheckoutResult
+*/
+@Mapper
+public interface EntrustMaterialCheckoutResultMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/CommonFeignService.java b/src/main/java/digital/laboratory/platform/entrustment/service/CommonFeignService.java
index 58219e5..4dff10d 100644
--- a/src/main/java/digital/laboratory/platform/entrustment/service/CommonFeignService.java
+++ b/src/main/java/digital/laboratory/platform/entrustment/service/CommonFeignService.java
@@ -1,6 +1,7 @@
package digital.laboratory.platform.entrustment.service;
import com.deepoove.poi.XWPFTemplate;
+import digital.laboratory.platform.sys.entity.Area;
import digital.laboratory.platform.sys.entity.SysOrg;
import digital.laboratory.platform.sys.entity.SysUser;
import digital.laboratory.platform.sys.vo.UserVO;
@@ -23,6 +24,15 @@ public interface CommonFeignService {
*/
SysOrg remoteGetSysOrg(String orgId);
+ /**
+ * 通过机构ID远程获取机构所在省市信息
+ *
+ * @param orgId 机构ID
+ * @return 包含机构所在省市信息的Area对象列表
+ * @throws RuntimeException 当根据机构ID获取机构所在省市信息失败时抛出
+ */
+ List remoteGetProvinceCityInfo(String orgId);
+
/**
* 远程调用获取用户信息
* @param username
diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java
new file mode 100644
index 0000000..8b9cd92
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/service/EntrustMaterialCheckoutResultService.java
@@ -0,0 +1,33 @@
+package digital.laboratory.platform.entrustment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import digital.laboratory.platform.entrustment.dto.EntrustMaterialCheckoutResultDTO;
+import digital.laboratory.platform.entrustment.entity.EntrustMaterialCheckoutResult;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+* @author ChenJiangBao
+* @description 针对表【b_entrust_material_checkout_result(委托检材--检出定性定量结果信息)】的数据库操作Service
+* @createDate 2024-12-30 16:16:25
+*/
+public interface EntrustMaterialCheckoutResultService extends IService {
+
+ /**
+ * 根据DTO保存检材得检出结果信息
+ * @param dto 检出DTO
+ * @return
+ */
+ boolean save(EntrustMaterialCheckoutResultDTO dto);
+
+ /**
+ * 根据委托id导出检出结果excel文件
+ *
+ * @param entrustIds 委托id列表,包含需要导出的委托的id
+ * @param response HttpServletResponse对象,用于将生成的excel文件写入响应中
+ */
+ void exportExcel(List entrustIds, HttpServletResponse response) throws IOException;
+
+}
diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/CommonFeignServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CommonFeignServiceImpl.java
index 4c1d209..1d606a4 100644
--- a/src/main/java/digital/laboratory/platform/entrustment/service/impl/CommonFeignServiceImpl.java
+++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/CommonFeignServiceImpl.java
@@ -10,11 +10,11 @@ import digital.laboratory.platform.common.feign.RemoteWord2PDFService;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.entrustment.service.CommonFeignService;
import digital.laboratory.platform.sys.dto.UserInfo;
+import digital.laboratory.platform.sys.entity.Area;
import digital.laboratory.platform.sys.entity.SysOrg;
import digital.laboratory.platform.sys.entity.SysUser;
import digital.laboratory.platform.sys.feign.RemoteOrgService;
import digital.laboratory.platform.sys.feign.RemoteUserService;
-import digital.laboratory.platform.sys.vo.UserVO;
import feign.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -69,6 +69,25 @@ public class CommonFeignServiceImpl implements CommonFeignService {
return sysOrg;
}
+ /**
+ * 通过机构ID远程获取机构所在省市信息
+ *
+ * @param orgId 机构ID
+ * @return 包含机构所在省市信息的Area对象列表
+ * @throws RuntimeException 当根据机构ID获取机构所在省市信息失败时抛出
+ */
+ @Override
+ public List remoteGetProvinceCityInfo(String orgId) {
+ List result = null;
+ R> r = remoteOrgService.fetchProvinceCityInfoByOrgId(orgId);
+ if (r != null && r.getCode() == CommonConstants.SUCCESS) {
+ result = r.getData();
+ } else {
+ throw new RuntimeException("根据机构id获取机构所在省市信息失败!");
+ }
+ return result;
+ }
+
/**
* 远程调用或者用户信息
* @param username
diff --git a/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java
new file mode 100644
index 0000000..fd628fb
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/service/impl/EntrustMaterialCheckoutResultServiceImpl.java
@@ -0,0 +1,199 @@
+package digital.laboratory.platform.entrustment.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.idev.excel.FastExcel;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import digital.laboratory.platform.common.core.exception.CheckedException;
+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.entity.EntrustMaterialCheckoutResult;
+import digital.laboratory.platform.entrustment.entity.Entrustment;
+import digital.laboratory.platform.entrustment.entity.EntrustmentIdentificationMaterial;
+import digital.laboratory.platform.entrustment.enums.EntrustmentStatusConstants;
+import digital.laboratory.platform.entrustment.mapper.EntrustMaterialCheckoutResultMapper;
+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.sys.entity.Area;
+import digital.laboratory.platform.sys.entity.DrugLite;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+* @author ChenJiangBao
+* @description 针对表【b_entrust_material_checkout_result(委托检材--检出定性定量结果信息)】的数据库操作Service实现
+* @createDate 2024-12-30 16:16:25
+*/
+@Service
+public class EntrustMaterialCheckoutResultServiceImpl extends ServiceImpl
+ implements EntrustMaterialCheckoutResultService {
+
+ @Resource
+ private EntrustmentService entrustmentService;
+
+ @Resource
+ private EntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService;
+
+ @Resource
+ private CommonFeignService commonFeignService;
+
+ /**
+ * 根据DTO保存检材得检出结果信息
+ * @param dto 检出DTO
+ * @return
+ */
+ @Override
+ public boolean save(EntrustMaterialCheckoutResultDTO dto) {
+ Entrustment entrustment = entrustmentService.getById(dto.getEntrustId());
+ if (entrustment == null) {
+ throw new CheckedException("委托信息不存在!");
+ }
+ if (!entrustment.getStatus().equals(EntrustmentStatusConstants.ENTRUSTMENT_STATUS_ACCEPTED.getStatus())) {
+ throw new CheckedException("该委托信息并未被机构受理!");
+ }
+ List ids = dto.getIds();
+ List materialList = entrustmentIdentificationMaterialService.list(Wrappers.lambdaQuery().in(EntrustmentIdentificationMaterial::getId, ids));
+ Map identificationMaterialMap = materialList.stream().collect(Collectors.toMap(EntrustmentIdentificationMaterial::getId, Function.identity()));
+ boolean success = false;
+ for (String id : ids) {
+ EntrustmentIdentificationMaterial identificationMaterial = identificationMaterialMap.get(id);
+ if (identificationMaterial == null) {
+ throw new CheckedException(String.format("id为 [%s] 得检材信息不存在!", id));
+ }
+ EntrustMaterialCheckoutResult entrustMaterialCheckoutResult = EntrustMaterialCheckoutResultConvert.dtoToEntity(dto);
+ entrustMaterialCheckoutResult.setId(id);
+ if (super.count(Wrappers.lambdaQuery().eq(EntrustMaterialCheckoutResult::getId, id)) <= 0) {
+// throw new CheckedException(String.format("检材编号 [%s] 的检材检出结果已经存在!", identificationMaterial.getImNo()));
+ success = super.save(entrustMaterialCheckoutResult);
+ } else {
+ success = super.updateById(entrustMaterialCheckoutResult);
+ }
+ }
+ return success;
+ }
+
+ /**
+ * 根据委托id导出检出结果excel文件
+ *
+ * @param entrustIds 委托id列表,包含需要导出的委托的id
+ * @param response HttpServletResponse对象,用于将生成的excel文件写入响应中
+ */
+ @Override
+ public void exportExcel(List entrustIds, HttpServletResponse response) throws IOException {
+ // 获取委托信息
+ List entrustmentList = entrustmentService.list(
+ Wrappers.lambdaQuery().in(Entrustment::getId, entrustIds)
+ );
+ // 获取检材信息, 排序的原因是需要数据是有序的
+ List materialList = entrustmentIdentificationMaterialService.list(
+ Wrappers.lambdaQuery()
+ .in(EntrustmentIdentificationMaterial::getEntrustmentId, entrustIds)
+ .orderByAsc(EntrustmentIdentificationMaterial::getEntrustmentId)
+ .orderByAsc(EntrustmentIdentificationMaterial::getOrderNo)
+ );
+ // 获取检材id,后续根据检材id获取对应的检出结果
+ List materialIds = materialList.stream().map(EntrustmentIdentificationMaterial::getId).collect(Collectors.toList());
+ // 根据委托id进行分组,防止导出的excel数据被打乱
+ Map> materialGroupByEntrustMap = materialList.stream().collect(Collectors.groupingBy(EntrustmentIdentificationMaterial::getEntrustmentId));
+
+ // 获取检出结果
+ List checkoutResultList = super.list(Wrappers.lambdaQuery().in(EntrustMaterialCheckoutResult::getId, materialIds));
+ Map checkoutResultMap = checkoutResultList.stream().collect(Collectors.toMap(EntrustMaterialCheckoutResult::getId, Function.identity()));
+ List checkoutResultExcelDTOS = fetchCheckoutResultExcelDTOList(entrustmentList, materialGroupByEntrustMap, checkoutResultMap);
+
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+
+ FastExcel.write(response.getOutputStream(), CheckoutResultExcelDTO.class)
+ .sheet(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
+ .doWrite(checkoutResultExcelDTOS);
+ }
+
+ /**
+ * 根据委托列表、材料映射和检验结果映射生成导出Excel的DTO列表
+ *
+ * @param entrustList 委托列表
+ * @param materialMap 材料映射,键为委托ID,值为对应的材料列表
+ * @param checkoutResultMap 检验结果映射,键为委托ID,值为对应的检验结果
+ * @return 导出Excel的DTO列表,但此方法实际返回空列表,因为最后返回的是Collections.emptyList()
+ */
+ private List fetchCheckoutResultExcelDTOList(List entrustList, Map> materialMap, Map checkoutResultMap) {
+ List checkoutResultExcelDTOList = new ArrayList<>();
+ Integer index = 1;
+ for (Entrustment entrust : entrustList) {
+ List materialList = materialMap.get(entrust.getId());
+ List areas = commonFeignService.remoteGetProvinceCityInfo(entrust.getClientOrgId());
+ String provinceCollectPlace = areas.get(0).getName();
+ String cityCollectPlace = "";
+ if (areas.size() > 1) {
+ cityCollectPlace = areas.get(1).getName();
+ }
+ String typeName = getTypeName(entrust);
+ if (CollUtil.isNotEmpty(materialList)) {
+ for (EntrustmentIdentificationMaterial material : materialList) {
+ CheckoutResultExcelDTO excelDTO = new CheckoutResultExcelDTO();
+ excelDTO.setOrder(index++);
+ excelDTO.setDeliverTime(entrust.getDeliverTime().format(DateTimeFormatter.ofPattern("yyyy/M/d")));
+ excelDTO.setClientOrgName(entrust.getClientOrgName());
+ excelDTO.setProvinceCollectPlace(provinceCollectPlace);
+ excelDTO.setCityCollectPlace(cityCollectPlace);
+ excelDTO.setAcceptNo(entrust.getAcceptNo());
+ excelDTO.setOrderNo(material.getOrderNo());
+ excelDTO.setTypeName(typeName);
+ excelDTO.setColor(material.getColor());
+ excelDTO.setFormName(material.getFormName());
+ EntrustMaterialCheckoutResult entrustMaterialCheckoutResult = checkoutResultMap.get(material.getId());
+ excelDTO.setQualitativeResult(
+ DrugLiteConvert.convertDirtyLiteByJSON(entrustMaterialCheckoutResult.getQualitativeResult())
+ .stream().map(DrugLite::getName).collect(Collectors.joining("、"))
+ );
+ excelDTO.setQuantitativeResult(entrustMaterialCheckoutResult.getQuantitativeResult());
+ excelDTO.setOtherResult(entrustMaterialCheckoutResult.getOtherResult());
+ excelDTO.setRemark(entrustMaterialCheckoutResult.getCheckoutRemark());
+ checkoutResultExcelDTOList.add(excelDTO);
+ }
+ }
+ }
+ return checkoutResultExcelDTOList;
+ }
+
+ /**
+ * 根据委托类型获取委托检材类型的名称
+ *
+ * @param entrust 委托对象
+ * @return 委托类型的名称
+ */
+ private String getTypeName(Entrustment entrust) {
+ String typeName = "";
+ if (entrust.getEntrustmentType().equals(0)) {
+ typeName = "缴获物";
+ } else if (entrust.getEntrustmentType().equals(1)) {
+ typeName = "生物样本";
+ } else {
+ typeName = "其他";
+ }
+ return typeName;
+ }
+}
+
+
+
+
diff --git a/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java
new file mode 100644
index 0000000..bb745f4
--- /dev/null
+++ b/src/main/java/digital/laboratory/platform/entrustment/vo/EntrustMaterialCheckoutResultVO.java
@@ -0,0 +1,53 @@
+package digital.laboratory.platform.entrustment.vo;
+
+import digital.laboratory.platform.sys.entity.DrugLite;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 委托检材--检出定性定量结果信息
+ * @TableName b_entrust_material_checkout_result
+ */
+@Data
+@ApiModel(value = "EntrustMaterialCheckoutResultVO", description = "委托检材--检出定性定量结果信息VO")
+public class EntrustMaterialCheckoutResultVO {
+ /**
+ * 委托检材id
+ */
+ @ApiModelProperty("委托检材id列表, 支持批量")
+ private String id;
+
+ /**
+ * 委托检材id
+ */
+ @ApiModelProperty("委托id")
+ private String entrustId;
+
+ /**
+ * 定性结果
+ */
+ @ApiModelProperty("定性结果")
+ private List qualitativeResult;
+
+ /**
+ * 定量结果
+ */
+ @ApiModelProperty("定量结果")
+ private List quantitativeResult;
+
+ /**
+ * 其他鉴定结果
+ */
+ @ApiModelProperty("其他鉴定结果")
+ private String otherResult;
+
+ /**
+ * 检出结果的备注信息
+ */
+ @ApiModelProperty("检出结果的备注信息")
+ private String checkoutRemark;
+
+}
diff --git a/src/main/resources/mapper/EntrustMaterialCheckoutResultMapper.xml b/src/main/resources/mapper/EntrustMaterialCheckoutResultMapper.xml
new file mode 100644
index 0000000..3f73e08
--- /dev/null
+++ b/src/main/resources/mapper/EntrustMaterialCheckoutResultMapper.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ entrust_material_id,
+ qualitative_result,
+ quantitative_result,
+ other_result,
+ create_time,
+ create_by,
+ update_time,
+ update_by
+
+