PDAController.java 7.07 KB
package com.huaheng.api.erp.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.erp.domain.BoxDomain;
import com.huaheng.api.erp.domain.ERPReceipt;
import com.huaheng.api.erp.domain.PDAInventory;
import com.huaheng.api.erp.service.PDAService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
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.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.inventory.InventoryHistoryDetail.domain.InventoryHistoryDetail;
import com.huaheng.pc.inventory.InventoryHistoryDetail.service.impl.InventoryHistoryDetailServiceImpl;
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.inventory.inventoryHistoryHeader.domain.InventoryHistoryHeader;
import com.huaheng.pc.inventory.inventoryHistoryHeader.service.impl.InventoryHistoryHeaderServiceImpl;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
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.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

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

    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private InventoryHistoryHeaderServiceImpl inventoryHistoryHeaderService;
    @Resource
    private InventoryHistoryDetailServiceImpl inventoryHistoryDetailService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private LocationService locationService;
    @Resource
    private ContainerService containerService;
    @Resource
    private PDAService pdaService;

    @PostMapping("/lockInventory")
    @ApiOperation("锁定库存")
    @ResponseBody
    @ApiLogger(apiName = "锁定库存", from="PDA")
    public AjaxResult lockInventory(@RequestBody PDAInventory pdaInventory) {
        String locationCode = pdaInventory.getLocationCode();
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, locationCode);
        List<InventoryDetail> inventoryDetailList =
                inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
        if(inventoryDetailService == null) {
            throw new ServiceException("");
        }
        return null;
    }


    @PostMapping("/clearInventory")
    @ApiOperation("释放库存")
    @ResponseBody
    @ApiLogger(apiName = "释放库存", from="PDA")
    public AjaxResult clearInventory(@RequestBody PDAInventory pdaInventory) {
        String warehouseCode = QuantityConstant.DEFAULT_WAREHOUSE;
        String locationCode = pdaInventory.getLocationCode();
        if(StringUtils.isEmpty(locationCode)) {
            return AjaxResult.error("没有库位号");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.clearInventory(warehouseCode, locationCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/createShipment")
    @ApiOperation("创建销售出库单")
    @ResponseBody
    @ApiLogger(apiName = "创建销售出库单", from="PDA")
    public AjaxResult createShipment(@RequestBody PDAInventory pdaInventory) {
        String platformCode = pdaInventory.getPlatformCode();
        List<String> refereCodeList = pdaInventory.getReferCodeList();
        if(StringUtils.isEmpty(platformCode)) {
            return AjaxResult.error("没有月台号");
        }
        if (!(refereCodeList != null && refereCodeList.size() > 0)){
            return AjaxResult.error("没有订单");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.createShipment(platformCode, refereCodeList);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/shipmentContainer")
    @ApiOperation("整托出库")
    @ResponseBody
    @ApiLogger(apiName = "整托出库", from="PDA")
    public AjaxResult shipmentContainer(@RequestBody String containerCode) {
        if(StringUtils.isNotEmpty(containerCode)) {
            return AjaxResult.error("整托出库, 托盘号为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.shipmentContainer(containerCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/shipmentBox")
    @ApiOperation("整箱出库")
    @ResponseBody
    @ApiLogger(apiName = "整箱出库", from="PDA")
    public AjaxResult shipmentContainer(@RequestBody BoxDomain boxDomain) {
        String containerCode = boxDomain.getContainerCode();
        String boxCode = boxDomain.getBoxCode();
        if(StringUtils.isNotEmpty(containerCode)) {
            return AjaxResult.error("整箱出库, 托盘号为空");
        }
        if(StringUtils.isNotEmpty(boxCode)) {
            return AjaxResult.error("整箱出库, 箱码为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.shipmentContainer(containerCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }
}