AgvMoveService.java 5.13 KB
package com.huaheng.api.pda.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.api.general.service.ReceiptApiService;
import com.huaheng.api.pda.domain.AgvMoveDetailDomain;
import com.huaheng.api.pda.domain.AgvMoveDomain;
import com.huaheng.api.pda.domain.AgvMoveHeaderDomain;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.BusinessException;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.zone.domain.Zone;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
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.service.TaskHeaderService;
import com.huaheng.pc.task.taskHeader.service.TaskSendService;
import javafx.concurrent.Task;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Component
@Transactional
public class AgvMoveService {
    @Resource
    private TaskSendService taskSendService;
    @Resource
    private LocationService locationService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private TaskDetailService taskDetailService;


    /**
     * agv搬运任务
     * @param agvMoveDomain
     */
    @Transactional
    public AjaxResult agvMove(AgvMoveDomain agvMoveDomain){
        //创建主任务
        if(agvMoveDomain==null){
            return AjaxResult.error("接收数据为空");
        }
        AgvMoveHeaderDomain headerDomain=agvMoveDomain.getHeaderDomain();
        List<AgvMoveDetailDomain> detailDomains=agvMoveDomain.getMoveDetailDomains();

        if(StringUtils.isEmpty(headerDomain.getFromPort())&&StringUtils.isEmpty(headerDomain.getToPort())){
            return AjaxResult.error("请填写起点或终点");
        }
        //保存taskheader和taskdetail
        TaskHeader task=createTaskHeaderForMove(headerDomain,detailDomains);
        //agv搬运任务
        taskSendService.createTaskSendWcs(task,null);
        return AjaxResult.success();
    }

    public TaskHeader createTaskHeaderForMove(AgvMoveHeaderDomain headerDomain,List<AgvMoveDetailDomain> detailDomains){
        TaskHeader taskHeader=new TaskHeader();
        taskHeader.setWarehouseCode(QuantityConstant.WAREHOUSECODE);

        taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
        taskHeader.setZoneCode(headerDomain.getZoneCode());
        Location location=null;
        if(StringUtils.isNotEmpty(headerDomain.getFromPort())){
            taskHeader.setPort(headerDomain.getFromPort());
            taskHeader.setTaskType(QuantityConstant.TASK_TYPE_AGV_MOVE_RECEIPT);
            location= locationService.getLocationCodeByWorkCode(headerDomain.getZoneCode(),headerDomain.getFromPort());
        }
        if(StringUtils.isNotEmpty(headerDomain.getToPort())){
            taskHeader.setPort(headerDomain.getToPort());
            taskHeader.setTaskType(QuantityConstant.TASK_TYPE_AGV_MOVE_SHIPMENT);
            location= locationService.getLocationCodeByWorkCode(headerDomain.getZoneCode(),headerDomain.getFromPort());
        }
        if(location==null){
            throw new ServiceException("没有库位可分配");
        }
        taskHeader.setFromLocation(location.getCode());
        taskHeader.setToLocation(location.getCode());
        if(!taskHeaderService.save(taskHeader)){
            throw new BusinessException("创建主任务失败");
        }
        //保存明细
        createTaskDetailForMove(detailDomains,taskHeader);
        return taskHeader;
    }

    public void createTaskDetailForMove(List<AgvMoveDetailDomain> detailDomains,TaskHeader task){
        for (AgvMoveDetailDomain detailDomain:detailDomains){
            TaskDetail taskDetail=new TaskDetail();
            taskDetail.setTaskId(task.getId());
            taskDetail.setMaterialCode(detailDomain.getMaterialCode());
            taskDetail.setQty(detailDomain.getQyt());
            if(!taskDetailService.save(taskDetail)){
                throw new BusinessException("创建任务明细失败");
            }
        }
    }

}