EAS常用工具类

   1 package com.kingdee.eas.custom;
   2 import java.io.File;
   3 import java.io.FileNotFoundException;
   4 import java.io.FileOutputStream;
   5 import java.io.IOException;
   6 import java.io.InputStream;
   7 import java.io.PrintWriter;
   8 import java.io.StringWriter;
   9 import java.math.BigDecimal;
  10 import java.sql.SQLException;
  11 import java.text.ParseException;
  12 import java.text.SimpleDateFormat;
  13 import java.util.ArrayList;
  14 import java.util.Date;
  15 import java.util.HashMap;
  16 import java.util.Iterator;
  17 import java.util.Map;
  18 import javax.swing.JFileChooser;
  19 import javax.swing.JOptionPane;
  20 import org.mozilla.javascript.Context;
  21 import jxl.Cell;
  22 import jxl.Sheet;
  23 import jxl.Workbook;
  24 import jxl.format.Alignment;
  25 import jxl.format.Border;
  26 import jxl.format.BorderLineStyle;
  27 import jxl.format.Colour;
  28 import jxl.read.biff.BiffException;
  29 import jxl.write.Label;
  30 import jxl.write.WritableCellFormat;
  31 import jxl.write.WritableSheet;
  32 import jxl.write.WritableWorkbook;
  33 import jxl.write.WriteException;
  34 import bsh.This;
  35 import com.kingdee.bos.BOSException;
  36 import com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox;
  37 import com.kingdee.bos.ctrl.kdf.table.ICell;
  38 import com.kingdee.bos.ctrl.kdf.table.IColumn;
  39 import com.kingdee.bos.ctrl.kdf.table.KDTDefaultCellEditor;
  40 import com.kingdee.bos.ctrl.kdf.table.KDTMergeManager;
  41 import com.kingdee.bos.ctrl.kdf.table.KDTSelectBlock;
  42 import com.kingdee.bos.ctrl.kdf.table.KDTable;
  43 import com.kingdee.bos.ctrl.kdf.table.util.KDTableUtil;
  44 import com.kingdee.bos.ctrl.swing.KDDatePicker;
  45 import com.kingdee.bos.dao.IObjectCollection;
  46 import com.kingdee.bos.dao.IObjectPK;
  47 import com.kingdee.bos.dao.IObjectValue;
  48 import com.kingdee.bos.metadata.bot.BOTMappingCollection;
  49 import com.kingdee.bos.metadata.bot.BOTMappingFactory;
  50 import com.kingdee.bos.metadata.bot.BOTMappingInfo;
  51 import com.kingdee.bos.metadata.bot.BOTRelationCollection;
  52 import com.kingdee.bos.metadata.entity.EntityViewInfo;
  53 import com.kingdee.bos.metadata.entity.FilterInfo;
  54 import com.kingdee.bos.metadata.entity.FilterItemInfo;
  55 import com.kingdee.bos.metadata.query.util.CompareType;
  56 import com.kingdee.bos.sql.ParserException;
  57 import com.kingdee.bos.ui.face.CoreUIObject;
  58 import com.kingdee.bos.ui.face.IUIWindow;
  59 import com.kingdee.bos.ui.face.UIException;
  60 import com.kingdee.bos.ui.face.UIFactory;
  61 import com.kingdee.bos.util.BOSUuid;
  62 import com.kingdee.eas.base.btp.BTPManagerFactory;
  63 import com.kingdee.eas.base.btp.BTPTransformResult;
  64 import com.kingdee.eas.base.btp.IBTPManager;
  65 import com.kingdee.eas.base.codingrule.CodingRuleManagerFactory;
  66 import com.kingdee.eas.base.codingrule.ICodingRuleManager;
  67 import com.kingdee.eas.base.message.BMCMessageFactory;
  68 import com.kingdee.eas.base.message.BMCMessageInfo;
  69 import com.kingdee.eas.base.message.IBMCMessage;
  70 import com.kingdee.eas.base.message.MsgBizType;
  71 import com.kingdee.eas.base.message.MsgPriority;
  72 import com.kingdee.eas.base.message.MsgStatus;
  73 import com.kingdee.eas.base.message.MsgType;
  74 import com.kingdee.eas.base.netctrl.IMutexServiceControl;
  75 import com.kingdee.eas.base.netctrl.MutexParameter;
  76 import com.kingdee.eas.base.netctrl.MutexServiceControlFactory;
  77 import com.kingdee.eas.base.permission.UserInfo;
  78 import com.kingdee.eas.basedata.master.auxacct.GeneralAsstActTypeGroupCollection;
  79 import com.kingdee.eas.basedata.master.auxacct.GeneralAsstActTypeGroupFactory;
  80 import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
  81 import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  82 import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  83 import com.kingdee.eas.basedata.org.CtrlUnitCollection;
  84 import com.kingdee.eas.basedata.org.CtrlUnitFactory;
  85 import com.kingdee.eas.basedata.org.CtrlUnitInfo;
  86 import com.kingdee.eas.basedata.org.PositionInfo;
  87 import com.kingdee.eas.basedata.person.PersonCollection;
  88 import com.kingdee.eas.basedata.person.PersonFactory;
  89 import com.kingdee.eas.basedata.person.PersonInfo;
  90 import com.kingdee.eas.common.client.OprtState;
  91 import com.kingdee.eas.common.client.SysContext;
  92 import com.kingdee.eas.common.client.UIContext;
  93 import com.kingdee.eas.common.client.UIFactoryName;
  94 import com.kingdee.eas.fm.common.FMIsqlFacadeFactory;
  95 import com.kingdee.eas.fm.common.IFMIsqlFacade;
  96 import com.kingdee.eas.framework.CoreBillBaseInfo;
  97 import com.kingdee.eas.framework.client.CoreBillEditUI;
  98 import com.kingdee.eas.framework.client.EditUI;
  99 import com.kingdee.eas.hr.emp.PersonPositionFactory;
 100 import com.kingdee.eas.hr.emp.PersonPositionInfo;
 101 import com.kingdee.eas.util.SysUtil;
 102 import com.kingdee.eas.util.client.EASResource;
 103 import com.kingdee.eas.util.client.MsgBox;
 104 import com.kingdee.jdbc.rowset.IRowSet;
 105 import com.kingdee.util.Uuid;
 106 /***
 107  * EAS开发工具类
 108  * @author 赵戬
 109  *
 110  */
 111 public class UtilClass {
 112     /***
 113      * 信息提示框
 114      * @param value 提示内容
 115      */
 116     public static void alert(String value){
 117         MsgBox.showInfo(value);
 118         SysUtil.abort();
 119     }
 120 
 121     /***
 122      * 信息提示框(带详细信息)
 123      * @param value 提示内容
 124      */
 125     public static void alert2(String Title,String info){
 126         MsgBox.showDetailAndOK(null, Title, info, 0);
 127         SysUtil.abort();
 128     }
 129 
 130     /***
 131      * 信息提示框(带提示)
 132      * @return value 提示内容
 133      */
 134     public static boolean alertReturn(String value){
 135         return MsgBox.isYes(MsgBox.showConfirm2(value));
 136     }
 137 
 138     /***
 139      * 程序停止运行
 140      */
 141     public static void Stop(){
 142         SysUtil.abort();
 143     }
 144 
 145     /**
 146      * 单据数据加锁
 147      * @param billId 单据ID
 148      */
 149     public static void addBillDataLock(String BillFID){
 150         IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
 151         mutex.requestBizObjIDForUpdate(BillFID);
 152     }
 153 
 154     /**
 155      * 单据数据解锁
 156      * @param billId 单据ID
 157      */
 158     public static void removeBillDataLock(String BillFID){
 159         IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
 160         mutex.releaseObjIDForUpdate(BillFID);
 161     }
 162 
 163     /**
 164      * 根据ID获取数据是否加锁
 165      * @param id 单据编号
 166      * @return true 已加锁 or false 未加锁
 167      */
 168     public static boolean getBillDataLockStatus(String BillFID){
 169         IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
 170         boolean returnvalue = false;
 171         HashMap map = mutex.getObjIDForUpdateList();
 172         for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
 173             String key = iter.next().toString();
 174             if(BillFID.equals(key.substring(0, 28))){
 175                 returnvalue = true;
 176             }
 177         }
 178         return returnvalue;
 179     }
 180 
 181     /**
 182      * 表格获取选中行某列值  
 183      * 返回ArrayList集合
 184      * @param tblMain 列表对象
 185      * @param CellName 列名
 186      * @return ArrayList集合
 187      * 
 188      * 返回遍历
 189             try {
 190                 ArrayList list = UtilClass.getTableCellsValue(kDTable1, "cell1");
 191                 if(list.size()>0){
 192                     for (Iterator iter = list.iterator(); iter.hasNext();) { 
 193                         System.out.println((String)iter.next()); 
 194                     }
 195                 }else{
 196                     UtilClass.alert("请选择要操作的记录");
 197                 }
 198             } catch (Exception e1) {
 199             }
 200      */
 201     public static ArrayList getTableCellsValue(KDTable tblMain, String CellName){
 202         ICell cellstr;
 203         Object strObj = null;
 204         KDTSelectBlock block = null;
 205         ArrayList returnValue = new ArrayList();
 206         int size = tblMain.getSelectManager().size();
 207         for (int i = 0; i < size; i++) {
 208             block = tblMain.getSelectManager().get(i);
 209             for (int j = block.getTop(); j <= block.getBottom(); j++) {
 210                 cellstr = tblMain.getRow(j).getCell(CellName);
 211                 strObj =  cellstr.getValue();
 212                 returnValue.add(strObj);
 213             }
 214         }
 215         return returnValue;
 216     }
 217 
 218     /**
 219      * 设置List默认查询条件
 220      * @param mainQuery List MainQuery
 221      * @param Filter 条件
 222      * 例:UtilClass.setListQueryFilter(mainQuery, "orderid.batchnum is not null");
 223      */
 224     public static void setListQueryFilter(EntityViewInfo mainQuery,String Filter){
 225         try {
 226             mainQuery.setFilter(Filter);
 227         } catch (ParserException e) {
 228             alert2("设置List默认查询条件出错!",e.getMessage());
 229         }
 230     }
 231     /**
 232      * 获取KDTable选择行的行号(选择行的第一行)
 233      * @param tblMain
 234      * @return 行号
 235      */
 236     public static int getRowNumFirst(KDTable tblMain){
 237         return tblMain.getSelectManager().get(0).getTop();
 238     }
 239     /**
 240      * 获取KDTable选择行的行号
 241      * @param tblMain
 242      * @return 行号
 243      */
 244     public static int[] getRowNum(KDTable tblMain){
 245         return KDTableUtil.getSelectedRows(tblMain);
 246     }
 247     /**
 248      * 导出KDTable表格数据到Excel文件
 249      * @param table KDTable
 250      * @param RowNums 行号集合 如果RowNums行数为0,导出全部数据
 251      * return 生成文件目录
 252      * 例:UtilClass.TableExpot(kDTable1, new int[0], null);
 253      */
 254     public static String TableExpot(KDTable table,int[] RowNums,String FileName){
 255         String returnvaleu = "";
 256         String Filepath = "";
 257         //打开目录选择器
 258         try {
 259             Filepath = UtilClass.OpenPathSelect();
 260             String File = "";
 261             if("".equals(Filepath)){
 262                 return returnvaleu;
 263             }else{
 264                 if(FileName==null||"".equals(FileName)){
 265                     FileName = "temp";
 266                 }
 267                 File = Filepath+"\"+FileName+".xls";
 268             }
 269             File file = new File(File);
 270             //如果找到相同的文件,执行删除
 271             if(file.exists() && file.isFile()){
 272                 file.delete();
 273             }
 274             WritableWorkbook wwb = Workbook.createWorkbook(new File(File));
 275             //创建工作表
 276             wwb.createSheet("sheet1", 0);
 277             //获取工作表 
 278             WritableSheet ws = wwb.getSheet(0);
 279 
 280             //表头行样式
 281             WritableCellFormat TableHead = new WritableCellFormat();
 282             TableHead.setBorder(Border.ALL, BorderLineStyle.THIN);
 283             TableHead.setAlignment(Alignment.CENTRE);
 284             TableHead.setBackground(Colour.GRAY_25);
 285 
 286             //表体数据行样式
 287             WritableCellFormat TableRow = new WritableCellFormat();
 288             TableRow.setAlignment(Alignment.CENTRE);
 289 
 290             if(RowNums==null){
 291                 //生成表头
 292                 for(int i=0;i<table.getColumnCount();i++){
 293                     if(table.getHeadRow(0).getCell(i).getValue()!=null){
 294                         ws.addCell(new Label(i,0,table.getHeadRow(0).getCell(i).getValue().toString(),TableHead));
 295                     }
 296                 }
 297                 //生成表体数据
 298                 for(int i=0;i<table.getRowCount();i++){
 299                     for(int j=0;j<table.getColumnCount();j++){
 300                         if(table.getRow(i).getCell(j).getValue()!=null){
 301                             ws.addCell(new Label(j,i+1,table.getRow(i).getCell(j).getValue().toString(),TableRow));
 302                         }
 303                     }
 304                 }
 305             }else{
 306                 //生成表头
 307                 for(int i=0;i<table.getColumnCount();i++){
 308                     if(table.getHeadRow(0).getCell(i).getValue()!=null){
 309                         ws.addCell(new Label(i,0,table.getHeadRow(0).getCell(i).getValue().toString(),TableHead));
 310                     }
 311                 }
 312                 //生成表体数据
 313                 for(int z=0;z<RowNums.length;z++){
 314                     int i = RowNums[z];
 315                     for(int j=0;j<table.getColumnCount();j++){
 316                         if(table.getRow(i).getCell(j).getValue()!=null){
 317                             ws.addCell(new Label(j,z+1,table.getRow(i).getCell(j).getValue().toString(),TableRow));
 318                         }
 319                     }
 320                 }
 321             }
 322             wwb.write();    
 323             wwb.close();
 324             returnvaleu = File;
 325         } catch (Exception e) {
 326             alert2("生成Excel文件出错",Filepath);
 327         } 
 328         return returnvaleu;
 329     }
 330     /***
 331      * 设置表格列名
 332      * @param Table Table名称
 333      * @param Colunm 列名
 334      * @param name 值
 335      * 
 336      */
 337     public static void setTableColumnName(KDTable Table,String ColunmID,String ColunmName){
 338         KDTable kt = new KDTable();
 339         kt = Table;
 340         kt.getHeadRow(0).getCell(ColunmID).setValue(ColunmName);
 341         Table = kt;
 342     }
 343     /**
 344      * 设置表格融合方式
 345      * @param tblMain 表格
 346      * @param type 融合方式 0 :行融合 1:列融合 2:自由融合
 347      */
 348     public static void setTableMergeMode(KDTable tblMain,int type){
 349         if(type==0){
 350             tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_ROW_MERGE);
 351         }
 352         if(type==1){
 353             tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_COLUMN_MERGE);
 354         }
 355         if(type==2){
 356             tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_MERGE);
 357         }
 358     }
 359     /***
 360      * 表格行选择器,从第R1行选到R2行
 361      * @param tblMain 表格
 362      * @param R1 开始行号
 363      * @param R2 结束行号
 364      */
 365     public static void setTableSelectRows(KDTable tblMain,int R1,int R2){
 366         tblMain.getSelectManager().select(R1-1, 0, R2-1, 0);
 367     }
 368 
 369 
 370     /**
 371      * 设置按钮图片名称
 372      * @param btnName 按钮名称
 373      * @param imgName 图片名称
 374      * EAS图片名称保存位置:BOS环境下   工程libclienteaseas_resource_common_ico.jar
 375      */
 376     public static void setButtonImg(com.kingdee.bos.ctrl.swing.KDWorkButton ButtonName,String imgName){
 377         ButtonName.setIcon(EASResource.getIcon(imgName));
 378         ButtonName.setEnabled(true);
 379     }
 380     /**
 381      * 设置F7
 382      * @param F7Name F7名称
 383      * @param ConditionSQL 过滤条件SQL(如果输入值不等于"",则添加条件)
 384      *        例   " fbilltypestatr = '1' and (entrys.id is null or entrys.seq = 1)"
 385      * @param Query 属性 例:"com.kingdee.eas.cmt.basedata.app.OperatorOrgQuery"
 386      * @param EditFrmat 属性 例:"$number$"
 387      * @param DisplayFormat 属性 例:"$name$"
 388      * @param CommitFormat 属性 例:"$number$"
 389      * @throws BOSException 
 390      */
 391     public static void setF7(KDBizPromptBox F7Name,String ConditionSQL ,String Query,String EditFrmat,String DisplayFormat,String CommitFormat){
 392         //添加分录过滤条件
 393         try {
 394             EntityViewInfo view = new EntityViewInfo();
 395             if(ConditionSQL != ""){
 396                 view.setFilter(ConditionSQL);
 397             }
 398             //设置F7属性
 399             F7Name.setQueryInfo(Query);//关联Query
 400             F7Name.setEditFormat(EditFrmat);//编辑样式
 401             F7Name.setDisplayFormat(DisplayFormat);//展现样式
 402             F7Name.setCommitFormat(CommitFormat);//提交样式
 403             F7Name.setEntityViewInfo(view);
 404             F7Name.setEnabledMultiSelection(false);
 405         } catch (Exception e) {
 406             alert2("F7["+F7Name+"]初始化出错,请联系管理员!",e.getMessage());
 407         }
 408     }
 409     /**
 410      * 设置分录F7
 411      * @param col 列名 kdtEntrys.getColumn("boxType")
 412      * @param ConditionSQL 过滤条件SQL(如果输入值不等于"",则添加条件)
 413      *        例   " fbilltypestatr = '1' and (entrys.id is null or entrys.seq = 1)"
 414      * @param Query 属性 例:"com.kingdee.eas.cmt.basedata.app.OperatorOrgQuery"
 415      * @param EditFrmat 属性 例:"$number$"
 416      * @param DisplayFormat 属性 例:"$name$"
 417      * @param CommitFormat 属性 例:"$number$"
 418      */
 419     public static void setEntryF7(IColumn col,String ConditionSQL ,String Query,String EditFrmat,String DisplayFormat,String CommitFormat){
 420         try {
 421             KDBizPromptBox prmt = new KDBizPromptBox();
 422             EntityViewInfo view = new EntityViewInfo();
 423             if(ConditionSQL != ""){
 424                 view.setFilter(ConditionSQL);
 425             }
 426             prmt.setQueryInfo(Query);
 427             prmt.setEditFormat(EditFrmat);
 428             prmt.setCommitFormat(CommitFormat);
 429             prmt.setDisplayFormat(DisplayFormat);
 430             prmt.setEntityViewInfo(view);
 431             prmt.setEnabledMultiSelection(false);
 432             KDTDefaultCellEditor editor = new KDTDefaultCellEditor(prmt);
 433             col.setEditor(editor);
 434         } catch (ParserException e) {
 435             alert2("分录F7初始化出错,请联系管理员!",e.getMessage());
 436         }
 437 
 438     }
 439     /**
 440      * 日期转换字符串
 441      * @param date 日期
 442      * @param type 显示格式 yyyy-MM-dd yyyy-MM-dd HH:mm:ss
 443      * String returnvalue = UtilClass.DateToString(this.Startdatetest.getValue(), "yyyy-MM-dd");
 444      */
 445     public static String DateToString (Object date,String type){
 446         String returnvalue = "";
 447         if(date != null){
 448             try{
 449                 SimpleDateFormat sdf = new SimpleDateFormat(type);
 450                 returnvalue = sdf.format(date);
 451             }
 452             catch(Exception ex){
 453                 alert("日期格式转换出错");
 454             }
 455         }
 456         return returnvalue;
 457     }
 458     /**
 459      * 字符串转为日期
 460      * @param DateStr 字符串
 461      * @param type 类型 "yyyy-MM-dd HH:mm:ss"
 462      * @return Date  java.util.Date
 463      */
 464     public static Date StringToDate(String DateStr,String type){
 465         Date returnvalue = null;
 466         try {
 467             SimpleDateFormat sdf = new SimpleDateFormat(type);
 468             returnvalue = sdf.parse(DateStr);
 469         } catch (ParseException e) {
 470             alert2("日期转换出错",DateStr+"-->"+type);
 471         }
 472         return returnvalue;
 473     }
 474     /**
 475      * 设置DKDatePicker控件显示格式
 476      * @param date 日期控制 
 477      * @param dateType 格式样式 例:"yyyy-MM-dd HH:mm:ss"      "yyyy-MM-dd"
 478      */
 479     public static void setKDDatePicker(KDDatePicker date,String dateType){
 480         date.setDatePattern(dateType);
 481     }
 482     /**
 483      * 获取当前时间(KDDatePicker控件)默认值 例如:创建时间 修改时间 审核时间
 484      * @return java.sql.Timestamp 当前时间
 485      */
 486     public static java.sql.Timestamp getTime(){
 487         java.sql.Timestamp time = new java.sql.Timestamp(new java.util.Date().getTime());
 488         return time;
 489     }
 490 
 491     /**
 492      * 打开文件
 493      * @param FilePath 文件路径
 494      */
 495     public static void OpenFile(String FilePath){
 496         try {
 497             Runtime.getRuntime().exec("cmd /c start "" ""+FilePath.replaceAll("\\", "\\\\")+""");
 498         } catch (IOException e) {
 499             alert2("打开文件出错",FilePath);
 500         }
 501     }
 502     /**
 503      * 打开文件选择器
 504      * @return 文件路径
 505      */
 506     public static String OpenFilesSelect(){
 507         String returnvalue = "";
 508         JFileChooser chooser = new JFileChooser();
 509         chooser.setDialogTitle("请选择文件");
 510         chooser.showDialog(null, "确定");
 511         if(chooser.getSelectedFile()!=null){
 512             File file = chooser.getSelectedFile();
 513             returnvalue = file.getPath();
 514         }
 515         return returnvalue;
 516     }
 517 
 518     /**
 519      * 打开目录选择器
 520      * @return
 521      */
 522     public static String OpenPathSelect(){
 523         String returnvalue = "";
 524         JFileChooser chooser = new JFileChooser();
 525         chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
 526         chooser.setDialogTitle("请选择目录");
 527         chooser.showDialog(null,"保存");
 528         if(chooser.getSelectedFile()!=null){
 529             File file = chooser.getSelectedFile();
 530             returnvalue = file.getPath();
 531         }
 532         return returnvalue;
 533     }
 534     /**
 535      * 向Excel文件插入数据
 536      * @param File 
 537      * @param sheetNum 工作表序号
 538      * @param y 行
 539      * @param x 列
 540      * @param value 内容
 541      */
 542     public static void setExcelValue(String File,int sheetNum,int x,int y,String value){
 543         try {
 544             File file = new File(File);
 545             //如果找到相同的文件,执行删除
 546             if(!file.exists() && !file.isFile()){
 547                 return;
 548             }
 549             //Excel获得文件 
 550             Workbook wb = Workbook.getWorkbook(new File(File)); 
 551             //打开一个文件的副本,并且指定数据写回到原文件 
 552             WritableWorkbook book = Workbook.createWorkbook(new File(File),wb); 
 553             //获取工作表 
 554             WritableSheet sheet=book.getSheet(sheetNum);
 555             sheet.addCell(new Label(y,x,value)); 
 556             book.write(); 
 557             book.close(); 
 558         } catch (Exception e) {
 559         }  
 560     }
 561     /**
 562      * 读取Excel文件
 563      * @param File 文件名
 564      * @param sheetNum 工作表序号
 565      * @param y 行
 566      * @param x 列
 567      */
 568     public static String getExcelValue(String File,int sheetNum,int y,int x){
 569         String result = "";
 570         try {
 571             File file = new File(File);
 572             //如果找到相同的文件,执行删除
 573             if(!file.exists() && !file.isFile()){
 574                 alert(File+"文件没找到!");
 575             }
 576             Workbook book= Workbook.getWorkbook(new File(File)); 
 577             //获得第一个工作表对象 
 578             Sheet sheet=book.getSheet(sheetNum); 
 579             //得到第一列第一行的单元格 
 580             Cell cell1=sheet.getCell(x,y); 
 581             result=cell1.getContents().toString(); 
 582             book.close();
 583         } catch (FileNotFoundException e) {
 584             alert2("读取Excel文件出错","请关闭当前打开的Excel文件");
 585         } catch (BiffException e) {
 586             alert2("读取Excel文件出错",e.toString());
 587         } catch (IOException e) {
 588             alert2("读取Excel文件出错",e.toString());
 589         }
 590         return result;
 591     }
 592 
 593     /**
 594      * 读取Excel文件(第一sheet页中的内容)
 595      * @param File 文件路径
 596      * @param sheetNum sheet页号
 597      * @return 二维数组
 598      * 
 599      */
 600     public static Object[][] getExcelValue(String File,int sheetNum){
 601         Object [][] returnvalue = null;
 602         try {
 603             Workbook book= Workbook.getWorkbook(new File(File)); 
 604             Sheet sheet=book.getSheet(sheetNum);
 605             returnvalue = new Object[sheet.getRows()][sheet.getColumns()];
 606             for(int i=1;i<sheet.getRows();i++){
 607                 for(int j=0;j<sheet.getColumns();j++){
 608                     returnvalue[i][j]=sheet.getCell(j,i).getContents();
 609                 }
 610             }
 611         } catch (FileNotFoundException e) {
 612             alert2("读取Excel文件出错","请关闭当前打开的Excel文件");
 613         } catch (BiffException e) {
 614             alert2("读取Excel文件出错",e.toString());
 615         } catch (IOException e) {
 616             alert2("读取Excel文件出错",e.toString());
 617         }
 618         return returnvalue;
 619     }
 620 
 621     /***
 622      * 发送即时消息
 623      * @param FSuser 发送人ID
 624      * @param JSuser 接收人ID
 625      * @param MessageTitle 标题
 626      * @param Messages 内容
 627      */
 628     public static void addMessage(String FSuser,String JSuser,String MessageTitle,String Messages){
 629         try {
 630             IBMCMessage i = BMCMessageFactory.getRemoteInstance();
 631             BMCMessageInfo info = new BMCMessageInfo(); 
 632             info.setType(MsgType.ONLINE);// 消息类型,例如通知消息,任务消息,状态更新消息
 633             info.setBizType(MsgBizType.ONLINE);// 业务类型,例如工作流,预警平台
 634             info.setPriority(MsgPriority.HIGH); // 优先级
 635             info.setStatus(MsgStatus.UNREADED); // 消息状态
 636             info.setReceiver(JSuser); // 接收人ID (User的ID,不是Person的ID)
 637             info.setSender(FSuser);// 消息发送人
 638             info.setTitle(MessageTitle); // 消息标题
 639             info.setBody(Messages);// 消息内容
 640             i.submit(info);
 641         } catch (Exception e) {
 642             alert2("发送即时消息出错","标题:"+MessageTitle+"  内容:"+Messages);
 643         }
 644     }
 645 
 646 
 647 
 648     /**
 649      * 列转行
 650      * @param list 数据集合
 651      * @param delimiter 分隔符 例:","
 652      * @param bracketsLeft 左括号符号
 653      * @param bracketsRight 右括号符号
 654      * @return String
 655      */
 656     public static String CellToRow(ArrayList list,String delimiter,String bracketsLeft,String bracketsRight){
 657         String returnvalue = "";
 658         for (Iterator iter = list.iterator(); iter.hasNext();){
 659             if(!"".equals(bracketsLeft) && bracketsLeft != null && !"".equals(bracketsRight) && bracketsRight != null){
 660                 returnvalue += bracketsLeft + (String)iter.next() + bracketsRight;
 661             }
 662             returnvalue+=delimiter;
 663         }
 664         return returnvalue.substring(0, returnvalue.length()-1);
 665     }
 666 
 667     /**
 668      * 打开窗口
 669      * @param URL UI地址
 670      * @param ctx 参数集合
 671      * @param openType 打开窗口类型 例:UIFactoryName.MODEL
 672      * @param billStatus 单据状态  例:OprtState.ADDNEW
 673      * 
 674      *  
 675         打开普通UI页面
 676         HashMap cix = new HashMap();
 677         String orderid = "asiofjlqkjwfklaslkasdf="
 678         cix.put("orderid", orderid);
 679         UtilClass.openUI("com.kingdee.eas.cmt.commission.client.GoodsUI", cix, UIFactoryName.MODEL, OprtState.ADDNEW);
 680 
 681         打开单据EditUI页面
 682          HashMap cix = new HashMap();
 683         cix.put("ID", fid);
 684         UtilClass.openUI("com.kingdee.eas.cmt.commission.client.CmtTranConsignEditUI", cix, UIFactoryName.NEWWIN, OprtState.VIEW);
 685 
 686 
 687         在打开的单据获取前面页面传来的参数
 688         this.getUIContext().get("orderid").toString()
 689      *
 690      *
 691      */
 692     public static void openUI(String URL,HashMap ctx,String openType,String billStatus){
 693         try {
 694             IUIWindow ui = UIFactory.createUIFactory(openType).create(URL, ctx, null, billStatus);
 695             ui.show();
 696         } catch (UIException e) {
 697             alert2("弹出UI程序出错:",URL);
 698         }
 699     }
 700 
 701     /**
 702      * 发送参数
 703      * @param ContextID 参数编号
 704      * @param values 参数值
 705      */
 706     public static void setSysContext(String ContextID,Object values){
 707         SysContext.getSysContext().setProperty(ContextID, values);
 708     }
 709 
 710     /**
 711      * 获取参数
 712      * @param ContextID 参数编号
 713      * @return 参数值(Object)
 714      */
 715     public static Object getSysContext(String ContextID){
 716         return SysContext.getSysContext().getProperty(ContextID);
 717     }
 718 
 719     /**
 720      * 获取UI参数
 721      * @param UI
 722      * @return
 723      */
 724     public static String getUIContext(CoreUIObject UI){
 725         String returnvalue = "";
 726         if(UI.getUIContext().get("UIClassParam")!=null){
 727             returnvalue = UI.getUIContext().get("UIClassParam").toString();
 728         }
 729         return returnvalue;
 730     }
 731 
 732     /**
 733      * 创建单据编号
 734      * @param Parameter 规则参数
 735      *        参数说明:
 736      *               logo          编号头标示
 737      *               date          日期时间
 738      *               Delimiter  分隔符
 739      *               digit         序号位数
 740      *               isTissueIsolation   是否组织隔离(0:不隔离1:隔离)
 741      *               table      表名
 742      * @return String 单据编号
 743      * 
 744      *  HashMap Parameter = new HashMap();
 745         //编号头标示符号
 746         Parameter.put("logo", "CMT");
 747         //日期
 748         Parameter.put("date", UtilClass.DateToString(UtilClass.getTime(), "yyyyMMdd"));
 749         //分隔符
 750         Parameter.put("Delimiter", "-");
 751         //序号位数
 752         Parameter.put("digit", "5");
 753         //是否隔离组织0为不隔离1为隔离
 754         Parameter.put("isTissueIsolation", "0");
 755         //单据表名
 756         Parameter.put("table", "T_BAS_VehicleType");
 757         String billNum = UtilClass.createrBillNumber(Parameter);
 758      * 
 759      */
 760     public static String createrBillNumber(HashMap Parameter){
 761         StringBuffer returnvalue = new StringBuffer();
 762         //编号头Logo
 763         if(Parameter.get("logo")!=null){
 764             returnvalue.append(Parameter.get("logo"));
 765         }
 766         //添加时间
 767         if(Parameter.get("date")!=null){
 768             if(Parameter.get("Delimiter")!=null){
 769                 returnvalue.append(Parameter.get("Delimiter"));
 770             }
 771             returnvalue.append(Parameter.get("date"));
 772         }
 773         //创建序号位(digit:序号位数)
 774         if(Parameter.get("digit")!=null){
 775             StringBuffer getDigitSQL = new StringBuffer();
 776             Integer digit = new Integer(Parameter.get("digit").toString());
 777             StringBuffer digitValue = new StringBuffer();
 778             for(int i=0;i<digit.intValue();i++){
 779                 digitValue.append("0");
 780             }
 781             getDigitSQL.append("select trim(to_char(count(*)+1,'"+digitValue+"')) from "+Parameter.get("table")+"  ");
 782             //是否组织隔离
 783             if("1".equals(Parameter.get("isTissueIsolation"))){
 784                 getDigitSQL.append(" where FControlUnitID = '"+getCU().getId()+"'");
 785             }
 786             if(Parameter.get("Delimiter")!=null){
 787                 returnvalue.append(Parameter.get("Delimiter"));
 788             }
 789             //获取数据库记录数
 790             returnvalue.append(executeQueryString(getDigitSQL.toString()));
 791         }
 792         return returnvalue.toString();
 793     }
 794 
 795     /**
 796      *  当前登录组织
 797      * @return
 798      */
 799     public static CtrlUnitInfo getCU(){
 800         return SysContext.getSysContext().getCurrentCtrlUnit();
 801     }
 802 
 803     /**
 804      * 判断当前组织是否为集团要目录
 805      * @return boolean
 806      */
 807     public static boolean isRootCU(){
 808         if("1".equals(executeQueryString("select tc.flevel from t_org_baseunit tc where tc.fid = '"+getCU().getId()+"'"))){
 809             return true;
 810         }else{
 811             return false;
 812         }
 813     }
 814 
 815     /**
 816      * 获取集团组织ID
 817      * @return
 818      */
 819     public static CtrlUnitInfo getRootCU(){
 820         CtrlUnitInfo cinfo = new CtrlUnitInfo();
 821         try {
 822             CtrlUnitCollection cinfos = CtrlUnitFactory.getRemoteInstance().getCtrlUnitCollection("select * where level = 1 ");
 823             cinfo = cinfos.get(0);
 824         } catch (BOSException e) {
 825             alert2("获取集团组织ID出错",e.getMessage());
 826         }
 827         return cinfo;
 828     }
 829     /**
 830      * 当前登录用户
 831      * @return
 832      */
 833     public static UserInfo getUser(){
 834         return SysContext.getSysContext().getCurrentUserInfo();
 835     }
 836     /**
 837      * 当前登陆人员
 838      * @return
 839      */
 840     public static PersonInfo getPerson(){
 841         PersonInfo personinfo = null;
 842         try {
 843             PersonCollection Personcollection = PersonFactory.getRemoteInstance().getPersonCollection(" select * where name = '" + SysContext.getSysContext().getCurrentUserInfo().getName() +"'");
 844             personinfo=Personcollection.get(0);
 845         } catch (Exception e1) {
 846         }
 847         return personinfo;
 848     }
 849     /**
 850      * 当前登录人员部门
 851      * @return
 852      */
 853     public static AdminOrgUnitInfo getDepartment(){
 854         AdminOrgUnitInfo returnvalue = null;
 855         try {
 856             PersonPositionInfo PersonPosition = PersonPositionFactory.getRemoteInstance().getPersonPositionInfo("select primaryPosition.* where person = '" + getPerson().getId() + "'");
 857             PositionInfo Position = PersonPosition.getPrimaryPosition();
 858             AdminOrgUnitCollection collection = AdminOrgUnitFactory.getRemoteInstance().getAdminOrgUnitCollection(" select * where id= '" + Position.getAdminOrgUnit().getId() +"'");
 859             returnvalue = collection.get(0);
 860         } catch (Exception e2) {
 861         }
 862         return returnvalue;
 863     }
 864 
 865     /**
 866      * 通过fid获取表名
 867      * @param fid
 868      * @return 表名
 869      */
 870     public static String getDBTableName(String fid){
 871         String Tablename = "";
 872         com.kingdee.bos.util.BOSObjectType bosType = BOSUuid.read(fid).getType();
 873         try {
 874             Tablename = FMIsqlFacadeFactory.getRemoteInstance().getTableNameByBosType(bosType);
 875         } catch (BOSException e) {
 876             alert2("获取表名出错",fid);
 877         }
 878         return Tablename;
 879     }
 880 
 881     /**
 882      * 执行SQL(查询,返回集合)
 883      * @param sql
 884      * @return 
 885       IRowSet rs = UtilClass.executeQuery(sql.toString());
 886       while(rs.next()){
 887          rs.getObject(1).toString();
 888       }
 889      */
 890     public static IRowSet executeQuery(String sql){
 891         IRowSet returnvalue = null;
 892         try {
 893             IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
 894             returnvalue = db.executeQuery(" /*dialect*/ "+sql, null);
 895         } catch (Exception e) {
 896             alert2("执行SQL出错",sql);
 897         }
 898         return returnvalue;
 899     }
 900     /**
 901      * 执行SQL(查询,返回单看值)
 902      * @param sql
 903      * @return String
 904      */
 905     public static String executeQueryString(String sql){
 906         String returnvalue = null;
 907         try {
 908             IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
 909             IRowSet rs = db.executeQuery(" /*dialect*/ "+sql, null);
 910             while(rs.next()){
 911                 if(rs.getObject(1)!=null){
 912                     returnvalue = rs.getObject(1).toString();
 913                 }
 914             }
 915         } catch (Exception e) {
 916             alert2("执行SQL出错",sql);
 917         }
 918         return returnvalue;
 919     }
 920     /**
 921      * 执行SQL(新增,修改)
 922      * @param sql
 923      */
 924     public static void executeSql(String sql){
 925         try {
 926             IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
 927             db.executeSql(" /*dialect*/ "+sql);
 928         } catch (Exception e) {
 929             alert2("执行SQL出错",sql);
 930         }
 931     }
 932 
 933     /**
 934      * SQL数据导出到Excel文件
 935      * @param sql
 936      * @param FileName 文件名
 937      */
 938     public static String SQLExpot(String sql,String FileName){
 939         String returnvalue ="";
 940         try {
 941             if("".equals(sql)||sql==null){
 942                 return  returnvalue;
 943             }
 944             if(FileName==null||"".equals(FileName)){
 945                 FileName = "temp";
 946             }
 947             String Filepath = UtilClass.OpenPathSelect();
 948             String File = "";
 949             if("".equals(Filepath)){
 950                 return returnvalue;
 951             }else{
 952                 File = Filepath+"\"+FileName+".xls";
 953             }
 954             File file = new File(File);
 955             //如果找到相同的文件,执行删除
 956             if(file.exists() && file.isFile()){
 957                 file.delete();
 958             }
 959             WritableWorkbook wwb = Workbook.createWorkbook(new File(File));
 960             //创建工作表
 961             wwb.createSheet("sheet1", 0);
 962             //获取工作表 
 963             WritableSheet ws = wwb.getSheet(0);
 964 
 965             //表头行样式
 966             WritableCellFormat TableHead = new WritableCellFormat();
 967             TableHead.setBorder(Border.ALL, BorderLineStyle.THIN);
 968             TableHead.setAlignment(Alignment.CENTRE);
 969             TableHead.setBackground(Colour.GRAY_25);
 970 
 971             //表体数据行样式
 972             WritableCellFormat TableRow = new WritableCellFormat();
 973             TableRow.setAlignment(Alignment.CENTRE);
 974 
 975             IRowSet rs = UtilClass.executeQuery(sql);
 976             //生成列名
 977             for(int i=0;i<rs.getRowSetMetaData().getColumnCount();i++){
 978                 String columnName = rs.getRowSetMetaData().getColumnName(i+1);
 979                 ws.addCell(new Label(i,0,columnName,TableHead));
 980             }
 981             int z=1;
 982             while(rs.next()){
 983                 for(int j=1;j<=rs.getRowSetMetaData().getColumnCount();j++){
 984                     if(rs.getObject(j)!=null){
 985                         ws.addCell(new Label(j-1,z,rs.getObject(j).toString(),TableRow));
 986                     }
 987                 }
 988                 z++;
 989             }
 990             wwb.write();    
 991             wwb.close();
 992         } catch (Exception e) {
 993             alert2("导出数据生成Excel文件出错",sql);
 994         }
 995         return returnvalue;
 996     }
 997 
 998 
 999     /**
1000      * 集装箱箱号正确性验证
1001      * @param BoxNum 箱号
1002      * @return Boolean
1003        if(!UtilClass.BoxVerification(boxnum)){
1004             if(!UtilClass.alertReturn("箱号:"+boxnum+" 不是国际标准箱号,是否保存?")){
1005                 UtilClass.Stop();
1006             }
1007         }
1008      */
1009     public static boolean BoxVerification(String BoxNum){
1010         HashMap bj = new HashMap();
1011         bj.put("0", 0);
1012         bj.put("1", 1);
1013         bj.put("2", 2);
1014         bj.put("3", 3);
1015         bj.put("4", 4);
1016         bj.put("5", 5);
1017         bj.put("6", 6);
1018         bj.put("7", 7);
1019         bj.put("8", 8);
1020         bj.put("9", 9);
1021         bj.put("A", 10);
1022         bj.put("B", 12);
1023         bj.put("C", 13);
1024         bj.put("D", 14);
1025         bj.put("E", 15);
1026         bj.put("F", 16);
1027         bj.put("G", 17);
1028         bj.put("H", 18);
1029         bj.put("I", 19);
1030         bj.put("J", 20);
1031         bj.put("K", 21);
1032         bj.put("L", 23);
1033         bj.put("M", 24);
1034         bj.put("N", 25);
1035         bj.put("O", 26);
1036         bj.put("P", 27);
1037         bj.put("Q", 28);
1038         bj.put("R", 29);
1039         bj.put("S", 30);
1040         bj.put("T", 31);
1041         bj.put("U", 32);
1042         bj.put("V", 34);
1043         bj.put("W", 35);
1044         bj.put("X", 36);
1045         bj.put("Y", 37);
1046         bj.put("Z", 38);
1047 
1048         //去掉箱号两边空格
1049         String newBoxNum = BoxNum.trim();
1050 
1051         //判断箱号是否为国际标准11位
1052         if(newBoxNum.length() != 11){
1053             return false;
1054         }
1055 
1056         //判断前四位为字母  區別小寫
1057         for(int i=0;i<4;i++){
1058             String Nums = newBoxNum.substring(i, i+1);
1059             char chs[] = Nums.toCharArray();
1060             if((int)chs[0]<65 || (int)chs[0]>90){
1061                 return false;
1062             }
1063         }
1064 
1065         //判断后7位为数字
1066         for(int i=4;i<11;i++){
1067             String Nums = newBoxNum.substring(i, i+1);
1068             char chs[] = Nums.toCharArray();
1069             if((int)chs[0]<48 || (int)chs[0]>57){
1070                 return false;
1071             }
1072         }
1073 
1074         //判断第11数验证码是否正确
1075         double VerificationNumSum = 0;
1076         for(int i=0;i<10;i++){
1077             //获取当前位字母或数字对应的数值
1078             double bjdata = ((Integer)bj.get(newBoxNum.substring(i, i+1))).doubleValue();
1079             //获取当前位对应的2的i次方
1080             double jfdata = Math.pow(2,i);
1081             VerificationNumSum+=bjdata*jfdata;
1082         }
1083         int VerificationNum =(int)VerificationNumSum%11;
1084         int sub11 = new Integer(newBoxNum.substring(10)).intValue();
1085         //如果计算结果与第11位数是否相等
1086         if(VerificationNum!=sub11){
1087             return false;
1088         }
1089         return true;
1090     }
1091 
1092     /**
1093      * 从oracle数据读取图片字节码生成图片文件
1094      * @param img_num 图片编号(参数表编号)
1095      * @param file 文件地址 "c://bmw.png"
1096 
1097             系统参数表
1098             -- 创建表
1099             create table T_SYS_FUTVAN
1100             (
1101               FNUMBER             NVARCHAR2(55),
1102               FNAME               NVARCHAR2(256),
1103               PARAMETER_STRING    NVARCHAR2(256),
1104               PARAMETER_NUMBER    NUMBER,
1105               PARAMETER_DATE      DATE,
1106               PARAMETER_TIMESTAMP TIMESTAMP(6),
1107               PARAMETER_BLOB      BLOB
1108             )
1109             -- 创建字段说明 
1110             comment on column T_SYS_FUTVAN.FNUMBER
1111               is '参数编号';
1112             comment on column T_SYS_FUTVAN.FNAME
1113               is '参数名称';
1114             comment on column T_SYS_FUTVAN.PARAMETER_STRING
1115               is '文本型参数';
1116             comment on column T_SYS_FUTVAN.PARAMETER_NUMBER
1117               is '数据型参数';
1118             comment on column T_SYS_FUTVAN.PARAMETER_DATE
1119               is '日期型参数';
1120             comment on column T_SYS_FUTVAN.PARAMETER_TIMESTAMP
1121               is '时间型参数';
1122             comment on column T_SYS_FUTVAN.PARAMETER_BLOB
1123               is '字节型参数';
1124      * 
1125      */
1126     public static void getImgFromOracle(String img_num,String file){
1127         try {
1128             IRowSet rs = executeQuery("select parameter_blob from t_sys_futvan where fnumber = '"+img_num+"'"); 
1129             while(rs.next()){
1130                 java.sql.Blob blob = rs.getBlob(1);
1131                 InputStream ins = blob.getBinaryStream();
1132                 File f = new File(file);
1133                 FileOutputStream fout = new FileOutputStream(f);
1134                 byte[]b = new byte[10244];
1135                 int len = 0;
1136                 while((len = ins.read(b)) != -1){
1137                     fout.write(b,0,len);
1138                 }
1139                 fout.close();
1140                 ins.close();
1141             }
1142         } catch (Exception e) {
1143             System.out.println();
1144         }
1145     }
1146 
1147     /**
1148      * BOTP单据转换
1149      * @param botpNum 转换规则编号
1150      * @param BillInfo 原单据
1151      */
1152     public static void BOTP(String botpNum,CoreBillBaseInfo BillInfo){
1153         String error = "";
1154         try {
1155             // 取得BOPT的映射
1156             BOTMappingCollection botmapping = BOTMappingFactory.getRemoteInstance().getBOTMappingCollection("select * where    name = '"+botpNum+"'  ");
1157             BOTMappingInfo btpMappingInfo = null;
1158             if (botmapping !=null && botmapping.size() == 1) {
1159                 btpMappingInfo = botmapping.get(0);
1160             } else {
1161                 if(botmapping==null || botmapping.size()<1){
1162                     error = "未找到转换规则  规则编号:"+botpNum;
1163                 }
1164                 if(botmapping.size()>1){
1165                     error = "找到多条转换规则,请删除重复规则。   规则编号:"+botpNum;
1166                 }
1167                 throw new Exception();
1168             }
1169             //执行单据转换
1170             BTPTransformResult transformResult = BTPManagerFactory.getRemoteInstance().transform(BillInfo, btpMappingInfo);
1171 
1172             //取得目标单据列表
1173             IObjectCollection toBillList = transformResult.getBills();
1174             
1175             //保存目标单据
1176             for (int i = 0; i < toBillList.size(); i++) {   
1177                 CoreBillBaseInfo destBillInfo = (CoreBillBaseInfo) toBillList.getObject(i);
1178                 BTPManagerFactory.getRemoteInstance().saveRelations(destBillInfo, transformResult.getBOTRelationCollection());
1179             }
1180             
1181         } catch (Exception e) {
1182             if("".equals(error) || error == null){
1183                 alert2("单据转换出错",e.getMessage());
1184             }else{
1185                 alert2("单据转换出错",error);
1186             }
1187         }
1188     }
1189     
1190     /**
1191      * 分摊功能
1192      * @param Total 总数
1193      * @param Allocations 分摊明细
1194      * @param newScale 小数位数
1195      * @return 分摊分集合
1196         String [][]Allocations = new String[3][2];
1197         Allocations[0][0] = "001";
1198         Allocations[0][1] = "3";
1199         Allocations[1][0] = "002";
1200         Allocations[1][1] = "3";
1201         Allocations[2][0] = "003";
1202         Allocations[2][1] = "3";
1203         String [][] rv = UtilClass.mathAllocation(new BigDecimal("100"), Allocations,2);
1204      */
1205     public static String[][] mathAllocation(BigDecimal Total,String[][] Allocations,int newScale){
1206         String[][] returnvalue = new String[Allocations.length][2];
1207         BigDecimal sum = new BigDecimal("0");
1208         BigDecimal Allocationsum = new BigDecimal("0");
1209         try {
1210             //获取明细总数
1211             for(int i=0;i<Allocations.length;i++){
1212                 if(Allocations[i][1]!=null&&!"".equals(Allocations[i][1])){
1213                     sum = sum.add(new BigDecimal(Allocations[i][1]));
1214                 }
1215             }
1216             
1217             //按比例分摊
1218             for(int i=0;i<Allocations.length;i++){
1219                 if(Allocations[i][1]!=null&&!"".equals(Allocations[i][1])){
1220                     BigDecimal thisValue = new BigDecimal(Allocations[i][1]);
1221                     BigDecimal AllocationValue = thisValue.divide(sum,16, BigDecimal.ROUND_HALF_UP).multiply(Total).setScale(newScale, BigDecimal.ROUND_HALF_UP);
1222                     returnvalue[i][0] = Allocations[i][0];
1223                     returnvalue[i][1] = AllocationValue.toString();
1224                 }else{
1225                     returnvalue[i][0] = Allocations[i][0];
1226                     returnvalue[i][1] = "0";
1227                 }
1228             }
1229             
1230             //判断分摊后每条记录数据是否与总数相同
1231             for(int i=0;i<returnvalue.length;i++){
1232                 if(returnvalue[i][1]!=null&&!"".equals(returnvalue[i][1])){
1233                     Allocationsum = Allocationsum.add(new BigDecimal(returnvalue[i][1]));
1234                 }
1235             }
1236             
1237             //如果分摊后结果与分摊前总数不一等。在分摊记录最后一条。加上。分摊后总数与分摊总数的差值
1238             if(Allocationsum.compareTo(Total)!=0){
1239                 BigDecimal xz = new BigDecimal(returnvalue[returnvalue.length-1][1]).subtract(Allocationsum.subtract(Total));
1240                 returnvalue[returnvalue.length-1][1] = xz.toString();
1241             }
1242         } catch (Exception e) {
1243             StringBuffer er = new StringBuffer();
1244             for(int i=0;i<Allocations.length;i++){
1245                 er.append("| "+Allocations[i][0]+"   "+Allocations[i][1]+" |");
1246             }
1247             alert2("分摊出错","分摊总数:"+Total.toString()+"  明细:"+er.toString());
1248         }
1249         return returnvalue;
1250     }
1251     
1252 }
1253 
1254 /*
1255 
1256 --BOTP单据查询
1257 select tbotpm.fname               转换规则编号,
1258        tbotpm.fsrcentityalias_l2  源单据名称,
1259        tbotpm.FSrcEntityFullName  源单据对象,
1260        tbotpd.FSrcObjectID 源单据fid,
1261        tbotpm.fdestentityalias_l2 目录单据名称,
1262        tbotpm.FDestEntityFullName 目标单据对象,
1263        tbotpd.FDestObjectID 目标单据fid
1264   from T_BOT_Relation tbotpc
1265  inner join t_bot_mapping tbotpm
1266     on tbotpc.FBOTMappingID = tbotpm.fid
1267  inner join t_bot_relationentry tbotpd
1268     on tbotpc.fid = tbotpd.FKeyID
1269            
1270            
1271 
1272 --凭证查询
1273 SELECT
1274 DISTINCT VOUCHER.Fid  主表FID,
1275  VOUCHER.Fnumber 凭证号,
1276  TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD') 记账日期,
1277  ENTRIES.Fid 分录fid
1278  
1279   FROM T_GL_Voucher VOUCHER
1280 
1281   LEFT OUTER JOIN T_PM_User CASHIER
1282     ON VOUCHER.FCashierID = CASHIER.FID
1283 
1284   LEFT OUTER JOIN T_BD_VoucherTypes  VOUCHERTYPE
1285     ON VOUCHER.FVoucherTypeID = VOUCHERTYPE.FID
1286 
1287   LEFT OUTER JOIN T_BD_Period  PERIOD
1288     ON VOUCHER.FPeriodID = PERIOD.FID
1289 
1290   LEFT OUTER JOIN T_PM_User  AUDITOR
1291     ON VOUCHER.FAuditorID = AUDITOR.FID
1292 
1293   LEFT OUTER JOIN T_PM_User  HANDLER
1294     ON VOUCHER.FHandlerID = HANDLER.FID
1295 
1296   LEFT OUTER JOIN T_PM_User  CREATOR
1297     ON VOUCHER.FCreatorID = CREATOR.FID
1298 
1299   LEFT OUTER JOIN T_PM_User  POSTER
1300     ON VOUCHER.FPosterID = POSTER.FID
1301 
1302   LEFT OUTER JOIN T_PM_User  CANCELLER
1303     ON VOUCHER.FCancellerID = CANCELLER.FID
1304 
1305  INNER JOIN T_GL_VoucherEntry  ENTRIES
1306     ON VOUCHER.FID = ENTRIES.FBillID
1307 
1308   LEFT OUTER JOIN T_ORG_BaseUnit  COMPANY
1309     ON VOUCHER.FCompanyID = COMPANY.FID
1310 
1311  left JOIN (SELECT
1312              
1313              DISTINCT VOUCHER.FID  ID,
1314                       ASSISTRECORDS.FDescription FDescriptions,
1315                       ASSGRP.fnumbergroup_l2 fnumbergroup_l2s,
1316                       ASSISTRECORDS.FSettlementCode FSettlementCodes,
1317                       ASSISTRECORDS.Fid assFid
1318                       VOUCHER.FIsCheck  ISCHECK,
1319                       VOUCHER.FCompanyID  COMPANY.ID,
1320                       COMPANY.FName_l2  COMPANY.NAME,
1321                       PERIOD.FNumber  PERIOD.NUMBER,
1322                       ((TO_CHAR(PERIOD.FPeriodYear) || '.') ||
1323                       TO_CHAR(PERIOD.FPeriodNumber))  PERIOD,
1324                       VOUCHERTYPE.FName_l2  VOUCHERTYPE.NAME,
1325                       VOUCHERTYPE.FNumber  VOUCHERTYPE.NUMBER,
1326                       VOUCHER.FNumber  NUMBER,
1327                       VOUCHER.FBookedDate  BOOKEDDATE,
1328                       VOUCHER.FBizDate  BIZDATE,
1329                       VOUCHER.FSourceSys  SOURCESYS,
1330                       VOUCHER.FSourceType  SOURCETYPE,
1331                       CASHIER.FName_l2  CASHIER.NAME,
1332                       AUDITOR.FName_l2  AUDITOR.NAME,
1333                       CREATOR.FName_l2  CREATOR.NAME,
1334                       POSTER.FName_l2  POSTER.NAME,
1335                       VOUCHER.FBizStatus  BIZSTATUS,
1336                       VOUCHER.FEntryCount  ENTRYCOUNT,
1337                       ENTRIES.FID  ENTRIES.ID,
1338                       ENTRIES.FSeq  ENTRIES.SEQ,
1339                       ENTRIES.FDescription  ENTRIES.DESCRIPTION,
1340                       ACCOUNT.FNumber  ACCOUNT.NUMBER,
1341                       ACCOUNT.FLongName_l2  ACCOUNT.LONGNAME,
1342                       CURRENCY.FName_l2  CURRENCY.NAME,
1343                       CURRENCY.FPrecision  CURRENCY.PRECISION,
1344                       ENTRIES.FOriginalAmount  ENTRIES.ORIGINALAMOUNT,
1345                       CASE ENTRIES.FEntryDC
1346                         WHEN 1 THEN
1347                          ENTRIES.FLocalAmount
1348                         ELSE
1349                          NULL
1350                       END AS LOCALAMOUNTDEBIT,
1351                       CASE ENTRIES.FEntryDC
1352                         WHEN 1 THEN
1353                          NULL
1354                         ELSE
1355                          ENTRIES.FLocalAmount
1356                       END AS LOCALAMOUNTCREDIT,
1357                       CASE ENTRIES.FEntryDC
1358                         WHEN 1 THEN
1359                          ENTRIES.FReportingAmount
1360                         ELSE
1361                          NULL
1362                       END AS REPORTINGAMOUNTDEBIT,
1363                       CASE ENTRIES.FEntryDC
1364                         WHEN 1 THEN
1365                          NULL
1366                         ELSE
1367                          ENTRIES.FReportingAmount
1368                       END AS REPORTINGAMOUNTCREDIT,
1369                       VOUCHER.FHasCashAccount AS HASCASHACCOUNT,
1370                       VOUCHER.FDescription AS DESCRIPTION,
1371                       ENTRIES.FIsCussent AS ENTRIES.CUSSENT,
1372                       ASSGRP.FLongNameGroup_l2 AS ASSGRP.LONGNAMEGROUP,
1373                       VOUCHER.FAttachments AS ATTACHMENTS,
1374                       VOUCHER.FCreateTime AS CREATETIME,
1375                       ASSISTRECORDS.FDescription AS ASSISTRECORDS.DESCRIPTION,
1376                       ASSISTRECORDS.FOriginalAmount AS ASSISTRECORDS.ORIGINALAMOUNT,
1377                       ASSISTRECORDS.FLocalAmount AS ASSISTRECORDS.LOCALAMOUNT,
1378                       ASSISTRECORDS.FReportingAmount AS ASSISTRECORDS.REPORTINGAMOUNT,
1379                       ASSISTRECORDS.FQuantity AS ASSISTRECORDS.QUANTITY,
1380                       ENTRIES.FQuantity AS ENTRIES.QUANTITY,
1381                       VOUCHER.FIsCussent AS ISCUSSENT,
1382                       VOUCHER.FIsMgCtrl AS ISMGCTRL,
1383                       ASSISTRECORDS.FSettlementCode AS ASSISTRECORDS.SETTLEMENTCODE,
1384                       ASSISTRECORDS.FBizNumber AS ASSISTRECORDS.BIZNUMBER,
1385                       ASSISTRECORDS.FInvoiceNumber AS ASSISTRECORDS.INVOICENUMBER,
1386                       ASSISTRECORDS.FTicketNumber AS ASSISTRECORDS.TICKETNUMBER,
1387                       CUSTOMER.FNumber AS CUSTOMER.NUMBER,
1388                       SETTLEMENTTYPE.FNumber AS SETTLEMENTTYPE.NUMBER,
1389                       MATERIAL.FNumber AS MATERIAL.NUMBER,
1390                       ORGUNIT.FNumber AS ORGUNIT.NUMBER,
1391                       SUPPLIER.FNumber AS SUPPLIER.NUMBER,
1392                       ASSISTRECORDS.FHasEffected AS ASSISTRECORDS.HASEFFECTED,
1393                       ASSISTRECORDS.FFeeType AS ASSISTRECORDS.FEETYPE
1394              
1395                FROM T_GL_Voucher  VOUCHER
1396              
1397                LEFT OUTER JOIN T_PM_User  CASHIER
1398                  ON VOUCHER.FCashierID = CASHIER.FID
1399              
1400                LEFT OUTER JOIN T_BD_VoucherTypes  VOUCHERTYPE
1401                  ON VOUCHER.FVoucherTypeID = VOUCHERTYPE.FID
1402              
1403                LEFT OUTER JOIN T_BD_Period  PERIOD
1404                  ON VOUCHER.FPeriodID = PERIOD.FID
1405              
1406                LEFT OUTER JOIN T_PM_User  AUDITOR
1407                  ON VOUCHER.FAuditorID = AUDITOR.FID
1408              
1409                LEFT OUTER JOIN T_PM_User  HANDLER
1410                  ON VOUCHER.FHandlerID = HANDLER.FID
1411              
1412                LEFT OUTER JOIN T_PM_User  CREATOR
1413                  ON VOUCHER.FCreatorID = CREATOR.FID
1414              
1415                LEFT OUTER JOIN T_PM_User  POSTER
1416                  ON VOUCHER.FPosterID = POSTER.FID
1417              
1418                LEFT OUTER JOIN T_PM_User  CANCELLER
1419                  ON VOUCHER.FCancellerID = CANCELLER.FID
1420              
1421               INNER JOIN T_GL_VoucherEntry  ENTRIES
1422                  ON VOUCHER.FID = ENTRIES.FBillID
1423              
1424                LEFT OUTER JOIN T_ORG_BaseUnit  COMPANY
1425                  ON VOUCHER.FCompanyID = COMPANY.FID
1426              
1427                LEFT OUTER JOIN T_BD_Currency  CURRENCY
1428                  ON ENTRIES.FCurrencyID = CURRENCY.FID
1429              
1430                LEFT OUTER JOIN T_BD_AccountView  ACCOUNT
1431                  ON ENTRIES.FAccountID = ACCOUNT.FID
1432              
1433                LEFT OUTER JOIN T_GL_VoucherAssistRecord  ASSISTRECORDS
1434                  ON ENTRIES.FID = ASSISTRECORDS.FEntryID
1435              
1436                LEFT OUTER JOIN T_BD_AssistantHG  ASSGRP
1437                  ON ASSISTRECORDS.FAssGrpID = ASSGRP.FID
1438              
1439                LEFT OUTER JOIN T_BD_Customer  CUSTOMER
1440                  ON ASSISTRECORDS.FCustomerID = CUSTOMER.FID
1441              
1442                LEFT OUTER JOIN T_BD_SettlementType  SETTLEMENTTYPE
1443                  ON ASSISTRECORDS.FSettlementTypeID = SETTLEMENTTYPE.FID
1444              
1445                LEFT OUTER JOIN T_BD_Material  MATERIAL
1446                  ON ASSISTRECORDS.FMaterialID = MATERIAL.FID
1447              
1448                LEFT OUTER JOIN T_ORG_Company  ORGUNIT
1449                  ON ASSISTRECORDS.FOrgUnitID = ORGUNIT.FID
1450              
1451                LEFT OUTER JOIN T_BD_Supplier  SUPPLIER
1452                  ON ASSISTRECORDS.FSupplierID = SUPPLIER.FID
1453              
1454                LEFT OUTER JOIN T_PM_User  HANDLER1
1455                  ON ASSISTRECORDS.FHandlerID = HANDLER1.FID)  VCHIDQUERY
1456     ON VOUCHER.FID = VCHIDQUERY.ID
1457 
1458   LEFT OUTER JOIN T_BD_Currency  CURRENCY
1459     ON ENTRIES.FCurrencyID = CURRENCY.FID
1460 
1461   LEFT OUTER JOIN T_BD_AccountView  ACCOUNT
1462     ON ENTRIES.FAccountID = ACCOUNT.FID
1463  where COMPANY.Fname_L2 = '中床国际物流集团有限公司'  
1464  and TO_DATE(TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD'), 'YYYY-MM-DD') >=
1465                            TO_DATE('2009-01-01', 'YYYY-MM-DD')
1466  AND TO_DATE(TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD'), 'YYYY-MM-DD') <=
1467                            TO_DATE('2009-12-31', 'YYYY-MM-DD')
1468                            
1469 
1470 */
原文地址:https://www.cnblogs.com/kode/p/4609478.html