| 
					
				 | 
			
			
				@@ -0,0 +1,427 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package fi.gl.task; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.algo.DataSet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.algo.Row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.context.RequestContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.entity.DynamicObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.dataentity.entity.DynamicObjectCollection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.db.DB; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.db.DBRoute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.exception.KDException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.logging.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.orm.query.QCP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.orm.query.QFilter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.schedule.executor.AbstractTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.servicehelper.BusinessDataServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import kd.bos.servicehelper.operation.SaveServiceHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.sql.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.time.LocalDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 自动同步凭证任务插件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 2024-09-11 wangj 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 主要功能:自动同步每月凭证数据到用友中间表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class AutoSynVoucher extends AbstractTask { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    protected static final Log log = LogFactory.getLog(AutoSynVoucher.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String DB_VOUCHER_FIELDS = "voucherno,yearv,periodv,orgcd,orgnm,prepareddatev,checkeddate,tallydate,datadt," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "creditamount,debitamount,localcreditamount,localdebitamount,direction,explanation," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "subjcd,subjnm,currcd,currnm"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String DB_BALANCE_FIELDS = "direction,yearv,periodv,subjcd,subjnm,currcd,currnm,orgcd,orgnm,datadt," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "creditamount,debitamount,localcreditamount,localdebitamount"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    String SELECTFIELDS = "billno,period,org,createtime,auditdate,bookeddate," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            "entries,entries.account,entries.creditori,entries.debitori,entries.creditlocal,entries.debitlocal,entries.entrydc,entries.edescription,entries.currency"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Connection conn = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PreparedStatement pstmt1 = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Statement pstmt2 = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PreparedStatement pstmt3 = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //连接数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            conn = getConnect(); // 获取数据库连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(conn!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                conn.setAutoCommit(false); // 关闭自动提交 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //缓存组织映射表Map 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map orgMap_numbber = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map orgMap_name = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QFilter qFilter_enable = new QFilter("enable", QCP.equals,"1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QFilter qFilter_status = new QFilter("status", QCP.equals, "C"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DynamicObject[] orgCol = BusinessDataServiceHelper.load( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        "nckd_gl_orgmapp","nckd_orgfield,nckd_yyorgnumber,nckd_yyorgname",new QFilter[]{qFilter_enable,qFilter_status}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(DynamicObject orgObj : orgCol){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    DynamicObject kd_org = orgObj.getDynamicObject("nckd_orgfield"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgMap_numbber.put(kd_org.getString("id"),orgObj.getString("nckd_yyorgnumber")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    orgMap_name.put(kd_org.getString("id"),orgObj.getString("nckd_yyorgname")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //查找待同步数据执行插入数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]同步数据执行插入开始"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pstmt1 = conn.prepareStatement("INSERT INTO jf_voucher (" + DB_VOUCHER_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                doExecuteNewData(conn,pstmt1,orgMap_numbber,orgMap_name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]同步数据执行插入结束"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //清空汇总中间表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pstmt2 = conn.createStatement(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String deleteSql = "DELETE FROM jf_balance"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int affectedRows = pstmt2.executeUpdate(deleteSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]删除中间表记录数:"+affectedRows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                conn.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //重新汇总数据插入汇总中间表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]同步汇总数据执行插入开始"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pstmt3 = conn.prepareStatement("INSERT INTO jf_balance (" + DB_BALANCE_FIELDS + ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                doExecuteTotalData(conn,pstmt3,orgMap_numbber,orgMap_name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]同步汇总数据执行插入结束"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]连接用友总账数据库失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("[凭证反同步用友]同步凭证到用友总账数据库失败:"+e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new RuntimeException(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } finally{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(pstmt1!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pstmt1.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(pstmt2!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pstmt2.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(pstmt3!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pstmt3.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(conn!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    conn.setAutoCommit(true); // 重新开启自动提交 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    conn.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }catch (SQLException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("释放数据库连接失败:"+e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new RuntimeException(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void doExecuteTotalData(Connection conn, PreparedStatement pstmt3, Map orgMap_numbber, Map orgMap_name) throws SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取待同步数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONArray voucherCol = getVoucherTotalDatas(orgMap_numbber,orgMap_name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 模拟大量插入操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int i=0;i<voucherCol.size();i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject voucherObj = voucherCol.getJSONObject(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            doInsertTotalData(pstmt3,voucherObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 处理剩余的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(voucherCol.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt3.executeBatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            conn.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt3.clearBatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void doInsertTotalData(PreparedStatement pstmt3, JSONObject voucherObj) throws SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(1, voucherObj.getString("direction")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(2, voucherObj.getString("yearv")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(3, voucherObj.getString("periodv")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(4, voucherObj.getString("subjcd")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(5, voucherObj.getString("subjnm")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(6, voucherObj.getString("currcd")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(7, voucherObj.getString("currnm")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(8, voucherObj.getString("orgcd")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(9, voucherObj.getString("orgnm")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setString(10, voucherObj.getString("datadt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setBigDecimal(11, voucherObj.getBigDecimal("creditamount")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setBigDecimal(12, voucherObj.getBigDecimal("debitamount")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setBigDecimal(13, voucherObj.getBigDecimal("localcreditamount")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.setBigDecimal(14, voucherObj.getBigDecimal("localdebitamount")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pstmt3.addBatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * 获取凭证汇总数据集 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private JSONArray getVoucherTotalDatas(Map orgMapNumbber, Map orgMapName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sql = "SELECT TEMP.orgid,TEMP.yearv,TEMP.periodv,TEMP.subjcd,TEMP.subjnm,TEMP.currentid,TEMP.entrydc," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SUM(TEMP.creditamount) creditamount_total,SUM(TEMP.debitamount) debitamount_total," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SUM(TEMP.localcreditamount) localcreditamount_total,SUM(TEMP.localdebitamount) localdebitamount_total " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "FROM (" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "SELECT VOU.forgid orgid,BD.fperiodyear yearv,BD.fperiodnumber periodv," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ACC.fnumber subjcd,ACC.fname subjnm ,VOUE.FCURRENCYID currentid,VOUE.FENTRYDC entrydc," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ISNULL(VOUE.FORIGINALCREDIT,0)  creditamount,ISNULL(VOUE.FORIGINALDEBIT,0)  debitamount," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "ISNULL(VOUE.FLOCALCREDIT,0)  localcreditamount,ISNULL(VOUE.FLOCALDEBIT,0) localdebitamount " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "FROM T_GL_VOUCHER VOU " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "LEFT JOIN T_GL_VOUCHERENTRY VOUE ON VOU.FID = VOUE.FID " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "LEFT JOIN T_BD_period BD ON VOU.FPERIODID = BD.FID " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "LEFT JOIN T_BD_Account ACC ON VOUE.faccountid  = ACC.FID " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "WHERE VOU.fispost='1' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "AND VOU.fk_nckd_issynyy='1' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ") TEMP " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "GROUP BY TEMP.orgid,TEMP.yearv,TEMP.periodv,TEMP.subjcd,TEMP.subjnm,TEMP.currentid,TEMP.entrydc"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DataSet ds = DB.queryDataSet(this.getClass().getName(), new DBRoute("fi"), sql, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        JSONArray jsonArray = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map currentList = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Row row : ds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject jsonObj = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String orgcd = orgMapNumbber.get(row.getString("orgid"))!=null?orgMapNumbber.get(row.getString("orgid")).toString():""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("orgcd",orgcd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String orgnm = orgMapName.get(row.getString("orgid"))!=null?orgMapName.get(row.getString("orgid")).toString():""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("orgnm",orgnm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("yearv",row.getString("yearv")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String periodv = tranPeriodv(row.getString("periodv")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("periodv",periodv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("subjcd",row.getString("subjcd")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("subjnm",row.getString("subjnm")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(row.getString("currentid")!=null && currentList.get(row.getString("currentid"))==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                DynamicObject currentObj = BusinessDataServiceHelper.loadSingle(row.getString("currentid"),"bd_currency"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map currentMap = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                currentMap.put("number",currentObj.getString("number")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                currentMap.put("name",currentObj.getString("name")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                currentList.put(row.getString("currentid"),currentMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jsonObj.put("currcd",currentObj.getString("number")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jsonObj.put("currnm",currentObj.getString("name")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map currentMap = (Map) currentList.get(row.getString("currentid")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jsonObj.put("currcd",currentMap.get("number")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jsonObj.put("currnm",currentMap.get("name")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String direction = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(row.getString("entrydc"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String entrydc = row.getString("entrydc"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if("1".equals(entrydc)){//借方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    direction = "D"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if("-1".equals(entrydc)){//贷方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    direction = "C"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("direction",direction); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("creditamount",row.getString("creditamount_total")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("debitamount",row.getString("debitamount_total")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("localcreditamount",row.getString("localcreditamount_total")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonObj.put("localdebitamount",row.getString("localdebitamount_total")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            jsonArray.add(jsonObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return jsonArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * 转换期间字段补0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String tranPeriodv(String yearv) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String realyearv = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!yearv.contains("0")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            realyearv = "0" + yearv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            realyearv = yearv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return realyearv; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * 执行插入数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void doExecuteNewData(Connection conn, PreparedStatement pstmt, Map orgMap_numbber, Map orgMap_name) throws SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 设置批处理大小 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int batchSize = 500; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取待同步数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject[] voucherCol = getVoucherDatas(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("[凭证反同步用友]获取待同步数据条数:"+voucherCol.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String ids = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //数据日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String datadt = sdf1.format(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 模拟大量插入操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (DynamicObject voucherObj : voucherCol) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            doInsertData(pstmt,voucherObj,orgMap_numbber,orgMap_name,datadt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ids = ids + "," + voucherObj.getString("id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (++count % batchSize == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pstmt.executeBatch(); // 执行批处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                conn.commit(); // 可以在每个批次后提交事务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]提交批次"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pstmt.clearBatch(); // 清空批处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                updateBillSign(ids); //更新凭证同步标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("[凭证反同步用友]更新凭证同步标识"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ids = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 处理剩余的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (count % batchSize != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.executeBatch(); // 执行最后一个批次 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            conn.commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("[凭证反同步用友]提交最后一个批次"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.clearBatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            updateBillSign(ids); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("[凭证反同步用友]更新凭证同步标识"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void updateBillSign(String ids) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ids = ids.substring(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sql = "UPDATE T_GL_VOUCHER SET fk_nckd_issynyy=1 WHERE FID IN ("+ids+")"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DB.update(DBRoute.of("fi"), sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void doInsertData(PreparedStatement pstmt, DynamicObject voucherObj, Map orgMap_numbber, Map orgMap_name, String datadt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throws SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /*------------------获取凭证单据头字段信息开始----------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //凭证号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String billno = voucherObj.getString("billno"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //yearv会计年度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject period = voucherObj.getDynamicObject("period"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String periodNumber = period.getString("number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String yearv = periodNumber.substring(0,4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //periodv会计期间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String periodv = periodNumber.substring(4,6); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //财务组织-映射表转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject org = voucherObj.getDynamicObject("org"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String orgcd = orgMap_numbber.get(org.getString("id"))!=null? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orgMap_numbber.get(org.getString("id")).toString():""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String orgnm = orgMap_name.get(org.getString("id"))!=null? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                orgMap_name.get(org.getString("id")).toString():""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //制单日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String prepareddatev = sdf.format(voucherObj.getDate("createtime")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //审核日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String checkeddate = sdf.format(voucherObj.getDate("auditdate")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //记账日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String tallydate = sdf.format(voucherObj.getDate("bookeddate")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /*------------------获取凭证单据头字段信息结束----------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObjectCollection entriesCol = voucherObj.getDynamicObjectCollection("entries"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(DynamicObject entriesObj : entriesCol){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /*-------------拼接表头字段开始------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //凭证号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(1, billno); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //yearv会计年度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(2, yearv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //periodv会计期间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(3, periodv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //财务组织编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(4, orgcd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //财务组织名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(5, orgnm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //制单日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(6, prepareddatev); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //审核日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(7, checkeddate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //记账日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(8, tallydate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //数据日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(9, datadt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /*-------------拼接表头字段结束------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /*-------------拼接分录字段开始------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //原币贷方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double creditori = 0.00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(entriesObj.getString("creditori"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                creditori = entriesObj.getBigDecimal("creditori").doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setDouble(10, creditori); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //原币借方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double debitori = 0.00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(entriesObj.getString("debitori"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                debitori = entriesObj.getBigDecimal("debitori").doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setDouble(11, debitori); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //贷方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double creditlocal = 0.00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(entriesObj.getString("creditlocal"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                creditlocal = entriesObj.getBigDecimal("creditlocal").doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setDouble(12, creditlocal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //借方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double debitlocal = 0.00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(entriesObj.getString("debitlocal"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                debitlocal = entriesObj.getBigDecimal("debitlocal").doubleValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setDouble(13, debitlocal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //方向 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String direction = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!StringUtils.isEmpty(entriesObj.getString("entrydc"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String entrydc = entriesObj.getString("entrydc"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if("1".equals(entrydc)){//借方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    direction = "D"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if("-1".equals(entrydc)){//贷方 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    direction = "C"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(14, direction); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //摘要 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(15, entriesObj.getString("edescription")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //会计科目编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DynamicObject account = entriesObj.getDynamicObject("account"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String subjcd = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String subjnm = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(account!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subjcd = account.getString("number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subjnm = account.getString("name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(16,subjcd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //会计科目名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(17,subjnm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //币种编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DynamicObject currency = entriesObj.getDynamicObject("currency"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String currcd = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String currnm = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(currency!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                currcd = currency.getString("number"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                currnm = currency.getString("name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(18,currcd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //币种名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.setString(19,currnm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /*-------------拼接分录字段结束------------*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pstmt.addBatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private DynamicObject[] getVoucherDatas() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date beginDate = getBeginDate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QFilter qFilter_beginDate = new QFilter("bookeddate",QCP.large_equals,beginDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QFilter qFilter_ispost = new QFilter("ispost", QCP.equals,"1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        QFilter qFilter_issynyy = new QFilter("nckd_issynyy", QCP.equals,"0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject[] voucherCol = BusinessDataServiceHelper.load( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "gl_voucher",SELECTFIELDS,new QFilter[]{qFilter_ispost,qFilter_beginDate,qFilter_issynyy}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return voucherCol; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Date getBeginDate() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Calendar cal_1=Calendar.getInstance();//获取当前日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LocalDate today = LocalDate.now(); // 获取当前日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LocalDate firstDayOfMonth = today.withDayOfMonth(1); // 获取当前月的第一天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (today.equals(firstDayOfMonth)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            cal_1.add(Calendar.MONTH, -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cal_1.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date firstDay = cal_1.getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return firstDay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Connection getConnect() throws ClassNotFoundException, SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //1.获取接口链接等信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new QFilter[]{new QFilter("number","=","synvoucher")}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String servername =  jkpzxx.getString("nckd_servername"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String port =  jkpzxx.getString("nckd_port"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String username = jkpzxx.getString("nckd_user"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String password = jkpzxx.getString("nckd_password"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String nckd_orclname = jkpzxx.getString("nckd_orclname"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String jdbcUrl = "jdbc:oracle:thin:@"+servername+":"+port+"/"+nckd_orclname; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 加载Oracle JDBC驱动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Class.forName("oracle.jdbc.driver.OracleDriver"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 建立连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Connection conn = DriverManager.getConnection(jdbcUrl, username, password); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return conn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |