SrmReceiptServiceImpl.java 13 KB
package com.huaheng.api.srm.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.huaheng.api.erp.domainBack.ParameterApi;
import com.huaheng.api.erp.domainBack.purchaseWmsR.DetailPurchase;
import com.huaheng.api.erp.domainBack.purchaseWmsR.MasterPurchase;
import com.huaheng.api.erp.domainBack.purchaseWmsR.ParameterPurchase;
import com.huaheng.api.erp.service.IErpBackService;
import com.huaheng.api.srm.domain.SrmReceipt;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.DataUtils;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.AjaxResultSrmBack;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.company.domain.Company;
import com.huaheng.pc.config.company.service.CompanyService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptDetailHistory.domain.ReceiptDetailHistory;
import com.huaheng.pc.receipt.receiptDetailHistory.service.ReceiptDetailHistoryService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory;
import com.huaheng.pc.srm.domain.SrmDetail;
import com.huaheng.pc.srm.domain.SrmHeader;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;


/**
 * @author zhouhong
 */
@Service
public class SrmReceiptServiceImpl implements SrmReceiptService {

    @Resource
    private CompanyService companyService;
    @Resource
    private AddressService addressService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailHistoryService receiptDetailHistoryService;
    @Resource
    private IErpBackService erpBackService;

