ICSReceiptAPIService.java 15.2 KB
package com.huaheng.api.U8.Service;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.U8.domain.ICSReceiptDetail;
import com.huaheng.api.U8.domain.ICSReceiptHeader;
import com.huaheng.api.U8.domain.ICSReceiptModel;
import com.huaheng.api.general.service.ReceiptAPIservice;
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.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.IReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptModel;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;

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

/**
 * u8-wms入库下发或回传接口服务层
 *  @author huaheng
 *  @date 2019-1-4
 *
 */

@Service
public class ICSReceiptAPIService {

    @Autowired
    private ICompanyService companyService;
    @Autowired
    private ICSReceiptHeaderService icsReceiptHeaderService;
    @Autowired
    private ICSReceiptDetailService icsReceiptDetailService;
    @Autowired
    private IMaterialService materialService;
    @Autowired
    private ReceiptAPIservice receiptAPIservice;
    @Autowired
    private IReceiptHeaderService receiptHeaderService;
    @Autowired
    private IReceiptDetailService receiptDetailService;
    @Autowired
    private IWarehouseService warehouseService;

    //入库单下发
    @Transactional
    public AjaxResult insertICSReceipt(@RequestBody ICSReceiptModel icsReceiptModel){
        ICSReceiptHeader icsReceiptHeader=new ICSReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails=new ArrayList<>();
        if(icsReceiptHeader==null || icsReceiptDetails ==null){
            return AjaxResult.error("缺少单据");
        }
//判断系统中有没有该货主
        companyService.checkwarehouseCompany(icsReceiptHeader.getCompanyCode());

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

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

        //根据icsReceiptHeader生成receiptHeader
        String type=icsReceiptHeader.getType();
        ReceiptHeader receiptHeader=new ReceiptHeader();

        String warehouseCode=null;
        if(type.equals("TI")){
            warehouseCode=icsReceiptHeader.getiWHCode();
        }else if(type.equals("PCI")||type.equals("PI")){
            warehouseCode="CS0001";
        }else {
            warehouseCode=icsReceiptHeader.getcWHCode();
        }


        receiptHeader.setType(type);
        receiptHeader.setId(null);
        receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
        receiptHeader.setCreatedBy(ShiroUtils.getLoginName());
        receiptHeader.setWarehouseCode(warehouseCode);
        receiptHeader.setCompanyCode(icsReceiptHeader.getCompanyCode());
        if(type.equals("PCI")){
            receiptHeader.setSourceCode(icsReceiptHeader.getcPOID());
        }else{
            receiptHeader.setSourceCode(icsReceiptHeader.getcCode());
        }
        if(receiptHeader.getSourceCode()==null){
            throw new ServiceException("数据错误");
        }


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

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

        //调用公共API
        ReceiptModel receiptModel=new ReceiptModel();
        receiptModel.setReceiptHeader(receiptHeader);
        receiptModel.setReceiptDetails(receiptDetails);
        return receiptAPIservice.insertReceipt(receiptModel);
    }


    //出库单为销售出库时
    @Transactional
    public AjaxResult insertICSReceipts(ICSReceiptModel icsReceiptModel) {
        if (icsReceiptModel == null) {
            return AjaxResult.error("u8上传参数错误");
        }
        ICSReceiptHeader icsReceiptHeader = icsReceiptModel.getIcsReceiptHeader();
        List<ICSReceiptDetail> icsReceiptDetails = icsReceiptModel.getIcsReceiptDetails();
        if (icsReceiptHeader == null || icsReceiptDetails == null) {
            return AjaxResult.error("缺少主子单据");
        }
        if (!icsReceiptHeader.getType().equals("SRI")) {
            return AjaxResult.error("入库类型不匹配");
        }
        //判断系统中有没有该货主
        companyService.checkwarehouseCompany(icsReceiptHeader.getCompanyCode());

        //判断仓库是否存在单据的物料编码
        ReceiptHeader receiptHeader;
        List<ReceiptDetail> receiptDetails;
        Set<String> warehouseCodes = new HashSet<>();
        for (ICSReceiptDetail item : icsReceiptDetails) {
            //查找物料
            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 = icsReceiptHeaderService.insertModel(icsReceiptHeader);
        if (result < 1) {
            throw new ServiceException("出库主单传输失败!");
        }

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

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

            //细单
            for (ICSReceiptDetail item : icsReceiptDetails) {
                if (warehouseCode.equals(item.getcWHCode())) {
                    ReceiptDetail receiptDetail = new ReceiptDetail();
                    receiptDetail.setId(null);
                    receiptDetail.setWarehouseCode(item.getcWHCode());
                    receiptDetail.setMaterialCode(item.getcInvCode());
                    receiptDetail.setCreated(null);
                    receiptDetail.setCreatedBy(ShiroUtils.getLoginName());
                    receiptDetail.setLastUpdated(null);
                    receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
                    receiptDetail.setCompanyCode(item.getCompanyCode());
                    receiptDetail.setQty(item.getiQuantity());
                    receiptDetail.setQtyCompleted(item.getiQuantity());
                    receiptDetail.setInventoryStatus("good");
                    receiptDetails.add(receiptDetail);
                }
            }
            //调用公共API
            ReceiptModel receiptModel = new ReceiptModel();
            receiptModel.setReceiptHeader(receiptHeader);
            receiptModel.setReceiptDetails(receiptDetails);
            return receiptAPIservice.insertReceipt(receiptModel);
        }
        return AjaxResult.success("销售入货单下发成功");
    }


