public static void convertRetailMeas(IMeasField[] voItems) throws BusinessException { if (voItems == null || voItems.length == 0) return; java.util.HashSet<String> hm = new java.util.HashSet<String>(); for (int i = 0; i < voItems.length; i++) { hm.add(voItems[i].getInvbas()); } String[] invids = new String[hm.size()]; hm.toArray(invids); HashMap hmData = queryInvVos(invids); UFDouble udTmpNum = null; String sTmp = null; UFDouble one = new UFDouble(1); ArrayList alinv = null; // 无存货信息的存货的ID ArrayList<String> noInv = new ArrayList<String>(); // 非主辅计量管理,主单位和辅单位不一致 ArrayList<String> errMeas = new ArrayList<String>(); for (int i = 0; i < voItems.length; i++) { alinv = (ArrayList) hmData.get(voItems[i].getInvbas()); if (alinv == null || alinv.size() == 0) { noInv.add(((InvVO) alinv.get(0)).getInvcode()); continue; } udTmpNum = voItems[i].getRetailNum(); sTmp = voItems[i].getRetailMeas(); for (int j = 0; j < alinv.size(); j++) { InvVO voInv = (InvVO) alinv.get(j); // 无零售单位, 零售单位和主单位一致 ,按照主单位、数量 if (sTmp == null || sTmp.equals(voInv.getPk_measdoc())) { // 非辅单位管理 if (voInv.getAssistunit() == null || !(voInv.getAssistunit().booleanValue())) { voItems[i].setMainMeas(voInv.getPk_measdoc()); voItems[i].setMainNum(udTmpNum); break; } else { voItems[i].setMainMeas(voInv.getPk_measdoc()); voItems[i].setMainNum(udTmpNum); voItems[i].setAstMeas(voInv.getPk_measdoc()); voItems[i].setAstNum(udTmpNum); voItems[i].setHsl(one); break; } } else { // 非辅单位管理,零售单位不等于主单位,属于错误数据 if (voInv.getAssistunit() == null || !(voInv.getAssistunit().booleanValue())) { errMeas.add(voInv.getInvcode()); continue; } // 辅单位和零售单位一致,计算出主单位和换算率 else if (voInv.getCassistunitid().equals(sTmp)) { voItems[i].setMainMeas(voInv.getPk_measdoc()); voItems[i].setMainNum(udTmpNum.multiply(voInv.getMainmeasrate())); voItems[i].setAstMeas(sTmp); voItems[i].setAstNum(udTmpNum); voItems[i].setHsl(voInv.getMainmeasrate()); break; } } } } // 异常处理 if (noInv.size() > 0 || errMeas.size() > 0) { String err = ""; if (noInv.size() > 0) { err = "以下ID的存货不存在:" + noInv.toString() + "\r\n"; } if (errMeas.size() > 0) { err = err + "非辅单位管理的存货,零售单位须和主单位一致:" + errMeas.toString() + "\r\n"; } throw new BusinessException(err); } }