ICSShipmentAPIService.java 16.2 KB
package com.huaheng.api.U8.Service;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.U8.domain.ICSShipmentDetail;
import com.huaheng.api.U8.domain.ICSShipmentHeader;
import com.huaheng.api.U8.domain.ICSShipmentModel;
import com.huaheng.api.general.service.ShipmentAPIService;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.general.company.service.ICompanyService;
import com.huaheng.pc.general.material.domain.Material;
import com.huaheng.pc.general.material.service.IMaterialService;
import com.huaheng.pc.general.warehouse.domain.Warehouse;
import com.huaheng.pc.general.warehouse.service.IWarehouseService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.IShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentModel;
import com.huaheng.pc.shipment.shipmentHeader.service.IShipmentHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Service
public class ICSShipmentAPIService {

    @Autowired
    private IShipmentHeaderService shipmentHeaderService;
    @Autowired
    IShipmentDetailService shipmentDetailService;
    @Autowired
    private ICompanyService companyService;
    @Autowired
    private IMaterialService materialService;
    @Autowired
    private ICSShipmentHeaderService icsShipmentHeaderService;
    @Autowired
    private ICSShipmentDetailService icsShipmentDetailService;
    @Autowired
    private ShipmentAPIService shipmentAPIService;
    @Autowired
    private IWarehouseService warehouseService;

    //u8-wms出库下发
    @Transactional
    public AjaxResult insertICSShipment(ICSShipmentModel icsShipmentModel){

        //获取主单和子单列
        ICSShipmentHeader icsShipmentHeader=icsShipmentModel.getIcsShipmentHeader();
        List<ICSShipmentDetail> icsShipmentDetails=icsShipmentModel.getIcsShipmentDetails();
        if(icsShipmentHeader==null || icsShipmentDetails==null){
            return AjaxResult.error("缺少主子单据");
        }
        if(!icsShipmentHeader.getType().equals("QO") && !icsShipmentHeader.getType().equals("MO") && !icsShipmentHeader.getType().equals("PKO") &&
                !icsShipmentHeader.getType().equals("OO") && !icsShipmentHeader.getType().equals("PRO") && !icsShipmentHeader.getType().equals("TO")){
            return AjaxResult.error("出库类型不匹配");
        }

        //判断系统中有没有该货主
        companyService.checkwarehouseCompany(icsShipmentHeader.getCompanyCode());

        //将主表插入到新的接收主表里去
        int result=icsShipmentHeaderService.insertModel(icsShipmentHeader);
        if(result<1){
            throw new ServiceException("出库主单传输失败!");
        }

        //将子表插入到新的接收子表里去
        for(ICSShipmentDetail item : icsShipmentDetails){
            item.setcCode(icsShipmentHeader.getcCode());
            int result1=icsShipmentDetailService.insertModel(item);
            if(result1<1){
                throw new ServiceException("出库子单传输失败!");
            }
        }

        //根据icsShipmentHeader生成shipmentHeader
        String type=icsShipmentHeader.getType();
        ShipmentHeader shipmentHeader=new ShipmentHeader();

        String warehouseCode=null;
        if(type.equals("TO")){
            warehouseCode=icsShipmentHeader.getoWHCode();
        }else if(type.equals("PRO")){
            warehouseCode="CS0001";
        }else if(type.equals("OO")){
            warehouseCode="CS0003";
        }else {
            warehouseCode=icsShipmentHeader.getcWHCode();
        }


        shipmentHeader.setType(type);
        shipmentHeader.setId(null);
        shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
        shipmentHeader.setCreatedBy(ShiroUtils.getLoginName());
        shipmentHeader.setWarehouseCode(warehouseCode);
        shipmentHeader.setCompanyCode(icsShipmentHeader.getCompanyCode());
        if(type.equals("OO")){
            shipmentHeader.setSourceCode(icsShipmentHeader.getMoCode());
        }
        else if(type.equals("TO")){
            shipmentHeader.setSourceCode(icsShipmentHeader.getcTVCode());
        }
        else {
            shipmentHeader.setSourceCode(icsShipmentHeader.getcCode());
        }
        if(shipmentHeader.getSourceCode()==null){
            throw new ServiceException("数据错误");
        }


        //根据icsShipmentDetail生成shipmentAetail
        List<ShipmentDetail> shipmentDetails=new ArrayList<ShipmentDetail>();
        for(ICSShipmentDetail icsShipmentDetail : icsShipmentDetails) {
            //查找物料
            Material material = new Material();
            material.setCode(icsShipmentDetail.getcInvCode());
            material.setWarehouseCode(warehouseCode);
            material=materialService.selectFirstEntity(material);
            if(material==null){
                throw new ServiceException("物料不存在,可能是仓库不对,或者物料不对");
            }

            ShipmentDetail shipmentDetail = new ShipmentDetail();
            shipmentDetail.setId(null);
            shipmentDetail.setWarehouseCode(warehouseCode);
            shipmentDetail.setMaterialCode(icsShipmentDetail.getcInvCode());
            shipmentDetail.setCreated(null);
            shipmentDetail.setCreatedBy(ShiroUtils.getLoginName());
            shipmentDetail.setLastUpdated(null);
            shipmentDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
            shipmentDetail.setCompanyCode(icsShipmentDetail.getCompanyCode());
            shipmentDetail.setQty(icsShipmentDetail.getiQuantity());
            shipmentDetail.setQtyCompleted(icsShipmentDetail.getiQuantity());
            shipmentDetail.setInventoryStatus("good");
            if (icsShipmentDetail.getIrowno()!=null && StringUtils.isNotEmpty(icsShipmentDetail.getIrowno().toString())) {
                shipmentDetail.setSourceLine(icsShipmentDetail.getIrowno().toString());
            }
            if (icsShipmentDetail.getSortSeq()!=null && StringUtils.isNotEmpty(icsShipmentDetail.getSortSeq().toString())) {
                shipmentDetail.setSourceLine(icsShipmentDetail.getSortSeq().toString());
            }
           shipmentDetails.add(shipmentDetail);
        }

        //调用公共API
        ShipmentModel shipmentModel=new ShipmentModel();
        shipmentModel.setShipmentHeader(shipmentHeader);
        shipmentModel.setShipmentDetails(shipmentDetails);
        return shipmentAPIService.insertShipment(shipmentModel);
    }



