Java-单机版的书店管理系统(练习设计模块和思想_系列汇总(3))

简介: Java-单机版的书店管理系统(练习设计模块和思想_系列汇总)

逻辑层工厂类StockEbiFactory:

package cn.hncu.bookStore.stock.business.factory;
import cn.hncu.bookStore.stock.business.ebi.StockEbi;
import cn.hncu.bookStore.stock.business.ebo.StockEbo;
/**
 * 库存逻辑层工厂类
 * @author 陈浩翔
 *
 * @version 1.0  2016-4-20
 */
public class StockEbiFactory {
    /**
     * 工厂方法
     * @return---new一个逻辑层实现类
     */
    public static StockEbi getStockEbi(){
        return new StockEbo();
    }
}


值对象StockModel:

package cn.hncu.bookStore.stock.vo;
import java.io.Serializable;
/**
 * 库存封装值对象
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class StockModel implements Serializable{
    //库存编号
    private String uuid;
    //图书编号
    private String bookUuid;
    //库存数量
    private int sumNum;
    //为显示给用户看而补的
    private String bookName;
    public String getUuid() {
        return uuid;
    }
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
    public String getBookUuid() {
        return bookUuid;
    }
    public void setBookUuid(String bookUuid) {
        this.bookUuid = bookUuid;
    }
    public int getSumNum() {
        return sumNum;
    }
    public void setSumNum(int sumNum) {
        this.sumNum = sumNum;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        StockModel other = (StockModel) obj;
        if (uuid == null) {
            if (other.uuid != null)
                return false;
        } else if (!uuid.equals(other.uuid))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "库存编号:"+uuid + ", 《" + bookName
                + "》, 库存数量:" + sumNum+"本";
    }
}

查询值对象StockQueryModel:

package cn.hncu.bookStore.stock.vo;
/**
 * 库存查询值对象封装
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class StockQueryModel extends StockModel{
    //最大的图书库存数量
    private int sumNum2;
    public int getSumNum2() {
        return sumNum2;
    }
    public void setSumNum2(int sumNum2) {
        this.sumNum2 = sumNum2;
    }
}

表现层库存列表StockListPanel:

/*
 * StockListPanel.java
 *
 * Created on __DATE__, __TIME__
 */
package cn.hncu.bookStore.stock.ui;
import java.util.List;
import javax.swing.JFrame;
import cn.hncu.bookStore.stock.business.factory.StockEbiFactory;
import cn.hncu.bookStore.stock.vo.StockModel;
/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0  2016-4-20
 */
public class StockListPanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;
    /** Creates new form StockListPanel */
    public StockListPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }
    public StockListPanel(JFrame mainFrame, List<StockModel> results) {
        this.mainFrame = mainFrame;
        initComponents();
        jListStocks.setListData(results.toArray());
    }
    private void myInitData() {
        List<StockModel> lists = StockEbiFactory.getStockEbi().getAll();
        jListStocks.setListData(lists.toArray());
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    //GEN-BEGIN:initComponents
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jListStocks = new javax.swing.JList();
        btnQuery = new javax.swing.JButton();
        setMinimumSize(new java.awt.Dimension(800, 600));
        setLayout(null);
        jLabel1.setFont(new java.awt.Font("微软雅黑", 1, 48));
        jLabel1.setForeground(new java.awt.Color(255, 0, 0));
        jLabel1.setText("\u5e93\u5b58\u5217\u8868");
        add(jLabel1);
        jLabel1.setBounds(280, 0, 220, 90);
        jListStocks.setFont(new java.awt.Font("微软雅黑", 1, 18));
        jListStocks.setForeground(new java.awt.Color(0, 0, 153));
        jListStocks.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "" };
            public int getSize() {
                return strings.length;
            }
            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        jScrollPane1.setViewportView(jListStocks);
        add(jScrollPane1);
        jScrollPane1.setBounds(120, 100, 520, 320);
        btnQuery.setFont(new java.awt.Font("Dialog", 1, 36));
        btnQuery.setForeground(new java.awt.Color(255, 0, 51));
        btnQuery.setText("\u67e5\u8be2\u5e93\u5b58");
        btnQuery.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnQueryActionPerformed(evt);
            }
        });
        add(btnQuery);
        btnQuery.setBounds(270, 440, 190, 90);
    }// </editor-fold>
    //GEN-END:initComponents
    private void btnQueryActionPerformed(java.awt.event.ActionEvent evt) {
        mainFrame.setContentPane(new StockQueryPanel(mainFrame));
        mainFrame.validate();
    }
    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnQuery;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JList jListStocks;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables
}

