InvokeHelper.java 9.66 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.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.List;

@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 {
        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("bill123456");
        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(dIndex.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();
            purchaseSelect.setFormId("STK_InStock");
            purchaseSelect.setFieldKeys(receiptDetail.getLineId()+","+receiptDetail.getMaterialCode());
            purchaseSelect.setFilterString("FBILLNO="+"'"+receiptHeader.getReferCode()+"'");
            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(purchaseSelect);
            purchaseSelectInvoke(JinDieApiUri.PURCHASE_SELECT.getApiUri(), jsonObject,receiptDetails);
        }
    }

    // Batch_Save
    public void Batch_Save(JSONObject jsonObject) throws Exception {
        Invoke("Batch_Save", jsonObject);
    }

    // Submit
    public void Submit(JSONObject jsonObject) throws Exception {
        Invoke("Submit", jsonObject);
    }

    // Audit
    public void Audit(JSONObject jsonObject) throws Exception {
        Invoke("Audit", jsonObject);
    }



    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;
    }
}