package com.vincent.rsf.server.api.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.vincent.rsf.framework.common.Cools;
|
import com.vincent.rsf.framework.common.R;
|
import com.vincent.rsf.framework.exception.CoolException;
|
import com.vincent.rsf.server.api.entity.params.PdaGeneralParam;
|
import com.vincent.rsf.server.api.service.InBoundService;
|
import com.vincent.rsf.server.api.utils.LocUtils;
|
import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams;
|
import com.vincent.rsf.server.manager.entity.*;
|
import com.vincent.rsf.server.manager.enums.*;
|
import com.vincent.rsf.server.manager.service.*;
|
import com.vincent.rsf.server.manager.utils.LocManageUtil;
|
import com.vincent.rsf.server.system.constant.SerialRuleCode;
|
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* PDA入库操作Service实现类
|
*/
|
@Slf4j
|
@Service
|
public class InBoundServiceImpl implements InBoundService {
|
@Autowired
|
private DeviceSiteService deviceSiteService;
|
@Autowired
|
private DeviceBindService deviceBindService;
|
@Autowired
|
private WarehouseAreasService warehouseAreasService;
|
@Autowired
|
private BasContainerService basContainerService;
|
@Autowired
|
private BasStationService basStationService;
|
@Autowired
|
private LocService locService;
|
@Autowired
|
private TaskService taskService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public synchronized R generateTasks(PdaGeneralParam param, Long loginUserId) {
|
|
DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>().eq(DeviceSite::getSite,param.getTransferStationNo()).orderByDesc(DeviceSite::getId),false);
|
if (Objects.isNull(deviceSite)) {
|
throw new CoolException("站点不存在!!");
|
}
|
DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(deviceSite.getSite()));
|
if (Cools.isEmpty(deviceBind)) {
|
throw new CoolException("库位规则未知");
|
}
|
WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId());
|
if (Cools.isEmpty(warehouseArea)) {
|
throw new CoolException("未找到所属库区信息");
|
}
|
|
BasContainer container = basContainerService.getOne(new LambdaUpdateWrapper<BasContainer>()
|
.eq(BasContainer::getCode, param.getContainerNo()));
|
if (Objects.isNull(container)) {
|
throw new CoolException("容器未维护入库,请维护后再操作!!");
|
}
|
/**获取库位*/
|
String targetLoc = LocManageUtil.getTargetLoc(warehouseArea.getId(), container.getContainerType());
|
if (Cools.isEmpty(targetLoc)) {
|
throw new CoolException("该站点对应库区未找到库位");
|
}
|
|
String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
|
if (StringUtils.isBlank(ruleCode)) {
|
throw new CoolException("编码错误:请确认编码「SYS_TASK_CODE」是否已生成!!");
|
}
|
Task task = new Task();
|
task.setTaskCode(ruleCode)
|
.setTaskStatus(TaskStsType.GENERATE_IN.id)
|
.setTaskType(TaskType.TASK_TYPE_EMPITY_IN.type)
|
.setWarehType(WarehType.WAREHOUSE_TYPE_AGV.val)//lsh待修改
|
.setTargLoc(targetLoc)
|
.setOrgSite(deviceSite.getSite())
|
.setBarcode(param.getContainerNo())
|
.setCreateBy(loginUserId)
|
.setUpdateBy(loginUserId);
|
if (!taskService.save(task)) {
|
throw new CoolException("任务保存失败!!");
|
}
|
BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
|
.eq(BasStation::getStationName, deviceSite.getSite()));
|
if (Objects.isNull(station) || !station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
|
throw new CoolException("站点不存在或站点不处于空库状态!!");
|
}
|
station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
|
|
if (!basStationService.updateById(station)) {
|
throw new CoolException("站点状态更新失败!!");
|
}
|
if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc())
|
.set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, param.getContainerNo()))) {
|
throw new CoolException("库位预约失败!!");
|
}
|
return R.ok("任务生成完毕!");
|
}
|
|
}
|