ShipmentItemReceiveImpl.java 4.37 KB
package com.huaheng.api.erp.server;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.erp.domain.Shipment;
import com.huaheng.api.erp.domain.WebserviceResult;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.JaxbXmlUtil;
import com.huaheng.common.utils.StringUtils;
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) {
        System.out.println(shipmentItem);
        if(StringUtils.isEmpty(shipmentItem)){
            return WebserviceResult.error("XML异常");
        }
        Shipment shipmentBean = null;
        try {
            shipmentBean = JSON.parseObject(shipmentItem, Shipment.class);
        } catch (Exception e) {
            return WebserviceResult.error("接收处理XML失败,请检查数据!");
        }
        if(shipmentBean==null){
            return WebserviceResult.error("xml数据格式有误,请校验");
        }
        //校验
        if(shipmentBean.getSAPNO()==null){
            return WebserviceResult.error("出库单号不能为空");
        }
        if(shipmentBean.getMATNR()==null){
            return WebserviceResult.error("物料号不能为空");
        }
        if(shipmentBean.getMENCE()==null){
            return WebserviceResult.error("数量不能为空");
        }
        //检验是否有该物料
        LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
        materialWrapper.eq(Material::getCode, shipmentBean.getMATNR());
        Material material = materialService.getOne(materialWrapper);
        if (material == null) {
            //调接口查物料

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

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

}