ShipmentItemReceiveImpl.java 7.32 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.ErpMaterial;
import com.huaheng.api.erp.domain.Shipment;
import com.huaheng.api.erp.domain.ShipmentItem;
import com.huaheng.api.erp.domain.WebserviceResult;
import com.huaheng.api.wcs.service.erpService.ErpService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.JaxbXmlUtil;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
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 com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import com.huaheng.pc.task.taskHeader.service.WorkTaskService;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

public class ShipmentItemReceiveImpl implements ShipmentItemReceive {

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



    /**
     * 先检验是否有该物料,如有,执行下一步,如没有,调接口查物料
     * 查完物料后,如有,继续下一步,如没有,返回没有物料
     * 后检验是否有该库存,如有,检验库存里批次,库存地点是否一致,如果一致,执行,如果不一致,返回信息
     *
     * @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.getItem() == null) {
            return WebserviceResult.error("item参数不能为空");
        }
        List<ShipmentItem> items = shipmentBean.getItem();
        for (ShipmentItem item : items) {

            if (item.getSAPLINE() == null){
                return WebserviceResult.error("出库行号不能为空");
            }

            if (item.getMATNR() == null) {
                return WebserviceResult.error("物料号不能为空");
            }
            if (item.getMENGE() == null) {
                return WebserviceResult.error("数量不能为空");
            }

            //检验是否有该物料
            LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
            materialWrapper.eq(Material::getCode, item.getMATNR());
            Material material = materialService.getOne(materialWrapper);
            if (material == null) {
                //调接口查物料
                ErpMaterial erpMaterial = erpService.materialSearch(item.getMATNR());
                if(StringUtils.isEmpty(erpMaterial.getName())) {
                    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());
            String code = shipmentHeaderService.createCode(emptyShipmentHeader.getShipmentType());
            emptyShipmentHeader.setId(null);
            emptyShipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
            emptyShipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
            emptyShipmentHeader.setLastUpdated(null);
            emptyShipmentHeader.setLastUpdatedBy("erp");
            emptyShipmentHeader.setCreated(null);
            emptyShipmentHeader.setCreatedBy("erp");
            emptyShipmentHeader.setWarehouseCode("HF0001");
            emptyShipmentHeader.setCompanyCode("BHF");
            emptyShipmentHeader.setCode(code);
            if (!shipmentHeaderService.save(emptyShipmentHeader)) {
                throw new ServiceException("出库头表创建失败");
            }
            shipmentHeader = shipmentHeaderService.getOne(headerWrapper);
        }
        for (ShipmentItem item : items) {
            LambdaQueryWrapper<Material> materialWrapper = Wrappers.lambdaQuery();
            materialWrapper.eq(Material::getCode, item.getMATNR());
            Material material = materialService.getOne(materialWrapper);
            ShipmentDetail shipmentDetail = new ShipmentDetail();
            shipmentDetail.setShipmentCode(shipmentHeader.getCode());
            shipmentDetail.setShipmentId(shipmentHeader.getId());
            shipmentDetail.setReferCode(shipmentBean.getSAPNO());
            shipmentDetail.setReferLineNum(item.getSAPLINE());
            shipmentDetail.setMaterialCode(item.getMATNR());
            shipmentDetail.setMaterialName(material.getName());
            shipmentDetail.setMaterialSpec(material.getSpec());
            shipmentDetail.setMaterialUnit(material.getUnit());
            shipmentDetail.setAttribute1(material.getUserDef2());
            shipmentDetail.setCreated(null);
            shipmentDetail.setCreatedBy("erp");
            shipmentDetail.setLastUpdated(null);
            shipmentDetail.setLastUpdatedBy("erp");
            shipmentDetail.setWarehouseCode("HF0001");
            shipmentDetail.setInventorySts("good");
            shipmentDetail.setCompanyCode("BHF");
            shipmentDetail.setBatch(item.getCHARG());
            shipmentDetail.setShipQty(new BigDecimal(item.getMENGE()));
            if (!shipmentDetailService.save(shipmentDetail)) {
                throw new ServiceException("出库明细创建失败");
            }
            shipmentDetailService.updateShipmentHeader(shipmentHeader);
        }

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

}