    /**
     * 向srm传递入库单
     * @param receiptHeader
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult sendSrmReceipt(ReceiptHeader receiptHeader){
        if(receiptHeader==null){
            throw new ServiceException("单据信息为空");
        }
        if(receiptHeader.getIsReturnSrm()!=0){
            throw new ServiceException("已回传SRM");
        }
        List<ReceiptDetail> receiptDetailList = receiptDetailService.getListByHeaderId(receiptHeader.getId());
        List<SrmReceipt> srmReceiptList =new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for(ReceiptDetail receiptDetail : receiptDetailList){
            SrmReceipt srmReceipt = new SrmReceipt();
            srmReceipt.setRD01Code(receiptDetail.getReferCode());
            srmReceipt.setRD01Row(receiptDetail.getReferLineNum());

            String workPoint =getWorkPointByWarehouseCode(receiptHeader.getWarehouseCode(),receiptHeader.getCompanyCode());
            srmReceipt.setWorkPoint(workPoint);
            if(receiptHeader.getReceiptType().equals("outsourced_r")){
                srmReceipt.setRD01Type("1");
            }else{
                srmReceipt.setRD01Type("2");
            }

            srmReceipt.setCVenCode(receiptHeader.getSupplierCode());
            srmReceipt.setCInvCode(receiptDetail.getMaterialCode());
            srmReceipt.setQuantity(receiptDetail.getQty());


            srmReceipt.setCreateDate(sdf.format(receiptHeader.getCreated()));
            srmReceipt.setCreateUser(receiptHeader.getCreatedBy());
//            srmReceipt.setASNRow(receiptDetail.getReferLineNum());
            srmReceiptList.add(srmReceipt);
        }
        String url=addressService.selectAddress("SRM",QuantityConstant.WAREHOUSE_KS);
        url=url+"CreatePurchaseReceive";
        AjaxResult ajaxResult= sendSrmReceiptData(srmReceiptList, receiptHeader.getWarehouseCode(),url);
        if(!ajaxResult.hasErr()){
            ReceiptHeader receiptHeader1=new ReceiptHeader();
            receiptHeader1.setId(receiptHeader.getId());
            receiptHeader1.setIsReturnSrm(1);
            receiptHeader1.setBackMsgSrm(ajaxResult.getMsg());
            receiptHeaderService.updateById(receiptHeader1);
        }else{
            ReceiptHeader receiptHeader1=new ReceiptHeader();
            receiptHeader1.setId(receiptHeader.getId());
            receiptHeader1.setIsReturnSrm(0);
            receiptHeader1.setBackMsgSrm(ajaxResult.getMsg());
            receiptHeaderService.updateById(receiptHeader1);
        }
        return ajaxResult;
    }

    public AjaxResult sendSrmReceiptData(List<SrmReceipt> list,String warehouseCode,String url){
//        String jsonString = JSONObject.toJSONString(list);
//        System.out.println(jsonString);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(objectMapper.getSerializationConfig()
                .getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
        String json = null;
        try{
            json = objectMapper.writeValueAsString(list);
        }catch (Exception e){
        }
        if(StringUtils.isEmpty(json)){
            return AjaxResult.error("数据解析报错");
        }
        String result= OkHttpUtils.bodypost(url,json,warehouseCode,"回传SRM采购入库单");
        if (StringUtils.isEmpty(result)) {
            return AjaxResult.error("接口地址错误或服务器连接不到或返回为空");
        }
        AjaxResultSrmBack ajaxResult1 = JSON.parseObject(result, AjaxResultSrmBack.class);
        return ajaxResult1.responseAnalyz();
    }
    public String getWorkPointByWarehouseCode(String warehouseCode, String companyCode){
        if(warehouseCode.equals(QuantityConstant.WAREHOUSE_CS)){
            return "02";
        }
        if(warehouseCode.equals(QuantityConstant.WAREHOUSE_XZ)){
            return "03";
        }
        if(warehouseCode.equals(QuantityConstant.WAREHOUSE_KS)){
            Company company=companyService.getCompanyByCode(companyCode,warehouseCode);
            if(company==null){
                throw new ServiceException("公司信息不存在");
            }
            if(company.getName().contains("光腾")){
                return "04";
            }
            return "01";
        }
        throw new ServiceException("公司信息不存在");
    }


    /**
     * 通知srm删除入库单
     * @return
     */
//    public AjaxResult deleteSrmReceipt(ReceiptHeaderHistory receiptHeader){
//        List<ReceiptDetailHistory> receiptDetailList = receiptDetailHistoryService.getListByHeaderId(receiptHeader.getId());
//        List<SrmReceipt> srmReceiptList =new ArrayList<>();
//        for (ReceiptDetailHistory receiptDetail : receiptDetailList){
//            SrmReceipt srmReceipt=new SrmReceipt();
//            srmReceipt.setRD01Code(receiptDetail.getReferCode());
//            srmReceipt.setRD01Row(receiptDetail.getReferLineNum());
//            String workPoint =getWorkPointByWarehouseCode(receiptHeader.getWarehouseCode(),receiptHeader.getCompanyCode());
//            srmReceipt.setWorkPoint(workPoint);
//            if(receiptHeader.getReceiptType().equals("outsourced_r")){
//                srmReceipt.setRD01Type("1");
//            }else{
//                srmReceipt.setRD01Type("2");
//            }
//            srmReceipt.setDeleteUser(receiptHeader.getCreatedBy());
//            srmReceipt.setDeleteDate(receiptHeader.getCreated());
//            srmReceiptList.add(srmReceipt);
//        }
//        String url=addressService.selectAddress("SRM",QuantityConstant.WAREHOUSE_KS);
//        url=url+"DeletePurchaseReceive";
//        AjaxResult ajaxResult= sendSrmReceiptData(srmReceiptList, receiptHeader.getWarehouseCode(),url);
//        return ajaxResult;
//    }

    /**
     * 通知srm入库单完成
     * @return
     */
//    public AjaxResult completeSrmReceipt(ReceiptHeader receiptHeader){
//        List<ReceiptDetail> receiptDetailList = receiptDetailService.getListByHeaderId(receiptHeader.getId());
//        List<SrmReceipt> srmReceiptList =new ArrayList<>();
//        for (ReceiptDetail receiptDetail : receiptDetailList){
//            SrmReceipt srmReceipt=new SrmReceipt();
//            srmReceipt.setRD01Code(receiptDetail.getReferCode());
//            srmReceipt.setRD01Row(receiptDetail.getReferLineNum());
//            String workPoint =getWorkPointByWarehouseCode(receiptHeader.getWarehouseCode(),receiptHeader.getCompanyCode());
//            srmReceipt.setWorkPoint(workPoint);
//            if(receiptHeader.getReceiptType().equals("outsourced_r")){
//                srmReceipt.setRD01Type("1");
//            }else{
//                srmReceipt.setRD01Type("2");
//            }
//            srmReceipt.setCloseUser(receiptHeader.getLastUpdatedBy());
//            srmReceipt.setCloseDate(receiptHeader.getLastUpdated());
//            srmReceiptList.add(srmReceipt);
//        }
//        String url=addressService.selectAddress("SRM",QuantityConstant.WAREHOUSE_KS);
//        url=url+"ClosePurchaseReceive";
//        AjaxResult ajaxResult= sendSrmReceiptData(srmReceiptList, receiptHeader.getWarehouseCode(),url);
//        return ajaxResult;
//    }

