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<LocAreaMatRelaMapper, LocAreaMatRela> 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<Matnr> matnrIds = new ArrayList<>();
|
if (!Objects.isNull(param.getGroupId())) {
|
List<Matnr> list = matnrService.list(new LambdaQueryWrapper<Matnr>().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<Matnr> matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>()
|
.select(Matnr::getId, Matnr::getGroupId)
|
.in(Matnr::getId, param.getMatnrId()));
|
if (matnrs.isEmpty()) {
|
throw new CoolException("物料不存在!!");
|
}
|
matnrIds.addAll(matnrs);
|
}
|
List<LocAreaMatRela> locAreaMatRelas = new ArrayList<>();
|
if (!Objects.isNull(param.getTypeId()) && !param.getTypeId().isEmpty()) {
|
for (Long typeId : param.getTypeId()) {
|
List<LocTypeRela> list = locTypeRelaService.list(new LambdaQueryWrapper<LocTypeRela>()
|
.select(LocTypeRela::getLocId).eq(LocTypeRela::getTypeId, typeId));
|
if (list.isEmpty()) {
|
continue;
|
}
|
List<Long> 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<LocTypeRela> list = locTypeRelaService.list(new LambdaQueryWrapper<LocTypeRela>()
|
.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<String, Object> 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<LocAreaMatRela>()
|
.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<String, Object> param) {
|
if (Objects.isNull(param)) {
|
throw new CoolException("库位类型ID不能为空!!");
|
}
|
if (!this.remove(new LambdaQueryWrapper<LocAreaMatRela>()
|
.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<MatnrGroup> getAllGroups(Long id) {
|
if (Objects.isNull(id)) {
|
throw new CoolException("主单ID不能为空!!");
|
}
|
List<LocAreaMatRela> locAreaMatRelas = this.list(new LambdaQueryWrapper<LocAreaMatRela>().eq(LocAreaMatRela::getAreaMatId, id));
|
if (locAreaMatRelas.isEmpty()) {
|
return new ArrayList<>();
|
}
|
List<Long> longList = locAreaMatRelas.stream().map(LocAreaMatRela::getGroupId).collect(Collectors.toList());
|
List<MatnrGroup> groups = matnrGroupService.list(new LambdaQueryWrapper<MatnrGroup>().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<LocType> getAllLocType(Long id) {
|
if (Objects.isNull(id)) {
|
throw new CoolException("主单ID不能为空!!");
|
}
|
List<LocAreaMatRela> locAreaMatRelas = this.list(new LambdaQueryWrapper<LocAreaMatRela>().eq(LocAreaMatRela::getAreaMatId, id));
|
if (locAreaMatRelas.isEmpty()) {
|
return new ArrayList<>();
|
}
|
List<Long> longList = locAreaMatRelas.stream().map(LocAreaMatRela::getLocTypeId).collect(Collectors.toList());
|
List<LocType> list = locTypeService.list(new LambdaQueryWrapper<LocType>().in(LocType::getId, longList));
|
if (list.isEmpty()) {
|
return new ArrayList<>();
|
}
|
return list;
|
}
|
}
|