using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Forms; using BO; using BO.Utils; using SegmentationInStore.Rpc; using SegmentationInStore.Rpc.Dto; namespace SegmentationInStore { public partial class SegmentationInStoreForm : Form,IAfterLogin { private static readonly Object lockOjbUnScan = new object(); private static readonly Object lockOjbUnSubmit = new object(); private static readonly Object lockOjbSubmited = new object(); private BindingList mUnScanList; private BindingList mUnSubmitList; private BindingList mSubmitedList; BardCodeHooK BarCode = new BardCodeHooK(); public SegmentationInStoreForm() { InitializeComponent(); gridUnScan.AutoGenerateColumns = false; gridUnSubmit.AutoGenerateColumns = false; gridSubmited.AutoGenerateColumns = false; mUnScanList=new BindingList(); mUnSubmitList = new BindingList(); mSubmitedList = new BindingList(); BarCode.BarCodeEvent += new BardCodeHooK.BardCodeDeletegate(BarCode_BarCodeEvent); } void BarCode_BarCodeEvent(BardCodeHooK.BarCodes barCode) { ShowInfo(barCode); } private delegate void ShowInfoDelegate(BardCodeHooK.BarCodes barCode); private void ShowInfo(BardCodeHooK.BarCodes barCode) { if (this.InvokeRequired) { this.BeginInvoke(new ShowInfoDelegate(ShowInfo), new object[] { barCode }); } else { if (barCode.IsValid) { if (!string.IsNullOrWhiteSpace(barCode.BarCode)) { doInsertUnSubmit(barCode.BarCode); } } } } private void doInsertUnSubmit(string barCode) { var fd = mUnScanList.FirstOrDefault(x => x.BarCode == barCode); if (fd == null) { //todo 放到错误信息里 } mUnScanList.Remove(fd); var inStoreDto = fd.EToSegmentationInStore(); inStoreDto.Store_ID = 0; inStoreDto.Store_Name = "仓库"; mUnSubmitList.Insert(0, inStoreDto); BindUnSubmitGrid(); } void BindUnScanGrid() { lock (lockOjbUnScan) { gridUnScan.DataSource = mUnScanList; } } void BindUnSubmitGrid() { lock (lockOjbUnSubmit) { gridUnSubmit.DataSource = mUnSubmitList; } } void BindSubmitedGrid() { lock (lockOjbSubmited) { gridSubmited.DataSource = mSubmitedList; } } private void SegmentationInStoreForm_Load(object sender, EventArgs e) { var enable=BarCode.Start(); if (!enable) { MessageBox.Show("注册扫码失败,联系管理员"); } } //同步未扫码 private void timerSyncUnScan_Tick(object sender, EventArgs e) { if (mUnScanList.Count < 1) { var list = SegmentationInStoreRpc.GetNotInStoreList(); foreach (SegmentationWeightRecord record in list) { mUnScanList.Insert(0,record); } } else { var maxid = mUnScanList.Max(x => x.ID); var list = SegmentationInStoreRpc.GetNotInStoreListByMaxId(maxid); foreach (SegmentationWeightRecord record in list) { mUnScanList.Insert(0,record); } } BindUnScanGrid(); } //扫到的 未提交的提交 private void timerUpload_Tick(object sender, EventArgs e) { var unSubmitList = mUnSubmitList.ToList(); for (int i = unSubmitList.Count-1; i >=0 ; i--) { try { var dto = unSubmitList[i]; dto.CreateTime = DateTime.Now; dto.ID=SegmentationInStoreRpc.Insert(dto); mSubmitedList.Insert(0,dto); mUnSubmitList.Remove(dto); } catch (Exception ex) { //todo 记录异常 } } //把成功的从未提交记录中移除 BindUnSubmitGrid(); BindSubmitedGrid(); } public string RoleName { get { return "分割入库"; } } public Form Generate() { return this; } private void SegmentationInStoreForm_FormClosed(object sender, FormClosedEventArgs e) { BarCode.Stop(); } } }