实例介绍
【实例简介】
本系统手机端搭设APP软件一套,用于信息采集,数据临时储存、数据上传、数据查询、参数设置以及人员注册、登陆等内容。当数据采集完毕后,会在本地手机中进行存储,等网络畅通或者工作完成后,由施工人员进行上传操作,此时,数据会按照一定的格式进行编码,通过WebService提供的接口上传到服务器中。
服务器端采用WebService来进行数据的接收和处理,将现场的数据信息按照一定的编码格式进行解码,然后储存到数据库中;同时,也能够满足后台管理端的数据请求,按照一定的编码将请求的数据进行编码,提供给后台人员进行查阅和下载。
后台管理端负责将请求的数据进行解码,完成数据查阅和下载,同时,也需要完成部分系统设置,参数、人员、权限等的管理行为。
【实例截图】
【核心代码】
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> /// 用于计数功能,记录设备列表增加的行数; /// </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();//初始化数据库; _callBack = action;//回调函数进入; _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("更换台区、人员操作前,请先进行系统设置!"); } } /// <summary> /// Json数据读取;从字符串读取到Object(必须为Object)对象; /// </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> /// 获取指定电能表资产的Id号 /// </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> /// 获取指定台区名称的台区Id号; /// </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> /// 定义电表数量,模块数量 public int MeterCount = 0, ModuleCount = 0; async void MeterScan() { try { bool flag = false;//判断扫码重复的标志; 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集合中,存在此模块条码信息,则资产重复,标志为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;//当前序号处的模块条码由空修改为当前扫描的条码; MeterCount ; //Count ;//计数指针位增加,后期删除时,指针不能小于0; //Meters.OrderBy<Meter,int>(Meter => Meter.Id).Min(); } _callBack(null);//回调函数,更新ListView //num = await new ScanToString().BoxScan(); } } } catch { throw; } } async void ModuleScan() { try { bool flag = false;//判断扫码重复的标志; 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集合中,存在此模块条码信息,则资产重复,标志为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;//当前序号处的模块条码由空修改为当前扫描的条码; ModuleCount ; //Count ;//计数指针位增加,后期删除时,指针不能小于0; //Meters.OrderBy<Meter,int>(Meter => Meter.Id).Min(); } _callBack(null);//回调函数,更新ListView //num = await new ScanToString().BoxScan(); } } } catch { throw; } } /// <summary> /// 删除本地数据库中的表与模块信息(同时删除);如果不删除,加表,保存,或者在删除,中间回出现问题; /// </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("更换台区、人员操作前,请先进行系统设置!");//回调函数,显示提示信息; } 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; //判断是否在数据库中存在此表资产,如果不存在,返回结果为0,则添加资产 if (GetMeterId(meter.MeterNum) == 0) { Helper.Insert<Meter>(meter); Helper.Insert<Recorder>( new Recorder() { MeterId = GetMeterId(meter.MeterNum), UserId = GetUserId(Account), IsUpload = false,//上传标志为false,上传以后更改为true; SaveTime = DateTime.Now, Address = Address }); } } else { _callBack("数据结构不完整,请补充完整后保存!"); break; } isSave = true; } ///-------------还需要确认,两种资产不能够进入 //Console.WriteLine("--------------------------------------------保存成功!--------------------------------------"); if(isSave) { _callBack("数据保存成功!"); } } else { _callBack("数据不能为空,请重试操作!"); } } catch (NullReferenceException) { _callBack("更换台区、人员操作前,请先进行系统设置!"); } catch (Exception ex) { _callBack($"{ex.ToString()}"); } } /// <summary> ///第一版: 上传数据到远程服务器,需要从本地数据库中读取,直接操作远程数据库插入数据 /// </summary> void Upload1() { ////读取本地数据库中的为上传信息,IsUpload==false,转换成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); // //----------------此处需要在本地保存一下,更改一下上传状态;------------------- // recorder.IsUpload = true; // Helper.Update(recorder);//更新一下上传状态; // //recorderStr = new JsonConvertHelper<Recorder>().ToString(recorder); // //meterStr = new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId)); // //Console.WriteLine($"保存时间:{recorder.SaveTime},电能表号:{MeterNum},模块号:{ModuleNum}"); // } // _callBack("数据上传成功!"); //} //else // _callBack("数据为空,请核实后上传!"); } /// <summary> /// 通过Socketk客户端进行数据上传//第三版--服务器内存不足,socket无法使用; /// </summary> //void Upload3() //{
// //读取本地数据库中的为上传信息,IsUpload==false,转换成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) // { // //首先要判断是否有数据,才能进行下一步的链接; // 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,
// //----------------此处需要在本地保存一下,更改一下上传状态;------------------- // recorder.IsUpload = true; // Helper.Update(recorder);//更新一下上传状态; // //recorderStr = new JsonConvertHelper<Recorder>().ToString(recorder); // //meterStr = new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId)); // //Console.WriteLine($"保存时间:{recorder.SaveTime},电能表号:{MeterNum},模块号:{ModuleNum}"); // histories.Add(history); // isSave = true; // } // ///将历史数据的对象集合进行序列化;然后将字符串传输到服务器; // Msg = jh.ToString(histories); // if (client.SendMsg(Msg)) // _callBack("数据上传成功!"); // else _callBack("数据上传失败!");//回调函数,显示上传结果; // client.Client.Close(); // } // else // _callBack("数据为空,请核实后上传!"); // } // catch(SocketException) // { // _callBack("上传服务器未开启,请开启后再上传数据!"); // }
//} /// <summary> /// 第二版:通过WebService上传,服务器端已架设Webservice成功; /// </summary> void Upload2() { //读取本地数据库中的为上传信息,IsUpload==false,转换成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) { //首先要判断是否有数据,才能进行下一步的链接; 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); } ///将历史数据的对象集合进行序列化;然后将字符串传输到服务器; 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) { //----------------此处需要在本地保存一下,更改一下上传状态;------------------- recorder.IsUpload = true; Helper.Update(recorder);//更新一下上传状态; //recorderStr = new JsonConvertHelper<Recorder>().ToString(recorder); //meterStr = new JsonConvertHelper<Meter>().ToString(new SqliteHelper().GetMeter(recorder.MeterId)); //Console.WriteLine($"保存时间:{recorder.SaveTime},电能表号:{MeterNum},模块号:{ModuleNum}"); } }).Start(); _callBack("数据上传成功!"); } else _callBack("数据上传失败!"); } else _callBack("数据为空,请核实后上传!"); } 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<string> CallBack; private SettingModel _settingModel=new SettingModel(); private SqliteHelper sqliteHelper; private ObservableCollection <string> _companyCollection = new ObservableCollection<string> (); private ObservableCollection<string> _gongdsCollection = new ObservableCollection<string>(); private ObservableCollection<string> _taiquCollection = new ObservableCollection<string>(); private ObservableCollection<string> _groupCollection = new ObservableCollection<string>(); public ObservableCollection<string> CompanyCollection { set { _companyCollection = value; PropertyChange(nameof(CompanyCollection)); } get { return _companyCollection; } } public ObservableCollection<string> GongdsCollection { set { _gongdsCollection = value; PropertyChange(nameof(GongdsCollection)); } get { return GongdsCollection; } } public ObservableCollection<string> TaiQuCollection { set { _taiquCollection = value; PropertyChange(nameof(TaiQuCollection)); } get { return _taiquCollection; } } public ObservableCollection<string> GroupCollection { set { _groupCollection = value; PropertyChange(nameof(GroupCollection)); } get { return _groupCollection; } } public Company Comy { get { return _company; } set { _company = value; } } public ObservableCollection<Company> Companies=new ObservableCollection<Company>(); 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<string> callBack) { 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); } /// <summary> /// 通过供电公司名称,获取下属单位供电所的所有内容; /// </summary> /// <param name="companyName"></param> /// <returns></returns> public ObservableCollection<string> GetGongdses(string companyName) { ObservableCollection<string> gds = new ObservableCollection<string>(); 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> /// 通过供电所名称,获取下属单位供电台区的所有内容; /// </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> /// 将系统设置的信息对象序列化为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<string> _action; /// <summary> /// 未上传数量 /// </summary> public int UnUploadCount { set; get; } /// <summary> /// 今日已上传数量 /// </summary> public int TodayUploadCount { set; get; } /// <summary> /// 历史上传数量 /// </summary> 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();//从本地获取未上传信息数量; UploadHistoryCount = _client.GetUploadedHistoryCount(SetModel.Account);//获取上传历史记录数量; TodayUploadCount = _client.GetTodayUploadedCount(SetModel.Account);//获取今天上传数量(指定操作人员); } catch { _action("应用使用前,请先进行系统设置!"); } } /// <summary> /// Json数据读取;从字符串读取到Object(必须为Object)对象; /// </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(); } }
} }
|
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论