表现层库存查询StockQueryPanel:

/*
 * StockQueryPanel.java
 *
 * Created on __DATE__, __TIME__
 */
package cn.hncu.bookStore.stock.ui;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import cn.hncu.bookStore.book.business.factory.BookEbiFactory;
import cn.hncu.bookStore.book.vo.BookModel;
import cn.hncu.bookStore.stock.business.factory.StockEbiFactory;
import cn.hncu.bookStore.stock.vo.StockModel;
import cn.hncu.bookStore.stock.vo.StockQueryModel;
/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0  2016-4-20
 */
public class StockQueryPanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;
    /** Creates new form StockQueryPanel 
     * @param mainFrame */
    public StockQueryPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }
    /**
     * 初始化图书box
     */
    private void myInitData() {
        List<BookModel> books = BookEbiFactory.getBookEbi().getAll();
        for(BookModel book:books){
            combBook.addItem(book.getName());
        }
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    //GEN-BEGIN:initComponents
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        tfdStockUuid = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        combBook = new javax.swing.JComboBox();
        jLabel8 = new javax.swing.JLabel();
        tfdStockNum = new javax.swing.JTextField();
        jLabel11 = new javax.swing.JLabel();
        tfdStockNum2 = new javax.swing.JTextField();
        btnQuery = new javax.swing.JButton();
        btnBack = new javax.swing.JButton();
        setMinimumSize(new java.awt.Dimension(800, 600));
        setLayout(null);
        jLabel1.setFont(new java.awt.Font("Dialog", 1, 48));
        jLabel1.setForeground(new java.awt.Color(255, 0, 0));
        jLabel1.setText("\u5e93\u5b58\u67e5\u8be2");
        add(jLabel1);
        jLabel1.setBounds(270, 0, 230, 90);
        jLabel7.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel7.setText("\u5e93\u5b58\u7f16\u53f7:");
        add(jLabel7);
        jLabel7.setBounds(80, 160, 80, 30);
        add(tfdStockUuid);
        tfdStockUuid.setBounds(180, 160, 150, 30);
        jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel5.setText("\u56fe\u4e66:");
        add(jLabel5);
        jLabel5.setBounds(430, 150, 50, 30);
        combBook.setFont(new java.awt.Font("Dialog", 1, 18));
        combBook.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "查询所有" }));
        add(combBook);
        combBook.setBounds(490, 150, 190, 30);
        jLabel8.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel8.setText("\u5e93\u5b58\u6700\u5c0f\u6570\u91cf:");
        add(jLabel8);
        jLabel8.setBounds(50, 270, 140, 30);
        add(tfdStockNum);
        tfdStockNum.setBounds(180, 270, 150, 30);
        jLabel11.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel11.setText("\u5e93\u5b58\u6700\u5927\u6570\u91cf:");
        add(jLabel11);
        jLabel11.setBounds(360, 270, 120, 30);
        add(tfdStockNum2);
        tfdStockNum2.setBounds(490, 270, 190, 30);
        btnQuery.setFont(new java.awt.Font("Dialog", 1, 24));
        btnQuery.setForeground(new java.awt.Color(255, 0, 51));
        btnQuery.setText("\u67e5\u8be2");
        btnQuery.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnQueryActionPerformed(evt);
            }
        });
        add(btnQuery);
        btnQuery.setBounds(140, 410, 120, 70);
        btnBack.setFont(new java.awt.Font("Dialog", 1, 24));
        btnBack.setForeground(new java.awt.Color(255, 0, 51));
        btnBack.setText("\u8fd4\u56de");
        btnBack.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBackActionPerformed(evt);
            }
        });
        add(btnBack);
        btnBack.setBounds(490, 410, 120, 70);
    }// </editor-fold>
    //GEN-END:initComponents
    private void btnQueryActionPerformed(java.awt.event.ActionEvent evt) {
        // 1收集参数(且验证输入有效性)
        //库存编号
        String uuid = tfdStockUuid.getText();
        //图书编号
        String bookUuid = null;
        if (combBook.getSelectedIndex() > 0) {
            bookUuid = BookEbiFactory.getBookEbi()
                    .getBookByName(combBook.getSelectedItem().toString())
                    .getUuid();
        }
        //库存最小数量
        int sumNum = 0;
        if (tfdStockNum.getText() != null
                && tfdStockNum.getText().trim().length() > 0) {
            try {
                sumNum = Integer.parseInt(tfdStockNum.getText());
                if (sumNum < 0) {
                    throw new NumberFormatException();
                }
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(mainFrame, "库存最小数量必须输入正整数!");
                return;
            }
        }
        //库存最大数量
        int sumNum2 = 0;
        if (tfdStockNum2.getText() != null
                && tfdStockNum2.getText().trim().length() > 0) {
            try {
                sumNum2 = Integer.parseInt(tfdStockNum2.getText());
                if (sumNum2 < 0) {
                    throw new NumberFormatException();
                }
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(mainFrame, "库存最大数量必须输入正整数!");
                return;
            }
        }
        // 2组织参数----StockQueryModel
        StockQueryModel sqm = new StockQueryModel();
        sqm.setUuid(uuid);
        sqm.setBookUuid(bookUuid);
        sqm.setSumNum(sumNum);
        sqm.setSumNum2(sumNum2);
        // 3调用逻辑层
        List<StockModel> results = StockEbiFactory.getStockEbi()
                .getByCondition(sqm);
        // 4返回到结果页面
        mainFrame.setContentPane(new StockListPanel(mainFrame, results));
        mainFrame.validate();
    }
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {
        back();
    }
    private void back() {
        mainFrame.setContentPane(new StockListPanel(mainFrame));
        mainFrame.validate();
    }
    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnBack;
    private javax.swing.JButton btnQuery;
    private javax.swing.JComboBox combBook;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JTextField tfdStockNum;
    private javax.swing.JTextField tfdStockNum2;
    private javax.swing.JTextField tfdStockUuid;
    // End of variables declaration//GEN-END:variables
}

