package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.LocAreaMatsParam; import com.vincent.rsf.server.manager.entity.LocTypeRela; import com.vincent.rsf.server.manager.entity.Matnr; import com.vincent.rsf.server.manager.mapper.LocAreaMatRelaMapper; import com.vincent.rsf.server.manager.entity.LocAreaMatRela; import com.vincent.rsf.server.manager.service.LocAreaMatRelaService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.service.LocService; import com.vincent.rsf.server.manager.service.LocTypeRelaService; import com.vincent.rsf.server.manager.service.MatnrService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service("locAreaMatRelaService") public class LocAreaMatRelaServiceImpl extends ServiceImpl implements LocAreaMatRelaService { @Autowired private MatnrService matnrService; @Autowired private LocService locService; @Autowired private LocTypeRelaService locTypeRelaService; /** * @author Ryan * @description 库区绑定物料 * @param * @return * @time 2025/3/22 11:32 */ @Override public R binMatnrs(LocAreaMatsParam param) { List matnrIds = new ArrayList<>(); if (!Objects.isNull(param.getGroupId())) { List list = matnrService.list(new LambdaQueryWrapper().eq(Matnr::getGroupId, param.getGroupId()).select(Matnr::getId, Matnr::getGroupId)); if (list.isEmpty()) { throw new CoolException("物料分组没有物料"); } matnrIds.addAll(list); } if (!param.getMatnrId().isEmpty()) { List matnrs = matnrService.list(new LambdaQueryWrapper() .select(Matnr::getId, Matnr::getGroupId) .in(Matnr::getId, param.getMatnrId())); if (matnrs.isEmpty()) { throw new CoolException("物料不存在!!"); } matnrIds.addAll(matnrs); } List locAreaMatRelas = new ArrayList<>(); if (!param.getTypeId().isEmpty()) { for (Long typeId : param.getTypeId()) { List list = locTypeRelaService.list(new LambdaQueryWrapper() .select(LocTypeRela::getLocId).eq(LocTypeRela::getTypeId, typeId)); if (list.isEmpty()) { continue; } List longs = list.stream().map(LocTypeRela::getLocId).collect(Collectors.toList()); for (Long locId : longs) { for (Matnr matnrId : matnrIds) { LocAreaMatRela locAreaMatRela = new LocAreaMatRela(); locAreaMatRela .setAreaId(param.getAreaId()) .setLocId(locId) .setLocTypeId(typeId) .setMatnrId(matnrId.getId()) .setGroupId(matnrId.getGroupId()); locAreaMatRelas.add(locAreaMatRela); } } } } if (!param.getLocId().isEmpty()) { List list = locTypeRelaService.list(new LambdaQueryWrapper().in(LocTypeRela::getLocId, param.getTypeId()).select(LocTypeRela::getTypeId, LocTypeRela::getLocId)); if (list.isEmpty()) { throw new CoolException("数据错误:库位未绑定库位类型!!"); } for (LocTypeRela locTypeRela : list) { for (Matnr matnr : matnrIds) { LocAreaMatRela locAreaMatRela = new LocAreaMatRela(); locAreaMatRela .setAreaId(param.getAreaId()) .setLocId(locTypeRela.getLocId()) .setLocTypeId(locTypeRela.getTypeId()) .setMatnrId(matnr.getId()) .setGroupId(matnr.getGroupId()); locAreaMatRelas.add(locAreaMatRela); } } } if (!this.saveBatch(locAreaMatRelas)) { throw new CoolException("物料库位类型绑定失败!!"); } return R.ok("绑定成功!!"); } }