PDAController.java 15.4 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.BoxInfo;
import com.huaheng.api.erp.domain.PDAInventory;
import com.huaheng.api.erp.domain.ReturnOfGoods;
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.service.LocationService;
import com.huaheng.pc.config.proPackaging.domain.ProPackaging;
import com.huaheng.pc.config.proPackaging.service.IProPackagingService;
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.service.InventoryHeaderService;
import com.huaheng.pc.inventory.inventoryHistoryHeader.service.impl.InventoryHistoryHeaderServiceImpl;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerHeader.controller.ReceiptContainerHeaderController;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

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

@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 ContainerService containerService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private PDAService pdaService;
    @Resource
    private IProPackagingService proPackingService;

    @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("/complement")
    @ApiOperation("补充条码")
    @ResponseBody
    @ApiLogger(apiName = "补充条码", from="PDA")
    public AjaxResult complement(@RequestBody Map<String,String> map) {
        String warehouseCode = QuantityConstant.DEFAULT_WAREHOUSE;
        String containerCode = map.get("containerCode");
        String boxCode = map.get("boxCode");
        if(StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("没有容器号");
        }
        Container containerByCode = containerService.getContainerByCode(containerCode);
        if (containerByCode==null)
        {
            return AjaxResult.error("容器号不存在");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.complement(warehouseCode, containerCode,boxCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }




    @PostMapping("/clearInventory")
    @ApiOperation("释放库存")
    @ResponseBody
    @ApiLogger(apiName = "释放库存", from="PDA")
    public AjaxResult clearInventory(@RequestBody Map<String,String> map) {
        String warehouseCode = QuantityConstant.DEFAULT_WAREHOUSE;
        String contaienrCode = map.get("containerCode");
        if(StringUtils.isEmpty(contaienrCode)) {
            return AjaxResult.error("没有容器号");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.clearInventory(warehouseCode, contaienrCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }




    @PostMapping("/bufferStorage")
    @ApiOperation("入库缓存区入库")
    @ResponseBody
    @ApiLogger(apiName = "入库缓存区入库", from="PDA")
    public AjaxResult bufferStorage(@RequestBody Map<String,String> map) {
        String containerCode = map.get("containerCode");
        LambdaQueryWrapper<Container> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Container::getCode, containerCode);
        Container container = containerService.getOne(queryWrapper);
        String location=container.getLocationCode();

        if (StringUtils.isEmpty(location))
        {
            return AjaxResult.error("这个容器没有库位,出问题了");
        }

        if(container == null) {
            return AjaxResult.error("没有这个容器");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.bufferStorage(containerCode,location);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }




    @PostMapping("/abnormalFeedback")
    @ApiOperation("缓存区异常信息扫码反馈显示出来")
    @ResponseBody
    @ApiLogger(apiName = "缓存区异常信息扫码反馈显示出来", from="PDA")
    public AjaxResult abnormalFeedback(@RequestBody Map<String,String> map) {
        String containerCode = map.get("containerCode");
        LambdaQueryWrapper<Container> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(Container::getCode, containerCode);
        Container container = containerService.getOne(queryWrapper);
        if(container == null) {
            return AjaxResult.error("没有这个容器");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.abnormalFeedback(containerCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    @PostMapping("/deleteReceiptDetails")
    @ApiOperation("删除入库单明细")
    @ResponseBody
    @ApiLogger(apiName = "删除入库单明细", from="PDA")
    public AjaxResult deleteReceiptDetails(@RequestBody Map<String,String> map) {
        String containerCode = map.get("containerCode");
        String boxCode = map.get("boxCode");
        if (StringUtils.isEmpty(containerCode)&&StringUtils.isEmpty(boxCode))
        {
            return AjaxResult.error("容器跟箱码。必填项不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.deleteReceiptDetails(boxCode, containerCode);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }



    @PostMapping("/supplementaryWarehousingOrder")
    @ApiOperation("补充入库单明细")
    @ResponseBody
    @ApiLogger(apiName = "补充入库单明细", from="PDA")
    public AjaxResult supplementaryWarehousingOrder(@RequestBody Map<String,String> map) {
        String containerCode = map.get("containerCode");
        String boxCode = map.get("boxCode");
        String chipBarcode1 = map.get("chipBarcode1");
        if (StringUtils.isEmpty(containerCode)&&StringUtils.isEmpty(boxCode)&&StringUtils.isEmpty(chipBarcode1))
        {
            return AjaxResult.error("容器跟箱码。必填项不能为空");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.supplementaryWarehousingOrder(boxCode, containerCode,chipBarcode1);
                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("/getBoxInfoFromBoxCode")
    @ApiOperation("根据箱码获取整箱信息")
    @ResponseBody
    @ApiLogger(apiName = "根据箱码获取整箱信息", from="PDA")
    public AjaxResult getBoxInfoFromBoxCode(@RequestBody Map<String, String> param) {
        String boxCode = param.get("boxCode");
        if (StringUtils.isEmpty(boxCode)) {
            return AjaxResult.error("根据箱码获取整箱信息, 没有箱号");
        }
        LambdaQueryWrapper<InventoryHistoryDetail> inventoryHistoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
        inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getBoxCode, boxCode);
        List<InventoryHistoryDetail> inventoryHistoryDetailList =
                inventoryHistoryDetailService.list(inventoryHistoryDetailLambdaQueryWrapper);
        if(inventoryHistoryDetailList.size() == 0) {
            return AjaxResult.error("根据箱码没有找到整箱信息");
        }
        InventoryHistoryDetail inventoryHistoryDetail = inventoryHistoryDetailList.get(0);
        String proPackagingStr = inventoryHistoryDetail.getProPackaing();
        if(StringUtils.isEmpty(proPackagingStr)) {
            return AjaxResult.error("没有包装字段");
        }
        LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
        proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, proPackagingStr);
        ProPackaging proPackaging = proPackingService.getOne(proPackagingLambdaQueryWrapper);
        if(proPackaging == null) {
            return AjaxResult.error("没有包装信息");
        }
        int pieceBox = proPackaging.getPieceBox();
        List<InventoryHistoryDetail> subinventoryHistoryDetailList = inventoryHistoryDetailList.subList(0, pieceBox);
        return AjaxResult.success(subinventoryHistoryDetailList);
    }

    @PostMapping("/returnOfGoodsReceipt")
    @ApiOperation("退货通知单入库")
    @ResponseBody
    @ApiLogger(apiName = "退货通知单入库", from="PDA")
    public AjaxResult returnOfGoodsReceipt(@RequestBody ReturnOfGoods returnOfGoods) {
        String containerCode = returnOfGoods.getContainerCode();
        List<BoxInfo> listBoxInfos = returnOfGoods.getListBoxInfo();
        String receiptCode = returnOfGoods.getReceiptCode();
        String orderCode = returnOfGoods.getOrderCode();
        String orderName = returnOfGoods.getOrderCode();
        if (StringUtils.isEmpty(containerCode)) {
            return AjaxResult.error("退货通知单入库, 没有托盘号");
        }
        if (StringUtils.isEmpty(receiptCode)) {
            return AjaxResult.error("退货通知单入库, 没有入库单号");
        }
        if (StringUtils.isEmpty(orderCode)) {
            return AjaxResult.error("退货通知单入库, 没有订单号");
        }
        if (StringUtils.isEmpty(orderName)) {
            return AjaxResult.error("退货通知单入库, 没有订单名称");
        }
        if (!(listBoxInfos != null && listBoxInfos.size() > 0)) {
            return AjaxResult.error("退货通知单入库, 没有箱码信息");
        }
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = pdaService.returnOfGoodsReceipt(containerCode,
                        receiptCode, listBoxInfos, orderCode, orderName);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

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