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.*; import com.zy.asrs.wms.asrs.entity.param.FieldParam; import com.zy.asrs.wms.asrs.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 { private static Logger logger = LoggerFactory.getLogger(LocManage.class); @Autowired private TaskService taskService; @Autowired private TaskDetlService taskDetlService; @Autowired private LocService locService; @Autowired private LocDetlService locDetlService; @Autowired private WorkService workService; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; /** * 获取库存 * * @param map */ public List listSuitableMat(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.listSuitableMat(param, null); return stock; } /** * 根据订单id获取库存 * * @param orderId 订单ID */ public List listSuitableMatByOrder(Long orderId) { Order order = orderService.getById(orderId); List orderDetls = orderDetlService.getOrderDetlByOrderId(orderId); //TODO 这里加上出库规则 for (OrderDetl orderDetl : orderDetls) { } List param = new ArrayList<>(); List stock = locDetlService.listSuitableMat(param, null); return stock; } /** * 根据订单id获取库存 * * @param waveId 订单ID */ public List listSuitableMatByWave(Long waveId) { List param = new ArrayList<>(); List stock = locDetlService.listSuitableMat(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("保存工作档明细失败"); } } } }