    //出库单为销售出库时
    @Transactional
    public AjaxResult insertICSShipments(ICSShipmentModel icsShipmentModel){
        if(icsShipmentModel==null){
            return AjaxResult.error("u8上传参数错误");
        }
        ICSShipmentHeader icsShipmentHeader=icsShipmentModel.getIcsShipmentHeader();
        List<ICSShipmentDetail> icsShipmentDetails=icsShipmentModel.getIcsShipmentDetails();
        if(icsShipmentHeader==null || icsShipmentDetails==null){
            return AjaxResult.error("缺少主子单据");
        }
        if(!icsShipmentHeader.getType().equals("SO")){
            return AjaxResult.error("出库类型不匹配");
        }
        //判断系统中有没有该货主
        companyService.checkwarehouseCompany(icsShipmentHeader.getCompanyCode());

        //判断仓库是否存在单据的物料编码
        ShipmentHeader shipmentHeader;
        List<ShipmentDetail> shipmentDetails;
        Set<String> warehouseCodes=new HashSet<>();
        for(ICSShipmentDetail item:icsShipmentDetails){
            //查找物料
            Material material = new Material();
            material.setCode(item.getcInvCode());
            material.setWarehouseCode(item.getcWHCode());
            material=materialService.selectFirstEntity(material);
            if(material==null){
                return AjaxResult.error("物料不存在,可能是仓库不对,或者物料不对");
            }
            warehouseCodes.add(item.getcWHCode());
        }

        //将主表插入到新的接收主表里去
        int result=icsShipmentHeaderService.insertModel(icsShipmentHeader);
        if(result<1){
            throw new ServiceException("出库主单传输失败!");
        }

        //将子表插入到新的接收子表里去
        for(ICSShipmentDetail item : icsShipmentDetails){
            int result1=icsShipmentDetailService.insertModel(item);
            if(result1<1){
                throw new ServiceException("出库子单传输失败!");
            }
        }

        for(String warehouseCode : warehouseCodes){
            shipmentDetails=new ArrayList<>();
            //出库主单
            shipmentHeader=new ShipmentHeader();
            shipmentHeader.setType(icsShipmentHeader.getType());
            shipmentHeader.setId(null);
            shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
            shipmentHeader.setCreatedBy(ShiroUtils.getLoginName());
            shipmentHeader.setSourceCode(icsShipmentHeader.getcDLCode());
            shipmentHeader.setWarehouseCode(warehouseCode);
            shipmentHeader.setCompanyCode(icsShipmentHeader.getCompanyCode());

            //细单
            for(ICSShipmentDetail item:icsShipmentDetails){
                if(warehouseCode.equals(item.getcWHCode())){
                    ShipmentDetail shipmentDetail = new ShipmentDetail();
                    shipmentDetail.setId(null);
                    shipmentDetail.setWarehouseCode(item.getcWHCode());
                    shipmentDetail.setMaterialCode(item.getcInvCode());
                    shipmentDetail.setCreated(null);
                    shipmentDetail.setCreatedBy(ShiroUtils.getLoginName());
                    shipmentDetail.setLastUpdated(null);
                    shipmentDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
                    shipmentDetail.setCompanyCode(item.getCompanyCode());
                    shipmentDetail.setQty(item.getiQuantity());
                    shipmentDetail.setQtyCompleted(item.getiQuantity());
                    shipmentDetail.setInventoryStatus("good");
                    shipmentDetails.add(shipmentDetail);
                }
            }
            //调用公共API
            ShipmentModel shipmentModel=new ShipmentModel();
            shipmentModel.setShipmentHeader(shipmentHeader);
            shipmentModel.setShipmentDetails(shipmentDetails);
            return shipmentAPIService.insertShipment(shipmentModel);
        }
        return AjaxResult.success("销售发货单下发成功");
    }



