設(shè)備模塊更換APP開發(fā)文檔
設(shè)備模塊更換APP開發(fā)文檔
一、開發(fā)背景:
根據(jù)公司指示,有一批設(shè)備要進(jìn)行內(nèi)置模塊安裝,同時(shí)設(shè)備信息要和新裝的模塊信息進(jìn)行綁定,即在現(xiàn)場換裝的過程中,要記錄模塊的信息(資產(chǎn)編碼)與設(shè)備的信息(資產(chǎn)編碼),通過信息上傳后,到達(dá)主站,由后臺(tái)人員進(jìn)行信息綁定。
前期,此項(xiàng)工作都是由施工人員對(duì)現(xiàn)場的條碼進(jìn)行抄寫、拍照上傳,但由于工作過程中容易出現(xiàn)失誤,或者施工人員書寫不規(guī)范,遺漏等等問題,造成設(shè)備綁定時(shí)頻頻出現(xiàn)錯(cuò)誤情況,因此,特開發(fā)此App,目的是減輕施工人員的工作量,同時(shí),避免因施工人員誤操作或者手寫錯(cuò)誤,造成不必要的麻煩。
二、系統(tǒng)框架:
系統(tǒng)搭設(shè):
本系統(tǒng)手機(jī)端搭設(shè)APP軟件一套,用于信息采集,數(shù)據(jù)臨時(shí)儲(chǔ)存、數(shù)據(jù)上傳、數(shù)據(jù)查詢、參數(shù)設(shè)置以及人員注冊(cè)、登陸等內(nèi)容。當(dāng)數(shù)據(jù)采集完畢后,會(huì)在本地手機(jī)中進(jìn)行存儲(chǔ),等網(wǎng)絡(luò)暢通或者工作完成后,由施工人員進(jìn)行上傳操作,此時(shí),數(shù)據(jù)會(huì)按照一定的格式進(jìn)行編碼,通過WebService提供的接口上傳到服務(wù)器中。
服務(wù)器端采用WebService來進(jìn)行數(shù)據(jù)的接收和處理,將現(xiàn)場的數(shù)據(jù)信息按照一定的編碼格式進(jìn)行解碼,然后儲(chǔ)存到數(shù)據(jù)庫中;同時(shí),也能夠滿足后臺(tái)管理端的數(shù)據(jù)請(qǐng)求,按照一定的編碼將請(qǐng)求的數(shù)據(jù)進(jìn)行編碼,提供給后臺(tái)人員進(jìn)行查閱和下載。
后臺(tái)管理端負(fù)責(zé)將請(qǐng)求的數(shù)據(jù)進(jìn)行解碼,完成數(shù)據(jù)查閱和下載,同時(shí),也需要完成部分系統(tǒng)設(shè)置,參數(shù)、人員、權(quán)限等的管理行為。
三、詳細(xì)說明:
1.結(jié)構(gòu)說明:
本系統(tǒng)采用C#編程語言,數(shù)據(jù)庫為SQLServer數(shù)據(jù)庫,手機(jī)本地?cái)?shù)據(jù)庫采用Sqlite數(shù)據(jù)庫。
手機(jī)端采用Xamarin.Forms+MVVM形式進(jìn)行開發(fā),主要包含條形碼掃描、數(shù)據(jù)信息錄入、信息查詢、數(shù)據(jù)編碼、解碼等功能。數(shù)據(jù)本地存儲(chǔ)采用Sqlite數(shù)據(jù)庫進(jìn)行本地?cái)?shù)據(jù)暫存,數(shù)據(jù)采集完畢后需要對(duì)數(shù)據(jù)進(jìn)行暫存,必要時(shí)對(duì)數(shù)據(jù)進(jìn)行提取,并執(zhí)行上傳操作。
客戶機(jī)端采用WPF+MVVM的形式進(jìn)行開發(fā),同時(shí)設(shè)計(jì)C#—Excel的數(shù)據(jù)操作功能,包括信息讀取和寫入,數(shù)據(jù)保存、編碼及解碼等功能。
服務(wù)器端使用騰訊云服務(wù)器,通過IIS服務(wù)搭建Web服務(wù),對(duì)手機(jī)端及客戶機(jī)端的數(shù)據(jù)請(qǐng)求和數(shù)據(jù)傳輸進(jìn)行接收和信息發(fā)送,來完成數(shù)據(jù)的轉(zhuǎn)存和讀取,并響應(yīng)數(shù)據(jù)讀取的相關(guān)請(qǐng)求。
2.系統(tǒng)特點(diǎn):
2.1.本套系統(tǒng)主要采用MVVM模式,實(shí)現(xiàn)代碼與界面的分離;
2.2.系統(tǒng)手機(jī)端采用版本更新的模式,實(shí)現(xiàn)版本的自主更新下載,避免版本錯(cuò)亂問題;
2.3.整個(gè)系統(tǒng)架構(gòu)采用MVVM+三層架構(gòu)的主要模式,后期易于代碼的二次開發(fā)和漏洞修改;
2.4.系統(tǒng)開發(fā)語言采用C#語言,開發(fā)簡單,易于維護(hù);
2.5.遠(yuǎn)程數(shù)據(jù)庫采用SqlServer數(shù)據(jù)庫,可存儲(chǔ)大容量的數(shù)據(jù)記錄;
2.6.數(shù)據(jù)庫部分全部采用存儲(chǔ)過程,軟件開發(fā)過程中未使用一條SQL語句;
2.7.手機(jī)端本地?cái)?shù)據(jù)庫采用Sqlite進(jìn)行臨時(shí)性存儲(chǔ),通過增刪改查完成數(shù)據(jù)的基本操作;
3.軟件效果:
3.1.手機(jī)端效果:
界面效果
3.2.客戶端效果:
3.3.服務(wù)端效果:
WebService效果
3.4.服務(wù)端效果:
4.部分代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommandService;
using System.Collections.ObjectModel;
using Xamarin.Forms;
using StringService;
using System.Xml.Linq;
using System.IO;
using Xamarin.Essentials;
using System.Threading;
//using SocketService;
using System.Net.Sockets;
using DataBaseService.SqliteHelper;
using PropertyChangeService;
using ModuleInstall.Services;
using AppTools_WS;
using Models;
namespace ModuleInstall.ViewModels
{
public class MainPageViewModel : PropertyChangedHelper
{
private Taiqu _tq = new Taiqu();
private Meter _meter = new Meter();
private User _User = new User();
private Recorder _recorder = new Recorder();
private MainCommand _meterScanCmd, _moduleScanCmd, _saveCmd, _uploadCmd;
private Action<string> _callBack;
//private Dal_Module _dalModule = new Dal_Module();
/// <summary>
/// 用于計(jì)數(shù)功能,記錄設(shè)備列表增加的行數(shù);
/// </summary>
public int Count { set; get; } = 0;
public int Index { set; get; } = 0;
public bool IsEnabled { set; get; }
public string TqName { set { _tq.Name = value; PropertyChange(nameof(TqName)); } get { return _tq.Name; } }
public string MeterNum { set { _meter.MeterNum = value; PropertyChange(nameof(MeterNum)); } get { return _meter.MeterNum; } }
public string ModuleNum { set { _meter.ModuleNum = value; PropertyChange(nameof(ModuleNum)); } get { return _meter.ModuleNum; } }
public string Account { set { _User.Account = value; PropertyChange(nameof(Account)); } get { return _User.Account; } }
public string Address { set { _recorder.Address = value; PropertyChange(nameof(Address)); } get { return _recorder.Address; } }
public MainCommand MeterScanCmd { get { return _meterScanCmd; } }
public MainCommand ModuleScanCmd { get { return _moduleScanCmd; } }
public MainCommand SaveCmd { get { return _saveCmd; } }
public MainCommand UploadCmd { get { return _uploadCmd; } }
public int ScrollIndex { set; get; }
public ObservableCollection<Meter> Meters { set; get; } = new ObservableCollection<Meter>();
private SqliteHelper Helper;
public MainPageViewModel()
{
}
public MainPageViewModel(Action<string> action)
{
InitDatabase();//初始化數(shù)據(jù)庫;
_callBack = action;//回調(diào)函數(shù)進(jìn)入;
_meterScanCmd = new MainCommand(MeterScan);
_moduleScanCmd = new MainCommand(ModuleScan);
_saveCmd = new MainCommand(Save);
_uploadCmd = new MainCommand(Upload2);
if (!File.Exists(SystemSettingPageViewModel.filePath) || new FileInfo(SystemSettingPageViewModel.filePath).Length == 0)
{
_callBack("更換臺(tái)區(qū)、人員操作前,請(qǐng)先進(jìn)行系統(tǒng)設(shè)置!");
}
}
/// <summary>
/// Json數(shù)據(jù)讀取;從字符串讀取到Object(必須為Object)對(duì)象;
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public SettingModel JsonRead(string filePath)
{
string jsonStr;
try
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs))
{
jsonStr = sr.ReadToEnd();
}
}
return new JsonConvertHelper<SettingModel>().ToObject(jsonStr); //JsonConvert.DeserializeObject<SettingModel>(jsonStr);
}
catch (Exception ex)
{
throw ex;
}
}
public void InitDatabase()
{
Helper= new SqliteHelper();
}
/// <summary>
/// 獲取指定電能表資產(chǎn)的Id號(hào)
/// </summary>
/// <param name="meterNum"></param>
/// <returns></returns>
int GetMeterId(string meterNum)
{
int flag;
try
{
flag = Helper.GetMeterId(meterNum);
}
catch (Exception ex)
{
throw ex;
}
return flag;
}
/// <summary>
/// 獲取指定臺(tái)區(qū)名稱的臺(tái)區(qū)Id號(hào);
/// </summary>
/// <param name="tqName"></param>
/// <returns></returns>
int GetTqId(string tqName)
{
return Helper.GetTqId(tqName);
}
/// <summary>
/// 獲取從本地配置信息中讀取的
/// </summary>
/// <returns></returns>
int GetUserId(string Account)
{
///從本地配置文件中獲取姓名;
return Helper.GetUserId(Account);
}
/// <summary>
/// 電能表掃碼方法,掃碼后,將碼加入到Meters集合列表;
/// </summary>
/// 定義電表數(shù)量,模塊數(shù)量
public int MeterCount = 0, ModuleCount = 0;
async void MeterScan()
{
try
{
bool flag = false;//判斷掃碼重復(fù)的標(biāo)志;
string num = await new ScanToString().BoxScan();
if (num.Length > 15)
{
for (int i = 0; i < Meters.Count; i++)
{
if (Meters[i].MeterNum == num)
{
flag = true;//如果,Meters集合中,存在此模塊條碼信息,則資產(chǎn)重復(fù),標(biāo)志為true;
}
}
if (!flag)
{
//var meter = Meters.Where(m => m.ModuleNum == "").First();
if (MeterCount>=ModuleCount)
{
Meters.Insert(0,new Meter() { MeterNum = num });
MeterCount++;
}
else
{
Meters[ModuleCount-MeterCount-1].MeterNum = num;//當(dāng)前序號(hào)處的模塊條碼由空修改為當(dāng)前掃描的條碼;
MeterCount++; //Count++;//計(jì)數(shù)指針位增加,后期刪除時(shí),指針不能小于0;
//Meters.OrderBy<Meter,int>(Meter => Meter.Id).Min();
}
_callBack(null);//回調(diào)函數(shù),更新ListView
//num = await new ScanToString().BoxScan();
}
}
}
catch
{
throw;
}
}
async void ModuleScan()
{
try
{
bool flag = false;//判斷掃碼重復(fù)的標(biāo)志;
string num = await new ScanToString().BoxScan();
if (num.Length > 15)
{
for (int i = 0; i < Meters.Count; i++)
{
if (Meters[i].ModuleNum == num)
{
flag = true;//如果,Meters集合中,存在此模塊條碼信息,則資產(chǎn)重復(fù),標(biāo)志為true;
}
}
if (!flag)
{
//var meter = Meters.Where(m => m.ModuleNum == "").First();
if(MeterCount<=ModuleCount)
{
Meters.Insert(0,new Meter() { ModuleNum = num });
ModuleCount++;
}
else
{
Meters[MeterCount-ModuleCount-1].ModuleNum = num;//當(dāng)前序號(hào)處的模塊條碼由空修改為當(dāng)前掃描的條碼;
ModuleCount++; //Count++;//計(jì)數(shù)指針位增加,后期刪除時(shí),指針不能小于0;
//Meters.OrderBy<Meter,int>(Meter => Meter.Id).Min();
}
_callBack(null);//回調(diào)函數(shù),更新ListView
//num = await new ScanToString().BoxScan();
}
}
}
catch
{
throw;
}
}
/// <summary>
/// 刪除本地?cái)?shù)據(jù)庫中的表與模塊信息(同時(shí)刪除);如果不刪除,加表,保存,或者在刪除,中間回出現(xiàn)問題;
/// </summary>
/// <param name="meter"></param>
public void MeterDelete(string meter)
{
int meterid = Helper.GetMeterId(meter);
int recorderId = Helper.GetRecorderId(meterid);
if(meterid >0)
Helper.Delete<Meter>(meterid);
if(recorderId>0)
Helper.Delete<Recorder>(recorderId);
}
/// <summary>
/// 保存到本地
/// </summary>
void Save()
{
bool isSave = false;
try
{
if (Meters.Count > 0)
{
SettingModel setModel =null;
try
{
setModel = JsonRead(SystemSettingPageViewModel.filePath);
}
catch
{
_callBack("更換臺(tái)區(qū)、人員操作前,請(qǐng)先進(jìn)行系統(tǒng)設(shè)置!");//回調(diào)函數(shù),顯示提示信息;
}
Account = setModel.Account;
TqName = setModel.TqName;
Address = setModel.Address;
int tqid = GetTqId(TqName);
foreach (var meter in Meters)
{
if (meter.ModuleNum != null)
{
meter.TqId = tqid;
//判斷是否在數(shù)據(jù)庫中存在此表資產(chǎn),如果不存在,返回結(jié)果為0,則添加資產(chǎn)
if (GetMeterId(meter.MeterNum) == 0)
{
Helper.Insert<Meter>(meter);
Helper.Insert<Recorder>(
new Recorder()
{
MeterId = GetMeterId(meter.MeterNum),
UserId = GetUserId(Account),
IsUpload = false,//上傳標(biāo)志為false,上傳以后更改為true;
SaveTime = DateTime.Now,
Address = Address
});
}
}
else
{
_callBack("數(shù)據(jù)結(jié)構(gòu)不完整,請(qǐng)補(bǔ)充完整后保存!");
break;
}
isSave = true;
}
///-------------還需要確認(rèn),兩種資產(chǎn)不能夠進(jìn)入
//Console.WriteLine("--------------------------------------------保存成功!--------------------------------------");
if(isSave)
{
_callBack("數(shù)據(jù)保存成功!");
}
}
else
{
_callBack("數(shù)據(jù)不能為空,請(qǐng)重試操作!");
}
}
catch (NullReferenceException)
{
_callBack("更換臺(tái)區(qū)、人員操作前,請(qǐng)先進(jìn)行系統(tǒng)設(shè)置!");
}
catch (Exception ex)
{
_callBack($"{ex.ToString()}");
}
}
/// <summary>
///第一版: 上傳數(shù)據(jù)到遠(yuǎn)程服務(wù)器,需要從本地?cái)?shù)據(jù)庫中讀取,直接操作遠(yuǎn)程數(shù)據(jù)庫插入數(shù)據(jù)
/// </summary>
void Upload1()
{
////讀取本地?cái)?shù)據(jù)庫中的為上傳信息,IsUpload==false,轉(zhuǎn)換成Json字符串;
////string meterStr=null,recorderStr = null;
//ObservableCollection<Recorder> recorders = Helper.GetRecorders(false);
//if (recorders.Count > 0)
//{
// foreach (var recorder in recorders)
// {
// _meter = Helper.GetMeter(recorder.MeterId);
// ModuleNum = _meter.ModuleNum;
// MeterNum = _meter.MeterNum;
// _dalModule.ModuleAdd(ModuleNum, MeterNum, TqName, Account, recorder.SaveTime, Address);
// //----------------此處需要在本地保存一下,更改一下上傳狀態(tài);-------------------
// recorder.IsUpload = true;
// Helper.Update(recorder);//更新一下上傳狀態(tài);
// //recorderStr += new JsonConvertHelper<Recorder>().ToString(recorder);
// //meterStr += new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId));
// //Console.WriteLine($"保存時(shí)間:{recorder.SaveTime},電能表號(hào):{MeterNum},模塊號(hào):{ModuleNum}");
// }
// _callBack("數(shù)據(jù)上傳成功!");
//}
//else
// _callBack("數(shù)據(jù)為空,請(qǐng)核實(shí)后上傳!");
}
/// <summary>
/// 通過Socketk客戶端進(jìn)行數(shù)據(jù)上傳//第三版--服務(wù)器內(nèi)存不足,socket無法使用;
/// </summary>
//void Upload3()
//{
// //讀取本地?cái)?shù)據(jù)庫中的為上傳信息,IsUpload==false,轉(zhuǎn)換成Json字符串;
// //string meterStr=null,recorderStr = null;
// bool isSave=false;
// SocketClient client = null;
// ObservableCollection<Recorder> recorders = Helper.GetRecorders(false);
// ObservableCollection<History> histories = new ObservableCollection<History>();
// JsonConvertHelper<ObservableCollection<History>> jh = new JsonConvertHelper<ObservableCollection<History>>();
// string Msg =string.Empty;
// try
// {
// if (recorders.Count > 0)
// {
// //首先要判斷是否有數(shù)據(jù),才能進(jìn)行下一步的鏈接;
// client = new SocketClient();
// foreach (var recorder in recorders)
// {
// _meter = Helper.GetMeter(recorder.MeterId);
// ModuleNum = _meter.ModuleNum;
// MeterNum = _meter.MeterNum;
// //_dalModule.ModuleAdd(ModuleNum, MeterNum, TqName, Account, recorder.SaveTime, Address);
// History history = new History()
// {
// ModuleNum = this.ModuleNum,
// MeterNum = this.MeterNum,
// TqName = this.TqName,
// Account = this.Account,
// SaveTime = recorder.SaveTime,
// Address = this.Address
// };// SaveTime = recorder.SaveTime,
// //----------------此處需要在本地保存一下,更改一下上傳狀態(tài);-------------------
// recorder.IsUpload = true;
// Helper.Update(recorder);//更新一下上傳狀態(tài);
// //recorderStr += new JsonConvertHelper<Recorder>().ToString(recorder);
// //meterStr += new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId));
// //Console.WriteLine($"保存時(shí)間:{recorder.SaveTime},電能表號(hào):{MeterNum},模塊號(hào):{ModuleNum}");
// histories.Add(history);
// isSave = true;
// }
// ///將歷史數(shù)據(jù)的對(duì)象集合進(jìn)行序列化;然后將字符串傳輸?shù)椒?wù)器;
// Msg = jh.ToString(histories);
// if (client.SendMsg(Msg))
// _callBack("數(shù)據(jù)上傳成功!");
// else _callBack("數(shù)據(jù)上傳失敗!");//回調(diào)函數(shù),顯示上傳結(jié)果;
// client.Client.Close();
// }
// else
// _callBack("數(shù)據(jù)為空,請(qǐng)核實(shí)后上傳!");
// }
// catch(SocketException)
// {
// _callBack("上傳服務(wù)器未開啟,請(qǐng)開啟后再上傳數(shù)據(jù)!");
// }
//}
/// <summary>
/// 第二版:通過WebService上傳,服務(wù)器端已架設(shè)Webservice成功;
/// </summary>
void Upload2()
{
//讀取本地?cái)?shù)據(jù)庫中的為上傳信息,IsUpload==false,轉(zhuǎn)換成Json字符串;
//string meterStr=null,recorderStr = null;
ObservableCollection<Recorder> recorders = Helper.GetRecorders(false);
ObservableCollection<History> histories = new ObservableCollection<History>();
JsonConvertHelper<ObservableCollection<History>> jh = new JsonConvertHelper<ObservableCollection<History>>();
string Msg = string.Empty;
try
{
if (recorders.Count > 0)
{
//首先要判斷是否有數(shù)據(jù),才能進(jìn)行下一步的鏈接;
foreach (var recorder in recorders)
{
_meter = Helper.GetMeter(recorder.MeterId);
ModuleNum = _meter.ModuleNum;
MeterNum = _meter.MeterNum;
History history = new History()
{
ModuleNum = this.ModuleNum,
MeterNum = this.MeterNum,
TqName = this.TqName,
Account = this.Account,
SaveTime = recorder.SaveTime,
Address = this.Address
};// SaveTime = recorder.SaveTime,
histories.Add(history);
}
///將歷史數(shù)據(jù)的對(duì)象集合進(jìn)行序列化;然后將字符串傳輸?shù)椒?wù)器;
Msg = jh.ToString(histories);
AppToolsSoapClient msc = new AppToolsSoapClient(AppToolsSoapClient.EndpointConfiguration.AppToolsSoap12);
var rtnValue = msc.DataUpLoad(Msg);
if(rtnValue==true)
{
new Thread(
() =>
{
foreach (var recorder in recorders)
{
//----------------此處需要在本地保存一下,更改一下上傳狀態(tài);-------------------
recorder.IsUpload = true;
Helper.Update(recorder);//更新一下上傳狀態(tài);
//recorderStr += new JsonConvertHelper<Recorder>().ToString(recorder);
//meterStr += new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId));
//Console.WriteLine($"保存時(shí)間:{recorder.SaveTime},電能表號(hào):{MeterNum},模塊號(hào):{ModuleNum}");
}
}).Start();
_callBack("數(shù)據(jù)上傳成功!");
}
else _callBack("數(shù)據(jù)上傳失敗!");
}
else
_callBack("數(shù)據(jù)為空,請(qǐng)核實(shí)后上傳!");
}
catch (Exception ex)
{
_callBack(ex.ToString ());
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using CommandService;
using System.Collections.ObjectModel;
using DataBaseService.SqliteHelper;
using StringService;
using AppTools_WS;
using System.Linq;
using System.Threading.Tasks;
using Models;
namespace ModuleInstall.ViewModels
{
public class SystemSettingPageViewModel:PropertyChangeService.PropertyChangedHelper
{
private AppToolsSoapClient _client;
private Company _company=new Company ();
private const string fileName = "Config.txt";
private MainCommand _writeSettingCmd;// readCmd;
private Action
private SettingModel _settingModel=new SettingModel();
private SqliteHelper sqliteHelper;
private ObservableCollection
private ObservableCollection
private ObservableCollection
private ObservableCollection
public ObservableCollection
public ObservableCollection
public ObservableCollection
public ObservableCollection
public Company Comy { get { return _company; } set { _company = value; } }
public ObservableCollection
public MainCommand WriteSettingCmd { get { return _writeSettingCmd; } }
public SettingModel SetModel { set { _settingModel = value; } get { return _settingModel; } }
public static readonly string filePath=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), fileName);
public SystemSettingPageViewModel(Action
{
if (_client == null)
_client = new AppToolsSoapClient(AppToolsSoapClient.EndpointConfiguration.AppToolsSoap12);
GetCompanies();
GetGroupes();
if (!File.Exists(filePath))
{
File.Create(filePath);
}
_writeSettingCmd = new MainCommand(JsonWrite);
CallBack = callBack;
//readCmd = new MainCommand(Read);
}
///
/// 通過供電公司名稱,獲取下屬單位供電所的所有內(nèi)容;
///
///
///
public ObservableCollection
{
ObservableCollection
ArrayOfString strings = _client.GetGdses(companyName);
foreach (string str in strings)
{
gds.Add(str);
}
return gds;
}
public void GetGroupes()
{
try
{
ArrayOfString strings = _client.GetGroups();
foreach (string str in strings)
{
GroupCollection.Add(str);
}
//GroupCollection=new Dal_Group().GroupList();
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 通過供電所名稱,獲取下屬單位供電臺(tái)區(qū)的所有內(nèi)容;
/// </summary>
/// <param name="companyName"></param>
/// <returns></returns>
public ObservableCollection<string> GetTaiQues(string gdsName)
{
try
{
ObservableCollection<string> taiqus = new ObservableCollection<string>();
ArrayOfString strings = _client.GetTaiQues(gdsName);
foreach (string str in strings)
{
taiqus.Add(str);
}
return taiqus;
}catch(Exception ex)
{ throw ex; }
}
/// <summary>
/// 獲取所有供電公司的信息;
/// </summary>
/// <param name="companyName"></param>
/// <returns></returns>
void GetCompanies()
{
try
{
ArrayOfString strings = _client.GetCompanies();
foreach (string str in strings)
{
CompanyCollection.Add(str);
}
}
catch
{
throw;
}
}
public ObservableCollection<string> GetUsers(string groupName)
{
ObservableCollection<string> os= new ObservableCollection<string>();
ArrayOfString Users = _client.GetUsers(groupName);
foreach (string o in Users)
{
os.Add(o.ToString());
}
return os;
}
/// <summary>
/// 將系統(tǒng)設(shè)置的信息對(duì)象序列化為Json字符串;
/// </summary>
public void JsonWrite()
{
try
{
if(File.Exists(filePath))
{
File.Delete (filePath);
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
using (StreamWriter sw = new StreamWriter(fs))
{//向配置文件寫入配置信息;
string jsonStr = new JsonConvertHelper<SettingModel>().ToString(SetModel);
//JsonConvert.SerializeObject(SetModel);
sw.Write(jsonStr);
sw.Flush();
sw.Close();
fs.Close();
}
}
}
sqliteHelper = new SqliteHelper();
sqliteHelper.InitData(SetModel.CompanyName, SetModel.GdsName, SetModel.TqName, SetModel.Account);
CallBack("保存成功!");
}
catch(Exception ex)
{
CallBack($"保存失敗!{ex.ToString()}");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Models;
using StringService;
using System.Collections.ObjectModel;
using AppTools_WS;
using System.Security.Cryptography.X509Certificates;
using System.IO;
using CommandService;
using DataBaseService.SqliteHelper;
namespace ModuleInstall.ViewModels
{
public class DataSearchViewModel
{
private AppToolsSoapClient _client;
//private Dal_History _dalHistory =new Dal_History ();
private Action
///
/// 未上傳數(shù)量
///
public int UnUploadCount { set; get; }
///
/// 今日已上傳數(shù)量
///
public int TodayUploadCount { set; get; }
///
/// 歷史上傳數(shù)量
///
public int UploadHistoryCount { set; get; }
public SettingModel SetModel { set; get; }
public ObservableCollection<History> UploadHistoryList { get; set; }
public DataSearchViewModel(Action<string> action)
{
try
{
_action = action;
if (_client == null)
_client = new AppToolsSoapClient (AppToolsSoapClient.EndpointConfiguration.AppToolsSoap12);
SetModel = JsonRead(SystemSettingPageViewModel.filePath);//讀取配置文件;
UnUploadCount = new SqliteHelper().GetUnUploadCount();//從本地獲取未上傳信息數(shù)量;
UploadHistoryCount = _client.GetUploadedHistoryCount(SetModel.Account);//獲取上傳歷史記錄數(shù)量;
TodayUploadCount = _client.GetTodayUploadedCount(SetModel.Account);//獲取今天上傳數(shù)量(指定操作人員);
}
catch {
_action("應(yīng)用使用前,請(qǐng)先進(jìn)行系統(tǒng)設(shè)置!");
}
}
/// <summary>
/// Json數(shù)據(jù)讀取;從字符串讀取到Object(必須為Object)對(duì)象;
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public SettingModel JsonRead(string filePath)
{
StreamReader sr = null;
try
{
sr = new StreamReader(filePath);
string jsonStr = sr.ReadToEnd();
return new JsonConvertHelper<SettingModel>().ToObject(jsonStr); //JsonConvert.DeserializeObject<SettingModel>(jsonStr);
}
catch (Exception ex)
{
throw ex;
}
finally {
sr.Close();
}
}
}
}
開發(fā)人:QQ-1009714648

浙公網(wǎng)安備 33010602011771號(hào)