| @ -0,0 +1,80 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
| <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |||
| <PropertyGroup> | |||
| <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
| <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||
| <ProjectGuid>{20BB780C-237B-4998-9ABF-85951596E4FF}</ProjectGuid> | |||
| <OutputType>Library</OutputType> | |||
| <AppDesignerFolder>Properties</AppDesignerFolder> | |||
| <RootNamespace>OffLineQualityAndOrder</RootNamespace> | |||
| <AssemblyName>OffLineQualityAndOrder</AssemblyName> | |||
| <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | |||
| <FileAlignment>512</FileAlignment> | |||
| </PropertyGroup> | |||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||
| <DebugSymbols>true</DebugSymbols> | |||
| <DebugType>full</DebugType> | |||
| <Optimize>false</Optimize> | |||
| <OutputPath>bin\Debug\</OutputPath> | |||
| <DefineConstants>DEBUG;TRACE</DefineConstants> | |||
| <ErrorReport>prompt</ErrorReport> | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||
| <DebugType>pdbonly</DebugType> | |||
| <Optimize>true</Optimize> | |||
| <OutputPath>bin\Release\</OutputPath> | |||
| <DefineConstants>TRACE</DefineConstants> | |||
| <ErrorReport>prompt</ErrorReport> | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <Reference Include="System" /> | |||
| <Reference Include="System.Core" /> | |||
| <Reference Include="System.Drawing" /> | |||
| <Reference Include="System.Windows.Forms" /> | |||
| <Reference Include="System.Xaml" /> | |||
| <Reference Include="System.Xml.Linq" /> | |||
| <Reference Include="System.Data.DataSetExtensions" /> | |||
| <Reference Include="Microsoft.CSharp" /> | |||
| <Reference Include="System.Data" /> | |||
| <Reference Include="System.Xml" /> | |||
| <Reference Include="WindowsBase" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <Compile Include="Properties\AssemblyInfo.cs" /> | |||
| <Compile Include="OffLineQualityOrderForm.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| <Compile Include="OffLineQualityOrderForm.Designer.cs"> | |||
| <DependentUpon>OffLineQualityOrderForm.cs</DependentUpon> | |||
| </Compile> | |||
| <Compile Include="OffLineQualityOrderFormForTab2.cs"> | |||
| <SubType>Form</SubType> | |||
| </Compile> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <ProjectReference Include="..\BO\BO.csproj"> | |||
| <Project>{8968f14a-c7c7-4751-96ce-b114fbfd65ef}</Project> | |||
| <Name>BO</Name> | |||
| </ProjectReference> | |||
| <ProjectReference Include="..\BWP.WinFormControl\BWP.WinFormControl.csproj"> | |||
| <Project>{a782b23e-be6d-4f51-b5cb-5cd259ba97cc}</Project> | |||
| <Name>BWP.WinFormControl</Name> | |||
| </ProjectReference> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <EmbeddedResource Include="OffLineQualityOrderForm.resx"> | |||
| <DependentUpon>OffLineQualityOrderForm.cs</DependentUpon> | |||
| </EmbeddedResource> | |||
| </ItemGroup> | |||
| <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||
| <!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
| Other similar extension points exist, see Microsoft.Common.targets. | |||
| <Target Name="BeforeBuild"> | |||
| </Target> | |||
| <Target Name="AfterBuild"> | |||
| </Target> | |||
| --> | |||
| </Project> | |||
| @ -0,0 +1,724 @@ | |||
| using BO.BO; | |||
| using BO.Utils; | |||
| using BO.Utils.BillRpc; | |||
| using BWP.WinFormControl; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.ComponentModel; | |||
| using System.Data; | |||
| using System.Drawing; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading; | |||
| using System.Threading.Tasks; | |||
| using System.Windows.Forms; | |||
| namespace OffLineQualityAndOrder | |||
| { | |||
| public partial class OffLineQualityOrderForm : Form, IAfterLogin | |||
| { | |||
| #region IAfterLogin | |||
| public string RoleName | |||
| { | |||
| get { return "验质排宰"; } | |||
| } | |||
| public Form Generate() | |||
| { | |||
| return this; | |||
| } | |||
| #endregion | |||
| private delegate void InvokeHandler(); | |||
| List<Tuple<string, string>> hogGradeList; | |||
| List<HouseSplitEntity> houseList; | |||
| List<SanctionSplit3Part> sanctionList; | |||
| List<HouseAndSanctionList> weightBills; | |||
| HouseAndSanctionEdit Dmo; | |||
| Thread syncThread; | |||
| readonly Color btnSelectForeColor = Color.FromArgb(255, 255, 255); | |||
| readonly Color btnSelectBackColor = Color.FromArgb(66, 163, 218); | |||
| Color btnUnSelectForeColor = SystemColors.ControlText; | |||
| Color btnUnSelectBackColor = Color.FromArgb(225, 225, 225); | |||
| public OffLineQualityOrderForm() | |||
| { | |||
| InitializeComponent(); | |||
| testTimeInput.Date = DateTime.Today; | |||
| this.uTabControl1.Selected += (sender, e) => | |||
| { | |||
| this.Text = e.TabPage.Text; | |||
| }; | |||
| sanctionGrid.AutoGenerateColumns = false; | |||
| weightBillGrid.AutoGenerateColumns = false; | |||
| weightBillGrid.DataSource = null; | |||
| hogGradeList = BaseInfoRpcUtil.GetBaseInfoEntity("GetHogGradeList"); | |||
| houseList = HouseSplitEntity.Init(BaseInfoRpcUtil.GetBaseInfoEntity("GetLiveColonyHouseList")); | |||
| sanctionList = SanctionSplit3Part.Init(BaseInfoRpcUtil.GetSanctionList()); | |||
| AddKeyPadForTab1(); | |||
| AddHogGradeBtn(); | |||
| BindSanctionGrid(); | |||
| AddHouseBtn(); | |||
| numberBox.LostFocus += (sender, e) => { flag = 1; }; | |||
| sanctionGrid.GotFocus += (sender, e) => { flag = 2; }; | |||
| this.FormClosing += delegate | |||
| { | |||
| if (syncThread != null && syncThread.IsAlive) | |||
| syncThread.Abort(); | |||
| if (orderSyncTask != null && orderSyncTask.IsAlive) | |||
| orderSyncTask.Abort(); | |||
| if (bt2SyncTask != null && bt2SyncTask.IsAlive) | |||
| bt2SyncTask.Abort(); | |||
| }; | |||
| Tab2Init(); | |||
| } | |||
| HouseAndSanctionList lastFirstSelect; | |||
| private void SyncTask() | |||
| { | |||
| while (true) | |||
| { | |||
| this.Invoke(new InvokeHandler(delegate() | |||
| { | |||
| weightBills = HouseAndSanctionRpc.GetHouseAndSanctionList(testTimeInput.Date.Value); | |||
| BindWeightBillGrid(); | |||
| BindNumberLabel(); | |||
| })); | |||
| Thread.Sleep(5000); | |||
| } | |||
| } | |||
| int flag = 1; | |||
| List<Button> hogGradeBtn = new List<Button>(); | |||
| List<Button> houseBtn = new List<Button>(); | |||
| private void BindWeightBillGrid() | |||
| { | |||
| weightBillGrid.DataSource = weightBills.OrderBy(x => x.ID).OrderBy(x => x.AlreadyHouse).ToList(); | |||
| if (lastFirstSelect == null && weightBillGrid.CurrentRow != null) | |||
| { | |||
| lastFirstSelect = weightBillGrid.CurrentRow.DataBoundItem as HouseAndSanctionList; | |||
| if (lastFirstSelect.AlreadyHouse) | |||
| { | |||
| lastFirstSelect = null; | |||
| weightBillGrid.CurrentRow.DefaultCellStyle.BackColor = Color.YellowGreen; | |||
| } | |||
| } | |||
| foreach (DataGridViewRow row in weightBillGrid.Rows) | |||
| { | |||
| if ((bool)row.Cells["W_AlreadyHouse"].Value) | |||
| row.DefaultCellStyle.BackColor = Color.YellowGreen; | |||
| if (lastFirstSelect != null && lastFirstSelect.ID == (long)row.Cells["W_ID"].Value) | |||
| { | |||
| lastFirstSelect = row.DataBoundItem as HouseAndSanctionList; | |||
| if (lastFirstSelect.AlreadyHouse) | |||
| row.DefaultCellStyle.BackColor = Color.Yellow; | |||
| else | |||
| row.DefaultCellStyle.BackColor = weightBillGrid.RowsDefaultCellStyle.SelectionBackColor; | |||
| } | |||
| } | |||
| InitScrollBar(); | |||
| weightBillGrid.ClearSelection(); | |||
| try | |||
| { | |||
| if (firstRoll != -1) | |||
| weightBillGrid.FirstDisplayedScrollingRowIndex = firstRoll; | |||
| } | |||
| catch | |||
| { | |||
| firstRoll = -1; | |||
| } | |||
| weightBillGrid.Refresh(); | |||
| } | |||
| private void AddKeyPadForTab1() | |||
| { | |||
| for (var i = 1; i < 10; i++) | |||
| { | |||
| var btn = new Button() { Name = "_" + i, Text = i.ToString(), Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| btn.Click += (sender, e) => | |||
| { | |||
| if (flag == 1) | |||
| { | |||
| numberBox.Text += btn.Text; | |||
| } | |||
| else if (flag == 2) | |||
| InputSanctionNumber(btn.Text); | |||
| }; | |||
| keyBoardPanel.Controls.Add(btn); | |||
| } | |||
| var zero = new Button() { Name = "_0", Text = "0", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| zero.Click += (sender, e) => | |||
| { | |||
| if (flag == 1) | |||
| { | |||
| if (!string.IsNullOrEmpty(numberBox.Text)) | |||
| numberBox.Text += "0"; | |||
| } | |||
| else if (flag == 2) | |||
| InputSanctionNumber("0"); | |||
| }; | |||
| keyBoardPanel.Controls.Add(zero); | |||
| var back = new Button() { Name = "_back", Text = "←", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| back.Click += (sender, e) => | |||
| { | |||
| if (flag == 1) | |||
| { | |||
| if (!string.IsNullOrEmpty(numberBox.Text)) | |||
| numberBox.Text = numberBox.Text.Substring(0, numberBox.Text.Length - 1); | |||
| } | |||
| else if (flag == 2) | |||
| InputSanctionNumber("←"); | |||
| }; | |||
| keyBoardPanel.Controls.Add(back); | |||
| var clear = new Button() { Name = "_clear", Text = "清空", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| clear.Click += (sender, e) => | |||
| { | |||
| if (flag == 1) | |||
| { | |||
| numberBox.Text = string.Empty; | |||
| } | |||
| else if (flag == 2) | |||
| InputSanctionNumber("清空"); | |||
| }; | |||
| keyBoardPanel.Controls.Add(clear); | |||
| } | |||
| void InputSanctionNumber(string input) | |||
| { | |||
| if (sanctionGrid.CurrentCell == null) | |||
| throw new Exception("请选择一项异常"); | |||
| var tag = sanctionGrid.CurrentRow.DataBoundItem as SanctionSplit3Part; | |||
| var idx = sanctionGrid.SelectedCells[0].ColumnIndex; | |||
| if (idx > 3) | |||
| { | |||
| if (tag.Sanction_ID3 == 0) | |||
| return; | |||
| tag.Number3 = GetAfterNumber(tag.Number3, input); | |||
| } | |||
| else if (idx > 1) | |||
| { | |||
| if (tag.Sanction_ID2 == 0) | |||
| return; | |||
| tag.Number2 = GetAfterNumber(tag.Number2, input); | |||
| } | |||
| else | |||
| { | |||
| if (tag.Sanction_ID1 == 0) | |||
| return; | |||
| tag.Number1 = GetAfterNumber(tag.Number1, input); | |||
| } | |||
| sanctionGrid.Refresh(); | |||
| } | |||
| int? GetAfterNumber(int? oldValue, string input) | |||
| { | |||
| switch (input) | |||
| { | |||
| case "0": | |||
| if (oldValue.HasValue) | |||
| return int.Parse(oldValue + "0"); | |||
| return null; | |||
| case "←": | |||
| if (oldValue.HasValue) | |||
| { | |||
| var s = oldValue.ToString(); | |||
| s = s.Substring(0, s.Length - 1); | |||
| if (string.IsNullOrEmpty(s)) | |||
| return null; | |||
| return int.Parse(s); | |||
| } | |||
| return null; | |||
| case "清空": | |||
| return null; | |||
| default: | |||
| var sn = ""; | |||
| if (oldValue.HasValue) | |||
| sn = oldValue.ToString(); | |||
| sn += input; | |||
| return int.Parse(sn); | |||
| } | |||
| } | |||
| Button currentBtn; | |||
| private void AddHogGradeBtn() | |||
| { | |||
| foreach (var item in hogGradeList) | |||
| { | |||
| var btn = new Button() { Name = "_" + item.Item1, Tag = item, Text = item.Item2, Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { Left = 20, Top = 5 }, Font = new Font("宋体", 15), BackColor = btnUnSelectBackColor }; | |||
| btn.Click += (sender, e) => | |||
| { | |||
| if (currentBtn != null) | |||
| SetBtnUnCheck(currentBtn); | |||
| if (currentBtn != btn) | |||
| { | |||
| currentBtn = btn; | |||
| SetBtnChecked(currentBtn); | |||
| } | |||
| else | |||
| currentBtn = null; | |||
| }; | |||
| hogGradeBtn.Add(btn); | |||
| hogGradePanel.Controls.Add(btn); | |||
| } | |||
| } | |||
| private void BindSanctionGrid() | |||
| { | |||
| sanctionGrid.DataSource = sanctionList; | |||
| sanctionGrid.Refresh(); | |||
| } | |||
| List<Button> houseSelectedBtn = new List<Button>(); | |||
| private void AddHouseBtn() | |||
| { | |||
| int pageSize = 48; | |||
| foreach (var houseItems in houseList) | |||
| { | |||
| var tabPage = new TabPage(houseItems.Part); | |||
| tabPage.Name = string.Format("house_{0}", houseItems.Part); | |||
| var flowCount = houseItems.Details.Count / 48; | |||
| if (houseItems.Details.Count % 48 != 0) | |||
| flowCount += 1; | |||
| FlowLayoutPanel pageBtnPanel = null; | |||
| for (var i = 0; i < flowCount; i++) | |||
| { | |||
| var houseFlow = new FlowLayoutPanel() { RightToLeft = RightToLeft.No, Name = string.Format("houseFlow_{0}", houseItems.Part), BorderStyle = BorderStyle.FixedSingle }; | |||
| if (flowCount > 1) | |||
| { | |||
| if (i == 0) | |||
| { | |||
| pageBtnPanel = new FlowLayoutPanel() { Dock = DockStyle.Bottom, Height = 65, RightToLeft = RightToLeft.No, BorderStyle = BorderStyle.FixedSingle }; | |||
| pageBtnPanel.Location = new Point(3, 492 - 65); | |||
| } | |||
| else | |||
| houseFlow.Visible = false; | |||
| var btn = new Button() { Text = (i + 1).ToString(), Tag = houseFlow, Size = new Size(75, 55), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 5 }, Font = new Font("宋体", 15) }; | |||
| pageBtnPanel.Controls.Add(btn); | |||
| btn.Click += (sender, e) => | |||
| { | |||
| var currentBind = btn.Tag as FlowLayoutPanel; | |||
| foreach (var subControl in pageBtnPanel.Controls) | |||
| { | |||
| var pb = subControl as Button; | |||
| var p = pb.Tag as FlowLayoutPanel; | |||
| p.Visible = currentBind == p; | |||
| } | |||
| }; | |||
| houseFlow.Width = 709; | |||
| houseFlow.Height = 492 - 70; | |||
| } | |||
| else | |||
| houseFlow.Dock = DockStyle.Fill; | |||
| tabPage.Controls.Add(houseFlow); | |||
| if (pageBtnPanel != null) | |||
| tabPage.Controls.Add(pageBtnPanel); | |||
| int idx = i * pageSize; | |||
| for (var j = 0; j < pageSize; j++) | |||
| { | |||
| var padding = new Padding { All = 5 }; | |||
| if ((idx + 1) % 8 != 0 && (idx + 1) % 4 == 0) | |||
| padding = new Padding(5, 5, 15, 5); | |||
| var house = houseItems.Details[idx]; | |||
| var btn = new Button() { Name = "_" + house.Item1, Tag = house, Text = house.Item2, Size = new Size(77, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = padding, Font = new Font("宋体", 12), BackColor = btnUnSelectBackColor }; | |||
| btn.Click += (sender, e) => | |||
| { | |||
| if (houseSelectedBtn.Contains(btn)) | |||
| { | |||
| btn.BackColor = btnUnSelectBackColor; | |||
| btn.ForeColor = btnUnSelectForeColor; | |||
| houseSelectedBtn.Remove(btn); | |||
| } | |||
| else | |||
| { | |||
| btn.BackColor = btnSelectBackColor; | |||
| btn.ForeColor = btnSelectForeColor; | |||
| houseSelectedBtn.Add(btn); | |||
| } | |||
| }; | |||
| houseBtn.Add(btn); | |||
| houseFlow.Controls.Add(btn); | |||
| idx += 1; | |||
| if (idx == houseItems.Details.Count) | |||
| break; | |||
| } | |||
| } | |||
| housePanel.TabPages.Add(tabPage); | |||
| } | |||
| if (housePanel.TabPages.Count != 0) | |||
| housePanel.SelectedIndex = housePanel.TabPages.Count - 1; | |||
| } | |||
| private void closeBtn_Click(object sender, EventArgs e) | |||
| { | |||
| this.Close(); | |||
| } | |||
| private void commitBtn_Click(object sender, EventArgs e) | |||
| { | |||
| GetDataFromUI(); | |||
| bool multilOrder = HouseAndSanctionRpc.UpdateInsertHouseAndSanction(Dmo); | |||
| Dmo = null; | |||
| weightBills = HouseAndSanctionRpc.GetHouseAndSanctionList(testTimeInput.Date.Value); | |||
| BindWeightBillGrid(); | |||
| BindNumberLabel(); | |||
| ResetTab1Controls(); | |||
| if (multilOrder) | |||
| UMessageBox.Show(string.Format("提交完毕!{0} 磅单出现多次排宰", Environment.NewLine), "注意"); | |||
| else | |||
| UMessageBox.Show("提交成功!"); | |||
| } | |||
| private void syncBtn_Click(object sender, EventArgs e) | |||
| { | |||
| if (syncThread == null || !syncThread.IsAlive) | |||
| { | |||
| syncThread = new Thread(SyncTask); | |||
| syncThread.Start(); | |||
| syncBtn.BackColor = Color.FromArgb(15, 215, 107); | |||
| syncBtn.ForeColor = Color.White; | |||
| } | |||
| else | |||
| { | |||
| syncThread.Abort(); | |||
| syncBtn.BackColor = Color.FromKnownColor(KnownColor.Control); | |||
| syncBtn.ForeColor = Color.FromKnownColor(KnownColor.ControlText); | |||
| } | |||
| //BindNumberLabel(); | |||
| //tab1SyncThread = new Thread(StartQuery) { IsBackground = true }; | |||
| //tab1SyncThread.Start(); | |||
| } | |||
| //bool isWork = false; | |||
| //private void StartQuery() | |||
| //{ | |||
| // if (isWork) | |||
| // return; | |||
| // isWork = true; | |||
| // while (mainIsRun) | |||
| // { | |||
| // this.Invoke(new InvokeHandler(delegate() | |||
| // { | |||
| // weightBills = WeightBillRpc.GetUnHousedBill(testTimeInput.Date.Value); | |||
| // BindWeightBillGrid(); | |||
| // })); | |||
| // Thread.Sleep(10000); | |||
| // } | |||
| //} | |||
| void BindNumberLabel() | |||
| { | |||
| var inHouseNumber = HouseAndSanctionRpc.GetDetailTotalNumber(testTimeInput.Date.Value); | |||
| inHouseNumberLabel.Text = string.Format("{0}", inHouseNumber); | |||
| } | |||
| void GetDataFromUI() | |||
| { | |||
| if (Dmo == null) | |||
| { | |||
| if (lastFirstSelect == null) | |||
| throw new Exception("请选择需要处理的记录"); | |||
| Dmo = new HouseAndSanctionEdit(); | |||
| Dmo.ID = lastFirstSelect.ID; | |||
| } | |||
| else | |||
| { | |||
| Dmo.HouseDetails.Clear(); | |||
| Dmo.SanctionDetails.Clear(); | |||
| } | |||
| if (string.IsNullOrEmpty(numberBox.Text)) | |||
| throw new Exception("数量不能为空"); | |||
| //if (currentBtn == null) | |||
| //throw new Exception("请选等级"); | |||
| if (houseSelectedBtn.Count == 0) | |||
| throw new Exception("请选择圈舍"); | |||
| foreach (var btn in houseSelectedBtn) | |||
| { | |||
| var house = btn.Tag as Tuple<string, string>; | |||
| var houseDetail = new WeightBill_HouseDetail() { WeightBill_ID = Dmo.ID, LiveColonyHouse_ID = long.Parse(house.Item1), LiveColonyHouse_Name = house.Item2 }; | |||
| Dmo.HouseDetails.Add(houseDetail); | |||
| houseDetail.Index = Dmo.HouseDetails.Max(x => x.Index) + 1; | |||
| } | |||
| if (currentBtn != null) | |||
| { | |||
| var gradeTag = currentBtn.Tag as Tuple<string, string>; | |||
| Dmo.HogGrade_ID = long.Parse(gradeTag.Item1); | |||
| Dmo.HogGrade_Name = gradeTag.Item2; | |||
| } | |||
| Dmo.Number = int.Parse(numberBox.Text); | |||
| foreach (DataGridViewRow row in sanctionGrid.Rows) | |||
| { | |||
| var tag = row.DataBoundItem as SanctionSplit3Part; | |||
| if ((tag.Number1 ?? 0) != 0) | |||
| { | |||
| var detail = new WeightBill_SanctionDetail(); | |||
| Dmo.SanctionDetails.Add(detail); | |||
| detail.WeightBill_ID = Dmo.ID; | |||
| detail.Index = Dmo.SanctionDetails.Max(x => x.Index) + 1; | |||
| detail.Sanction_ID = tag.Sanction_ID1; | |||
| detail.AbnormalItem_ID = tag.AbnormalItem_ID1; | |||
| detail.AbnormalItem_Name = tag.AbnormalItem_Name1; | |||
| detail.Number = tag.Number1; | |||
| } | |||
| if ((tag.Number2 ?? 0) != 0) | |||
| { | |||
| var detail = new WeightBill_SanctionDetail(); | |||
| Dmo.SanctionDetails.Add(detail); | |||
| detail.WeightBill_ID = Dmo.ID; | |||
| detail.Index = Dmo.SanctionDetails.Max(x => x.Index) + 1; | |||
| detail.Sanction_ID = tag.Sanction_ID2; | |||
| detail.AbnormalItem_ID = tag.AbnormalItem_ID2; | |||
| detail.AbnormalItem_Name = tag.AbnormalItem_Name2; | |||
| detail.Number = tag.Number2; | |||
| } | |||
| if ((tag.Number3 ?? 0) != 0) | |||
| { | |||
| var detail = new WeightBill_SanctionDetail(); | |||
| Dmo.SanctionDetails.Add(detail); | |||
| detail.WeightBill_ID = Dmo.ID; | |||
| detail.Index = Dmo.SanctionDetails.Max(x => x.Index) + 1; | |||
| detail.Sanction_ID = tag.Sanction_ID3; | |||
| detail.AbnormalItem_ID = tag.AbnormalItem_ID3; | |||
| detail.AbnormalItem_Name = tag.AbnormalItem_Name3; | |||
| detail.Number = tag.Number3; | |||
| } | |||
| } | |||
| } | |||
| void ResetTab1Controls() | |||
| { | |||
| foreach (var item in houseSelectedBtn) | |||
| SetBtnUnCheck(item); | |||
| houseSelectedBtn.Clear(); | |||
| if (currentBtn != null) | |||
| SetBtnUnCheck(currentBtn); | |||
| numberBox.Text = string.Empty; | |||
| foreach (var item in sanctionList) | |||
| item.Number1 = item.Number2 = item.Number3 = null; | |||
| sanctionGrid.Refresh(); | |||
| uTabControl2.SelectedIndex = 0; | |||
| flag = 1; | |||
| } | |||
| private void weightBillGrid_CellClick(object sender, DataGridViewCellEventArgs e) | |||
| { | |||
| if (e.RowIndex < 0) | |||
| return; | |||
| if (lastFirstSelect != null) | |||
| { | |||
| foreach (DataGridViewRow row in weightBillGrid.Rows) | |||
| { | |||
| if (lastFirstSelect.ID == (long)row.Cells["W_ID"].Value) | |||
| { | |||
| row.DefaultCellStyle.BackColor = lastFirstSelect.AlreadyHouse ? Color.YellowGreen : weightBillGrid.RowsDefaultCellStyle.BackColor; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| lastFirstSelect = weightBillGrid.CurrentRow.DataBoundItem as HouseAndSanctionList; | |||
| weightBillGrid.CurrentRow.DefaultCellStyle.SelectionBackColor = lastFirstSelect.AlreadyHouse ? Color.Yellow : weightBillGrid.RowsDefaultCellStyle.SelectionBackColor; | |||
| weightBillGrid.Refresh(); | |||
| ResetTab1Controls(); | |||
| Tab1AppToUI(); | |||
| } | |||
| void Tab1AppToUI() | |||
| { | |||
| Dmo = HouseAndSanctionRpc.GetHouseAndSanctionDetail(lastFirstSelect.ID); | |||
| numberBox.Text = string.Empty; | |||
| if (Dmo.HogGrade_ID.HasValue) | |||
| { | |||
| var first = hogGradeBtn.FirstOrDefault(x => x.Name == "_" + Dmo.HogGrade_ID); | |||
| if (first != null) | |||
| { | |||
| currentBtn = first; | |||
| SetBtnChecked(currentBtn); | |||
| } | |||
| } | |||
| foreach (var item in Dmo.HouseDetails) | |||
| { | |||
| var first = houseBtn.FirstOrDefault(x => x.Name == "_" + item.LiveColonyHouse_ID); | |||
| if (first != null) | |||
| { | |||
| SetBtnChecked(first); | |||
| houseSelectedBtn.Add(first); | |||
| } | |||
| } | |||
| foreach (var item in Dmo.SanctionDetails) | |||
| { | |||
| var first = sanctionList.FirstOrDefault(x => x.AbnormalItem_ID1 == item.AbnormalItem_ID); | |||
| if (first != null) | |||
| { | |||
| first.Number1 = item.Number; | |||
| continue; | |||
| } | |||
| var second = sanctionList.FirstOrDefault(x => x.AbnormalItem_ID2 == item.AbnormalItem_ID); | |||
| if (second != null) | |||
| { | |||
| second.Number2 = item.Number; | |||
| continue; | |||
| } | |||
| var third = sanctionList.FirstOrDefault(x => x.AbnormalItem_ID3 == item.AbnormalItem_ID); | |||
| if (third != null) | |||
| { | |||
| third.Number3 = item.Number; | |||
| continue; | |||
| } | |||
| } | |||
| sanctionGrid.DataSource = sanctionList; | |||
| sanctionGrid.Refresh(); | |||
| } | |||
| void SetBtnChecked(Button btn) | |||
| { | |||
| btn.BackColor = btnSelectBackColor; | |||
| btn.ForeColor = btnSelectForeColor; | |||
| } | |||
| void SetBtnUnCheck(Button btn) | |||
| { | |||
| btn.BackColor = btnUnSelectBackColor; | |||
| btn.ForeColor = btnUnSelectForeColor; | |||
| } | |||
| int firstRoll = -1; | |||
| private void InitScrollBar() | |||
| { | |||
| vScrollBar1.Maximum = (weightBillGrid.RowCount - weightBillGrid.DisplayedRowCount(false) + 30) * weightBillGrid.RowTemplate.Height; | |||
| vScrollBar1.Minimum = 0; | |||
| vScrollBar1.SmallChange = weightBillGrid.RowTemplate.Height; | |||
| vScrollBar1.LargeChange = weightBillGrid.RowTemplate.Height * 30; | |||
| this.vScrollBar1.Scroll += (sender, e) => | |||
| { | |||
| firstRoll = e.NewValue / weightBillGrid.RowTemplate.Height; | |||
| weightBillGrid.FirstDisplayedScrollingRowIndex = firstRoll; | |||
| }; | |||
| } | |||
| } | |||
| class SanctionSplit3Part | |||
| { | |||
| public long Sanction_ID1 { get; set; } | |||
| public long AbnormalItem_ID1 { get; set; } | |||
| public string AbnormalItem_Name1 { get; set; } | |||
| public int? Number1 { get; set; } | |||
| public long Sanction_ID2 { get; set; } | |||
| public long AbnormalItem_ID2 { get; set; } | |||
| public string AbnormalItem_Name2 { get; set; } | |||
| public int? Number2 { get; set; } | |||
| public long Sanction_ID3 { get; set; } | |||
| public long AbnormalItem_ID3 { get; set; } | |||
| public string AbnormalItem_Name3 { get; set; } | |||
| public int? Number3 { get; set; } | |||
| public static List<SanctionSplit3Part> Init(List<Tuple<long, long, string>> list) | |||
| { | |||
| var result = new List<SanctionSplit3Part>(); | |||
| var count = list.Count / 3; | |||
| if (list.Count % 3 != 0) | |||
| count += 1; | |||
| for (var i = 0; i < count; i++) | |||
| { | |||
| var detail = new SanctionSplit3Part(); | |||
| result.Add(detail); | |||
| var idx = i * 3; | |||
| var item = list[idx]; | |||
| detail.Sanction_ID1 = item.Item1; | |||
| detail.AbnormalItem_ID1 = item.Item2; | |||
| detail.AbnormalItem_Name1 = item.Item3; | |||
| idx += 1; | |||
| if (idx == list.Count) | |||
| break; | |||
| item = list[idx]; | |||
| detail.Sanction_ID2 = item.Item1; | |||
| detail.AbnormalItem_ID2 = item.Item2; | |||
| detail.AbnormalItem_Name2 = item.Item3; | |||
| idx += 1; | |||
| if (idx == list.Count) | |||
| break; | |||
| item = list[idx]; | |||
| detail.Sanction_ID3 = item.Item1; | |||
| detail.AbnormalItem_ID3 = item.Item2; | |||
| detail.AbnormalItem_Name3 = item.Item3; | |||
| } | |||
| return result; | |||
| } | |||
| public static List<Tuple<long, long, string, int>> ReInit(List<SanctionSplit3Part> list) | |||
| { | |||
| var result = new List<Tuple<long, long, string, int>>(); | |||
| foreach (var item in list) | |||
| { | |||
| if ((item.Number1 ?? 0) != 0) | |||
| { | |||
| var detail = new Tuple<long, long, string, int>(item.Sanction_ID1, item.AbnormalItem_ID1, item.AbnormalItem_Name1, item.Number1.Value); | |||
| result.Add(detail); | |||
| } | |||
| if (item.Sanction_ID2 == 0) | |||
| break; | |||
| if ((item.Number2 ?? 0) != 0) | |||
| { | |||
| var detail = new Tuple<long, long, string, int>(item.Sanction_ID2, item.AbnormalItem_ID2, item.AbnormalItem_Name2, item.Number2.Value); | |||
| result.Add(detail); | |||
| } | |||
| if (item.Sanction_ID3 == 0) | |||
| break; | |||
| if ((item.Number3 ?? 0) != 0) | |||
| { | |||
| var detail = new Tuple<long, long, string, int>(item.Sanction_ID3, item.AbnormalItem_ID3, item.AbnormalItem_Name3, item.Number3.Value); | |||
| result.Add(detail); | |||
| } | |||
| } | |||
| return result; | |||
| } | |||
| } | |||
| class HouseSplitEntity | |||
| { | |||
| public string Part { get; set; } | |||
| List<Tuple<string, string>> details = new List<Tuple<string, string>>(); | |||
| public List<Tuple<string, string>> Details { get { return details; } } | |||
| public static List<HouseSplitEntity> Init(List<Tuple<string, string>> list) | |||
| { | |||
| var result = new List<HouseSplitEntity>(); | |||
| foreach (var item in list) | |||
| { | |||
| var part = item.Item2[0].ToString(); | |||
| var first = result.FirstOrDefault(x => x.Part == part); | |||
| if (first == null) | |||
| { | |||
| first = new HouseSplitEntity { Part = part }; | |||
| result.Add(first); | |||
| } | |||
| first.Details.Add(new Tuple<string, string>(item.Item1, item.Item2)); | |||
| } | |||
| result.Reverse(); | |||
| return result; | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,246 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <root> | |||
| <!-- | |||
| Microsoft ResX Schema | |||
| Version 2.0 | |||
| The primary goals of this format is to allow a simple XML format | |||
| that is mostly human readable. The generation and parsing of the | |||
| various data types are done through the TypeConverter classes | |||
| associated with the data types. | |||
| Example: | |||
| ... ado.net/XML headers & schema ... | |||
| <resheader name="resmimetype">text/microsoft-resx</resheader> | |||
| <resheader name="version">2.0</resheader> | |||
| <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
| <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
| <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
| <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
| <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
| <value>[base64 mime encoded serialized .NET Framework object]</value> | |||
| </data> | |||
| <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
| <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
| <comment>This is a comment</comment> | |||
| </data> | |||
| There are any number of "resheader" rows that contain simple | |||
| name/value pairs. | |||
| Each data row contains a name, and value. The row also contains a | |||
| type or mimetype. Type corresponds to a .NET class that support | |||
| text/value conversion through the TypeConverter architecture. | |||
| Classes that don't support this are serialized and stored with the | |||
| mimetype set. | |||
| The mimetype is used for serialized objects, and tells the | |||
| ResXResourceReader how to depersist the object. This is currently not | |||
| extensible. For a given mimetype the value must be set accordingly: | |||
| Note - application/x-microsoft.net.object.binary.base64 is the format | |||
| that the ResXResourceWriter will generate, however the reader can | |||
| read any of the formats listed below. | |||
| mimetype: application/x-microsoft.net.object.binary.base64 | |||
| value : The object must be serialized with | |||
| : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
| : and then encoded with base64 encoding. | |||
| mimetype: application/x-microsoft.net.object.soap.base64 | |||
| value : The object must be serialized with | |||
| : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
| : and then encoded with base64 encoding. | |||
| mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
| value : The object must be serialized into a byte array | |||
| : using a System.ComponentModel.TypeConverter | |||
| : and then encoded with base64 encoding. | |||
| --> | |||
| <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
| <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
| <xsd:element name="root" msdata:IsDataSet="true"> | |||
| <xsd:complexType> | |||
| <xsd:choice maxOccurs="unbounded"> | |||
| <xsd:element name="metadata"> | |||
| <xsd:complexType> | |||
| <xsd:sequence> | |||
| <xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
| </xsd:sequence> | |||
| <xsd:attribute name="name" use="required" type="xsd:string" /> | |||
| <xsd:attribute name="type" type="xsd:string" /> | |||
| <xsd:attribute name="mimetype" type="xsd:string" /> | |||
| <xsd:attribute ref="xml:space" /> | |||
| </xsd:complexType> | |||
| </xsd:element> | |||
| <xsd:element name="assembly"> | |||
| <xsd:complexType> | |||
| <xsd:attribute name="alias" type="xsd:string" /> | |||
| <xsd:attribute name="name" type="xsd:string" /> | |||
| </xsd:complexType> | |||
| </xsd:element> | |||
| <xsd:element name="data"> | |||
| <xsd:complexType> | |||
| <xsd:sequence> | |||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
| <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
| </xsd:sequence> | |||
| <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
| <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
| <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
| <xsd:attribute ref="xml:space" /> | |||
| </xsd:complexType> | |||
| </xsd:element> | |||
| <xsd:element name="resheader"> | |||
| <xsd:complexType> | |||
| <xsd:sequence> | |||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
| </xsd:sequence> | |||
| <xsd:attribute name="name" type="xsd:string" use="required" /> | |||
| </xsd:complexType> | |||
| </xsd:element> | |||
| </xsd:choice> | |||
| </xsd:complexType> | |||
| </xsd:element> | |||
| </xsd:schema> | |||
| <resheader name="resmimetype"> | |||
| <value>text/microsoft-resx</value> | |||
| </resheader> | |||
| <resheader name="version"> | |||
| <value>2.0</value> | |||
| </resheader> | |||
| <resheader name="reader"> | |||
| <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
| </resheader> | |||
| <resheader name="writer"> | |||
| <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
| </resheader> | |||
| <metadata name="S_AbnormalItem_Name1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Number1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_AbnormalItem_Name2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Number2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_AbnormalItem_Name3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Number3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Sanction_ID1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_AbnormalItem_ID1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Sanction_ID2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_AbnormalItem_ID2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_Sanction_ID3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="S_AbnormalItem_ID3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_AlreadyHouse.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_B3ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_Employee_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_Supplier_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_Number.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="W_HouseNames.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_WeightBill_ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_Show.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_B3ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_Supplier_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_HouseNames.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_Number.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_AlreadyNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_LastNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_WeighTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_OKBtn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="P_Hidden.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_Technics.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_IsHurryButcher.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_WeightBill_ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_SecondarySplit.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_Date.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_Order.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_B3WeighBill_ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_Supplier_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_LiveColonyHouse_Name.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_PlanNumber.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| <metadata name="O_OKBtn.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
| <value>True</value> | |||
| </metadata> | |||
| </root> | |||
| @ -0,0 +1,418 @@ | |||
| using BO; | |||
| using BO.BO.Bill; | |||
| using BO.Utils.BillRpc; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Drawing; | |||
| using System.Linq; | |||
| using System.Text; | |||
| using System.Threading; | |||
| using System.Threading.Tasks; | |||
| using System.Windows.Forms; | |||
| namespace OffLineQualityAndOrder | |||
| { | |||
| partial class OffLineQualityOrderForm | |||
| { | |||
| List<NeedOrderEntity> needOrderList; | |||
| List<OrderDetail> orderList; | |||
| Thread orderSyncTask; | |||
| Thread bt2SyncTask; | |||
| void Tab2Init() | |||
| { | |||
| tab2DateSelect.Date = DateTime.Today; | |||
| butcherDateInput.Date = DateTime.Today; | |||
| orderGrid.AutoGenerateColumns = false; | |||
| preOrderGrid.AutoGenerateColumns = false; | |||
| orderGrid.DataSource = null; | |||
| preOrderGrid.DataSource = null; | |||
| AddKeyPadForTab2(); | |||
| } | |||
| private void AddKeyPadForTab2() | |||
| { | |||
| for (var i = 1; i < 10; i++) | |||
| { | |||
| var btn = new Button() { Name = "_2" + i, Text = i.ToString(), Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| btn.Click += (sender, e) => | |||
| { | |||
| InputPlanNumber(btn.Text); | |||
| }; | |||
| tab2KeyPanel.Controls.Add(btn); | |||
| } | |||
| var zero = new Button() { Name = "_20", Text = "0", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| zero.Click += (sender, e) => | |||
| { | |||
| InputPlanNumber(zero.Text); | |||
| }; | |||
| tab2KeyPanel.Controls.Add(zero); | |||
| var back = new Button() { Name = "_2back", Text = "←", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| back.Click += (sender, e) => | |||
| { | |||
| InputPlanNumber(back.Text); | |||
| }; | |||
| tab2KeyPanel.Controls.Add(back); | |||
| var clear = new Button() { Name = "_2clear", Text = "清空", Size = new Size(80, 60), TextAlign = ContentAlignment.MiddleCenter, Margin = new Padding { All = 10 }, Font = new Font("宋体", 15) }; | |||
| clear.Click += (sender, e) => | |||
| { | |||
| InputPlanNumber(clear.Text); | |||
| }; | |||
| tab2KeyPanel.Controls.Add(clear); | |||
| } | |||
| void InputPlanNumber(string input) | |||
| { | |||
| if (lastOrderDetail == null) | |||
| throw new Exception("请选择一条排宰明细"); | |||
| lastOrderDetail.PlanNumber = GetAfterNumber(lastOrderDetail.PlanNumber, input) ?? 0; | |||
| orderGrid.Refresh(); | |||
| } | |||
| private void butcherSearch_Click(object sender, EventArgs e) | |||
| { | |||
| if (orderSyncTask == null || !orderSyncTask.IsAlive) | |||
| { | |||
| orderSyncTask = new Thread(OrderSearchTask); | |||
| orderSyncTask.Start(); | |||
| butcherSearch.BackColor = Color.FromArgb(15, 215, 107); | |||
| butcherSearch.ForeColor = Color.White; | |||
| } | |||
| else | |||
| { | |||
| orderSyncTask.Abort(); | |||
| butcherSearch.BackColor = Color.FromKnownColor(KnownColor.Control); | |||
| butcherSearch.ForeColor = Color.FromKnownColor(KnownColor.ControlText); | |||
| } | |||
| } | |||
| private void tab2SyncBtn_Click(object sender, EventArgs e) | |||
| { | |||
| if (bt2SyncTask == null || !bt2SyncTask.IsAlive) | |||
| { | |||
| bt2SyncTask = new Thread(Tb2SyncTask); | |||
| bt2SyncTask.Start(); | |||
| tab2SyncBtn.BackColor = Color.FromArgb(15, 215, 107); | |||
| tab2SyncBtn.ForeColor = Color.White; | |||
| } | |||
| else | |||
| { | |||
| bt2SyncTask.Abort(); | |||
| tab2SyncBtn.BackColor = Color.FromKnownColor(KnownColor.Control); | |||
| tab2SyncBtn.ForeColor = Color.FromKnownColor(KnownColor.ControlText); | |||
| } | |||
| } | |||
| void Tb2SyncTask() | |||
| { | |||
| while (true) | |||
| { | |||
| this.Invoke(new InvokeHandler(delegate() | |||
| { | |||
| BindPreOrderGrid(); | |||
| })); | |||
| Thread.Sleep(5000); | |||
| } | |||
| } | |||
| void OrderSearchTask() | |||
| { | |||
| while (true) | |||
| { | |||
| this.Invoke(new InvokeHandler(delegate() | |||
| { | |||
| BindOrderGrid(); | |||
| })); | |||
| Thread.Sleep(5000); | |||
| } | |||
| } | |||
| NeedOrderEntity lastPreOrder; | |||
| void BindPreOrderGrid() | |||
| { | |||
| needOrderList = OrderDetailRpc.GetNeedOrderWeightBill(tab2DateSelect.Date.Value, GetSelectType()); | |||
| preOrderGrid.DataSource = needOrderList.OrderBy(x => x.WeighTime).ToList(); | |||
| foreach (DataGridViewRow row in preOrderGrid.Rows) | |||
| { | |||
| var show = (bool)row.Cells["P_Show"].Value; | |||
| if (!show) | |||
| row.DefaultCellStyle.BackColor = Color.YellowGreen; | |||
| ((DataGridViewButtonCell)row.Cells["P_Hidden"]).Value = show ? "隐藏" : "显示"; | |||
| if (lastPreOrder != null && lastPreOrder.WeightBill_ID == (long)row.Cells["P_WeightBill_ID"].Value) | |||
| { | |||
| lastPreOrder = row.DataBoundItem as NeedOrderEntity; | |||
| if (lastPreOrder.Show) | |||
| row.DefaultCellStyle.BackColor = preOrderGrid.RowsDefaultCellStyle.SelectionBackColor; | |||
| else | |||
| row.DefaultCellStyle.BackColor = Color.Yellow; | |||
| } | |||
| } | |||
| InitScrollBar3(); | |||
| preOrderGrid.ClearSelection(); | |||
| try | |||
| { | |||
| if (r2Roll != -1) | |||
| preOrderGrid.FirstDisplayedScrollingRowIndex = r2Roll; | |||
| } | |||
| catch | |||
| { | |||
| r2Roll = -1; | |||
| } | |||
| preOrderGrid.Refresh(); | |||
| } | |||
| OrderDetail lastOrderDetail; | |||
| void BindOrderGrid() | |||
| { | |||
| orderList = OrderDetailRpc.GetOrderDetail(butcherDateInput.Date.Value); | |||
| if (lastOrderDetail != null) | |||
| { | |||
| var t = orderList.FirstOrDefault(x => x.ID == lastOrderDetail.ID); | |||
| if (t != null) | |||
| t.PlanNumber = lastOrderDetail.PlanNumber; | |||
| } | |||
| orderGrid.DataSource = orderList.OrderByDescending(x => x.Order).ToList(); | |||
| if (lastOrderDetail == null && orderGrid.CurrentRow != null) | |||
| { | |||
| lastOrderDetail = orderGrid.CurrentRow.DataBoundItem as OrderDetail; | |||
| } | |||
| foreach (DataGridViewRow row in orderGrid.Rows) | |||
| { | |||
| if ((bool)row.Cells["O_IsHurryButcher"].Value) | |||
| row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#CC9999"); | |||
| if ((bool)row.Cells["O_SecondarySplit"].Value) | |||
| row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#6699CC"); | |||
| if ((short)row.Cells["O_Technics"].Value == 0) | |||
| row.DefaultCellStyle.BackColor = green; | |||
| else | |||
| row.DefaultCellStyle.BackColor = yellow; | |||
| if (lastOrderDetail != null && lastOrderDetail.ID == (long)row.Cells["O_ID"].Value) | |||
| { | |||
| lastOrderDetail = row.DataBoundItem as OrderDetail; | |||
| var c = orderGrid.RowsDefaultCellStyle.SelectionBackColor; | |||
| if (lastOrderDetail.IsHurryButcher) | |||
| row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#FF9900"); | |||
| if (lastOrderDetail.SecondarySplit) | |||
| row.DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#006699"); | |||
| row.DefaultCellStyle.BackColor = c; | |||
| } | |||
| } | |||
| InitScrollBar2(); | |||
| orderGrid.ClearSelection(); | |||
| try | |||
| { | |||
| if (r1Roll != -1) | |||
| orderGrid.FirstDisplayedScrollingRowIndex = r1Roll; | |||
| } | |||
| catch | |||
| { | |||
| r1Roll = -1; | |||
| } | |||
| orderGrid.Refresh(); | |||
| } | |||
| private void preOrderGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) | |||
| { | |||
| if (e.RowIndex == -1) | |||
| return; | |||
| if (e.ColumnIndex < preOrderGrid.ColumnCount - 2) | |||
| return; | |||
| if (e.ColumnIndex == preOrderGrid.ColumnCount - 2) | |||
| { | |||
| if (gy == 工艺.默认) | |||
| throw new Exception("请指定工艺"); | |||
| var currentOrder = 0; | |||
| if (lastOrderDetail != null && lastOrderDetail.Date != butcherDateInput.Date) | |||
| lastOrderDetail = null; | |||
| if (lastOrderDetail != null) | |||
| currentOrder = OrderDetailRpc.GetCurrentOrder(lastOrderDetail.ID); | |||
| else | |||
| currentOrder = OrderDetailRpc.GetMaxOrder(butcherDateInput.Date.Value); | |||
| currentOrder++; | |||
| var order = new OrderDetail(); | |||
| order.Technics = (short)gy; | |||
| order.Technics_Name = gy.ToString(); | |||
| order.Order = currentOrder; | |||
| order.LiveColonyHouse_Name = lastPreOrder.HouseNames; | |||
| order.PlanNumber = lastPreOrder.LastNumber; | |||
| order.WeightBill_ID = lastPreOrder.WeightBill_ID; | |||
| order.B3WeighBill_ID = lastPreOrder.B3ID; | |||
| order.Date = butcherDateInput.Date.Value; | |||
| OrderDetailRpc.Insert(order); | |||
| lastOrderDetail = order; | |||
| BindOrderGrid(); | |||
| } | |||
| else | |||
| OrderDetailRpc.ChangeShowType((long)preOrderGrid.CurrentRow.Cells["P_WeightBill_ID"].Value, !(bool)preOrderGrid.CurrentRow.Cells["P_Show"].Value); | |||
| BindPreOrderGrid(); | |||
| } | |||
| private void preOrderGrid_CellClick(object sender, DataGridViewCellEventArgs e) | |||
| { | |||
| if (e.RowIndex == -1) | |||
| return; | |||
| var entity = preOrderGrid.CurrentRow.DataBoundItem as NeedOrderEntity; | |||
| if (e.ColumnIndex == preOrderGrid.ColumnCount - 2)//排宰 | |||
| { | |||
| if (lastPreOrder != null) | |||
| { | |||
| foreach (DataGridViewRow row in preOrderGrid.Rows) | |||
| { | |||
| if (lastPreOrder.WeightBill_ID == (long)row.Cells["P_WeightBill_ID"].Value) | |||
| { | |||
| row.DefaultCellStyle.BackColor = lastPreOrder.Show ? preOrderGrid.RowsDefaultCellStyle.BackColor : Color.YellowGreen; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| lastPreOrder = entity; | |||
| preOrderGrid.CurrentRow.DefaultCellStyle.SelectionBackColor = lastPreOrder.Show ? preOrderGrid.RowsDefaultCellStyle.SelectionBackColor : Color.Yellow; | |||
| } | |||
| else | |||
| { | |||
| lastPreOrder = null; | |||
| } | |||
| preOrderGrid.Refresh(); | |||
| } | |||
| private void orderGrid_CellContentClick(object sender, DataGridViewCellEventArgs e) | |||
| { | |||
| if (e.RowIndex == -1) | |||
| return; | |||
| if (e.ColumnIndex != orderGrid.ColumnCount - 1) | |||
| return; | |||
| if (lastOrderDetail.PlanNumber < 0) | |||
| throw new Exception("排宰头数不能小于0"); | |||
| var lastNumber = OrderDetailRpc.GetLastNumber(lastOrderDetail.WeightBill_ID, lastOrderDetail.ID); | |||
| if (lastOrderDetail.PlanNumber > lastNumber) | |||
| throw new Exception("排宰总头数多于过磅头数"); | |||
| var dbCurrentNumber = OrderDetailRpc.GetCurrentOrderPlanNumber(lastOrderDetail.ID); | |||
| if (lastOrderDetail.PlanNumber == dbCurrentNumber) | |||
| return; | |||
| if (lastOrderDetail.PlanNumber == 0) | |||
| { | |||
| OrderDetailRpc.Delete(lastOrderDetail.ID); | |||
| lastOrderDetail = null; | |||
| } | |||
| else | |||
| OrderDetailRpc.UpdateNumber(lastOrderDetail.ID, lastOrderDetail.PlanNumber); | |||
| BindPreOrderGrid(); | |||
| BindOrderGrid(); | |||
| } | |||
| private void orderGrid_CellClick(object sender, DataGridViewCellEventArgs e) | |||
| { | |||
| if (e.RowIndex == -1) | |||
| return; | |||
| var entity = orderGrid.CurrentRow.DataBoundItem as OrderDetail; | |||
| if (lastOrderDetail != null) | |||
| { | |||
| foreach (DataGridViewRow row in orderGrid.Rows) | |||
| { | |||
| if (lastOrderDetail.ID == (long)row.Cells["O_ID"].Value) | |||
| { | |||
| Color c = orderGrid.RowsDefaultCellStyle.BackColor; | |||
| if (lastOrderDetail.IsHurryButcher) | |||
| c = ColorTranslator.FromHtml("#CC9999"); | |||
| if (lastOrderDetail.SecondarySplit) | |||
| c = ColorTranslator.FromHtml("#6699CC"); | |||
| if (lastOrderDetail.Technics == 0) | |||
| c = green; | |||
| else | |||
| c = yellow; | |||
| row.DefaultCellStyle.BackColor = c; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| lastOrderDetail = entity; | |||
| var bc = orderGrid.RowsDefaultCellStyle.SelectionBackColor; | |||
| if (lastOrderDetail.IsHurryButcher) | |||
| bc = ColorTranslator.FromHtml("#FF9900"); | |||
| if (lastOrderDetail.SecondarySplit) | |||
| bc = ColorTranslator.FromHtml("#006699"); | |||
| orderGrid.CurrentRow.DefaultCellStyle.SelectionBackColor = bc; | |||
| orderGrid.Refresh(); | |||
| } | |||
| bool? GetSelectType() | |||
| { | |||
| bool? type = null; | |||
| if (showAvailable.Checked) | |||
| type = true; | |||
| else if (showHidden.Checked) | |||
| type = false; | |||
| return type; | |||
| } | |||
| private void showRadio_CheckedChanged(object sender, EventArgs e) | |||
| { | |||
| BindPreOrderGrid(); | |||
| } | |||
| int r1Roll = -1; | |||
| private void InitScrollBar2() | |||
| { | |||
| vScrollBar2.Maximum = (orderGrid.RowCount - orderGrid.DisplayedRowCount(false) + 30) * orderGrid.RowTemplate.Height; | |||
| vScrollBar2.Minimum = 0; | |||
| vScrollBar2.SmallChange = orderGrid.RowTemplate.Height; | |||
| vScrollBar2.LargeChange = orderGrid.RowTemplate.Height * 30; | |||
| this.vScrollBar2.Scroll += (sender, e) => | |||
| { | |||
| r1Roll = e.NewValue / orderGrid.RowTemplate.Height; | |||
| orderGrid.FirstDisplayedScrollingRowIndex = r1Roll; | |||
| }; | |||
| } | |||
| int r2Roll = -1; | |||
| private void InitScrollBar3() | |||
| { | |||
| vScrollBar3.Maximum = (preOrderGrid.RowCount - preOrderGrid.DisplayedRowCount(false) + 30) * preOrderGrid.RowTemplate.Height; | |||
| vScrollBar3.Minimum = 0; | |||
| vScrollBar3.SmallChange = preOrderGrid.RowTemplate.Height; | |||
| vScrollBar3.LargeChange = preOrderGrid.RowTemplate.Height * 30; | |||
| this.vScrollBar3.Scroll += (sender, e) => | |||
| { | |||
| r2Roll = e.NewValue / preOrderGrid.RowTemplate.Height; | |||
| preOrderGrid.FirstDisplayedScrollingRowIndex = r2Roll; | |||
| }; | |||
| } | |||
| 工艺 gy = 工艺.默认; | |||
| private void tangBtn_Click(object sender, EventArgs e) | |||
| { | |||
| gy = 工艺.烫褪; | |||
| SetTechBtnChecked(tangBtn, green); | |||
| SetBtnUnCheck(maoBtn); | |||
| } | |||
| private void maoBtn_Click(object sender, EventArgs e) | |||
| { | |||
| gy = 工艺.毛剥; | |||
| SetTechBtnChecked(maoBtn, yellow); | |||
| SetBtnUnCheck(tangBtn); | |||
| } | |||
| void SetTechBtnChecked(Button btn, Color c) | |||
| { | |||
| btn.BackColor = c; | |||
| btn.ForeColor = btnSelectForeColor; | |||
| } | |||
| Color green = ColorTranslator.FromHtml("#3CC24C"); | |||
| Color yellow = ColorTranslator.FromHtml("#FFDE5A"); | |||
| } | |||
| enum 工艺 | |||
| { | |||
| 默认 = -1, | |||
| 烫褪 = 0, | |||
| 毛剥 = 1 | |||
| } | |||
| } | |||
| @ -0,0 +1,36 @@ | |||
| using System.Reflection; | |||
| using System.Runtime.CompilerServices; | |||
| using System.Runtime.InteropServices; | |||
| // 有关程序集的常规信息通过以下 | |||
| // 特性集控制。更改这些特性值可修改 | |||
| // 与程序集关联的信息。 | |||
| [assembly: AssemblyTitle("OffLineQualityAndOrder")] | |||
| [assembly: AssemblyDescription("")] | |||
| [assembly: AssemblyConfiguration("")] | |||
| [assembly: AssemblyCompany("")] | |||
| [assembly: AssemblyProduct("OffLineQualityAndOrder")] | |||
| [assembly: AssemblyCopyright("Copyright © 2018")] | |||
| [assembly: AssemblyTrademark("")] | |||
| [assembly: AssemblyCulture("")] | |||
| // 将 ComVisible 设置为 false 使此程序集中的类型 | |||
| // 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, | |||
| // 则将该类型上的 ComVisible 特性设置为 true。 | |||
| [assembly: ComVisible(false)] | |||
| // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID | |||
| [assembly: Guid("ed57ba07-6468-4227-b219-3bbd4e213103")] | |||
| // 程序集的版本信息由下面四个值组成: | |||
| // | |||
| // 主版本 | |||
| // 次版本 | |||
| // 生成号 | |||
| // 修订号 | |||
| // | |||
| // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, | |||
| // 方法是按如下所示使用“*”: | |||
| // [assembly: AssemblyVersion("1.0.*")] | |||
| [assembly: AssemblyVersion("1.0.0.0")] | |||
| [assembly: AssemblyFileVersion("1.0.0.0")] | |||