package com.huaheng.api.general.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.api.general.domain.ShipmentDomain;
import com.huaheng.api.general.domain.WmsReceipt;
import com.huaheng.api.general.service.ReceiptApiService;
import com.huaheng.api.general.service.ReceiptService;
import com.huaheng.api.general.service.ShipmentApiService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
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.domain.AjaxResult;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.domain.LocationStatus;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.receipt.detail.domain.Detail;
import com.huaheng.pc.receipt.detail.service.DetailServcie;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
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.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentContainerHeader.controller.ShipmentContainerHeaderController;
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
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 com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.controller.TaskHeaderController;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.ReceiptTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;
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.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/api/receiptApi")
@Api(tags = {"入库单接口"}, value = "入库单接口receipt")
public class ReceiptApiController {

    @Resource
    private ReceiptApiService receiptApiService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ReceiptService receiptService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ShipmentApiService shipmentApiService;
    @Resource
    private DetailServcie detailServcie;
    @Resource
    private LocationService locationService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private TaskDetailService taskDetailService;
    @Resource
    private TaskHeaderController taskHeaderController;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ReceiptContainerHeaderController receiptContainerHeaderController;
    @Resource
    private ShipmentContainerHeaderService shipmentContainerHeaderService;
    @Resource
    private ShipmentContainerDetailService shipmentContainerDetailService;
    @Resource
    private ShipmentContainerHeaderController shipmentContainerHeaderController;
    @Resource
    private ShipmentDetailService shipmentDetailService;

