package org.jeecg.modules.lims.testing.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.modules.lims.testing.entity.*; import org.jeecg.modules.lims.testing.service.*; import org.jeecg.modules.lims.testing.vo.LimsBatchDetailVo; import org.jeecg.modules.lims.testing.vo.LimsBatchSampleVo; import org.jeecg.modules.lims.testing.vo.LimsTestingTypeVo; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Api(tags = "小程序接口") @RestController @RequestMapping("/lims/testing/mini") @Slf4j public class LimsMiniController { /** * description: * 小程序中部分组件或页面需要组装数据或回写数据,新增接口 */ @Autowired private ILimsBatchResultService resultService; @Autowired private ILimsTestingTypeService typeService; @Autowired private ILimsBatchDetailService detailService; @Autowired private ILimsTestingItemService itemService; @Autowired private ILimsTestingBatchService batchService; @Autowired private ILimsTestingStandCondService condService; @Autowired private ILimsBatchSampleService sampleService; @Autowired private ILimsTestingCategoryService categoryService; @Autowired private ILimsTestingStandardService standardService; @Autowired private ILimsItemTargetService targetService; @AutoLog(value = "小程序-查询批次检验分类-鉴定类别") @ApiOperation(value = "小程序-查询批次检验分类-鉴定类别", notes = "小程序-查询批次检验分类-鉴定类别") @GetMapping(value = "/bacthCatList") public Result queryBatchCatList(LimsTestingBatch limsTestingBatch) { QueryWrapper resultQueryWrapper = new QueryWrapper<>(); resultQueryWrapper.lambda().eq(LimsBatchResult::getBatchId, limsTestingBatch.getId()); //1.查询批次检验结果列表, List resultList = resultService.list(resultQueryWrapper); //2.得到鉴定类别id列表 List catIds = resultList.stream().map(LimsBatchResult::getTestingCat).collect(Collectors.toList()); if (catIds.isEmpty()) catIds.add("empty"); //3.查询鉴定类别列表 QueryWrapper catQueryWrapper = new QueryWrapper<>(); catQueryWrapper.lambda().in(LimsTestingCategory::getId, catIds); List catList = categoryService.list(catQueryWrapper); /* LimsTestingBatch batch = batchService.getById(limsTestingBatch.getId()); if (StringUtils.isEmpty(batch.getStandardId())) { return Result.error("技术标准信息错误!"); } QueryWrapper targetQueryWrapper = new QueryWrapper<>(); targetQueryWrapper.lambda().eq(LimsItemTarget::getStandardId, batch.getStandardId()); targetQueryWrapper.lambda().eq(LimsItemTarget::getEnabled, 1); List itemTargetList = targetService.list(targetQueryWrapper); List catIds = itemTargetList.stream().map(LimsItemTarget::getCategoryId).collect(Collectors.toList()); if (catIds.isEmpty()) catIds.add("empty"); QueryWrapper catQueryWrapper = new QueryWrapper<>(); catQueryWrapper.lambda().in(LimsTestingCategory::getId, catIds); List catList = categoryService.list(catQueryWrapper);*/ return Result.OK(catList); } @AutoLog(value = "小程序-查询批次检验分类-根据鉴定类别查询鉴定类型") @ApiOperation(value = "小程序-查询批次检验分类-根据鉴定类别查询鉴定类型", notes = "小程序-查询批次检验分类-根据鉴定类别查询鉴定类型") @GetMapping(value = "/typList") public Result queryTypListByCat(LimsBatchResult limsBatchResult) { //查询BatchResult QueryWrapper resultQueryWrapper = new QueryWrapper<>(); resultQueryWrapper.lambda().eq(LimsBatchResult::getBatchId, limsBatchResult.getBatchId()); resultQueryWrapper.lambda().eq(LimsBatchResult::getTestingCat, limsBatchResult.getTestingCat()); List resultList = resultService.list(resultQueryWrapper); if (resultList.isEmpty()) { return Result.error("未查询到数据!"); } List typIds = resultList.stream().map(LimsBatchResult::getTestingType).distinct().collect(Collectors.toList()); if (typIds.isEmpty()) typIds.add("empty"); QueryWrapper typQueryWrapper = new QueryWrapper<>(); typQueryWrapper.lambda().in(LimsTestingType::getId, typIds); List typList = typeService.list(typQueryWrapper); //统计每个类型的完成数量 Map typResultMap = resultList.stream().collect(Collectors.toMap(LimsBatchResult::getTestingType, LimsBatchResult::getId)); List collect = typList.stream().map(item -> { LimsTestingTypeVo vo = new LimsTestingTypeVo(); BeanUtils.copyProperties(item, vo); try { String resultId = typResultMap.get(item.getId()); QueryWrapper detailQueryWrapper = new QueryWrapper<>(); detailQueryWrapper.lambda().eq(LimsBatchDetail::getResultId, resultId); List detailList = detailService.list(detailQueryWrapper); List finishDetailList = detailList.stream().filter(d -> d.getValue() != null).collect(Collectors.toList()); vo.setBatchDetailTotal(detailList.size()); vo.setBatchDetailFinish(finishDetailList.size()); } catch (Exception e) { e.printStackTrace(); } return vo; }).collect(Collectors.toList()); return Result.OK(collect); } /** * @param batchId 批次 * @param typeId 检验类型 * @return */ @AutoLog(value = "小程序-查询批次下type类型的检测条件") @ApiOperation(value = "小程序-查询批次下type类型的检测条件", notes = "小程序-查询批次下type类型的检测条件") @GetMapping(value = "/typeCond") public Result queryBatchTypeCond(String batchId, String typeId) { if (StringUtils.isEmpty(batchId)) return Result.error("批次Id不能为空!"); if (StringUtils.isEmpty(typeId)) return Result.error("检验类型Id不能为空!"); //1.查询批次产品的技术标准 LimsTestingBatch batch = batchService.getById(batchId); String standardId = batch.getStandardId(); //2.查询type的检验条件 QueryWrapper condQueryWrapper = new QueryWrapper<>(); condQueryWrapper.lambda().eq(LimsTestingStandCond::getStandardId, standardId); condQueryWrapper.lambda().eq(LimsTestingStandCond::getTypeId, typeId); List condList = condService.list(condQueryWrapper); return Result.OK(condList); } @AutoLog(value = "小程序-查询批次检验结果") @ApiOperation(value = "小程序-查询批次检验结果", notes = "小程序-查询批次检验结果") @GetMapping(value = "/batchResult") public Result queryBatchResult(String batchId, String typeId) { if (StringUtils.isEmpty(batchId)) return Result.error("批次Id不能为空!"); if (StringUtils.isEmpty(typeId)) return Result.error("检验类型Id不能为空!"); QueryWrapper resultQueryWrapper = new QueryWrapper<>(); resultQueryWrapper.lambda().eq(LimsBatchResult::getBatchId, batchId); resultQueryWrapper.lambda().eq(LimsBatchResult::getTestingType, typeId); LimsBatchResult batchResult = resultService.getOne(resultQueryWrapper); return Result.OK(batchResult); } @AutoLog(value = "小程序-查询批次检验结果") @ApiOperation(value = "小程序-查询批次检验结果", notes = "小程序-查询批次检验结果") @GetMapping(value = "/inputInfo") public Result queryInfo(@RequestParam(required = false) Map options) { Map result = new HashMap<>(); Map info = new HashMap<>(); LimsTestingBatch batch = batchService.getById(options.get("batch")); LimsTestingCategory cat = categoryService.getById(options.get("cat")); LimsTestingType type = typeService.getById(options.get("type")); LimsBatchSample sample = sampleService.getById(options.get("sample")); //1.组装页面展示信息 info.put("batchCode", batch.getBatchCode()); info.put("typeName", type.getName()); info.put("catName", cat.getName()); info.put("cond1", options.get("cond1")); info.put("cond2", options.get("cond2")); info.put("sampleCode", sample.getCode()); //1.1 根据batch查询技术标准 String standardId = batch.getStandardId(); LimsTestingStandard standard = standardService.getById(standardId); //1.2通过批次和技术标准查询 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(LimsItemTarget::getStandardId,standard.getId()); List targetList = targetService.list(queryWrapper); //itemid valType Map tarMap = targetList.stream().filter(item->item.getItemId()!=null && item.getValType()!=null).collect(Collectors.toMap(LimsItemTarget::getItemId, LimsItemTarget::getValType)); //2.查询batch_detail QueryWrapper detailQueryWrapper = new QueryWrapper<>(); detailQueryWrapper.lambda().eq(LimsBatchDetail::getBatchId, options.get("batch")); detailQueryWrapper.lambda().eq(LimsBatchDetail::getResultId, options.get("result")); detailQueryWrapper.lambda().eq(LimsBatchDetail::getSampleId, options.get("sample")); detailQueryWrapper.lambda().eq(LimsBatchDetail::getCond, options.get("cond1")); detailQueryWrapper.lambda().eq(LimsBatchDetail::getCond2, options.get("cond2")); detailQueryWrapper.lambda().isNull(LimsBatchDetail::getDestroy); List batchDetailList = detailService.list(detailQueryWrapper); //破坏性 QueryWrapper detailQueryWrapper2 = new QueryWrapper<>(); detailQueryWrapper2.lambda().eq(LimsBatchDetail::getBatchId, options.get("batch")); detailQueryWrapper2.lambda().eq(LimsBatchDetail::getResultId, options.get("result")); detailQueryWrapper2.lambda().eq(LimsBatchDetail::getSampleId, options.get("sample")); detailQueryWrapper2.lambda().isNotNull(LimsBatchDetail::getDestroy); List batchDetailList2 = detailService.list(detailQueryWrapper2); batchDetailList.addAll(batchDetailList2); List collect = batchDetailList.stream().map(item -> { LimsBatchDetailVo vo = new LimsBatchDetailVo(); BeanUtils.copyProperties(item, vo); LimsTestingItem testingItem = itemService.getById(item.getItemId()); vo.setItemName(testingItem.getName()); if(tarMap.containsKey(testingItem.getId())){ vo.setValType(tarMap.get(testingItem.getId())); } return vo; }).collect(Collectors.toList()); result.put("info", JSON.toJSON(info)); result.put("model", JSON.toJSON(collect)); return Result.OK(result); } @AutoLog(value = "小程序-根据条件查询样本列表") @ApiOperation(value = "小程序-根据条件查询样本列表", notes = "小程序-根据条件查询样本列表") @GetMapping(value = "/condSample") public Result querySampleByCond(@RequestParam(required = false) Map options) { String batchId = options.get("batchId"); String catId = options.get("catId"); String typeId = options.get("typeId"); String cond = options.get("cond"); String cond2 = options.get("cond2"); //0.查询batch_result QueryWrapper resultQueryWrapper = new QueryWrapper<>(); resultQueryWrapper.lambda().eq(LimsBatchResult::getBatchId, batchId); resultQueryWrapper.lambda().eq(LimsBatchResult::getTestingCat, catId); resultQueryWrapper.lambda().eq(LimsBatchResult::getTestingType, typeId); LimsBatchResult batchResult = resultService.getOne(resultQueryWrapper); //1.1 查询检验明细 QueryWrapper detailQueryWrapper = new QueryWrapper<>(); detailQueryWrapper.lambda().eq(LimsBatchDetail::getBatchId, batchId); detailQueryWrapper.lambda().eq(LimsBatchDetail::getCond, cond); detailQueryWrapper.lambda().eq(LimsBatchDetail::getCond2, cond2); detailQueryWrapper.lambda().isNull(LimsBatchDetail::getDestroy); detailQueryWrapper.lambda().eq(LimsBatchDetail::getResultId, batchResult.getId()); List detailList = detailService.list(detailQueryWrapper); //1.2 查询破坏性 QueryWrapper detailQueryWrapper2 = new QueryWrapper<>(); detailQueryWrapper2.lambda().eq(LimsBatchDetail::getBatchId, batchId); detailQueryWrapper2.lambda().isNotNull(LimsBatchDetail::getDestroy); detailQueryWrapper2.lambda().eq(LimsBatchDetail::getResultId, batchResult.getId()); List detailList2 = detailService.list(detailQueryWrapper2); detailList.addAll(detailList2); //2.根据明细,得到样本 Map> sampleMap = detailList.stream().collect(Collectors.groupingBy(item -> item.getSampleId())); List sampleIds = new ArrayList<>(sampleMap.keySet()); sampleIds.add("empty"); QueryWrapper sampleQueryWrapper = new QueryWrapper<>(); sampleQueryWrapper.lambda().in(LimsBatchSample::getId, sampleIds); List batchSample = sampleService.list(sampleQueryWrapper); AtomicInteger index = new AtomicInteger(1); List collect = batchSample.stream().map(item -> { LimsBatchSampleVo vo = new LimsBatchSampleVo(); BeanUtils.copyProperties(item, vo); if (sampleMap.containsKey(item.getId())) { List finish = sampleMap.get(item.getId()).stream().filter(i -> i.getValue() != null).collect(Collectors.toList()); vo.setInspectCount(sampleMap.get(item.getId()).size()); vo.setInspectFinish(finish.size()); } else { vo.setInspectCount(0); vo.setInspectFinish(0); } vo.setModelName("m"+index + vo.getCode().substring(vo.getCode().indexOf("-")) ); index.getAndIncrement(); return vo; }).collect(Collectors.toList()); return Result.OK(collect); } }