package org.jeecg.modules.lims.testing.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.lims.testing.dto.LimsTestingCategoryDTO; import org.jeecg.modules.lims.testing.dto.LimsTestingItemDTO; import org.jeecg.modules.lims.testing.dto.LimsTestingTypeDTO; import org.jeecg.modules.lims.testing.entity.LimsTestingCategory; import org.jeecg.modules.lims.testing.entity.LimsTestingItem; import org.jeecg.modules.lims.testing.entity.LimsTestingOutline; import org.jeecg.modules.lims.testing.entity.LimsTestingType; import org.jeecg.modules.lims.testing.service.ILimsTestingCategoryService; import org.jeecg.modules.lims.testing.service.ILimsTestingItemService; import org.jeecg.modules.lims.testing.service.ILimsTestingOutlineService; import org.jeecg.modules.lims.testing.service.ILimsTestingTypeService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @Description: lims_testing_outline * @Author: jeecg-boot * @Date: 2023-04-19 * @Version: V1.0 */ @Api(tags = "lims_testing_outline") @RestController @RequestMapping("/lims/testing/outline") @Slf4j public class LimsTestingOutlineController extends JeecgController { @Autowired private ILimsTestingOutlineService limsTestingOutlineService; @Autowired private ILimsTestingCategoryService limsTestingCategoryService; @Autowired private ILimsTestingTypeService limsTestingTypeService; @Autowired private ILimsTestingItemService limsTestingItemService; /** * 分页列表查询 * * @param limsTestingOutline * @param pageNo * @param pageSize * @param req * @return */ @AutoLog(value = "lims_testing_outline-分页列表查询") @ApiOperation(value = "lims_testing_outline-分页列表查询", notes = "lims_testing_outline-分页列表查询") @GetMapping(value = "/list") public Result queryPageList(LimsTestingOutline limsTestingOutline, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(limsTestingOutline, req.getParameterMap()); Page page = new Page(pageNo, pageSize); IPage pageList = limsTestingOutlineService.page(page, queryWrapper); return Result.OK(pageList); } /** * 添加 * * @param limsTestingOutline * @return */ @AutoLog(value = "lims_testing_outline-添加") @ApiOperation(value = "lims_testing_outline-添加", notes = "lims_testing_outline-添加") @PostMapping(value = "/add") public Result add(@RequestBody LimsTestingOutline limsTestingOutline) { limsTestingOutlineService.save(limsTestingOutline); return Result.OK("添加成功!"); } /** * 编辑 * * @param limsTestingOutline * @return */ @AutoLog(value = "lims_testing_outline-编辑") @ApiOperation(value = "lims_testing_outline-编辑", notes = "lims_testing_outline-编辑") @PutMapping(value = "/edit") @Transactional public Result edit(@RequestBody LimsTestingOutline limsTestingOutline) { if(limsTestingOutline.getStatus() != null){ //发布 if(limsTestingOutline.getStatus() == 1){ //发布时废止旧版本 queryOldOutline(limsTestingOutline); //大纲的状态 0-新建 1-发布 2-废止 limsTestingOutlineService.updateById(limsTestingOutline); }else if(limsTestingOutline.getStatus() == 2){ //复制一条记录 generateNewVersion(limsTestingOutline); }else { //大纲的状态 0-新建 1-发布 2-废止 limsTestingOutlineService.updateById(limsTestingOutline); } } return Result.OK("编辑成功!"); } /** * 查询产品(已发布)大纲,并更新为废止状态 * * @param limsTestingOutline */ private void queryOldOutline(LimsTestingOutline limsTestingOutline){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(LimsTestingOutline::getCode,limsTestingOutline.getCode()); //已发布 queryWrapper.lambda().eq(LimsTestingOutline::getStatus,1); List list = limsTestingOutlineService.list(queryWrapper); list.forEach(item -> { item.setStatus(2); limsTestingOutlineService.updateById(item); }); } /** * 复制大纲生成新版本 */ private void generateNewVersion(LimsTestingOutline limsTestingOutline) { //根据id查询子项数据 String oid = limsTestingOutline.getId(); //1.查询cat QueryWrapper catWrapper = new QueryWrapper<>(); catWrapper.lambda().eq(LimsTestingCategory::getOutlineId, oid); List catList = limsTestingCategoryService.list(catWrapper); List catIds = catList.stream().map(item -> item.getId()).collect(Collectors.toList()); if(catIds.isEmpty()){ catIds.add("empty"); } //2.查询typ QueryWrapper typWrapper = new QueryWrapper<>(); typWrapper.lambda().in(LimsTestingType::getCategoryId, catIds); List typList = limsTestingTypeService.list(typWrapper); List typIds = typList.stream().map(item -> item.getId()).collect(Collectors.toList()); if(typIds.isEmpty()){ typIds.add("empty"); } //3.查询itm QueryWrapper itmWrapper = new QueryWrapper<>(); itmWrapper.lambda().in(LimsTestingItem::getTypeId, typIds); List itmList = limsTestingItemService.list(itmWrapper); //List itmIds = itmList.stream().map(item -> item.getId()).collect(Collectors.toList()); LimsTestingOutline outline = new LimsTestingOutline(); BeanUtils.copyProperties(limsTestingOutline, outline); //4.拷贝生成新的大纲 outline.setId(null); //设置大纲状态为 0-新建 outline.setStatus(0); outline.setCreateTime(null); outline.setCreateBy(null); outline.setUpdateTime(null); outline.setUpdateBy(null); if(outline.getVer() ==null ){ outline.setVer(1); }else { outline.setVer(outline.getVer()+1); } limsTestingOutlineService.save(outline); //5.生成并保存新大纲明细数据 cat typ itm generateAndSave(catList, typList, itmList,outline.getId()); } /** * @param catList * @param typList * @param itmList * @param outlineId 拷贝后的 新大纲id */ private void generateAndSave(List catList, List typList, List itmList,String outlineId) { //entity转DTO List catDTOList = catList.stream().map(item -> { LimsTestingCategoryDTO dto = new LimsTestingCategoryDTO(); BeanUtils.copyProperties(item, dto); return dto; }).collect(Collectors.toList()); List typDTOList = typList.stream().map(item -> { LimsTestingTypeDTO dto = new LimsTestingTypeDTO(); BeanUtils.copyProperties(item, dto); return dto; }).collect(Collectors.toList()); List itmDTOList = itmList.stream().map(item -> { LimsTestingItemDTO dto = new LimsTestingItemDTO(); BeanUtils.copyProperties(item, dto); return dto; }).collect(Collectors.toList()); //建立父子关系 catDTOList.stream().forEach(cat->{ typDTOList.stream().forEach(typ->{ if(cat.getId().equals(typ.getCategoryId())){ cat.getChildren().add(typ); itmDTOList.forEach(itm->{ if(typ.getId().equals(itm.getTypeId())){ typ.getChildren().add(itm); } }); } }); }); //执行拷贝 catDTOList.stream().forEach(cat->{ cat.setId(null); cat.setCreateTime(null); cat.setCreateBy(null); cat.setUpdateTime(null); cat.setUpdateBy(null); //赋值新大纲ID cat.setOutlineId(outlineId); limsTestingCategoryService.save(cat); if(cat.getChildren().size()>0){ List typeDTOList = cat.getChildren(); typeDTOList.stream().forEach(typ->{ typ.setId(null); typ.setCreateTime(null); typ.setCreateBy(null); typ.setUpdateTime(null); typ.setUpdateBy(null); typ.setCategoryId(cat.getId()); limsTestingTypeService.save(typ); if(typ.getChildren().size()>0){ List itemDTOList = typ.getChildren(); itemDTOList.stream().forEach(itm->{ itm.setId(null); itm.setCreateTime(null); itm.setCreateBy(null); itm.setUpdateTime(null); itm.setUpdateBy(null); itm.setTypeId(typ.getId()); limsTestingItemService.save(itm); }); } }); } }); } /** * 通过id删除 * * @param id * @return */ @AutoLog(value = "lims_testing_outline-通过id删除") @ApiOperation(value = "lims_testing_outline-通过id删除", notes = "lims_testing_outline-通过id删除") @DeleteMapping(value = "/delete") @Transactional public Result delete(@RequestParam(name = "id", required = true) String id) { limsTestingOutlineService.removeById(id); //删除大纲的同时需要删除大纲明细数据 //1.cat QueryWrapper catWrapper = new QueryWrapper<>(); catWrapper.lambda().eq(LimsTestingCategory::getOutlineId,id); List catList = limsTestingCategoryService.list(catWrapper); List catIds = catList.stream().map(item -> item.getId()).collect(Collectors.toList()); if(catIds.isEmpty()){ catIds.add("empty"); } //2.typ QueryWrapper typWrapper = new QueryWrapper<>(); typWrapper.lambda().in(LimsTestingType::getCategoryId,catIds); List typList = limsTestingTypeService.list(typWrapper); List typIds = typList.stream().map(item -> item.getId()).collect(Collectors.toList()); if(typIds.isEmpty()){ typIds.add("empty"); } //3.itm QueryWrapper itmWrapper = new QueryWrapper<>(); itmWrapper.lambda().in(LimsTestingItem::getTypeId,typIds); List itmList = limsTestingItemService.list(itmWrapper); List itmIds = itmList.stream().map(item -> item.getId()).collect(Collectors.toList()); limsTestingCategoryService.removeByIds(catIds); limsTestingTypeService.removeByIds(typIds); limsTestingItemService.removeByIds(itmIds); return Result.OK("删除成功!"); } /** * 批量删除 * * @param ids * @return */ @AutoLog(value = "lims_testing_outline-批量删除") @ApiOperation(value = "lims_testing_outline-批量删除", notes = "lims_testing_outline-批量删除") @DeleteMapping(value = "/deleteBatch") public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { this.limsTestingOutlineService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } /** * 通过id查询 * * @param id * @return */ @AutoLog(value = "lims_testing_outline-通过id查询") @ApiOperation(value = "lims_testing_outline-通过id查询", notes = "lims_testing_outline-通过id查询") @GetMapping(value = "/queryById") public Result queryById(@RequestParam(name = "id", required = true) String id) { LimsTestingOutline limsTestingOutline = limsTestingOutlineService.getById(id); if (limsTestingOutline == null) { return Result.error("未找到对应数据"); } return Result.OK(limsTestingOutline); } /** * 导出excel * * @param request * @param limsTestingOutline */ @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, LimsTestingOutline limsTestingOutline) { return super.exportXls(request, limsTestingOutline, LimsTestingOutline.class, "lims_testing_outline"); } /** * 通过excel导入数据 * * @param request * @param response * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, LimsTestingOutline.class); } }