ERPServiceImpl.java 16.9 KB
package com.huaheng.api.erp.service;

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.erp.domain.BoxInfo;
import com.huaheng.api.erp.domain.ChipInfos;
import com.huaheng.api.erp.domain.MaterialInfo;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.security.ShiroUtils;
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.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
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.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskHeader.service.ReceiptTaskService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ERPServiceImpl implements ERPService {

    @Resource
    private ContainerService containerService;
    @Resource
    private ContainerTypeService containerTypeService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private MaterialService materialService;

    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult innerReceipt(String containerCode, String position, String orderCode,
                                   String orderName, List<BoxInfo> boxInfoList,
                                    String stack, int qc) {
        String warehouseCode = "CS0001";
        boolean result = false;
        Container container = containerService.getContainerByCode(containerCode, warehouseCode);
        if(container == null) {
            return AjaxResult.error("根据托盘号:" + containerCode + "没有找到匹配的容器");
        }
        String locationCode = container.getLocationCode();
        if(StringUtils.isNotEmpty(locationCode)) {
            return AjaxResult.error("这个容器在库位上,不能用来入库, 托盘号:" + containerCode);
        }
        String containerTypeCode = container.getContainerType();
        if(containerTypeCode == null) {
            return AjaxResult.error("容器类型编码为空");
        }
        ContainerType containerType = containerTypeService.getContainerTypeByCode(containerTypeCode, warehouseCode);
        if(containerType == null) {
            return AjaxResult.error("容器类型为空");
        }
        if(boxInfoList == null || boxInfoList.size() == 0) {
            return AjaxResult.error("箱信息为空");
        }

        List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
        LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        receiptContainerHeaderLambdaQueryWrapper.eq(ReceiptContainerHeader::getContainerCode, containerCode)
                .lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED);
        ReceiptContainerHeader receiptContainerHeader =
                receiptContainerHeaderService.getOne(receiptContainerHeaderLambdaQueryWrapper);
        if(receiptContainerHeader != null) {
            return AjaxResult.error("容器已经有组盘信息,容器号:" + containerCode);
        }

        LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
        receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getCode, orderCode);
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
        if(receiptHeader == null) {
            receiptHeader = new ReceiptHeader();
            receiptHeader.setCode(orderCode);
            receiptHeader.setReceiptType("SC");
            receiptHeader.setWarehouseCode(warehouseCode);
            receiptHeader.setCompanyCode("JY");
            receiptHeader.setFirstStatus(200);
            receiptHeader.setLastStatus(200);
            receiptHeader.setWarehouseCode(warehouseCode);
            receiptHeader.setCreatedBy("赋码系统");
            receiptHeader.setLastUpdatedBy("赋码系统");
            result = receiptHeaderService.save(receiptHeader);
            if(!result) {
                throw new ServiceException("保存入库单失败");
            }
        }

        BigDecimal totalQty = new BigDecimal(0);
<<<<<<< HEAD
        String materialCode1 = null, batch1 = null, level1 = null,
                color1 = null, materialPackage1 = null;
=======
        String materialCode1 = null, batch1 = null, level1=null,color1=null,materialPackage1=null;
>>>>>>> 6e593942 (历史库存记录 入库)
        for(BoxInfo boxInfo : boxInfoList) {
            String boxCode = boxInfo.getBoxCode();
            String boxPosition = boxInfo.getBoxPosition();
            List<ChipInfos> chipInfoList = boxInfo.getChipInfos();
            materialCode1 = boxInfo.getMaterialCode();
<<<<<<< HEAD
=======
            materialPackage1 = boxInfo.getMaterialPackage();
>>>>>>> 6e593942 (历史库存记录 入库)
            level1 = boxInfo.getLevel();
            color1 = boxInfo.getColor();
            BigDecimal qty = boxInfo.getQty();
            materialPackage1 = boxInfo.getMaterialPackage();
            batch1 = boxInfo.getBatch();
            totalQty = totalQty.add(qty);
        }
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setWarehouseCode(warehouseCode);
        receiptDetail.setCompanyCode("JY");
        receiptDetail.setMaterialCode(materialCode1);
        receiptDetail.setOpenQty(totalQty);
        receiptDetail.setTotalQty(totalQty);
        receiptDetail.setBatch(batch1);
        receiptDetail.setReceiptCode(orderCode);
        receiptDetail.setCreatedBy("赋码系统");
        receiptDetail.setLastUpdatedBy("赋码系统");
        receiptDetail.setReceiptId(receiptHeader.getId());
        result = receiptDetailService.save(receiptDetail);
        if(!result) {
            throw new ServiceException("保存入库单详情失败");
        }

        ReceiptContainerHeader receiptContainerHeader1 = new ReceiptContainerHeader();
        receiptContainerHeader1.setWarehouseCode(warehouseCode);
        receiptContainerHeader1.setCompanyCode("JY");
        receiptContainerHeader1.setContainerCode(containerCode);
        receiptContainerHeader1.setPosition(position);
        receiptContainerHeader1.setColor(color1);//色号
        receiptContainerHeader1.setLevel(level1);//等级
        receiptContainerHeader1.setMaterialPackage(materialPackage1);//包装
        receiptContainerHeader1.setOrderCode(orderCode);//订单编号
        receiptContainerHeader1.setOrderName(orderName);//订单名称
        receiptContainerHeader1.setBatch(batch1);//批次
        receiptContainerHeader1.setMaterialCode(materialCode1);//物料编码
        receiptContainerHeader1.setContainerType(containerTypeCode);
        receiptContainerHeader1.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
        receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
<<<<<<< HEAD
        receiptContainerHeader1.setLevel(level1);
        receiptContainerHeader1.setColor(color1);
        receiptContainerHeader1.setBatch(batch1);
        receiptContainerHeader1.setOrderCode(orderCode);
        receiptContainerHeader1.setOrderName(orderName);
        receiptContainerHeader1.setMaterialPackage(materialPackage1);
        receiptContainerHeader1.setMaterialCode(materialCode1);
        receiptContainerHeader1.setStack(stack);
=======
        receiptContainerHeader1.setStack(stack);//设置垛型
>>>>>>> 6e593942 (历史库存记录 入库)
        receiptContainerHeader1.setCreatedBy("赋码系统");
        receiptContainerHeader1.setLastUpdatedBy("赋码系统");
        result = receiptContainerHeaderService.save(receiptContainerHeader1);
        if(!result) {
            throw new ServiceException("保存入库组盘头失败");
        }
        for(BoxInfo boxInfo : boxInfoList) {
            String boxCode = boxInfo.getBoxCode();
            String boxPosition = boxInfo.getBoxPosition();
            List<ChipInfos> chipInfoList = boxInfo.getChipInfos();
            String materialCode = boxInfo.getMaterialCode();
            Material material = materialService.findAllByCode(materialCode, warehouseCode);
            String level = boxInfo.getLevel();
            String color = boxInfo.getColor();
            BigDecimal qty = boxInfo.getQty();
            String batch = boxInfo.getBatch();
            for(ChipInfos chipInfos : chipInfoList) {
                ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
                String chipCode = chipInfos.getChipBarcode();
                receiptContainerDetail.setWarehouseCode(warehouseCode);
                receiptContainerDetail.setCompanyCode("JY");
                receiptContainerDetail.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
                receiptContainerDetail.setChipCode(chipCode);
                receiptContainerDetail.setMaterialCode(materialCode);
                receiptContainerDetail.setMaterialName(material.getName());
                receiptContainerDetail.setMaterialSpec(material.getSpec());
                receiptContainerDetail.setMaterialUnit(material.getUnit());
                receiptContainerDetail.setLevel(level);
                receiptContainerDetail.setColor(color);
                receiptContainerDetail.setQty(new BigDecimal(1));
                receiptContainerDetail.setBatch(batch);
                receiptContainerDetail.setReceiptCode(orderCode);
                receiptContainerDetail.setBoxCode(boxCode);
                receiptContainerDetail.setReceiptType("SC");
                receiptContainerDetail.setInventorySts("good");
                receiptContainerDetail.setCreatedBy("赋码系统");
                receiptContainerDetail.setLastUpdatedBy("赋码系统");
                receiptContainerDetail.setBoxPosition(boxPosition);
                receiptContainerDetail.setReceiptId(receiptHeader.getId());
                receiptContainerDetail.setReceiptDetailId(receiptDetail.getId());
                receiptContainerDetail.setReceiptContainerId(receiptContainerHeader1.getId());
                receiptContainerDetailList.add(receiptContainerDetail);
            }
        }
        result = receiptContainerDetailService.saveBatch(receiptContainerDetailList);
        if(!result) {
            throw new ServiceException("保存入库组盘详情失败");
        }
        Integer id = receiptContainerHeader1.getId();
        result = receiptTaskService.createReceiptTask(id, warehouseCode);
        if(!result) {
            throw new ServiceException("生产任务失败");
        }
        return AjaxResult.success("保存入库组盘信息成功");
    }

    private List<Integer> insertTodayShipmentDetail(Integer shipmentHeaderId,List<MaterialInfo> materialList,String companyCode,BigDecimal totalQty,String orderCode){
        List<Integer> shipmentDetailIds = new ArrayList<>();
        //
        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentHeaderId);
        BigDecimal reqQty = new BigDecimal(0);
        String materialCode1 = null, batch1 = null;

        for(MaterialInfo materialInfo : materialList){
            materialCode1 = materialInfo.getMaterialCode();
            String level = materialInfo.getLevel();
            String color = materialInfo.getColor();
            BigDecimal qty = materialInfo.getQty();
            batch1 = materialInfo.getBatch();
            reqQty = reqQty.add(qty);
        }
        if(totalQty.compareTo(reqQty) < 0 ){
            throw new ServiceException("出库数量超出实际库存数量");
        }
        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setShipmentId(shipmentHeader.getId());
        shipmentDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
        shipmentDetail.setCompanyCode("CS0001");
        shipmentDetail.setShipmentCode(shipmentHeader.getCode());
        shipmentDetail.setMaterialCode(materialCode1);
        shipmentDetail.setRequestQty(BigDecimal.ZERO);//请求数量
        shipmentDetail.setShipQty(reqQty);
        return null;
    }

    @Override
    public AjaxResult innerShipment(String shipmentCode, String shipmentType, String carType, String orderCode, List<MaterialInfo> materialList, String remake, Date scheduleDate, Integer havContainer, Integer paper, Integer pay, String stack) {
        String warehouseCode = "CS0001";

//        LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambda = Wrappers.lambdaQuery();
//        inventoryHeaderLambda.eq(InventoryHeader::)
//        inventoryHeaderService
//
//
//        LambdaQueryWrapper<ShipmentHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
//        receiptHeaderLambdaQueryWrapper.eq(ShipmentHeader::getCode, shipmentCode);
//        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
//        if(shipmentHeader == null) {
//            shipmentHeader = new ShipmentHeader();
//            shipmentHeader.setCode(shipmentCode);
//            shipmentHeader.setShipmentType("SP");
//            shipmentHeader.setWarehouseCode(warehouseCode);
//            shipmentHeader.setCompanyCode("JY");
//            shipmentHeader.setFirstStatus(200);
//            shipmentHeader.setLastStatus(200);
//            shipmentHeader.setWarehouseCode(warehouseCode);
//            shipmentHeader.setCreatedBy("tzh");
//            shipmentHeader.setLastUpdatedBy("tzh");
//            shipmentHeaderService.save(shipmentHeader);
//            if(true) {
//                throw new ServiceException("保存出库单失败");
//            }
//        }
//
//        LambdaQueryWrapper<Zone> zoneLambdaQueryWrapper = Wrappers.lambdaQuery();
//        zoneLambdaQueryWrapper.eq(Zone::getArea, area);
//        Zone zone = zoneService.getOne(zoneLambdaQueryWrapper);
//        String zoneCode = zone.getCode();
//
//        LambdaQueryWrapper<Station> stationLambdaQueryWrapper = Wrappers.lambdaQuery();
//        stationLambdaQueryWrapper.eq(Station::getArea, area)
//                .eq(Station::getLine, line);
//        List<Station> stationList = stationService.list(stationLambdaQueryWrapper);
//        if(stationList == null || stationList.size() == 0) {
//            return AjaxResult.error("区域和线体不正确");
//        }
//        List<String> portCodeList = stationList.stream().map(t->t.getCode()).collect(Collectors.toList());
//        if(portCodeList == null || portCodeList.size() == 0) {
//            return AjaxResult.error("线体编码或者区域不正确,没有找到对应出口");
//        }
//        int areaInt = Integer.parseInt(area);
//        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
//        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getZoneCode, zoneCode)
//                .eq(InventoryDetail::getMaterialCode, materialCode)
//                .eq(InventoryDetail::getTaskQty, 0);
//        List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
//        if(inventoryDetailList == null || inventoryDetailList.size() == 0) {
//            return AjaxResult.error("没有对应库存");
//        }
        return null;
    }
}