进货模块:

进货模块的逻辑层接口,在写了库存模块之后改了一点,增加了和库存模块的串接:

逻辑层接口InMainEbo:


package cn.hncu.bookStore.in.business.ebo;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import cn.hncu.bookStore.book.business.ebi.BookEbi;
import cn.hncu.bookStore.book.business.factory.BookEbiFactory;
import cn.hncu.bookStore.common.UuidModelConstance;
import cn.hncu.bookStore.common.uuid.dao.dao.UuidDao;
import cn.hncu.bookStore.common.uuid.dao.factory.UuidDaoFactory;
import cn.hncu.bookStore.in.business.ebi.InMainEbi;
import cn.hncu.bookStore.in.business.factory.InMainEbiFactory;
import cn.hncu.bookStore.in.dao.dao.InDetailDao;
import cn.hncu.bookStore.in.dao.dao.InMainDao;
import cn.hncu.bookStore.in.dao.factory.InDetailDaoFactory;
import cn.hncu.bookStore.in.dao.factory.InMainDaoFactory;
import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InDetailQueryModel;
import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.in.vo.InMainQueryModel;
import cn.hncu.bookStore.stock.dao.dao.StockDao;
import cn.hncu.bookStore.stock.dao.factory.StockDaoFactory;
import cn.hncu.bookStore.stock.vo.StockModel;
import cn.hncu.bookStore.stock.vo.StockQueryModel;
/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class InMainEbo implements InMainEbi{
    //注入dao
    InMainDao inMainDao = InMainDaoFactory.getInMainDao();
    InDetailDao inDetailDao = InDetailDaoFactory.getInDetailDao();
    UuidDao uuidDao = UuidDaoFactory.getUuidDao();
    BookEbi bookEbi = BookEbiFactory.getBookEbi();
    @Override
    public boolean create(InMainModel inMain, List<InDetailModel> inDetails) {
        //1存储inMain信息///
        //补全inMain中的数据
        //需要:inUuid,inDate,inUserUuid   已组织:inUserUuid
        //还缺(需补):inUuid,inDate
        String inUuid = uuidDao.getNextUuid(UuidModelConstance.IN_MAIN);
        inMain.setUuid(inUuid);
        inMain.setInDate(System.currentTimeMillis());
        inMainDao.create(inMain);
         //2存储inDetail信息///
        for(InDetailModel model:inDetails){
            //补全每一个inDetail中的数据
            //需要:inDetailUuid,inMainUuid,bookUuid,sumNum,sumMoney   已组织:bookUuid,sumNum
            //还缺(需补):inDetailUuid,inMainUuid,sumMoney
            model.setUuid(uuidDao.getNextUuid(UuidModelConstance.IN_DETAIL));
            model.setInId(inUuid);
            double sumMoney = model.getSumNum() * bookEbi.getSingle(model.getBookId()).getInPrice();
            model.setSumMoney(sumMoney);
            inDetailDao.create(model);
            //※※※3 图书入库--到库存表格///
            putInStock(model.getBookId(),model.getSumNum());
        }
        return true;
    }
    /**
     * 入库动作
     * @param bookId
     * @param bookName
     */
    private void putInStock(String bookId, int sumNum) {
        //注入Stock模块的dao
        StockDao dao = StockDaoFactory.getStockDao();
        //查询库存,看看是否已经存在该bookUuid所对应的书,如果没有则库存数据为sumNum,否则为在原有基础上再加上sumNum
        StockQueryModel sqm = new StockQueryModel();
        sqm.setBookUuid(bookId);
        List<StockModel> lists = dao.getByCondition(sqm);
        //库存中没有这种书
        if(lists==null||lists.size()==0){
            //表现层只负责组织进货模块的值对象,库存模块我们在逻辑层自己补
            StockModel stock = new StockModel();
            //补:库存编号 uuid
            stock.setUuid(UuidDaoFactory.getUuidDao().getNextUuid(UuidModelConstance.STOCK));
            //补: bookName 专为显示给用户看的书名
            stock.setBookName(BookEbiFactory.getBookEbi().getSingle(bookId).getName());
            stock.setBookUuid(bookId);
            stock.setSumNum(sumNum);
            dao.create(stock);
        }else{//库存中已经存在该图书对应的库存记录
            StockModel stock = lists.get(0);
            stock.setSumNum( stock.getSumNum()+sumNum );
            dao.update(stock);
        }
    }
    @Override
    public Map<InMainModel, List<InDetailModel>> getAll() {
        Map<InMainModel,List<InDetailModel>> map = new TreeMap<InMainModel, List<InDetailModel>>();
        List<InMainModel> inMains = inMainDao.getAll();
        for(InMainModel inMain: inMains ){
            //查询条件值对象的创建
            InDetailQueryModel idqm = new InDetailQueryModel();
            String inUuid = inMain.getUuid();
            idqm.setInId(inUuid);
            List<InDetailModel> details = inDetailDao.getbyCondition(idqm);
            map.put(inMain, details);
        }
        return map;
    }
    @Override
    public Map<InMainModel, List<InDetailModel>> getByCondition(
            InMainQueryModel imqm, InDetailQueryModel idqm) {
        Map<InMainModel, List<InDetailModel>> map = new TreeMap<InMainModel, List<InDetailModel>>();
        List<InMainModel> list = inMainDao.getbyCondition(imqm);
        for(InMainModel inMain : list){
            idqm.setInId(inMain.getUuid());
            List<InDetailModel> details = inDetailDao.getbyCondition(idqm);
            if(details.size()!=0){
                map.put(inMain, details);
            }
        }
        return map;
    }
}

