package com.zy.asrs.wms.asrs.manage;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.zy.asrs.framework.exception.CoolException;
|
import com.zy.asrs.wms.asrs.entity.dto.OutDetlDto;
|
import com.zy.asrs.wms.asrs.entity.dto.OutLocDto;
|
import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
|
import com.zy.asrs.wms.asrs.entity.param.OutParam;
|
import com.zy.asrs.wms.asrs.entity.*;
|
import com.zy.asrs.wms.asrs.service.*;
|
import com.zy.asrs.wms.utils.OutUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
|
/**
|
* 出库管理
|
*/
|
@Service
|
public class OutManage {
|
|
private static Logger logger = LoggerFactory.getLogger(LocManage.class);
|
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private TaskDetlService taskDetlService;
|
@Autowired
|
private TaskDetlFieldService taskDetlFieldService;
|
@Autowired
|
private LocService locService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private LocDetlFieldService locDetlFieldService;
|
@Autowired
|
private WorkService workService;
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private OutUtils outUtils;
|
|
|
/**
|
* 出库
|
*/
|
@Transactional
|
public void out(OutParam outParam) {
|
if (outParam.getOperationPort() == null) {
|
throw new CoolException("作业口不存在");
|
}
|
|
List<OutLocDto> list = outUtils.merge(outParam);
|
processTask(list);
|
}
|
|
private void processTask(List<OutLocDto> list) {
|
for (OutLocDto locDto : list) {
|
long taskType = locDto.getAll() ? 101L : 103L;
|
|
Loc loc = locService.getById(locDto.getLocId());
|
if(loc == null) {
|
throw new CoolException("库位不存在");
|
}
|
|
if (!loc.getLocStsId().equals(LocStsType.F.val())) {
|
throw new CoolException("库位状态不在库");
|
}
|
|
Task task = new Task();
|
task.setTaskNo(workService.generateTaskNo(1L));
|
task.setTaskSts(101L);
|
task.setTaskType(taskType);
|
task.setIoPri(workService.generateIoPri(taskType));
|
task.setOriginLoc(loc.getLocNo());
|
task.setTargetSite(locDto.getOperationPort());
|
task.setBarcode(loc.getBarcode());
|
boolean res = taskService.save(task);
|
if (!res) {
|
throw new CoolException("保存工作档失败");
|
}
|
// 工作档明细保存
|
for (OutDetlDto detl : locDto.getDetls()) {
|
LocDetl locDetl = locDetlService.getById(detl.getDetlId());
|
if(locDetl == null) {
|
throw new CoolException("明细不存在");
|
}
|
|
TaskDetl taskDetl = new TaskDetl();
|
taskDetl.sync(locDetl);
|
taskDetl.setTaskId(task.getId());
|
taskDetl.setAnfme(detl.getAnfme());
|
taskDetl.setStock(detl.getStock());
|
if (!taskDetlService.save(taskDetl)) {
|
throw new CoolException("保存工作档明细失败");
|
}
|
|
List<LocDetlField> locDetlFields = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
|
for (LocDetlField locDetlField : locDetlFields) {
|
TaskDetlField taskDetlField = new TaskDetlField();
|
taskDetlField.sync(locDetlField);
|
taskDetlField.setDetlId(taskDetl.getId());
|
boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
|
if(!taskDetlFieldSave){
|
throw new CoolException("明细扩展生成失败");
|
}
|
}
|
}
|
|
//库位F => R
|
loc.setLocStsId(LocStsType.R.val());
|
loc.setUpdateTime(new Date());
|
boolean locUpdate = locService.updateById(loc);
|
if(!locUpdate){
|
throw new CoolException("库位状态更新失败");
|
}
|
}
|
}
|
}
|