    //入库单回传
    public AjaxResult ConfirmICSReceipt(String url){
        //先找到出库主单
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setLastStatus((short)300);
        receiptHeader = receiptHeaderService.selectFirstEntity(receiptHeader);
        if (receiptHeader == null) {
            return AjaxResult.error("入库回传主单不存在");
        }
        ReceiptDetail receiptDetail = new ReceiptDetail();

        receiptDetail.setReceiptCode(receiptHeader.getCode());

        List<ReceiptDetail> receiptDetails = receiptDetailService.selectListEntityByEqual(receiptDetail);
        if (receiptDetails == null) {
            return AjaxResult.error("入库回传子单不存在");
        }

        ICSReceiptHeader icsReceiptHeader=new ICSReceiptHeader();
        String type=receiptHeader.getType();
        String code=receiptHeader.getSourceCode();
        if(code==null){
            return AjaxResult.error("没有上游单号");
        }
        List<ICSReceiptDetail> icsReceiptDetails=new ArrayList<ICSReceiptDetail>();
        ICSReceiptDetail icsReceiptDetail=new ICSReceiptDetail();

        //入库类型为采购的主单和子单
        if(type.equals("PI")){
            icsReceiptHeader.setcCode(code);
            icsReceiptHeader=icsReceiptHeaderService.selectModel(icsReceiptHeader);
            icsReceiptHeader.setcWHCode(receiptHeader.getWarehouseCode());
            icsReceiptHeader.setID(receiptHeader.getId());
            Warehouse warehouse=new Warehouse();
            warehouse.setCode(receiptHeader.getWarehouseCode());
            icsReceiptHeader.setcWHName( warehouseService.selectFirstEntity(warehouse).getName());

            //子单
            icsReceiptDetail.setcCode(code);
            icsReceiptDetails=icsReceiptDetailService.selectList(icsReceiptDetail);
            for(ICSReceiptDetail item :icsReceiptDetails){
                receiptDetail.setReceiptCode(code);
                receiptDetail.setSourceLine(item.getIrowno().toString());
                receiptDetailService.selectFirstEntity(receiptDetail);
                item.setID(receiptDetail.getId());
                item.setiArrsId(item.getAutoID());
                item.setiPOsID(item.getPODID());
            }
        }

        //入库类型为材料或其他的主单和子单
        if(type.equals("CI") || type.equals("QI")){
            icsReceiptHeader.setcCode(code);
            icsReceiptHeader.setcWHCode(receiptHeader.getWarehouseCode());
            icsReceiptHeader=icsReceiptHeaderService.selectModel(icsReceiptHeader);
            icsReceiptDetail.setcCode(code);
            icsReceiptDetails=icsReceiptDetailService.selectList(icsReceiptDetail);
        }

        //入库类型为销售退货的主单和子单
        if(type.equals("SRI")){
            icsReceiptHeader.setcDLCode (code);
            icsReceiptHeader.setcWHCode(receiptHeader.getWarehouseCode());
            icsReceiptHeader=icsReceiptHeaderService.selectModel(icsReceiptHeader);
            String warehouseCode=icsReceiptHeader.getcWHCode();
            Warehouse warehouse=new Warehouse();
            warehouse.setCode(warehouseCode);
            icsReceiptHeader.setcWHName( warehouseService.selectFirstEntity(warehouse).getName());
            icsReceiptHeader.setcCode(receiptHeader.getSourceCode());
            icsReceiptHeader.setID(icsReceiptHeader.getDLID());
            icsReceiptHeader.setdDate(icsReceiptHeader.getdPODate());
            icsReceiptDetail.setDLID(icsReceiptHeader.getDLID());
            icsReceiptDetail.setcWHCode(receiptHeader.getWarehouseCode());
            icsReceiptDetails=icsReceiptDetailService.selectList(icsReceiptDetail);
            for(ICSReceiptDetail item :icsReceiptDetails){
                item.setcCode(code);
                item.setID(item.getcSOID());
                item.setAutoID(item.getcSOAutoID());
                item.setiDLsID(item.getAutoID());
            }
        }


        //入库类型为调拨的主单和子单
        if(type.equals("TI")){
            icsReceiptHeader.setcTVCode (code);
            icsReceiptHeader.setiWHCode(receiptHeader.getWarehouseCode());
            icsReceiptHeader=icsReceiptHeaderService.selectModel(icsReceiptHeader);
            icsReceiptHeader.setcCode(receiptHeader.getSourceCode());
            icsReceiptHeader.setcWHCode(icsReceiptHeader.getiWHCode());
            icsReceiptHeader.setcWHName(icsReceiptHeader.getiWHName());

            icsReceiptDetail.setcCode(code);
            icsReceiptDetail.setID(icsReceiptHeader.getID());
            icsReceiptDetails=icsReceiptDetailService.selectList(icsReceiptDetail);
        }



        ICSReceiptModel model=new ICSReceiptModel();
        model.setIcsReceiptHeader(icsReceiptHeader);
        model.setIcsReceiptDetails(icsReceiptDetails);
        String JsonParam = JSON.toJSONString(model);
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        receiptHeader.setFirstStatus((short)900);
        receiptHeader.setLastStatus((short)900);
        receiptHeaderService.updateByModel(receiptHeader);
        return ajaxResult;

    }
}