<?xml version="1.0" encoding="UTF-8"?>
<a:service xmlns:a="http://www.leaf-framework.org/application" xmlns:s="leaf.plugin.script" trace="true">
    <a:init-procedure>
        <a:model-query fetchAll="true" model="cont.CON500.con_contract_get_guid_file_name"
                       rootPath="guid_file_name_path"/>
        <!--<a:model-query fetchAll="true" model="cont.CON500.con_doc_file_templet_get_atm" rootPath="file_templet_get_atm_path"/>-->
        <s:server-script import="contract_print_path.js"><![CDATA[
            importPackage(java.io);
            importPackage(Packages.hls.plugin.docx4j);
            importPackage(Packages.leaf.plugin.word2pdf);
            importPackage(Packages.org.apache.commons.io);
            importPackage(Packages.com.hand.elecon.httpost);
            importPackage(Packages.com.hand.hls.hlcm.emay);

            var up_file_token_url = info_query('UP_FILE_TOKEN_URL').code_value;

            function copyFile(fOld, fNew) {
                var fis = new java.io.FileInputStream(fOld);
                var fos = new java.io.FileOutputStream(fNew);
                var b = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024 * 4);
                var len = -1;
                while ((len = fis.read(b)) != -1) {
                    fos.write(b, 0, len);
                }
                fis.close();
                fos.close();
            }
                //删除文件
            function deleteFile(filePath) {
                var file = new File(filePath);
                if (file.exists()) {
                    file.delete();
                }
            }

            //生成pdf
               function wordToPdf(word_file_path,pdf_file_path) {
                // word转pdf
                var pdf_file_path_new = pdf_file_path + '.pdf';
                var wordToPdf = new WordToPdf($instance('uncertain.ocm.IObjectRegistry'), "jacob-1.19-x64.dll");
                wordToPdf.word2pdf(word_file_path, pdf_file_path_new);
                //删除word文件
               // deleteFile(word_file_path);

                return pdf_file_path_new;
            }
            //生成pdf openoffice
            function doc2pdf(word_file_path,pdf_file_path) {
            // word转pdf
            var pdf_file_path_new = pdf_file_path + '.pdf';
            var wordToPdf = new doc2pdf2();

            wordToPdf.doc2pdf2("C:/Program Files (x86)/OpenOffice 4",word_file_path, pdf_file_path_new);
            //删除word文件

            deleteFile(word_file_path);

            return pdf_file_path_new;
            }

            //按日期创建目录
            function getDatePath() {
            set_parameter_file_path();
            var info = info_query('HL_ELE_FILE_PATH');
            var file_path = info.code_value;
            //var file_path = $ctx.parameter.pdf_path; //file_path = c:/hls_test_files/content_files/
            //var file_path = 'd:/hl_test_files/content_files/'; //file_path = c:/hls_test_files/content_files/
            var now = new Date()
            y = now.getFullYear()
            m = now.getMonth() + 1
            m = m < 10 ? "0" + m : m
            var datePath = file_path + y + "/" + m + "/";
            return datePath; //datePath = d:/hls_test_files/fileupload/2018/04/
            }
            //系统参数获取
            function info_query(parameter_code) {
                var info = new Object();
                var data = null;
                var parameter_map = $bm('wx.WX100.sys_parameter_value').queryAsMap({
                    parameter_code:parameter_code
                });
                var data = parameter_map.getChildren();
                info.code_value = data[0].code_value;
                return info;
            }

            function send_sms(contract_id) {
                var sms_list_bm = $bm('sys.SYS401.sys_sms_list');
                var sms_list_result = sms_list_bm.queryAsMap({
                    contract_id: contract_id
                });
                var sms_list_records = sms_list_result.getChildren();
                for (var i = 0; i < sms_list_records.length; i++) {
                    var Phones = sms_list_records[i].phone_number;
                    var content = sms_list_records[i].text;
                    var sms_id = sms_list_records[i].sms_id;
                    try {
                        var example = new Example();
                        var result = example.setSingleSms(content, Phones);
                        var req_response = result.toString();
                    } catch (e) {
                        println("抛出异常:" + e);
                    }
                    // 发送短信后,逻辑处理
                    $bm('nt.sys_sms_list').update({
                        sms_id: sms_id,
                        req_response: req_response
                    });
                }
            }

            //依据合同文本签署人定义存储签署人信息
            var ele_contract_signer_bm = $bm('wx.WX100.con_et_contract_signer_save');
            ele_contract_signer_bm.update({
                contract_id: $ctx.parameter.contract_id
            });
/*            //第一步生成提前结清文本
            $bm('cont.CON732.con_et_content_create').update({
                contract_id: $ctx.parameter.contract_id,
                ccr_document_type: 'ET',
                content_type:'NORMAL'
            });*/
            //组装签署人校验报文
            var ele_signer_bm = $bm('wx.WX100.con_ele_contract_signer_query');
            var ele_signer_map = ele_signer_bm.queryAsMap({
                contract_id: $ctx.parameter.contract_id,
                esign_type:'ET'
            });
            var ele_signer_data = ele_signer_map.getChildren();
            var userInfoList = [];
            for (var k = 0 ; k < ele_signer_data.length;k++){
                var signer_record_data = ele_signer_data[k];
                if(signer_record_data.signer_category == 'TENANT_NP' || signer_record_data.signer_category == 'TENANT_SP'){
                    userInfoList.push({
                        "idNo":signer_record_data.id_no,
                        "name":signer_record_data.bp_name,
                        "mobile":signer_record_data.mobile,
                        "signerCategory":signer_record_data.signer_category
                    });
                }else if (signer_record_data.signer_category == 'TENANT_ORG_SEAL'){
                    var ele_org_signer_map = ele_signer_bm.queryAsMap({
                        contract_id: $ctx.parameter.contract_id,
                        signer_category:'TENANT_ORG_SIGN'
                    });
                    var ele_org_signer_data = ele_org_signer_map.getChildren();
                    //经办人
                    var agentName = ele_org_signer_data[0].bp_name;
                    var agentIdNo = ele_org_signer_data[0].id_no;
                    var mobile = ele_org_signer_data[0].mobile;
                    //法人
                    var legalName = signer_record_data.legal_person;
                    var legalIdNo = signer_record_data.id_card_no_leg;
                    if (agentIdNo == legalIdNo){
                        userInfoList.push({
                            "idNo":signer_record_data.id_no,
                            "name":signer_record_data.bp_name,
                            "agentIdNo":agentIdNo,
                            "agentName":agentName,
                            "mobile":mobile,
                            "legalName":legalName,
                            "legalIdNo":legalIdNo,
                            "agentType":"1",
                            "signerCategory":signer_record_data.signer_category
                        });
                    }else{
                        userInfoList.push({
                            "idNo":signer_record_data.id_no,
                            "name":signer_record_data.bp_name,
                            "agentIdNo":agentIdNo,
                            "agentName":agentName,
                            "mobile":mobile,
                            "legalName":legalName,
                            "legalIdNo":legalIdNo,
                            "agentType":"2",
                            "signerCategory":signer_record_data.signer_category
                        });
                    }
                }
            }
            //获取中台token
            var logs_bm = $bm('wx.WX100.con_ele_savelogs');
            try {
                var token_sign_result = EleFileUpHttpPost.post(up_file_token_url, null, null);
            } catch (e) {
                raise_app_error('上传文件获取token失败,请联系技术人员检查!');
            }
            var token_sign_result_ob = JSON.parse(token_sign_result);
            var access_sign_token = token_sign_result_ob.access_token;
            //校验签署人
            var info = info_query('HL_ELE_ACCOUNT_CREATE_PATH');
            var httpUrl = info.code_value;
            var Param = {
                userInfo:userInfoList
            }
            var result = EleFileUpHttpPost.post(httpUrl, JSON.stringify(Param), access_sign_token);
            logs_bm.insert({
                contract_id: $ctx.parameter.contract_id,
                httpurl: httpUrl,
                jsonPut: JSON.stringify(Param),
                jsonResult: result,
                tokenResult: token_sign_result
            });
            var result_ob = JSON.parse(result); //根据返回参数形式再定
            if (result_ob.code != 0) {
                //rollback
                $bm('wx.WX100.rollback').update();
                raise_app_error(result_ob.message.toString());
            }
            //生成合同文本
            var datePath = getDatePath();
            FileUtils.forceMkdir(new File(datePath)); //根据日期创建目录
            $ctx.parameter.batch_flag = 'Y';
            var from_file_data_map = $bm('cont.CON500.con_doc_file_templet_get_atm').queryAsMap({
                contract_id: $ctx.parameter.contract_id,
                batch_flag: $ctx.parameter.batch_flag
            });
            var from_file_data = from_file_data_map.getChildren();
            //所有文件
            var conFileList = [];
            //签署人
            var signer = [];
            for (var i = 0; i < from_file_data.length; i++) {
                var to_file_path = $ctx.parameter.file_path;
                var record_data = from_file_data[i];

                if (record_data.file_exists_flag != 'Y') {
                    var to_file_name = record_data.to_file_name + '.' + record_data.file_type_code || 'doc';
                    var from_file_path = record_data.file_path;
                    var guid_file_name_path = $bm('cont.CON500.con_contract_get_guid_file_name').queryAsMap();
                    var guid_file_name_tables = guid_file_name_path.getChildren();
                    to_file_path = to_file_path + guid_file_name_tables[0].guid_file_name + 'con' + record_data.content_id + '.' + record_data.file_type_code || 'doc';

                    copyFile(from_file_path, to_file_path);

                    try {
                        var brwt = new BookmarksReplaceWithText($instance('leaf.database.service.IDatabaseServiceFactory'), $instance('uncertain.ocm.IObjectRegistry'), $ctx.getData());
                        brwt.replaceBookmarkFromContent(to_file_path.toString(), record_data.content_id);
                    } catch (e) {
                        raise_app_error(e);
                    }
                    // word转pdf
                    var pdf_file_path = datePath + guid_file_name_tables[0].guid_file_name + 'con_' + record_data.content_id;
                    var outputfilepath = wordToPdf(to_file_path, pdf_file_path);
                    var outputfilename = record_data.to_file_name + '.pdf';
                    var pdf_file = new File(outputfilepath);
                    var file_size = 0;
                    if (pdf_file.exists()) {
                        file_size = pdf_file.length();
                    }
                    //保存文本名及路径
                    $bm('cont.CON500.con_file_content_copy_update').execute({
                        table_name: 'CON_CONTRACT_CONTENT',
                        content_id: record_data.content_id,
                        file_name: outputfilename.toString(),
                        file_path: outputfilepath.toString(),
                        file_size: file_size,
                        file_type_code: 'pdf',
                        mime_type: 'application/pdf',
                        user_id: $ctx.parameter.user_id
                    });

                }
            }
            //文件列表
            var con_ele_unsigned_file_bm = $bm('wx.WX100.con_et_unsigned_file_query');
            var con_ele_unsigned_file_map = con_ele_unsigned_file_bm.queryAsMap({
                contract_id: $ctx.parameter.contract_id
            });
            var con_ele_unsigned_file_data = con_ele_unsigned_file_map.getChildren();
            for (var n = 0; n < con_ele_unsigned_file_data.length; n++){
                conFileList.push({
                    "fileUrl": con_ele_unsigned_file_data[n].file_path.replace('Z:','/mnt').replace('z:','/mnt'),
                    "fileName": con_ele_unsigned_file_data[n].file_name,
                    "fileSize": con_ele_unsigned_file_data[n].file_size
                });
            }
            var ele_contract_signer_map = ele_contract_signer_bm.queryAsMap({
                contract_id: $ctx.parameter.contract_id
            });
            var ele_contract_signer_data = ele_contract_signer_map.getChildren();
            var contract_number = ele_contract_signer_data[0].contract_number;
            for (var k = 0 ; k < ele_contract_signer_data.length;k++){
                var signerFileList = [];
                var signer_record_data = ele_contract_signer_data[k];
                var con_ele_signer_id = signer_record_data.con_ele_signer_id;
                var ele_signer_file_bm = $bm('wx.WX100.con_et_signer_file_query');
                var ele_signer_file_map = ele_signer_file_bm.queryAsMap({
                    contract_id: $ctx.parameter.contract_id,
                    con_ele_signer_id:con_ele_signer_id
                });
                var ele_signer_file_data = ele_signer_file_map.getChildren();
                if (ele_signer_file_data.length == 0){continue};
                for (var h = 0; h < ele_signer_file_data.length; h++){
                    signerFileList.push({
                        "fileName":ele_signer_file_data[h].file_name,
                        "fileUrl":ele_signer_file_data[h].file_path.replace('Z:','/mnt').replace('z:','/mnt'),
                        "fileSize":ele_signer_file_data[h].file_size
                    });
                }
                signer.push({
                    "idNo":signer_record_data.id_no,
                    "idType":signer_record_data.id_type,
                    "accountType":signer_record_data.signer_category,
                    "signOrder":signer_record_data.sign_order,
                    "key":signer_record_data.key_word,
                    "autoExecute":signer_record_data.auto_sign,
                    "signType":signer_record_data.sign_type,
                    "signerFileList":signerFileList
                })
            }
            //调用中台签署流程
            var info = info_query('HL_SIGN_FLOW_CREATE');
            var httpUrl = info.code_value;
            var signParam = {
                contractNo:$ctx.parameter.contract_id,
                contractNumber:contract_number,
                esignType:"ET",
                userInfo:userInfoList,
                conFileList:conFileList,
                signer:signer
            }
            var result = EleFileUpHttpPost.post(httpUrl, JSON.stringify(signParam), access_sign_token);
            logs_bm.insert({
                contract_id:$ctx.parameter.contract_id,
                httpurl:httpUrl,
                jsonPut:JSON.stringify(signParam),
                jsonResult:result,
                tokenResult:token_sign_result
            });
            var result_ob = JSON.parse(result); //根据返回参数形式再定
            if (result_ob.code != 0) {
                //rollback
                $bm('wx.WX100.rollback').update();
                //raise_app_error('发起签约失败,请联系技术人员检查!');
                raise_app_error(result_ob.message.toString());
            }else if(result_ob.code == 0){
                var flow_id = result_ob.flowId;
                var flow_update_bm = $bm('wx.WX100.con_ele_flow_update');
                var flow_del_bm = $bm('wx.WX100.con_et_flow_update');
                flow_del_bm.delete({
                    contract_id: $ctx.parameter.contract_id
                })
                flow_update_bm.update({
                    contract_id: $ctx.parameter.contract_id,
                    flow_id: flow_id,
                    esign_type: 'ET'
                })
                flow_update_bm.execute({
                    contract_id: $ctx.parameter.contract_id
                })
                //发送签约短消息提醒 24976
                flow_update_bm.insert({
                    contract_id: $ctx.parameter.contract_id
                })
                send_sms($ctx.parameter.contract_id);
                var sign_url_list = result_ob.signUrlList;
                var ele_con_info_bm = $bm('wx.WX100.con_ele_con_info_update');
                for(var i = 0 ; i < sign_url_list.length; i++){
                    ele_con_info_bm.update({
                        contract_id:$ctx.parameter.contract_id,
                        id_no:sign_url_list[i].idNo,
                        sign_url:sign_url_list[i].signUrl,
                        esign_type:'ET'
                    })
                }
            }
            ]]></s:server-script>
    </a:init-procedure>
</a:service>