InvokeHelper.java 14.3 KB
package com.huaheng.api.jindie;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.api.jindie.domain.login.Login;
import com.huaheng.api.jindie.domain.purchase.PurchaseBatchSave;
import com.huaheng.api.jindie.domain.purchase.PurchasePush;
import com.huaheng.api.jindie.domain.purchase.PurchasePushData;
import com.huaheng.api.jindie.domain.purchase.PurchaseSelect;
import com.huaheng.api.jindie.domain.result.Results;
import com.huaheng.api.jindie.domain.uri.JinDieApiUri;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;


import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class InvokeHelper {

    @Autowired
    private ReceiptHeaderService receiptHeaderService;
    @Autowired
    private ReceiptDetailService receiptDetailService;

    public static String POST_K3CloudURL = "http://219.137.250.36:8999/K3Cloud/";

    // Cookie 值
    private static String CookieVal = null;

    // HttpURLConnection
    private static HttpURLConnection initUrlConn(String url, JSONObject paras)
            throws Exception {
        System.out.println(paras.toString());
        URL postUrl = new URL(POST_K3CloudURL.concat(url));
        HttpURLConnection connection = (HttpURLConnection) postUrl
                .openConnection();
        if (CookieVal != null) {
            connection.setRequestProperty("Cookie", CookieVal);
        }
        if (!connection.getDoOutput()) {
            connection.setDoOutput(true);
        }
        connection.setRequestMethod("POST");
        connection.setUseCaches(false);
        connection.setInstanceFollowRedirects(true);
        connection.setRequestProperty("Content-Type", "application/json");
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        out.writeBytes(paras.toString());
        out.flush();
        out.close();
        return connection;
    }

    // Login
    public static boolean Login(Login login)
            throws Exception {

        boolean bResult = false;

        String sUrl = JinDieApiUri.LOGIN.getApiUri();

//        JSONArray jParas = new JSONArray();
//        jParas.add(acctID);// 帐套Id
//        jParas.add(username);// 用户名
//        jParas.add(password);// 密码
//        jParas.add(Lcid);// 语言
        JSONObject jParas = (JSONObject)JSONObject.toJSON(login);
        HttpURLConnection connection = initUrlConn(sUrl, jParas);
        // 获取Cookie
        String key = null;
        for (int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++) {
            if (key.equalsIgnoreCase("Set-Cookie")) {
                String tempCookieVal = connection.getHeaderField(i);
                if (tempCookieVal.startsWith("kdservice-sessionid")) {
                    CookieVal = tempCookieVal;
                    break;
                }
            }
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            String sResult = new String(line.getBytes(), "utf-8");
            System.out.println(sResult);
            bResult = line.contains("LoginResultType");
        }
        reader.close();
        connection.disconnect();
        return bResult;
    }

    /**
     * 采购入库单操作
     * @throws Exception
     */

    // Push
    @Transactional(rollbackFor = Exception.class)
    public void Push(String billCode) throws Exception {
        PurchasePush purchasePush=new PurchasePush();
        PurchasePushData purchasePushData=new PurchasePushData();
        List<String> list=new ArrayList<>();
        list.add(billCode);
        purchasePushData.setNumbers(list);
        purchasePushData.setTargetOrgId(0);
        purchasePushData.setTargetFormId("STK_InStock");
        purchasePushData.setIsEnableDefaultRule("true");
        purchasePush.setData(purchasePushData);
        purchasePush.setFormid("PUR_ReceiveBill");
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchasePush);
        Results.ResultDTO.ResponseStatusDTO.SuccessEntitys successEntity = Invoke(JinDieApiUri.PURCHASE_PUSH.getApiUri(), jsonObject);
        Integer id = successEntity.getId();
        String number = successEntity.getNumber();
        Integer dIndex = successEntity.getDIndex();
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billCode));
        receiptHeader.setUserDef1(id.toString());
        receiptHeader.setUserDef2(number);
        receiptHeaderService.updateById(receiptHeader);
    }

    // Select
    @Transactional(rollbackFor = Exception.class)
    public void Select(String billCode) throws Exception {
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billCode));
        List<ReceiptDetail> receiptDetails = receiptDetailService.list(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReferCode, billCode));
        ReceiptDetail receiptDetail = receiptDetails.get(0);
        if(StringUtils.isNotEmpty(receiptHeader.getUserDef1())&&StringUtils.isNotEmpty(receiptHeader.getUserDef2())){
            PurchaseSelect purchaseSelect=new PurchaseSelect();
            Map map=new HashMap();
            purchaseSelect.setFormId("STK_InStock");
            purchaseSelect.setFieldKeys("FInStockEntry_FEntryID,FMATERIALID.FNUMBER");
            purchaseSelect.setFilterString("FBILLNO="+"'"+receiptHeader.getUserDef2()+"'");
            map.put("data",purchaseSelect);
            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(map);
            purchaseSelectInvoke(JinDieApiUri.PURCHASE_SELECT.getApiUri(), jsonObject,receiptDetails);
        }
    }

    // Save
    public void Save(String billCode) throws Exception {
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billCode));
        List<ReceiptDetail> receiptDetails = receiptDetailService.list(new LambdaQueryWrapper<ReceiptDetail>().eq(ReceiptDetail::getReferCode, billCode));
        ReceiptDetail receiptDetail = receiptDetails.get(0);
        if(StringUtils.isNotEmpty(receiptHeader.getUserDef1())&&StringUtils.isNotEmpty(receiptHeader.getUserDef2())&&StringUtils.isNotEmpty(receiptDetail.getUserDef1())){
            PurchaseBatchSave purchaseBatchSave = newInstancePurchaseBatchSave();
            purchaseBatchSave.setFormid("STK_InStock");
            purchaseBatchSave.getData().getModel().setFId(receiptHeader.getUserDef1());
            purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).setFEntryID(receiptDetail.getUserDef1());
          //  purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).getFMaterialId().setFNumber(receiptDetail.getMaterialCode());
          //  purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).getFLot().setFNumber(receiptDetail.getBatch());
            purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).setFRealQty(receiptDetail.getTotalQty());
            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchaseBatchSave);
            Invoke(JinDieApiUri.PURCHASE_SAVE.getApiUri(), jsonObject);
        }
    }

    // Submit
    public void Submit(String billCode) throws Exception {
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billCode));
        PurchasePush purchasePush=new PurchasePush();
        purchasePush.setFormid("STK_InStock");
        PurchasePushData purchasePushData = new PurchasePushData();
        purchasePush.setData(purchasePushData);
        purchasePush.getData().setIds(receiptHeader.getUserDef1());
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchasePush);
        Invoke(JinDieApiUri.PURCHASE_SUBMIT.getApiUri(), jsonObject);
        System.out.println("Submit:"+"单号"+billCode+"成功!");
    }

    // Audit
    public void Audit(String  billCode) throws Exception {
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>().eq(ReceiptHeader::getReferCode, billCode));
        PurchasePush purchasePush=new PurchasePush();
        purchasePush.setFormid("STK_InStock");
        PurchasePushData purchasePushData = new PurchasePushData();
        purchasePush.setData(purchasePushData);
        purchasePush.getData().setIds(receiptHeader.getUserDef1());
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchasePush);
        Invoke(JinDieApiUri.PURCHASE_AUDIT.getApiUri(), jsonObject);
        System.out.println("Audit:"+"单号"+billCode+"成功!");
    }

    //delete删除回传数据
    public void Delete(String billCode) throws Exception {
        PurchasePush purchasePush=new PurchasePush();
        purchasePush.setFormid("STK_InStock");
        List<String> list=new ArrayList();
        list.add(billCode);
        PurchasePushData purchasePushData=new PurchasePushData();
        purchasePushData.setNumbers(list);
        purchasePush.setData(purchasePushData);
        JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchasePush);
        Invoke(JinDieApiUri.DELETE_RETURN.getApiUri(), jsonObject);
        System.out.println("Delete:"+"单号"+billCode+"成功!");
    }



    private static Results.ResultDTO.ResponseStatusDTO.SuccessEntitys Invoke(String uri,JSONObject jParas)
            throws Exception {
        HttpURLConnection connectionInvoke = initUrlConn(uri, jParas);
        BufferedReader reader = new BufferedReader(new InputStreamReader(connectionInvoke.getInputStream()));
        String line;
        String sResult=null;
        while ((line = reader.readLine()) != null) {
            sResult = new String(line.getBytes(), "utf-8");
            System.out.println(sResult);
        }
        Results results = JSONObject.parseObject(sResult, Results.class);
        List<Results.ResultDTO.ResponseStatusDTO.SuccessEntitys> successEntitys = results.getResult().getResponseStatus().getSuccessEntitys();
        List<Results.ResultDTO.ResponseStatusDTO.ErrorsDTO> errors = results.getResult().getResponseStatus().getErrors();
        Results.ResultDTO.ResponseStatusDTO.SuccessEntitys successEntity=null;
        Results.ResultDTO.ResponseStatusDTO.ErrorsDTO errorsDTO=null;
        if(!CollectionUtils.isEmpty(successEntitys)){
            successEntity = successEntitys.get(0);
        }else {
            errorsDTO = errors.get(0);
        }
        reader.close();
        connectionInvoke.disconnect();
        if(StringUtils.isNotNull(successEntity)){
            return successEntity;
        }else {
            throw new ServiceException(errorsDTO.getMessage());
        }

    }

    private void purchaseSelectInvoke(String uri,JSONObject jsonObject,List<ReceiptDetail> receiptDetails) throws Exception {
        HttpURLConnection connectionInvoke = initUrlConn(uri, jsonObject);
        BufferedReader reader = new BufferedReader(new InputStreamReader(connectionInvoke.getInputStream()));
        String line;
        String sResult=null;
        while ((line = reader.readLine()) != null) {
            sResult = new String(line.getBytes(), "utf-8");
            System.out.println(sResult);
        }
        List<List<Object>> results = JSONObject.parseObject(sResult, ArrayList.class);
        results.forEach((list)->{
            Integer purchaseLineId = (Integer) list.get(0);
            String materialCode = (String) list.get(1);
            receiptDetails.forEach((receiptDetail)->{
                if(receiptDetail.getMaterialCode().trim().equals(materialCode)){
                     receiptDetail.setUserDef1(purchaseLineId.toString());
                     receiptDetailService.updateById(receiptDetail);
                }
            });
        });
    }


    /**
     * 把中文转成Unicode码
     *
     * @param str
     * @return
     */
    public static String chinaToUnicode(String str) {
        String result = "";
        for (int i = 0; i < str.length(); i++) {
            int chr1 = (char) str.charAt(i);
            if (chr1 >= 19968 && chr1 <= 171941) {// 汉字范围 \u4e00-\u9fa5 (中文)
                result += "\\u" + Integer.toHexString(chr1);
            } else {
                result += str.charAt(i);
            }
        }
        return result;
    }
    
    private static PurchaseBatchSave newInstancePurchaseBatchSave(){
        PurchaseBatchSave purchaseBatchSave=new PurchaseBatchSave();
        PurchaseBatchSave.DataDTO dataDTO = new PurchaseBatchSave.DataDTO();
        PurchaseBatchSave.DataDTO.ModelDTO modelDTO = new PurchaseBatchSave.DataDTO.ModelDTO();
        PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO fInStockEntryDTO = new PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO();
        //PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO.FLotDTO fLotDTO = new PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO.FLotDTO();
        //DataDTO.ModelDTO.FInStockEntryDTO.FMaterialIdDTO fMaterialIdDTO = new PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO.FMaterialIdDTO();

        purchaseBatchSave.setData(dataDTO);
        purchaseBatchSave.getData().setModel(modelDTO);
        List<PurchaseBatchSave.DataDTO.ModelDTO.FInStockEntryDTO> fInStockEntryDTOList=new ArrayList<>();
        fInStockEntryDTOList.add(fInStockEntryDTO);
        purchaseBatchSave.getData().getModel().setFInStockEntry(fInStockEntryDTOList);
        //purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).setFLot(fLotDTO);
        //purchaseBatchSave.getData().getModel().getFInStockEntry().get(0).setFMaterialId(fMaterialIdDTO);
        return purchaseBatchSave;
    }
}