RobotController.java 13.7 KB
package com.huaheng.api.robot.controller;

import com.alibaba.druid.support.spring.stat.annotation.Stat;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.InventoryQueryDomain;
import com.huaheng.api.robot.domain.RobotInfo;
import com.huaheng.api.robot.service.RobotService;
import com.huaheng.api.wcs.domain.WcsTask;
import com.huaheng.api.wcs.service.emptyOutHandle.EmptyOutHandleService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.security.ShiroUtils;
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.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.containerType.domain.ContainerType;
import com.huaheng.pc.config.containerType.service.ContainerTypeService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.station.domain.Station;
import com.huaheng.pc.config.station.service.StationService;
import com.huaheng.pc.config.zone.domain.Zone;
import com.huaheng.pc.config.zone.service.ZoneService;
import com.huaheng.pc.inventory.InventoryMaterialSummary.domain.InventoryMaterialSummary;
import com.huaheng.pc.inventory.InventoryMaterialSummary.service.InventoryMaterialSummaryService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
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.ReceiptTaskService;
import com.huaheng.pc.task.taskHeader.service.ShipmentTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.lang.ref.WeakReference;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/API/WMS/v2")
public class RobotController  extends BaseController {

    @Resource
    private EmptyOutHandleService emptyOutHandleService;
    @Resource
    private ZoneService zoneService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private ContainerService containerService;
    @Resource
    private ContainerTypeService containerTypeService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private StationService stationService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private ShipmentTaskService shipmentTaskService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private InventoryMaterialSummaryService inventoryMaterialSummaryService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private MaterialService materialService;
    @Resource
    private RobotService robotService;


