package org.dromara.eims.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.utils.MapstructUtils; 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.satoken.utils.LoginHelper; import org.dromara.eims.domain.EimsEquType; import org.dromara.eims.domain.EimsFixture; import org.dromara.eims.domain.vo.EimsEquTypeVo; import org.dromara.eims.domain.vo.EimsFixtureVo; import org.dromara.eims.mapper.EimsFixtureMapper; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.service.ISysDeptService; import org.springframework.stereotype.Service; import org.dromara.eims.domain.bo.EimsFixtureBorrowBo; import org.dromara.eims.domain.vo.EimsFixtureBorrowVo; import org.dromara.eims.domain.EimsFixtureBorrow; import org.dromara.eims.mapper.EimsFixtureBorrowMapper; import org.dromara.eims.service.IEimsFixtureBorrowService; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; /** * 工具借用Service业务层处理 * * @author zhuguifei * @date 2025-02-18 */ @RequiredArgsConstructor @Service public class EimsFixtureBorrowServiceImpl implements IEimsFixtureBorrowService { private final EimsFixtureBorrowMapper baseMapper; private final EimsFixtureMapper fixtureMapper; private final SysDeptMapper sysDeptMapper; /** * 查询工具借用 * * @param id 主键 * @return 工具借用 */ @Override public EimsFixtureBorrowVo queryById(Long id){ return baseMapper.selectVoById(id); } /** * 分页查询工具借用列表 * * @param bo 查询条件 * @param pageQuery 分页参数 * @return 工具借用分页列表 */ @Override public TableDataInfo queryPageList(EimsFixtureBorrowBo 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(EimsFixtureBorrowBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper buildQueryWrapper(EimsFixtureBorrowBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getFixtureId() != null, EimsFixtureBorrow::getFixtureId, bo.getFixtureId()); lqw.like(StringUtils.isNotBlank(bo.getFixtureName()), EimsFixtureBorrow::getFixtureName, bo.getFixtureName()); lqw.eq(bo.getBorrowUser() != null, EimsFixtureBorrow::getBorrowUser, bo.getBorrowUser()); lqw.eq(bo.getAgentUser() != null, EimsFixtureBorrow::getAgentUser, bo.getAgentUser()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), EimsFixtureBorrow::getStatus, bo.getStatus()); lqw.between(params.get("beginBorrowTime") != null && params.get("endBorrowTime") != null, EimsFixtureBorrow::getBorrowTime ,params.get("beginBorrowTime"), params.get("endBorrowTime")); lqw.between(params.get("beginPlanReturnTime") != null && params.get("endPlanReturnTime") != null, EimsFixtureBorrow::getPlanReturnTime ,params.get("beginPlanReturnTime"), params.get("endPlanReturnTime")); lqw.eq(bo.getReturnTime() != null, EimsFixtureBorrow::getReturnTime, bo.getReturnTime()); lqw.eq(StringUtils.isNotBlank(bo.getBorrowReason()), EimsFixtureBorrow::getBorrowReason, bo.getBorrowReason()); /** * 查询部门下所有子部门 */ if (bo.getBorrowDept() != null ) { List allDescendantIds = getAllDescendantIds(bo.getBorrowDept()); lqw.in(bo.getBorrowDept() != null ,EimsFixtureBorrow::getBorrowDept, allDescendantIds); } return lqw; } /** * 根据id,获取所有后代id * @param rootId * @return */ public List getAllDescendantIds(Long rootId) { List result = new ArrayList<>(); result.add(rootId); collectDescendants(rootId, result); return result; } private void collectDescendants(Long currentId, List collector) { QueryWrapper sysDeptWrapper = new QueryWrapper<>(); sysDeptWrapper.lambda().eq(SysDept::getParentId, currentId); List children = sysDeptMapper.selectVoList(sysDeptWrapper); if (children != null && !children.isEmpty()) { for (SysDeptVo child : children) { Long childId = child.getDeptId(); collector.add(childId); collectDescendants(childId, collector); } } } /** * 新增工具借用 * * @param bo 工具借用 * @return 是否新增成功 */ @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(EimsFixtureBorrowBo bo) { EimsFixtureBorrow add = MapstructUtils.convert(bo, EimsFixtureBorrow.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); //同时更新工具台账表中借用人 EimsFixtureVo eimsFixtureVo = fixtureMapper.selectVoById(bo.getFixtureId()); eimsFixtureVo.setBorrowUser(LoginHelper.getUserId()); //设置工具台账状态为借用 eimsFixtureVo.setBorrowStatus("1");//TODO 保持字典数据一致fixture_borrow_status //更新工具台账当前借用记录id eimsFixtureVo.setCurBorrowId(add.getId()); eimsFixtureVo.setBorrowDept(LoginHelper.getDeptId()); EimsFixture fixture = MapstructUtils.convert(eimsFixtureVo, EimsFixture.class); fixtureMapper.updateById(fixture); } return flag; } /** * 修改工具借用 * * @param bo 工具借用 * @return 是否修改成功 */ @Override @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(EimsFixtureBorrowBo bo) { EimsFixtureBorrow update = MapstructUtils.convert(bo, EimsFixtureBorrow.class); validEntityBeforeSave(update); //设置工具台账状态为归还 TODO 保持字典数据一致fixture_borrow_record_status if(bo.getStatus().equals("1")){ EimsFixtureVo eimsFixtureVo = fixtureMapper.selectVoById(bo.getFixtureId()); //设置工具台账状态为归还 eimsFixtureVo.setBorrowStatus("0"); //TODO 保持字典数据一致fixture_borrow_status EimsFixture fixture = MapstructUtils.convert(eimsFixtureVo, EimsFixture.class); fixtureMapper.updateById(fixture); } return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(EimsFixtureBorrow entity){ //TODO 做一些数据校验,如唯一约束 } /** * 校验并批量删除工具借用信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 * @return 是否删除成功 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } }