/** * 合并票据金额 moneytype 0 原币 1 辅币 2 本币 * * @param items * @return */ private static Map<String, UFDouble> sumMoney( SettlementBodyVO[] items, String djdl, int moneytype) throws BusinessException { Map<String, UFDouble> map = new HashMap<String, UFDouble>(); Set<String> billnoSet = new HashSet<String>(); String billno = null; UFDouble money = null; for (int i = 0; i < items.length; i++) { if (items[i].getNotenumber() != null) { billno = items[i].getNotenumber().trim(); } else { continue; } if (CMPConstant.BILLTYPE_SK.equals(djdl) || CMPConstant.BILLTYPE_SJ.equals(djdl)) { switch (moneytype) { case YB: money = items[i].getReceive(); // 付款原币金额 break; case FB: money = items[i].getReceivefrac(); // 辅币金额 break; case BB: money = items[i].getReceivelocal(); // 本币 break; } } if (CMPConstant.BILLTYPE_FK.equals(djdl) || CMPConstant.BILLTYPE_FJ.equals(djdl)) { switch (moneytype) { case YB: money = items[i].getPay(); break; case FB: money = items[i].getPayfrac(); break; case BB: money = items[i].getPaylocal(); break; } } if (money == null) { money = new UFDouble(0); } if (billnoSet.contains(billno)) { UFDouble tmpMoney = map.get(billno); map.put(billno, tmpMoney.add(money)); } else { map.put(billno, money); } billnoSet.add(billno); } return map; }
// 复写父类的保存方法,解决了修改时子表中主表外键丢失的问题 // 添加了当合同为普通合同时,合同金额为必输项的数据项检查 public NCObject write(NCObject billVO, Object userObject) throws BusinessException { // 子表修改记录时插入主表主键 // 获取AggVO AggContractVO aggContractVO = (AggContractVO) billVO.getContainmentObject(); if (null != aggContractVO) { // 获取主表VO ContractVO ContractVO = (ContractVO) aggContractVO.getParentVO(); String message[] = DzcgMainAuthority.queryXDeptAndPsnByCon(ContractVO); if (ContractVO.getXq_dept() == null) ContractVO.setXq_dept(message[0]); if (ContractVO.getXreq_psn() == null) ContractVO.setXreq_psn(message[1]); if (ContractVO.getXreq_no() == null) ContractVO.setXreq_no(message[4]); if (ContractVO.getXreq_name() == null) ContractVO.setXreq_name(message[5]); // lifeic修改把合同金额校验去掉,使用自动计算合同金额 // 获取用户输入的合同类型,当合同类型为普通合同时做合同金额的必输项检查 /* if(ContractVO.getCt_type().intValue() == EbsOperaitonConst.OPERATION_STOCK_TYPE_COMMON_CONTRACT){ if (ContractVO.getCt_amount() == null){ throw new LfwRuntimeException(null,"请输入合同金额!",null); } }else{ //当合同类型为框架协议时将合同金额设置为空 ContractVO.setCt_amount(null); } */ // 检查合同生效日期和合同结束日期的合法性 // 合同生效日期 // UFDate dtBeginDay = ContractVO.getCt_validate_date(); // //合同结束日期 // UFDate dtEndDay = ContractVO.getCt_closed_date(); // //合同结束日期不早于合同生效日期 // if(dtBeginDay.compareTo(dtEndDay) > 0){ // throw new LfwRuntimeException("合同结束日期不能早于合同生效日期!"); // } UFDouble total = new UFDouble(0); // 获取主表VO属性 String pk_ht_contract = ContractVO.getPk_ht_contract(); if (null != pk_ht_contract && !"".equals(pk_ht_contract)) { // 修改保存时设置修改人和修改时间 // 修改人为当前登录者 ContractVO.setModifyid(LfwRuntimeEnvironment.getUserVO().getPrimaryKey()); // 修改日期为当前系统日期 ContractVO.setModifydate(new UFDate(System.currentTimeMillis())); // 获取所有字表VO,以数组形式返回 } ProdPriceRepoVO[] cavo = (ProdPriceRepoVO[]) aggContractVO.getTableVO("prod_price_item_array"); if (cavo != null) { int count = 0; for (int i = 0; i < cavo.length; i++) { if (cavo[i].getStatus() != VOStatus.DELETED) { // 判断行数据中产品分类、产品名称、生效日期和失效日期单位是否输入 if (null == cavo[i].getPk_da_prod_cate() || "".equals(cavo[i].getPk_da_prod())) { throw new LfwRuntimeException("表体第" + (i + 1) + "行:请选择产品分类!"); } /* if (null == cavo[i].getPk_da_prod() || "".equals(cavo[i].getPk_da_prod())){ throw new LfwRuntimeException(null,"表体第"+(i+1)+"行:请选择产品!",null); } */ if (null == cavo[i].getProd_unit() || "".equals(cavo[i].getProd_unit())) { throw new LfwRuntimeException("表体第" + (i + 1) + "行:请选择单位!"); } /* if (null == cavo[i].getEffective_date() || "".equals(cavo[i].getEffective_date())){ throw new LfwRuntimeException(null,"表体第"+(i+1)+"行:请选择生效日期!",null); } if (null == cavo[i].getIneffective_date() || "".equals(cavo[i].getIneffective_date())){ throw new LfwRuntimeException(null,"表体第"+(i+1)+"行:请选择失效日期!",null); } */ // 更改VO状态,重新插入页面输入的行数据信息 if (cavo[i].getStatus() != VOStatus.DELETED) { cavo[i].setStatus(VOStatus.NEW); } // 为子表VO中的属性set主表主键 cavo[i].setAttributeValue("pk_ht_contract", pk_ht_contract); total = total.add(cavo[i].getDiscounted_amount()); } else { cavo[i] = null; count++; } } // 修改删除行项目之后保存还出现该行项目问题,在获取之后删除保存 // 创建一个存放删除记录后的容器 ProdPriceRepoVO[] cavonew = new ProdPriceRepoVO[cavo.length - count]; // 为存放数组声明的一个下标 int Index = 0; // 为删除记录后的容器赋值 for (int i = 0; i < cavo.length; i++) { if (null == cavo[i]) { } else { cavonew[Index] = cavo[i]; Index++; } } aggContractVO.setTableVO("prod_price_item_array", cavonew); ConstratMoneyPlanVO[] cavo1 = (ConstratMoneyPlanVO[]) aggContractVO.getTableVO("moeny_plan_item_array"); if (cavo1 != null) { for (int i = 0; i < cavo1.length; i++) { if (cavo1[i].getAttributeValue("pk_ht_money_plan") == null || cavo1[i].getAttributeValue("pk_ht_money_plan").equals("")) { cavo1[i].setStatus(VOStatus.NEW); cavo1[i].setAttributeValue("pk_ht_contract", pk_ht_contract); } } } } ContractVO.setCt_amount(total); // 普通自动生成编码的处理 wangyea 2010-12-31 String contract_no = null; if (ContractVO.getContract_no() == null || ContractVO.getContract_no().length() == 0) { if (ContractVO.getR_pk_ht_contract() != null && ContractVO.getR_pk_ht_contract().length() > 0) { // 关联合同编号 contract_no = CodPlatformService.billCodeGlContract( ContractVO.getPk_corp(), ContractVO.getR_pk_ht_contract()); } else { // 普通合同编号 contract_no = CodPlatformService.billCodeContract(ContractVO.getPk_corp()); } } else { if (ContractVO.getPk_ht_contract() != null) { // 查询数据库中的关联合同主键,判断关联合同是否修改 String ora_r_pk = CodPlatformService.queryLinkContractByPk(ContractVO.getPk_ht_contract()); // 修改关联合同时,重新生成关联合同编码 if (ContractVO.getR_pk_ht_contract() != null && ora_r_pk != null) { // 如果去掉了关联合同 if (!ContractVO.getR_pk_ht_contract().equals(ora_r_pk)) { // 关联合同编号 如果关联合同变化则重新生成编码 contract_no = CodPlatformService.billCodeGlContract( ContractVO.getPk_corp(), ContractVO.getR_pk_ht_contract()); } else { // 合同编号不变 contract_no = ContractVO.getContract_no(); } } else { if (ora_r_pk != null && ContractVO.getR_pk_ht_contract() == null) { // 普通合同编号 contract_no = CodPlatformService.billCodeContract(ContractVO.getPk_corp()); } else if (ora_r_pk == null && ContractVO.getR_pk_ht_contract() == null) { // 合同编号不变 contract_no = ContractVO.getContract_no(); } else if (ora_r_pk == null && ContractVO.getR_pk_ht_contract() != null) { // 关联合同编号 如果关联合同变化则重新生成编码 contract_no = CodPlatformService.billCodeGlContract( ContractVO.getPk_corp(), ContractVO.getR_pk_ht_contract()); } else { // 合同编号不变 contract_no = ContractVO.getContract_no(); } } } } ContractVO.setContract_no(contract_no); // 编码判断处理完成 } IContractService service = (IContractService) NCLocator.getInstance().lookup(IContractService.class); return service.doWrite(billVO, userObject); }
/** 王磊2011-3-26改动,判断为空的问题 */ public NCObject write(NCObject billVO, Object userObject) throws BusinessException { // 子表修改记录时插入主表主键 // 获取AggVO BaseDAO dao = new BaseDAO(); AggReqVO aggReqVO = (AggReqVO) billVO.getContainmentObject(); if (null != aggReqVO) { // 获取主表VO ReqMainVO reqMainVO = (ReqMainVO) aggReqVO.getParentVO(); // 修改不给复制建议人的问题 String operid = reqMainVO.getPk_oper_person(); String dept = reqMainVO.getPk_dept_sug(); try { String sql = " select * from bd_psndoc where pk_deptdoc = '" + dept + "' and pk_psndoc ='" + operid + "' "; List<PsndocVO> list = (List<PsndocVO>) dao.executeQuery(sql, new BeanListProcessor(PsndocVO.class)); // psnvo = (PsndocVO)dao.retrieveByPK(PsndocVO.class, operid); if (list != null && list.size() > 0) { } else { throw new LfwRuntimeException("请不要手动填写采购经办人,你选择的建议采购部门与填写的采购经办人部门不对应,请重新选择!"); } } catch (Exception e) { throw new LfwRuntimeException("请不要手动填写采购经办人,你选择的建议采购部门与填写的采购经办人部门不对应,请重新选择!"); // Logger.error("请选择建议采购人,不要手动填写!"); // Logger.error(e.getMessage()); } String bill_code = reqMainVO.getBill_code(); if (bill_code == null || bill_code.trim().length() == 0) { bill_code = CodPlatformService.billCodeXqRep(LfwRuntimeEnvironment.getPkCorp()); reqMainVO.setBill_code(bill_code); } // 获取主表VO属性 String pk_xq_req_main = reqMainVO.getPk_xq_req_main(); if (null != pk_xq_req_main && !"".equals(pk_xq_req_main)) { // 修改保存时设置修改人和修改时间 // 修改人 reqMainVO.setModifier(LfwRuntimeEnvironment.getUserVO().getPrimaryKey()); // 修改时间为当前的系统时间 reqMainVO.setModifydate(new UFDate(System.currentTimeMillis())); // 获取所有子表VO,以数组形式返回 CircularlyAccessibleValueObject[] cavo = aggReqVO.getChildrenVO(); if (cavo != null && cavo.length > 0) { // 现在可以导入数据,导入数据时是需要把单据保存后才能进行处理,因此去掉了表体不能为空的限制 // throw new LfwRuntimeException("表体行不能为空"); for (int i = 0; i < cavo.length; i++) { // 为子表VO中的属性set主表主键 cavo[i].setAttributeValue("pk_xq_req_main", pk_xq_req_main); } } } UFDouble ufd = reqMainVO.getBuget_amount(); // boolean flag=true; CircularlyAccessibleValueObject[] cavo = aggReqVO.getChildrenVO(); UFDouble amount = new UFDouble(0); if (cavo != null && cavo.length > 0) { for (CircularlyAccessibleValueObject cav : cavo) { if (cav instanceof ReqItemProdVO) { ReqItemProdVO pvo = (ReqItemProdVO) cav; if (pvo != null) { if (pvo.getStatus() != 3) { UFDouble tAmount = pvo.getAmount(); if (tAmount != null) { amount = amount.add(tAmount); } if (tAmount.toDouble() <= 0) { throw new LfwRuntimeException("预算单价必须大于0"); } // flag= false; } } } } } /* if(flag) { throw new LfwRuntimeException("表体行不能为空"); } */ reqMainVO.setBuget_amount(amount); } return super.write(billVO, userObject); }