    @PostMapping("/callReceipt")
    @ApiOperation("生产入库")
    @ApiLogger(apiName = "生产入库", from="ROBOT")
    @ResponseBody
    public AjaxResult callReceipt(@RequestBody Map<String,String> map) {
        String materialCodePLC = map.get("materialCodePLC");
        String orderNo = map.get("orderNo");
        String line = map.get("line");
        String materialCode = map.get("materialCode");
        String qty = map.get("qty");
        String area = map.get("area");
        if(line == null) {
            return AjaxResult.error("没有line");
        }
        if(materialCode == null) {
            return AjaxResult.error("没有materialCode");
        }
        if(qty == null) {
            return AjaxResult.error("没有qty");
        }
        if(area == null) {
            return AjaxResult.error("没有area");
        }
        if(materialCodePLC == null) {
            return AjaxResult.error("没有materialCodePLC");
        }
        if(orderNo == null) {
            return AjaxResult.error("没有orderNo");
        }
        int materialCodePLCint = Integer.parseInt(materialCodePLC);

        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = robotService.innerCallReceipt(line, materialCode, qty, area, materialCodePLCint, orderNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    @PostMapping("/callShipment")
    @ApiOperation("生产叫料")
    @ApiLogger(apiName = "生产叫料", from="ROBOT")
    @ResponseBody
    public AjaxResult callShipment(@RequestBody Map<String,String> map) {
        String materialCodePLC = map.get("materialCodePLC");
        String orderNo = map.get("orderNo");
        String line = map.get("line");
        String materialCode = map.get("materialCode");
        String qty = map.get("qty");
        String area = map.get("area");
        if(line == null) {
            return AjaxResult.error("没有line");
        }
        if(materialCode == null) {
            return AjaxResult.error("没有materialCode");
        }
        if(qty == null) {
            return AjaxResult.error("没有qty");
        }
        if(area == null) {
            return AjaxResult.error("没有area");
        }
        if(materialCodePLC == null) {
            return AjaxResult.error("没有materialCodePLC");
        }
        if(orderNo == null) {
            return AjaxResult.error("没有area");
        }
        int materialCodePLCint = Integer.parseInt(materialCodePLC);
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = robotService.innerCallShipment(line, materialCode, qty,
                                    area, materialCodePLCint, orderNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 查询托盘库存
     */
    @PostMapping("/searchContainerInventory")
    @ApiOperation("查询托盘库存")
    @ApiLogger(apiName = "查询托盘库存", from="ROBOT")
    @ResponseBody
    public AjaxResult searchContainerInventory(@RequestBody InventoryQueryDomain inventoryQueryDomain)
    {
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(StringUtils.isNotEmpty(inventoryQueryDomain.getWarehouseCode()),
                InventoryDetail::getWarehouseCode, inventoryQueryDomain.getWarehouseCode())
                .eq(StringUtils.isNotEmpty(inventoryQueryDomain.getContainerCode()),
                        InventoryDetail::getContainerCode, inventoryQueryDomain.getContainerCode())
                .eq(StringUtils.isNotEmpty(inventoryQueryDomain.getLocationCode()),
                        InventoryDetail::getLocationCode, inventoryQueryDomain.getLocationCode())
                .eq(StringUtils.isNotEmpty(inventoryQueryDomain.getCompanyCode()),
                        InventoryDetail::getCompanyCode, inventoryQueryDomain.getCompanyCode())
                .eq(StringUtils.isNotEmpty(inventoryQueryDomain.getMaterialCode()),
                        InventoryDetail::getMaterialCode, inventoryQueryDomain.getMaterialCode());
        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
        return AjaxResult.success(inventoryDetailList);
    }

    @PostMapping("/back")
    @ApiOperation("wcs托盘回库")
    @ResponseBody
    public AjaxResult back(@RequestBody WcsTask wcsTask)
    {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = robotService.innerBack(wcsTask);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 查询库存
     */
    @PostMapping("/searchInventory")
    @ApiOperation("查询库存")
    @ResponseBody
    @ApiLogger(apiName = "查询库存", from="ROBOT")
    public AjaxResult searchInventory(@RequestBody InventoryMaterialSummary inventoryMaterialSummary)
    {
        LambdaQueryWrapper<InventoryMaterialSummary> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper
                .eq(StringUtils.isNotEmpty(inventoryMaterialSummary.getWarehouseCode()),
                        InventoryMaterialSummary::getWarehouseCode, inventoryMaterialSummary.getWarehouseCode())
                //物料编码
                .eq(StringUtils.isNotEmpty(inventoryMaterialSummary.getMaterialCode()),
                        InventoryMaterialSummary::getMaterialCode, inventoryMaterialSummary.getMaterialCode())
                //物料名称
                .eq(StringUtils.isNotEmpty(inventoryMaterialSummary.getMaterialName()),
                        InventoryMaterialSummary::getMaterialName, inventoryMaterialSummary.getMaterialName())
                .eq(StringUtils.isNotEmpty(inventoryMaterialSummary.getZoneCode()),
                        InventoryMaterialSummary::getZoneCode, inventoryMaterialSummary.getZoneCode())
                //货主
                .eq(!StringUtils.isEmpty(inventoryMaterialSummary.getCompanyCode()),
                        InventoryMaterialSummary::getCompanyCode, inventoryMaterialSummary.getCompanyCode());
        List<InventoryMaterialSummary> list = inventoryMaterialSummaryService.list(lambdaQueryWrapper);
        if (list == null) {
            list = Collections.emptyList();
        }
        //筛选库存汇总数据的专用方法
        List<InventoryMaterialSummary> details = inventoryMaterialSummaryService.duplicateRemoval(list);
        return AjaxResult.success(details);
    }

    /**
     * 出库抓取信息
     */
    @PostMapping("/addShipmentDetail")
    @ApiOperation("出库抓取信息")
    @ResponseBody
    @ApiLogger(apiName = "出库抓取信息", from="ROBOT")
    public AjaxResult addShipmentDetail(@RequestBody Map<String,String> map)
    {
        String containerCode = map.get("containerCode");
        String port = map.get("port");
        String materialCode = map.get("materialCode");
        String qty = map.get("qty");
        String sn = map.get("sn");
        String isPrint = map.get("isPrint");
        String position = map.get("position");
        String area = map.get("area");
        if(containerCode == null) {
            return AjaxResult.error("没有containerCode");
        }
        if(port == null) {
            return AjaxResult.error("没有port");
        }
        if(materialCode == null) {
            return AjaxResult.error("没有materialCode");
        }
        if(qty == null) {
            return AjaxResult.error("没有qty");
        }
        if(sn == null) {
            return AjaxResult.error("没有sn");
        }
        if(position == null) {
            return AjaxResult.error("没有position");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = robotService.innerAddShipmentDetail(containerCode,
                        materialCode, port, qty, sn, position, isPrint, area);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * 入库抓取信息
     */
    @PostMapping("/addReceiptDetail")
    @ApiOperation("入库抓取信息")
    @ResponseBody
    @ApiLogger(apiName = "入库抓取信息", from="ROBOT")
    public AjaxResult addReceiptDetail(@RequestBody Map<String,String> map)
    {
        String containerCode = map.get("containerCode");
        String port = map.get("port");
        String materialCode = map.get("materialCode");
        String qty = map.get("qty");
        String sn = map.get("sn");
        String isPrint = map.get("isPrint");
        String position = map.get("position");
        String area = map.get("area");
        if(containerCode == null) {
            return AjaxResult.error("没有containerCode");
        }
        if(port == null) {
            return AjaxResult.error("没有port");
        }
        if(materialCode == null) {
            return AjaxResult.error("没有materialCode");
        }
        if(qty == null) {
            return AjaxResult.error("没有qty");
        }
        if(position == null) {
            return AjaxResult.error("没有position");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = robotService.innerAddReceiptDetail(containerCode,
                        materialCode, port, qty, sn, position, isPrint, area);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


}