package org.dromara.eims.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.eims.domain.EimsEqu; import org.dromara.eims.domain.EimsEquType; import org.dromara.eims.domain.EimsInventoryDetail; import org.dromara.eims.mapper.EimsEquMapper; import org.dromara.eims.mapper.EimsEquTypeMapper; import org.dromara.eims.mapper.EimsInventoryDetailMapper; import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsInventoryBo; import org.dromara.eims.domain.vo.EimsInventoryVo; import org.dromara.eims.domain.EimsInventory; import org.dromara.eims.mapper.EimsInventoryMapper; import org.dromara.eims.service.IEimsInventoryService; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Collection; import java.util.stream.Collectors; /** * 盘点Service业务层处理 * * @author zhuguifei * @date 2025-01-16 */ @RequiredArgsConstructor @Service public class EimsInventoryServiceImpl implements IEimsInventoryService { private final EimsInventoryMapper baseMapper; private final EimsInventoryDetailMapper detailMapper; private final EimsEquTypeMapper equTypeMapper; private final EimsEquMapper equMapper; /** * 查询盘点 * * @param inventoryId 主键 * @return 盘点 */ @Override public EimsInventoryVo queryById(Long inventoryId) { EimsInventoryVo vo = baseMapper.selectVoById(inventoryId); if (StringUtils.isNotEmpty(vo.getEquTypes())) { List numberList = Arrays.stream(vo.getEquTypes().split(",")) .map(Long::parseLong) .toList(); vo.setEquTypesList(numberList); } if (StringUtils.isNotEmpty(vo.getEquStatus())) { List list = Arrays.asList(vo.getEquStatus().split(",")); vo.setEquStatusList(list); } return vo; } /** * 分页查询盘点列表 * * @param bo 查询条件 * @param pageQuery 分页参数 * @return 盘点分页列表 */ @Override public TableDataInfo queryPageList(EimsInventoryBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } /** * 查询符合条件的盘点列表 * * @param bo 查询条件 * @return 盘点列表 */ @Override public List queryList(EimsInventoryBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(EimsInventoryBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getInventoryCode()), EimsInventory::getInventoryCode, bo.getInventoryCode()); lqw.like(StringUtils.isNotBlank(bo.getInventoryName()), EimsInventory::getInventoryName, bo.getInventoryName()); lqw.eq(bo.getInventoryUser() != null, EimsInventory::getInventoryUser, bo.getInventoryUser()); lqw.between(params.get("beginStartDate") != null && params.get("endStartDate") != null, EimsInventory::getStartDate, params.get("beginStartDate"), params.get("endStartDate")); lqw.between(params.get("beginEndDate") != null && params.get("endEndDate") != null, EimsInventory::getEndDate, params.get("beginEndDate"), params.get("endEndDate")); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsInventory::getStatus, bo.getStatus()); lqw.between(params.get("beginCreateBy") != null && params.get("endCreateBy") != null, EimsInventory::getCreateBy, params.get("beginCreateBy"), params.get("endCreateBy")); lqw.eq(bo.getUserDept() != null, EimsInventory::getUserDept, bo.getUserDept()); lqw.eq(bo.getInventoryUser() != null, EimsInventory::getInventoryUser, bo.getInventoryUser()); // 按创建时间倒序 lqw.orderByDesc(EimsInventory::getCreateTime); return lqw; } /** * 新增盘点 * * @param bo 盘点 * @return 是否新增成功 */ @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(EimsInventoryBo bo) { EimsInventory add = MapstructUtils.convert(bo, EimsInventory.class); List equTypesList = bo.getEquTypesList(); if (equTypesList != null && !equTypesList.isEmpty()) { String result = String.join(",", equTypesList); if (add != null) { add.setEquTypes(result); } } List equStatusList = bo.getEquStatusList(); if (equStatusList != null && !equStatusList.isEmpty()) { String result = String.join(",", equStatusList); if (add != null) { add.setEquStatus(result); } } validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setInventoryId(add.getInventoryId()); } //1.查询类型下所有设备 QueryWrapper equQueryWrapper = new QueryWrapper<>(); equQueryWrapper.lambda().in(CollUtil.isNotEmpty(equTypesList), EimsEqu::getEquTypeId, equTypesList); equQueryWrapper.lambda().in(CollUtil.isNotEmpty(equStatusList), EimsEqu::getStatus, equStatusList); List equList = equMapper.selectList(equQueryWrapper); //2.新增盘点明细 for (EimsEqu equ : equList) { EimsInventoryDetail detail = new EimsInventoryDetail(); detail.setEquId(equ.getEquId()); detail.setInventoryId(add.getInventoryId()); //设置为未盘点 detail.setStatus("0"); detailMapper.insert(detail); } return flag; } /** * 修改盘点 * * @param bo 盘点 * @return 是否修改成功 */ @Override public Boolean updateByBo(EimsInventoryBo bo) { EimsInventory update = MapstructUtils.convert(bo, EimsInventory.class); if (bo.getEquTypesList() != null && !bo.getEquTypesList().isEmpty()) { String result = String.join(",", bo.getEquTypesList()); if (update != null) { update.setEquTypes(result); } } if (bo.getEquStatusList() != null && !bo.getEquStatusList().isEmpty()) { String result = String.join(",", bo.getEquStatusList()); if (update != null) { update.setEquStatus(result); } } validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(EimsInventory entity) { //TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除盘点信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } }