ERPServiceImpl.java 10.6 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.support.Convert;
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.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.task.taskHeader.service.ReceiptTaskService;
import org.aspectj.weaver.loadtime.Aj;
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.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;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult innerReceipt(String containerCode, String position, String orderCode,
                                   String orderName, List<BoxInfo> boxInfoList,
                                   String receiptCode, 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, receiptCode);
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
        if(receiptHeader == null) {
            receiptHeader = new ReceiptHeader();
            receiptHeader.setCode(receiptCode);
            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);
        String materialCode1 = null, batch1 = null;
        for(BoxInfo boxInfo : boxInfoList) {
            String boxCode = boxInfo.getBoxCode();
            String boxPosition = boxInfo.getBoxPosition();
            List<ChipInfos> chipInfoList = boxInfo.getChipInfos();
            materialCode1 = boxInfo.getMaterialCode();
            String level = boxInfo.getLevel();
            String color = boxInfo.getColor();
            BigDecimal qty = boxInfo.getQty();
            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(receiptCode);
        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.setContainerType(containerTypeCode);
        receiptContainerHeader1.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
        receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
        receiptContainerHeader1.setStack(stack);
        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(receiptCode);
                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("保存入库组盘信息成功");
    }
}