WcsController.java 13.6 KB
package com.huaheng.api.wcs.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.wcs.domain.ReceiptContainerDomain;
import com.huaheng.api.wcs.domain.WcsTask;
import com.huaheng.api.wcs.service.WcsService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.ProcessTrack;
import com.huaheng.framework.aspectj.lang.constant.ProcessCode;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
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.WorkTaskService;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

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

/**
 * @author 游杰
 */
@RestController
@RequestMapping("/API/WMS/v2")
public class WcsController extends BaseController {

    @Resource
    private WcsService wcsService;
    @Resource
    private WorkTaskService workTaskService;

    @PostMapping("/calculateWeight")
    @ApiOperation("估算重量")
    @ApiLogger(apiName = "估算重量", from="WCS")
    @ResponseBody
    @ProcessTrack(taskName = "称重复核",processCode = ProcessCode.RECEIPT_TASK_CODE, from = "WCS")
    public AjaxResult calculateWeight(@RequestBody Map<String,String> map) {
        String taskNo = map.get("taskNo");
        String weight = map.get("weight");
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("称重信息没有任务号");
        }
        if(StringUtils.isEmpty(weight)) {
            return AjaxResult.error("称重信息没有重量");
        }

        AjaxResult ajaxResult = handleQuest("calculateWeight", new MultiProcessListener() {
           @Override
           public AjaxResult doProcess() {
               AjaxResult ajaxResult = wcsService.calculateWeight(taskNo, weight);
               return ajaxResult;
           }
        });
        return ajaxResult;
    }

    /**
     * 查询钢托盘是否返回
     */
    @PostMapping("/back")
    @ApiOperation("查询钢托盘是否返回")
    @ApiLogger(apiName = "查询钢托盘是否返回", from="WCS")
    @ResponseBody
    @ProcessTrack(taskName = "托盘返回",processCode = ProcessCode.SHIPMENT_TASK_CODE, from = "WCS")
    public AjaxResult back(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String taskNo = map.get("taskNo");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("没有port值");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("没有taskNo值");
        }
        AjaxResult ajaxResult = handleQuest("back", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.innerBack(port, taskNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    /**
     * 扣减库存
     */
    @PostMapping("/decreaseInventory")
    @ApiOperation("扣减库存")
    @ApiLogger(apiName = "扣减库存", from="WCS")
    @ResponseBody
    public AjaxResult decreaseInventory(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String boxCode = map.get("boxCode");
        String taskNo = map.get("taskNo");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("扣减库存, 没有port");
        }
        if(StringUtils.isEmpty(boxCode)) {
            return AjaxResult.error("扣减库存, 没有箱码");
        }
        AjaxResult ajaxResult = handleMultiProcess("decreaseInventory", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.decreaseInventory(boxCode, port, taskNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    /**
     * 木托盘组盘
     */
    @PostMapping("/receiptContainer")
    @ApiOperation("木托盘组盘")
    @ApiLogger(apiName = "木托盘组盘", from="WCS")
    @ResponseBody
    public AjaxResult receiptContainer(@RequestBody ReceiptContainerDomain receiptContainerDomain) {
        List<String> boxCodes = receiptContainerDomain.getBoxCodes();
        String port = receiptContainerDomain.getPort();

        if(StringUtils.isEmpty(boxCodes)) {
            return AjaxResult.error("木托盘组盘,没有boxCode");
        }
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("木托盘组盘,没有port");
        }
        if(boxCodes.size() == 0) {
            return AjaxResult.error("木托盘组盘,没有boxCode");
        }
        AjaxResult ajaxResult = handleMultiProcess("receiptContainer", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.receiptContainer(boxCodes, port);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 通知拆垛机钢托盘信息
     */
    @PostMapping("/pushDestackingEquipment")
    @ApiOperation("通知拆垛机钢托盘信息")
    @ApiLogger(apiName = "通知拆垛机钢托盘信息", from="WCS")
    @ResponseBody
    @ProcessTrack(taskName = "推送托盘信息",processCode = ProcessCode.SHIPMENT_TASK_CODE, from = "WCS")
    public AjaxResult pushDestackingEquipment(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String taskNo = map.get("taskNo");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("钢托盘信息,没有port");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("钢托盘信息,没有taskNo");
        }
        AjaxResult ajaxResult = handleQuest("pushDestackingEquipment", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.pushDestackingEquipment(port, taskNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 通知码垛机要码的信息
     */
    @PostMapping("/pushCodingEquipment")
    @ApiOperation("通知码垛机要码的信息")
    @ApiLogger(apiName = "通知码垛机要码的信息", from="WCS")
    @ResponseBody
    public AjaxResult pushCodingEquipment(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String taskNo = map.get("taskNo");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("钢托盘信息,没有port");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("钢托盘信息,没有taskNo");
        }
        AjaxResult ajaxResult = handleQuest("pushCodingEquipment", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.pushCodingEquipment(port, taskNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     ** 申请木托盘组
     */
    @PostMapping("/getWoodContainers")
    @ApiOperation("申请木托盘组")
    @ApiLogger(apiName = "申请木托盘组", from="WCS")
    @ResponseBody
    public AjaxResult getWoodContainers(@RequestBody Map<String,String> map) {
        String fromPort = map.get("fromPort");
        String toPort = map.get("toPort");
        String containerSpec = map.get("containerSpec");
        if(StringUtils.isEmpty(fromPort)) {
            return AjaxResult.error("申请木托盘组,没有fromPort");
        }
        if(StringUtils.isEmpty(toPort)) {
            return AjaxResult.error("申请木托盘组,没有toPort");
        }
        if(StringUtils.isEmpty(containerSpec)) {
            return AjaxResult.error("申请木托盘组,没有containerSpec");
        }
        int containerSpec1 = Integer.parseInt(containerSpec);
        AjaxResult ajaxResult = handleQuest("getWoodContainers", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.getWoodContainers(
                        fromPort, toPort, containerSpec1);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     ** 申请AGV运送木托盘组到平库
     */
    @PostMapping("/receiptWoodContainers")
    @ApiOperation("申请AGV运送木托盘组到平库")
    @ApiLogger(apiName = "申请AGV运送木托盘组到平库", from="WCS")
    @ResponseBody
    public AjaxResult receiptWoodContainers(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String containerSpec = map.get("containerSpec");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("申请木托盘组,没有port");
        }
        if(StringUtils.isEmpty(containerSpec)) {
            return AjaxResult.error("申请木托盘组,没有containerSpec");
        }
        if(containerSpec.equals("0")) {
            return AjaxResult.error("不存在这种规格");
        }
        int containerSpec1 = Integer.parseInt(containerSpec);
        AjaxResult ajaxResult = handleQuest("receiptWoodContainers", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.receiptWoodContainers(port, containerSpec1);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 生成换站任务
     * @return
     */
    @PostMapping("/createOverStation")
    @ApiOperation("生成换站任务")
    @ApiLogger(apiName = "生成换站任务", from="WCS")
    @ResponseBody
    public AjaxResult createOverStation(@RequestBody Map<String,String> map) {
        String containerCode = map.get("containerCode");
        String toPort = map.get("port");
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("生成换站任务,没有containerCode");
        }
        if(StringUtils.isEmpty(toPort)) {
            return AjaxResult.error("生成换站任务,没有port");
        }
        AjaxResult ajaxResult = handleQuest("createOverStation", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = workTaskService.createOverStation(containerCode, toPort);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    /**
     ** 异常托盘生成AGV任务
     */
    @PostMapping("/containersAGV")
    @ApiOperation("异常托盘生成AGV任务")
    @ApiLogger(apiName = "异常托盘生成AGV任务", from="WCS")
    @ResponseBody
    public AjaxResult ContainersAGV(@RequestBody Map<String,String> map) {
        String port = map.get("port");
        String warehouseCode = map.get("warehouseCode");
        String exceptionCode = map.get("exceptionCode");
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("异常任务申请,没有port站台");
        }
        if(StringUtils.isEmpty(warehouseCode)) {
            return AjaxResult.error("异常任务申请,没有warehouseCode仓库号");
        }
        if(StringUtils.isEmpty(exceptionCode)) {
            return AjaxResult.error("异常任务申请,没有exceptionCode异常原因");
        }
        AjaxResult ajaxResult = handleMultiProcess("containersAGV", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = wcsService.abnormalTask(port,warehouseCode,exceptionCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }






    /**
     * 请求补充滑块纸皮
     * @return
     */
    @PostMapping("/sliderOrPaperRequest")
    @ApiOperation("请求补充滑块纸皮")
    @ApiLogger(apiName = "请求补充滑块纸皮", from="WCS")
    @ResponseBody
    public AjaxResult sliderOrPaperRequest(@RequestBody Map<String,String> map) {
        // 1 表示离开   2 表示补充
        String flag = map.get("flag");
        // 1 端口
        String port = map.get("port");
        if(StringUtils.isEmpty(flag)) {
            return AjaxResult.error("请求补充滑块纸皮,没有flag");
        }
        if(StringUtils.isEmpty(port)) {
            return AjaxResult.error("请求补充滑块纸皮,没有port");
        }
        int flagInt = Integer.parseInt(flag);
        int contaienrSpecInt = QuantityConstant.CONTAINER_SPEC_1100;

        int containerSpec=0;
        if (port.equals("P4200"))
        {
            containerSpec=3;
        }
        else if (port.equals("P4201"))
        {
            containerSpec=4;
        }


        switch (flagInt)
        {
            case 1:
                return  wcsService.receiptWoodContainers(port, containerSpec);
                //表示离开
            case 2:
                return wcsService.sliderOrPaperRequest(port, flagInt, contaienrSpecInt);
                //表示补充
        }
        return AjaxResult.error("flag值不对");
    }


}