    //wms-u8出库回传
    public AjaxResult ConfirmICSShipment(String url){

        //先找到出库主单
        ShipmentHeader shipmentHeader = new ShipmentHeader();
        shipmentHeader.setLastStatus(300);
        shipmentHeader = shipmentHeaderService.selectFirstEntity(shipmentHeader);
        if (shipmentHeader == null) {
            return AjaxResult.error("出库回传主单不存在");
        }
        ShipmentDetail shipmentDetail = new ShipmentDetail();

        shipmentDetail.setShipmentCode(shipmentHeader.getCode());

        List<ShipmentDetail> shipmentDetails = shipmentDetailService.selectListEntityByEqual(shipmentDetail);
        if (shipmentDetails == null) {
            return AjaxResult.error("出库回传子单不存在");
        }

        ICSShipmentHeader icsShipmentHeader=new ICSShipmentHeader();
        String type=shipmentHeader.getType();
        String code=shipmentHeader.getSourceCode();
        if(code==null){
            return AjaxResult.error("没有上游单号");
        }
        List<ICSShipmentDetail> icsShipmentDetails=new ArrayList<ICSShipmentDetail>();
        ICSShipmentDetail icsShipmentDetail=new ICSShipmentDetail();


        //出库类型为采购的主单和子单
        if(type.equals("PRO")){
            icsShipmentHeader.setcCode(code);
            icsShipmentHeader=icsShipmentHeaderService.selectModel(icsShipmentHeader);
            icsShipmentHeader.setcWHCode(shipmentHeader.getWarehouseCode());
            icsShipmentHeader.setID(shipmentHeader.getId());
            Warehouse warehouse=new Warehouse();
            warehouse.setCode(shipmentHeader.getWarehouseCode());
            icsShipmentHeader.setcWHName( warehouseService.selectFirstEntity(warehouse).getName());

            //子单
            icsShipmentDetail.setcCode(code);
            icsShipmentDetails=icsShipmentDetailService.selectList(icsShipmentDetail);
            for(ICSShipmentDetail item :icsShipmentDetails){
                shipmentDetail.setShipmentCode(code);
                shipmentDetail.setSourceLine(item.getIrowno().toString());
                shipmentDetailService.selectFirstEntity(shipmentDetail);
                item.setID(shipmentDetail.getId());
                item.setiArrsId(item.getAutoID());
                item.setiPOsID(item.getPODID());
            }
        }

        //出库类型为材料或其他的主单和子单
        if(type.equals("MO") || type.equals("QO")){
            icsShipmentHeader.setcCode(code);
            icsShipmentHeader.setcWHCode(shipmentHeader.getWarehouseCode());
            icsShipmentHeader=icsShipmentHeaderService.selectModel(icsShipmentHeader);
            icsShipmentDetail.setcCode(code);
            icsShipmentDetails=icsShipmentDetailService.selectList(icsShipmentDetail);
        }

        //出库类型为销售的主单和子单
        if(type.equals("SO")){
            icsShipmentHeader.setcDLCode (code);
            icsShipmentHeader.setcWHCode(shipmentHeader.getWarehouseCode());
            icsShipmentHeader=icsShipmentHeaderService.selectModel(icsShipmentHeader);
            String warehouseCode=icsShipmentHeader.getcWHCode();
            Warehouse warehouse=new Warehouse();
            warehouse.setCode(warehouseCode);
            icsShipmentHeader.setcWHName( warehouseService.selectFirstEntity(warehouse).getName());
            icsShipmentHeader.setcCode(shipmentHeader.getSourceCode());
            icsShipmentHeader.setID(icsShipmentHeader.getDLID());
            icsShipmentHeader.setdDate(icsShipmentHeader.getdPODate());
            icsShipmentDetail.setDLID(icsShipmentHeader.getDLID());
            icsShipmentDetail.setcWHCode(shipmentHeader.getWarehouseCode());
            icsShipmentDetails=icsShipmentDetailService.selectList(icsShipmentDetail);
            for(ICSShipmentDetail item :icsShipmentDetails){
                item.setcCode(code);
                item.setID(item.getcSOID());
                item.setAutoID(item.getcSOAutoID());
                item.setiDLsID(item.getAutoID());
            }
        }

        //出库类型为调拨的主单和子单
        if(type.equals("TO")){
            icsShipmentHeader.setcTVCode (code);
            icsShipmentHeader.setoWHCode(shipmentHeader.getWarehouseCode());
            icsShipmentHeader=icsShipmentHeaderService.selectModel(icsShipmentHeader);
            icsShipmentHeader.setcCode(shipmentHeader.getSourceCode());
            icsShipmentHeader.setcWHCode(icsShipmentHeader.getoWHCode());
            icsShipmentHeader.setcWHName(icsShipmentHeader.getoWHName());

            icsShipmentDetail.setcCode(code);
            icsShipmentDetail.setID(icsShipmentHeader.getID());
            icsShipmentDetails=icsShipmentDetailService.selectList(icsShipmentDetail);
        }



        ICSShipmentModel model=new ICSShipmentModel();
        model.setIcsShipmentHeader(icsShipmentHeader);
        model.setIcsShipmentDetails(icsShipmentDetails);
        String JsonParam = JSON.toJSONString(model);
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        shipmentHeader.setFirstStatus(900);
        shipmentHeader.setLastStatus(900);
        shipmentHeaderService.updateByModel(shipmentHeader);
        return ajaxResult;

    }
}