Пример #1
0
  /**
   * 直接照搬,不拆分
   *
   * @param objSYF
   * @return
   * @throws Exception
   */
  private AggExchangeSyfHVO CopyWithoutSplit(Object[] objSYF) throws Exception {
    AggExchangeSyfHVO aggvo = new AggExchangeSyfHVO();
    ExchangeSyfHVO hvo = new ExchangeSyfHVO();

    hvo.setPk_group(pk_group_choice); // 赛拾集团

    hvo.setApprovestatus(-1); // 审批状态 -1,自由
    //		hvo.setBill_type("0001ZZ1000000000NO7Q");// 单据类型
    hvo.setMaketime(new UFDate(new Date())); // 制单日期

    // 自定义字段
    if (objSYF[21] != null) {
      hvo.setSell_date(new UFDate(objSYF[21].toString())); // 业务日期(存SYF凭证日期)
      hvo.setSell_date(new UFDate("2015-05-12")); // 测试,以后删掉
    }
    hvo.setPk_org(insertBP.getOrg_NotSplit(objSYF)); // 组织
    // 发现问题:pk_org_v 需要设置的值是表ORG_ORGS_V 的 pk_vid 字段值
    // hvo.setPk_org_v(costing[0].getOriginorg());// 组织版本
    hvo.setBill_org(insertBP.getOrg_NotSplit(objSYF)); // 单据组织

    // obj字段
    hvo.setBill_no(objSYF[1].toString()); // 单据编号
    hvo.setRate(new UFDouble(Double.valueOf(objSYF[16].toString()))); // 汇率
    hvo.setOriginal_sum(new UFDouble(origin)); // 原币金额
    hvo.setLocal_sum(new UFDouble(local)); // 本币金额
    hvo.setClear_type(getClear_type(objSYF)); // 结算方式
    hvo.setOrigin(getAddr(objSYF)); // 始发地
    hvo.setSubject_orientation(getSubject_orientation(objSYF)); // 科目方向25; 1是借(001)
    hvo.setAccounting_subject(getAccounting_subject(objSYF)); // 会计科目26
    if (objSYF[3] == null) {
      hvo.setDestination("unknow");
    } else {
      hvo.setDestination(objSYF[3].toString()); // 目的地 如:LAGOS
    }
    hvo.setYear(objSYF[23].toString()); // 年
    hvo.setMonth(objSYF[24].toString()); // 月
    hvo.setCustomer(getClient(objSYF)); // 客户
    hvo.setSellnumber(objSYF[19].toString()); // 集团业务单号
    hvo.setClient(getSupplier(objSYF)); // 供应商
    hvo.setVoucher_note(objSYF[5].toString()); // 凭证
    //		hvo.setFinance(getFinance(hvo.getBill_org()));// 财务账簿

    // costing字段
    hvo.setLink(insertBP.getLink_NotSplit(objSYF)); // 航线
    hvo.setSell(insertBP.getSell(objSYF)); // 业务员
    //		hvo.setSell_dpm(insertBP.getSellDept(objSYF).getPk_dept());// 业务员部门
    hvo.setProduct(insertBP.getFailProduct(objSYF)); // 产品
    hvo.setCurrency(getCurrency(objSYF)); // 币种
    //		hvo.setBilltype(2);// 单据种类
    hvo.setDept(insertBP.getDept_NotSplit(objSYF).getPk_dept()); // 组织部门,3合1
    //		hvo.setDef8("汇兑损益应付SYF");//拆分类型
    hvo.setBilltype_def(PK_DefBilltype_HDYF); // 自定义档案,单据类型
    aggvo.setParent(hvo);

    // 子表数据(2015.4.15)不拆分的单据没有子表
    //		 List<ExchangegalCostBVO> bvolist = new
    //		 ArrayList<ExchangegalCostBVO>();
    ExchangeSyfBVO[] syfbvos = new ExchangeSyfBVO[1];
    ExchangeSyfBVO bvo = new ExchangeSyfBVO();
    bvo.setBilltype(3);
    bvo.setSell_date(new UFDate("2015-05-12")); // 测试,以后删掉
    bvo.setBilltype_def(PK_DefBilltype_HDYF);
    // 不拆分的单据,将表头的 本币、原币、汇率、币种 写在表体,转换模版是取表体的
    bvo.setLocal_sum(hvo.getLocal_sum());
    bvo.setOriginal_sum(hvo.getOriginal_sum());
    bvo.setRate(hvo.getRate());
    bvo.setCurrency(hvo.getCurrency());
    syfbvos[0] = bvo;
    //		// 表体数据放进 Aggvo
    aggvo.setChildren(ExchangeSyfBVO.class, syfbvos);

    // AggExchangegalCostHVO[] bills = new AggExchangegalCostHVO[1];
    // bills[0] = aggvo;
    // AceExchangeGaLInsertBP insertBP = new AceExchangeGaLInsertBP();
    // insertBP.insert(bills);
    return aggvo;
  }
