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 list = outUtils.merge(outParam); processTask(list); } private void processTask(List 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 locDetlFields = locDetlFieldService.list(new LambdaQueryWrapper().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("库位状态更新失败"); } } } }