From 979afae645c94b850f96634d4196d33ac7c04011 Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Thu, 20 Nov 2025 15:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FATrace.App/App.config | 4 +- FATrace.App/FATrace.App.csproj | 681 ++++++++++-------- FATrace.App/Images/ele_icon_w_depository.png | Bin 0 -> 8849 bytes FATrace.App/Images/信息.png | Bin 0 -> 4645 bytes FATrace.App/Images/信息输入输出.png | Bin 0 -> 11787 bytes FATrace.App/Images/原料需求.png | Bin 0 -> 9164 bytes FATrace.App/Images/选择.png | Bin 5694 -> 5517 bytes FATrace.App/Properties/Resources.Designer.cs | 60 ++ FATrace.App/Properties/Resources.resx | 30 +- .../Resources/ele_icon_w_depository.png | Bin 0 -> 8849 bytes FATrace.App/Resources/信息.png | Bin 0 -> 4645 bytes FATrace.App/Resources/信息输入输出.png | Bin 0 -> 11787 bytes FATrace.App/Resources/原料需求.png | Bin 0 -> 9164 bytes FATrace.App/Resources/称重.png | Bin 0 -> 6325 bytes FATrace.App/Resources/选择.png | Bin 0 -> 5517 bytes FATrace.App/frmMain.Designer.cs | 97 ++- FATrace.App/frmMain.cs | 68 +- FATrace.WPLApp/App.config | 7 +- FATrace.WPLApp/App.xaml.cs | 2 +- FATrace.WPLApp/Events/DashboardEvents.cs | 9 + FATrace.WPLApp/Services/CsvServices.cs | 44 +- FATrace.WPLApp/Services/DataServices.cs | 43 +- FATrace.WPLApp/Services/SysRunService.cs | 35 + .../ViewModels/DashboardViewModel.cs | 315 ++++++++ .../ViewModels/RawProUseViewModel.cs | 65 +- FATrace.WPLApp/Views/DashboardView.xaml | 125 ++++ FATrace.WPLApp/Views/DashboardView.xaml.cs | 28 + FATrace.WPLApp/Views/FootView.xaml | 31 +- 28 files changed, 1299 insertions(+), 345 deletions(-) create mode 100644 FATrace.App/Images/ele_icon_w_depository.png create mode 100644 FATrace.App/Images/信息.png create mode 100644 FATrace.App/Images/信息输入输出.png create mode 100644 FATrace.App/Images/原料需求.png create mode 100644 FATrace.App/Resources/ele_icon_w_depository.png create mode 100644 FATrace.App/Resources/信息.png create mode 100644 FATrace.App/Resources/信息输入输出.png create mode 100644 FATrace.App/Resources/原料需求.png create mode 100644 FATrace.App/Resources/称重.png create mode 100644 FATrace.App/Resources/选择.png create mode 100644 FATrace.WPLApp/Events/DashboardEvents.cs create mode 100644 FATrace.WPLApp/ViewModels/DashboardViewModel.cs create mode 100644 FATrace.WPLApp/Views/DashboardView.xaml create mode 100644 FATrace.WPLApp/Views/DashboardView.xaml.cs diff --git a/FATrace.App/App.config b/FATrace.App/App.config index 3f0878c..4681fcc 100644 --- a/FATrace.App/App.config +++ b/FATrace.App/App.config @@ -2,8 +2,8 @@ - - + + diff --git a/FATrace.App/FATrace.App.csproj b/FATrace.App/FATrace.App.csproj index 217fcb0..371b656 100644 --- a/FATrace.App/FATrace.App.csproj +++ b/FATrace.App/FATrace.App.csproj @@ -11,6 +11,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + @@ -52,286 +451,4 @@ - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - \ No newline at end of file diff --git a/FATrace.App/Images/ele_icon_w_depository.png b/FATrace.App/Images/ele_icon_w_depository.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ffd11a0941ad161c643318ef53d41cdc24a3a7 GIT binary patch literal 8849 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 literal 0 HcmV?d00001 diff --git a/FATrace.App/Images/信息.png b/FATrace.App/Images/信息.png new file mode 100644 index 0000000000000000000000000000000000000000..80096afa343855aa60f3ed9505db9b8b2f9d00f3 GIT binary patch literal 4645 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 literal 0 HcmV?d00001 diff --git a/FATrace.App/Images/信息输入输出.png b/FATrace.App/Images/信息输入输出.png new file mode 100644 index 0000000000000000000000000000000000000000..03282a983d0cc32aa465e8fb7240edbc78a9b541 GIT binary patch literal 11787 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 F{{wRKH|_uc diff --git a/FATrace.App/Properties/Resources.Designer.cs b/FATrace.App/Properties/Resources.Designer.cs index c377ea7..e0e8b29 100644 --- a/FATrace.App/Properties/Resources.Designer.cs +++ b/FATrace.App/Properties/Resources.Designer.cs @@ -60,6 +60,16 @@ namespace FATrace.App.Properties { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap ele_icon_w_depository { + get { + object obj = ResourceManager.GetObject("ele_icon_w_depository", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -70,6 +80,26 @@ namespace FATrace.App.Properties { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 信息 { + get { + object obj = ResourceManager.GetObject("信息", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 信息输入输出 { + get { + object obj = ResourceManager.GetObject("信息输入输出", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -100,6 +130,16 @@ namespace FATrace.App.Properties { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 原料需求 { + get { + object obj = ResourceManager.GetObject("原料需求", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -119,5 +159,25 @@ namespace FATrace.App.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 称重 { + get { + object obj = ResourceManager.GetObject("称重", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap 选择 { + get { + object obj = ResourceManager.GetObject("选择", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/FATrace.App/Properties/Resources.resx b/FATrace.App/Properties/Resources.resx index 21990a1..68163cc 100644 --- a/FATrace.App/Properties/Resources.resx +++ b/FATrace.App/Properties/Resources.resx @@ -118,22 +118,40 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\GilicoLogo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\关闭.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\分类.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\登录 (2).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\原料需求.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\选择.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\工单信息.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\关闭.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\信息.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\分类1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\信息输入输出.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ele_icon_w_depository.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\GilicoLogo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\登录 (2).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\称重.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/FATrace.App/Resources/ele_icon_w_depository.png b/FATrace.App/Resources/ele_icon_w_depository.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ffd11a0941ad161c643318ef53d41cdc24a3a7 GIT binary patch literal 8849 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 literal 0 HcmV?d00001 diff --git a/FATrace.App/Resources/信息.png b/FATrace.App/Resources/信息.png new file mode 100644 index 0000000000000000000000000000000000000000..80096afa343855aa60f3ed9505db9b8b2f9d00f3 GIT binary patch literal 4645 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 literal 0 HcmV?d00001 diff --git a/FATrace.App/Resources/信息输入输出.png b/FATrace.App/Resources/信息输入输出.png new file mode 100644 index 0000000000000000000000000000000000000000..03282a983d0cc32aa465e8fb7240edbc78a9b541 GIT binary patch literal 11787 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 O1JYJEKoeAL@&5x?fSWV` literal 0 HcmV?d00001 diff --git a/FATrace.App/Resources/选择.png b/FATrace.App/Resources/选择.png new file mode 100644 index 0000000000000000000000000000000000000000..39e74c68b3dfae44d7d7b010ce36c91f0203a288 GIT binary patch literal 5517 zcmZWtcQl+|&|Yh?B-o7_b*(PC=xwoBMD$)0EFy>+qOIP7O$5GR z;~56f_u}&%#ZYoLT1V6jq+PX+J8`0f(p{qnl>3eXB}k#J;VaGwe27rIBQ9O!sMjJX z^YhDeQyaGvyVbU?6wVtxzdf%k)gpB`-?H0I$iK#iNa1kg1A1U^WHSf}3;2PGf&d_q z1NJZwnhOTZCQId^B!MPuld3y10=cN1Gp%`bz&tS+Fb`McE!kzFOJaP>&m0I4j*S87 z&OVPPS~zx$J=DQGCNRp#J6?Q+M9rDRE5;ZU0(1**E0G^c^j+yUw1&V*ps0i=ef|fO z2?%trp?PelKhd;t*VzjE4Mu!73G)A{AUTLN+V;5z)_tt{L*YM#f9>w^4?dQaimqfM zXy2>w?}@ys=1_1_)!Tj~0MxOmzE%qfxDW@}Qvvu%ySpx@HcfC1*8r~tL4beuVo7+0 zApOYdQLn*QvX>iTmFge<-2~`kEj(@^F7?$f3#sG0VuF`}0{y-Nl%ynH z@qF8f!791$xpAbN;Idv#ox0F?Cg66Rt2Bx zWXp199z3%17}11{bxTD|*9udSWOe@gl=CVa+M@L~hi)s#6jQ>%3%b=($UEV~`+$!7 z2SiS?$zbofJ`A)M^KH;&LE9?6^~n6IL3sYb7k;det<9iI*4K~n(Fzg=IJ(_Uw=_@H z!)4dX*2I8Tb0_EA0#IOzcRF`MK@qgtAGTmRbL&Dg&$2%N+~~t@8^3@p$Z0)1!SyQaaI3tOMg#G9yV1TR zd2-{nFCaHg`6xFw4j&OOAdlV0Mh)1});&z1K60+lI8NgW?5kl?(KFE6aJs0uvP`WV z7{jd%nYs~!2m}5U)yAIt^OUYqLLNM9IUq*7deRIcd1E)u$5O%%Zfzvqr_nxL)SKR6 zOK_bI(;dbgV|R5hM3?CfR}t~n!4N#IHA@Sk0erC-|C&}!UEj}qBpVMuqi0LUIVd40 zrXg;j!HFc0u_Vg7?~`7xG96Z}+12!A4H@M?CEq@UoznN$fFkaO95*&jACW-d>t7-N zZfyl^OE6Ki(qXq?^Hw_e32sLeQ^iq~sK~JzA{D0M$SYbQH!DD*JIGvO6ldI?O=)U` ze<5j^k79Z@9#q#{&Hh~ z;Yt$&Y&*gbO6A%J{KIi>?wMGO9-`S&lq@?I;R!_g7JZVrJvIFtblH%&VorDcy#zS~ z5jRYQ!Nj->(*T3e5{{fTf|vF29J(lI?y_q!b=r5SO5V2{H>A|Mjwd zyI+d*ctiiYFs*)P3WuaVTFuu!&la_iYfIrS?q=p6cl;WGDP8Hb#u4V-iGSj-`bNV^ ziS!IVux-0cAIxd~6d%%UV*gz%3tZCmnwfJ60&8u_x*Zh^2oi){rMXXapqP>zqWMDP z-DX$IbU<5Q#1tOSn%GlIB_ddE>IRz~E5n$h&Z`N_UcWj%878zihOvin+a2Nf_)AA| zd;AFeXTPA(2>C2K8EuZrbWIplcQgP;2|8|-bC{RNd%!pZdD?>~;FQY>S1*glLBI3? zBl_N?TuLJjEKK}%Y+kuYm}o4yYd`yk3!Kl*U4)0FfU|X93oTpF6>~)2(V*R6z`WU@ zOWO4lph}m8Vy2v#rS--jhXvl%d%S;Wp&$Vfh07IkXBITj#+Cs?L>7YMOxPtWN1uGD zJuGAi4eV%pNmpANW)`Ryta+TVpJAm;u|guBgaAh6+CTny@o5t9W5z0fgY3lmo#;;a z-#;Hjg9_7xR3$04NB(38->HE>A_cndBdFOl(F&2SQKSaBWFhHR0(J`5d`)2abVJiE zI7G9==UB?B>yesVi~$4TS39Re%yz>h`dsTi6&j^W#tQ>d>UwF(t7KH{fhBw7s%rrT z{5`?n>b8vvs_zr(7spzy-eHMVm!72H4XwSSiIY;ivP)x>htGVgtd&68yBo)a`_1>b zpnGsEw%kh;XXB@B(Wq%e@bj01EA^@etD1c3NN@5BlDL4Ss{`SXSn(;-4|Brx4&Kvg zVt6|>!DTa?Vdz)kS9r`gPfexvP=8?LZ_)`{s~?e#AfSm@FI})>M0M~J_wH@6xrraH zoQfHIH`<8-g>qLobQUF^lGXMr13|^!3gk*z_1muc6+!cAvD6p4I++IE#5OfA7yQ-C zD!6y3)ueq*&@Uz%vLFX&ZAm(;&o*}#w_{d;uB;{^z5(}FoN6Vxe*4i!T8o{N7w^Av zpJJW0v7y-!3oAAkovP2pfSqM2Ty|%1KWt$p`pPc>=Yi0+-1_a1Z&6_frb)v0ppeLW zMTWS}_jc)UY#F&9)3z`o=vA6f_4~?E7mDK!pWmhrlf{Uc+y%6h(~Z;)o&?=r@@G!l z_7-xwg0Y5!Y#M9gTAMZ8RmGBA!F0aw&NuDy%O`aXWVKNoYeB96QJM zs$-<*+J+XxiD^}VW3>Gm4i(E}1hUOHw6nVhvQ%}ypKE|_83)b(kw;4jgpKN;QolUR z#Pj%bh>NtiG3rj1?y|`XG0G~L3IX>4f^LlezC51uNsx83LNrsE;Pq|~+4mn>=(MuuGb}4I<{q}R+PfAkioPQX9qxM3alCf`ke-K6DL#Do4u-4pyE9# zc1GBAB_$%Fd=71sTBs#y_U~2LYu(LuN{jw0$7vSsWzEfmK9{{RZ<`frNJf~BetdA_ z1rjFR2qGX0DV})oPCv*s-!B|B-#3V!$!RG8J9}wSufk47oLOq$ls_4pnqmTUq+(Ph zL@vm7qOOkANV%;HFK*JL53$t-vppmApjA9HNJ9P@u^NTp?h%=xp z-2Au7Ix^|~2cHU(GV6E+E>U515p)I=?wFygN~wJ;HYwo)4WHjPpQ3!!n)ol=UL%mO z2cuU5fscy6E@RWobN0C}WjvRJyhtci9Ed2!{J_fN@SumV>RDs}$9{*BKCiOfwl}&C z0GUafF@)9yC9LC8JjZ!M>l#aDbFVaiQqxBwwep4Fj+i3m6qM$LD5 zso!XMto6@J`bDGA5;<4l$tFhgx1=m>NEnoiwBqkgi#~@}m-EwO=r}__l*!j7JV9)| zw&C&M)67k-#E=#+Pce88apeheTlJdYj%n;heU6ArV{BUuJ${eHWPy3QVf(VK$&?^Z zp619{A2_Gr{ffW-G^v4{=N(YEccTy#)dOy0Mfet+6e!lnpM?N+v}61PVmlNwcboHK z_YX_zwLrIAR&GA&=Q5gLwzB(}v<`Ug!4|W8>Q?jkBY%iNX~^Ql02{ar4n?6HJ+j%i ztm+Cz_O*S<8qKdZ8y4jNVVr}fy1bu{{8neXw*s$|jKlP~EdM$igO(`MYwv;d_X%8o z=^^%Lxgd4<$$%Zp@Wr&Ei_>?lr4FFt$Al9!IQ{&ia7@FmlW@i_?!rl8uMYENQ;tQ2 zpLqoM`XwTYQ`vd_+0;+lqvQIzgLob}`%Lfy6JM)z;g6seWgir*V~|@4{{iRQ_hN2C zQN0g@*3+gz31Zr|mF1f>>p0Ub|KJa~;vXY}6KqQ0H_^ zlr&$;4-Ma4e^xb4(9|>8r$p+p1>`qlHGLiCObaQIziu+!97C1`pgY2nM%MU+TEM*_ zjqRI(6m726g}B-MC`Cigib8G)!3*xLX8-E}Cc5Ps18q%MIHss(*5J4~I7_6$cRE># zKOBw;!#1{<3Ggk^`dk7ngdlN8c@7llwaL&clg&$Rc1ut5pBy~B6yMZ0ZfYLaNxU_M zp}x}-l3pPD6C&7_0K&@^%NBwjVxw)@Di@Dkj_-<>n8GlB2`qJjN=)E+W0%?NU#qDa zrrC#{@t7U95tl-?p@1t9&a>)0&o}o;Bo`=%-w>X^((7q1g!Qf33b}`va^jrIv`;5# z_~7f-dNLpz`CHoTICT0ffOqoqBZF*R(F;5K_83=bx~?4mh%%d$nxIMnhJ=|{wEVD< z!r`C}ylQ4ht!{NZhGbvK=f#uT{chD|c|-HvbCrTWwlkO=$r8yW&3#-j#nuc)qS!wb zwKmMh?x@oMud<7uNq;WOdgy<~bAf)Z%81ZDdgIk3R}~MNx5Yng_BnfPGdtIu-eRxJ zsRwS11ne$sX){p>S7}PD0;k5xYeLs)gWmfVT1ymm2xbxSS59NFt4+?#-c*fk{ipYK zLaLM%&@>G6IZqf^s{g8|flE;8Kees-YWG)vR0>ut~4cs}fgh;a2lyJWlM1#)RE znTEA+o@RWA!Ko!gb1qD`>Cu?E4;J93u+piIj?b z3+n^`$YlQG0-~Q;?pU1y3QL}}pmp!p?{!}Jj@5e8Y#RJrMZ%2e3XL2BIGUERw`~}z z;Nc;4vNPWg8@2qV;)D9pFB~;rxH1u8347Ax*hj>IAvE8V;%(P{N(}^WP1UiUejFe7 z3z2x5s#|sV0Ob4v^YWqr;>JrmOR-iZKhFlo2Avs9q!Pihs6e^3 zzHDs-18EtKYK!~hu9%4M2UEw2({ME_JdbZ|I`QsW$q1VL0AlYxb02EgPOOAHPe7<+ zHYa(wesad2O4lo18_E-o{>&wB5{5!~Irue!^;BEnCze5g zBhHHyBuNv(OUz|{9()3`a+wZ|^IX3DJk;vT!W(@<`xakZin=Nhq(L-|a3fRBFnK9!>yQDF++)w@ADTzukN{!UI%Ful`*+a7 zxvmQ9Mr@<6cVP4)^AM)aHAvH;rE8DAM;h^W)~-!#?Lfi<%#5VljJE^-Pi=t>J`S0mG{pw zf*Y!AFUd`tT4ML47y^SA+UweqXajGyALuX~M@>T_LA>u9XEQHvwOb~r8RV%LV)+2wKrznzung-1r@&qDsDS(9vYIDh^eu1Z zXKP)?eMLj~NG`>(`^+w|Q?%`auVutOpH^RiH z(G&V#EVM@{wU+CN1X}Cm^6td7rcKP7F3eA+iXV>VLeU(O?dZ0md!Ox$c5)1>diY8 zX%jDyGDajy-E;3-Cc}*kC3AkDcWylu(XYs}-lRF_VZoRPbRaK*N8=8iAurY(E#T?> zkVw_>(Nx{7^dSmgZYRa^@xg%ZOAESVEc`?vugKEvA&|($(2Zrib2mVMio+6myX1%? z-cpHJfXDw=y!lL492V5u)%c%FD&}XkG?8|kScI-G5zkFj1R8ft5C=c&c @@ -604,6 +608,37 @@ namespace FATrace.App } } + /// + /// 清零当前的原料 + /// + /// + /// + private void btnClearRaw_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show("您确定清零当前的原料?", "Confirmation", + MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (result == DialogResult.No) + { + return; + } + + if (CurSelectedRawProInput == null) + { + MessageBox.Show("请选中原料后再操作。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + var UpdatedData = FSqlContext.FDb.Update() + .Set(a => a.RawState, RawSplitState.SplitComplete) + .Where(a => a.Id == CurSelectedRawProInput.Id) + .ExecuteUpdated(); + + if (UpdatedData.Count() > 0) + { + ClearInput(); + } + } + /// /// 称重打印数据 /// @@ -613,9 +648,15 @@ namespace FATrace.App { if (CurSelectedRawProInput == null) { - MessageBox.Show("请先选择要称重的产品", "称重通信错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show("请先选择要称重的产品", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } + if (string.IsNullOrEmpty(CurSelectedRawProInput.RawName) || string.IsNullOrEmpty(CurSelectedRawProInput.Batch) || string.IsNullOrEmpty(CurSelectedRawProInput.RawCode)) + { + MessageBox.Show("选择的产品信息无数据,请信息输入后再操作", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + //新的剩余重量 Kg var NewRemainWeight = CurSelectedRawProInput.RemainWeight - CurWeight / 1000; @@ -654,6 +695,9 @@ namespace FATrace.App { Batch = CurSelectedRawProInput.Batch, InBagCode = Code, + BoxCode = Code + ",A", + OpUser = CurrentOperationNo, + CheckUser = CurrentOperationNo, RawCode = CurSelectedRawProInput.RawCode, ShelfLife = CurSelectedRawProInput.ShelfLife, RawName = CurSelectedRawProInput.RawName, @@ -962,7 +1006,10 @@ namespace FATrace.App private void btnSysConfig_Click(object sender, EventArgs e) { + if (!string.IsNullOrEmpty(CurrentOperationNo)) + { + } } private void btnExit_Click(object sender, EventArgs e) @@ -1001,7 +1048,14 @@ namespace FATrace.App private void btnMain_Click(object sender, EventArgs e) { - TabControlMain.SelectedIndex = 0; + if (!string.IsNullOrEmpty(CurrentOperationNo)) + { + TabControlMain.SelectedIndex = 0; + } + else + { + MessageBox.Show("请登录后再操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } } private void btnHistoryData_Click(object sender, EventArgs e) @@ -1016,7 +1070,6 @@ namespace FATrace.App #endregion - #region 历史数据搜索 private void btnSearchHistoryData_Click(object sender, EventArgs e) @@ -1169,6 +1222,15 @@ namespace FATrace.App #endregion + private void frmMain_FormClosed(object sender, FormClosedEventArgs e) + { + //CurZebraPrint.Close(); + if (_scaleTcp != null) + { + _scaleTcp!.StopAsync(); + } + + } } } diff --git a/FATrace.WPLApp/App.config b/FATrace.WPLApp/App.config index f0bd202..55a0ac9 100644 --- a/FATrace.WPLApp/App.config +++ b/FATrace.WPLApp/App.config @@ -2,9 +2,10 @@ - - - + + + + diff --git a/FATrace.WPLApp/App.xaml.cs b/FATrace.WPLApp/App.xaml.cs index 1160e20..2b07f00 100644 --- a/FATrace.WPLApp/App.xaml.cs +++ b/FATrace.WPLApp/App.xaml.cs @@ -248,7 +248,7 @@ namespace FATrace.WPLApp //containerRegistry.RegisterSingleton(); containerRegistry.RegisterForNavigation(); - //containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterForNavigation("DashBoardView"); //containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); diff --git a/FATrace.WPLApp/Events/DashboardEvents.cs b/FATrace.WPLApp/Events/DashboardEvents.cs new file mode 100644 index 0000000..dfd21bf --- /dev/null +++ b/FATrace.WPLApp/Events/DashboardEvents.cs @@ -0,0 +1,9 @@ +using Prism.Events; + +namespace FATrace.WPLApp.Events +{ + /// + /// 请求刷新 Dashboard 统计信息的事件(无负载)。 + /// + public class DashboardRefreshEvent : PubSubEvent { } +} diff --git a/FATrace.WPLApp/Services/CsvServices.cs b/FATrace.WPLApp/Services/CsvServices.cs index a6bbdf7..40f344d 100644 --- a/FATrace.WPLApp/Services/CsvServices.cs +++ b/FATrace.WPLApp/Services/CsvServices.cs @@ -115,20 +115,36 @@ namespace FATrace.WPLApp.Services { public RawProUserCsvDtoMap() { - Map(x => x.RawCode).Index(0).Name(nameof(RawProUserCsvDto.RawCode)); - Map(x => x.RawName).Index(1).Name(nameof(RawProUserCsvDto.RawName)); - Map(x => x.InBagCode).Index(2).Name(nameof(RawProUserCsvDto.InBagCode)); - Map(x => x.BoxCode).Index(3).Name(nameof(RawProUserCsvDto.BoxCode)); - Map(x => x.Batch).Index(4).Name(nameof(RawProUserCsvDto.Batch)); - Map(x => x.ShelfLife).Index(5).Name(nameof(RawProUserCsvDto.ShelfLife)); - Map(x => x.Weight).Index(6).Name(nameof(RawProUserCsvDto.Weight)); - Map(x => x.DeliveryDate).Index(7).Name(nameof(RawProUserCsvDto.DeliveryDate)); - Map(x => x.RemainWeight).Index(8).Name(nameof(RawProUserCsvDto.RemainWeight)); - Map(x => x.StockWeight).Index(9).Name(nameof(RawProUserCsvDto.StockWeight)); - Map(x => x.WeightTime).Index(10).Name(nameof(RawProUserCsvDto.WeightTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); - Map(x => x.OpUser).Index(11).Name(nameof(RawProUserCsvDto.OpUser)); - Map(x => x.CheckUser).Index(12).Name(nameof(RawProUserCsvDto.CheckUser)); - Map(x => x.OutTime).Index(13).Name(nameof(RawProUserCsvDto.OutTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); + //Map(x => x.RawCode).Index(0).Name(nameof(RawProUserCsvDto.RawCode)); + //Map(x => x.RawName).Index(1).Name(nameof(RawProUserCsvDto.RawName)); + //Map(x => x.InBagCode).Index(2).Name(nameof(RawProUserCsvDto.InBagCode)); + //Map(x => x.BoxCode).Index(3).Name(nameof(RawProUserCsvDto.BoxCode)); + //Map(x => x.Batch).Index(4).Name(nameof(RawProUserCsvDto.Batch)); + //Map(x => x.ShelfLife).Index(5).Name(nameof(RawProUserCsvDto.ShelfLife)); + //Map(x => x.Weight).Index(6).Name(nameof(RawProUserCsvDto.Weight)); + //Map(x => x.DeliveryDate).Index(7).Name(nameof(RawProUserCsvDto.DeliveryDate)); + //Map(x => x.RemainWeight).Index(8).Name(nameof(RawProUserCsvDto.RemainWeight)); + //Map(x => x.StockWeight).Index(9).Name(nameof(RawProUserCsvDto.StockWeight)); + //Map(x => x.WeightTime).Index(10).Name(nameof(RawProUserCsvDto.WeightTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); + //Map(x => x.OpUser).Index(11).Name(nameof(RawProUserCsvDto.OpUser)); + //Map(x => x.CheckUser).Index(12).Name(nameof(RawProUserCsvDto.CheckUser)); + //Map(x => x.OutTime).Index(13).Name(nameof(RawProUserCsvDto.OutTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); + + Map(x => x.RawCode).Index(0).Name("原料编号"); + Map(x => x.RawName).Index(1).Name("原料名称"); + Map(x => x.InBagCode).Index(2).Name("内袋二维码"); + Map(x => x.BoxCode).Index(3).Name("外箱二维码"); + Map(x => x.Batch).Index(4).Name("批号"); + Map(x => x.ShelfLife).Index(5).Name("保质期"); + Map(x => x.Weight).Index(6).Name("称重重量(g)"); + Map(x => x.DeliveryDate).Index(7).Name("配料日期"); + Map(x => x.RemainWeight).Index(8).Name("剩余重量(Kg)"); + Map(x => x.StockWeight).Index(9).Name("入库总重量(Kg)"); + Map(x => x.WeightTime).Index(10).Name("称重时间").TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); + Map(x => x.OpUser).Index(11).Name("操作者"); + Map(x => x.CheckUser).Index(12).Name("确认者"); + Map(x => x.OutTime).Index(13).Name("出库时间").TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss"); + } } } diff --git a/FATrace.WPLApp/Services/DataServices.cs b/FATrace.WPLApp/Services/DataServices.cs index 2a40b20..f2fbc3a 100644 --- a/FATrace.WPLApp/Services/DataServices.cs +++ b/FATrace.WPLApp/Services/DataServices.cs @@ -6,6 +6,8 @@ using Prism.Mvvm; using System.Collections.Concurrent; using System.Windows; using ComConfigHelper = FATrace.Com.ConfigHelper; +using Prism.Events; +using FATrace.WPLApp.Events; namespace FATrace.WPLApp.Services { @@ -15,10 +17,12 @@ namespace FATrace.WPLApp.Services /// public class DataServices : BindableBase, IDisposable { - public DataServices(ILogService logService, IFreeSql freeSql) + public DataServices(ILogService logService, IFreeSql freeSql, IEventAggregator eventAggregator, SysRunService sysRunService) { LogService = logService; FreeSql = freeSql; + EventAggregator = eventAggregator; + SysRunService = sysRunService; LineSglModel = new LineSglModel(); LineSglModel.WeightScanCodeHandle += LineSglModel_WeightScanCodeHandle; @@ -116,7 +120,7 @@ namespace FATrace.WPLApp.Services var Result = FreeSql.Update() .Set(p => p.OutTime, DateTime.Now) - .Where(p => p.BoxCode == BoxScanCode+",A")//外箱二维码就是外箱扫描码 + .Where(p => p.BoxCode == BoxScanCode + ",A")//外箱二维码就是外箱扫描码 .ExecuteAffrows(); if (Result > 0) { @@ -151,7 +155,7 @@ namespace FATrace.WPLApp.Services KeyencePlcMcNet.Write("D1250", new Int16[30]); }); - + try { EventAggregator?.GetEvent()?.Publish(true); } catch { } } /// @@ -227,8 +231,19 @@ namespace FATrace.WPLApp.Services public ILogService LogService { get; } public IFreeSql FreeSql { get; } + public IEventAggregator EventAggregator { get; } + public SysRunService SysRunService { get; } - //通信组件 + private bool _plcConnected; + public bool PlcConnected + { + get { return _plcConnected; } + private set { _plcConnected = value; RaisePropertyChanged(); } + } + + /// + /// 基恩士通信组件 + /// private KeyenceMcNet KeyencePlcMcNet { get; set; } = null; private string _WeightScanCode; @@ -304,6 +319,7 @@ namespace FATrace.WPLApp.Services // 读取 PLC 配置(大小写敏感,采用公共 ConfigHelper 并提供默认值) string PLCIP = ComConfigHelper.GetStringOrDefault("PLCIP", "192.0.1.10"); int Port = ComConfigHelper.GetIntOrDefault("PLCPort", 5000); + try { SysRunService.PlcIp = PLCIP; SysRunService.PlcPort = Port; } catch { } //PLC通信的连接 KeyencePlcMcNet = new KeyenceMcNet(); @@ -317,16 +333,22 @@ namespace FATrace.WPLApp.Services if (connect.IsSuccess)//初始连接状态的显示判断 { Console.WriteLine($"PLC-连接 OK"); + PlcConnected = true; + try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { } } else { MessageBox.Show(connect.Message + Environment.NewLine + "ErrorCode: " + connect.ErrorCode); + PlcConnected = false; + try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "连接失败"; } catch { } } } catch (Exception ex) { LogService.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString())); //insertLogToDBDelegate.BeginInvoke(1, "UpdateUIMethod异常", ex.Message.ToString() + ex.StackTrace.Substring(ex.StackTrace.Length - 40, 40), null, null); + PlcConnected = false; + try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { } } } @@ -446,6 +468,14 @@ namespace FATrace.WPLApp.Services if (OperateResultBoxScanSgl.IsSuccess) { LineSglModel.BoxScanCodeEnable = OperateResultBoxScanSgl.Content; + + PlcConnected = true; + try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { } + } + else + { + PlcConnected = false; + try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "连接失败"; } catch { } } } @@ -488,11 +518,16 @@ namespace FATrace.WPLApp.Services if (!ret.IsSuccess) { LogService.Warn($"PLC重连失败: {ret.Message} (Code: {ret.ErrorCode})"); + PlcConnected = false; + try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { } } + else { PlcConnected = true; try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { } } } catch (Exception ex) { LogService.Error($"PLC重连异常: {ex.Message}"); + PlcConnected = false; + try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { } } } diff --git a/FATrace.WPLApp/Services/SysRunService.cs b/FATrace.WPLApp/Services/SysRunService.cs index 5d26cad..60ed016 100644 --- a/FATrace.WPLApp/Services/SysRunService.cs +++ b/FATrace.WPLApp/Services/SysRunService.cs @@ -23,6 +23,41 @@ namespace FATrace.WPLApp.Services } + private string _PlcIp; + /// + /// PLC IP + /// + public string PlcIp + { + get => _PlcIp; + set { _PlcIp = value; RaisePropertyChanged(); UpdatePlcEndPoint(); } + } + + private int _PlcPort; + /// + /// PLC 端口 + /// + public int PlcPort + { + get => _PlcPort; + set { _PlcPort = value; RaisePropertyChanged(); UpdatePlcEndPoint(); } + } + + private string _PlcEndPoint; + /// + /// PLC 终端显示:IP:Port + /// + public string PlcEndPoint + { + get => _PlcEndPoint; + private set { _PlcEndPoint = value; RaisePropertyChanged(); } + } + + private void UpdatePlcEndPoint() + { + PlcEndPoint = string.IsNullOrWhiteSpace(PlcIp) ? string.Empty : $"{PlcIp}:{PlcPort}"; + } + private bool _PlcLinkState = false; /// /// PLC连接状态 diff --git a/FATrace.WPLApp/ViewModels/DashboardViewModel.cs b/FATrace.WPLApp/ViewModels/DashboardViewModel.cs new file mode 100644 index 0000000..e8dc2ff --- /dev/null +++ b/FATrace.WPLApp/ViewModels/DashboardViewModel.cs @@ -0,0 +1,315 @@ +using FATrace.WPLApp.Core; +using Prism.Commands; +using System; +using System.Collections.ObjectModel; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Threading; +using FreeSql; +using FATrace.Model; +using FATrace.WPLApp.Services; +using System.IO; +using System.Windows; +using System.Text; +using Prism.Events; +using FATrace.WPLApp.Events; + +namespace FATrace.WPLApp.ViewModels +{ + public class DashboardViewModel : NavigationViewModel + { + private readonly IFreeSql _fsql; + private readonly ILogService _log; + private readonly DataServices _data; + + private DispatcherTimer _logTimer; + private bool _initialized; + private TextWriter _originalConsoleOut; + private ConsoleInterceptWriter _consoleInterceptor; + + private readonly IEventAggregator _ea; + + public DashboardViewModel(IFreeSql fsql, ILogService log, DataServices data, IEventAggregator ea) + { + _fsql = fsql; + _log = log; + _data = data; + _ea = ea; + + LiveMessages = new ObservableCollection(); + + RefreshCommand = new DelegateCommand(async () => await RefreshStatsAsync()); + ClearLogsCommand = new DelegateCommand(() => LiveMessages.Clear()); + + PlcConnected = _data.PlcConnected; + _data.PropertyChanged += (s, e) => + { + if (e.PropertyName == nameof(DataServices.PlcConnected)) + { + var val = _data.PlcConnected; + if (Application.Current?.Dispatcher?.CheckAccess() == true) + PlcConnected = val; + else + Application.Current?.Dispatcher?.BeginInvoke(new Action(() => PlcConnected = val)); + } + }; + + // 订阅产线信号事件,生成人类可读的运行消息 + _data.LineSglModel.WeightScanCodeHandle += (s, e) => + { + var code = _data.WeightScanCode; + if (Application.Current?.Dispatcher?.CheckAccess() == true) + LatestWeightScanCode = code; + else + Application.Current?.Dispatcher?.BeginInvoke(new Action(() => LatestWeightScanCode = code)); + AppendLiveMessage($"称重扫码触发: {code}"); + }; + _data.LineSglModel.BoxSprayCodeReqHandle += (s, e) => + { + AppendLiveMessage("外箱喷码请求: 已向PLC下发喷码数据"); + }; + _data.LineSglModel.BoxScanCodeReqHandle += (s, e) => + { + var code = _data.BoxScanCode; + if (Application.Current?.Dispatcher?.CheckAccess() == true) + LatestBoxScanCode = code; + else + Application.Current?.Dispatcher?.BeginInvoke(new Action(() => LatestBoxScanCode = code)); + AppendLiveMessage($"外箱扫码触发: {code}"); + }; + + // 订阅外部刷新事件(来自 DataServices 的 BoxScanCode 完成后) + try + { + _dashEventToken = _ea.GetEvent().Subscribe(_ => + { + Application.Current?.Dispatcher?.BeginInvoke(new Action(async () => await RefreshStatsAsync())); + }); + } + catch { } + } + + #region Properties + private double _todayWeight; + public double TodayWeight { get => _todayWeight; set { _todayWeight = value; RaisePropertyChanged(); } } + + private double _monthWeight; + public double MonthWeight { get => _monthWeight; set { _monthWeight = value; RaisePropertyChanged(); } } + + private double _yearWeight; + public double YearWeight { get => _yearWeight; set { _yearWeight = value; RaisePropertyChanged(); } } + + private double _totalWeight; + public double TotalWeight { get => _totalWeight; set { _totalWeight = value; RaisePropertyChanged(); } } + + private string _latestWeightScanCode; + public string LatestWeightScanCode { get => _latestWeightScanCode; set { _latestWeightScanCode = value; RaisePropertyChanged(); } } + + private string _latestBoxScanCode; + public string LatestBoxScanCode { get => _latestBoxScanCode; set { _latestBoxScanCode = value; RaisePropertyChanged(); } } + + private bool _plcConnected; + public bool PlcConnected { get => _plcConnected; set { _plcConnected = value; RaisePropertyChanged(); } } + + public ObservableCollection LiveMessages { get; } + #endregion + + #region Commands + public DelegateCommand RefreshCommand { get; } + public DelegateCommand ClearLogsCommand { get; } + #endregion + + private void StartLogTimer() + { + if (_logTimer != null) return; + _logTimer = new DispatcherTimer + { + Interval = TimeSpan.FromMilliseconds(500) + }; + _logTimer.Tick += (s, e) => + { + // 从 DataServices 的队列中取出消息并展示 + int drain = 0; + while (_data.TryDequeueMessage(out var msg)) + { + if (!string.IsNullOrWhiteSpace(msg)) + { + AppendLiveMessage(msg); + drain++; + if (drain >= 50) break; // 防止一次处理过多 + } + } + }; + _logTimer.Start(); + } + + private void AppendLiveMessage(string message) + { + if (string.IsNullOrWhiteSpace(message)) return; + var line = $"{DateTime.Now:HH:mm:ss} {message}"; + void add() => LiveMessages.Add(line); + if (Application.Current?.Dispatcher?.CheckAccess() == true) add(); + else Application.Current?.Dispatcher?.BeginInvoke(new Action(add)); + // 限制最大条数,避免内存增长 + const int max = 500; + void trim() + { + if (LiveMessages.Count > max) + { + while (LiveMessages.Count > max) + LiveMessages.RemoveAt(0); + } + } + if (Application.Current?.Dispatcher?.CheckAccess() == true) trim(); + else Application.Current?.Dispatcher?.BeginInvoke(new Action(trim)); + } + + private async Task RefreshStatsAsync() + { + try + { + var todayStart = DateTime.Today; + var todayEnd = todayStart.AddDays(1).AddTicks(-1); + + var monthStart = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); + var monthEnd = monthStart.AddMonths(1).AddTicks(-1); + + var yearStart = new DateTime(DateTime.Today.Year, 1, 1); + var yearEnd = yearStart.AddYears(1).AddTicks(-1); + + var ret = await Task.Run(() => + { + double t = Convert.ToDouble( + _fsql.Select() + .Where(a => a.WeightTime >= todayStart && a.WeightTime <= todayEnd) + .Sum(a => a.Weight)); + + double m = Convert.ToDouble( + _fsql.Select() + .Where(a => a.WeightTime >= monthStart && a.WeightTime <= monthEnd) + .Sum(a => a.Weight)); + + double y = Convert.ToDouble( + _fsql.Select() + .Where(a => a.WeightTime >= yearStart && a.WeightTime <= yearEnd) + .Sum(a => a.Weight)); + + double all = Convert.ToDouble(_fsql.Select().Sum(a => a.Weight)); + + return (t, m, y, all); + }); + + TodayWeight = ret.t; + MonthWeight = ret.m; + YearWeight = ret.y; + TotalWeight = ret.all; + } + catch (Exception ex) + { + _log.Error($"Dashboard 统计刷新失败: {ex}"); + } + } + + public override async void OnNavigatedTo(Prism.Regions.NavigationContext navigationContext) + { + if (!_initialized) + { + _initialized = true; + //StartLogTimer(); + await RefreshStatsAsync(); + // 初始化展示最近一次扫描值 + LatestWeightScanCode = _data.WeightScanCode; + LatestBoxScanCode = _data.BoxScanCode; + TryHookConsole(); + } + } + + public override void OnNavigatedFrom(Prism.Regions.NavigationContext navigationContext) + { + if (_logTimer != null) + { + try { _logTimer.Stop(); } catch { } + _logTimer = null; + } + UnhookConsole(); + try { if (_dashEventToken != null) _ea.GetEvent().Unsubscribe(_dashEventToken); } catch { } + } + + private void TryHookConsole() + { + try + { + if (_consoleInterceptor != null) return; + _originalConsoleOut = Console.Out; + _consoleInterceptor = new ConsoleInterceptWriter(_originalConsoleOut, AppendLiveMessage); + Console.SetOut(_consoleInterceptor); + } + catch { } + } + + private void UnhookConsole() + { + try + { + if (_consoleInterceptor != null && _originalConsoleOut != null) + { + Console.SetOut(_originalConsoleOut); + } + } + catch { } + finally + { + _consoleInterceptor = null; + _originalConsoleOut = null; + } + } + + private class ConsoleInterceptWriter : TextWriter + { + private readonly TextWriter _inner; + private readonly Action _onLine; + private readonly StringWriter _buffer = new StringWriter(); + + public ConsoleInterceptWriter(TextWriter inner, Action onLine) + { + _inner = inner; + _onLine = onLine; + } + + public override Encoding Encoding => _inner.Encoding; + + public override void Write(char value) + { + _inner.Write(value); + if (value == '\n') + { + var line = _buffer.ToString(); + _buffer.GetStringBuilder().Clear(); + if (!string.IsNullOrWhiteSpace(line)) _onLine(line.TrimEnd('\r')); + } + else + { + _buffer.Write(value); + } + } + + public override void Write(string value) + { + _inner.Write(value); + if (value == null) return; + foreach (var ch in value) + { + Write(ch); + } + } + + public override void WriteLine(string value) + { + _inner.WriteLine(value); + if (!string.IsNullOrWhiteSpace(value)) _onLine(value); + } + } + + private SubscriptionToken _dashEventToken; + } +} diff --git a/FATrace.WPLApp/ViewModels/RawProUseViewModel.cs b/FATrace.WPLApp/ViewModels/RawProUseViewModel.cs index c0f1c30..24efc44 100644 --- a/FATrace.WPLApp/ViewModels/RawProUseViewModel.cs +++ b/FATrace.WPLApp/ViewModels/RawProUseViewModel.cs @@ -28,12 +28,13 @@ namespace FATrace.WPLApp.ViewModels { private readonly IFreeSql _fsql; private readonly ILogService _log; + private readonly CsvServices csvServices; - public RawProUseViewModel(IFreeSql fsql, ILogService log) + public RawProUseViewModel(IFreeSql fsql, ILogService log, CsvServices csvServices) { _fsql = fsql; _log = log; - + this.csvServices = csvServices; Items = new ObservableCollection(); // 集合变化时动态刷新导出命令可用性 Items.CollectionChanged += (s, e) => @@ -51,6 +52,8 @@ namespace FATrace.WPLApp.ViewModels .ObservesProperty(() => IsBusy) // Items 是集合引用,通常不会替换引用,这里通过 CollectionChanged 手动触发 ; + ExportCSVCommand = new DelegateCommand(ExportToCsv, () => !IsBusy && Items.Count > 0) + .ObservesProperty(() => IsBusy); ClearCommand = new DelegateCommand(ClearFilters, () => !IsBusy) .ObservesProperty(() => IsBusy); @@ -212,6 +215,7 @@ namespace FATrace.WPLApp.ViewModels #region 命令 public DelegateCommand SearchCommand { get; } public DelegateCommand ExportCommand { get; } + public DelegateCommand ExportCSVCommand { get; } public DelegateCommand ClearCommand { get; } public DelegateCommand FirstPageCommand { get; } public DelegateCommand PrevPageCommand { get; } @@ -356,6 +360,63 @@ namespace FATrace.WPLApp.ViewModels } } + /// + /// 使用 CsvServices 将当前界面数据导出为 CSV 文件(每条记录一个文件,命名为 InBagCode.csv) + /// + private void ExportToCsv() + { + if (IsBusy) return; + if (Items.Count == 0) + { + System.Windows.MessageBox.Show("无可导出的数据", "提示", MessageBoxButton.OK, MessageBoxImage.Information); + return; + } + + try + { + IsBusy = true; + + var dr = "D:\\迅雷下载"; + // 转换为 RawProUserCsvDto + var all = Items.Select(it => new RawProUserCsvDto + { + RawCode = it.RawCode, + RawName = it.RawName, + InBagCode = it.InBagCode, + BoxCode = it.BoxCode, + Batch = it.Batch, + ShelfLife = it.ShelfLife, + Weight = it.Weight, + DeliveryDate = it.WeightTime.ToString("yyyyMMdd"), + RemainWeight = it.RemainWeight, + StockWeight = it.StockWeight, + WeightTime = it.WeightTime, + OpUser = it.OpUser, + CheckUser = it.CheckUser, + OutTime = it.OutTime + }).ToList(); + + // 过滤 InBagCode 为空的记录,避免导出失败 + var valid = all.Where(x => !string.IsNullOrWhiteSpace(x.InBagCode)).ToList(); + int skipped = all.Count - valid.Count; + + var svc = csvServices; + var paths = svc.ExportMany(valid, dr, overwrite: true); + + _log.Info($"RawProUse CSV 导出完成: 目录={dr}, 成功={valid.Count}, 跳过={skipped}"); + System.Windows.MessageBox.Show($"导出完成:成功 {valid.Count} 条,跳过 {skipped} 条。\n目录:{dr}", "提示", MessageBoxButton.OK, MessageBoxImage.Information); + } + catch (Exception ex) + { + _log.Error($"RawProUse CSV 导出失败: {ex}"); + System.Windows.MessageBox.Show($"导出失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); + } + finally + { + IsBusy = false; + } + } + /// /// 导出当前查询结果为 Excel(.xlsx) /// diff --git a/FATrace.WPLApp/Views/DashboardView.xaml b/FATrace.WPLApp/Views/DashboardView.xaml new file mode 100644 index 0000000..91a4bd1 --- /dev/null +++ b/FATrace.WPLApp/Views/DashboardView.xaml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FATrace.WPLApp/Views/DashboardView.xaml.cs b/FATrace.WPLApp/Views/DashboardView.xaml.cs new file mode 100644 index 0000000..dfc93db --- /dev/null +++ b/FATrace.WPLApp/Views/DashboardView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace FATrace.WPLApp.Views +{ + /// + /// DashboardView.xaml 的交互逻辑 + /// + public partial class DashboardView : UserControl + { + public DashboardView() + { + InitializeComponent(); + } + } +} diff --git a/FATrace.WPLApp/Views/FootView.xaml b/FATrace.WPLApp/Views/FootView.xaml index 0250c48..94df29a 100644 --- a/FATrace.WPLApp/Views/FootView.xaml +++ b/FATrace.WPLApp/Views/FootView.xaml @@ -11,7 +11,7 @@ - + @@ -78,13 +78,34 @@ + + + + + - + + + - + - +