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.*; import com.vincent.rsf.server.manager.mapper.LocAreaMatRelaMapper; import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; 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 MatnrGroupService matnrGroupService; @Autowired private LocTypeRelaService locTypeRelaService; @Autowired private LocTypeService locTypeService; /** * @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 (!Objects.isNull(param.getMatnrId()) && !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 (!Objects.isNull(param.getTypeId()) && !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 .setAreaMatId(param.getAreaMatId()) // .setAreaId(param.getAreaId()) .setLocId(locId) .setLocTypeId(typeId) .setMatnrId(matnrId.getId()) .setGroupId(matnrId.getGroupId()); locAreaMatRelas.add(locAreaMatRela); } } } } if (!Objects.isNull(param.getLocId()) && !param.getLocId().isEmpty()) { List list = locTypeRelaService.list(new LambdaQueryWrapper() .in(LocTypeRela::getLocId, param.getLocId()) .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()) .setAreaMatId(param.getAreaMatId()) .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("绑定成功!!"); } /** * @author Ryan * @description 移除物料分组下绑定关系 * @param * @return * @time 2025/3/24 13:33 */ @Override public Boolean removeByGroupId(Map param) { if (Objects.isNull(param)) { throw new CoolException("物料分组ID不能为空!!"); } if (!StringUtils.isBlank(param.get("groupId").toString())) { throw new CoolException("物料分类不能为空!!"); } if (!StringUtils.isBlank(param.get("areaMatId").toString())) { throw new CoolException("主单ID不能为空!!"); } if (!this.remove(new LambdaQueryWrapper() .eq(LocAreaMatRela::getAreaMatId, Long.parseLong(param.get("areaMatId").toString())) .eq(LocAreaMatRela::getGroupId, Long.parseLong(param.get("groupId").toString())))) { throw new CoolException("删除失败!!"); } return true; } /** * @author Ryan * @description 移除库位类型绑定关系 * @param * @return * @time 2025/3/24 13:32 */ @Override public boolean removeByLocType(Map param) { if (Objects.isNull(param)) { throw new CoolException("库位类型ID不能为空!!"); } if (!this.remove(new LambdaQueryWrapper() .eq(LocAreaMatRela::getAreaMatId, Long.parseLong(param.get("areaMatId").toString())) .eq(LocAreaMatRela::getLocTypeId, Long.parseLong(param.get("typeId").toString())))) { throw new CoolException("删除失败!!"); } return true; } /** * @author Ryan * @description 获取物料分组 * @param * @return * @time 2025/3/24 13:32 */ @Override public List getAllGroups(Long id) { if (Objects.isNull(id)) { throw new CoolException("主单ID不能为空!!"); } List locAreaMatRelas = this.list(new LambdaQueryWrapper().eq(LocAreaMatRela::getAreaMatId, id)); if (locAreaMatRelas.isEmpty()) { return new ArrayList<>(); } List longList = locAreaMatRelas.stream().map(LocAreaMatRela::getGroupId).collect(Collectors.toList()); List groups = matnrGroupService.list(new LambdaQueryWrapper().in(MatnrGroup::getId, longList)); if (groups.isEmpty()) { return new ArrayList<>(); } return groups; } /** * @author Ryan * @description 获取绑定库位物料 * @param * @return * @time 2025/3/24 13:36 */ @Override public List getAllLocType(Long id) { if (Objects.isNull(id)) { throw new CoolException("主单ID不能为空!!"); } List locAreaMatRelas = this.list(new LambdaQueryWrapper().eq(LocAreaMatRela::getAreaMatId, id)); if (locAreaMatRelas.isEmpty()) { return new ArrayList<>(); } List longList = locAreaMatRelas.stream().map(LocAreaMatRela::getLocTypeId).collect(Collectors.toList()); List list = locTypeService.list(new LambdaQueryWrapper().in(LocType::getId, longList)); if (list.isEmpty()) { return new ArrayList<>(); } return list; } }