package com.zy.asrs.wms.asrs.manage; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.controller.req.OutReq; import com.zy.asrs.wms.asrs.entity.Loc; import com.zy.asrs.wms.asrs.entity.LocDetl; import com.zy.asrs.wms.asrs.entity.Task; import com.zy.asrs.wms.asrs.entity.TaskDetl; import com.zy.asrs.wms.asrs.entity.param.FieldParam; import com.zy.asrs.wms.asrs.service.*; 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.stream.Collectors; /** * 出库管理 */ @Service public class OutManage { @Autowired private TaskService taskService; @Autowired private TaskDetlService taskDetlService; @Autowired private LocService locService; @Autowired private LocDetlService locDetlService; @Autowired private WorkService workService; /** * 获取库存 * * @param map */ public List getSuitableMat(Map map) { List param = new ArrayList<>(); map.entrySet().stream().filter(entry -> entry.getValue() != null).forEach(entry -> { FieldParam fieldParam = new FieldParam(); fieldParam.setName(entry.getKey()); fieldParam.setValue(entry.getValue()); param.add(fieldParam); }); //TODO 这里加上出库规则 List stock = locDetlService.getSuitableMat(param, null); return stock; } /** * 出库 * * @param outReq */ public void out(OutReq outReq) { Map> map = outReq.getDetls().stream().collect(Collectors.groupingBy(OutReq.Detl::getLocDetlId)); map.forEach((k, v) -> { Loc loc = locService.getById(k); processTask(loc, v, outReq.getTargetSite()); }); } private void processTask(Loc loc, List detls, String targetSite) { // 保存工作档 Task task = new Task(); task.setTaskNo(workService.generateTaskNo(1L)); // 任务状态 task.setTaskSts(101L); // 任务类型 task.setTaskType(101L); // 优先级 task.setIoPri(1); // 源库位 task.setOriginLoc(loc.getLocNo()); // 目标站点 task.setTargetSite(targetSite); // 托盘码 task.setBarcode(loc.getBarcode()); boolean res = taskService.save(task); if (!res) { throw new CoolException("保存工作档失败"); } // 工作档明细保存 for (OutReq.Detl detl : detls) { LocDetl locDetl = locDetlService.getById(detl.getLocDetlId()); TaskDetl taskDetl = new TaskDetl(); taskDetl.sync(locDetl); taskDetl.setTaskId(task.getId()); if (!taskDetlService.save(taskDetl)) { throw new CoolException("保存工作档明细失败"); } } } }