package com.gkhy.exam.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.common.constant.UserConstant; import com.gkhy.exam.common.exception.ApiException; import com.gkhy.exam.common.utils.PageUtils; import com.gkhy.exam.common.utils.SecurityUtils; import com.gkhy.exam.system.domain.Material; import com.gkhy.exam.system.domain.OutsourcedUnqualified; import com.gkhy.exam.system.domain.WarehousingRecord; import com.gkhy.exam.system.domain.WarehousingRecordDetails; import com.gkhy.exam.system.mapper.MaterialMapper; import com.gkhy.exam.system.mapper.WarehousingRecordDetailsMapper; import com.gkhy.exam.system.mapper.WarehousingRecordMapper; import com.gkhy.exam.system.service.WarehousingRecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; /** *

* 出入库记录主表 服务实现类 *

* * @author hh * @since 2025-08-13 09:16:37 */ @Service public class WarehousingRecordServiceImpl extends ServiceImpl implements WarehousingRecordService { @Autowired private WarehousingRecordMapper warehousingRecordMapper; @Autowired private WarehousingRecordDetailsMapper warehousingRecordDetailsMapper; @Autowired private MaterialMapper materialMapper; @Override public CommonPage selectWarehousingRecordList(WarehousingRecord warehousingRecord) { PageUtils.startPage(); List warehousingRecords = warehousingRecordMapper.selectWarehousingRecordList(warehousingRecord); warehousingRecords.stream().forEach(item -> { List de = warehousingRecordDetailsMapper.selectList( new LambdaQueryWrapper<>(WarehousingRecordDetails.class).eq(WarehousingRecordDetails::getRecordId, item.getId()) .eq(WarehousingRecordDetails::getDelFlag, UserConstant.ENABLE).orderByAsc(WarehousingRecordDetails::getCreateTime)); item.setWarehousingRecordDetails(de); }); return CommonPage.restPage(warehousingRecords); } @Override public CommonPage selectWarehousingRecordDetailList(WarehousingRecord warehousingRecord) { PageUtils.startPage(); List warehousingRecords = warehousingRecordDetailsMapper.selectWarehousingRecordDetailList(warehousingRecord); return CommonPage.restPage(warehousingRecords); } @Override @Transactional public CommonResult saveWarehousingRecord(WarehousingRecord warehousingRecord) { List warehousingRecordDetails = warehousingRecord.getWarehousingRecordDetails(); if (ObjectUtil.isEmpty(warehousingRecordDetails)){ return CommonResult.validateFailed("请选择入库记录详情"); } int i = 0; if (warehousingRecord.getId() == null){ warehousingRecord.setCreateTime(LocalDateTime.now()); warehousingRecord.setCreateBy(SecurityUtils.getUsername()); i = warehousingRecordMapper.insert(warehousingRecord); }else { warehousingRecord.setUpdateTime(LocalDateTime.now()); warehousingRecord.setUpdateBy(SecurityUtils.getUsername()); i = warehousingRecordMapper.updateById(warehousingRecord); } if (i > 0){ batchSave(warehousingRecord.getId(), warehousingRecordDetails,warehousingRecord.getDelDetails(),warehousingRecord.getMaterialId(),warehousingRecord.getInventory()); } return CommonResult.success(); } private void batchSave(Long id, List warehousingRecordDetails,List delDetails,Long materialId,int inventory) { Material material = materialMapper.selectById(materialId); if (ObjectUtil.isEmpty(material)){ throw new ApiException("物料不存在"); } warehousingRecordDetails.stream().filter(item -> item.getId() == null).forEach(item -> { item.setRecordId(id); item.setCreateTime(LocalDateTime.now()); item.setCreateBy(SecurityUtils.getUsername()); warehousingRecordDetailsMapper.insert(item); }); warehousingRecordDetails.stream().filter(item -> item.getId() != null).forEach(item -> { item.setRecordId(id); item.setUpdateTime(LocalDateTime.now()); item.setUpdateBy(SecurityUtils.getUsername()); warehousingRecordDetailsMapper.updateById(item); }); if (ObjectUtil.isNotEmpty(delDetails)){ warehousingRecordDetailsMapper.update(new WarehousingRecordDetails(), new LambdaUpdateWrapper().in(WarehousingRecordDetails::getId, delDetails) .set(WarehousingRecordDetails::getDelFlag, UserConstant.DEPT_DISABLE) .set(WarehousingRecordDetails::getUpdateTime, LocalDateTime.now()) .set(WarehousingRecordDetails::getUpdateBy, SecurityUtils.getUsername())); } materialMapper.update(new Material(), new LambdaUpdateWrapper().eq(Material::getId, materialId) .set(Material::getInventory, inventory) .set(Material::getUpdateTime, LocalDateTime.now()) .set(Material::getUpdateBy, SecurityUtils.getUsername())); } @Override public CommonResult getWarehousingRecord(Long id) { WarehousingRecord warehousingRecord = warehousingRecordMapper.selectById(id); List de = warehousingRecordDetailsMapper.selectList( new LambdaQueryWrapper<>(WarehousingRecordDetails.class).eq(WarehousingRecordDetails::getRecordId, id) .eq(WarehousingRecordDetails::getDelFlag, UserConstant.ENABLE).orderByAsc(WarehousingRecordDetails::getCreateTime)); warehousingRecord.setWarehousingRecordDetails(de); return CommonResult.success(warehousingRecord); } @Override @Transactional public CommonResult deletedWarehousingRecord(Long id) { warehousingRecordMapper.update(new WarehousingRecord(), new LambdaUpdateWrapper().eq(WarehousingRecord::getId, id) .set(WarehousingRecord::getDelFlag, UserConstant.DEPT_DISABLE) .set(WarehousingRecord::getUpdateTime, LocalDateTime.now()) .set(WarehousingRecord::getUpdateBy, SecurityUtils.getUsername())); warehousingRecordDetailsMapper.update(new WarehousingRecordDetails(), new LambdaUpdateWrapper().eq(WarehousingRecordDetails::getRecordId, id) .set(WarehousingRecordDetails::getDelFlag, UserConstant.DEPT_DISABLE) .set(WarehousingRecordDetails::getUpdateTime, LocalDateTime.now()) .set(WarehousingRecordDetails::getUpdateBy, SecurityUtils.getUsername())); return CommonResult.success(); } }