    /**
     * 查询库位列表
     */
    @Log(title = "配置-库存资料-库位管理", operating = "查看库位列表", action = BusinessType.GRANT)
    @PostMapping("/getAllLocation")
    @ResponseBody
    public AjaxResult getAllLocation() {
        String type = "L";
        if (StringUtils.isEmpty(type)) {
            return AjaxResult.error("type不能为空");
        }
        String warehouseCode = "CS0001";
        String row = null, line = null, layer = null;

        /* 查询库位信息*/
        LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
        locationLambdaQueryWrapper.eq(StringUtils.isNotEmpty(row), Location::getIRow, row)
                .eq(StringUtils.isNotEmpty(line), Location::getIColumn, line)
                .eq(StringUtils.isNotEmpty(layer), Location::getILayer, layer)
                .eq(Location::getIGrid, 1) //
                .eq(StringUtils.isNotEmpty(type), Location::getLocationType, type)
                .eq(Location::getWarehouseCode, warehouseCode)
                .eq(StringUtils.isNotEmpty(type), Location::getZoneCode, type);
        List<Location> locations = locationService.list(locationLambdaQueryWrapper);
        List<Location> locationList = new ArrayList<>();

        /* 查询库存明细*/
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery();
        inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode, warehouseCode);
        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambda);

        for (Location location1 : locations) {
            InventoryDetail inventoryDetail = null;
            String materialName = null;
            for (InventoryDetail inventoryDetail2 : inventoryDetailList) {
                if (location1.getCode().equals(inventoryDetail2.getLocationCode())) {
                    inventoryDetail = inventoryDetail2;
                }
            }
            List<InventoryDetail> inventoryDetails = inventoryDetailList.stream().filter(inventoryDetail1 ->
                    inventoryDetail1.getLocationCode().equals(location1.getCode())).collect(Collectors.toList());

            int userDef3 = 0;
            String status = location1.getStatus();
            String containerCode = location1.getContainerCode();
            List<String> materialNameList = inventoryDetails.stream().map(InventoryDetail::getMaterialName).collect(Collectors.toList());
            List<String> batchList = inventoryDetails.stream().map(InventoryDetail::getBatch).collect(Collectors.toList());
            List<String> materialCodeList = inventoryDetails.stream().map(InventoryDetail::getMaterialCode).collect(Collectors.toList());
            List<BigDecimal> qtyList = inventoryDetails.stream().map(InventoryDetail::getQty).collect(Collectors.toList());
            if (QuantityConstant.STATUS_LOCATION_EMPTY.equals(status)) {
                if (StringUtils.isEmpty(containerCode)) {
                    userDef3 = LocationStatus.IDLE_EMPTY_LOCATION;
                } else {
                    if (inventoryDetail == null) {
                        userDef3 = LocationStatus.IDLE_EMPTY_CONTAINER;
                    } else {
                        location1.setMaterialName(materialNameList);
                        location1.setMaterialCode(materialCodeList);
                        location1.setBatch(batchList);
                        location1.setQty(qtyList);
                        userDef3 = LocationStatus.IDLE_FULL_CONTAINER;
                    }
                }
            } else if (QuantityConstant.STATUS_LOCATION_LOCK.equals(status)) {
                if (StringUtils.isEmpty(containerCode)) {
                    userDef3 = LocationStatus.LOCK_EMPTY_LOCATION;
                } else {
                    if (inventoryDetail == null) {
                        userDef3 = LocationStatus.LOCK_EMPTY_CONTAINER;
                    } else {
                        location1.setMaterialName(materialNameList);
                        location1.setMaterialCode(materialCodeList);
                        location1.setBatch(batchList);
                        location1.setQty(qtyList);
                        userDef3 = LocationStatus.LOCK_FULL_CONTAINER;
                    }
                }
            }

            if (location1.getDeleted()) {
                if (StringUtils.isEmpty(containerCode)) {
                    userDef3 = LocationStatus.DISABLE_EMPTY_LOCATION;
                } else {
                    if (inventoryDetail == null) {
                        userDef3 = LocationStatus.DISABLE_EMPTY_CONTAINER;
                    } else {
                        location1.setMaterialName(materialNameList);
                        location1.setMaterialCode(materialCodeList);
                        location1.setBatch(batchList);
                        location1.setQty(qtyList);
                        userDef3 = LocationStatus.DISABLE_FULL_CONTAINER;
                    }
                }
            }

            location1.setUserDef3(String.valueOf(userDef3));
            locationList.add(location1);
        }
        return AjaxResult.success(locations);
    }

    /**
     * 同步入库单
     */
    /*@Log(title = "入库单添加", action = BusinessType.INSERT)
    @PostMapping("/receipt")
    @ApiOperation("入库单添加公共接口")
    @ResponseBody
    @ApiLogger(apiName = "添加入库单", from="ERP")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult receipt(@RequestBody List<WmsReceipt> wmsReceipts)
    {
        String warehouseCode = "CS0001";
        AjaxResult ajaxResult = new AjaxResult();
        for(WmsReceipt wmsReceipt : wmsReceipts) {
            int operation = wmsReceipt.getOperationType();
            List<Detail> detailList = wmsReceipt.getDetailList();
            if (operation == 0) {
                ReceiptDomain receiptDomain = new ReceiptDomain();
                ReceiptHeader receiptHeader = new ReceiptHeader();
                receiptHeader.setReferCode(wmsReceipt.getBillNo());
                receiptHeader.setWarehouseCode(warehouseCode);
                receiptHeader.setCompanyCode("BHF");
                receiptHeader.setUserDef1(wmsReceipt.getTaksNo());
                receiptHeader.setCreatedBy("WMS");
                receiptHeader.setReceiptType("DE");
                receiptDomain.setReceiptHeader(receiptHeader);
                List<ReceiptDetail> receiptDetails = new ArrayList<>();
                BigDecimal qty = wmsReceipt.getQty();
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.setWarehouseCode(warehouseCode);
                receiptDetail.setTotalQty(qty);
                receiptDetail.setMaterialCode(wmsReceipt.getItemCode());
                receiptDetail.setCompanyCode("BHF");
                receiptDetails.add(receiptDetail);
                receiptDomain.setReceiptDetails(receiptDetails);
                ajaxResult = receiptApiService.receipt(receiptDomain);
                if(!ajaxResult.hasErr()) {
                    detailServcie.saveBatch(detailList);
                }
            } else {
                ShipmentDomain shipmentDomain = new ShipmentDomain();
                ShipmentHeader shipmentHeader = new ShipmentHeader();
                shipmentHeader.setReferCode(wmsReceipt.getBillNo());
                shipmentHeader.setWarehouseCode(warehouseCode);
                shipmentHeader.setCompanyCode("BHF");
                shipmentHeader.setUserDef1(wmsReceipt.getTaksNo());
                shipmentHeader.setCreatedBy("WMS");
                shipmentHeader.setShipmentType("ELO");
                shipmentDomain.setShipmentHeader(shipmentHeader);
                List<ShipmentDetail> shipmentDetails = new ArrayList<>();
                String materialCode = wmsReceipt.getItemCode();
                BigDecimal qty = wmsReceipt.getQty();
                ShipmentDetail shipmentDetail = new ShipmentDetail();
                shipmentDetail.setWarehouseCode(warehouseCode);
                shipmentDetail.setShipQty(qty);
                shipmentDetail.setMaterialCode(materialCode);
                shipmentDetail.setCompanyCode("BHF");
                *//*创建出库单默认波次为空字符串*//*
                shipmentDetail.setBatch("");
                shipmentDetails.add(shipmentDetail);
                shipmentDomain.setShipmentDetails(shipmentDetails);
                ajaxResult = shipmentApiService.shipment(shipmentDomain);
                if(!ajaxResult.hasErr()) {
                    detailServcie.saveBatch(detailList);
                }
            }
        }
        return ajaxResult;
    }*/

    /**
     * 同步入库单
     */
    @Log(title = "入库单添加", action = BusinessType.INSERT)
    @PostMapping("/receipt")
    @ApiOperation("入库单添加公共接口")
    @ResponseBody
    @ApiLogger(apiName = "添加入库单", from = "ERP")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult receipt(@RequestBody List<WmsReceipt> wmsReceipts) {
        String warehouseCode = "CS0001";
        AjaxResult ajaxResult = new AjaxResult();

        for (WmsReceipt wmsReceipt : wmsReceipts) {
            int operation = wmsReceipt.getOperationType();
            List<Detail> detailList = wmsReceipt.getDetailList();
            for (Detail detail : detailList) {
                detail.setMaterialCode(wmsReceipt.getItemCode());
            }
            if(operation==0){
                ReceiptDomain receiptDomain = new ReceiptDomain();
                ReceiptHeader receiptHeader = new ReceiptHeader();
                receiptHeader.setReferCode(wmsReceipt.getBillNo()); /* 关联单号*/
                receiptHeader.setWarehouseCode(warehouseCode);
                receiptHeader.setCompanyCode("BHF");
                receiptHeader.setUserDef1(wmsReceipt.getTaksNo()); /* 上游任务号*/
                receiptHeader.setCreatedBy("WMS");
                receiptHeader.setReceiptType("DE");
                receiptDomain.setReceiptHeader(receiptHeader);
                List<ReceiptDetail> receiptDetails = new ArrayList<>();

                for (int i = 0; i < detailList.size(); i++) {
                    Detail detail = detailList.get(i);
                    ReceiptDetail receiptDetail = new ReceiptDetail();
                    receiptDetail.setWarehouseCode(warehouseCode);
                    receiptDetail.setTotalQty(BigDecimal.valueOf(1));
                    receiptDetail.setMaterialCode(wmsReceipt.getItemCode());
                    receiptDetail.setUserDef1(detail.getPackLabelNo());
                    receiptDetail.setCompanyCode("BHF");
                    receiptDetail.setColor(detail.getColor());
                    receiptDetails.add(receiptDetail);
                }

                receiptDomain.setReceiptDetails(receiptDetails);
                ajaxResult = receiptApiService.receipt(receiptDomain);

                /* 收货*/
                for (int i = 0; i < receiptDetails.size(); i++) {
                    receiptContainerHeaderService.saveContainer(receiptHeader.getCode(), "",
                            receiptDetails.get(i).getId(), "",
                            receiptDetails.get(i).getTotalQty(), "");
                }
                for (int i = 0; i < receiptDetails.size(); i++) {
                    LambdaQueryWrapper<ReceiptContainerDetail> receiptContainerDetailLam = Wrappers.lambdaQuery();
                    receiptContainerDetailLam.eq(ReceiptContainerDetail::getReceiptDetailId, receiptDetails.get(i).getId());
                    ReceiptContainerDetail receiptContainerDetailOne = receiptContainerDetailService.getOne(receiptContainerDetailLam);

                    LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLam = Wrappers.lambdaQuery();
                    receiptContainerHeaderLam.eq(ReceiptContainerHeader::getContainerCode, receiptContainerDetailOne.getContainerCode())
                            .eq(ReceiptContainerHeader::getStatus, 0);
                    ReceiptContainerHeader receiptContainerHeaderOne = receiptContainerHeaderService.getOne(receiptContainerHeaderLam);
                    if (receiptContainerHeaderOne == null) {
                        continue;
                    }
                    List<ReceiptContainerHeader> list = receiptContainerHeaderService.list(receiptContainerHeaderLam);
                    for (int j = 0; j < list.size(); j++) {
                        /* 任务*/
                        List<Integer> idList = Arrays.asList(Convert.toIntArray("" + list.get(j).getId()));
                        List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
                        AjaxResult receiptTask = receiptTaskService.createReceiptTask(idsList);
                        List<String> ids = (List<String>) receiptTask.getData();
                        List<Integer> integerList = new ArrayList<>();
                        CollectionUtils.collect(ids, new Transformer() {
                            @Override
                            public Object transform(Object o) {
                                return Integer.parseInt(o.toString());
                            }
                        }, integerList);

                        TaskHeader taskHeader = taskHeaderService.getById(integerList.toArray(new Integer[0])[0]);
                        taskHeaderService.updateById(taskHeader);
                        //taskHeaderService.sendTaskToWcs(integerList.toArray(new Integer[0]));
                    }
                }
                if (!ajaxResult.hasErr()) {
                    boolean result = detailServcie.saveBatch(detailList);
                    if (!result) {
                        throw new ServiceException("批量保存详情失败");
                    }
                }
            } else {
                if(wmsReceipt.getIsNew().equals("0")){
                    ShipmentDomain shipmentDomain = new ShipmentDomain();
                    ShipmentHeader shipmentHeader = new ShipmentHeader();
                    shipmentHeader.setReferCode(wmsReceipt.getBillNo());
                    shipmentHeader.setWarehouseCode(warehouseCode);
                    shipmentHeader.setCompanyCode("BHF");
                    shipmentHeader.setUserDef1(wmsReceipt.getTaksNo());
                    shipmentHeader.setCreatedBy("WMS");
                    shipmentHeader.setShipmentType("ELO");
                    shipmentDomain.setShipmentHeader(shipmentHeader);
                    List<ShipmentDetail> shipmentDetails = new ArrayList<>();
                    String materialCode = wmsReceipt.getItemCode();
                    BigDecimal qty = wmsReceipt.getQty();
                    ShipmentDetail shipmentDetail = new ShipmentDetail();
                    shipmentDetail.setWarehouseCode(warehouseCode);
                    shipmentDetail.setShipQty(qty);
                    shipmentDetail.setMaterialCode(materialCode);
                    shipmentDetail.setCompanyCode("BHF");
                    shipmentDetail.setColor(wmsReceipt.getColor());
                    if (StringUtils.isNotNull(wmsReceipt.getOrders())) {
                        shipmentDetail.setOrders(wmsReceipt.getOrders());
                    } else {
                        shipmentDetail.setOrders(0);
                    }
//                创建出库单默认波次为空字符串
                    shipmentDetail.setBatch("");
                    shipmentDetails.add(shipmentDetail);
                    shipmentDomain.setShipmentDetails(shipmentDetails);
                    ajaxResult = shipmentApiService.shipment(shipmentDomain);
                    if (!ajaxResult.hasErr()) {
                        detailServcie.saveBatch(detailList);
                    }
                } else if (wmsReceipt.getIsNew().equals("1")) {
                    ajaxResult = removeTaskAndContainerAndShipment(wmsReceipt.getBillNo());
                }
            }
        }
        return ajaxResult;
    }

    @Transactional(rollbackFor = Exception.class)
    protected AjaxResult removeTaskAndContainerAndReceipt(String billNo){
        String code = null;
        AjaxResult ajaxResult1=new AjaxResult();
        AjaxResult ajaxResult2=new AjaxResult();
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billNo));
        code = receiptHeader.getCode();
        List<TaskDetail> taskDetailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>().eq(TaskDetail::getBillCode, code));
        if(CollectionUtils.isNotEmpty(taskDetailList)){
            List<Integer> taskHeaderIds = taskDetailList.stream().map(taskDetail -> taskDetail.getTaskId()).collect(Collectors.toList());
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < taskHeaderIds.size(); i++) {
                if (i == taskHeaderIds.size() - 1) {
                    stringBuilder.append(taskHeaderIds.get(i));
                }else {
                    stringBuilder.append(taskHeaderIds.get(i) + ",");
                }
            }
            try {
                ajaxResult1 = taskHeaderController.remove(stringBuilder.toString());
            }catch (Exception e){
                throw new ServiceException("任务已经下发,不允许取消");
            }
        }
        if (ajaxResult1.getCode() == 200||CollectionUtils.isEmpty(taskDetailList)) {
            List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(new LambdaQueryWrapper<ReceiptContainerDetail>().eq(ReceiptContainerDetail::getReceiptCode, code));
            if(CollectionUtils.isNotEmpty(receiptContainerDetails)){
                List<Integer> receiptContainerHeaderIds = receiptContainerDetails.stream().map(receiptContainerDetail -> receiptContainerDetail.getReceiptContainerId()).collect(Collectors.toList());
                StringBuilder stringBuilder2 = new StringBuilder();
                for (int i = 0; i < receiptContainerHeaderIds.size(); i++) {
                    if (i == receiptContainerHeaderIds.size() - 1) {
                        stringBuilder2.append(receiptContainerHeaderIds.get(i));
                    }else {
                        stringBuilder2.append(receiptContainerHeaderIds.get(i) + ",");
                    }
                }
                ajaxResult2 = receiptContainerHeaderController.remove(stringBuilder2.toString());
            }
            if(ajaxResult2.getCode()==200||CollectionUtils.isEmpty(receiptContainerDetails)){
                receiptHeaderService.remove(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getCode,code));
                receiptDetailService.remove(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReceiptCode,code));
            }
        }
        return AjaxResult.success("取消入库单/入库组盘/任务成功");
    }
    @Transactional(rollbackFor = Exception.class)
    protected AjaxResult removeTaskAndContainerAndShipment(String billNo){
        String code = null;
        AjaxResult ajaxResult1=new AjaxResult();
        AjaxResult ajaxResult2=new AjaxResult();
        List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>().eq(ShipmentHeader::getReferCode, billNo));
        for (ShipmentHeader shipmentHeader : shipmentHeaderList) {
            code = shipmentHeader.getCode();
            List<TaskDetail> taskDetailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>().eq(TaskDetail::getBillCode, code));
            if(CollectionUtils.isNotEmpty(taskDetailList)){
                List<Integer> taskHeaderIds = taskDetailList.stream().map(taskDetail -> taskDetail.getTaskId()).collect(Collectors.toList());
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < taskHeaderIds.size(); i++) {
                    if (i == taskHeaderIds.size() - 1) {
                        stringBuilder.append(taskHeaderIds.get(i));
                    }else {
                        stringBuilder.append(taskHeaderIds.get(i) + ",");
                    }
                }
                try {
                    ajaxResult1 = taskHeaderController.remove(stringBuilder.toString());
                }catch (Exception e){
                    throw new ServiceException("任务已经下发,不允许取消");
                }
            }
            if (ajaxResult1.getCode() == 200||CollectionUtils.isEmpty(taskDetailList)) {
                List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(new LambdaQueryWrapper<ShipmentContainerDetail>().eq(ShipmentContainerDetail::getShipmentCode, code));
                if(CollectionUtils.isNotEmpty(shipmentContainerDetails)){
                    List<Integer> integerList = shipmentContainerDetails.stream().map(shipmentContainerDetail -> shipmentContainerDetail.getShippingContainerId()).collect(Collectors.toList());
                    StringBuilder stringBuilder2 = new StringBuilder();
                    for (int i = 0; i < integerList.size(); i++) {
                        if (i == integerList.size() - 1) {
                            stringBuilder2.append(integerList.get(i));
                        }else {
                            stringBuilder2.append(integerList.get(i) + ",");
                        }
                    }
                    ajaxResult2 = shipmentContainerHeaderController.remove(stringBuilder2.toString());
                }
                if(ajaxResult2.getCode()==200||CollectionUtils.isEmpty(shipmentContainerDetails)){
                    shipmentHeaderService.remove(new LambdaQueryWrapper<ShipmentHeader>().eq(ShipmentHeader::getCode,code));
                    shipmentDetailService.remove(new LambdaQueryWrapper<ShipmentDetail>().eq(ShipmentDetail::getShipmentCode,code));
                }
            }
        }
        return AjaxResult.success("取消出库单/出库组盘/任务成功");
    }



//    /**
//     * 同步入库单
//     */
//    @Log(title = "入库单添加", action = BusinessType.INSERT)
//    @PostMapping("/receipt")
//    @ApiOperation("入库单添加公共接口")
//    @ResponseBody
//    @ApiLogger(apiName = "添加入库单", from="ERP")
//    public AjaxResult receipt(@RequestBody WmsReceipt wmsReceipt)
//    {
//
//    }


//    /**
//     * 入库单下发
//     */
//    @Log(title = "入库单下发", action = BusinessType.INSERT)
//    @PostMapping("/insertReceipt")
//    @ApiOperation("入库单下发接口")
//    @ResponseBody
//    @ApiLogger(apiName = "下发入库单", from="ERP")
//    public AjaxResult MaterialApi(@RequestBody Receipt receipt) {
//        System.out.println("————————开始接收入库单——————————");
//        System.out.println(receipt);
//        AjaxResult ajaxResult = receiptService.insertReceipt(receipt);
//        return ajaxResult;
//    }

    /**
     * 取消入库单
     */
    @Log(title = "入库-入库单 ", operating = "入库单删除", action = BusinessType.UPDATE)
    @PostMapping("/remove")
    @ResponseBody
    @ApiLogger(apiName = "取消入库单", from = "ERP")
    public AjaxResult remove(@RequestBody List<String> receiptCodeList) {
        if (receiptCodeList == null && receiptCodeList.size() < 1) {
            return AjaxResult.error("单号列表为空");
        }
        return receiptApiService.remove(receiptCodeList);
    }

    /**
     * 入库单查询
     */
    @Log(title = "入库-入库单 ", operating = "入库单删除", action = BusinessType.UPDATE)
    @GetMapping("/search")
    @ResponseBody
    @ApiLogger(apiName = "查询入库单", from = "ERP")
    public AjaxResult search(@RequestParam String receiptCode,
                             @RequestParam String companyCode,
                             @RequestParam String warehouseCode) {
        return receiptApiService.search(receiptCode, companyCode, warehouseCode);
    }
}