CustBasicInfo

掌厅及综合管理系统

当前为 2024-11-01 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         CustBasicInfo
// @version      2024-10-30
// @description  掌厅及综合管理系统
// @author       CPP
// @match        http://172.16.41.51:8011/livebos/UIProcessor?Creator=workflow&Table=WF_MSH_DROM_ACTV*
// @match        http://172.16.41.51:8011/livebos/UIProcessor?Creator=workflow&Table=WF_MSH_VAR_AUTH*
// @match        http://172.16.41.51:8011/livebos/.c5/link?j=*
// @match        https://172.16.41.11/backstage/index.php?act=procedure&op=specialVarityApplyCheck*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @license      MIT
// @grant        none
// @namespace http://172.16.41.51:8011/livebos/UIProcessor?Creator=workflow&Table=WF_MSH_DROM_ACTV
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    function getElementByXpath(xpath){
        var element = document.evaluate(xpath,document).iterateNext();
        return element;
    }

    // 添加一个提示条
    var elem = document.createElement('nav');
    elem.setAttribute('height', '40px');
    elem.setAttribute('margin-top', '10px');
    elem.style.color = 'red';
    elem.style.fontSize = '20px';
    var taskNone;

    var url = window.location.href;
    var tag_name, tag_id, tag_cert;
    var cust_name, cust_cert, cust_id;

    if (url.indexOf('http://172.16.41.51:8011/livebos/UIProcessor?Creator=workflow&Table=WF_MSH_DROM_ACTV') > -1) {
        tag_name = document.querySelector("#DATA_FORM > div > div:nth-child(1) > div > div.ant-collapse-content > div > div:nth-child(3) > div > div.ant-form-item-control-wrapper > div > div > div");
        tag_id = document.querySelector("#option_CLNT_ID_body > span:nth-child(1)");
        tag_cert = document.querySelector("#DATA_FORM > div > div:nth-child(2) > div > div.ant-collapse-content > div > div:nth-child(1) > div > div.ant-form-item-control-wrapper > div > div > div");
        taskNone = document.querySelector("#header");
    }
    else if (url.indexOf('http://172.16.41.51:8011/livebos/UIProcessor?Creator=workflow&Table=WF_MSH_VAR_AUTH') > -1) {
        tag_name = document.querySelector("#DATA_FORM > div > div:nth-child(1) > div > div.ant-collapse-content > div > div:nth-child(4) > div > div.ant-form-item-control-wrapper > div > div > div");
        tag_id = document.querySelector("#option_CLNT_ID_body > span:nth-child(1)");
        tag_cert = document.querySelector("#DATA_FORM > div > div:nth-child(1) > div > div.ant-collapse-content > div > div:nth-child(5) > div > div.ant-form-item-control-wrapper > div > div > div");
        taskNone = document.querySelector("#header");
    }
    else if (url.indexOf('http://172.16.41.51:8011/livebos/.c5/link?j=') > -1) {
        var titleElem = document.querySelector("#titleBarDiv > div.taskTitle > h1");
        var title = titleElem.innerText;
        if (title.indexOf('特殊品种交易权限申请') == -1 && title.indexOf('休眠账户激活') == -1) {
            console.log('不是待查询的页面');
            return;
        }

        tag_name = document.querySelector("#DATA_FORM > div > div:nth-child(1) > div > div.ant-collapse-content > div > div:nth-child(3) > div > div.ant-form-item-control-wrapper > div > div > div");
        tag_id = document.querySelector("#option_CLNT_ID_body > span:nth-child(1)");

        if (title.indexOf('特殊品种交易权限申请') > -1) {
            tag_cert = document.querySelector("#DATA_FORM > div > div:nth-child(1) > div > div.ant-collapse-content > div > div:nth-child(5) > div > div.ant-form-item-control-wrapper > div > div > div");
        } else {
            tag_cert = document.querySelector("#DATA_FORM > div > div:nth-child(2) > div > div.ant-collapse-content > div > div:nth-child(1) > div > div.ant-form-item-control-wrapper > div > div > div");
        }
        taskNone = getElementByXpath("//div[@class='taskTitle']/h1");
    }

    if (url.indexOf('https://172.16.41.11/backstage/index.php?act=procedure&op=specialVarityApplyCheck') > -1) {
        tag_name = document.querySelector("#shidangxing > table:nth-child(2) > tbody > tr:nth-child(2) > td:nth-child(4) > input[type=text]");
        tag_id = document.querySelector("#shidangxing > table:nth-child(2) > tbody > tr:nth-child(2) > td:nth-child(2) > input[type=text]");;
        tag_cert = document.querySelector("#shidangxing > table:nth-child(2) > tbody > tr:nth-child(3) > td:nth-child(4) > input[type=text]");
        taskNone = getElementByXpath("//h1[contains(text(), '安粮期货交易者适当性期货及期权编码或权限申请表')]");

        cust_name = tag_name.value;
        cust_cert = tag_cert.value;
        cust_id = tag_id.value;
    }
    else {
        cust_name = tag_name.innerText;
        cust_cert = tag_cert.innerText;
        cust_id = tag_id.innerText;
    }

    taskNone.append(elem);

    if (tag_name == null || tag_id == null || tag_cert == null) {
        console.log("部分或全部信息为空");
        return;
    }

        // 获取cookie
    function getCookie(name) {
        // 拆分 cookie 字符串
        var cookieArr = (document.cookie || "").split(";");

        // 循环遍历数组元素
        for(var i = 0; i < cookieArr.length; i++) {
            var cookiePair = cookieArr[i].split("=");

            //* 删除 cookie 名称开头的空白并将其与给定字符串进行比较 *
            if(name == cookiePair[0].trim()) {
                // 解码cookie值并返回
                return decodeURIComponent(cookiePair[1]);
            }
        }
        // 如果未找到,则返回null
        return null;
    }

    function hasValue(values, theVal) {
        var valueArr = (values || "").split(",");

        for(var i = 0; i < valueArr.length; i++) {
            var  val = valueArr[i];

            //* 删除 cookie 名称开头的空白并将其与给定字符串进行比较 *
            if(theVal == val) {
                return true;
            }
        }

        return false;
    }

    function addCookie(name, value) {
        var cookieValue = document.cookie;
        //console.log(cookieValue);

        var curDate = new Date();
        //当前时间戳
        var curTamp = curDate.getTime();
        //当日凌晨的时间戳,减去一毫秒是为了防止后续得到的时间不会达到00:00:00的状态
        var curWeeHours = new Date(curDate.toLocaleDateString()).getTime() - 1;
        //当日已经过去的时间(毫秒)
        var passedTamp = curTamp - curWeeHours;
        //当日剩余时间
        var leftTamp = 24 * 60 * 60 * 1000 - passedTamp;
        var leftTime = new Date();
        leftTime.setTime(leftTamp + curTamp);

        // 获得原来的值
        var cookieOrgin = getCookie('Downloaded');
        //console.log(cookieOrgin);

        if (!hasValue(cookieOrgin, value)) {
            //创建cookie
            document.cookie = name + "=" + value + ',' + cookieOrgin + "; expires=" + leftTime.toGMTString();
            //console.log(document.cookie);
            //console.log(leftTime.toGMTString());
        }
    }

    function cookieHasValue(value) {
        var cookieOrgin = getCookie('Downloaded');
        return hasValue(cookieOrgin, value);
    }

    // 保存图片到本地浏览器默认位置
    function save_img(content, file_name) {
        var raw = window.atob(content);
        var rawLength = raw.length;
        var uInt8Array = new Uint8Array(rawLength);
        for (var i = 0; i < rawLength; ++i) {
            uInt8Array[i] = raw.charCodeAt(i);
        }

        var blob = new Blob([uInt8Array], {type: "image/png"});
        var a = document.createElement('a');
        a.href = window.URL.createObjectURL(blob);
        a.download = file_name;
        a.dispatchEvent(new MouseEvent('click'))
    }

    // 发送ws请求
    var ws = new WebSocket('wss://zx.alqh.cn:8080/ws');
    var ws_closed = false;

    function isOpen(ws) { return ws.readyState === ws.OPEN }

    // 连接成功时触发
    ws.onopen = function() {
        var msg = {type: 'request', name: cust_name, cert: cust_cert, id: cust_id};
        if (!isOpen(ws)) return;
        ws.send(JSON.stringify(msg));
        console.log('发送征信截图请求...');
        elem.innerHTML = '发送征信截图请求...';
    }

    // 接收到服务器响应时触发
    ws.onmessage = function(evt) {
        // 分析接收到数据(json格式)
        var data = evt.data;
        var res = JSON.parse(data);
        //console.log(res);

        // 1、出现了错误
        if (res.result == "error") {
            alert('服务端提示: ' + res.msg);
            elem.innerHTML = '';
            ws.close();
            return;
        }
        // 2、完成了图片的下载
        else if (res.result == "end") {
            alert('客户 ' + res.name + ' 的图片已完成下载')
            elem.innerHTML = '';
            ws.close();
            return;
        }
        // 3、征信图片正在下载中
        else if (res.result == "downloading") {
            console.log("服务端征信图片正在下载...");
            elem.innerHTML = '服务端征信图片正在下载...';
            // 间隔一定时间,再次发送查询请求
            var tid = setTimeout(() => {
                if (ws_closed) {
                    clearTimeout(tid);
                    return;
                } else {
                    var msg = {type: 'query', name: cust_name, cert: cust_cert, id: cust_id};
                    if (!isOpen(ws)) return;
                    ws.send(JSON.stringify(msg));
                    console.log("查询服务器状态...");
                    elem.innerHTML = '查询服务器状态...';
                    clearTimeout(tid);
                }
            }, 10000);
        }
        // 4、征信图片已下载, 发送下载请求
        else if (res.result == "downloaded") {
            console.log("服务端图片已存在")
            elem.innerHTML = '服务端图片已存在';
            var msg = {type: 'download', name: cust_name, cert: cust_cert, id: cust_id};
            if (!isOpen(ws)) return;
            ws.send(JSON.stringify(msg));
        }
        // 5、下载征信图片内容
        else if (res.result == "content") {
            // 如果已经下载,则不下载
            if (!cookieHasValue(cust_id)) {
                // 将所有图片保存
                for (var i = 0; i < res.png.length; ++i) {
                    //var filename = cust_id + '-' + cust_name + '-' + cust_cert + '-' + res.png[i].file_index;
                    var filename = cust_id + '-' + cust_name + '-' + res.png[i].file_index;
                    // console.log('文件名: ' + filename);
                    elem.innerHTML = '文件名: ' + filename;
                    save_img(res.png[i].content, filename);
                }

                elem.innerHTML = '图片已下载完毕';
                addCookie('Downloaded', cust_id);
            }
            else {
                elem.innerHTML = '本地已有图片';
            }

            // 通知本次ws结束
            var msg = {type: 'end', id: cust_id, name: cust_name};
            if (!isOpen(ws)) return;
            ws.send(JSON.stringify(msg));
        }
    }

    // 断开时触发
    ws.onclose = function(e) {
        elem.innerHTML = '';
        ws_closed = true;
        // console.log('ws关闭:' + + e.code + ' ' + e.reason + ' ' + e.wasClean);
        // console.log(e);
    }
})();