销售模块:

销售模块的逻辑层接口也增加了和库存模块的串接:

逻辑层接口OutMainEbo:

package cn.hncu.bookStore.out.business.ebo;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.swing.JOptionPane;
import cn.hncu.bookStore.book.business.ebi.BookEbi;
import cn.hncu.bookStore.book.business.factory.BookEbiFactory;
import cn.hncu.bookStore.common.UuidModelConstance;
import cn.hncu.bookStore.common.uuid.dao.dao.UuidDao;
import cn.hncu.bookStore.common.uuid.dao.factory.UuidDaoFactory;
import cn.hncu.bookStore.out.business.ebi.OutMainEbi;
import cn.hncu.bookStore.out.dao.dao.OutDetailDao;
import cn.hncu.bookStore.out.dao.dao.OutMainDao;
import cn.hncu.bookStore.out.dao.factory.OutDetailDaoFactory;
import cn.hncu.bookStore.out.dao.factory.OutMainDaoFactory;
import cn.hncu.bookStore.out.vo.OutDetailModel;
import cn.hncu.bookStore.out.vo.OutDetailQueryModel;
import cn.hncu.bookStore.out.vo.OutMainModel;
import cn.hncu.bookStore.out.vo.OutMainQueryModel;
import cn.hncu.bookStore.stock.business.factory.StockEbiFactory;
import cn.hncu.bookStore.stock.dao.dao.StockDao;
import cn.hncu.bookStore.stock.dao.factory.StockDaoFactory;
import cn.hncu.bookStore.stock.vo.StockModel;
import cn.hncu.bookStore.stock.vo.StockQueryModel;
/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class OutMainEbo implements OutMainEbi{
    //注入dao
    OutMainDao outMainDao = OutMainDaoFactory.getOutMainDao();
    OutDetailDao outDetailDao = OutDetailDaoFactory.getOutDetailDao();
    UuidDao uuidDao = UuidDaoFactory.getUuidDao();
    BookEbi bookEbi = BookEbiFactory.getBookEbi();
    @Override
    public boolean create(OutMainModel outMain, List<OutDetailModel> outDetails) {
        //※※※库存操作1:在添加销售信息之前要进行防护:检查库存,看是否可能库存不够。如果不够,本次添加直接失败,不进行数据存储---return false;
        //检查库存----用明细单(outDetail)中的bookUuid
        //注入Stock模块的dao
        StockDao stockDao = StockDaoFactory.getStockDao();
        for(OutDetailModel detail : outDetails){
            StockQueryModel sqm = new StockQueryModel();
            sqm.setBookUuid(detail.getBookId());
            List<StockModel> lists = stockDao.getByCondition(sqm);
            if(lists==null||lists.size()==0){//库存中没有该图书信息
                JOptionPane.showMessageDialog(null, "库存中不存在《"+detail.getBookName()+"》,本次销售添加失败!");
                return false;
            }else {
                StockModel sm = lists.get(0);
                if(sm.getSumNum()<detail.getSumNum()){
                    JOptionPane.showMessageDialog(null, "库存中《"+detail.getBookName()+"》数量不足,本次销售添加失败!");
                    return false;
                }
            }
        }
        //1存储outMain信息///
        //补全outMain中的数据
        //需要:inUuid,inDate,inUserUuid   已组织:inUserUuid
        //还缺(需补):inUuid,inDate
        String outUuid = uuidDao.getNextUuid(UuidModelConstance.OUT_MAIN);
        outMain.setUuid(outUuid);
        outMain.setOutDate(System.currentTimeMillis());
        outMainDao.create(outMain);
         //2存储inDetail信息///
        for(OutDetailModel model:outDetails){
            //补全每一个inDetail中的数据
            //需要:inDetailUuid,outMainUuid,bookUuid,sumNum,sumMoney   已组织:bookUuid,sumNum
            //还缺(需补):inDetailUuid,outMainUuid,sumMoney
            model.setUuid(uuidDao.getNextUuid(UuidModelConstance.OUT_DETAIL));
            model.setOutId(outUuid);
            double sumMoney = model.getSumNum() * bookEbi.getSingle(model.getBookId()).getSalePrice();
            model.setSumMoney(sumMoney);
            outDetailDao.create(model);
            //※※※库存操作2:更新库存---把对应的每种图书的数量  减去  这次销售的数量
            StockQueryModel sqm = new StockQueryModel();
            sqm.setBookUuid(model.getBookId());
            List<StockModel> stocks = StockEbiFactory.getStockEbi().getByCondition(sqm);
            //经过之前的防护,list里面一定有一个值,而且库存一定可以更新成功
            StockModel stock = stocks.get(0);
            stock.setSumNum(stock.getSumNum()-model.getSumNum());
            StockDaoFactory.getStockDao().update(stock);
        }
        return true;
    }
    @Override
    public Map<OutMainModel, List<OutDetailModel>> getAll() {
        Map<OutMainModel,List<OutDetailModel>> map = new TreeMap<OutMainModel, List<OutDetailModel>>();
        List<OutMainModel> outMains = outMainDao.getAll();
        for(OutMainModel outMain: outMains ){
            //查询条件值对象的创建
            OutDetailQueryModel odqm = new OutDetailQueryModel();
            String inUuid = outMain.getUuid();
            odqm.setOutId(inUuid);
            List<OutDetailModel> details = outDetailDao.getbyCondition(odqm);
            map.put(outMain, details);
        }
        return map;
    }
    @Override
    public Map<OutMainModel, List<OutDetailModel>> getByCondition(
            OutMainQueryModel imqm, OutDetailQueryModel odqm) {
        Map<OutMainModel, List<OutDetailModel>> map = new TreeMap<OutMainModel, List<OutDetailModel>>();
        List<OutMainModel> list = outMainDao.getbyCondition(imqm);
        for(OutMainModel outMain : list){
            odqm.setOutId(outMain.getUuid());
            List<OutDetailModel> details = outDetailDao.getbyCondition(odqm);
            if(details.size()!=0){
                map.put(outMain, details);
            }
        }
        return map;
    }
}
目录
相关文章
|
2月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
262 8
|
2月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
199 24
|
2月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
170 11
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
209 10
|
2月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
416 4
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
331 0
|
3月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
3月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
272 0
|
3月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
314 1
|
4月前
|
Java 数据库 前端开发
分享44个java系统,总有一款适合您
分享44个微信小程序,总有一款适合您
73 0