用友每日批处理

该博客主要介绍了如何使用Java处理用友系统的XML批处理任务,包括校验文件、费用总额核对、异常记录、文件操作和事务管理。通过检查文件的记录数、大小、验证码等信息,以及执行不同的操作如费用录入和更正处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. package cn.gwssi.cpees.d_sf.xml;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.lang.reflect.Method;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import cn.gwssi.common.component.exception.TxnException;
  10. import cn.gwssi.common.component.security.MD5;
  11. import cn.gwssi.common.component.util.DateUtil;
  12. import cn.gwssi.common.context.DataBus;
  13. import cn.gwssi.common.context.Recordset;
  14. import cn.gwssi.common.context.TxnContext;
  15. import cn.gwssi.common.dao.BaseTable;
  16. import cn.gwssi.common.dao.ds.ConnectFactory;
  17. import cn.gwssi.common.dao.impl.TableFactory;
  18. import cn.gwssi.common.txn.xml.XmlDocument;
  19. import cn.gwssi.cpees.d_sf.exception.FeiyongException;
  20. public class ReadAndDoAction extends XmlDocument {
  21.     public String getConfigFileName(TxnContext arg0) {      
  22.         return "E:/index080220151023.XML";
  23.     }
  24.     public ReadAndDoAction()
  25.     {
  26.         super();
  27.         dtdFile = "/cn/gwssi/cpees/d_sf/xml/dtd/idx.dtd";
  28.         
  29.     }
  30.      public void txn02(TxnContext context)throws TxnException
  31.      {
  32.         //异常输出文件
  33.          File file = new File("c://批处理异常信息.txt");
  34.         //记录异常
  35.         StringBuffer sumString = new StringBuffer();//总线程异常 
  36.         //************************校验费总*******************************
  37.         Recordset set = checkSumFee();
  38.         DataBus da = new DataBus();
  39.         da.addRecord("核对结果", set);
  40.         //****************************校验文件***************************
  41.         Recordset index = config.getRecordset("filerecord"null );
  42.         Recordset tempIndex = (Recordset)index.clone();//克隆文件信息     
  43.         publicMothed(tempIndex, sumString);//实体操作类
  44.         try {
  45.             BufferedWriter write = new BufferedWriter(new FileWriter(file,true));
  46.             write.write(da.toString());
  47.             write.write(sumString.toString());
  48.             write.close();
  49.         } catch (IOException e) {
  50.             e.printStackTrace();
  51.         }   
  52.         
  53.     }
  54.      //核对费总 核对每笔费用的原始费用表中数据是否与待生效+已生效+退费的总和是否相等
  55.      private Recordset checkSumFee() throws TxnException{
  56.          TxnContext context = new TxnContext();
  57.         BaseTable table1 = TableFactory.getInstance().getTableObject(this"gg_fy_ysxfyjlb");//已生效费用表
  58.         BaseTable table2 = TableFactory.getInstance().getTableObject(this"gg_fy_dsxfyjlb");//待生效费用表
  59.         BaseTable table3 = TableFactory.getInstance().getTableObject(this"sf_ysfyb");//原始费用表
  60.         BaseTable table4 = TableFactory.getInstance().getTableObject(this"gg_fy_tfclb");//退费处理表       
  61.         table3.executeFunction("selectUseFeeList",context, """recordforyxfy");//查询有效费用
  62.         Recordset set = context.getRecordset("recordforyxfy");
  63.         Recordset setMes = new Recordset();//记录核对信息
  64.         int count = set.size();
  65.         for(int i=0;i<count;i++){
  66.             String feiyongid = set.get(i).getValue("feiyongid");//费用ID
  67.             String jiaofeije = set.get(i).getValue("jiaofeije");//缴费金额
  68.             DataBus da = new DataBus();
  69.             //1.查询费用表
  70.             context.getRecord("selectall").setValue("feiyongid", feiyongid);
  71.             table1.executeFunction("getSumFeeByFeiyongid",context, "selectall""recordgetysxju");//已生效
  72.             table2.executeFunction("getSumFeeByFeiyongid",context, "selectall""recordgetdsxju");//待生效
  73.             table4.executeFunction("getSumFeeByFeiyongid",context, "selectall""recordgettf");//退费处理
  74.             
  75.             String ysxje = context.getRecord("recordgetysxju").getValue("fee");
  76.             String dsxje = context.getRecord("recordgetdsxju").getValue("fee");
  77.             String tfje = context.getRecord("recordgettf").getValue("fee");
  78.             if(ysxje.equals("")){
  79.                 ysxje = "0";
  80.             }
  81.             if(dsxje.equals("")){
  82.                 dsxje = "0";
  83.             }
  84.             if(tfje.equals("")){
  85.                 tfje = "0";
  86.             }   
  87.             Double sumFee = Double.parseDouble(ysxje)+ Double.parseDouble(dsxje)+Double.parseDouble(tfje);
  88.             if(sumFee!=Double.parseDouble(jiaofeije)){
  89.                 da.put("feiyongid", feiyongid);
  90.                 da.put("status""错误");
  91.             }else{
  92.                 da.put("feiyongid", feiyongid);
  93.                 da.put("status""正常");
  94.             }
  95.            setMes.add(da);
  96.         }   
  97.         return setMes;
  98.      }
  99.      //公共方法类
  100.      private void publicMothed(Recordset tempIndex,StringBuffer sumString) throws TxnException{
  101.          
  102.          StringBuffer buffer = new StringBuffer();//记录异常信息
  103.          int tempIndexSize = tempIndex.size();
  104.          for(int i=0;i<tempIndexSize;i++){           
  105.              buffer = checkWenj(tempIndex.get(i), i);
  106.              sumString.append("文件校验信息");
  107.              sumString.append("/n");
  108.              sumString.append(buffer);
  109.              sumString.append("/n");            
  110.          }
  111.             
  112.      }
  113.      //文件验证辅助类
  114.      private StringBuffer checkWenj(DataBus db, int i)throws TxnException{
  115.             StringBuffer buffer = new StringBuffer();//记录异常信息
  116.             try{
  117.              checkIndexMes(db, i);
  118.              String wenjianm = db.getValue("FILENAME").trim();//子文件名    
  119.              String jiluts  = db.getValue("RECORDCOUNT").trim();//记录条数
  120.              String wenjiandx  = db.getValue("FILESIZE").trim();//文件大小
  121.              String fz  = db.getValue("CHARGETOTAL").trim();//费总
  122.              String sm  = db.getValue("FILEMEMO").trim();//说明
  123.              String wenjianxym  = db.getValue("FILEMD5").trim();//验证码
  124.              File xmlFile = new File("E:/");//xml暂定存储E盘
  125.              String[] str = xmlFile.list();
  126.              int fileCount = str.length;
  127.              int temp = 0;//文件存在与否标示
  128.              //查找文件
  129.              String fileName = null;
  130.              //******************************************************
  131.              for(int j=0;j<fileCount;j++){
  132.                  String fileNames = str[j].trim();//文件名
  133.                  if(wenjianm.equals(fileNames)){//如果文件名相同,即文件存在
  134.                      fileName = fileNames;
  135.                      temp = 1;  
  136.                  }
  137.              }
  138.              //******************************************************
  139.              if(temp==1){
  140.                    DataBus getResourse = getDtdFile(fileName);//得到文件相关信息
  141.                     File file = new File(getResourse.getValue("xml"));
  142.                     long fileSize = file.length();//xml大小
  143.                     String mdValue = new MD5().getMD5Code(getResourse.getValue("xml"));//得到文件验证码
  144.                     config.setData(new DataBus());
  145.                     config.parser(getResourse.getValue("xml"), getResourse.getValue("dtd"));
  146.                     Recordset patent = config.getRecordset(getResourse.getValue("part"), null );    //得到具体文件结点
  147.                     String check = getResourse.getValue("check");
  148.                     if(null!=check && check.equals("1")){//如果是已记账信息,检查费用总额
  149.                         boolean isEqual = checkSumFeeForPos(fz, patent);
  150.                         if(!isEqual){
  151.                           buffer.append("第"+(i+1)+"条文件已记账费总不符");
  152.                           }
  153.                         }
  154.                         if(Integer.parseInt(jiluts)!=(patent.size())){
  155.                             buffer.append("第"+(i+1)+"条文件记录数不符");
  156.                         }else if(Long.parseLong(wenjiandx)!=fileSize){
  157.                             buffer.append("第"+(i+1)+"条文件大小不符");
  158.                         }else if(!(mdValue.equals(wenjianxym))){
  159.                             buffer.append("第"+(i+1)+"条文件验证码错误");
  160.                         }else{
  161.                             buffer.append("/n");
  162.                             buffer.append("******************"+sm+"操作日志"+getTime()+"************************");
  163.                             buffer.append(doAction(fileName, patent));//操作方法
  164.                             buffer.append("/n");
  165.                         }
  166.                                             
  167.              }else{
  168.                        buffer.append("第"+(i+1)+"条文件找不到");
  169.              }
  170.             }catch (FeiyongException e) {
  171.                 buffer.append(e.getMessage());
  172.                 buffer.append("/n");            
  173.             }
  174.          return buffer;
  175.      }
  176.         
  177.     
  178.     //未记账信息录入
  179.     private StringBuffer actionForClzMes(Recordset patent) throws TxnException{
  180.         TxnContext context = new TxnContext();
  181.         StringBuffer buffer = new StringBuffer();//记录异常信息
  182.         int count = patent.size();
  183.         for(int i=0;i<count;i++){   
  184.             try{
  185.             ConnectFactory.getInstance().begin();//开始一个事物
  186.                 //异常处理
  187.             checkClzMes(patent.get(i),i);
  188.             DataBus da = new DataBus();
  189.             String jiaofeisj = patent.get(i).getValue("TC_PMT_DAT");//缴费时间
  190.             da.put("feiyongid", patent.get(i).getValue("TC_ROWID"));//费用ID
  191.             da.put("shenqingh",patent.get(i).getValue("TC_APP_DOM"));//申请号
  192.             da.put("guowaisqh", patent.get(i).getValue("TC_APP_INT"));//国外申请号
  193.             da.put("jiaofeisj", changeDate(jiaofeisj));//缴费时间
  194.             
  195.             da.put("feiyongzldm", patent.get(i).getValue("TC_KM_CODE"));//费用种类代码
  196.             da.put("feiyongzlmc",patent.get(i).getValue("TC_KM_NAME"));//费用种类名称
  197.             da.put("jiaofeije", patent.get(i).getValue("TC_JE_RMB"));//缴费金额 
  198.             
  199.             da.put("jiaofeirxm", patent.get(i).getValue("TC_PMT"));//缴费人姓名
  200.             da.put("jiaofeirdz", patent.get(i).getValue("TC_PMT_ADDR"));//缴费人地址
  201.             da.put("jiaofeiryb", patent.get(i).getValue("TC_PMT_ZIP"));//缴费人邮编
  202.             da.put("feiyongbj", patent.get(i).getValue("TC_STAT"));//费用标记
  203.             context.put("rep", da);
  204.             BaseTable table = TableFactory.getInstance().getTableObject(this"sf_ysrzcb");
  205.             table.executeFunction("insert one sf_ysrzcb",context, "rep""record");
  206.             ConnectFactory.getInstance().getConnection().commit();      
  207.         }catch (FeiyongException e) {
  208.             buffer.append(e.getMessage());
  209.             buffer.append("/n");                    
  210.         }catch (TxnException ef){
  211.             buffer.append("第"+(i+1)+"条"+ef.getMessage());
  212.             buffer.append("/n");
  213.             ConnectFactory.getInstance().rollback();
  214.         }       
  215.         }
  216.         return buffer;
  217.                 
  218.     }
  219.    //已记账信息处理
  220.     private StringBuffer actionForPayMes(Recordset ele) throws TxnException{      
  221.         TxnContext context = new TxnContext();
  222.         StringBuffer buffer = new StringBuffer();//记录异常信息
  223.         int counts = ele.size();
  224.         for(int j=0;j<counts;j++){
  225.             try{
  226.             ConnectFactory.getInstance().begin();//开始一个事物
  227.             DataBus db = new DataBus();         
  228.             //异常处理
  229.             checkYsfMes(ele.get(j),j);          
  230.             db.put("feiyongid", ele.get(j).getValue("TC_ROWID"));
  231.             
  232.             db.put("shenqingh",ele.get(j).getValue("TC_APP_DOM"));
  233.             db.put("guowaisqh", ele.get(j).getValue("TC_APP_INT"));
  234.             db.put("jiaofeisj", changeDate(ele.get(j).getValue("TC_PMT_DAT")));
  235.             
  236.             db.put("feiyongzldm", ele.get(j).getValue("TC_KM_CODE"));
  237.             db.put("feiyongzlmc",ele.get(j).getValue("TC_KM_NAME"));
  238.             db.put("jiaofeije", ele.get(j).getValue("TC_JE_RMB"));
  239.             db.put("shoujuh", ele.get(j).getValue("TC_RCP"));
  240.             db.put("shoujurq", changeDate(ele.get(j).getValue("TC_RCP_DAT")));
  241.             
  242.             db.put("jiaofeirxm", ele.get(j).getValue("TC_PMT"));
  243.             db.put("jiaofeirdz", ele.get(j).getValue("TC_PMT_ADDR"));
  244.             db.put("jiaofeiryb", ele.get(j).getValue("TC_PMT_ZIP"));
  245.             db.put("feiyongbj", ele.get(j).getValue("TC_STAT"));
  246.             db.put("shaomiaozt""1");//已扫描
  247.         
  248.         //1.插原始费用表
  249.         context.put("repa", db);
  250.         BaseTable tablea = TableFactory.getInstance().getTableObject(this"sf_ysfyb");
  251.         tablea.executeFunction("insert one sf_ysfyb",context, "repa""record");
  252.         //插待生效费用表
  253.         DataBus dc = db;
  254.         String shenqingh = dc.getValue("shenqingh");//得到申请号
  255.         if(!(shenqingh.equals(""))){
  256.             dc.remove("guowaisqh");
  257.             dc.remove("xiaofeirxm");
  258.             dc.remove("xiaofeirdz");
  259.             dc.remove("xiaofeiryb");
  260.             dc.remove("feiyongbj");
  261.             dc.remove("shaomiaozt");
  262.             dc.setValue("xitongjzsj"this.getTime());
  263.             dc.setValue("yanshijfje", dc.getValue("jiaofeije"));
  264.             dc.setValue("feiyongzt""1");//暂定为1
  265.             context.put("repb", dc);
  266.             //2.插入待生效费用表中
  267.             BaseTable tableb = TableFactory.getInstance().getTableObject(this,"gg_fy_dsxfyjlb");
  268.             tableb.executeFunction("insert one gg_fy_dsxfyjlb", context,"repb""record"); 
  269.         }           
  270.         ConnectFactory.getInstance().getConnection().commit();
  271.         } catch (FeiyongException e) {
  272.             buffer.append(e.getMessage());
  273.             buffer.append("/n");            
  274.         }catch (TxnException ef){
  275.             buffer.append("第"+(j+1)+"条"+ef.getMessage());
  276.             buffer.append("/n");
  277.             ConnectFactory.getInstance().rollback();
  278.         }       
  279.         }
  280.         return buffer;
  281.     }
  282.     //根据规定费用表中的申请号和费用种类代码查询待生效费用表中对应费用是否费足
  283.     private StringBuffer updateFyzt() throws TxnException{
  284.         TxnContext context = new TxnContext();
  285.         StringBuffer buffer = new StringBuffer();//记录异常信息
  286.         BaseTable tableone = TableFactory.getInstance().getTableObject(this,"gg_fy_gdqxfyglb");
  287.         tableone.executeFunction("getMoneyBysqhAndfydm", context,"select-key""recordforsqhandfydm"); 
  288.         Recordset seta = context.getRecordset("recordforsqhandfydm");//得到对比费用集合
  289.         int size = seta.size();
  290.         for(int i = 0;i<size;i++){
  291.             try{
  292.             ConnectFactory.getInstance().begin();//开始一个事物
  293.             DataBus databus = seta.get(i);
  294.             DataBus tempda = (DataBus)databus.clone();//暂存修改费用状态条件
  295.             tempda.remove("shijiaoje");
  296.             tempda.remove("jiaofeije");
  297.             String shijiaoje = databus.getValue("shijiaoje");//规定要交金额
  298.             String sumje = databus.getValue("jiaofeije");//实际缴费金额
  299.             if(null==shijiaoje && shijiaoje.equals("")){
  300.                 shijiaoje = "0";
  301.             }
  302.             if(null==sumje && sumje.equals("")){
  303.                 sumje = "0";
  304.             }
  305.             Double gdje =  Double.parseDouble(shijiaoje);//规定金额
  306.             Double sjje =  Double.parseDouble(sumje);//实际金额
  307.             if(sjje>=gdje){
  308.             tempda.put("feiyongzt""1"); //费足
  309.             }else{
  310.             //将费用状态置为2
  311.             tempda.put("feiyongzt""2");//费不足
  312.             }           
  313.             //根据是否足额判断是否费足或不足
  314.             context.put("updatefeiyongztbysqhandfydm", tempda);
  315.             tableone.executeFunction("update feiyongzt bysqhandfydm", context,"updatefeiyongztbysqhandfydm""recordByupdate");             
  316.             ConnectFactory.getInstance().getConnection().commit();
  317.             }catch (TxnException e){
  318.                 buffer.append("第"+(i+1)+"条"+e.getMessage());
  319.                 buffer.append("/n");
  320.                 ConnectFactory.getInstance().rollback();
  321.             }       
  322.         }
  323.         return buffer;
  324.     }
  325.     //费用更正信息读取信息到收费处更正表
  326.     private StringBuffer actionForGzMes(Recordset gz) throws TxnException{
  327.         TxnContext context = new TxnContext();
  328.         StringBuffer buffer = new StringBuffer();//记录异常信息
  329.         int gzSize =  gz.size();
  330.         for(int j=0;j<gz.size();j++){
  331.             System.out.println(gz.get(j));
  332.         }
  333.         for(int i = 0;i<gzSize;i++){
  334.             BaseTable table = TableFactory.getInstance().getTableObject(this"sf_sfcgzb");
  335.             try{
  336.             ConnectFactory.getInstance().begin();//开始一个事务
  337.             //检查字段异常
  338.             checkGzMes(gz.get(i),i);
  339.             DataBus gzda = new DataBus();
  340.             gzda.put("feiyongid", gz.get(i).getValue("TC_ROWID"));//费用ID
  341.             gzda.put("shenqingh", gz.get(i).getValue("TC_APP_DOM"));//申请号
  342.             gzda.put("guowaisqh", gz.get(i).getValue("TC_APP_INT"));//国外申请号 
  343.             gzda.put("feiyongzldm", gz.get(i).getValue("TC_KM_CODE"));//费用代码
  344.             gzda.put("feiyongzlmc", gz.get(i).getValue("TC_KM_NAME"));//费用种类名称  
  345.             gzda.put("jiaofeije", gz.get(i).getValue("TC_JE_RMB"));//费用金额
  346.             gzda.put("jiaofeisj", changeDate(gz.get(i).getValue("TC_PMT_DAT")));//缴费时间
  347.             gzda.put("shoujuh", gz.get(i).getValue("TC_RCP"));//收据号
  348.             gzda.put("yuanshenqh", gz.get(i).getValue("TC_APP_DOM1"));//原申请号
  349.             gzda.put("yuanguowsqh", gz.get(i).getValue("TC_APP_INT1"));//原国外申请号
  350.             gzda.put("yuanfeiyzldm", gz.get(i).getValue("TC_KM_CODE1"));//原费用种类代码
  351.             gzda.put("yuanfeiyzlmc", gz.get(i).getValue("TC_KM_NAME1"));//原费用种类名称
  352.             gzda.put("yuanjfje", gz.get(i).getValue("TC_JE_RMB1"));//原缴费金额
  353.             gzda.put("yuanjiaofsj", changeDate(gz.get(i).getValue("TC_PMT_DAT1")));//原缴费时间
  354.             gzda.put("yuanshoujh", gz.get(i).getValue("TC_RCP1"));//原收据号
  355.             gzda.put("gengzhengm", gz.get(i).getValue("TC_MOD_TYPE"));//更正码
  356.             gzda.put("gengzhengzt""0");//更正状态
  357.             gzda.put("gengzhengtcrq", changeDate(gz.get(i).getValue("TC_MOD_DATE")));//提出更正日期
  358.             gzda.put("gengzhengsm", gz.get(i).getValue("TC_MOD_MEMO"));//更正说明
  359.             context.put("repgzrk", gzda);
  360.             table.executeFunction("insert one sf_sfcgzb",context, "repgzrk""record");         
  361.             ConnectFactory.getInstance().getConnection().commit();
  362.             }catch (FeiyongException e) {
  363.                 buffer.append(e.getMessage());
  364.                 buffer.append("/n");        
  365.             }catch (TxnException ef){
  366.                 buffer.append("第"+(i+1)+"条"+ef.getMessage());
  367.                 buffer.append("/n");
  368.                 ConnectFactory.getInstance().rollback();
  369.             }           
  370.         }
  371.         return buffer;
  372.     }
  373.     //费用更正信息读取后操作
  374.     private StringBuffer actionAfterGzMes() throws TxnException{
  375.         TxnContext context = new TxnContext();
  376.         StringBuffer buffer = new StringBuffer();//记录异常信息
  377.         context.getRecord("selectgz").setValue("gengzhengzt""0");
  378.         
  379.         BaseTable table = TableFactory.getInstance().getTableObject(this"sf_sfcgzb");//收费处更正表
  380.         BaseTable table1 = TableFactory.getInstance().getTableObject(this"gg_fy_ysxfyjlb");//已生效费用表
  381.         BaseTable table2 = TableFactory.getInstance().getTableObject(this"gg_fy_dsxfyjlb");//待生效费用表
  382.         BaseTable table3 = TableFactory.getInstance().getTableObject(this"sf_ysfyb");//原始费用表
  383.         BaseTable table4 = TableFactory.getInstance().getTableObject(this"gg_fy_tfclb");//退费处理表
  384.         
  385.         table.executeFunction("select sf_sfcgzb list",context, "selectgz""recordforwgz");
  386.         Recordset setwgz = context.getRecordset("recordforwgz");//得到未更正的全部记录
  387.         int wgzcount = setwgz.size();
  388.         for(int j = 0;j<wgzcount;j++){
  389.             try{
  390.             ConnectFactory.getInstance().begin();//开始一个事务
  391.             ///////////////////////////////////////////////////////////////////////////////
  392.             String uuid = setwgz.get(j).getValue("uuid");//得到主键
  393.             String feiyongid = setwgz.get(j).getValue("feiyongid");//费用ID
  394.             
  395.             String gengzhengm = setwgz.get(j).getValue("gengzhengm");//更正类型
  396.             /////////////比对字段///////////////////////
  397.             String yuanshenqh = setwgz.get(j).getValue("yuanshenqh");//原申请号
  398.             String yuanguowsqh = setwgz.get(j).getValue("yuanguowsqh");//原国外申请号
  399.             String yuanjiaofsj = setwgz.get(j).getValue("yuanjiaofsj");//原缴费时间
  400.             String yuanfeiyzldm = setwgz.get(j).getValue("yuanfeiyzldm");//原费用种类代码
  401.             String yuanfeiyzlmc = setwgz.get(j).getValue("yuanfeiyzlmc");//原费用种类名称
  402.             String yuanshoujh = setwgz.get(j).getValue("yuanshoujh");//原收据号
  403.             String yuanjfje = setwgz.get(j).getValue("yuanjfje");//原缴费金额
  404.             ///////////////修改字段/////////////////
  405.             String shenqingh = setwgz.get(j).getValue("shenqingh");//申请号
  406.             String guowaisqh = setwgz.get(j).getValue("guowaisqh");//国外申请号
  407.             String jiaofeisj = setwgz.get(j).getValue("jiaofeisj");//缴费时间
  408.             String feiyongzldm = setwgz.get(j).getValue("feiyongzldm");//费用种类代码
  409.             String feiyongzlmc = setwgz.get(j).getValue("feiyongzlmc");//费用种类名称
  410.             String shoujuh = setwgz.get(j).getValue("shoujuh");//收据号
  411.             String jiaofeije = setwgz.get(j).getValue("jiaofeije");//缴费金额
  412.             /////////////////////////////////////////
  413.             if(null==uuid || uuid.equals("") || null==feiyongid || feiyongid.equals("")){
  414.                 throw new FeiyongException("041002","没有要更正的信息");
  415.             }else{
  416.                 //1.查询费用表
  417.                 context.getRecord("selectbyfeiyongid").setValue("feiyongid", feiyongid);
  418.                 table1.executeFunction("get items for feiyong gengzheng",context, "selectbyfeiyongid""recordgetysxju");//已生效
  419.                 table2.executeFunction("get items for feiyong gengzheng",context, "selectbyfeiyongid""recordgetdsxju");//待生效
  420.                 table4.executeFunction("getExiteRecord",context, "selectbyfeiyongid""recordgettf");//退费处理
  421.                 
  422.                 Recordset ysxset = context.getRecordset("recordgetysxju");//得到已生效费用记录
  423.                 Recordset dsxset = context.getRecordset("recordgetdsxju");//得到待生效费用记录
  424.                 Recordset tfset = context.getRecordset("recordgettf");//得到退费处理记录
  425.                 int acount = ysxset.size();
  426.                 int bcount = dsxset.size();
  427.                 int ccount = tfset.size();
  428.                 char sjh = 0;
  429.                 char sqh  = 0;
  430.                 char gwsqh  = 0;
  431.                 char jfrq  = 0;
  432.                 char fydm  = 0;
  433.                 char fydmmc  = 0;
  434.                 char fyje  = 0;
  435.                 //*********************************************************//
  436.                 if(acount==0 && bcount==0 && ccount==0){ //如果没有纪录
  437.                     throw new FeiyongException("041002","费用id为:"+feiyongid+"的费用信息为空");
  438.                 }
  439.                 if(acount==0 && ccount==0 && bcount!=0){//如果只有待生效有记录,删除记录,同时将原始费用表中对应费用ID记录插入该表 修改两张表和该更正表状态
  440.                     context.getRecord("deletedsxbyid").setValue("feiyongid", feiyongid);
  441.                     table2.executeFunction("delete record by feiyongid",context, "deletedsxbyid""recorddeletebyid");//待生效
  442.                     table3.executeFunction("select record list",context, "deletedsxbyid""recordforysjl");//查询得到原始记录
  443.                     Recordset setysfy = context.getRecordset("recordforysjl");//得到原始记录信息(唯一一条)
  444.                     if(setysfy.size()==0){
  445.                         throw new FeiyongException("041002","费用id为:"+feiyongid+"记录对应原始费用为空");
  446.                         
  447.                     }else{
  448.                         DataBus tempdatabusa = setysfy.get(0);
  449.                         //比对修改信息
  450.                         if(!(tempdatabusa.getValue("shenqingh").equals(yuanshenqh)) 
  451.                             && !(tempdatabusa.getValue("guowaisqh").equals(yuanguowsqh))
  452.                             && !(tempdatabusa.getValue("jiaofeisj").equals(yuanjiaofsj))
  453.                             && !(tempdatabusa.getValue("feiyongzldm").equals(yuanfeiyzldm))
  454.                             && !(tempdatabusa.getValue("feiyongzlmc").equals(yuanfeiyzlmc))
  455.                             && !(tempdatabusa.getValue("shoujuh").equals(yuanshoujh))
  456.                             && !(tempdatabusa.getValue("jiaofeije").equals(yuanjfje))
  457.                                 ){
  458.                             throw new FeiyongException("041003","费用id为:"+feiyongid+"更正信息中原始信息与原始费用表中信息不对应");
  459.                         }else{//更正操作
  460.                             //1.修改原始费用表
  461.                             context.getRecord("updatetj").setValue("feiyongid", feiyongid);
  462.                              sqh  = gengzhengm.charAt(0);
  463.                              gwsqh  = gengzhengm.charAt(1);
  464.                              jfrq  = gengzhengm.charAt(2);
  465.                              fydm  = gengzhengm.charAt(3);
  466.                              fydmmc  = gengzhengm.charAt(4);
  467.                             sjh  = gengzhengm.charAt(5);
  468.                              fyje  = gengzhengm.charAt(6);
  469.                             
  470.                             if(sqh=='1'){
  471.                                 context.getRecord("updatetj").setValue("shenqingh", shenqingh);
  472.                             }
  473.                             if(gwsqh=='1'){
  474.                                 context.getRecord("updatetj").setValue("guowaisqh", guowaisqh);
  475.                             }
  476.                             if(jfrq=='1'){
  477.                                 context.getRecord("updatetj").setValue("jiaofeisj", jiaofeisj);
  478.                             }
  479.                             if(fydm=='1'){
  480.                                 context.getRecord("updatetj").setValue("feiyongzldm", feiyongzldm);
  481.                             }
  482.                             if(fydmmc=='1'){
  483.                                 context.getRecord("updatetj").setValue("feiyongzlmc", feiyongzlmc);
  484.                             }
  485.                             if(sjh=='1'){
  486.                                 context.getRecord("updatetj").setValue("shoujuh", shoujuh);
  487.                             }
  488.                             if(fyje=='1'){
  489.                                 context.getRecord("updatetj").setValue("jiaofeije", jiaofeije);
  490.                             }       
  491.                         table3.executeFunction("updateForGz",context, "updatetj""recordupdatays");//按更正信息修改原始费用信息
  492.                         context.remove("updatetj");
  493.                         context.getRecord("selectbyfeiyongids").setValue("feiyongid", feiyongid);
  494.                         table3.executeFunction("select record list",context, "selectbyfeiyongids""recordbyxiugaih");//查询得到修改后原始记录
  495.                         //插入待生效费用表
  496.                         DataBus xiugaidb = context.getRecord("recordbyxiugaih");            
  497.                         xiugaidb.remove("guowaisqh");
  498.                         xiugaidb.remove("xiaofeirxm");
  499.                         xiugaidb.remove("xiaofeirdz");
  500.                         xiugaidb.remove("xiaofeiryb");
  501.                         xiugaidb.remove("feiyongbj");
  502.                         xiugaidb.remove("shaomiaozt");
  503.                         xiugaidb.setValue("xitongjzsj"this.getTime());
  504.                         xiugaidb.setValue("yanshijfje", xiugaidb.getValue("jiaofeije"));
  505.                         xiugaidb.setValue("feiyongzt""1");//暂定为1
  506.                         xiugaidb.setValue("gzid", uuid);//更正id
  507.                         context.put("insertRecord", xiugaidb); 
  508.                         table2.executeFunction("insert one gg_fy_dsxfyjlb", context,"insertRecord""record");
  509.                         context.remove("insertRecord");
  510.                         //修改更正信息
  511.                         context.getRecord("xiugaigzzt").setValue("uuid", uuid);//主键
  512.                         context.getRecord("xiugaigzzt").setValue("gengzhengzt""1");//更正状态改为已更正
  513.                         context.getRecord("xiugaigzzt").setValue("gengzhengzxsj"this.getTime());//更正执行时间
  514.                         table.executeFunction("update one sf_sfcgzb",context, "xiugaigzzt""record");  
  515.                         context.remove("xiugaigzzt");
  516.                         }                       
  517.                     }                                                       
  518.                 }
  519.             
  520.                 if(acount!=0){
  521.                     //将费用ID匹配的已生效费用记录的费用状态改为待释放(如果需要修改收据号该收据号)
  522.                     context.getRecord("updateysxfyzt").setValue("feiyongid", feiyongid);//修改条件:费用ID
  523.                     if(sjh=='1'&& sqh=='0'&& gwsqh=='0'&& jfrq=='0'&& fydm=='0'&& fydmmc=='0'&& fyje=='0'){
  524.                         context.getRecord("updateysxfyzt").setValue("shoujuh", shoujuh);
  525.                         table1.executeFunction("update sjh by feiyongid",context, "updateysxfyzt""recordupdateysxfyzt");
  526.                         context.getRecord("updatetj").setValue("shoujuh", shoujuh);
  527.                         table3.executeFunction("updateForGz",context, "updatetj""recordupdatays");//按更正信息修改原始费用信息
  528.                          context.getRecord("xiugaigzzt").setValue("uuid", uuid);//主键
  529.                         context.getRecord("xiugaigzzt").setValue("gengzhengzt""1");//更正状态改为已更正
  530.                         context.getRecord("xiugaigzzt").setValue("gengzhengzxsj"this.getTime());//更正执行时间
  531.                         table.executeFunction("update one sf_sfcgzb",context, "xiugaigzzt""record");  
  532.                     }
  533.                         
  534.                         context.getRecord("updateysxfyzt").setValue("feiyongzt""1");//修改记录:费用状态
  535.                         table1.executeFunction("update feiyongzt by feiyongid",context, "updateysxfyzt""recordupdateysxfyzt");  
  536.                         context.remove("updateysxfyzt");
  537.                 }
  538.                 if(ccount!=0){
  539.                     if(sjh=='1'&& sqh=='0'&& gwsqh=='0'&& jfrq=='0'&& fydm=='0'&& fydmmc=='0'&& fyje=='0'){
  540.                         context.getRecord("updatesjh").setValue("feiyongid", feiyongid);//修改条件:费用ID
  541.                         context.getRecord("updatesjh").setValue("shoujuh", shoujuh);
  542.                         table4.executeFunction("update sjh by feiyongid",context, "updatesjh""recordupdatesjh");
  543.                         context.remove("updatesjh");
  544.                     }
  545.                     continue;
  546.                 }
  547.                 //****************************************************************//            
  548.             }           
  549.             //////////////////////////////////////////////////////////////////////////////
  550.             ConnectFactory.getInstance().getConnection().commit();
  551.             }catch (FeiyongException e) {
  552.                 buffer.append(e.getMessage());
  553.                 buffer.append("/n");
  554.                 ConnectFactory.getInstance().rollback();            
  555.             }catch (TxnException ef){
  556.                 buffer.append("第"+(j+1)+"条"+ef.getMessage());
  557.                 buffer.append("/n");
  558.                 ConnectFactory.getInstance().rollback();
  559.             }       
  560.         }
  561.         return buffer;
  562.     }
  563.     //费用代码费用标准减缓比例信息录入
  564.     private StringBuffer actionForFjblMes(Recordset fjbl) throws TxnException{
  565.         TxnContext context = new TxnContext();
  566.         StringBuffer buffer = new StringBuffer();//记录异常信息
  567.         BaseTable table = TableFactory.getInstance().getTableObject(this"gg_fy_fycspzb");
  568.         int fjblsize = fjbl.size();
  569.         for(int i=0;i<fjblsize;i++){
  570.             /////////////////////////////////////
  571.             try{
  572.             ConnectFactory.getInstance().begin();//开始一个事务
  573.             //异常处理
  574.             checkFjblMes(fjbl.get(i),i);
  575.             //根据费用种类代码查询费用简称
  576.             context.getRecord("selectfjbl").setValue("feiyongzldm", fjbl.get(i).getValue("TC_KM_CODE"));//费用种类代码
  577.             table.executeFunction("getFeiyjcByFyzldm",context, "selectfjbl""recordfjbl");
  578.             String feiyongjc = context.getRecord("recordfjbl").getValue("feiyongjc");//费用简称
  579.             DataBus fjblda = new DataBus();
  580.             fjblda.put("feiyongzldm", fjbl.get(i).getValue("TC_KM_CODE"));//费用种类代码
  581.             fjblda.put("feiyongzlmc", fjbl.get(i).getValue("TC_KM_NAME"));//费用种类名称
  582.             fjblda.put("jiaofeije", fjbl.get(i).getValue("TC_KM_JE_RMB"));//费用金额
  583.             fjblda.put("feiyongjc", feiyongjc);//费用金额
  584.             fjblda.put("feiyongjhbl1", fjbl.get(i).getValue("TC_DERATE1"));//减缓比例1
  585.             fjblda.put("feiyongjhbl2", fjbl.get(i).getValue("TC_DERATE2"));//减缓比例2
  586.             fjblda.put("feiyongjhbl3", fjbl.get(i).getValue("TC_DERATE3"));//减缓比例3
  587.             fjblda.put("zhixingsj", changeDate(fjbl.get(i).getValue("TC_KM_DATE")));//执行日期 
  588.             context.put("repfjbl", fjblda);         
  589.             table.executeFunction("insert one gg_fy_fycspzb",context, "repfjbl""record");
  590.             ConnectFactory.getInstance().getConnection().commit();  
  591.             }catch (FeiyongException e) {
  592.                 buffer.append(e.getMessage());
  593.                 buffer.append("/n");        
  594.             }catch (TxnException ef){
  595.                 buffer.append("第"+(i+1)+"条"+ef.getMessage());
  596.                 buffer.append("/n");
  597.                 ConnectFactory.getInstance().rollback();
  598.             }       
  599.             ///////////////////////////////////////
  600.         }
  601.         return buffer;
  602.     }
  603.     //退费处理
  604.     private StringBuffer actionForTfMes(Recordset tf) throws TxnException{
  605.         TxnContext context = new TxnContext();
  606.         StringBuffer buffer = new StringBuffer();//记录异常信息
  607.         int tfSize = tf.size();
  608.         BaseTable tablea = TableFactory.getInstance().getTableObject(this"gg_fy_tfclb");//退费处理表
  609.         BaseTable tableb =  TableFactory.getInstance().getTableObject( this"gg_fy_dsxfyjlb");//待生效记录表
  610.         BaseTable tablec =  TableFactory.getInstance().getTableObject( this"gg_fy_chtfjlb");//撤回退费记录表
  611.         for(int i = 0;i<tfSize;i++){
  612.             //////////////////////////////////////////////////////
  613.             try{
  614.                 ConnectFactory.getInstance().begin();//开始一个事务
  615.                 checkTfMes(tf.get(i),i);//字段异常处理
  616.                 String tuifeiid = tf.get(i).getValue("TC_RFD_ID");//退费ID
  617.                 String tuifeizt = tf.get(i).getValue("TC_RFD_STAT");//退费状态
  618.                 String shenqingh = tf.get(i).getValue("TC_APP_DOM");//申请号
  619.                 String chulisj = changeDate(tf.get(i).getValue("TC_RFD_DATE"));//实际退费时间
  620.                 //根据费用id查询退费处理表中数据
  621.                 context.getRecord("selecttf").setValue("tuifeilsh", tuifeiid);//退费ID
  622.                 tablea.executeFunction("getExiteRecord",context, "selecttf""recordtfa");
  623.                 String feiyongid = context.getRecord("recordtfa").getValue("feiyongid");//费用ID 
  624.                 String tuifeibj = context.getRecord("recordtfa").getValue("tuifeibj");//退费标记
  625.                 String tuifeije = context.getRecord("recordtfa").getValue("tuifeije");//退费金额
  626.                 //////////////////////待生效费用表字段/////////////////////////////////////
  627.                 //用于增加
  628.                 context.getRecord("insertdsx").setValue("shenqingh",context.getRecord("recordtfa").getValue("shenqingh"));//申请号
  629.                 context.getRecord("insertdsx").setValue("feiyongzlmc",context.getRecord("recordtfa").getValue("feiyongzlmc"));//费用种类名称
  630.                 context.getRecord("insertdsx").setValue("feiyongzldm",context.getRecord("recordtfa").getValue("feiyongzldm"));//费用种类代码
  631.                 context.getRecord("insertdsx").setValue("jiaofeije",context.getRecord("recordtfa").getValue("tuifeije"));//缴费金额
  632.                 context.getRecord("insertdsx").setValue("shoujuh",context.getRecord("recordtfa").getValue("shoujuh"));//收据号
  633.                 context.getRecord("insertdsx").setValue("feiyongid",context.getRecord("recordtfa").getValue("feiyongid"));//费用ID                
  634.                 context.getRecord("insertdsx").setValue("yanshijfje",getParentInfo(feiyongid).getValue("jiaofeije"));//原始缴费金额
  635.                 context.getRecord("insertdsx").setValue("jiaofeisj",getParentInfo(feiyongid).getValue("jiaofeisj"));//原始缴费时间
  636.                 context.getRecord("insertdsx").setValue("xitongjzsj",new DateUtil().currentDate());//系统时间
  637.                 context.getRecord("insertdsx").setValue("feiyongzt","");//费用状态 暂定88
  638.                 context.getRecord("insertdsx").setValue("gzid","");//更正ID 暂定88
  639.                 ////////////////////////////////////////////////////////////////////////////
  640.                 if(null==feiyongid || feiyongid.equals("")){
  641.                     throw new FeiyongException("041002","第"+(i+1)+"条的记录没找到");
  642.                 }else if((tuifeizt.equals("1") && tuifeibj.equals("0")) ||(tuifeizt.equals("2") && tuifeibj.equals("2"))){
  643.                     throw new FeiyongException("041003","第"+(i+1)+"条的退费类型不匹配");
  644.                 }else {
  645.                     //用于修改退费处理表
  646.                     context.getRecord("updatetf").setValue("tuifeilsh", tuifeiid);//退费ID
  647.                     context.getRecord("updatetf").setValue("shijitfrq", chulisj);//实际退费日期
  648.                     context.getRecord("updatetf").setValue("tuifeibj""1");//退费标记
  649.                     //用于删除
  650.                     context.getRecord("deletetf").setValue("tuifeilsh", tuifeiid);//退费ID
  651.                     //1.当退费标记为0:-申请退费  (1)用友返回意见为0:-成功退费  (2)用友返回意见为2:-不予退款 
  652.                     if(tuifeibj.equals("0") && tuifeizt.equals("0")){//退费成功  
  653.                         //操作:修改实际退费日期  修改退费标记为1,费用已退
  654.                         tablea.executeFunction("update one gg_fy_tfclb with sjtfrqandtfbj",context, "updatetf""record");                                              
  655.                     }
  656.                     if(tuifeibj.equals("0") && tuifeizt.equals("2")){//不予退款
  657.                         //操作:将退费处理表中记录插入待生效费用表,删除退费处理表中此记录
  658.                         tableb.executeFunction( "insert one gg_fy_dsxfyjlb", context, "insertdsx""record");                       
  659.                         tablea.executeFunction( "delete one gg_fy_tfclb", context, "deletetf""record");
  660.                     }
  661.                     //2.当提出撤回退费2:-撤回退费 (1)用友反馈意见为0:-退费成功  (2)用友反馈意见为1:-已取消退费
  662.                     if(tuifeibj.equals("2") && tuifeizt.equals("0")){
  663.                         //操作:修改实际退费日期  修改退费标记为1,费用已退  修改撤回退费历史表
  664.                         tablea.executeFunction("update one gg_fy_tfclb with sjtfrqandtfbj",context, "updatetf""record");
  665.                         context.getRecord("updatechtf").setValue("tuifeilsh", tuifeiid);//退费ID
  666.                         context.getRecord("updatechtf").setValue("chehuirq""");//实际退费日期
  667.                         context.getRecord("updatechtf").setValue("chehuizt""2");//无法撤回
  668.                         tablec.executeFunction("update one gg_fy_chtfjlb",context, "updatechtf""record");                     
  669.                     }                   
  670.                     if(tuifeibj.equals("2") && tuifeizt.equals("1")){//已经取消退费 即 同意撤回
  671.                         //操作:将退费处理表中记录插入待生效费用表,删除退费处理表中此记录 修改撤回退费历史表
  672.                         tableb.executeFunction( "insert one gg_fy_dsxfyjlb", context, "insertdsx""record");
  673.                         context.getRecord("updatechtf").setValue("tuifeilsh", tuifeiid);//退费ID
  674.                         context.getRecord("updatechtf").setValue("chehuirq", chulisj);//实际退费日期
  675.                         context.getRecord("updatechtf").setValue("chehuizt""0");//已经撤回
  676.                         tablec.executeFunction("update one gg_fy_chtfjlb",context, "updatechtf""record"); 
  677.                         tablea.executeFunction( "delete one gg_fy_tfclb", context, "deletetf""record");                                               
  678.                     }   
  679.                 }
  680.                 ConnectFactory.getInstance().getConnection().commit();
  681.             }catch (FeiyongException e) {
  682.                 buffer.append(e.getMessage());
  683.                 buffer.append("/n");
  684.                 ConnectFactory.getInstance().rollback();            
  685.             }catch (TxnException ef){
  686.                 buffer.append("第"+(i+1)+"条"+ef.getMessage());
  687.                 buffer.append("/n");
  688.                 ConnectFactory.getInstance().rollback();
  689.             }       
  690.             //////////////////////////////////////////////////////
  691.         }   
  692.         return buffer;
  693.     }
  694.     
  695.     //根据费用id得到原始费用表中的相关项目(方法类)
  696.     private DataBus getParentInfo(String feiyongid) throws TxnException{
  697.         TxnContext context = new TxnContext();
  698.         context.getRecord("rep").setValue("feiyongid",feiyongid);
  699.         BaseTable table = TableFactory.getInstance().getTableObject( this"gg_fy_dsxfyjlb");
  700.         table.executeFunction( "getDetailedRecord", context, "rep""recordone");       
  701.         DataBus db = context.getRecord("recordone");
  702.         return db;      
  703.     }
  704. //转换时间格式 2008-01-11--------20080111
  705.     private String changeDate(String date){
  706.         if(null==date||"".equals(date.trim())){
  707.             return date;
  708.         }
  709.         else{   
  710.         String newDate =date.replaceAll("-""");
  711.         return newDate;
  712.         }
  713.     }
  714.         
  715. //取当前时间
  716.     private String getTime(){
  717.         Date date = new Date();
  718.         SimpleDateFormat sim = new SimpleDateFormat("yyyyMMdd");
  719.         return sim.format(date);
  720.     }
  721.     
  722.     //文件校验字段异常处理
  723.     private void checkIndexMes(DataBus db,int num) throws FeiyongException{
  724.         String wenjianm = db.getValue("FILENAME");//文件名
  725.         String jiluts  = db.getValue("RECORDCOUNT");//记录条数
  726.         String feiyongze = db.getValue("CHARGETOTAL");//费用总额
  727.         String jiluscrq  = db.getValue("FILEDATE");//记录生成日期
  728.         String wenjiandx  = db.getValue("FILESIZE");//文件大小
  729.         String wenjianxym  =  db.getValue("FILEMD5");//文件校验码
  730.         String wenjiansm  =  db.getValue("FILEMEMO");//文件说明 
  731.         
  732.         StringBuffer error = new StringBuffer();
  733.         if(null==wenjianm || wenjianm.equals("")){
  734.             error.append("文件名为空");
  735.         }
  736.         if(null==jiluts || jiluts.equals("")){
  737.             error.append("记录条数为空");
  738.         }
  739.         if(null!=feiyongze || !(feiyongze.equals(""))){
  740.             double sumMoney = 0;
  741.             try{
  742.             sumMoney = Double.parseDouble(feiyongze);
  743.             }catch (NumberFormatException e) {
  744.                 error.append("费用金额不符合规定");  
  745.             }
  746.             if(sumMoney<0){
  747.                 error.append("费用金额小于0");    
  748.             }
  749.             
  750.         }
  751.         if(null==jiluscrq || jiluscrq.equals("")){
  752.             error.append("记录生成日期为空");
  753.         }
  754.         if(null==wenjiandx || wenjiandx.equals("")){
  755.             error.append("文件大小为空");
  756.         }
  757.         if(null==wenjianxym || wenjianxym.equals("")){
  758.             error.append("文件校验码为空");
  759.         }
  760.         if(null==wenjiansm || wenjiansm.equals("")){
  761.             error.append("文件说明为空");
  762.         }
  763.         if(!(((error.toString()).trim()).equals(""))){
  764.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  765.         }       
  766.     }
  767.     //处理中异常处理
  768.     private void checkClzMes(DataBus db,int num) throws FeiyongException{
  769.         String data = db.getValue("TC_PMT_DAT");//缴费时间
  770.         String feiyongid  = db.getValue("TC_ROWID");//费用ID
  771.         String shenqingh = db.getValue("TC_APP_DOM");//申请号
  772.         String guowaisqh  = db.getValue("TC_APP_INT");//国外申请号
  773.         String feiyongzldm  = db.getValue("TC_KM_CODE");//费用种类代码
  774.         String feiyongzlmc  =  db.getValue("TC_KM_NAME");//费用种类名称
  775.         String jiaofeije  =  db.getValue("TC_JE_RMB");//缴费金额            
  776.         String feiyongbj  =db.getValue("TC_STAT");//费用标记
  777.         
  778.         StringBuffer error = new StringBuffer();
  779.         if(null==feiyongid || feiyongid.equals("")){
  780.             error.append("费用ID为空");
  781.         }
  782.         if(null==data || data.equals("")){
  783.             error.append("缴费时间为空");
  784.         }
  785.         if(null==jiaofeije || jiaofeije.equals("")){
  786.             error.append("缴费金额为空");             
  787.         }else{
  788.             double sumMoney = 0;
  789.             try{
  790.             sumMoney = Double.parseDouble(jiaofeije);
  791.             }catch (NumberFormatException e) {
  792.                 error.append("费用金额不符合规定");  
  793.             }
  794.             if(sumMoney<0){
  795.                 error.append("费用金额小于0");    
  796.             }
  797.         }
  798.         if(null==feiyongzldm || feiyongzldm.equals("")){
  799.             error.append("费用种类代码为空");
  800.         }
  801.         if(null==feiyongzlmc || feiyongzlmc.equals("")){
  802.             error.append("费用种类名称为空");
  803.         }
  804.         if(null==feiyongbj || feiyongbj.equals("")){
  805.             error.append("费用标记为空");
  806.         }
  807.         if(((null==shenqingh || shenqingh.equals("")) && (null==guowaisqh || guowaisqh.equals("")))){
  808.             error.append("申请号和国外申请号不能同时为空");
  809.         }
  810.         if(!(((error.toString()).trim()).equals(""))){
  811.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  812.         }       
  813.     }
  814.     
  815.     //已收费异常处理
  816.     private void checkYsfMes(DataBus db,int num) throws FeiyongException{
  817.         String jiaofeisj = db.getValue("TC_PMT_DAT");//缴费时间1        
  818.         String feiyongid  = db.getValue("TC_ROWID");//费用ID1
  819.         String shenqingh = db.getValue("TC_APP_DOM");//申请号
  820.         String guowaisqh  = db.getValue("TC_APP_INT");//国外申请号       
  821.         String feiyongzldm  = db.getValue("TC_KM_CODE");//费用种类代码1
  822.         String feiyongzlmc  =  db.getValue("TC_KM_NAME");//费用种类名称1
  823.         String jiaofeije  =  db.getValue("TC_JE_RMB");//缴费金额    1
  824.         String shoujuh  =  db.getValue("TC_RCP");//收据号
  825.         String shoujurq =  db.getValue("TC_RCP_DAT");//收据日期
  826.         String jiaofeirxm =  db.getValue("TC_PMT");//缴费人姓名
  827.         String feiyongbj  =db.getValue("TC_STAT");//费用标记1
  828.         
  829.         
  830.         StringBuffer error = new StringBuffer();
  831.         if(null==feiyongid || feiyongid.equals("")){
  832.             error.append("费用ID为空");
  833.         }
  834.         if(null==jiaofeisj || jiaofeisj.equals("")){
  835.             error.append("缴费时间为空");
  836.         }
  837.         if(null==jiaofeije || jiaofeije.equals("")){
  838.             error.append("缴费金额为空");             
  839.         }else{
  840.             double sumMoney = 0;
  841.             try{
  842.             sumMoney = Double.parseDouble(jiaofeije);
  843.             }catch (NumberFormatException e) {
  844.                 error.append("费用金额不符合规定");  
  845.             }
  846.             if(sumMoney<0){
  847.                 error.append("费用金额小于0");    
  848.             }
  849.         }
  850.         if(null==feiyongzldm || feiyongzldm.equals("")){
  851.             error.append("费用种类代码为空");
  852.         }
  853.         if(null==feiyongzlmc || feiyongzlmc.equals("")){
  854.             error.append("费用种类名称为空");
  855.         }
  856.         if(null==feiyongbj || feiyongbj.equals("")){
  857.             error.append("费用标记为空");
  858.         }
  859.         if(null==shoujuh || shoujuh.equals("")){
  860.             error.append("收据号为空");
  861.         }
  862.         if(null==shoujurq || shoujurq.equals("")){
  863.             error.append("收据日期为空");
  864.         }
  865.         if(null==jiaofeirxm || jiaofeirxm.equals("")){
  866.             error.append("缴费人姓名为空");
  867.         }
  868.         if(((null==shenqingh || shenqingh.equals("")) && (null==guowaisqh || guowaisqh.equals("")))){
  869.             error.append("申请号和国外申请号不能同时为空");
  870.         }
  871.         if(!(((error.toString()).trim()).equals(""))){
  872.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  873.         }                   
  874.     }
  875.         
  876.     //费用更正异常处理
  877.     private void checkGzMes(DataBus db,int num) throws FeiyongException{
  878.         String feiyongid  = db.getValue("TC_ROWID");//费用ID1
  879.         String yshenqingh = db.getValue("TC_APP_DOM1");//原申请号
  880.         String yguowaisqh  = db.getValue("TC_APP_INT1");//原国外申请号        
  881.         String yjiaofeirq  = db.getValue("TC_PMT_DAT1");//缴费日期(原)
  882.         String yfeiyongdm  =  db.getValue("TC_KM_CODE1");//费用代码(原)
  883.         String yfeiyongmc  =  db.getValue("TC_KM_NAME1");//费用代码名称(原) 
  884.         String yshoujuh  =  db.getValue("TC_RCP1");//收据号(原)
  885.         String yfeiyongje =  db.getValue("TC_JE_RMB1");//费用金额(原)        
  886.         String shenqingh = db.getValue("TC_APP_DOM");//申请号
  887.         String guowaisqh  = db.getValue("TC_APP_INT");//国外申请号       
  888.         String jiaofeirq  = db.getValue("TC_PMT_DAT");//缴费日期
  889.         String feiyongdm  =  db.getValue("TC_KM_CODE");//费用代码
  890.         String feiyongmc  =  db.getValue("TC_KM_NAME");//费用代码名称 
  891.         String shoujuh  =  db.getValue("TC_RCP");//收据号
  892.         String feiyongje =  db.getValue("TC_JE_RMB");//费用金额     
  893.         String xiugailx =  db.getValue("TC_MOD_TYPE");//修改类型 
  894.         String gengzhengtcrq  =db.getValue("TC_MOD_DATE");//更正提出日期
  895.         //String gengzhengsm  =db.getValue("TC_MOD_MEMO");//更正说明 
  896.         
  897.         
  898.         StringBuffer error = new StringBuffer();
  899.         if(null==feiyongid || feiyongid.equals("")){
  900.             error.append("费用ID为空");
  901.         }
  902.         if(null==yjiaofeirq || yjiaofeirq.equals("")){
  903.             error.append("原缴费日期为空");
  904.         }
  905.         if(null==yfeiyongdm || yfeiyongdm.equals("")){
  906.             error.append("原费用种类代码为空");
  907.         }
  908.         if(null==yfeiyongmc || yfeiyongmc.equals("")){
  909.             error.append("原费用种类名称为空");
  910.         }
  911.         if(null==yshoujuh || yshoujuh.equals("")){
  912.             error.append("原收据号为空");
  913.         }
  914.         if(null==yfeiyongje || yfeiyongje.equals("")){
  915.             error.append("原费用金额为空");
  916.         }else{
  917.             double sumMoney = 0;
  918.             try{
  919.             sumMoney = Double.parseDouble(yfeiyongje);
  920.             }catch (NumberFormatException e) {
  921.                 error.append("费用金额不符合规定");  
  922.             }
  923.             if(sumMoney<0){
  924.                 error.append("费用金额小于0");    
  925.             }
  926.         }
  927.         if(null==xiugailx || xiugailx.equals("")){
  928.             error.append("修改类型为空");
  929.         }
  930.         if(null==gengzhengtcrq || gengzhengtcrq.equals("")){
  931.             error.append("更正提出日期为空");
  932.         }
  933.         if(null==gengzhengtcrq || gengzhengtcrq.equals("")){
  934.             error.append("更正提出日期为空");
  935.         }
  936.         if(((null==yshenqingh || yshenqingh.equals("")) && (null==yguowaisqh || yguowaisqh.equals("")))){
  937.             error.append("申请号和国外申请号不能同时为空");
  938.         }
  939.         if(!(((error.toString()).trim()).equals(""))){
  940.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  941.         }                   
  942.         
  943.             //费用更正的更正码是7位(申请号、国外申请号、缴费日期、费用代码、费用代码名称、收据号、费用金额)
  944.             char sqh  = xiugailx.charAt(0);
  945.             char gwsqh  = xiugailx.charAt(1);
  946.             char jfrq  = xiugailx.charAt(2);
  947.             char fydm  = xiugailx.charAt(3);
  948.             char fydmmc  = xiugailx.charAt(4);
  949.             char sjh  = xiugailx.charAt(5);
  950.             char fyje  = xiugailx.charAt(6);
  951.             
  952.             if(sqh=='1' && (null==shenqingh || shenqingh.equals(""))){
  953.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  954.             }
  955.             if(gwsqh=='1' && (null==guowaisqh || guowaisqh.equals(""))){
  956.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  957.             }
  958.             if(jfrq=='1' && (null==jiaofeirq || jiaofeirq.equals(""))){
  959.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  960.             }
  961.             if(fydm=='1' && (null==feiyongdm || feiyongdm.equals(""))){
  962.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  963.             }
  964.             if(fydmmc=='1' && (null==feiyongmc || feiyongmc.equals(""))){
  965.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  966.             }
  967.             if(sjh=='1' && (null==shoujuh || shoujuh.equals(""))){
  968.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  969.             }
  970.             if(fyje=='1' && (null==feiyongje || feiyongje.equals(""))){
  971.                 throw new FeiyongException("041001","第"+(num+1)+"更正码不对应");
  972.             }   
  973.     }
  974.     //费用代码费用标准减缓比例信息录入异常处理
  975.     private void checkFjblMes(DataBus db,int num) throws FeiyongException{
  976.         String feiyongzldm = db.getValue("TC_KM_CODE");//费用种类代码
  977.         String feiyongzlmc = db.getValue("TC_KM_NAME");//费用种类名称
  978.         String jiaofeije = db.getValue("TC_KM_JE_RMB");//缴费金额
  979.         String feiyongjhbl1 = db.getValue("TC_DERATE1");//费减比例1
  980.         String feiyongjhbl2 = db.getValue("TC_DERATE2");//费减比例2
  981.         String feiyongjhbl3 = db.getValue("TC_DERATE3");//费减比例3
  982.         String zhijiansj = db.getValue("TC_KM_DATE");//执行时间
  983.                 
  984.         StringBuffer error = new StringBuffer();
  985.         if(null==feiyongjhbl1 || feiyongjhbl1.equals("")){
  986.             error.append("费减比例1为空");
  987.         }
  988.         if(null==feiyongjhbl2 || feiyongjhbl2.equals("")){
  989.             error.append("费减比例2为空");
  990.         }
  991.         if(null==jiaofeije || jiaofeije.equals("")){
  992.             error.append("缴费金额为空");             
  993.         }else{
  994.             double sumMoney = 0;
  995.             try{
  996.             sumMoney = Double.parseDouble(jiaofeije);
  997.             }catch (NumberFormatException e) {
  998.                 error.append("费用金额不符合规定");  
  999.             }
  1000.             if(sumMoney<0){
  1001.                 error.append("费用金额小于0");    
  1002.             }
  1003.         }
  1004.         if(null==feiyongzldm || feiyongzldm.equals("")){
  1005.             error.append("费用种类代码为空");
  1006.         }
  1007.         if(null==feiyongzlmc || feiyongzlmc.equals("")){
  1008.             error.append("费用种类名称为空");
  1009.         }
  1010.         if(null==feiyongjhbl3 || feiyongjhbl3.equals("")){
  1011.             error.append("费减比例3为空");
  1012.         }
  1013.         if(null==zhijiansj || zhijiansj.equals("")){
  1014.             error.append("执行时间为空");
  1015.         }
  1016.         if(!(((error.toString()).trim()).equals(""))){
  1017.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  1018.         }                                   
  1019.     }
  1020.     //退费字段异常处理
  1021.     private void checkTfMes(DataBus db,int num)throws FeiyongException{
  1022.         String shenqingh = db.getValue("TC_APP_DOM");//申请号
  1023.         String chulisj = db.getValue("TC_RFD_DATE");//处理时间
  1024.         String tuifeiid = db.getValue("TC_RFD_ID");//退费ID  
  1025.         String tuifeizt = db.getValue("TC_RFD_STAT");//退款状态
  1026.         
  1027.         StringBuffer error = new StringBuffer();
  1028.         if(null==shenqingh || shenqingh.equals("")){
  1029.             error.append("申请号为空");
  1030.         }
  1031.         if(null==chulisj || chulisj.equals("")){
  1032.             error.append("处理时间为空");
  1033.         }
  1034.         if(null==tuifeiid || tuifeiid.equals("")){
  1035.             error.append("退费ID为空");
  1036.         }
  1037.         if(null==tuifeizt || tuifeizt.equals("")){
  1038.             error.append("退款状态为空");
  1039.         }
  1040.         if(!(((error.toString()).trim()).equals(""))){
  1041.             throw new FeiyongException("041001","第"+(num+1)+"条记录中'"+error+"'");
  1042.         }                           
  1043.     }
  1044.    //根据文件名前三位得到dtd文件路径和子节点名
  1045.     private DataBus getDtdFile(String wenjianm) throws TxnException{
  1046.         DataBus databus = new DataBus();
  1047.         databus.put("xml""E:/"+wenjianm);
  1048.         String headName = wenjianm.substring(03);
  1049.         if(headName.equals("unp")){
  1050.             databus.put("dtd""/cn/gwssi/cpees/d_sf/xml/dtd/unpos.dtd");
  1051.             databus.put("part""feerecord");
  1052.         }
  1053.         if(headName.equals("pos")){
  1054.             databus.put("dtd""/cn/gwssi/cpees/d_sf/xml/dtd/pos.dtd");
  1055.             databus.put("part""feerecord");
  1056.             databus.put("check""1");//作为判断已记账费用总额是否相等标记
  1057.         }
  1058.         if(headName.equals("kmx")){
  1059.             databus.put("dtd""/cn/gwssi/cpees/d_sf/xml/dtd/kmx.dtd");
  1060.             databus.put("part""kmrecord");
  1061.         }
  1062.         if(headName.equals("rdf")){
  1063.             databus.put("dtd""/cn/gwssi/cpees/d_sf/xml/dtd/rfd.dtd");
  1064.             databus.put("part""tkrecord");
  1065.         }
  1066.         if(headName.equals("mod")){
  1067.             databus.put("dtd""/cn/gwssi/cpees/d_sf/xml/dtd/mod.dtd");
  1068.             databus.put("part""feerecord");
  1069.         }
  1070.         return databus;
  1071.     }
  1072.     //检查已记账费总是否相符
  1073.     private boolean checkSumFeeForPos(String fz,Recordset patent){
  1074.         int patentSize = patent.size();
  1075.         double sumFee = 0;
  1076.         for(int i=0;i<patentSize;i++){
  1077.             String feiyongje = patent.get(i).getValue("TC_JE_RMB");
  1078.             if(null==feiyongje || feiyongje.equals("")){
  1079.                 feiyongje = "0";
  1080.             }
  1081.             sumFee+=Double.parseDouble(feiyongje);
  1082.         }
  1083.         if(Double.parseDouble(fz)==sumFee){
  1084.         return true;
  1085.         }else{
  1086.         return false;
  1087.         }
  1088.     }
  1089.     //根据文件名前三位得到操作该文件的方法
  1090.     private StringBuffer doAction(String wenjianm,Recordset patent) throws TxnException{
  1091.         StringBuffer buffer = new StringBuffer();//记录异常信息
  1092.         String headName = wenjianm.substring(03);
  1093.         if(headName.equals("unp")){
  1094.             buffer.append(actionForClzMes(patent));
  1095.         }
  1096.         if(headName.equals("pos")){
  1097.             buffer.append(actionForPayMes(patent));
  1098.             buffer.append(updateFyzt());
  1099.         }
  1100.         if(headName.equals("kmx")){
  1101.             buffer.append(actionForFjblMes(patent));
  1102.         }
  1103.         if(headName.equals("rdf")){
  1104.             buffer.append(actionForTfMes(patent));
  1105.         }
  1106.         if(headName.equals("mod")){
  1107.             buffer.append(actionForGzMes(patent));
  1108.             buffer.append(actionAfterGzMes());
  1109.         }
  1110.         return buffer;
  1111.     }
  1112.     
  1113.     public void prepare(TxnContext context) throws TxnException {
  1114.         super.prepare(context);
  1115.     }
  1116.     public void cleanup(TxnContext context) throws TxnException {
  1117.         super.cleanup(context);
  1118.     }
  1119.     
  1120. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值