RequestContainerNumberService.java 11.7 KB
package com.huaheng.api.wcs.service;

import java.math.BigDecimal;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.wcs.domain.RobotReturn;
import com.huaheng.api.wcs.domain.RobotView;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.domain.TaskRequestContainer;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import com.huaheng.pc.task.taskHeader.service.TaskRequestContainerService;

@Service
public class RequestContainerNumberService {

    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private TaskRequestContainerService taskRequestContainerService;

//    //
//    // 请求一个位置
//    @Transactional
//    public AjaxResult requestContainerNumberByWcs(String containerCode) {
//        AjaxResult ajaxResult = new AjaxResult();
//        if (StringUtils.isEmpty(containerCode)) {
//            return AjaxResult.error("容器为空");
//        }
//        LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
//        lambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode);
//        lambdaQueryWrapper.eq(TaskHeader::getZoneCode, "B");
////        lambdaQueryWrapper.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_ARRIVED_STATION);
//        lambdaQueryWrapper.in(TaskHeader::getInternalTaskType, QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
//        lambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
//        lambdaQueryWrapper.last("limit 1");
//        TaskHeader taskHeader = taskHeaderService.getOne(lambdaQueryWrapper);
//
//        if (taskHeader == null) {
//            return AjaxResult.error("容器号:" + containerCode + " 未找到未完成的出库任务。");
//        }
//
//        List<TaskDetail> list = taskDetailService.findByTaskId(taskHeader.getId());
//
//        if (list == null || list.size() <= 0) {
//            return AjaxResult.error("容器号:" + containerCode + " 未找到任务详情。");
//        }
//        List<TaskDetail> taskDetails1 = list.stream().sorted(Comparator.comparing(TaskDetail::getContainerDetailNumber).reversed()).collect(Collectors.toList());
//
//        LambdaQueryWrapper<InventoryDetail> query = Wrappers.lambdaQuery();
//        query.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
//        List<InventoryDetail> inventorydetaillist = inventoryDetailService.list(query);
//        Integer boxNumber = 12;
//        String boxType = inventorydetaillist.get(0).getBoxType();
//        if (boxType.equals("0")) {
//            // 小箱子
//            boxNumber = 9;
//        }
//        // 检查task_request_container表有无数据,没有则增加
//        TaskRequestContainer taskRequestContainer = taskRequestContainerService.findTaskRequestContainer(taskHeader.getContainerCode(), taskHeader.getId());
//        if (taskRequestContainer == null) {
//            taskRequestContainer = new TaskRequestContainer();
//            taskRequestContainer.setContainerCode(containerCode);
//            taskRequestContainer.setNowNumber(boxNumber);
////            taskHeaderService.updateById(taskHeader);
//        } else {
//            // 未执行,则直接返回原有状态
//            if (taskRequestContainer.getStatus() == 0) {
//                RobotReturn robotReturn = new RobotReturn();
//                robotReturn.setOperator(taskRequestContainer.getOperator());
//                robotReturn.setBoxType(taskRequestContainer.getBoxType());
//                robotReturn.setState(taskRequestContainer.getPreState());
//                robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());
//                robotReturn.setFormPallet(taskRequestContainer.getFormPallet());
//                return AjaxResult.success().setData(robotReturn);
//            }
//        }
//        taskRequestContainer.setTaskId(taskHeader.getId());
//        taskRequestContainer.setStatus(0);
////        if (StringUtils.isNull(taskHeader.getNowNumber())) {
////            taskHeader.setNowNumber(boxNumber);
////            taskHeaderService.updateById(taskHeader);
////        }
//        taskHeader.setBoxType(boxType);
//        BigDecimal taskqty = new BigDecimal(0);
//        Integer[] containerNumberdata = new Integer[taskDetails1.size()];
//        Integer miniNumber = 0;
//        for (int a = 0; a < taskDetails1.size(); a++) {
//            TaskDetail detail = taskDetails1.get(a);
//            taskqty = taskqty.add(detail.getQty());
////            if (a == taskDetails1.size() - 1) {
////                miniNumber = detail.getContainerDetailNumber();
////            }
//            containerNumberdata[a] = detail.getContainerDetailNumber();
//        }
//        LambdaQueryWrapper<TaskDetail> wrapper = Wrappers.lambdaQuery();
//        wrapper.eq(TaskDetail::getTaskId, taskHeader.getId());
//        wrapper.eq(TaskDetail::getNumber, 1);
//        wrapper.orderByDesc(TaskDetail::getContainerDetailNumber);
//        wrapper.last("limit 1");
//        TaskDetail taskDetail = taskDetailService.getOne(wrapper);
//
//        RobotReturn robotReturn = new RobotReturn();
//        robotReturn.setOperator(0);
//        robotReturn.setBoxType(Integer.parseInt(boxType));
//        robotReturn.setState(1);
//
//        taskRequestContainer.setOperator(robotReturn.getOperator());
//        taskRequestContainer.setBoxType(robotReturn.getBoxType());
//        taskRequestContainer.setPreState(robotReturn.getState());
//
////        TaskHeader task = taskHeaderService.getById(taskHeader.getId());
//        if (taskDetail != null) {
//            AjaxResult ajaxResult1 = zhua(taskHeader, taskDetail, taskRequestContainer, robotReturn);
//            return ajaxResult1;
//        } else {
//            // 放
//            robotReturn.setOperator(1);
//            robotReturn.setFormPallet(0);
//
//            taskRequestContainer.setOperator(1);
//            taskRequestContainer.setFormPallet(0);
//
//            LambdaQueryWrapper<InventoryDetail> query1 = Wrappers.lambdaQuery();
//            query1.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
//            query1.notIn(InventoryDetail::getContainerDetailNumber, containerNumberdata);
////            query1.gt(InventoryDetail::getContainerDetailNumber, miniNumber);
//            query1.orderByAsc(InventoryDetail::getContainerDetailNumber);
//            List<InventoryDetail> inventoryDetails = inventoryDetailService.list(query1);
//
//            // 放按照顺序放
//            for (int a = 0; a < inventoryDetails.size(); a++) {
//                InventoryDetail detail = inventoryDetails.get(a);
//                Integer inventoryNumber = detail.getContainerDetailNumber();
//                Integer taskNumber = taskRequestContainer.getNowNumber();
//                if (inventoryNumber > taskNumber) {
//                    // 放的位置
////                    robotReturn.setContainerNumber(detail.getContainerDetailNumber());
//                    robotReturn.setContainerNumber(a + 1);
//
//                    if (inventoryNumber >= taskNumber) {
//                        taskRequestContainer.setNowNumber(inventoryNumber);
//                    } else {
//                        taskRequestContainer.setNowNumber(taskNumber + 1);
//                    }
//
////                    taskHeaderService.updateById(task);
//                    break;
//                } else if (taskRequestContainer.getNowNumber() == boxNumber) {
//                    // 分拣出库,托盘回库
//                    robotReturn.setState(0);
//                    taskRequestContainer.setPreState(robotReturn.getState());
//                    break;
//                }
//            }
//            if (inventoryDetails == null || inventoryDetails.size() == 0) {
//                // 整盘出库,空托盘前进
//                robotReturn.setState(100);
//                taskRequestContainer.setPreState(robotReturn.getState());
//                taskRequestContainerService.saveOrUpdate(taskRequestContainer);
//                return AjaxResult.success().setData(robotReturn);
//            }
//        }
//        taskRequestContainerService.saveOrUpdate(taskRequestContainer);
//        return AjaxResult.success().setData(robotReturn);
//
//    }

    // 从托盘到地上
    public AjaxResult zhua(TaskHeader task, TaskDetail taskDetail, TaskRequestContainer taskRequestContainer, RobotReturn robotReturn) {
        if (taskDetail.getContainerDetailNumber() < taskRequestContainer.getNowNumber()) {
            // 存放位置 右
            robotReturn.setFormPallet(1);
            robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());
            taskRequestContainer.setFormPallet(1);
            taskRequestContainer.setOperator(0);
            if (taskRequestContainer.getNowNumber() != 1) {
//                task.setNowNumber(task.getNowNumber() - 1);
//                taskHeaderService.updateById(task);
                taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber() - 1);
            }
            taskRequestContainerService.saveOrUpdate(taskRequestContainer);
            return AjaxResult.success().setData(robotReturn);
        } else {
            // 需要抓取 左
            robotReturn.setFormPallet(0);
            robotReturn.setContainerNumber(taskRequestContainer.getNowNumber());

            taskRequestContainer.setFormPallet(robotReturn.getFormPallet());
            taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber());
            if (taskRequestContainer.getNowNumber() != 1) {
//                task.setNowNumber(task.getNowNumber() - 1);
//                taskHeaderService.updateById(task);
                taskRequestContainer.setNowNumber(taskRequestContainer.getNowNumber() - 1);
            }
            // 抓取查找还未出库的物料
            taskDetail.setNumber(2);
            taskDetailService.updateById(taskDetail);
            taskRequestContainerService.saveOrUpdate(taskRequestContainer);
            return AjaxResult.success().setData(robotReturn);
        }
    }

    public AjaxResult requestContainerNumberByWcsClear(RobotView robotView) {
        if (StringUtils.isEmpty(robotView.getTaskNo())) {
            return AjaxResult.error("机器手清除信号:任务号无");
        }
        // 检查task_request_container表有无数据,没有则增加
        TaskRequestContainer taskRequestContainer = taskRequestContainerService.findTaskRequestContainerByTaskId(Integer.parseInt(robotView.getTaskNo()));
        if (taskRequestContainer == null) {
            return AjaxResult.error("机器手清除信号:找不到该任务");
        }
        taskRequestContainer.setStatus(1);
        taskRequestContainer.setLastUpdated(new Date());
        taskRequestContainerService.updateById(taskRequestContainer);
        return AjaxResult.success();
    }

}