package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.service.AgvLocDetlService; import com.zy.asrs.service.AgvLocMastService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.Utils; import com.zy.common.model.LocDto; import com.zy.common.model.OrderDto; import com.zy.common.model.TaskDto; 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.Optional; import java.util.stream.Collectors; /** * Created by vincent on 2020/7/7 */ @Service public class AutoOrderHandler extends AbstractHandler { @Autowired private OrderService orderService; @Autowired private AgvLocMastService agvLocMastService; @Autowired private AgvLocDetlService agvLocDetlService; @Transactional public ReturnT start(Order order) { // double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D); // if (issued <= 0.0D) { // continue; // } // // // Double issued = orderDetl.getAnfme() - orderDetl.getQty(); // //根据物料号和批次找到对应的库存,并且按照修改时间排序 // Wrapper wrapper = new EntityWrapper().eq("matnr", orderDetl.getMatnr()).orderBy("modi_time"); // // wapperSetCondition(wrapper, "three_code", orderDetl.getThreeCode()); // List agvLocDetls = agvLocDetlService.selectList(wrapper); // // for (AgvLocDetl agvLocDetl : agvLocDetls) { // //判断当前库位货物是否F在库 // AgvLocMast agvLocMast = agvLocMastService.selectById(agvLocDetl.getLocNo()); // if (!"F".equals(agvLocMast.getLocSts())) { // continue; // } // //当前库位的库存量 // double anfme = agvLocDetl.getAnfme(); // //int ioType = anfme > issued ? 101 : 103; // anfme = anfme > issued ? issued : anfme; // //用于显示工作明细档的订单号 // String orderNoWrkDtel = Utils.getOrderNo(orderNo, anfme); // //更新订单数量 // orderNo = Utils.orderMergeUpdate(orderNo, anfme); // LocDto locDto = new LocDto(agvLocDetl.getLocNo(), agvLocDetl.getMatnr(), agvLocDetl.getMaktx(), agvLocDetl.getBatch(), orderNoWrkDtel, anfme, agvLocDetl.getProcessSts()); // locDto.setCsocode(csocode); // locDto.setIsoseq(isoseq); // locDto.setContainerCode(agvLocDetl.getSuppCode()); // locDto.setProcessSts(agvLocDetl.getProcessSts()); // //当前库位所处楼层 // int floor = Integer.parseInt(agvLocDetl.getLocNo().split("F")[1]); // //locDto.setAgvStaNos(queryAgvStaNosByFloor(floor)); // locDto.setAgvStaNos(agvBasDevpService.selectCacheShelvesStationCodeByLocType(agvLocMast.getLocType1(), floor)); // locDtoList.add(locDto); // // issued -= anfme; // } // // // // 订单预校验 ===>> 1.订单状态; 2.订单带出数量 // List orderDtos = orderPreVerification(locDtos); // // List taskDtos = new ArrayList<>(); // List agvTaskDtos = new ArrayList<>(); // generateTaskDto(locDtos, taskDtos, agvTaskDtos); // // //生成AGV出库任务 // agvWorkService.stockOutWrkMast(agvTaskDtos, getUserId()); // // // 生成出库任务 // taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList()); // for (TaskDto taskDto : taskDtos) { // BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); // workService.stockOut(staNo, taskDto, getUserId()); // } return SUCCESS; } private void wapperSetCondition(Wrapper wrapper, String column, String condition) { if (Cools.isEmpty(condition)) { wrapper.andNew().eq(column, "").or().isNull(column); } else { wrapper.andNew().eq(column, condition); } } }