AcsController.java 6.95 KB
package com.huaheng.api.acs.controller;

import java.math.BigDecimal;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.*;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.acs.domain.AGVCallParam;
import com.huaheng.api.acs.domain.AcsStatus;
import com.huaheng.api.acs.service.AcsReceiptService;
import com.huaheng.api.acs.service.AcsService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.mobile.receipt.ReceiptBill;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.sap.domain.WeightRollNumberInfo;
import com.huaheng.pc.sap.service.WeightRollNumberInfoService;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

@RestController
@RequestMapping("/agv")
public class AcsController extends BaseController {

    @Resource
    private AcsService acsService;
    @Resource
    private WeightRollNumberInfoService weightRollNumberInfoService;
    @Resource
    private AddressService addressService;
    @Resource
    private AcsReceiptService acsReceiptService;

    /**
     * status 20 任务执行中;
     * 50 取货完成;
     * 90 任务完成;
     * @param  acsStatus
     * @return
     */
    @PostMapping("/notifyAGVTask")
    @ApiOperation("更新AGV状态")
    @ResponseBody
    @ApiLogger(apiName = "更新AGV状态", from = "acs")
    public AjaxResult notifyAGVTask(@RequestBody AcsStatus acsStatus) {
        AjaxResult ajaxResult = handleMultiProcess("notifyAGVTask", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = acsService.notifyAGVTask(acsStatus);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * status 20 任务执行中;
     * 50 取货完成;
     * 90 任务完成;
     * @param  acsStatus
     * @return
     */
    @PostMapping("/bindContainer")
    @ApiOperation("玻璃布物料绑定托盘")
    @ResponseBody
    @ApiLogger(apiName = "玻璃布物料绑定托盘", from = "acs")
    public AjaxResult bindContainer(@RequestBody AcsStatus acsStatus) {
        AjaxResult ajaxResult = handleMultiProcess("bindContainer", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = acsService.bindContainer(acsStatus);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/pushWeightRollNumber")
    @ApiOperation("推送卷号重量信息")
    @ResponseBody
    @ApiLogger(apiName = "推送卷号重量信息", from = "acs")
    public AjaxResult pushWeightRollNumber(@RequestBody WeightRollNumberInfo weightRollNumberInfo) {

        String rollNumber = weightRollNumberInfo.getRollNumber();
        BigDecimal weight = weightRollNumberInfo.getWeight();
        String area = weightRollNumberInfo.getArea();
        String warehouseCode = weightRollNumberInfo.getWarehouseCode();
        if (StringUtils.isEmpty(area)) {
            return AjaxResult.error("area不为空:");
        }
        if (StringUtils.isEmpty(warehouseCode)) {
            return AjaxResult.error("warehouseCode不为空:");
        }
        if (StringUtils.isEmpty(rollNumber)) {
            return AjaxResult.error("卷号不为空:");
        }
        if (weight.compareTo(BigDecimal.ZERO) <= 0) {
            return AjaxResult.error("重量不为空:");
        }
        AjaxResult ajaxResult = handleMultiProcess("pushWeightRollNumber", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                boolean save = weightRollNumberInfoService.save(weightRollNumberInfo);
                String bodypost = null;
                try {
                    String url = addressService.selectAddress(QuantityConstant.WEIGHT_ROLLNUMBER_URL, weightRollNumberInfo.getWarehouseCode(),
                        weightRollNumberInfo.getArea());
                    String param = JSON.toJSONString(weightRollNumberInfo);
                    bodypost = OkHttpUtils.bodypost(url, param);
                    weightRollNumberInfo.setSend(1);
                    weightRollNumberInfoService.updateById(weightRollNumberInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    return AjaxResult.toAjax(save).setData(bodypost);
                }
            }
        });
        return ajaxResult;
    }

    /**
     * pltype 1->片状托架0->卷状托架,2->特殊托架
     * containerType 1.请求入库卷托盘;2.请求入库片托盘;
     * 3.请求出库卷托盘;0.请求出片状托盘
     * @param  param
     * @return
     */

    @PostMapping("/agvCallEmptyOut")
    @ApiOperation("ACS呼叫空托盘出库")
    @ResponseBody
    @ApiLogger(apiName = "ACS呼叫空托盘出库", from = "acs")
    public AjaxResult agvCallEmptyOut(@RequestBody AGVCallParam param) {
        Integer containerType = param.getContainerType();
        String port = param.getPort();
        int area = param.getArea();
        String warehouseCode = param.getWarehouseCode();
        if (area == 0) {
            return AjaxResult.error("库区不嫩为空");
        }
        if (area == 1) {
            containerType = 0;
        }
        if (containerType == null) {
            return AjaxResult.error("容器类型不存在");
        }
        if (StringUtils.isEmpty(port)) {
            return AjaxResult.error("站台不能为空");
        }
        if (StringUtils.isEmpty(warehouseCode)) {
            return AjaxResult.error("仓库不能为空");
        }

        Integer finalContainerType = containerType;
        AjaxResult ajaxResult = handleQuest("agvCallEmptyOut", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = acsService.agvCallEmptyOut(area, port, warehouseCode, finalContainerType);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/getReceiptContainerByB")
    @ApiOperation("ACS传入入库数据")
    @ResponseBody
    @ApiLogger(apiName = "ACS传入入库数据", from = "acs")
    public AjaxResult getReceiptContainerByB(@RequestBody @ApiParam(value = "收货单") List<ReceiptBill> receiptBills) {
        AjaxResult ajaxResult = handleMultiProcess("getReceiptContainerByB", new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = acsReceiptService.getReceiptContainerByB(receiptBills);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }
}