库存调拨 java 实现方式

项目开发中客户提出一个要求:

  我只选择商品和数量,完成商品的移库操作

在开发中发现这里商品又有批次的问题,那么计算成本的时候又需要根据批次来计算他的成本,那么这样就产生了几个问题

  1.当某个商品的这个批次所对应的库存数量足够他调拨时的数量

  2.当某个商品的这个批次不够的他需要调拨的数量,我就必须累加下一个批次的数量在这里又发现几种情况

    2.1当两个批次正好够的情况

    2.2 当两个批次大于他的情况

      这里就涉及到要修改最后一条数据的库存数量

    2.3 当两个批次还不够的情况

  3.修改库存数量

    如果调入仓库没有该批次的商品数量,我会插入一条新纪录

    

这些所有情况都需要调拨完成之后修改对应的库存信息

  下面是具体代码

  数据库结构

  库存调拨 java  实现方式

  下面是实现代码

  通用的JDBC 

  

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import java.sql.ResultSetMetaData;


public class DBUtil {
    
    private static String url = "jdbc:jtds:sqlserver://192.168.1.182:1433/erp";
    private static String driverClass = "net.sourceforge.jtds.jdbc.Driver";
    private static String userName = "sa";
    private static String pwd = "admin";
    
    public static final Connection getConn() {
        Connection conn = null;
        try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        
        try {
            conn = DriverManager.getConnection(url, userName, pwd);
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return conn;
    }
    
    public static void beginTransaction(Connection conn) throws SQLException{
        if(conn == null||conn.isClosed()){
            throw new SQLException("数据库连接异常");
        }
        conn.setAutoCommit(false);
    }
    
    public static void commit(Connection conn) throws SQLException{
        if(conn == null||conn.isClosed()){
            throw new SQLException("数据库连接异常");
        }
        conn.commit();
        conn.setAutoCommit(true);
    }
    
    public static boolean update(Connection conn,String sql) throws Exception{
        Statement state = conn.createStatement();
        int bs = state.executeUpdate(sql);
        return bs>0;
    }
    
    public static List<Map<String,Object>> query(Connection conn,String sql ){

        List<Map<String, Object>> restList = null;
        
        try {
            restList = new ArrayList<Map<String, Object>>();
            
            PreparedStatement prepState = conn.prepareStatement(sql);
            ResultSet result = prepState.executeQuery();
            ResultSetMetaData metaData = result.getMetaData();
            int colCount = metaData.getColumnCount();
            while(result.next()){
                Map<String,Object> map = new HashMap<String,Object>();
                for(int i = 1 ; i<=colCount; i++){
                    String colName = metaData.getColumnName(i);
                    Object value = result.getObject(i);
                    map.put(colName,value);
                }
                restList.add(map);
            }


        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return restList;
    }
}

   实现的主函数

 

package com;

import java.sql.Connection;
import java.util.List;
import java.util.Map;


public class WzdpService {
    
    public static void main(String args[]){
        try {
            WzdpService wzdp = new WzdpService();
            wzdp.one(20,"a","y","x");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public  void one(int sl,String spmc,String kfmc,String toKf) throws Exception{
        int sysl = 0;//剩余物资数量
        int dbsl = 0;//调拨数量

        //查询总库总数量
        String sql1 = "select sum(sl) cnt from test where ck = ‘"+kfmc+"‘ and sp = ‘"+spmc+"‘ order by cnt desc ";
        Connection conn = DBUtil.getConn();
        List<Map<String,Object>> result2 = DBUtil.query(conn, sql1);
        Map<String,Object> spxx2 = result2.get(0);
        if(spxx2 == null){
            System.out.println("无相关物品!");
            return;
        }
        int csl =  Integer.valueOf(spxx2.get("cnt").toString());
        //判断库存数量能否满足调拨数量
        if(csl<sl){
            System.out.println("物品数量不足");
            return;
        }

        String sql = "select id,sp,pc,ck,sl from test where ck = ‘" + kfmc + "‘ and sp = ‘"
                + spmc + "‘ order by sl desc ";

        List<Map<String, Object>> result = DBUtil.query(conn, sql);
        Map<String, Object> spxx = result.get(0);
        if (spxx == null) {
            System.out.println("无相关物品!");
            return;
        }
        int zkmxsl = Integer.valueOf(spxx.get("sl").toString());
        if (zkmxsl == 0) {
            return;
        }
        String sp = (String) spxx.get("sp");
        String pc = (String) spxx.get("pc");
        String ck = (String) spxx.get("ck");
        DBUtil.beginTransaction(conn);
        // 1、库房单批次数量满足 mxsl>=sl mxsl - sl = nsl
        // 2、库当批次数量不满足 mxsl<sl 查询所有批次

        if (zkmxsl >= sl) {

            dbsl = sl;

        } else {
            sysl = sl - zkmxsl;
            dbsl = zkmxsl;
        }
        // 入库
        String cxsql = "select id,sp,pc,ck,sl from test where ck = ‘" + toKf
                + "‘ and sp = ‘" + sp + "‘ and pc = ‘" + pc + "‘";
        List<Map<String, Object>> result1 = DBUtil.query(conn, cxsql);
        if (result1.isEmpty()) {
            String insert = "insert into test(SP,PC,CK,SL) values (‘" + sp
                    + "‘,‘" + pc + "‘,‘" + toKf + "‘,‘" + dbsl + "‘)";
            DBUtil.update(conn, insert);
        } else {
            Map<String, Object> spxx1 = result1.get(0);
            int nsl = Integer.valueOf(spxx1.get("sl").toString());
            nsl = nsl + dbsl;
            String update = "update test set sl = " + nsl + " where ck = ‘"
                    + toKf + "‘ and sp = ‘" + sp + "‘ and pc = ‘" + pc + "‘";
            DBUtil.update(conn, update);
        }
        // 出库
        dbsl = zkmxsl - sl;
        if (dbsl < 0) {
            dbsl = 0;
        }
        String updateZk = "update test set sl = " + dbsl + " where ck = ‘"
                + kfmc + "‘ and sp = ‘" + sp + "‘ and  pc = ‘" + pc + "‘";

        DBUtil.update(conn, updateZk);

        DBUtil.commit(conn);

        if (sysl <= 0) {
            return;
        }
        
        one(sysl, spmc, kfmc, toKf);
    
    }
}
库存调拨 java  实现方式

库存调拨 java 实现方式,布布扣,bubuko.com

库存调拨 java 实现方式

上一篇:python时间格式处理


下一篇:Python 将pdf转换成txt(不处理图片)