Пример #2
0
  public void split(String where) throws BusinessException, Exception {
    insertBP = new ExchangeSplitSYFMap(); // 杰思的拆分类
    String reson_billno = "业务单号为空,不用处理";
    String reson_month = "月份为空,不用处理";
    String sql = "select * " + where + " and 产品 <> '快递'"; // 正式代码
    //		sql = "select * from SNvoucherSYF where 业务单号='CJSZE140102028'";//测试代码
    //		sql = "select * from SNvoucherSYF where  单据编号 in
    // ('00000000002069461362','00000000002069461111')";//测试代码
    List<String[]> listSYF; // 存放从南北取出来的数据
    List<AggExchangeSyfHVO> syfBills = new ArrayList<AggExchangeSyfHVO>(); // 等于SYF的条数
    //		List<ExchangeSyfBVO> syfBvoBills = new ArrayList<ExchangeSyfBVO>();// 表体数=F的条数*3
    List<AggExchangeAssistSyfHVO> assistBills = new ArrayList<AggExchangeAssistSyfHVO>(); // 辅单
    List<AggSplitFail> aggSplitFailBills = new ArrayList<AggSplitFail>(); // 不处理的单据,失败单

    listSYF = (List<String[]>) baseDao.executeQuery(sql, new ArrayListProcessor());
    int count = 0;
    List<String[]> listF2202 = null;
    List<String[]> listF = null;
    for (Object[] objSYF : listSYF) {
      if (SellDate == null) {
        SellDate =
            new UFDate(
                sdf.parse(objSYF[23].toString() + "-" + objSYF[24].toString() + "-01 00:00:00"));
      }
      SYF_Bill_no = objSYF[1].toString();
      count = count + 1;
      PK_Subject_orientation = getSubject_orientation(objSYF);
      local_total = 0.00;
      origin = Double.valueOf(objSYF[14].toString());
      local = Double.valueOf(objSYF[15].toString());
      balance_origin = origin; // 针对每一张单开始拆分的时候,先记录一下,拆分的时候要用,看CountByPercent方法
      balance_local = local; // 针对每一张单开始拆分的时候,先记录一下,拆分的时候要用,看CountByPercent方法
      if (objSYF[19].equals(" ") || objSYF[19] == null) {
        // 不拆分,直接将记录插入到数据表中
        AggSplitFail aggsfvo = RecordSplitFail(objSYF, reson_billno);
        aggSplitFailBills.add(aggsfvo);
        continue;
      }
      if (objSYF[24] == null) { // 月份为0的请不用处理。
        AggSplitFail aggsfvo = RecordSplitFail(objSYF, reson_month);
        aggSplitFailBills.add(aggsfvo);
        continue;
      }

      //			2015-08-17改为判断每一条F
      //			/**
      //			 * 直接照搬: 1、产品为海整、快递的不用进行拆分,直接照搬。放在AggExchangegalCostHVO
      //			 * 2、主业务单元为订舱公司2、香港天尚2、深圳天尚2 放在AggExchangegalCostHVO 3、业务员部门为
      //			 * 深圳天尚、香港天尚 、 订舱公司 的,bcode改为 对应名称,放在AggExchangegalCostHVO
      //			 *
      //			 * */
      //			if (CopyOrNot(objSYF)) {
      //				AggExchangeSyfHVO bill_copy = CopyWithoutSplit(objSYF);
      //				syfBills.add(bill_copy);
      //				continue;
      //			}

      // 找F2202表
      listF2202 = selectF2202(objSYF);
      // 找F表
      if (listF2202 != null && listF2202.size() > 0) {
        listF = selectF(listF2202.get(0));
        //				if(listF.size() == 0 ){
        //					//按照不拆分处理:
        //					AggExchangeSyfHVO bill_copy = CopyWithoutSplit(objSYF);
        //					syfBills.add(bill_copy);
        //					continue;
        //				}
        listF_size = listF.size();
      } else {
        continue;
      }
      // 计算出F的本币总金额

      for (Object[] objF : listF) {
        // String billno = objF[1].toString();//单据编号
        // String BusinessNum = objF[20].toString();//业务单号
        // String mainBusinessNum = objF[21].toString();//主业务单号
        // Double origin = Double.valueOf(objF[15].toString());// 15原币金额
        Double localF = Double.valueOf(objF[16].toString()); // 16本币金额
        local_total = local_total + localF;
      }
      // 计算比例,并且保存
      percentList = new ArrayList<Double>();
      for (Object[] objF : listF) {
        Double local = Double.valueOf(objF[16].toString());
        Double percent = local / local_total;
        percentList.add(percent);
      }

      // 进行拆分:
      AggExchangeSyfHVO aggsyfvo = new AggExchangeSyfHVO();
      ExchangeSyfHVO syfHVO;
      if (CopyOrNot(objSYF)) {
        // 不拆分
        syfHVO = notSplitSyfHVO(objSYF);
        SYF_Sellnum = syfHVO.getSellnumber();
        SYF_pk_product = syfHVO.getProduct();
      } else {
        // 拆分
        syfHVO = SplitToSyfHVO(objSYF);
        SYF_Sellnum = syfHVO.getSellnumber();
        SYF_pk_product = syfHVO.getProduct();
      }
      aggsyfvo.setParent(syfHVO);
      List<ExchangeSyfBVO> syfBvoBills = new ArrayList<ExchangeSyfBVO>(); // 表体数=F的条数*3
      for (int indexOflistF = 0; indexOflistF < listF.size(); indexOflistF++) {
        Object[] objF = listF.get(indexOflistF);
        origin_temp = roundHalfUp(CountByPercent(origin, indexOflistF, 0)); // origin * 比例得到中间结果
        local_temp = roundHalfUp(CountByPercent(local, indexOflistF, 1)); // local * 比例得到中间结果

        // -----
        if (CopyOrNot_bvo(objF)) {
          // F不需要442拆分
          ExchangeSyfBVO bvo = copyWithoutSplitToSyfBvo(objF);
          syfBvoBills.add(bvo);
          // 拆分到辅组织汇兑损益应付单
          AggExchangeAssistSyfHVO aggAssistStart = notSplitAssistSyfHVO(objF, bvo);
          assistBills.add(aggAssistStart);
        } else {
          // F需要442拆分:

          if ("PP".equals(objF[12]) || "月结".equals(objF[12])) {
            // // 结算方式为PP,月结时,挂在业务员
            // 拆分过程,需要用到的变量
            origin_start = roundHalfUp(origin_temp * 0.4);
            origin_def_count = roundHalfUp(origin_temp * 0.1);
            origin_sellman = origin_def_count * 2;
            origin_des = roundHalfUp(origin_temp - origin_start - origin_sellman);

            local_start = roundHalfUp(local_temp * 0.4);
            local_def_count = roundHalfUp(local_temp * 0.1);
            local_sellman = local_def_count * 2;
            local_des = roundHalfUp(local_temp - local_start - local_sellman);
            // 拆分到汇兑损益应付单
            List<ExchangeSyfBVO> syfBvos = splitToSyfBvos(objSYF, objF); // 根据一条F拆分出3条表体记录
            syfBvoBills.addAll(syfBvos); // 增加3条
            // 拆分到辅组织汇兑损益应付单-始发地:
            AggExchangeAssistSyfHVO aggAssistStart = SplitToAssistSyfStart(objF, objSYF);
            assistBills.add(aggAssistStart);
            // 拆分到辅组织汇兑损益应付单-目的地:
            AggExchangeAssistSyfHVO aggAssistDes = SplitToAssistSyfDes(objF, objSYF);
            assistBills.add(aggAssistDes);
          } else { // 挂在目的地
            origin_start = roundHalfUp(origin_temp * 0.4);
            origin_def_count = roundHalfUp(origin_temp * 0.2);
            origin_des = origin_def_count * 2;
            origin_sellman = roundHalfUp(origin_temp - origin_start - origin_des); // double相减有误差

            local_start = roundHalfUp(local_temp * 0.4);
            local_def_count = roundHalfUp(local_temp * 0.2);
            local_des = local_def_count * 2;
            local_sellman = roundHalfUp(local_temp - local_start - local_des);
            // 拆分到汇兑损益应付单
            List<ExchangeSyfBVO> syfBvos = splitToSyfBvos(objSYF, objF); // 根据一条F拆分出3条表体记录
            syfBvoBills.addAll(syfBvos); // 增加3条
            // 拆分到辅组织汇兑损益应付单-始发地:
            AggExchangeAssistSyfHVO aggAssistStart = SplitToAssistSyfStart(objF, objSYF);
            assistBills.add(aggAssistStart);
            // 拆分到辅组织汇兑损益应付单-业务员:
            AggExchangeAssistSyfHVO aggAssistSellMan = SplitToAssistSyfSellMan(objF, objSYF);
            assistBills.add(aggAssistSellMan);
          }
        }

        // ------
        // 减去余额:
        balance_origin = balance_origin - origin_temp;
        balance_local = balance_local - local_temp;
      } // FOR F 遍历结束
      // 将生成的syf表体记录放进syfhvo
      ExchangeSyfBVO[] syfbvostemp = syfBvoBills.toArray(new ExchangeSyfBVO[0]); // 转换成数组
      aggsyfvo.setChildren(ExchangeSyfBVO.class, syfbvostemp); // 一条汇兑损益应付单(表头+表体)
      syfBills.add(aggsyfvo); // 将syfHVO放进list中
    } // for SYF遍历结束

    // 保存:
    // 保存 汇兑损益应付单
    AggExchangeSyfHVO[] aggSyfVOs = syfBills.toArray(new AggExchangeSyfHVO[0]);
    if (aggSyfVOs.length > 0) {
      // if (aggvos[0] != null) {
      AceExchangeSyfInsertBP insertBP = new AceExchangeSyfInsertBP();
      insertBP.insert(aggSyfVOs);
    }

    // 保存 辅组织汇兑损益应付单
    AggExchangeAssistSyfHVO[] aggAssistSyfVOs = assistBills.toArray(new AggExchangeAssistSyfHVO[0]);
    if (aggAssistSyfVOs.length > 0) {
      // if (aggvos[0] != null) {
      AceExchangeAssistSyfInsertBP insertBP = new AceExchangeAssistSyfInsertBP();
      insertBP.insert(aggAssistSyfVOs);
    }
  }