/** * 普通单据(非天尚、快递、海整),记录SYF单据到汇兑损益应付单的表头信息 * * @return * @throws ParseException */ private ExchangeSyfHVO SplitToSyfHVO(Object[] objSYF) throws BusinessException, ParseException { ExchangeSyfHVO hvo = initSyfHVO(objSYF); hvo.setLink(insertBP.getLink(objSYF)); // 航线 hvo.setProduct(insertBP.getProduct(objSYF)); // 产品 // -- if ("PP".equals(objSYF[12]) || "月结".equals(objSYF[12])) { // 业务员为主账簿 hvo.setBill_org(insertBP.getSellOrg(objSYF)); // 单据组织 hvo.setPk_org(insertBP.getSellOrg(objSYF)); // 组织 hvo.setDept(insertBP.getSellDept(objSYF).getPk_dept()); // 组织部门 } else { // 目的地为主账簿 hvo.setBill_org(insertBP.getOrg(objSYF)); // 单据组织 hvo.setPk_org(insertBP.getOrg(objSYF)); // 组织 hvo.setDept(insertBP.getOrgDept(objSYF).getPk_dept()); // 组织部门 } return hvo; }
/** * 天尚、海整、快递,这些SYF单据调用此方法 * * @param objSYF * @return */ private ExchangeSyfHVO notSplitSyfHVO(Object[] objSYF) throws UifException, ParseException, BusinessException { ExchangeSyfHVO hvo = initSyfHVO(objSYF); hvo.setLink(insertBP.getLink_NotSplit(objSYF)); // 航线 hvo.setProduct(insertBP.getFailProduct(objSYF)); // 产品 hvo.setBill_org(insertBP.getOrg_NotSplit(objSYF)); // 单据组织 hvo.setPk_org(insertBP.getOrg_NotSplit(objSYF)); // 组织 hvo.setDept(insertBP.getDept_NotSplit(objSYF).getPk_dept()); // 组织部门 return hvo; }
/** * 直接照搬,不拆分 * * @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; }
private ExchangeSyfHVO initSyfHVO(Object[] objSYF) throws ParseException, BusinessException, UifException { ExchangeSyfHVO hvo = new ExchangeSyfHVO(); hvo.setBill_no(objSYF[1].toString()); // 单据编号 // -- hvo.setPk_group(pk_group_choice); // 赛拾集团 hvo.setApprovestatus(-1); // 审批状态 -1,自由 // hvo.setBill_type("0001ZZ1000000000NO7Q");// 单据类型 hvo.setMaketime(new UFDate(new Date())); // 制单日期 hvo.setSell_date(SellDate); // 业务日期 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(PK_Subject_orientation); // 科目方向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())); // 财务账簿 hvo.setCurrency(getCurrency(objSYF)); // 币种 hvo.setBilltype_def(PK_DefBilltype_HDYF); // 自定义档案,单据类型 hvo.setSell(insertBP.getSell(objSYF)); // 业务员 return hvo; }
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); } }