ShipmentItemReceiveImpl.java 4.13 KB
package com.huaheng.api.erp.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.erp.domain.ShipmentItem;
import com.huaheng.api.erp.domain.WebserviceResult;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.JaxbXmlUtil;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
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 javax.annotation.Resource;

public class ShipmentItemReceiveImpl implements ShipmentItemReceive {

    @Resource
    private MaterialService materialService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;

    /**
     * 先检验是否有该物料,如有,执行下一步,如没有,调接口查物料
     * 查完物料后,如有,继续下一步,如没有,返回没有物料
     * 后检验是否有该库存,如有,检验库存里批次,库存地点是否一致,如果一致,执行,如果不一致,返回信息
     * @param shipmentItem
     * @return
     */
    @Override
    public String addShipment(String shipmentItem) {
        ShipmentItem shipmentItemBean = null;
        try {
            shipmentItemBean = JaxbXmlUtil.convertToJavaBean(shipmentItem, ShipmentItem.class);
        } catch (Exception e) {
            throw new ServiceException("接收处理XML失败,请检查数据!");
        }
        //校验
        if(shipmentItemBean.getSAPNO()==null){
            return WebserviceResult.error("出库单号不能为空");
        }
        if(shipmentItemBean.getItem().getMATNR()==null){
            return WebserviceResult.error("物料号不能为空");
        }
        if(shipmentItemBean.getItem().getMENCE()==null){
            return WebserviceResult.error("数量不能为空");
        }
        //检验是否有该物料
        LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
        materialWrapper.eq(Material::getCode, shipmentItemBean.getMATNR());
        Material material = materialService.getOne(materialWrapper);
        if (material == null) {
            //调接口查物料

            throw new ServiceException("该物料不存在");
        }
        LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery();
        headerWrapper.eq(ShipmentHeader::getReferCode,shipmentItemBean.getSAPNO());
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(headerWrapper);
        if (shipmentHeader == null){
            ShipmentHeader emptyShipmentHeader = new ShipmentHeader();
            emptyShipmentHeader.setShipmentType("ELO");
            emptyShipmentHeader.setReferPlatform("SAP");
            emptyShipmentHeader.setReferCode(shipmentItemBean.getSAPNO());
            if (shipmentHeaderService.saveHeader(shipmentHeader).getCode()!=200){
                throw new ServiceException("出库头表创建失败");
            }
            shipmentHeader = shipmentHeaderService.getOne(headerWrapper);
        }
        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setShipmentId(shipmentHeader.getId());
        shipmentDetail.setReferCode(shipmentItemBean.getSAPNO());
        shipmentDetail.setReferLineNum(shipmentItemBean.getItem().getSAPLINE());
        shipmentDetail.setMaterialCode(shipmentItemBean.getItem().getMATNR());
        shipmentDetail.setMaterialName(material.getName());
        shipmentDetail.setBatch(shipmentItemBean.getItem().getCHARG());
        shipmentDetail.setRequestQty(shipmentItemBean.getItem().getMENCE());
        if (shipmentDetailService.insertDetail(shipmentDetail).getCode()!=200){
            throw new ServiceException("出库明细创建失败");
        }

        return WebserviceResult.success("出库单下发成功");
    }

}