石墨消解仪后端服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
3.4 KiB

  1. package com.iflytop.gd.app.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.iflytop.gd.app.model.vo.OresCraftsListVO;
  8. import com.iflytop.gd.infrastructure.repository.base.BasePageQuery;
  9. import com.iflytop.gd.app.mapper.CraftsMapper;
  10. import com.iflytop.gd.app.mapper.OresMapper;
  11. import com.iflytop.gd.app.model.entity.Crafts;
  12. import com.iflytop.gd.app.model.entity.Ores;
  13. import lombok.RequiredArgsConstructor;
  14. import org.springframework.stereotype.Service;
  15. import java.util.Arrays;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.stream.Collectors;
  19. /**
  20. * 矿石业务实现类
  21. */
  22. @Service
  23. @RequiredArgsConstructor
  24. public class OresService extends ServiceImpl<OresMapper, Ores> {
  25. private final CraftsMapper craftsMapper;
  26. public IPage<OresCraftsListVO> getPage(BasePageQuery pageQuery) {
  27. // 构建分页对象
  28. Page<Ores> oresPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
  29. // 分页查询矿石数据
  30. IPage<Ores> oresIPage = this.baseMapper.selectPage(oresPage, new QueryWrapper<Ores>());
  31. // 获取矿石ID列表
  32. List<Long> oresIds = oresIPage.getRecords().stream()
  33. .map(Ores::getId)
  34. .collect(Collectors.toList());
  35. // 查询对应的工艺数据
  36. QueryWrapper<Crafts> craftsQueryWrapper = new QueryWrapper<>();
  37. craftsQueryWrapper.in("ores_id", oresIds);
  38. List<Crafts> craftsList = craftsMapper.selectList(craftsQueryWrapper);
  39. // 将工艺数据按矿石ID分组
  40. Map<Long, List<Crafts>> craftsMap = craftsList.stream()
  41. .collect(Collectors.groupingBy(Crafts::getOresId));
  42. // 转换成 OresCraftsListVO
  43. List<OresCraftsListVO> oresCraftsList = oresIPage.getRecords().stream().map(ores -> {
  44. OresCraftsListVO oresCraftsListVO = new OresCraftsListVO();
  45. oresCraftsListVO.setId(ores.getId());
  46. oresCraftsListVO.setOresName(ores.getName());
  47. oresCraftsListVO.setCreateTime(ores.getCreateTime());
  48. oresCraftsListVO.setUpdateTime(ores.getUpdateTime());
  49. // 设置该矿石的工艺列表
  50. List<Crafts> crafts = craftsMap.get(ores.getId());
  51. oresCraftsListVO.setCraftsList(crafts);
  52. return oresCraftsListVO;
  53. }).collect(Collectors.toList());
  54. // 将转换后的分页数据放入新的分页对象
  55. Page<OresCraftsListVO> resultPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
  56. resultPage.setTotal(oresIPage.getTotal());
  57. resultPage.setRecords(oresCraftsList);
  58. return resultPage;
  59. }
  60. public Ores findByName(String name) {
  61. return this.getOne(new LambdaQueryWrapper<Ores>().eq(Ores::getName, name));
  62. }
  63. public boolean addOres(Ores ores) {
  64. return this.save(ores);
  65. }
  66. public boolean updateOres(Ores ores) {
  67. return this.updateById(ores);
  68. }
  69. public boolean deleteOres(String idsStr) {
  70. List<Long> ids = Arrays.stream(idsStr.split(","))
  71. .map(Long::parseLong)
  72. .collect(Collectors.toList());
  73. return this.removeByIds(ids);
  74. }
  75. }