Android手持机扫码出入库的开发详解-5.基础数据下载更新
基础数据下载/更新
基础数据下载程序图
flowchart TD
A[用户操作] --> B{操作类型}
B -->|获取开票日期| C1[启动QueryAddressTask异步任务]
B -->|下载领料单| C2[启动QueryAddressTask异步任务]
B -->|下载材料编码表| C3[启动QueryAddressTask异步任务]
B -->|下载库管员编码表| C4[启动QueryAddressTask异步任务]
B -->|下载厂家编码表| C5[启动QueryAddressTask异步任务]
C1 --> D[doInBackground执行]
C2 --> D
C3 --> D
C4 --> D
C5 --> D
D --> E{根据参数执行查询}
E -->|获取开票日期| F1[GetTheDate]
E -->|领料单| F2[QueryServerBillingData]
E -->|材料编码表| F3[QueryServerBillOfMaterialData]
E -->|库管员编码表| F4[QueryServerStoreKeeperData]
E -->|厂家编码表| F5[QueryServerManufacturerData]
F1 --> G1[构建MSSQL查询日期语句]
F2 --> G2[构建MSSQL查询领料单语句]
F3 --> G3[构建MSSQL查询材料编码表语句]
F4 --> G4[构建MSSQL查询库管员编码表语句]
F5 --> G5[构建MSSQL查询厂家编码表语句]
G1 --> H[调用QueryData.RsRowsColsNotPares执行MSSQL查询]
G2 --> H
G3 --> H
G4 --> H
G5 --> H
H --> I[获取查询结果]
I --> J{结果类型}
J -->|日期数据| K1[将结果添加到日期列表]
J -->|其他数据| K2[将结果映射到实体对象列表]
K1 --> L1[返回日期获取结果]
K2 --> L2[打开或创建SQLite数据库]
L2 --> M[调用DAO的insertDatas方法]
M --> N[开始SQLite事务]
N --> O[批量插入数据到SQLite]
O --> P[设置事务成功]
P --> Q[结束事务]
Q --> R[返回下载结果]
L1 --> S[onPostExecute执行]
R --> S
S --> T{根据操作类型更新UI}
T -->|获取日期| U1[更新日期下拉列表]
T -->|下载数据| U2[显示下载结果统计信息]
基础数据下载源代码
核心控制器:DownloadData.java
class QueryAddressTask extends AsyncTask<String, Integer, String> {
String result = "";
@Override
protected String doInBackground(String... params) {
try {
switch (params[0].toString()) {
case "获取开票日期":
result = GetTheDate();
break;
case "A库":
case "B库":
case "C库":
result = QueryServerBillingData();
break;
case "材料编码表":
result = QueryServerBillOfMaterialData();
break;
case "库管员编码表":
result = QueryServerStoreKeeperData();
break;
case "厂家编码表":
result = QueryServerManufacturerData();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
switch (str_Action.toString()) {
case "A库":
case "B库":
case "C库":
case "材料编码表":
case "库管员编码表":
case "厂家编码表":
textView_DownloadData_QueryInfo.setText("数据读取完毕!");
editText_DownloadData_QueryData.setText(result);
break;
case "获取开票日期":
textView_DownloadData_QueryInfo.setText(result);
dropDownListView_DownloadData_Date.setItemsData(list_Date);
break;
}
}
}
public String GetTheDate() {
Date date = new Date();
long begin_date = date.getTime();
String str = "";
String oSql = "";
switch (str_WarehouseName.toString()) {
case "A库":
oSql = "SELECT DISTINCT TOP 30 CONVERT(VARCHAR(10),开票时间,120) AS 开票时间 " +
"FROM MES_CBHS..成本核算_月领料单A " +
"WHERE 开票时间 BETWEEN GETDATE()-30 AND GETDATE() AND 材料价格=0 ORDER BY 开票时间 DESC";
break;
case "B库":
oSql = "SELECT DISTINCT TOP 30 CONVERT(VARCHAR(10),开票时间,120) AS 开票时间 " +
"FROM MES_CBHS..成本核算_月领料单B " +
"WHERE 开票时间 BETWEEN GETDATE()-30 AND GETDATE() AND 材料价格=0 ORDER BY 开票时间 DESC";
break;
case "C库":
oSql = "SELECT DISTINCT TOP 30 CONVERT(VARCHAR(10),开票时间,120) AS 开票时间 " +
"FROM MES_CBHS..成本核算_月领料单C " +
"WHERE 开票时间 BETWEEN GETDATE()-30 AND GETDATE() AND 材料价格=0 ORDER BY 开票时间 DESC";
break;
}
String[][] rs = new String[0][];
try {
rs = QueryData.RsRowsColsNotPares(oSql.toString());
} catch (SQLException e) {
e.printStackTrace();
}
list_Date.clear();
for (int i = 0; i < rs.length; i++) {
list_Date.add(rs[i][0].toString());
}
date = new Date();
long end_date = date.getTime();
str = "共耗时" + String.valueOf(end_date - begin_date).toString() + "毫秒\n" + "本次共获取" + list_Date.size() + "个日期";
return str;
}
public String QueryServerBillingData() {
Date date = new Date();
long begin_date = date.getTime();
String str = "";
String oSql = "SELECT " +
"'" + str_WarehouseName + "' as 扫码仓库," +
"A.编号," +
"A.材料编号," +
"A.材料名称," +
"A.材料规格," +
"A.单位," +
"CAST(A.实领数量 AS INT) AS 实领数量," +
"A.库管员," +
"CONVERT(VARCHAR(10),A.日期,120) AS 日期," +
"A.开票人," +
"CONVERT(VARCHAR(19),A.开票时间,120) AS 开票时间," +
"ISNULL(B.材料条码,'') AS 材料条码" +
" FROM (" +
"SELECT *,'' AS 材料规格A" +
" FROM MES_CBHS..成本核算_月领料单" + str_WarehouseName.replace("库", "").toString() +
" WHERE 开票时间 BETWEEN '" + str_Date.toString() + "' AND '" + str_Date.toString() + " 23:59:59' AND 材料价格=0" +
") A " +
" LEFT JOIN (" +
"SELECT *,'' AS 材料规格A" +
" FROM MES_CBHS..成本核算_价格库" +
" WHERE 材料编号1 like 'B%' and 材料条码<>''" +
") B " +
" ON A.材料编号=B.材料编号1 AND A.材料名称=B.材料名称";
String[][] rs = new String[0][];
try {
rs = QueryData.RsRowsColsNotPares(oSql.toString());
} catch (SQLException e) {
e.printStackTrace();
}
List<Billing> billings = new ArrayList<Billing>();
for (int i = 0; i < rs.length; i++) {
Billing billing = new Billing();
billing.setStr_扫码仓库(rs[i][0].toString());
billing.setStr_编号(rs[i][1].toString());
billing.setStr_材料编号(rs[i][2].toString());
billing.setStr_材料名称(rs[i][3].toString());
billing.setStr_材料规格(rs[i][4].toString());
billing.setStr_单位(rs[i][5].toString());
billing.setInt_实领数量(Integer.parseInt(rs[i][6].toString()));
billing.setStr_库管员(rs[i][7].toString());
billing.setStr_日期(rs[i][8].toString());
billing.setStr_开票人(rs[i][9].toString());
billing.setStr_开票时间(rs[i][10].toString());
billing.setStr_材料条码(rs[i][11].toString());
billings.add(billing);
}
try {
if (sda == null) {
OpenOrCreateDatabase();
}
Cursor cursor = dao_Billing.insertDatas(db, billings);
} catch (Exception e) {
e.printStackTrace();
}
date = new Date();
long end_date = date.getTime();
str = "共耗时" + String.valueOf(end_date - begin_date).toString() + "毫秒\n" + "本次共下载" + billings.size() + "条记录";
return str;
}
public String QueryServerBillOfMaterialData() {
Date date = new Date();
long begin_date = date.getTime();
String str = "";
String oSql = "SELECT " +
"ISNULL(材料名称,SPACE(20)) AS 材料名称," +
"ISNULL(材料规格,SPACE(50)) AS 材料规格," +
"ISNULL(颜色,SPACE(20)) 颜色," +
"ISNULL(CBW对照号,SPACE(15)) as CBW对照号," +
"ISNULL(编码,SPACE(10)) as 材料条码," +
"ISNULL(单位,SPACE(10)) as 单位" +
" FROM 材料编码表 " +
" ORDER BY 材料条码";
String[][] rs = new String[0][];
try {
rs = QueryData.RsRowsColsNotPares(oSql.toString());
} catch (SQLException e) {
e.printStackTrace();
}
List<BillOfMaterial> materials = new ArrayList<BillOfMaterial>();
for (int i = 0; i < rs.length; i++) {
BillOfMaterial material = new BillOfMaterial();
material.setStr_材料名称(rs[i][0].toString());
material.setStr_材料规格(rs[i][1].toString());
material.setStr_颜色(rs[i][2].toString());
material.setStr_CBW对照号(rs[i][3].toString());
material.setStr_材料条码(rs[i][4].toString());
material.setStr_单位(rs[i][5].toString());
materials.add(material);
}
try {
if (sda == null) {
OpenOrCreateDatabase();
}
Cursor cursor = dao_BillOfMaterial.insertDatas(db, materials);
} catch (Exception e) {
e.printStackTrace();
}
date = new Date();
long end_date = date.getTime();
str = "共耗时" + String.valueOf(end_date - begin_date).toString() + "毫秒\n" + "本次共下载" + materials.size() + "条记录";
return str;
}
public String QueryServerStoreKeeperData() {
Date date = new Date();
long begin_date = date.getTime();
String str = "";
String oSql = "SELECT " +
"ISNULL(保管员姓名,SPACE(10)) AS 库管员," +
"ISNULL(保管员编码,SPACE(2)) AS 库管编码" +
" FROM 保管员编码表 " +
" ORDER BY 库管编码";
String[][] rs = new String[0][];
try {
rs = QueryData.RsRowsColsNotPares(oSql.toString());
} catch (SQLException e) {
e.printStackTrace();
}
List<StoreKeeper> keepers = new ArrayList<StoreKeeper>();
for (int i = 0; i < rs.length; i++) {
StoreKeeper keeper = new StoreKeeper();
keeper.setStr_库管员(rs[i][0].toString());
keeper.setStr_库管编码(rs[i][1].toString());
keepers.add(keeper);
}
try {
if (sda == null) {
OpenOrCreateDatabase();
}
Cursor cursor = dao_StoreKeeper.insertDatas(db, keepers);
} catch (Exception e) {
e.printStackTrace();
}
date = new Date();
long end_date = date.getTime();
str = "共耗时" + String.valueOf(end_date - begin_date).toString() + "毫秒\n" + "本次共下载" + keepers.size() + "条记录";
return str;
}
public String QueryServerManufacturerData() {
Date date = new Date();
long begin_date = date.getTime();
String str = "";
String oSql = "SELECT " +
"ISNULL(厂家缩写,SPACE(20)) AS 厂家缩写," +
"ISNULL(厂家编码,SPACE(10)) AS 厂家代码" +
" FROM 厂家编码表 " +
" WHERE DEPT='采购部'" +
" ORDER BY 厂家代码";
String[][] rs = new String[0][];
try {
rs = QueryData.RsRowsColsNotPares(oSql.toString());
} catch (SQLException e) {
e.printStackTrace();
}
List<Manufacturer> manufacturers = new ArrayList<Manufacturer>();
for (int i = 0; i < rs.length; i++) {
Manufacturer manufacturer = new Manufacturer();
manufacturer.setStr_厂家缩写(rs[i][0].toString());
manufacturer.setStr_厂家代码(rs[i][1].toString());
manufacturers.add(manufacturer);
}
try {
if (sda == null) {
OpenOrCreateDatabase();
}
Cursor cursor = dao_Manufacturer.insertDatas(db, manufacturers);
} catch (Exception e) {
e.printStackTrace();
}
date = new Date();
long end_date = date.getTime();
str = "共耗时" + String.valueOf(end_date - begin_date).toString() + "毫秒\n" + "本次共下载" + manufacturers.size() + "条记录";
return str;
}
private void OpenOrCreateDatabase() {
sda = new SqliteDBConnection(this);
sda.open();
db = sda.getDb();
}
private void CloseDatabase() {
if (db != null && db.isOpen()) {
db.close();
sda.close();
db = null;
sda = null;
}
}
实体类:Billing.java
public class Billing implements Serializable {
private String str_扫码仓库;
private String str_编号;
private String str_材料编号;
private String str_材料名称;
private String str_材料规格;
private String str_单位;
private int int_实领数量;
private String str_库管员;
private String str_日期;
private String str_开票人;
private String str_开票时间;
private String str_材料条码;
private long Long_ID;
}
DAO接口:BillingDAO.java
public interface BillingDAO {
public Cursor insertData(SQLiteDatabase db, Billing billing) throws Exception;
public Cursor insertDatas(SQLiteDatabase db, List<Billing> billings) throws Exception;
public String createTable(SQLiteDatabase db) throws Exception;
}
DAO实现类:BillingDAOSqliteImpl.java
@Override
public Cursor insertDatas(SQLiteDatabase db, List<Billing> billings) throws Exception {
ContentValues initialValues;
Cursor cursor=null;
db.beginTransaction();
try {
for(Billing billing:billings){
initialValues = new ContentValues();
initialValues.put(KEY_扫码仓库,billing.getStr_扫码仓库());
initialValues.put(KEY_编号,billing.getStr_编号());
initialValues.put(KEY_材料编号,billing.getStr_材料编号());
initialValues.put(KEY_材料名称,billing.getStr_材料名称());
initialValues.put(KEY_材料规格,billing.getStr_材料规格());
initialValues.put(KEY_单位,billing.getStr_单位());
initialValues.put(KEY_实领数量,billing.getInt_实领数量());
initialValues.put(KEY_库管员,billing.getStr_库管员());
initialValues.put(KEY_日期,billing.getStr_日期());
initialValues.put(KEY_开票人,billing.getStr_开票人());
initialValues.put(KEY_开票时间,billing.getStr_开票时间());
initialValues.put(KEY_材料条码,billing.getStr_材料条码());
db.insert(DATABASE_TABLE, null, initialValues);
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
String str_Sql = "select _id,扫码仓库,编号,材料编号,材料名称,材料规格,单位,实领数量,库管员,日期,开票人,开票时间,材料条码 from billings";
cursor = sqliteQueryData.RowsCols(db, str_Sql);
return cursor;
}