程序实现了,但是完全没理解hashmap的思想,在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键
对比实现思想list hashmap性能差别及对象引用之一与实现思想list hashmap性能差别及对象引用之二
package com.eapt.uc.portalsearch.bo;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.eapt.base.EAPTBaseBusinessObject;
import com.eapt.uc.portalsearch.form.PortalStockCondition;
import com.eapt.uc.portalsearch.form.PortalStockSearchForm;
import com.stony.core.exception.RunException;
public class PortalStockBO extends EAPTBaseBusinessObject {
public PortalStockSearchForm form;
private List results = new ArrayList();
public PortalStockBO(PortalStockSearchForm form){
super();
this.form = form;
}
protected void performBusinessLogic() {
getInvenroryReport();
}
protected Map getStockInfo() {
PortalStockCondition condition = (PortalStockCondition)form.getCondition();
String paymentcustomer = condition.getPaymentcustomer();
String otime1 = condition.getOtime1();
Map results = new HashMap();
StringBuffer sql = new StringBuffer(1024);
sql.append("SELECT partno, SUM (qty) qty, SUM (bottles) bottles, SUM (gw) gw");
sql.append(" FROM (SELECT sil.partno, SUM (sil.stockinqty) qty,");
sql.append(" SUM (sil.stockinpkqty) bottles, SUM (sil.gweight) gw");
sql.append(" FROM eapt_stockinline sil, eapt_stockin si");
sql.append(" WHERE sil.stockinno = si.stockinno");
sql.append(" AND currentstatus = 'COM'");
sql.append(" AND si.paymentcustomer = ?");
sql.append(" AND stockintime < TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" GROUP BY sil.partno");
sql.append(" UNION ALL");
sql.append(" SELECT sil.partno, -SUM (sil.stockqty) qty,");
sql.append(" -SUM (sil.stockpkqty) bottles, -SUM (sil.gweight) gw");
sql.append(" FROM eapt_stockoutline sil, eapt_stockout si");
sql.append(" WHERE sil.stockoutno = si.stockoutno");
sql.append(" AND currentstatus = 'COM'");
sql.append(" AND si.paymentcustomer = ?");
sql.append(" AND stockouttime < TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" GROUP BY sil.partno)");
sql.append(" GROUP BY partno");
sql.append(" HAVING SUM (qty) > 0");
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rset = null;
try {
conn = getSession().connection();
pstm = conn.prepareStatement(sql.toString());
System.out.println(sql.toString());
pstm.setString(1, paymentcustomer);
pstm.setString(2, otime1);
pstm.setString(3, paymentcustomer);
pstm.setString(4, otime1);
rset = pstm.executeQuery();
while (rset.next()) {
PortalStock vo = new PortalStock();
String partno = rset.getString(1);
if (null == partno )
{
partno = "";
}
vo.setPartno(partno);
vo.setTotalqty(rset.getBigDecimal(2));
vo.setTotalbottles(rset.getBigDecimal(3));
vo.setTotalweight(rset.getBigDecimal(4));
results.put(partno,vo);
}
return results;
} catch (Exception e) {
e.printStackTrace();
throw new RunException(e);
} finally {
try {
if (rset != null)
rset.close();
} catch (SQLException e1) {
}
try {
if (pstm != null)
pstm.close();
} catch (SQLException e1) {
}
}
}
protected List getStockDetailInfo() {
PortalStockCondition condition = (PortalStockCondition)form.getCondition();
String paymentcustomer = condition.getPaymentcustomer();
String otime1 = condition.getOtime1();
String otime2 = condition.getOtime2();
List results = new ArrayList();
StringBuffer sql = new StringBuffer(1024);
sql.append(" SELECT 'IN' t, si.stockintime otime, sil.partno, si.documentcode,");
sql.append(" SUM (sil.stockinqty) qty, SUM (sil.stockinpkqty) bottles,");
sql.append(" SUM (sil.gweight) gw");
sql.append(" FROM eapt_stockinline sil, eapt_stockin si");
sql.append(" WHERE sil.stockinno = si.stockinno");
sql.append(" AND currentstatus = 'COM'");
sql.append(" AND si.paymentcustomer = ?");
sql.append(" AND stockintime >= TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" AND stockintime < TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" GROUP BY 'IN', si.stockintime, sil.partno, si.documentcode");
sql.append(" UNION ALL");
sql.append(" SELECT 'OUT' t, si.stockouttime otime, sil.partno, si.documentcode,");
sql.append(" SUM (sil.stockqty) qty, SUM (sil.stockpkqty) bottles,");
sql.append(" SUM (sil.gweight) gw");
sql.append(" FROM eapt_stockoutline sil, eapt_stockout si");
sql.append(" WHERE sil.stockoutno = si.stockoutno");
sql.append(" AND currentstatus = 'COM'");
sql.append(" AND si.paymentcustomer = ?");
sql.append(" AND stockouttime >= TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" AND stockouttime < TO_DATE (?, 'YYYY-MM-DD')");
sql.append(" GROUP BY 'OUT', si.stockouttime, sil.partno, si.documentcode");
sql.append(" ORDER BY otime");
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rset = null;
try {
conn = getSession().connection();
pstm = conn.prepareStatement(sql.toString());
pstm.setString(1, paymentcustomer);
pstm.setString(2, otime1);
pstm.setString(3, otime2);
pstm.setString(4, paymentcustomer);
pstm.setString(5, otime1);
pstm.setString(6, otime2);
rset = pstm.executeQuery();
while (rset.next()) {
PortalStock vo = new PortalStock();
String status = rset.getString(1);
String partno = rset.getString(3);
if (null == partno )
{
partno = "";
}
vo.setStatus(status);
vo.setOtime(rset.getDate(2));
vo.setPartno(partno);
if("IN".equals(status)){
vo.setRecivecode(rset.getString(4));
vo.setReciveqty(rset.getBigDecimal(5));
vo.setRecivebottles(rset.getBigDecimal(6));
vo.setReciveweight(rset.getBigDecimal(7));
}else{
vo.setDelivercode(rset.getString(4));
vo.setDeliverqty(rset.getBigDecimal(5));
vo.setDeliverbottles(rset.getBigDecimal(6));
vo.setDeliverweight(rset.getBigDecimal(7));
}
results.add(vo);
}
return results;
} catch (Exception e) {
e.printStackTrace();
throw new RunException(e);
} finally {
try {
if (rset != null)
rset.close();
} catch (SQLException e1) {
}
try {
if (pstm != null)
pstm.close();
} catch (SQLException e1) {
}
}
}
public List getInvenroryReport(){
if(null == form){
return null;
}
Map map = getStockInfo();
System.out.println("map==>" + map.size());
List list = getStockDetailInfo();
System.out.println("list==>" + list.size());
System.out.println(list.size());
results = getData(map,list);
System.out.println("results==>" + results.size());
return results;
}
public List getData(Map map,List list){
Iterator it1=list.iterator();
while(it1.hasNext())
{
PortalStock portalStock1 = (PortalStock)it1.next();
Iterator it2=map.keySet().iterator();
Iterator it3=map.values().iterator();
PortalStock portalStock=new PortalStock();
boolean isHasSamePartno = false;
while(it2.hasNext()){
String Partno = (String)it2.next();
PortalStock portalStock2 = (PortalStock)it3.next();
if(portalStock1.getPartno().equals(Partno))这里用isHasSamePartno来判断在hashmap是否存在跟list一样的对象
{
BigDecimal qty = portalStock2.getTotalqty();
BigDecimal bottles = portalStock2.getTotalbottles();
BigDecimal weight = portalStock2.getTotalweight();
BigDecimal reciverqty = portalStock1.getReciveqty();
BigDecimal reciverbottles = portalStock1.getRecivebottles();
BigDecimal reciverweight = portalStock1.getReciveweight();
BigDecimal deliverqty = portalStock1.getDeliverqty();
BigDecimal deliverbottles = portalStock1.getDeliverbottles();
BigDecimal deliverweight = portalStock1.getDeliverweight();
if("IN".equals(portalStock1.getStatus()))
{
portalStock1.setTotalqty(qty.add(reciverqty));
portalStock1.setTotalbottles(bottles.add(reciverbottles));
portalStock1.setTotalweight(weight.add(reciverweight));
portalStock2.setTotalqty(qty.add(reciverqty));
portalStock2.setTotalbottles(bottles.add(reciverbottles));
portalStock2.setTotalweight(weight.add(reciverweight));
}else if("OUT".equals(portalStock1.getStatus())){
portalStock1.setTotalqty(qty.subtract(deliverqty));
portalStock1.setTotalbottles(bottles.subtract(deliverbottles));
portalStock1.setTotalweight(weight.subtract(deliverweight));
portalStock2.setTotalqty(qty.subtract(deliverqty));
portalStock2.setTotalbottles(bottles.subtract(deliverbottles));
portalStock2.setTotalweight(weight.subtract(deliverweight));
}
isHasSamePartno = true;
break;
}
}
if(!isHasSamePartno){//这里用isHasSamePartno来判断在hashmap是否存在跟list一样的对象
BigDecimal zero = new BigDecimal(0);
String status = portalStock1.getStatus();
BigDecimal reciverqty = portalStock1.getReciveqty();
BigDecimal reciverbottles = portalStock1.getRecivebottles();
BigDecimal reciverweight = portalStock1.getReciveweight();
BigDecimal deliverqty = portalStock1.getDeliverqty();
BigDecimal deliverbottles = portalStock1.getDeliverbottles();
BigDecimal deliverweight = portalStock1.getDeliverweight();
if("IN".equals(status))
{
portalStock1.setTotalqty(zero.add(reciverqty));
portalStock1.setTotalbottles(zero.add(reciverbottles));
portalStock1.setTotalweight(zero.add(reciverweight));
//这里使用了另一个对象,否则就会出现List Hashmap引用同一个对象这样就会导致错误
portalStock.setTotalqty(portalStock1.getTotalqty());
portalStock.setTotalbottles(portalStock1.getTotalbottles());
portalStock.setTotalweight(portalStock1.getTotalweight());
}else if("OUT".equals(status)){
portalStock1.setTotalqty(zero.subtract(deliverqty));
portalStock1.setTotalbottles(zero.subtract(deliverbottles));
portalStock1.setTotalweight(zero.subtract(deliverweight));
//这里使用了另一个对象,否则就会出现List Hashmap引用同一个对象这样就会导致错误
portalStock.setTotalqty(portalStock1.getTotalqty());
portalStock.setTotalbottles(portalStock1.getTotalbottles());
portalStock.setTotalweight(portalStock1.getTotalweight());
}
map.put(portalStock1.getPartno(), portalStock);
}
}
return list;
}
public static void main(String[] args) {
// PortalStockBO psbo = new PortalStockBO();
// PortalStockSearchForm form = new PortalStockSearchForm();
// PortalStockCondition condition = new PortalStockCondition();
// condition.setPaymentcustomer("325399");
// condition.setOtime1("2006-1-1");
// condition.setOtime2("2007-5-1");
// form.setCondition(condition);
// psbo.process1(form);
// List list = psbo.process1(form);
// psbo.execute();
// System.out.print(list.size());
}
public List getResults() {
return results;
}
}