    public AjaxResult sendErpRecipt(List<SrmDetail> srmDetailList, SrmHeader srmHeader){
        ParameterPurchase parameter=createErpRecipt(srmDetailList,srmHeader);
        String url=addressService.selectAddress("ERP",srmHeader.getWarehouseCode());
        AjaxResult ajaxResult=sendErpReciptData(parameter,url,srmHeader.getWarehouseCode());
        return ajaxResult;
    }


    /**
     * srm送货单质检后回传erp采购到货单、收货单
     * @param srmDetailList
     * @param srmHeader
     * @return
     */
    public ParameterPurchase createErpRecipt(List<SrmDetail> srmDetailList, SrmHeader srmHeader){
        ParameterPurchase parameter=new ParameterPurchase();
        List<MasterPurchase> masterList=new ArrayList<>();
        String referCode=srmHeader.getCode();
        String purchaseCode=srmHeader.getPurchaseCode();
        String companyCOde=null;
        String uwarehouseCode=null;
        String supplierCode=srmHeader.getSupplierCode();
        supplierCode="CN01";
        String wmscode=null;
        MasterPurchase master=new MasterPurchase();
        master.setPmds006(purchaseCode);
        master.setPmds007(supplierCode);
        master.setPmds002("00000");
        master.setPmdsdocno("1008");
        master.setPmds011("1");
        Random rd = new Random();
        // 生成一个4位数的随机数,范围从1000到9999
        int fourDigitRandomNumber = 1000 + rd.nextInt(9000);
        master.setSource_no(referCode+fourDigitRandomNumber);
//        master.setPmds000("6");
        List<DetailPurchase> detaiList=new ArrayList<>();
        int index = 0;
        for (SrmDetail srmDetail:srmDetailList){
            index++;
            DetailPurchase detai=new DetailPurchase();
            detai.setPmdtseq(index);
//            detai.setPmdtdocno("1009");
            detai.setPmdtdocno("1570");
            detai.setPmdt001(srmDetail.getMaterialCode());
            detai.setPmdt016(srmDetail.getErpWarehouseCode());
            detai.setPmdt006(srmDetail.getMaterialCode());
            detai.setPmdt020(srmDetail.getQualifiedQty());
            detai.setPmdt019(srmDetail.getMaterialUnit());
            if(srmDetail.getMaterialUnit().equals("公斤")){
                detai.setPmdt019("KG");
            }
            detai.setPmdt027(referCode);
            detai.setPmdt028(index);
            detai.setPmdtent(1);
            detai.setPmdt023("");
            detai.setPmdt024(srmDetail.getQualifiedQty());
            detaiList.add(detai);
        }
        master.setDetail(detaiList);
        masterList.add(master);
        parameter.setMaster(masterList);
        return parameter;
    }
    public AjaxResult sendErpReciptData(ParameterPurchase parameter,String url,String warehouseCode){
        ParameterApi parameterApi=new ParameterApi();
        parameterApi.setApiName("ERP采购委外收货单入库单回传");
        parameterApi.setParameter(parameter);
        parameterApi.setApiNameEn("PurchaseDeliveryCreate");
        //给erp回传数据
        AjaxResult ajaxResult=AjaxResult.success().setData(parameterApi);
        AjaxResult ajaxResult1=erpBackService.sendDataToERP(ajaxResult,url,warehouseCode);

        return ajaxResult1;
    }


}