AgvTaskApiController.java 10.2 KB
package com.huaheng.api.acs.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.common.utils.Wrappers;
import com.huaheng.api.acs.service.AcsServices;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.DateUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.TableDataInfo;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.containerType.service.ContainerTypeService;
import com.huaheng.pc.config.pointPosition.domain.PointPosition;
import com.huaheng.pc.config.pointPosition.service.PointPositionService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.IAgvTaskService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.collections.CollectionUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author dell
 */
@Controller
@RequestMapping("/agv")
public class AgvTaskApiController extends BaseController {

    private String prefix="task/task";

    @Resource
    private AcsServices acsServices;
    @Resource
    private IAgvTaskService agvTaskService;
    @Resource
    private ContainerService containerService;
    @Resource
    private ContainerTypeService containerTypeService;
    @Resource
    private PointPositionService pointPositionService;

    @RequiresPermissions("task:taskHeader:view")
    @GetMapping()
    public String taskHeader(HttpServletRequest request, ModelMap mmap) {
        String InternalTaskType= request.getParameter("internalTaskType");
        mmap.put("internalTaskType",InternalTaskType);
        return prefix + "/agvHeader";
    }

    @RequiresPermissions("task:taskHeader:list")
    @Log(title = "任务-上架任务", operating = "查看任务列表", action = BusinessType.GRANT)
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(AgvTask agvTask,
                              @ApiParam(name="startTime",value="类型") String startTime,
                              @ApiParam(name="endTime",value="类型") String endTime
                             , @ApiParam(name = "taskComplete",value = "任务是否完成100-完成 1-未完成") Integer taskComplete) throws ParseException {
        LambdaQueryWrapper<AgvTask> lambdaQueryWrapper=Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(AgvTask::getInternalTaskType,agvTask.getInternalTaskType());
        agvTask.setInternalTaskType(agvTask.getInternalTaskType());

        lambdaQueryWrapper.ge(StringUtils.isNotEmpty(startTime), AgvTask::getCreatedTime, startTime)
                .le(StringUtils.isNotEmpty(endTime), AgvTask::getCreatedTime, endTime);

        agvTask.setStatus(taskComplete);
        lambdaQueryWrapper.eq(StringUtils.isNotNull(taskComplete),AgvTask::getStatus,taskComplete);
        List<AgvTask> list = agvTaskService.list(lambdaQueryWrapper);
        return getDataTable(list);
    }

    /**
     * 创建AGV取放货任务、行走任务
     * @return
     */
    @GetMapping("/createAGVTask")
    public String create () {
        return prefix+"/agvCreate";
    }


