MesController.java 11.6 KB
package com.huaheng.api.mes.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.mes.domain.*;
import com.huaheng.api.mes.service.MesService;
import com.huaheng.common.utils.StringUtils;
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.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
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.lang.ref.WeakReference;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

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

    @Resource
    private WorkTaskService workTaskService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private MesService mesService;

    /**
     * 生成空托盘入库任务
     * @return
     */
    @PostMapping("/receiptEmptyContainer")
    @ApiOperation("生成空托盘入库任务")
    @ApiLogger(apiName = "生成空托盘入库任务", from="mes")
    @ResponseBody
    public AjaxResult receiptEmptyContainer(@RequestBody Map<String,String> map) {
        String containerTypeNo = map.get("containerTypeNo");
        return AjaxResult.success();
//        String containerTypeNo = mesEmptyContainer.getContaienrTypeNo();
//        String taskNo = mesEmptyContainer.getTaskNo();
//        String toPort = mesEmptyContainer.getToPort();
//        String containerCode = mesEmptyContainer.getContainerCode();
//        String vehicleTypeNo = mesEmptyContainer.getVehicleTypeNo();
//        String vehicleNo = mesEmptyContainer.getVehicleNo();
//
//        if(StringUtils.isEmpty(containerCode)) {
//            return AjaxResult.error("containerCode 为空");
//        }
//        if(StringUtils.isEmpty(containerTypeNo)) {
//            return AjaxResult.error("containerTypeNo 为空");
//        }
//        if(StringUtils.isEmpty(taskNo)) {
//            return AjaxResult.error("taskNo 为空");
//        }
//        if(StringUtils.isEmpty(toPort)) {
//            return AjaxResult.error("toPort 为空");
//        }
//        if(StringUtils.isEmpty(vehicleTypeNo)) {
//            return AjaxResult.error("vehicleTypeNo 为空");
//        }
//        if(StringUtils.isEmpty(vehicleNo)) {
//            return AjaxResult.error("vehicleNo 为空");
//        }
//
//        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
//            @Override
//            public AjaxResult doProcess() {
//                AjaxResult ajaxResult = workTaskService.createEmptyIn(
//                        taskNo, toPort, containerCode, vehicleTypeNo, vehicleNo, null);
//                return ajaxResult;
//            }
//        });
//        return ajaxResult;
    }

    /**
     * MES下发空托盘出库
     * @return
     */
    @PostMapping("/shipmentEmptyContainer")
    @ApiOperation("MES下发空托盘出库")
    @ApiLogger(apiName = "MES下发空托盘出库", from="MES")
    public AjaxResult shipmentEmptyContainer(@RequestBody MesEmptyContainer mesEmptyContainer) {
        String containerTypeNo = mesEmptyContainer.getContaienrTypeNo();
        String taskNo = mesEmptyContainer.getTaskNo();
        String toPort = mesEmptyContainer.getToPort();
        String vehicleTypeNo = mesEmptyContainer.getVehicleTypeNo();
        if(StringUtils.isEmpty(containerTypeNo)) {
            return AjaxResult.error("containerTypeNo 为空");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("taskNo 为空");
        }
        if(StringUtils.isEmpty(toPort)) {
            return AjaxResult.error("toPort 为空");
        }
        if(StringUtils.isEmpty(vehicleTypeNo)) {
            return AjaxResult.error("vehicleTypeNo 为空");
        }

        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = workTaskService.shipmentEmptyContainer(
                        taskNo, toPort, vehicleTypeNo);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * MES查询库存
     * @return
     */
    @PostMapping("/searchInventory")
    @ApiOperation("MES查询库存")
    @ApiLogger(apiName = "MES查询库存", from="MES")
    public AjaxResult searchInventory(@RequestBody MesSearch mesSearch) {
        String orderCode = mesSearch.getOrderCode();
        String materialCode = mesSearch.getMaterialCode();
        if(StringUtils.isEmpty(orderCode)) {
            return AjaxResult.error("orderCode 为空");
        }
        if(StringUtils.isEmpty(materialCode)) {
            return AjaxResult.error("materialCode 为空");
        }
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getOrderCode, orderCode)
                                        .ne(InventoryDetail::getTaskQty, 0)
                                        .eq(InventoryDetail::getMaterialCode, materialCode);
        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
        if(inventoryDetailList.size() == 0) {
            mesSearch.setMatchedQty(BigDecimal.ZERO);
            return AjaxResult.success(mesSearch);
        }
        BigDecimal matchedQty = inventoryDetailList.stream()
                .map(InventoryDetail::getQty).reduce(BigDecimal.ZERO,BigDecimal::add);
        mesSearch.setMatchedQty(matchedQty);

        return AjaxResult.success(mesSearch);
    }

    /**
     * MES工单入库单
     * @return
     */
    @PostMapping("/receiptOrder")
    @ApiOperation("MES工单入库单")
    @ApiLogger(apiName = "MES工单入库单", from="MES")
    public AjaxResult receiptOrder(@RequestBody MesOrder mesOrder) {
        String orderCode = mesOrder.getOrderNo();
        String materialCode = mesOrder.getMaterialCode();
        String taskNo = mesOrder.getTaskNo();
        BigDecimal orderQty = mesOrder.getOrderQty();
        if(StringUtils.isEmpty(orderCode)) {
            return AjaxResult.error("orderCode 为空");
        }
        if(StringUtils.isEmpty(materialCode)) {
            return AjaxResult.error("materialCode 为空");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("taskNo 为空");
        }
        if(orderQty == null) {
            return AjaxResult.error("orderQty 为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.receiptOrder(mesOrder);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * MES工单出库单
     * @return
     */
    @PostMapping("/shipmentOrder")
    @ApiOperation("MES工单出库单")
    @ApiLogger(apiName = "MES工单出库单", from="MES")
    public AjaxResult shipmentOrder(@RequestBody MesOrder mesOrder) {
        String orderCode = mesOrder.getOrderNo();
        String materialCode = mesOrder.getMaterialCode();
        String taskNo = mesOrder.getTaskNo();
        BigDecimal orderQty = mesOrder.getOrderQty();
        if(StringUtils.isEmpty(orderCode)) {
            return AjaxResult.error("orderCode 为空");
        }
        if(StringUtils.isEmpty(materialCode)) {
            return AjaxResult.error("materialCode 为空");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("taskNo 为空");
        }
        if(orderQty == null) {
            return AjaxResult.error("orderQty 为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.shipmentOrder(mesOrder);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * MES成品出库
     * @return
     */
    @PostMapping("/shipmentProduct")
    @ApiOperation("MES成品出库")
    @ApiLogger(apiName = "MES成品出库", from="MES")
    public AjaxResult shipmentProduct(@RequestBody MesShipmentProduct mesShipmentProduct) {
        String containerCode = mesShipmentProduct.getContainerCode();
        String fromPort = mesShipmentProduct.getFromPort();
        String toPort = mesShipmentProduct.getToPort();
        String taskNo = mesShipmentProduct.getTaskNo();
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("containerCode 为空");
        }
        if(StringUtils.isEmpty(fromPort)) {
            return AjaxResult.error("fromPort 为空");
        }
        if(StringUtils.isEmpty(toPort)) {
            return AjaxResult.error("toPort 为空");
        }
        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("taskNo 为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.shipmentProduct(mesShipmentProduct);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    /**
     * MES物料入库
     * @return
     */
    @PostMapping("/receipt")
    @ApiOperation("MES物料入库")
    @ApiLogger(apiName = "MES物料入库", from="MES")
    public AjaxResult receipt(@RequestBody MesReceipt mesReceipt) {
        String taskNo = mesReceipt.getTaskNo();
        String orderNo = mesReceipt.getOrderNo();
        String contaienrTypeNo = mesReceipt.getContainerCodeTypeNo();
        String containerCode = mesReceipt.getContainerCode();
        String toPort = mesReceipt.getToPort();
        String vehicleNo = mesReceipt.getVehicleNo();
        String vehicleTypeNo = mesReceipt.getVehicleTypeNo();
        List<MaterialData> materialData = mesReceipt.getMaterialData();

        if(StringUtils.isEmpty(taskNo)) {
            return AjaxResult.error("taskNo 为空");
        }
        if(StringUtils.isEmpty(orderNo)) {
            return AjaxResult.error("orderNo 为空");
        }
        if(StringUtils.isEmpty(contaienrTypeNo)) {
            return AjaxResult.error("contaienrTypeNo 为空");
        }
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("containerCode 为空");
        }
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("toPort 为空");
        }
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("vehicleNo 为空");
        }
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("vehicleTypeNo 为空");
        }
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("materialData 为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.receipt(mesReceipt);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }
}