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 + +