    @ApiOperation(value = "AGV过来", httpMethod = "POST")
    @PostMapping("/createAGVTask")
    @ResponseBody
    @ApiLogger(from = "agv",apiName = "创建AGV取放货任务、行走任务")
    public AjaxResult createAGVTask (String priority, String destinationLocation, String containerCode, String orientation) {
        AgvTask agvTask=new AgvTask();
        agvTask.setToPort(destinationLocation);
        agvTask.setContainerCode(containerCode);
        agvTask.setPriority(Integer.valueOf(priority));
        agvTask.setWarehouseCode("CS0001");
        agvTask.setOrientation(orientation);
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return  acsServices.createAGVTask(agvTask);
            }
        });
        return ajaxResult;
    }
    @GetMapping("/createAGVTask2")
    public String create2 () {
        return prefix+"/agvCreate2";
    }


    @ApiOperation(value = "AGV回去", httpMethod = "POST")
    @PostMapping("/createAGVTask2")
    @ResponseBody
    public AjaxResult createAGVTask2 (String priority, String containerCode,String orientation) {
        AgvTask agvTask=new AgvTask();
        agvTask.setContainerCode(containerCode);
        agvTask.setPriority(Integer.valueOf(priority));
        agvTask.setWarehouseCode("CS0001");
        agvTask.setOrientation(orientation);
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return  acsServices.createAGVTask3(agvTask);
            }
        });
        return ajaxResult;
    }

    @Log(title = "任务-任务管理", operating = "下发AGV任务", action = BusinessType.UPDATE)
    @PostMapping( "/execute")
    @ResponseBody
    public AjaxResult execute(String taskId)
    {
        if (StringUtils.isEmpty(taskId)){
            return AjaxResult.error("taskId不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return  acsServices.sendTaskToAGV(Convert.toIntArray(taskId));
            }
        });
        return ajaxResult;
        //AjaxResult<AgvTask> ajaxResult = acsServices.sendTaskToAGV(Convert.toIntArray(taskId));
    }


    @GetMapping( "/editagv/{id}")
    public String edit(@PathVariable("id") Integer id, ModelMap mmap){
        AgvTask agvTask = agvTaskService.getById(id);
        mmap.put("agvTask", agvTask);
        return prefix + "/editagv";
    }

    @RequiresPermissions("task:taskHeader:edit")
    @PostMapping("/editagv")
    @ResponseBody
    @Log(title = "任务-任务管理", operating = "编辑agv任务", action = BusinessType.UPDATE)
    public AjaxResult edit(AgvTask agvTask) {
        return acsServices.edit(agvTask);
    }


    @Log(title = "任务-任务管理", operating = "取消AGV任务", action = BusinessType.DELETE)
    @PostMapping( "/cancelAGVTask")
    @ResponseBody
    public AjaxResult cancelAGVTask(String ids)
    {
        if (StringUtils.isEmpty(ids)) {
            return AjaxResult.error("taskId不能为空");
        }
        Integer[] idList = Convert.toIntArray(ids);
        for (int id : idList) {
            AgvTask agvTask = agvTaskService.getById(id);
            if(agvTask.getStatus().intValue()  <= QuantityConstant.TASK_STATUS_BUILD) {
                continue;
            }
            if(agvTask.getStatus().intValue()>= QuantityConstant.TASK_STATUS_RUNNING){
                return AjaxResult.error("任务已经执行,不能删除");
            }
            String shelfNo = agvTask.getShelfNo();
            if (StringUtils.isEmpty(shelfNo)) {
                return AjaxResult.error("货架为空");
            }
            AjaxResult ajaxResult = acsServices.cancelTask(agvTask.getTaskNo(), agvTask.getWarehouseCode());
            if (ajaxResult.hasErr()) {
                return ajaxResult;
            }
        }
        return acsServices.cancelAGVTask(Convert.toIntArray(ids));
    }

    @Log(title = "任务-任务管理", operating = "修改优先级", action = BusinessType.DELETE)
    @PostMapping( "/updateAGVTask")
    @ResponseBody
    public AjaxResult updateAGVTask(String taskId, Integer priority)
    {
        if (StringUtils.isEmpty(taskId)) {
        return AjaxResult.error("taskId不能为空");
        }
        Integer id = Integer.valueOf(taskId);
        AgvTask agvTask = agvTaskService.getById(id);
        if(agvTask.getStatus().intValue()  > QuantityConstant.TASK_STATUS_BUILD) {
            String containerCode = agvTask.getContainerCode();
            if (StringUtils.isEmpty(containerCode)) {
                return AjaxResult.error("空托盘");
            }
            //Container container = containerService.getContainerByCode(containerCode);
            AjaxResult ajaxResult = acsServices.updateTask(id, agvTask.getWarehouseCode(), priority);
            if (ajaxResult.hasErr()) {
                return ajaxResult;
            }
        }
        return acsServices.updateAGVTask(taskId,priority);

    }

    /**
     * AGV通知点位更新
     * @param map
     * @return
     */
    @Log(title = "任务-任务管理", operating = "更新AGV点位信息", action = BusinessType.UPDATE)
    @PostMapping( "/notifyAGVPort")
    @ResponseBody
    @ApiLogger(from = "agv",apiName = "AGV通知点位更新")
    public AjaxResult notifyAGVPort(@RequestBody Map map)
    {
       AjaxResult ajaxResult=acsServices.notifyAGVPort(map);
       return ajaxResult;
    }

    /**
     * AGV接货、放货、完成 告知WMS
     * @param map
     * @return
     */
    @Log(title = "任务-任务管理", operating = "AGV任务状态通知", action = BusinessType.UPDATE)
    @PostMapping( "/notifyAGVTask")
    @ResponseBody
    @ApiLogger(apiName = "AGV任务状态通知",from = "AGV")
    public AjaxResult notifyAGVTask(@RequestBody Map map)
    {
        AjaxResult ajaxResult=acsServices.notifyAGVTask(map);
        return ajaxResult;
    }

    @Log(title = "任务-任务管理", operating = "AGV完成任务", action = BusinessType.UPDATE)
    @PostMapping( "/completeTaskByWMS")
    @ResponseBody
    public AjaxResult completeTaskByWMS(String taskId)
    {
        AjaxResult ajaxResult=acsServices.completeTaskByWMS(taskId);
        return ajaxResult;
    }

}