AgvTaskController.java 11.3 KB
package com.huaheng.pc.task.agvTask.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huaheng.api.wcs.service.taskFinish.TaskFinishServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.Wrappers;
import com.huaheng.common.utils.security.ShiroUtils;
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.PageDomain;
import com.huaheng.framework.web.page.TableDataInfo;
import com.huaheng.framework.web.page.TableSupport;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.points.service.PointsService;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.IAgvTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

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

@Controller
@RequestMapping("/task/agvTask")
public class AgvTaskController extends BaseController {
    private String prefix="task/agvTask";

    @Resource
    private IAgvTaskService agvTaskService;
    @Resource
    private PointsService pointsService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ContainerService containerService;

    @RequiresPermissions("task:agvTask:view")
    @GetMapping()
    public String agvTask() {

        return prefix + "/agvTask";
    }
    /**
     * 查询任务列表
     */
    @RequiresPermissions("task:agvTask:list")
    @Log(title = "任务-上架任务", operating = "查看任务列表", action = BusinessType.GRANT)
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(AgvTask agvTask,@ApiParam(name="taskType",value="类型") Integer taskType,
                              @ApiParam(name="createdBegin",value="类型") String createdBegin, @ApiParam(name="createdEnd",value="类型") String createdEnd) {
        LambdaQueryWrapper<AgvTask> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(AgvTask::getWarehouseCode, ShiroUtils.getWarehouseCode())
                .eq(StringUtils.isNotNull(taskType),AgvTask::getTaskType,taskType)
                .eq(StringUtils.isNotNull(agvTask.getId()),AgvTask::getId,agvTask.getId())
                .eq(StringUtils.isNotEmpty(agvTask.getContainerCode()),AgvTask::getContainerCode,agvTask.getContainerCode())
                .eq(StringUtils.isNotEmpty(agvTask.getFromPort()),AgvTask::getFromPort,agvTask.getFromPort())
                .eq(StringUtils.isNotEmpty(agvTask.getToPort()),AgvTask::getToPort,agvTask.getToPort())
                .eq(StringUtils.isNotNull(agvTask.getPriority()),AgvTask::getPriority,agvTask.getPriority())
                .gt(StringUtils.isNotEmpty(createdBegin),AgvTask::getCreatedTime,createdBegin)
                .lt(StringUtils.isNotEmpty(createdEnd),AgvTask::getCreatedTime,createdEnd)
                .orderByAsc(AgvTask::getStatus)
                .orderByDesc(AgvTask::getId);

        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        /**
         * 使用分页查询
         */
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
            Page<AgvTask> page = new Page<>(pageNum, pageSize);
            IPage<AgvTask> iPage = agvTaskService.page(page, lambdaQueryWrapper);
            List<AgvTask> iPages = iPage.getRecords();
            return getMpDataTable(iPages, iPage.getTotal());
        } else {
            List<AgvTask> list = agvTaskService.list(lambdaQueryWrapper);
            return getDataTable(list);
        }
    }

    @RequiresPermissions("task:agvTask:execute")
    @Log(title = "任务-任务管理", operating = "下发立库任务", action = BusinessType.INSERT)
    @PostMapping( "/executes")
    @ResponseBody
    public AjaxResult executes(String ids)
    {
        if (StringUtils.isEmpty(ids)){
            return AjaxResult.error("ids不能为空");
        }
        String[] idList = ids.split(",");
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.executeAGVTask(idList);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }
    @RequiresPermissions("task:agvTask:execute")
    @Log(title = "任务-任务管理", operating = "下发立库任务", action = BusinessType.INSERT)
    @PostMapping( "/execute")
    @ResponseBody
    public AjaxResult execute(String id)
    {
        if (StringUtils.isEmpty(id)){
            return AjaxResult.error("id不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.executeAGVTask(id);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }

    @RequiresPermissions("task:agvTask:cancels")
    @Log(title = "AGV任务-任务批量取消", operating = "批量取消AGV任务", action = BusinessType.DELETE)
    @PostMapping( "/cancels")
    @ResponseBody
    public AjaxResult cancels(String ids)
    {
        if (StringUtils.isEmpty(ids)){
            return AjaxResult.error("ids不能为空");
        }
        String[] idList = ids.split(",");
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.cancelAGVTasks(idList);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }

    @RequiresPermissions("task:agvTask:cancel")
    @Log(title = "AGV任务-任务取消", operating = "取消AGV任务", action = BusinessType.INSERT)
    @PostMapping( "/cancel")
    @ResponseBody
    public AjaxResult cancel(String id)
    {
        if (StringUtils.isEmpty(id)){
            return AjaxResult.error("id不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.cancelAGVTask(id);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }
    @RequiresPermissions("task:agvTask:complete")
    @Log(title = "AGV任务-任务完成", operating = "完成AGV任务", action = BusinessType.INSERT)
    @PostMapping( "/complete")
    @ResponseBody
    public AjaxResult complete(String id)
    {
        if (StringUtils.isEmpty(id)){
            return AjaxResult.error("id不能为空");
        }

        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.completeAGVTask(id);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }

    @RequiresPermissions("task:agvTask:completes")
    @Log(title = "AGV任务-批量任务完成", operating = "批量完成AGV任务", action = BusinessType.DELETE)
    @PostMapping( "/completes")
    @ResponseBody
    public AjaxResult completes(String ids)
    {
        if (StringUtils.isEmpty(ids)){
            return AjaxResult.error("id不能为空");
        }
        String[] idList = ids.split(",");
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult1 = agvTaskService.completeAGVTask(idList);
                return ajaxResult1;
            }
        });
        return ajaxResult;
    }

    @RequiresPermissions("task:agvTask:view")
    @GetMapping("/agvOperate")
    public String agvOperate() {
        return prefix + "/agvOperate";
    }

    @RequiresPermissions("task:agvTask:view")
    @GetMapping("/agvMenu")
    public String agvMenu() {
        return prefix + "/agvMenu";
    }

    @RequiresPermissions("task:agvTask:goodsShelfNo")
    @Log(title = "AGV 货架", operating = "AGV 货架", action = BusinessType.DELETE)
    @PostMapping( "/goodsShelfNo")
    @ResponseBody
    public List<Map<String, Object>> goodsShelfNo()
    {
        return pointsService.selectShlfno(ShiroUtils.getWarehouseCode());
    }

    /**
     * AGV界面中完成任务
     */
    @RequiresPermissions("task:agvTask:add")
    @Log(title = "任务-任务管理", operating = "PC完成AGV任务", action = BusinessType.UPDATE)
    @PostMapping( "/completeTaskByAGV")
    @ResponseBody
    public AjaxResult completeTaskByAGV(Integer taskId,Integer id,String num) throws Exception {
//        taskHeaderService.completeTaskByWMS()
        return null;
    }

    @RequiresPermissions("task:agvTask:add")
    @GetMapping("/add")
    public String add() {
        return prefix + "/add";
    }

    /**
     * AGV界面中完成任务
     */
    @RequiresPermissions("task:agvTask:add")
    @Log(title = "任务-AGV创建", operating = "AGV任务创建", action = BusinessType.INSERT)
    @PostMapping( "/add")
    @ResponseBody
    public AjaxResult add(AgvTask agvTask) {
        if(StringUtils.isNull(agvTask)){
            return AjaxResult.error("agv任务信息不能为空");
        }
        if(StringUtils.isEmpty(agvTask.getDestinationLocation())){
            return AjaxResult.error("agv任务信息 货架上位点不能为空");
        }
        if(StringUtils.isEmpty(agvTask.getContainerCode())){
            return AjaxResult.error("agv任务信息 托盘号不能为空");
        }
        if(StringUtils.isNull(agvTask.getPriority())){
            return AjaxResult.error("agv任务信息 优先级不能为空");
        }
        if(StringUtils.isEmpty(agvTask.getOrientation())){
            return AjaxResult.error("agv任务信息 方向不能为空");
        }
        Container container = containerService.findContainerByCodeType(agvTask.getContainerCode(),QuantityConstant.AGV_CONTAINER_TYPE,ShiroUtils.getWarehouseCode());
        if(container==null){
            return AjaxResult.error(agvTask.getContainerCode()+" 托盘不是AGV容器。");
        }
        if(QuantityConstant.STATUS_CONTAINER_LOCK.equals(container.getStatus())){
            return AjaxResult.error("容器号"+container.getCode()+" 被锁定!");
        }
        agvTask.setToPort(container.getShelfNo());
        AjaxResult agvTask1 = agvTaskService.createAGVTask(agvTask);
        return agvTask1;
    }

}