/** * 从单据获取主数量、辅数量、辅单位,从销售价目表查询零售单位,从存货档案查询主单位、换算率 if 零售单位==主单位 零售数量=主数量 if 零售单位==辅单位 零售数量=辅数量 else * 按照 零售单位和主单位 的换算率 , 零售数量=主数量/换算率 * * @param voItems * @throws BusinessException */ public static void convertToRetailMeas(IMeasDownConv[] voItems, String pk_corp) throws BusinessException { if (voItems == null || voItems.length == 0) return; HashMap hm = new HashMap(); for (int i = 0; i < voItems.length; i++) { hm.put(voItems[i].getInvbas(), voItems[i].getInvbas()); } String[] invids = new String[hm.size()]; hm.keySet().toArray(invids); HashMap hmData = queryInvVos(invids); HashMap hmMeas = queryRetailMeas(invids, pk_corp); String sMainMeas = null; ArrayList alinv = null; String sRetailMeas = null; // 未查询到存货信息 ArrayList<String> noInv = new ArrayList<String>(); // 未查询到零售单位 ArrayList<String> noMeas = new ArrayList<String>(); // 未查询到换算率 ArrayList<String> noHsl = new ArrayList<String>(); for (int i = 0; i < voItems.length; i++) { alinv = (ArrayList) hmData.get(voItems[i].getInvbas()); if (alinv == null || alinv.size() == 0 || alinv.get(0) == null) { noInv.add(voItems[i].getInvbas()); continue; } sRetailMeas = (String) hmMeas.get(voItems[i].getInvbas()); if (sRetailMeas == null) { noMeas.add(((InvVO) alinv.get(0)).getInvcode()); continue; } // 主单位 sMainMeas = ((InvVO) alinv.get(0)).getPk_measdoc(); if (sRetailMeas.equals(sMainMeas)) { voItems[i].setRetailNum(voItems[i].getMainNum()); } else if (sRetailMeas.equals(voItems[i].getAstMeas())) { voItems[i].setRetailNum(voItems[i].getAstNum()); } else { boolean isfind = false; for (int j = 0; j < alinv.size(); j++) { InvVO voInv = (InvVO) alinv.get(j); if (voInv.getCassistunitid() != null && voInv.getCassistunitid().equals(sRetailMeas)) { voItems[i].setRetailNum(voItems[i].getMainNum().div(voInv.getMainmeasrate())); isfind = true; break; } } if (!isfind) { noHsl.add(((InvVO) alinv.get(0)).getInvcode()); continue; } } voItems[i].setRetailMeas(sRetailMeas); } // 异常处理 if (noInv.size() > 0 || noMeas.size() > 0 || noHsl.size() > 0) { String err = ""; if (noInv.size() > 0) { err = "以下ID的存货不存在:" + noInv.toString() + "\r\n"; } if (noMeas.size() > 0) { err = err + "以下存货的零售单位不正确(零售价目表定义可能存在问题):" + noMeas.toString() + "\r\n"; } if (noHsl.size() > 0) { err = err + "以下存货的主单位和零售单位之间没有定义换算关系:" + noHsl.toString() + "\r\n"; } throw new BusinessException(err); } }
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); } }