From fc162aed3b05445969872ce211adb96acb5a29f4 Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Wed, 31 Jan 2024 17:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pro/ProWorkorderV2Controller.cs | 17 +- .../mes/pro/ProWorkplanV2Controller.cs | 5 +- .../mes/qc/FQC/FirstFQCController.cs | 138 +++- ...2024012614503797e79fbae8a188e6a19d%bf.xlsx | Bin 41421 -> 0 bytes .../workorder/20240130160521周2生产计划.xlsx | Bin 0 -> 16384 bytes ZR.Service/mes/op/OperationService.cs | 3 +- ZR.Service/mes/pro/ProWorkorderServiceV2.cs | 54 +- ZR.Service/mes/qc/FirstFQCService.cs | 773 +++++++++++++----- .../mes/qc/IService/IFirstFQCService.cs | 23 +- 9 files changed, 773 insertions(+), 240 deletions(-) delete mode 100644 ZR.Admin.WebApi/wwwroot/workorder/2024012614503797e79fbae8a188e6a19d%bf.xlsx create mode 100644 ZR.Admin.WebApi/wwwroot/workorder/20240130160521周2生产计划.xlsx diff --git a/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkorderV2Controller.cs b/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkorderV2Controller.cs index 6f9742f3..512ac6f8 100644 --- a/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkorderV2Controller.cs +++ b/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkorderV2Controller.cs @@ -42,7 +42,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro return ToResponse(new ApiResult(200, "success", data)); } - // + [HttpGet("getWorkoderList_piliang")] @@ -66,6 +66,9 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro return ExportExcel(result.Item2, result.Item1); } + + + /// /// 导入 /// @@ -82,10 +85,10 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro int year = 0; int week = 0; int date = 0; - if (!Directory.Exists(target)) + if (!Directory.Exists(Path.Combine(webHostEnvironment.WebRootPath, "workorder"))) { // 如果目录不存在就创建 - Directory.CreateDirectory(target); + Directory.CreateDirectory(Path.Combine(webHostEnvironment.WebRootPath, "workorder")); } using (var stream = formFile.OpenReadStream()) @@ -100,8 +103,6 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro } - - //读取列表数据 try { @@ -236,7 +237,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro /// - /// 更新生产计划 + /// 更新生产计划 /// /// 生产计划对象 /// @@ -256,7 +257,7 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro /// - /// 删除本周所有计划 + /// 根据工单顺序 排序 /// /// /// @@ -268,6 +269,8 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro { data = proWorkorderService.UpdateworkorderSort(id, (int)sort); + + } return ToResponse(new ApiResult(200, "success", data)); diff --git a/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkplanV2Controller.cs b/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkplanV2Controller.cs index 002bbfa7..4bd07683 100644 --- a/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkplanV2Controller.cs +++ b/ZR.Admin.WebApi/Controllers/mes/pro/ProWorkplanV2Controller.cs @@ -169,9 +169,9 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro IWebHostEnvironment webHostEnvironment = (IWebHostEnvironment)App.ServiceProvider.GetService(typeof(IWebHostEnvironment)); string sFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + formFile.FileName; string target = Path.Combine(webHostEnvironment.WebRootPath, "workplan", sFileName); - if (!Directory.Exists(target)) + if (!Directory.Exists(Path.Combine(webHostEnvironment.WebRootPath, "workplan"))) { - Directory.CreateDirectory(target); + Directory.CreateDirectory(Path.Combine(webHostEnvironment.WebRootPath, "workplan")); } int year = 0; int week = 0; @@ -196,7 +196,6 @@ namespace ZR.Admin.WebApi.Controllers.mes.pro //读取第一行 解析 年和月 var row = stream.Query().Take(1).First(); year = Convert.ToInt32(row.A); - week = Convert.ToInt32(row.B); var list = stream.Query(sheetName: "Sheet1", startCell: "B3") .Where(it => it.Partnumber != null) diff --git a/ZR.Admin.WebApi/Controllers/mes/qc/FQC/FirstFQCController.cs b/ZR.Admin.WebApi/Controllers/mes/qc/FQC/FirstFQCController.cs index d663d5ac..0a514d12 100644 --- a/ZR.Admin.WebApi/Controllers/mes/qc/FQC/FirstFQCController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/qc/FQC/FirstFQCController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.SignalR; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Org.BouncyCastle.Asn1.X509; using System.Text.Json; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Hubs; @@ -77,42 +78,118 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC /// - /// 获取当前工单 + /// 获取当前工单 一检 /// /// - [HttpGet("getcurrentWorkorder")] - public IActionResult GetcurrentWorkorder() + [HttpGet("getcurrentWorkorder_first")] + public IActionResult GetcurrentWorkorder_first() { - QcCurrentWorkorderDto workorder= fQCService.GetcurrentWorkorder(); + QcCurrentWorkorderDto workorder= fQCService.GetcurrentWorkorder_first(); return SUCCESS(workorder); } - - /// - /// 获取下一个工单 + /// 获取当前工单 二检 /// /// - [HttpGet("getcurrentWorkorder_next")] - public IActionResult GetcurrentWorkorder_next() + [HttpGet("getcurrentWorkorder_again")] + public IActionResult GetcurrentWorkorder_again() { - QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_next(); + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_again(); + + return SUCCESS(workorder); + } + + + + /// + /// 获取当前工单 三检 + /// + /// + [HttpGet("getcurrentWorkorder_thirty")] + public IActionResult GetcurrentWorkorder_thirty() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_thirty(); return SUCCESS(workorder); } /// - /// 获取上一个工单 + /// 获取下一个工单 一检 /// /// - [HttpGet("getcurrentWorkorder_previous")] - public IActionResult GetcurrentWorkorder_previous() + [HttpGet("getcurrentWorkorder_next_first")] + public IActionResult GetcurrentWorkorder_next_first() { - QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_previous(); + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_next_first(); + + return SUCCESS(workorder); + } + /// + /// 获取下一个工单 二检 + /// + /// + [HttpGet("getcurrentWorkorder_next_again")] + public IActionResult GetcurrentWorkorder_next_again() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_next_again(); + + return SUCCESS(workorder); + } + /// + /// 获取下一个工单 三检 + /// + /// + [HttpGet("getcurrentWorkorder_next_thirty")] + public IActionResult GetcurrentWorkorder_next_thirty() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_next_thirty(); + + return SUCCESS(workorder); + } + + /// + /// 获取上一个工单 一检 + /// + /// + [HttpGet("getcurrentWorkorder_previous_first")] + public IActionResult GetcurrentWorkorder_previous_first() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_previous_first(); + + return SUCCESS(workorder); + } + + /// + /// 获取上一个工单 二检 + /// + /// + [HttpGet("getcurrentWorkorder_previous_again")] + public IActionResult GetcurrentWorkorder_previous_again() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_previous_again(); + + return SUCCESS(workorder); + } + + /// + /// 获取上一个工单 三检 + /// + /// + [HttpGet("getcurrentWorkorder_previous_thirty")] + public IActionResult GetcurrentWorkorder_previous_thirty() + { + + QcCurrentWorkorderDto workorder = fQCService.GetcurrentWorkorder_previous_thirty(); return SUCCESS(workorder); } @@ -122,16 +199,18 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC /// /// /// - /// + /// 要累加的值 /// [HttpGet("accumulator_query_first")] - public IActionResult Accumulator_first(string workorder_id,int checkid,int counter) + public IActionResult Accumulator_first(string workorder_id,int checkid,int number, string inspectionModule) { - int result= fQCService.Accumulator_first(workorder_id, checkid, counter, HttpContext.GetName()); + int result= fQCService.Accumulator_first(workorder_id, checkid, number, inspectionModule, HttpContext.GetName()); - return SUCCESS(counter); + return SUCCESS(result); } + + /// /// 二检累加器 /// @@ -140,12 +219,12 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC /// /// [HttpGet("accumulator_query_again")] - public IActionResult Accumulator_again(string workorder_id, int checkid, int counter) + public IActionResult Accumulator_again(string workorder_id, int checkid, int number, string inspectionModule) { - int result = fQCService.Accumulator_again(workorder_id, checkid, counter, HttpContext.GetName()); + int result = fQCService.Accumulator_again(workorder_id, checkid, number, inspectionModule, HttpContext.GetName()); - return SUCCESS(counter); + return SUCCESS(result); } /// @@ -156,12 +235,12 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC /// /// [HttpGet("accumulator_query_thirty")] - public IActionResult Accumulator_thirty(string workorder_id, int checkid, int counter) + public IActionResult Accumulator_thirty(string workorder_id, int checkid, int number, string inspectionModule) { - int result = fQCService.Accumulator_thirty(workorder_id, checkid, counter, HttpContext.GetName()); + int result = fQCService.Accumulator_thirty(workorder_id, checkid, number, inspectionModule, HttpContext.GetName()); - return SUCCESS(counter); + return SUCCESS(result); } @@ -180,6 +259,8 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC return SUCCESS(AllNumber); } + + /// /// 计算当前工单下的包装投入数==一次合格+抛光合格 /// @@ -194,5 +275,14 @@ namespace ZR.Admin.WebApi.Controllers.mes.qc.IQC } + // 更改工单状态为完成态 + [HttpGet("update_workorder_status")] + public IActionResult UpdateWorkorderStatus(string workorderID) + { + int result= fQCService.UpdateWorkorderStatus(workorderID); + return SUCCESS(result); + } + + } } diff --git a/ZR.Admin.WebApi/wwwroot/workorder/2024012614503797e79fbae8a188e6a19d%bf.xlsx b/ZR.Admin.WebApi/wwwroot/workorder/2024012614503797e79fbae8a188e6a19d%bf.xlsx deleted file mode 100644 index 6f35b14c3cfb02f4e9b4e9f394d3d2482b15255c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41421 zcmeFXgLj=1bJzQxzu??i zYo5^_?CE{#g%j=TBXGnl! zQ)r>g5bx~SrdQe#>T*b3Kxae4@DmfYpuW`Nj{&TUxG5O@2$5wRXm_HhyIEOa=h_34 zL_h&hnaRDR4_!$oR#8!sc@$2=zHv}?PW(z%c8-$+VHCCdW`v?Z5>2S6G)i`I4)agV zW>*}aJA|U3C2OC%Ga?43+xIob$2-~K^t-$k%`>Y~x?F&>8a*KQdOcmAqJt$>1BvR; zqj!pO0BXblNjRF`sBY|6RzP@kZX5wG2G6PF^IqAX5r$7z1Xod&c82EaP3_NRUVnC_ z7lf}0&;?6EJ4QniNXW)FM1LiX2!Rzi#DN&zMx&*pNsoJ=AY}2+h03$eew{|7fK0KsuNAmoIdEfX+V2 z$|D9C*vAJXn9~1;$QXK^CJ-PZZ-RJ=2qLn+qlvW>Gt=MW|4-omi&^`>O}!%is~jXN zYUoAa2iaH$|0><*8Ea;V!>`6~;H;@{2HdG}1#NE+k|NHzO~jrV)oxiHsduJz`R@6s zUasiL67Yc;rnBv8J#ud?EwE?_j*`)*(mes6t;2+qLfkUB<&G}ZsIGAbM#M0!|^*o=6!htJ^{J7zgAm}dfE*a zlGDc(iBH67KE^GJ9^Y{0spS?@bl3Qf9EFd(d^Un4rq+7PKD@A+R#B0p3`v8`+MBdnTPWpSZf81Ce$an(I+VP(M1Z$L$>t)(P^N)yAbOa^Lv2!%l-Po7Q;|5) z%+@!h4oo;^p#S5MX50Ev4&E=HK-384H%DMl-1%eT!>YZm0;`kfZaEJLhvBjL#*8hT zEK*kA5S67U93|;1dPIPJsD}=Q)yI4|voMWPf^jCxRxw1n=PdPmt2Bf_H(0 z1Oo%YfPtZaumXbA{|=@C)pgrh7R*km9iqVbRW6y21&Oc4x72xn%(AKqf4Z->J53Ad z{5(u&!7U;?p*UOMaqeJHpP1YUxT2f4cr4mu6iR-7_4dBryW!n*TT?^9Hq7ZD{alo> zJT!(UO+L2!#RP*u@VtE)VFnP98VflQ9z7uwg>3n7p?aW`5zQks>+j#sl_ra)*+%U3 z4Sk1aki2JW{MQduxuwVmVyQp_p)B;zy~2|OlA0*2CNw5BeN2Sj0!73Yj&|7SRNv4= zAQ*CA-DUIL`>{RSr$RI`#`7u$d*Ns#IdZNA$RxB5HP7I8Az~rSy$qAp#!zjQ!{#sq z_Ki{@=>!=a%k^iczOvi2su9ilXB5;~@kGYhmngu;VQ*($-a{K1b=I}&DQrm9Y0r|-x9^GjIv#TOT? z!CteDjNP!rJs9IZ;?6wTlh6l_OUUF*#@WGWE%KoROj|ZTK6+qJX^))a=xu1D{Zgvb zRM~w+hXp#PHEkOE{n@f7ZJ@aKy~(qvkHGKt<|LnX^x);?olxL2Tw+YsU z8~xeiRgH#u2+PX>J#XKvw0V*5wJ{;4@4xofgiP4wkm=>$xaA=dn1?SOimI%aQDjHa zl6T@O)7Tp|Gu$|%)vzpLB@Tast!ly7LV=aJE3<^0pHUz-&WN%wAvPHU6qebc2HZEJ z1Wa~RP0hvM>W-w06&TjVh1FK58ivs3b9rhqs~$@l3S~346{Rz#y+}6cG2_%17HQL* zrH)IM|LN3Hj0O;X?A}!#4lhED;zc#!KO5VX7PpU8CG2w4CLS*6Xmu3LxINuv`ww2y z6UGsBpAX0U9#AgcTt@R+I?hI3)9qF$-f(su;kdjze{k^V-nRGG#J<%?%(CdKfXAdo7k8z|2wk&72s3NaXSJD%r5dPp^Ezr)3ayt z=;QBK>X2VoN?f(?cz+2T8vifeDX#qHo}hQuzYF`dqZ69q^6J+ z6W5H?e*c8{aeV%Ap)11AHUNL`{{@S`WN%Q#lwVsL@TvM|%Me>ePc!^3eEj85eq~%f z##Z`Nr6npy6S}y{rkpZ_^#w7~>pJfwG4wzw=5hb8>wukbb^q;#ye~ge50%b|$XBid z+=diF9|LX$BZGrc7=@<%-WSf37#qH!Dz^qSi7zhtLFyUPk$%=s1X+!l%)Xqm6hJcT$E zJncgbTrR(TXoL2S2sGCSPUZvjs2qK2fLb>LqUd8qewI;DoM00WF@jq~&NJ?da1+kc zC}W>OmMpy3pVz49P#N?9jLA@GzlY%kifcIf+`YD|PiA{oX9@B8Jf7Ze#}>yDXMTC@ zzN~|LP{vP!*Y~|SBGLEx^Y(swk`gQAwkv`6G5SFA@j7c}OG+`Vl82)&@N~DFfTQnw zz1kd0bSW4kY4R9Hq2bPb8R7PWGAErYijkN2YB3*oAY22J24(|!K@d;-Hvzl2ZVOja zv|E_in>~2--UFj1EbAntLx#7Y0>c)WQNwu4EZE|_CM6=u4TmGi#0}dyw&-A0JwHvO z&gv+8Nm^fj9fpzI74wu zf1v>H8q+5$6N7v$d1dp$k8|sdV z9c{^q+d6{#wtpwe5d34G3f4zXp$mDh_v~JbPtKYm#rSx~!ylKPyxn>wLOGt-gvvr^ zz?ZZLHE)O?Fas@Q>>65Pb_prV-S&dqo!maj1l64Dm@J_M6aF0U6vkX_XnL?4rGUDi z3RBjmT8$B(r3u_jI(xEd8jN7~xL1$7qgwl@5qDG0A~qa~yrVzX4e?daeQWL%wHw*< z>tte-S8G8vNl%r``ifr>H=oe3kd_R| zP&puo8&DX#Ryb~1h)5&FDD&|27zHPCzh&%(DBzU2;P!uzTb9;nIPiQOJufbGgWyLn zA=@O#uh>&GAPvfvfpJAI(-h$dfQpHl73X4eS)$Io z`k2;xNS-scra&OCwW`}UgiQ@V81wPCtj~7j$lh-OU=008c{^aeL|*kC3fJf-1WXm< zNAsJ(OCel^azRy((`Kxhewi%6l9vpIT1ry-R|!mM;yQa@LEBH<2QI*!l}M(gYA>Ob zg0ys8*B+BndHLgWy*`@05acp{0wVJ)1{b*Rjn4#b!0ooHNPX6&YZf^U%B!_F%IRb~ zo9Pi&=a_pj#14U~+HPCFb!;B~6p6EywN|io%egXbzm4~!f~gNRnh!+(=yS28qn;7Y zVwGQ%Cy*LV!d<3ZO>rniOy)D|LZBr5-_3yEhE1*;WCEg~SIPh1@Z@A}V&d%dU(x*E zgMYs8FPI0%c1QNGU`jkdzKgkgB`kz|68pyexkdE=67akNvzik3fcfTCPiXRcZ_j>m zk1PE}pp?KA`6t6%8$`$-BOLRZORp8iE|FTE<26ipMu9lPS*Ff3NCgGih`~4wEX3Ln zWr{c4Uf;gu+8FrKxG($5G7%mu!%sg5rYg!TZLalU8<-UuFBty#s0Z;0s%XBS#`us3 z*yeXlNMBC|%kah-e94pM9g;Y^_6LZZxZP)2`5;3T*^G_e+{6D*6%h6)uI~cP9uE{D zL5}#p;^Ti+;NK0~Ur&sRSF~GY`P6>_c~1njZpEwnOf8ZDkXEV)gXmweF_S2=A&W1O zk)J)Cjdk705oQ)lZO9=Z$==vGALqY9pw<4Alz~}@iTY`Qt0C$2&e6|-UV@6q@{C28 z5+!bL{rV)OpLmwb4UFO!sv{+T9*;U*Ix=tqS`yBC#^5@w0zZ zk5nG$GfNpQlfvyZc`7Az-($9sODmi~9x-v<30D+D$D z0JL-Se`q@U|Jd|4E>P3W|2Dn%znY#*qx7Gq9|MG$IwGELykZq~);mM>I>1a~YiH{7 z<`D9FR|cDAy0R{qZ5u|cjcmN4l#a-aecIn&EnI|G_K^LPPytoWgBi&K#)~2~t-qm^ z74QoTG-WNnDnK<6lZ0&OB=4zXRKz}uYs^UDE^%yh!>oT1{(}*m)6DShbnq?9yxRu~ zhvDr0sK-z`aOrvD#v#}eYwbEWTH1A0ZnL_+)djw|3Hv=tOw4b zqpZW3rLPJuP1Y~nqFyh0`}N*_=%aEz?hf05n^0gbi7Bjn|MdLr*By!qCx`3i4bi=y z_qc8$j_1ltMA*gFYRq2!LB9?kKEC$CAd)e41Ol)H=-FIXYb`(^bvpubHVx%U>L4Ku0&liy#Qh_&{5Ie@igL2%)?+qpu zEou~J_!xT3<5$xcUmzxVkg-nu(_7cu%`7NvzrXIC3{G~vU3z*t-969W*pYnsxV>ub zdcS=3dyk#1)Yt!5js18M^7)9J)PLVSVV<1a)Kf<6 z@_F07W8Un1dtYB|))#ucem#0y-#)kuJ`Kuy}a(d>H8LLzD-)(yazSt zet?hrJwI-b9#m)hz2AqXdGVuQ`rW*ry)!o6?mh_l6zD4zz0Ic_Wc#_l9UQe6kNdto zpT%x2;yvq=WPe=Ezdn@PU3^?$Om=~O+5Ia9{PA7+$IH`AvERpK=O^2hxTTe@53AH` zeLP0M^XS3khjN-%PNe$W&Eksu(bHR)9m&VLxBGk2VHlRo^T%B6l-~@?Mw7$RM>1<> znZd_uin@^C$LqUYmoLBf`<(MH+5OAXl`?SmNeemsOuEIJ9&!MLUN^Yi7Cy5+C;kNM)*J>G&NzmLi12NI|J+41ysTc<|y=W-Okm*=w^ z>T{c&V<(Acq{h#0dy(bo+$VR(mV&w^t@~-W>Xub{Y6-sTX9@3)yfr!$0 zdH3*Of|uTzez;8=dm0JF7uzn_C#T3F*jAV%lw#`Z-ce{4e(Xo7`tlO1zS;H0e>4eO zw8kataV%E|N$TcL2+j+BjU4ACObo^gd2Rl)nM24XegxtQR$j#-lq%xAK_;zgm!q&? zc+y0-Hm5L&dVQSH=9o=+{{=VT8`Orx))xpAG#;s~X)s&#qvhW+Yn{u@g**Ky+7=PM z9hn1{72}_@C|AV8hIvVih>B3~2qt+ZKB-(Uj4rS%3@v#K@EhxR4ZMxz6qejM?&6^g zEqM*#;eB&ICpH@yxMx4>(a8EGPM`6mo1Z8qft&HO!iGu2PZyI7F?ywkp}X|*kB`9| zXC-c3BDtxA)nIgz;8am72hDn})jQR=DI$#hv!-J-QfkTLqueT+3$Rw$Kj3lfq_O@2 z<3pDEigd0?d3c2U+l7$vnu2BX`W~a-lFUe|M^|))E09= zxWonO&s-ea!OPn?)*CZ}V+=axWftPWto?L#7#^AOkaae=2h^Vkvrk8(_0PAwIyAUm(ye`kU#sX>%kWcx9Gp--)=!%Vw)uzJmRB1x9TztUA66 zfJx`5?QsY$({%hC)fupFU2eVZsyt@nHSpZq{9`5{1)Vf3)Y%!rk_eoa(^!+5kTNm^ zFaTY<+Jd)#!y$}QX@I%FrM#QrEk`q7mjb)sNo1eZkE z6CyM|+J*|DEDUZeT2B1nsZ=t01Y<#X`qXE0!H?}9YOHs?Wg$}{Wckupb4l?#*a`7@ zs=XA|g3~qA$#wO=5}B+8I(g0obdLK5ZvI5|uoO_2rogdjJ^BGj&FYtk(IeaYNAGi# z6vJ{h(9-#6=caQPRJQ$*9ZKiP{3q68F(i#r2U*kNRhZEvZ!uq|ds-+liY8vGGMA7c ze!3KXfm9-^I*{JRbd%SHzyipvXt9^OJI*GnVC{4>l*ZA+UYwnoyUOw>U{TapL=|0LuFDAS5{exbC`pBAxs@U~l*U|uhj~jLDwFvTE^eFO z_7%wE_WFQhXwRzQe$q6gD0=71+9;r(A%*9!+Q50L`eOppb4iLGKmCtd(J z7tG2N@i^>?yzaQkAy3R9c*y%QiOrrw9-Ma#X0tOg!p`ZA9EO`Mi4Rd(g!Bnka+{tJ zCqVqShObj6ZYwHf<`b5_Q zEcaef?V-e_f;q~Hd)UR!;g;yq4$$T-rv+J&9u((@1GNIuw{jTX@X~S3Y_I8)&%+ zqNA33yvmgYa~f)JnRs=Ug%vScGJ-n0C8g6n!hRBGbHfKYamwZP@@*LLoIkm?yZHgT z)S<5%n8{ggTFk5I1&K*Co)6v*b7V{|068E=dJVsjOozC2ZwChbtpcgDQc1DcVdn25 zQ01J5JgD;^)wF8(f;Zqzc?~HxBEIrK3xY=D=67KD>2Wd#wUpbT@zE6YEQLC)=t_zb zjR5hd4Z9h6D^~_EvRzXwlWwF>12+VuP1M@9I1W^(hZeF@!F4TtU?%M^#AVVDva~>i zxcd&5#s~OYM7p^<1!+XJkd{E+b=J{wpvjX5@wq$Aa+E_BI3LZZ0Ks%-N_?J_0C{(J zw2U4odD04Yt^Y+cJA|nIZL3hP$)l^S{$$ak13JdEMMVoQr5>H913N8 z18>5W{~9M*>09IU8>;8$U7ylUxi*p;*&J~XJf1Gx2wSY2e5kBU4qK&zjRiD;Y;ezhX_pl7WhN|c8kltN-@j$UL2kLR}as4&*5Q%7Ffd&VyIwbxOFn;??bOkEHczo zPcDq1v<-#Mx>i~K$E0B<<5)p)EW;w6-;lfkG_#f4zEH=QP2{)aH08||A|2#SzA7d4 z6}&j$8rkE}qz9w07IREihX}$87-GY7)nNqhjj&x6WX?*`#lAR`!=iOf`%KobgB6rK z@GQd?V@#&W=5nb6(zGPO+Z6V>uN8ayIAQgZMzRPaPau-D^$NmU-BOS`3m+oq=8Kw2 zlB#>1Uk3hJDNz~b-cT56}l~42%cU!Y&$D}(-Q`jkH&bR!XR=DK4L61 z*$-{AhToKNyN3&9q;$;X*3DAxsApjfwsem?$?4>7tY5+Q)S||tr=^B*pROW|AKwyX zTRbKP#`tfuOPXsa6@smJY}_*8W+nqMa`nCU0o0TVtTifa$b%Q4sU5D`Gxy+kz`+q= z9y7Z93iJP(iFwT6!h{0uN-`!ECwZn4wgF+Pd@H;#L>&-cN^;Jqk>3mknv^LPV$*VF z{7Auu^)5f0l=Wj@oc>&1`U*El10PfbPUOa9yuB+vIc<#|e%vO1vhu^Sf?Ybt)SDd%79n&MyEXGSqiefIH@ zaB9|FU)z!sgSWuiWZ)s+kbL_zu@*)a<{+@NlkMl- zocb=#+3EMnXZ!o}V*rzhLgJvK7Dp->hoFxBdFXy*weN5nqwmB|BW6 z?9fo(;~m=h{-IlN#G?5*VqYxMic6EV3C2fy@{iY)vD-XUx^a;=`2OE@Y{5GLpLaD9 z5uPy`WN)Zh65T7gd*9$2!wkv+_uzHssC;zB$@Dd$`wPs{{e>j{-_u&Va_FlBG-p{@ zMM7;IMR8>dMBQSeI;r6W;TpePh$xjfq5k&#Yp9GQPy*C2GKF)5P=5i10x{%?j?MI~ zAD75m0?QO>PT^!OWmt3eO#I~zbD{~BGBr%7Qz#{V=fz3Zve+tg?Z}hlLi)NF3MUZr z=7?|3x2E5@Z6h8r*Vt@vmUDdwQvhzv)zP{X-o_9^?epOFd7z^VV9E9`D87+-ll|+6 zGTDPDLjYT;lqm)SJybWu9pb_D;B+j3u zY3Ul|ChXu>8AjJCp78LDL@N69zf0V&Nq;^gqWaY-6U8 zMs!v0!NL5s7aTAQ-6Q+mvc=5cM;189xA2kz+cC7ig<@jV%qH)Er_1Pt<$07bn%MHu z>V{`N?@WE9%4II4sdo!_U+I1W1vJN&Y{MU=2!GY!2(`2CpBfy-c}0LXQF=#+;5V+K zclLp@NI}1POKKvcc|H+zvo=@TcqS&q&u8Y%orL%u#xJz+-)Uro{I$J7sv44U0A_2D zI0BUGw}CU=Ql`KC9=?tgfq>*jVZBVlo$>?D7<&2BOBRCReE>(HEhsz?VLAFjDUmU8 zru^87n}idjE9io-y)slO677A1)oyC6WWlZLF~0{s;n_!xO0(XQzG=Qeb0YwhpM_|97tDovZ)20-f!Sz!&ZC^Fo|X$stRg*#&JhotbJk%E4XKgRqqQ)} z$v8p?{iVI;v;Z|7J}3g_vWvz-@EZ1YM9M_uorS(oTB2+yhk>H*jl2Z2xNM|ecobBO z9Tl%c(BCP_PZv1T3U80@s>177#`r}R_x+m$g>RDfd7Yw%C-%7i|#TkPihbxej2k? zi2Ua}-mv&@)j`>5s6>_J=XtR4?9>(vy7g;coO<4)XUl?IQi%tKrN!-~%pNq+jvIyi zA07H%n*?^C!c#SEZ-C}P{dX?2WVZ_cvLxSsVo=y`LkH93+1vrPp77>J=?-HNf~ zpo|c05crNJmn5_GWh1|IMFner+o=hU*!^p?<=$nGz+Jk=Wole8MV(XeWi1XTRQVu~ z7lk{vi~_=1QU0M1tBs+i6aZM%cMO6avipzo@RRNH@Rguu z|G%M7XqS)5-{_wQnNqgtO&?J9hD8Wahr$)k(V&T%g&q#H+{4t>-Kw98ohYiHs5kt3 zvluFju>xV@yykRG=|B5Y=a>XH6b|fxRA=!T#>aAE)m-<%Yheao|k-h(HVwIdYs;W4(g5X<{uf~*3-lkIs z-9E6Lj{QhajOGcT;ib_*c_0Br$H@K42aEcSW!u&_Avv#)|v5CLTH}w&K+a<|$821yNN7InF zA-5X*?Uaq$qaO5MBg|Jl??70p*t!dcwVkt3J2Z-`vLQ9f_y_4#Jz$ri`KA{c3oA? z<#&9%*rf2AzVpcy(ttiLBi-J#h38q$=u9{+0ff#oY~@L4rtPYX{BwDht*8 z-1+(*&-&O0C_3HAE!Qo*_+BE==UFb!JHD$hiNXdvAAmXInhRn@IKliOF`Tzd6`?Dn z8vM5coEGuT3iE=kT8=#LWX_61kG5dMYsWwa$D{2e>t4Ux#Cb3ZG`?W@^Vr$K$TU(* zy_X{hIP!7GO@HVo`XkiKw}xilYbW&!2o*3!rkPXaNK;A_|93qN%=A)Nn{e<(fy+em z#4O3GdK2I$$hKJ(x-IYHex&ooj{DjJJDKENJU5`sd#C`iLXx# zgNqnfpr@#DN8v^~riIiR(W=hm$2z77s!z=SkkMj!rw)~dV^j*6$`5)K;BR*y5-`en zgUJaJ<(ouJl9gelOZrJl*H7UWCKV-XA(x6qS}3>d-6>#t<4}qeY!00X;k4|Jlg?ff z7LFu#{clF4uyg$X7H7xPT6Ba;vDgGSy6#(&mE`cbQb#Mi@y?vL>=&PQ$k=1iZVCKB z!Zc~al*5$GA;AN86vt>A@1G(Ham#m^YS|Agp8*2#!= zU}BmW3rM+6`KXix>0UgDZ9OiguhmM%`g&9eWZ7a}yoV_%`%`r6p{PTj)omUP10Pf) zaUiOiegUgr?y}Dx8fX}G8oRBjIjlasa*?=q9}Ma@KmVOO;ndu}eHvwCk`k1~H915z z-ZW4Y7dLJ7XkrkW>}9+X40HVo1(ypcwl}&rT1_t}C>6PZZV^$TWJB9oHCEs#l^35E zQo=aj@!6F85#X-BjE%Fm6z@32vfrZX9lcj^y02ttK5=*@N?^Niu^h_%6FxxRI53xY zv=HV26bCIOGEZz?f%pj-!bR@#p2c7H(6^N*f4U@w(=wqi{}h+rmqWL(P6`hJiic{S zdU5$xisROyr;?@6!N}yVC8Dh=Yb_Qj^t4r3AiM~!;{#)5^0gQRzji+o*JOhnANl%5 zVC~ChJ*DMAs#7l(A6z*>!Z(#4!(alQQ`i%4Y!V<`n3MJ%Mv_gyW>7y%!de~%2Hl2*+x&Uxu-&~A zZA{Z{&>RzWN!`AZe;WnsxKzQAud!?0A4TrLmrDXQuV;)? z$(_`6GhQhM5AgSK1{^n2#N)vJo-vf>Xxgu%zJ`WmgA7K7Bl1SP(c$`l7WU|)JSYp( z(D^{Qz}D~h@*IfyA@cP~$fc%L8EW*;582Xv@u^wH>6Af~txc(gB&dJ**08gymWnv; zB?EufapZRxE#oC?_Wxd^_Hl4H7dT^xv&Y)y8vBwJmEjEUOE%ux-;;sDU3ir99$1}Z zTp^#525+56VS7 z($Zi7<+Z6xq=##dfY$s+U_G;Rqhaz%52pIto2{jR5;l0$WbZcre1KK~fv7X0BbuFija>AcruBq?x;OAZMsVU}s z1mQ&2L!~#_)cMGd2wvrq%y&E11tu(@5>EcvEXRhFQhWI4;NQHAaS?AQi#7Pk&n7jn zDikS86_IJ7J4dGg9g3eY+MD80EfLo2urV?b{Cv zYTWNk6~15_4XSPwIy-4^dh>KkeJEAFssso<7(+T$&1=MMJyh5J7 zCO-P_QeE*U0|Q@xo)8-|gI42M9ZV;r)?HQe<)5N$2Y;A8( zMr`x$k=&oVW3&@eZ0m2|#MR`$Ut~P?IpCRmOz*_*XVipD?K~?8AZ-cXN_@)oiI`oc zx_}?oud^rW`dNPO+nhEGFBimAZR`8TWj5epk>lYtMCbyS};Vcv=&ole~63 z3x%8^n{IN=S@XQtwQth=9BBjhLCsfH%GTEUTIx{+@qPDb?TYTVV`92#PZUiTH7qx~ z(f2z>G!GOm7qO}6YUr`wlU2SYii(6iw!hE`q`3XMgyHUd%`JVBzn_JnOL09ufDgq+bCVg zpI@82W!#E5byyeod(UKEPw27#@NAGPHKo?Etr%q(oD*K=@pR2K>>~ggc7YTV7cwRM zG8rUN3T+8}Pej=J-az;+*`3$$Y0o>*xVq$>*Cj5QEeQwTO|Aj@LT}m$l2NjWNhmWp zOUjzfAB-%|1{r-%R?QQtGCeXouW_1o8m8=%rHb+Zi6*@@9!Op$9 z_i_+;vct2RAp%az&xk7-q00~SkUI=SZg#WVq>^9h%<6BUy-r`qkC%yWo3yF{?P2Tb znI{HSYqv(Z=?`!Mcj%!h<|w9^*_E*-5R(|*rX#<%!?9xZAtwMjwkQ?^($eUN_FNQt zvY?Q0X`9pp0cJ;=wDG$kyd-w>)d|8~fceO_wzidOIp>Macu^H;(GT26c}>*FKIM#p zH^f|Np#|K%R=a#11PNK6VHqvO0xm0+_cAUo0VpSE=AL9ZFt2w{pjVD7+B{Xn5q)(z zmyA4#7wHv{q6k!bF4QhR^RpGf?DQ)q+Y^{ZJiCVK?t;!tRC3BxkG0to!-?;W z4Ua$D5<{O@*A5C_afxixNXYx;)Fm6c8U75~zac)cu8bmH8!hY-K{oyHA3w>l8DmZjO*I zHn4FX<SibZbvMSc5AhcMa|K8I_tgmTx)t?sv3qXOptR$2Huj<7p9HAq zb?aaxYhb>?I92^!2J3#{M9+!TRAONaM4x#sV!%5ApEk@{PVxFr``r3&PcE&(NF+Y; z`=vAmVA9D|OyG*dnhv^Dz_qhx(8)EG;c`B-w|{-@Sg{<`$>uLJ%l(5O(~rd+cQd_m zrWD2gH45U+%`mO>=iYG~xxo0S2et|_oNNUT|LHG@EihB*0}T0k4HY6*1r!s_%5`tl zEoGnMe%F)R@B}rOz=y}r4E*E)*U=R^NWW6>Uy)Ek|A!n5+`q^9omt8?p*#nrf9zu6to$0~Ko-J^e$ zY6j!==s#4t>!t355TaB8Gdj8YDQnPDetRMrf)SVE(3qiZLEC)Q-zmoM^L+9A2Qz+7mudHT|EV@CWNkRBxzcGhA?YCs!42Op7WVahKzP0;xyPib04=a|!v1BnV zc^@J!McQ7n1m{%^($6(`c591FWqKB}cmU^6g*q^nd>u_wM!7n$#6^BF{$1k5y1tgd zp9zwziq-wOyv-U@C07GJ>nBV_iIf%c`Af)6rA>?OghLu}Dg%OgphE5TB-XLmO4HWw z$+aaECdvq=tL)d14qkD6gjO26AsdWkLZYV&O%v5z4A;n5`}TXb?Gi$k@UzISM1zs9 zgGV_J0(>W$cWvHRBv{l@`Q;;zB$YZNPR?aHDhdE1}YdU4c#@tq6f^;)SOkh83p9ZF1${beUAwqb?jv5GE^FT8R(OEc6pP7$ti< zbARb@MLQ6v-Ar1n->l_Kb25+qzD0T8PQ9H$P3BVyh(;TD&0t==SOv-GS>A+)E*Fgu z-B;RgX^om&ZNx=MV5q=s}Ewi zdkF?R1$?=_4s3-i5yG1KI(znPux(UriUQwUMWd3d2TsaV(5D9%q?7aji(cq0Jq1gQ z`ZD6#9(o9%qh7ByiW;gI;CMFZW!p}_%jezs8FbQ-muH{3$ZO%NW*6PUxVtWLl6-VI&Y4_4Zs_ zn8mq95XIr{BQrsTHJWx-U()bCB6b^=cE<4!^y>*!%H&fFC?TN}*j?I@IVz&d4!|vG~qsA-+j2R8{dSL;B zQ(#XeRqf3c6D1*Zgk_ZnS-^6v3)c6&&bQ=3DAQ7A__5Xahb|la=&)COt=D}AkJ{^M zdGrsr-Lnr6+}!@c?e06g74g@voUBQU%9M%_s_}sKZBp0d_w@|^Ed5T`-SOuYiHw`R z3iYgsCv5MZwDi8C<|Cl(N+I~sqj78|^7*D2BI(GK7>iCqTZJ6}bM-zt3wy4jc-)pd zbvLs7<0?Gs4F1+SCGL^*Zt5mZmo)_gGZBxtm3FIhTA_aA6)NMr*-@_Z{;?k4=tR)E z`+>;WXG;tqxp1BPwA||wz6`ZTgnsP?!UEkwYs^KG41q1Q6&KJnl67*jbuZ+=4`|Yr zZlmKyLK`P2yu-zu5S<_E?ux=^pGU%M%)B^LFP~*tM`ncC0M20U5!AmE zE)523mdb|E5KS%COvIYIlzmDjkD`8sIM8Ru~w^ZH)Qw zVRvc_RKyn-3Wnxy@v|@FamD%23YlDWuqiGLFdNQlromd-(JadHHS~KWyX|IztbB*T zhS-ZQopJ)a@6bBA1p;$+6ITB|IV}b14-nG8URHe+!jj4V^On5uDfbkKBA-cZ&bQr6 zsP;Y?e_SFgf2kd?s9Q=0gv6wEm^=$2BiP^2J`NKIm{Rp)CrrT)iK7}z+Zl&)fD0?i zCAF%-)tAN}_F9ssEM%@J22w$(A@FR5EscmPxjqZU{KP4R?#lcEWYfr0EkO-xq7G4R z&^kfOe*9#TJMPNCBv$eM@jAW(=98(>DJS#u$d1nq081&^T24Jwez_0di4^kJ#og$K z6^ZWw6g}0ztWiYmd|t)RuaPdFBoza}eqpxrhLs47djJaB+kA0ai0uj%nJgo-Qsvx7 zLp0xEMjzwhX?v|-W?U3a=(ty1UiFX}Rpo1s2EsG(CyNLW6>DFDAO7wetW_`g+-m%K zx+;3+OfP$L-VIKokfIxvMw^Xh$1ftFmwW4p(rxRWiN&6c_TeoeSiQbZn|5K{l;c|U zHdJ(UqeM>rvto+v7ISs~!l_++f07vfv(8xAr{zjj(~{(~kc{|M-b(HE@&`-R>(oG_)(U8yHqf(fPGC^(C`r*Q~lz;CK(7PKOB`PpVdR`3tK63(@F0cXq0O^U}gxvta zO5=}F+5y>mSA+sw_A}8)hXGlYs3g;1PVFJk?`br(%#*uPiL7M~!!%;L7nO&&+GFQG z^+5y>*^O>e1i1G}C&h#D@5=$csucDmt5+1uRs!%}lejYID4PUsfSCA`Ukc@D2e@~~ zUsfb^rsHve*HO%Z0`6`JHB1FcfMV)WPqGjdt9{Q|z)2&n3Qgg&C;}ypS41OKbRYIN z8oPmZXiFSrK%AjsWPZVCcRTbVrB&c#%$o}pG0Vn zcOC?lN)Kb4x`a0kR({Qql)3~P4~NAyorL!NP$;%`tN2sns%>@oto|_-{0qJo86DX0 zX{LF1-LJBFFH88tgAzwLU%2*VN@Nzw%uc?Swdh6$-EigiTm^1KJ-~tDGI*c)gxN;n zOHyN*V0q8m2p-a`!LL1i^4^PBE2F0>XWA;}yA)*iQ{|d=bWmI%@aV2;Ah~cU(GA8R z0ffoaW-%F#=a-g-R$TM7$5RI|$SO|sJ*m1ZUO=NUlZnrgmc0u=EELlTwv(B+k(H%DZ!NQVdhqJZ z)o0Z&<)2AZh9#aFU^wfS$3r)N-|uFkfwq1~hG0pttdJwmMPY3}#p4=K2i;+}fzBL+ zmucr32*N#r;@)-c0T@mUwqx8|YpfQ?bzAQ<7~!y)eZw}MFl7*6V>uB$PK{}VgJA9;+_)(fBpA&18<`T7zf`!P(xe;9h+xr2ESbg9E=u$fzO7bM!V;Lq3lny*X5Rv&$ z5c|4tuV2`bO&rD;AM16ju+VMqcR?p6{BZY$A%Tp5WI=~DC?G;&*MpHhGXTA-Weprt zihU=gZyRp;niB)aldKE*a#adk!y_h`Ihyelh|=u~M7_WK zCTw)M56a88O{}DMjb*s(sahR= z@r6iXH`7Kk+V*0Qwr>gPY6Bo{LU9t90`-vEb2xvo7+9v6oI%4w76Dv0WF=+zQJbwc zq!d`RN*O@An)X57sqDUp)9uYO zZ$V+4Eot>Q?|<8N&rdkp)YMsHbp-;DrM6Q8K=UU}=$SqIdgU57P2et0XYwE%a7H)6 zH{*gw)~jDJD=gHq0X|BJ8SE6Lx;^e!5*rcQd{f@IWLM?F2IA7stX@&Ux4b7}lEtfq z^Y7Rzs1DySdw0d$PviGK;zlE+cRzMEDp@6Vk2mtp+F0mMCE*)HVS@j#MBg{O`Oq-l zc-``L=il33U!zJpKY=!ci)Ec-ds{nGW9~(N^S|F{Q*(44b@bW@x)v1KnfkKP=C<}# zvo>pv?KjIN199ppc`s>U7QS;bhCH^uV5D!X3X!$0;jzxGcx)mQ8}i0pBtc~j(&#t; zFm(KaK%ExT-*2TXxnr(DK#7d9_VvC?FnMsF48E!^zu2;S%5(Qe3{R>QiB5AbHpK9A zCr}f$b+%{p>YUV}f0JZ)-+!CoTpwiVuJa+!f}4zq?qhBJ?!(V4NvbkmP>5yeYi9N} z+GGh(2ven%gqSBBt&AV8{UIm5wu5{XIKo)UeFx)ddtosIdy;oJBgvKFLz(+;&ItSh zFv~;vdH@*BNKYp3Z468Qch^+9kBxu?^(=quUN)dT>-2B?7E{F;!+ZU`d-3zIZ-FOm zOIuSVvuh%i8%OzND)$bq=oakMQ*NF0h|k{2FHO=HK-XjdnvH6*Uq5E*Q~-q-K7u2& z@RJx+2*4jvN-09POhytJv`b+Od*s(GY`5;#nf<&yiek(dBg9djHtUJ%3=}sofpuDt#pI7Kx!fPD z)dW5evZzO2=MobAf1g>mNc9oI>u6T6Wgc3WvGKiyg`9FMZ+`=20z@jdd;7fzIur~` z%Ohg4wBM)D^QV~Y@ZARD1B_`4n5VsTU!$Prd+g)mM)6Y+(-(ePJm+cyjk3Dqn_o)w~$>JGtQ*{ogM-93{je+l(ZXXwkoC#7X}ASvlCFq&Dh zMo6{1ES_&|y5!mrd&KWl!gB|;;cH+Ro4Ii18l+;f3HQc5$a8C!G_#$uK-vuc45 z>;ENB1|kIWy~lN$E@RA8jW{0 zT!k@WbN6%ZAbE$**KX!dS+nn#E6eW=+XCAkXU~4ME+!v_e7JJ;l09Q+3?wXzc?wIh zYvERc#nIh^p)vDJ;EpR#FoS5GM~dsDI zHjY3U-oDoPirW2iJ4@d6Du;VtmLKVW`r=644)Yoq+uX-iTeO0{er;?g|et4D1I z#gS35;P%qOWkj!`bHJmwd=`fWQ!tq;%G|0zgIU<*r+lrnZZ*ZRxg|y)z+G0#qnz{y=`CnX-swaL^~#6Q&8q8g-jrthmcOAThi60as*W>T z-gx5D4(&F$Ve?zW-g{mRcI$-AM98ICg9~9I_iG{RzwSD@Z|b1KAYKz;A1AVUSI?^@ z2gigBV|Cj8?Bu_w&ep}yX6p{t5^u0TMx&45o_+vyxIqAP_Tm}Hs%7tnwoTSdaRRFUWXnxjpfLn za)?Z6{^d(bU<(ZsqSD`{AMs*8vzgs}G+(2hn)Yn@32ZHeF=812+zPUS0N^%ra=fKA za{{Z_Jx;<`ubx%BKz7gV z{?tKsah$~6)sNqYe750JQ+_u|$E9)YIh9dMQhF3CX1wtg%^GEN>LWGk0TWa$3;YK- z{_BnLkBRGipf|B~b5f2l`Facy%ks}|w;Af_Gg0Nx4Lz8;s8vHCeiBKOY;su0T$)z% zjtEI+bVNT`Yn3zSH=CE}Mf|Cow|ljEc1j%l~rl8K;fQh_uWpJX9|7A=*Atq z`#v<&xUh?P$CYzg1Hi1mafUsg5%;~GQwm2vbbny#dDjM~1V@%&?4=^{k~J;+U86t# zQca!i3^hNb9_7z$vm3=7gVC*ONraY}LXGNU`I+>qn3)^uIuM77%DEV2k!rutnTU_n zF}4LNp5ohdYs7DA${}*7rB&+Mb$Nb-nxSIE5^(B3dG>4ENY+upm&#w!;L!OZ5C1ZS z(&D_UglBe|oUTF1oXHV}OLrY$X)KcuLo6pbwqk&|O-O{z8if!=!2eC;1G&SS>v8NS z@@4hG^sEUY$wCXG&DclcP>))QQY@;m)`^a(85Z7#(>UT##&sv~A>eV^sq(?Uefb0p zY|q5OgQsLinLP1O4Ik(@;2#jcPp}^5Q)K?BT4Sl2=fD?`0794=<5aomx@Q0D_9$bRDmXkU{7<=qS zJ7>T1D`9wP@B+%nfBE!vi03MQ%#y!`v-ga^IHT#s5>Wv$2tN^9(* z0Jkg=I57-=JYizA-KVobQg6^q;iE@e2L7a=)oa{WTFUX-TmmA9l8&qc_ z?%Cd^i_qE5KCqMW?|~k~Gn}J5^yXt5=B)`$r7wQ6;;QG#531+|0-shPAgxSyrP`m2 zL;uMNP=Ni(RKoJPRNjk*v(Ts7SeERC-EwSE?P5)Uuu*iR+InTWGNxa`qCl^k8RQ>X z!@sIWy4Ln486Nk26s~nUY%c5fx_Hqm%rlnY6?=_vG7NJrxQdF&40)|IAh9zf?+PiC zU*R#=lLJ)Bj5(}Ko(@oC^*~!wfn~u;yd;P3*O>bh+l z8Z)^vk3Mwt*)P_<3%@rKjUa__R7~;|pHeXmg2dQr(f3T|Gv;izC-mhg&bxXF$E1#M z)y}q-cd4l861?^%LZZ_q`|3CJ5P_gfPIgt_Lr+Z(?s^u!cv2qj8W6^0grma9kuOHW zYzE~OBVV-87VZ0Vu7LUwsj6r1OT5+1O#ak3YY3Op zCpxN?NC(b8(vjWAhWDR9s7M}Esg!+J_=iulzqiB|?#bpTsMuW7c8^ZBCk39Baj+D| z9rltu)S){cHD?sroN`VVs#u zO>OKarUZBZ=u`zig; zaGAX9$SiDx(NTxx0G*9jtx&CzDhn*FqkbrAVn*Rz3rUas^d4nG0gA=fG#l3ExO(fu z>J8}%zn<|v7)SH%D<5KOcmXzR^H-Fjz5&K#^WxA%O3Nf0U!TZ>H_#2dIo^mL*dSGA z;SATP&Ej_>*%an{-~!m>gdSFEOhd(aUC^Zepmb(blvGX{jF^9Fc`#Q8M|+cI>niPe z7Y1_ZA09258WyCVfA@}&iHFO$P2VP&5j9(vq>zRMq49_Xmzj&qS2a&aubChj{iNiC zoc(G}Mt{V1%JoZh=t^jlp&_2QeJfG~tQrM633I`j{k^EX)04p@gZ=N)y75{-cZ#4- z@o((hjf65cU6hC(%za_jI+SN`F^3kj=wT7S@8qqa95OB+>il~)JVgV_;6+}JR0}*4{LuN^Msb^Rjgt1(n`)jXTJgh zZJBIbUY(J+tq6B6p1a~MJ}9X=kmj9$*4w@ZnJ)IGNEkDBUIrRxQ9X|LXRqNvU$v}< zNXyF?Nihdz9LPAV&6xGfS(qBTg4E$OowFz~f9N4-261p88+vje_xF>^{(-4XGb?9t zZghZ=v@a-abLSd17>THabwFPxeH86<^vwb6!U$~D*I`GTF&G^hcv>--)R>4-ZFWp` z`D)CtyaTPfYv<)1V$vNNppeKqN0=*JMwv6Q=Gs9W6E%Y$UQeN%qXSk4+-%r=z(aW& z5vIo-#6^efS#US%r`8EhG_^!-9sj_ogPqV)Wu725tF`6qt(W|q+^Tqy4I+M=&ut}S zL+2Es$fY1Ijg1(MP!}InWigQgzx!+@i`Y@ZPqV#LO zISxTz9ji=VmWG6}I5<*b1f4w2L5m%Wg5b3`&{{k(D@7B^_l~<&g|)_Q&JHB0yU{fC z27&Yi{0%j$^5-A#CtA52W~bZ%_@kAVa;su3e;6qF*>=bRb^=nz6F%yzE8~K-ft2@? zrBeTsJ~rRrJ}mKsmenkge-a}4XdEnQ5|Mwu4Th-cMq`u}aiy$2wsPylvWTw`%zFSg zNV4@?i%RR8nE8$>ox^$@QfDs|si!DB#LW9?PvQ}zvP|=? z&q>C)I#3|pl6F@5!}%KUnb*jMyu|bYOENCKP;v#uC23WA*YFEzg-V1lBgXnLqhz5M zo=;NK$Nw#^Q^`Ny-d`)eMh$P*{B1hCiGS zp?zn73mmopL-_%7}Aj#|`ZGemKNnEldqwLJi+LdY)pqk@(ts=79 z25ct~M_Xoh+O&~AwpcmW(QSDCq@h-PolL79R<#2z5p|%wOIktywWyHxexe3~YSCEO zH&V0mjzjqR5T4Y9?^~Plj>g}N_{nggPWIn?v!A&r)@E4qxM990$?FB5RCAwESj4n! zfr5`yPSVFg7k9$Rs*ZiZYCzysPEs}K9qb3^CQLR0s%RfPxWW)@)y14)-wimZ8VuAx zh@~Kd(UqfMnW(v(X7ZP#n)a9$@2G)Z6Vzb%8|L1kJR#gGy~t!`|u}0iV46J zWHsBk#T}P(Potgg?_Bd16P&a<;+dwo;*ogUmuoddIPlP6J3w4Fy%x?uuZ7c&FTW0S z?5FirfZDZmE_e>!ql})@AONR97Z|_NQ=&Z}W0P0*jlNk>Ob=7;%B;(~l`$r@1IH-f z;<+!rIrl!%Z?^adSw<#QX7VyouZz|@2|~}4-tXBBLZ8p*HPx)Y>@B0Pt3l>I&{v49 z9F}{mM@|{L`MSmFJK&z$7}#JfvgDWjB8`#;a(S>Nyce`TWZMupwD&V?HswE{`V@;f zg|JRmoEQFg3Se2DciuxfO9~qzhl}bZx5G>;KLISH{GxHg zupAukK~kcgOxCuLt`OvLQq1+48@iepV9BUwXSxw8CgIDOf*#2C&9FZ3Qzk4CL!SOp zHD~?tmNAW^CYjVx>|xGYjKm~RG#x8vJFh0H+|f03=O%lu)a&Md|6qTC^trMCXmsd) zmWGOWAr=yq*#OG`OND_55tHYY`_Xfw{X2^@+0!sMDu{{05#n;nuoh zB2Q~-8YRPI+uibr16yh@InxX4uq*u*=HUmIKW)v%5AO;Z%(Z0(IJJ8tMeP-*{gTx6YQ4flJ1sQWaY76Jo{1N4lP_a)3(LSy4n6@2%>G))~edS=PjEP7ehle(!^E z(;$Mk;J^j`k-+V=9vemG+a@S%845%;XHi&yDghm94q`RKqHka<5cpp-e zhr+rgIf7=t@*%)o6(BpIAh(>GYATC|RcT#u|5zzW7cJ<2$a3er0NzjJeVB)MsWgMv z{6RnIt<_a6er2-a^s3z4?B{Ks^yxHh;T%7F$ot&WZhKOvFn{0DF<75Fzd5bV9xset zc|`ju;rRA!>`iOJ&NyYahEH=S{U#&GpFWKZl{DBf6DuyNDg?CD8i~;kW)~9k?tB=t zXP!9^0KVg>2i&Hby$eDw6lmL^tgPuYKT0t?Of=@*L5=?`B(k$4`E=wd9ABwtLkpe> z;2RoeYcIUF)n`vM$jFcvIqJelG}E^3B}r6$x)k=!8B`s4?EHSValNeLS`>}k7KP`P zR7aAh>v9L^eqdhg1hX1~jkUd78j z66q%Pds%f@4+;0GJW`1M9QTg@nC`%R=DgGM#oS8_kWJ3MYcxcpjM>so;4-g`)`NbG zmNh9d=f=o})9odfF)42&jjCicQW9?hWNSAYQMJc zgj%RI`{z+4Q;!wmH-AO4xUZd}lvM=8qd;!xRcIbe;)HV3^eZ^ zZR$VBiW)`=+aRgB#=}b6_{wkBtD*CW<;FYEqUjN7*_GQi<&o};UfVHF4~!=MD*riY zAz4t2Hk_)pP_5BYwUlrwO4#kVzKiTobt-1iVQ#z=Y6mY^F5$?*LDlh$Ov7m&(?Avp zP3>G1fVHR!y>R|5Pa+?8LXDP+wQbhfx7~+r2h*@}r0kXkIAP_q;RH$i)q07Ed5-ti zOxF~IM56CBN#s{Zhq0=3i9BEmf)4v_rdr{v1RyjK2szQi39G&-#qKa<3RZT2e!`6l zyv{oI2>aBZS_zh+#Eys1prXcy`3}W*D1tzu#2)W~|KAZo!G5xdcg#Oss^BF@YK>oW zCmDO`O3wlPh?J32=uDH|rUtXpw8fQ+hE4&1m9_~!sHPj?uf4J`4KhquAKnoZyHe@N zuGQS$X^A_q-v&H4;>c|}R2&QXL2XBgkEz8D? zsOT;AtkOfwbX?wwXcq+CIu!)Xoxu^>@BZ?>EA?A2;?S%q_3<~Hxy^YFrK&6p%8kz2 z$`fp}vdlp=+hj}IJZ%L@b{5QnbR0G}mGh6E*tnI!Km#VjRIly-Qa?@J+(a7F!)=Ll*hPb9kGM1}C8Yrdo%_;n>31Ls8 zhN*oMV)hJ63iX3(`o0b#d9`c6Rd#+9u5)wU9E&*U8Ty?yhP){NsAw&659jRH1jx#} z@y=Rv$k1keSAlI!$NUNs*>FQlEdk^4M5i(Tc&BD3*>EkWdwnB3S&y z7FOnvnl$vIbnigoZ2+N*eQmS^IKs=;cJme1*L(>s7gnDH3IAwP>dw^SvS7DxVsDHK<26NR-+qV&)U>s$~d>oeeWh$hsIASGZx_`T+r z_ZN|xGJnIVTT$OM7?0!x3O$6)>g}Ln%YzL*m>p+11!(g{UKc-GEW z87KtHQ6OG5>rz^tHZg+qYn!DuoBXUP*aOm*UFGVsso9q;_!-%cif(QEtqUW4Cv{O) zp&V3ShxDNV!J8>it~fZ2=GqdHMLF9M8y2R?tI^;^xo4Ed@!M`82c|;Lu{7x4<;d~@ zd2dT!Wkcj*w?JM>8Uw4EHP&SCQ8hOlR~q=J6?CVP*qHXlj!+xen6{ot2zi4O1pC06 za3p0{;p>Wd>n9--#KsZrKfMiF-?hJF)_weRz3ynUXl@&td8Bs6bs)T|pDU=6)-+43 zUYd^jck!r(skF<~U%MGa2Y>Jgnrm}rT=lZkhc`f%WctxO>e28=z(7K&_{%j~KAsNa zRyw&g{jE-Zl`Uh9#5v8Ha00{sU;sla3#M_XL@kI9)t&g>E4ltL6_2fji{=L_{Gyp< zQ=eY_7VU7;_=wMi#<%8S{FX<)-FSzzv|HHFc_}XS#7&LXiPYfogfUTTQ*uJ+?rroZ z@o&|X*-fUC6-$XPS33m^!$sHJzA6aj$I`F!C5XOic!SQ5RBhO%p<)7uG_|2JGt{ki z-Bl~jq6<#<+~6Bqw=)>lopQS6%!9$w1-wB&)XP6aqibl!xr;fxM*9fHxn|$9Y=48Z zm76ic>{Bq8khEzUWYZ+Z8D>M<>jy(~6p(TwzOluM!`@GIAXfnP}- zWSgmm+v=#USjQFN&oOVWTaeSR65WM587h!ZyM{3F6QV$mj$CtF9Yjm@7&ScNk@)=n zsOC>?YQWgp0S604S2YxAPHExI5PAG#LF15~c}TCGKH8Qa&Y++8QxaNgb6M*y+T<21 z+qns99l8^ENRI&0G?>WB9Jx1jFDZSm2y*r>WtOrYGGtx%N3w%BAad_^JeN5n|-)Ki=IVr2& z_1`GafU3b6ED86A#u+^9n*s^qU99WY*4ZZFye}+m<0rio;p{6}9hrEO%fI~z`3mOQ zK0-gd1uJEbi^iSUI?zdYvE@ZS6xQ)*_hf-8jCF0AhWMP$XuklsoeAi*r^r7h>uNtQywdvzRE7?A zJM^IS(FEj`(0br(^40Cv1Bl8|%?nW>diFAU_`GOVY=qPP0#x2V+#~#t;^#A$n6(u3 zpbgi!p>7zE42|h5hW_8y8PNQDa8n$Ib}=X?MnkJaUD1mctYDJ~Ew4MoJgTuL;ZIjt z-eB!>3ZMBID1xDb6u>)bBn+T-1i|o{=C6a&FbLMd=^1}t0S=aiac7dLlZU$J>TPrl zFm5u^H1+aBf+#>7B7+vAnae2tz>#s@U7P4f(rHjvAf#e+bGC!!S}7d!1gcZf`?nMp zGpx)FwC%#G(+8-8H|vnsXFU?%22=`P_wuScwDb^O$82cRZV72ev9LAY<`(P@kqis9 z@oAj!9Kzprc~b)B(OTohD(}8mPI_Q~J$plPJHaQ#X3Hlc=Pw8#wd3!**e{Oyci~1{ zm=ohy#o(1ARr$H$H=OFCzY2d$Smh?bwG4v1a`0JYC+Rh`?%sF!^w94GVAD+txX80! z(OE10?k|JtZk%cS-#vkT!?`y%-#a6qaF?TXSi|6z2mH-CPaF8e1Rcm>U_E>M6ih=MbM@>Z{+d{ zn_f?G_+DL=rIoA#n5GxW#omiMr}8UOS?bJ@)WEiaRNuL!%7CdE4U;i(h4Xe9`AGVe3`)*Hz=B4;v)FmCj&D1_B&x8}OxQNLp`o+^l&=eL!fSvN_6S^4<9TPv zkAa;aXW8}gQfrJ&zz4%G>sx50-gpgXQBbvdPEbgQe^vm_kv|sQn^de&jxz+i!51GK zMm-LI1eab!q2KuG1ipvou(t`hd+AuI7XNJT07v5>$0vz*=~k9+qW@pdi$*w9=xxS- zIN9m&k11C;G~??PqM z-}c$#qR5|N{hO7Byg$(iD(_BHmG{|0aj8;8kJTuv6GJ}V5Pzph#5>+;<8hiX#qFUe z8>mq^uxqH&MeR$EPLLIMqZGY)*vBMkj?>=H(}MKl3R|GOcqn5~T7T;GP%F|pNU5C7 zD}`1V(<7#w1Tfi@BD5D?$rEzZ7t!xK)KW{-Hm*_o;1-Hpt!=#ko4wEr+>qmX*RYy& zm7l3G2%`Sm)>K$f1h%_vDK|PgslyI|QZtDZ&XdxaZ*{3DaEz(bNHg-#h{&uqrp)J- z-@c!G$6FXlgm&&r@(fGJ}^+_i%fZ3KrNvUFOjP)3mF>C-+R z>r<3iT?M1NR4HKY8Rm}J6w7t+&&=lq-S#Hcl^C7Yd|1ECRWWdi`JNapBFiCso5A&> zg7h0o|A0Yvjk2`wALUB`FeskoBlMTr)I#EtPJzMKW)S6nYWu`R(Lck=^HLJHyiFly zq9jxJ!?SBR3t#S_l}K*CavtYzoh3g>AIr)7{V{Z{4fBg^S}g)k?1ESvj}dnk1s)$Q zhEHcU&bcCY^uH)&6s1cw+xRQ$*41>vy!@|*|PJU*4?>xhki3kY0BVW^u??} z3AeFdp?17)_ea4a&HB!#Gn1a?*n*a{{Dv(=;cWTXw)kPs1Gb7)gori)H&j4*k z4e;=5_|!TP8dNTno)Jl|X1~g#kGd!wS-z0-KatAmH{9;0m^p*GD83#4X3NneQlXl5 z)zZAa;Kz{1gdkH4pGJwXh8TJd#^dUC8xPm`#269mqwx*2WzBtM&Z`*@;Xi=bnb0Em zOq0Bm5g+d(?-yh(T{iObpmljgxgk>L#&RD8OfxRi?|$2%xtW)utPZz{dMxy$xgxZ- zt!kGXs%iiCbMmFG(vscX36j27#(uJ!5NOc3h<^-`@S%ESz26rU0l)Be(+-=B#5~?u z`I1!W^N-T8&ayHcOu!OC1zWsMikuy~y*T(lb@Shwok#tlfVuN}f0b5i&JuJ`sfs>p z09*uVM^zh;X3RSD(;Z1``cfW&KWEQn)vZ+omAhh1v+nRTBm}{Ts+~0{$*Z@ zJjQ<2&{TeHou+5LtZ!BArp$W3aF}j>id*Bu4tp>9eQ*#N>?h56zYPNjRRs2GSoBM% zhINzg&UKi+?nG zV?NifZgXNv4QM>XFnz|EY0`qZJF*S`Js^$F@ z{v)dUIx;Q5NHM#f_-GQeQ%2H=%0m$%-4}e&_{`(g2%FXfg8RhKM~V@SKKg_vxBH6VeWks1!yCE-1`d%O zJ&ZP8#lBT*U@eB#naZM{eK+?DCxu>UJWIgk>yAtyXtZhM+fY_eGyxUDeEFUgNjr+( z7&0(e(W|{z-A+ zDqYcXusf3+|GoVeVW2GHjywk;L~kd^g4L@f73Aj9h*V&bz zOA?u{bHlmHnJ-UDz{HgkJ`&SR!a!>B;uu5pxXTIl4f42C@3|c**?BCQ<`#*|9KEJW z+rMQ1{NTvyTemP!Jyr$u&-;L}6#!s@%xj0SYGaKRP&v6vX?oIqn2y0mdLByw430{_ zS!osCd?~Fz5D7l1+(8CrKPG}Z+US*lvL6e9dmu?vI@?8TU6>)4-e?`@M9!`SlCcKY zE=$&c)0I?Ey)Jxz5gCdp*N*HuIfIdOsRXM0JRN$OZ5$f{x-CsXGL9RAQMqu^#olv| z7+5OqWiQ*8x&A<fx+Sgf?k%8qD6h`GX*Z9G zsRJn5N7GM;0vN&;{Aq?WheSKPyC;rF7#IOf2SIBwXcbIN(XU|{ zmh#3vb`T;}$i(x2qg;KC1e!IzMcj;rj(FL6&qb+rtNd>QZQ1W68C12m=9}}jFrq-) zv$T3hd`D0Mu|FXjDsDLoZvB-rF3-g`T%&nSPf4PWRb1?B=)SxnMGjr@^SzFM!2xh5 ztm^=&qPcJKD^|n*Orf)b<4S%OoPG&?kn0Yzhd;PX+C1}!3})FrZQk|*Yn;Z}AAqF6 zIR12WKtb#vhTxwyskTDOf}%Wv3YH@d30Y<*7j_5-zU9MI;3t6NzkW;(|t zmMRVCCp;ABLUU*>1w4?i=TqqET{>N_b~YWsQaVQ04|h>qTzq+431Sa8UNcK$hI|vy zE+Cy59^?7&i76qFZ`hOQu}tk(?2612az9u~xCWG2$*`c~$p!r{V)rC}v`iXw_rJuwH#2~#kyd@B+3 zgYvzt4m0F`gXW^rLioR7_q)TC{F4*NZF!&k?`ZWnx=`CBL@2w>cz3P&hvxV*az*A; zc*SUZQkV(3_|5r|upMB+kVu;NrM&<}^aY3&-?#iN$4ct-Sv4HwSsa$9#Z41gy0PYNhA0;+QIWaHI&2~BXC94(9M8TgT^iA_Rp6vb$ z+;8m>&B7S+da_%!v{{vQHOtyo7gT@K%l^!;B@~(dQVmytcij_nfNxwNVL#;?=*#Myou7ar3|OcVzX%HIBN7`#oN@Dmq6p9~#H> zyGYE)bZA*D!l@_YG3}WxpmcK7?Tc*_P238hTN+)$Yks`{6~4hPg5{x#JQoGv1fYG+ zgH?9Zi}vLOn_3oqIRFrB^|0yF5PtiaL}~&;z(07ji$G)K%eiwpq%U2XJ#hkko1c3V zvap;JzK7z($N1lV!>UOR_G!v306ZVg2HL15b@Q97EyJ?g+4f=O;kumY=;;e-tUzuG z1w|9`H1lKS?%HZ&GKW`;_3yd<>lnFbegfrZ4zrf%1rw$9*E1NGe0LL#B(erZbtQ*X zx;5*?aL)6kBGZ$v-3WB_$-*iYbO@U4u-l1c%`QL7Rm;*|{bbG$XE`@{$?zqm$9a?) zJvT%Pfm8rw78f;$G~4^)4B6p|jok?nfZ8`Hq{j*XYuI9Lj zh1TP-CqOd036c}ksKBCL%D?gaGrJ{UQgkPOI-A}0Y{u1!0-jV>sc7VV2ICI|4|cu^ zxs+~vU~qvS0P_6Ff$CQpj~)7762!oI7QI%QK0uA9DBQA#E19n62*vjF?v88#npPOz1Wa#b#O)J`u5ZGjR%pz6%%HH}LHfovmvhhEa{|F-wiO67yvM$=@WBmH0TivtwDkwEdQ z+->7=nc?)T@7T8N4qn)`#RJ-GYYaPYKl=NC5MM!J;KFT4Jw5{7P!?)%iIhNC8LZ!R z_^uL`*aNfQqOhjs?G8}UlZ$d6UdYlJm~A&;;jvHuJ!P%3)oy@3@h}*-*%s)@c*Ic? z3x;V`2#8x?{((OZr|>#pHo^y^ z4d|l+lBbJYAZ}S(!-44pieA}BeY1S2elZ8#;6%LETI;TM=5yc%F`-fx!sE-FTy=j4 zfC8CU2v;A@N*<6O9YB8StDppRQY1r50m#ew^)i=ObsbX?p}4tr|7PIlbH21Q z)BbR?9bvwKd{>&)1w2h8)cfRf;`nJ(%d>ji7%F{Iri%#DArcmP*ljfc@f}2ymssAA z@KZv)-*U&mvdP|9n^^ufh%ATypGH8X8;b3X2cQwqIqbKWBuBZW_<2WyY@NSMX#N*n zKsmru8LkU~KiZP7Cm-t<`JsPhE;w)FzG0p6ICFsMA8lu~GR1cw6oPzUHl&>BtereU z_$oSnr88syL8R}(l?csgcmg}H)G#BrZ_Y=j{Md6ULccBhFwAvQY_<*at~{PKuo;Lv zo!*?DQyhouDzsgD-G09IY3lW1@w&fzYIx&)zT~IJcIuZ=|-;=Hi2B8NAWG`w2CB3Pb{ z{66ef47hw&dx2_OwaC*78Jq$H8^sE>%*D}WBn2EI+Tavf5BD^7$OC9WFd6+`Zr!ku zsp~sKF@~%e^N@^L*zL!VmpsM9j$|IM)zRWp9an7xhZ8B`+g<+HPvU*Dd1#XrF>k_$ zLzBKT^Nl|I_#GhDK${ZrlBl#P$(X&!s;n90b>bi(tIoN$g?L1aM=FMzxe0?2>sX+SM%D9&!=7dF z9nT%<*Zft$q3%$?L4WS+o<$J|Oc_hS4IU9BFVWWkY5Yf#M)&Cdk`&KmJa?f%CNOz7 z+R;N!3d}r!K3}Xq>4_5z(8y$p6`#PLNQiW@{G!2OQRM#aG8#V4To*uV>UFH+OKWO8 z(3;x+(waIUjwJWylTeaFkS1@vG*TdxT#AP-1(4KmmL3Ajyo07ovx(M!$-0Z5!nn|2 zKO(F6^@~Rly9SajuSx`dG630U=XgQS+s}o6i4fosj|+M9G)P|8q2GO-LgKv{lVsiu z{Q>UIqW#+6XpW#5I7wv9+DK*1>RUwnO>W1RfdPRupKK7ayqhg&6v^#_Xh(ukRjWIO z*(Nh835={+Ng)vk$k78ZT(zOWU-|Ea>@eZ3#o-I@83jiiM}yG^n3er6V5(s%KHld$zTx7+@tXwy4^Teg#JVZiyZc`0i3Ih);Exjq3q18d z*wsMk)wL{zeG`uh6{FFSn6`NNCcN?dj0N{G&^S04`j2pln-r!#bsbCSL$WNU&+6ZG zxJ%SkFRCwU%&1q83j6h!3&7=Ed%ldT$!LQXDq?Y|d;2=rqO>A0UcJSS?wZI-Ou(AA$sA}`Qg%j=51rGra~o?VA%ahgo^Tn zRAbiU2?Ug&W@7|D7haNw@ zGrB3sfGkM(e{h#CGQSzRbaA(@^?aqUFu^G@G${XIwM>+G&(A|H;!Vdwv41Xoa{Z?y z?F>}FNBH;1Lv$$x>990vK7t?NYV_UC=84?BJGszvyNB{&-fOL*b2l+!NZgpiXple2 zckO9!R9>tF-{kt%TXCewqUM+!a&LbU`mNI2ldiG)mW;|pBG*)se2{vUs>8MpvKViL znBf&EcF{A%jE<6}IW2Xme{|WTX}&9_wJ^9mflS*v$aRFNGxvR@s}x<|nw#3yqN$xz z`SP!d$Emax1B3SE_WQe|?;?+G|UC{rHK6*zy$A5Z!x;vVg8LPAK9a1_l#&2k=03XBQ6}Gv}8lB5vx8#4hl>Y9rhg zK>6iGJD2*C#|HWI2n{8k0M-rtLT)H|qyqd4^mP{1bH8x68hhfC7Zw_x4+Lq?#6?Dy zz}@6=u13S|x(1|(*-q@6MXZv)c3!vh#@^u-=x?0rhPVd)!GeqQ!>!EY_NbL!iCllY zhy?59sm#)G@yFQ-YG-+=*{b4miXG@fIsnSu#E4yZe(HgKdME)lLsOhnke&xm;oY z&hJtSB(T^C;~wJ(*mytrpl`e{r zJMtzVA0(eexUw|hN8SaWC?mmlgRNp^C)C;qHkwRH-VG|JfyL`8 z>|%T@qG}Ig^DdUyn&P@77U*urt7n>~44Z2Uf&$dH*O{m7;4jEsYYHohT^L(&Fy9xH(sY_pl#Bx_HJ0&^Q)iKjLS>77 zfCdpU`vuZU_o{%`_i z7?E7jL?Q7czs>lGAI2K@#oyOtvVD(X^a|Vz6SM5~)b2ld&A1{)!2(~reQ2s8@A!6Q ziCYM{7{Z23_T4l@sLG-C{*6TNu%0UmN%yBa|JP?5OO7n;8^l|Ew~<_*c^Pg)oCCby z7Gi6kKm1`3{$(WxDhiJB2P%s{)P-1j*{nL1>r@3(4ybQ!O2=%y99iQFYqxdl2eq^m zli(bnTGyvzrB@;W3@+7}0}iwl2`S0E;b>a+#2LfE;=>~X&J4KAZ3Z7h4UlK4_MIvn zGa49KbAM|E`VM|=mHawv)42ABF^TDG92z7-W{S`O@?*t?49#FP`)SL3x;*v^W<%+u zA&K)h(Xcmc{YqYf+O0W1PHdefh@CG-8okRb@yI)A&lkc6V}6$K?I@Mt$To3&iulO{h1NY~Xi7Y0m4 z7DU{w)WTr=NiUyT7x<_-aMOpM$829pH0~NoR_ipkbk&!Tq3;*+*>nqbvvJ1y3}}io zE-0F*{L=b=+PluErj{)niXc@=sL}+aNe7V{0wh!c5u}M==uH$0gr@Ws z1nEUUswjwbDIy3WO`5|wHzyvpLZ3 zs_t)tv%4dUUtRYX2^S3F@ved?Su5l(XS`(&6AaL%YQ;u*H(Vc8dErIvBxHy?Eczqx zRc?bYSsl#V3p2Q!(KQ4sw!`wjgIjIYB%XgKdU5G<;4qn`82Sr>iF|@dc-kg)yVH=H zn!l==} zAs~;cX4vSncM#P%2w(0*sprU;T;od)@mx62wyOW;DXnwxBrUEed(B@ub$M--x|=(@ z3{zd|^+O{S>6@3!F`KxdC@PbZ-T^bPtpCb8ep7U9|K{TwXq+|Dcx5e`jyTb#!HShx z2bQoKIcCpCB9`j8qg4hv{9L@f*%`nml@pt*AKo2iB}@xUju#4a7<(*xXyt|Io^3lz z?2ir_x*&OY_Shf$OAmbPryk-?#5`lgUwHnrGD(R2?bDGV+4Y9&cDH(l#|l>JOXpM3 zbB>jTxt|9r_GdHn0+2~q&d#xydO=17%iWFW+vOq3-n%66+6|bxU^d$#e#SW(OhqKu zx2xg~xl3))Be`U@HQ069oF4t>2e83cgMrnCPoe8ELz5GtPjA#=j5kX+1EO?6s^atU z@bv>S%uA=MHLkt4xpJCRK&cOeHMRo2l5n^;`jS#U~>V9i*nBQE-rw-BU6gqK%%X9mzeZ%0R&1Ao@ z&*S7KZ)8TemGd|l#qJA5+rH(g!^Jnb|E3yU5%#j*P>|}a<^-9Zd(k8`f0*^fk6k>@ zXs4u#-7$mmpNzNzfpyNy_3PgjnKgVPc1!J(#mHvtTT5@*<#sG9RLJt&TUJsWCZSoM zkoEL`%^!r#?C9-&)lcvSgM@}>fzMXJF*-%4BDOr7C~%XaMP8YjSA?#U zy4PXrHFFMLh3>CtB5iwuv-;X4*aSgmWt!=vVuZO^f6>drB)x+7lUjb)T`ylgZxQUK zl-KWiHuGcNp_I2WSP`lVdMFJBvyl!Ecp}Bvnwq2VRJo>>A{Kc=NIPF51tp;TpJ$9_ znn*A&6~uL;%|busGvqQkkZXnC`KYfP+wXyWWbNIqsEQbBCJTD5N)NYhyk#axs9QtK zH*Ci!TGZ7i*B>6g=x2tj6%H~;_mPkXxvka?BLhM=-lo@ZQVs8jTup~hDo3%=Wc5Uy z=bd6BrS!+NtiBs)l)uH!q$hIDBbvIltuyBS&8JT0g9WL`PyWVF1!l_df8KB5RQBQ( z=(XPK?N_5#a?FaVj~9b_%a+1bCu5_AhTgQYe72B6iNJ%YAukt8Bn0VjP&?W5)0QmL z!%K|?$~z0Psv9{dohAtW6<6osVd#}ED^w}RUPsEk6lM=si#bX6df&J_U(}q`L$*N_ z$0NzM4+5`gY_@3CMVz`6=bINYvxW=&78JHoQMU<_?i=nYGt`)?s3M0v>FFlf$pYcF zQJ2knpDz>2N1~dBFq94&LkQ|Unc~v)ihnJ4bIKi7H|_H{apt>&p;|2Y zY<5?*%cl*KRGoG8@UMyA;}Uz?JU-S%a6fIBD}`Cz8|`8;xF=QTI_X}_*`5#=5s}*g zy>ccm@_ z%GXB*)DxN|{41NSnVDZv%eune-mA&p-zs-{6;W%#}T z{9F03u!u#K_ButZTc`jXG5}AK+dkwnzM$XKHb`q(UYR=!j5kpKDu+-lI0J`_%U4S* zs-Xra{YMb=OXB?;V;kg*7WcR&7Tk`4uhcR|S$=?7zC|bpMOo3F)7j5^E*fD;B)@4R zN48}{d868x4Y{?c!SK=Ns^5<(jh`|?*pyUob{bCcjxVm#>R!_^Lo{xS@!7z z0qVRMJCzPZWYAbK;j^piKXsV0!*Vtp)N=|Rl)aq|@g;a)x3v{iEC*2M@DLBAtBHpX z1`&YH0zA3^x-^ZQ(F8sf;DbQiz!{kJqJX5u3+7<}^YS{%UQX6U1Z|z%JnYo$^Q_re zh0BCX#%x|Tc3ZS}GH7bXaCF)JDp~P;nk~ZM_LY!Br4HGi zSnR0uNKE#)JcLK`W^zJ~d4{@1qISe~!y}RT?^D-eS8lh=-=5H{@ikzU>}bNOIK~m+ z<3106ZeG_lweAq@Kw)xYp=J@C!T`}Aq1#!$zAO0vN?w#q>l=n;7?b(XCxW#VGJ@f; zBA$vn=q9hvm9*qInO)H2P`Oyyf{r7i#dxb^9GoZYtKDhZr!hV6URFNZQ@T~-w|hn| zM5P+rJ9UeJ4#tp3UuvY!rop4C{y>W|jj~zt(omYoy@>>3+oUE^lEOC1~ zHowZ_`DPX}3HuBs_@nEYKuocsR6E)Q3ThwywsyMGnMNAIFR?kpS z$`Kur^i*0?v1Kj1Y%=WorqH?$aIOB6^%Sc~PhSHptHlF>D1K*|4GQ&tiv62lAW*tN zllFNLin<%qthAGnSL82&{h}#!-Qk03L>BR@y$*%aKi;qys~6W{^=}E%k*n?B(U4ue z65Z-JWvMg_%5+A~_|05FK52KkDKV%{)_VydIiNoPq)XmA!K2vpGhI5riOR(ZH z@YKV%tm^}`G^3nG(r_wK-X=grqt#jddFn;2@Rc*e_*o@xe8NoQVI!HkROAJary&Y8 zX*o!qZVD~(9hFK>&Ukm-nZtz7#uB?fJAI*Nn$nkzl8yDPA0#x~7%)YWXpuWoiDN9| z&Ukag&1-*3&qe#hx^RZy-Iwns$&eM^jk8u|V|;g4QL4{0I+T&qEY)|DcNlv;LF`jT zd}6#A@b6dx)9a>?iqay8bp7`2&H3Hw&uiQmoY-oKr4%2#%ATr`5Q7SsM;At{v{sM!%MH{!-`MY?486m_bh*5wxC_Ov@a}r+N|e`pHdN{vLQnPtk@E z&%@QF!h_v@-q74zJoh6p%DHq53v*?A27@K z!d?3YumkSS?H+??AKxWzGx!~P3yo{E5c_zbuLj5jlAOl8#(b0+AD^U=icdL+kiEs0<$XJ;h{0JGA(LhGenZWrr zSyq<%rB~P$sP?iSzeKpZ)0mT`kX4t*g0>$#HFqJQ-SzVa@pH>H`;V=<=0xXzyiE6i zM${Xw*h#tIek)mts&=1L(!Y^@g|6s}TwvE|tHaloR@b~DDMK3`w;yt{^c)em5eKH# z%k)l}q7W0;Z*t4@JgmSA>4khh5XPMRiDxc+tr-<2LtF_d-#Xh)H7lSnQABT1UKPgd zs#?fgR>k9#jQ&vU%$wdAKtuI@G9cMdQA(4oKT7?U(MV}@tYV+i{ zs=<|{#gnEhnsHfwkny>5m{By(LzS!-lmWb&`83x0#^!jH=z4U1lB3~99ABg1r{LLM zzM3u4d2MFd0^<8zk@-GxbhOu<)AiU#G}vz#sTrA&+pMe0Lz^=rgM~zPZJEOb_zEy3 zG3*cubHgyMvv+(OIiFDaTPI8fyQWXEUC^t4;#XY077#l5%G>?YK?KxqKS1i|KYEXY zD*&uZ{9EyX2HLq8PE)AEQAx|)9iP($lsxB$Q;AkhHB zek+~8?bONx=He+Ncyv5zxUoqnLk$?30=Wj`Z)PCSPhj-~$UOeCy@~Wd*dmdLqqa}Q zu`D9;#siwF1+32ffujR(8o>D-;iMDE+sRyGXF#C$^e4j)B0V1UU6ui2?fO?{NMG zJU)q@=GI1Ne0Mg0G7t31pD3X;r=p0RhO*uF6-0^zfs(24PM|>PPDMHO5}kaM@++ig zcaKqiJyT&zaOOdk}~v5d`{=dDThtlL_%JfRyB82mYJ% z_$26`S?w=K5Qr<~cc1>raZdvLnXvp0fPU~Bz~AZ1N$Zoh{9pF>9v#Q@hXCkmo&g5d QkvLF*M1Y}s_wiBfU-(YmRR910 diff --git a/ZR.Admin.WebApi/wwwroot/workorder/20240130160521周2生产计划.xlsx b/ZR.Admin.WebApi/wwwroot/workorder/20240130160521周2生产计划.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..748da8f7998a4dc01dab3ee01f9d077db696bec8 GIT binary patch literal 16384 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 W^p5z^-FZ^T!e_B#clvRu#{Mt$^~Y%d literal 0 HcmV?d00001 diff --git a/ZR.Service/mes/op/OperationService.cs b/ZR.Service/mes/op/OperationService.cs index a85d89ac..42766764 100644 --- a/ZR.Service/mes/op/OperationService.cs +++ b/ZR.Service/mes/op/OperationService.cs @@ -21,6 +21,7 @@ using System.Drawing; using Newtonsoft.Json; using ZR.Model.MES.qu; using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource; +using ZR.Model.MES.pro; namespace ZR.Service.MES.op { @@ -99,7 +100,7 @@ namespace ZR.Service.MES.op int totalCount = 0; var query5 = Context.Queryable() - .LeftJoin((q, p) => q.FkWorkorderId == p.Id) + .LeftJoin((q, p) => q.FkWorkorderId == p.Id) .Where(predicate2) .Select((q, p) => new QcFqcDTO { Year = p.Year, diff --git a/ZR.Service/mes/pro/ProWorkorderServiceV2.cs b/ZR.Service/mes/pro/ProWorkorderServiceV2.cs index 3dd2afe7..d1845c05 100644 --- a/ZR.Service/mes/pro/ProWorkorderServiceV2.cs +++ b/ZR.Service/mes/pro/ProWorkorderServiceV2.cs @@ -1,7 +1,7 @@ using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; -using SqlSugar; + using System; using System.Collections.Generic; using System.Drawing; @@ -25,6 +25,7 @@ using MiniExcelLibs; using System.IO; using SqlSugar.Extensions; using ZR.Model.mes.pro; +using SqlSugar; namespace ZR.Service.mes.pro { @@ -95,7 +96,7 @@ namespace ZR.Service.mes.pro { item.Id = "WO" + DateTime.Now.ToString("yyyyMMdd") + max_id.ToString("000"); item.Remark4 = "Excel导入"; - // 添加属性 + // 添加属性 ------》 排序规则是 年周日+序列号(000) item.Sort = Convert.ToInt32(item.Year.ToString("0000").Substring(2) + item.Week.ToString("00") + item.Date.ToString("00") + workorderList.IndexOf(item).ToString("000")); if (item.Remark2 == "批量") @@ -274,8 +275,8 @@ namespace ZR.Service.mes.pro /// /// 更改工单顺序 /// - /// - /// + /// 工单id + /// 新位置占据的排序值 /// /// public int UpdateworkorderSort(string id, int sort) @@ -285,7 +286,9 @@ namespace ZR.Service.mes.pro int finalreuslt = 0; int max = Convert.ToInt32(sort.ToString().Substring(0, 6) + "999"); + int result = Context.Updateable().Where(it => it.Sort >= sort && it.Sort <= max).SetColumns(it => it.Sort == it.Sort + 1).ExecuteCommand(); + if (result > 0) { finalreuslt = Context.Updateable().Where(it => it.Id == id).SetColumns(it => it.Sort == sort).ExecuteCommand(); @@ -339,8 +342,12 @@ namespace ZR.Service.mes.pro { if (year > 0 && week > 0 && date >0) { - string date_now = DateTime.Now.ToString("yyMMdd"); + DateTime week_first = GetWeekStartTime(year, week); + + string date_now = week_first.AddDays(date-1).ToString("yyMMdd"); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"生成工单号前缀{date_now}"); List workorderList= Context.Queryable().Where(it => it.Year == year && it.Week == week && it.Date == date).Where(it=>it.Remark3=="是").ToList(); foreach(ProWorkorder_v2 item in workorderList) { @@ -353,5 +360,42 @@ namespace ZR.Service.mes.pro } return 0; } + + /// + /// 它接受年份和一年中的周数和星期几作为输入,并返回对应的日期。 + /// + /// + /// + /// + /// + static DateTime GetDateFromWeek(int year, int weekNumber, DayOfWeek dayOfWeek) + { + DateTime jan1 = new DateTime(year, 1, 1); + int daysOffset = (int)dayOfWeek- (int)jan1.DayOfWeek; + + DateTime firstDayOfWeek = jan1.AddDays(7 * (weekNumber - 1) - daysOffset+2); + return firstDayOfWeek; + } + + /// + /// 当前周的第一天(星期一) + /// + /// 周数,格式:yyyywww + /// + private DateTime GetWeekStartTime(int year,int weekNum) + { + + //本年1月1日 + DateTime firstOfYear = new DateTime(year, 1, 1); + //周数 + + //本年1月1日与本周星期一相差的天数 + int dayDiff = (firstOfYear.DayOfWeek == DayOfWeek.Sunday ? 7 : Convert.ToInt32(firstOfYear.DayOfWeek)) - 1; + //第一周的星期一 + DateTime firstDayOfFirstWeek = firstOfYear.AddDays(-dayDiff); + //当前周的星期一 + DateTime firstDayOfThisWeek = firstDayOfFirstWeek.AddDays((weekNum - 1) * 7); + return firstDayOfThisWeek; + } } } diff --git a/ZR.Service/mes/qc/FirstFQCService.cs b/ZR.Service/mes/qc/FirstFQCService.cs index 73aa8d5f..29f5e3ee 100644 --- a/ZR.Service/mes/qc/FirstFQCService.cs +++ b/ZR.Service/mes/qc/FirstFQCService.cs @@ -20,6 +20,7 @@ using ZR.Model.MES.qu; using ZR.Service.mes.qc.IService; using ZR.Service.mes.qu.IService; using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace ZR.Service.mes.qc { @@ -57,50 +58,62 @@ namespace ZR.Service.mes.qc }); checkItem.device = Queryable().Where(it => it.InspectionModule == "设备").OrderBy(it => it.Id).ToList(); - checkItem.device.ForEach(it => + checkItem.device.ForEach(item => { QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Blank = Queryable().Where(it => it.InspectionModule == "毛坯").OrderBy(it => it.Id).ToList(); - checkItem.Blank.ForEach(it => + checkItem.Blank.ForEach(item => { QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.program = Queryable().Where(it => it.InspectionModule == "程序").OrderBy(it => it.Id).ToList(); - checkItem.program.ForEach(it => + checkItem.program.ForEach(item => { QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Team = Queryable().Where(it => it.InspectionModule == "班组操作").OrderBy(it => it.Id).ToList(); - checkItem.Team.ForEach(it => + checkItem.Team.ForEach(item => { QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); return checkItem; @@ -138,50 +151,62 @@ namespace ZR.Service.mes.qc }); checkItem.device = Queryable().Where(it => it.InspectionModule == "设备").OrderBy(it => it.Id).ToList(); - checkItem.device.ForEach(it => + checkItem.device.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcAgaininspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Blank = Queryable().Where(it => it.InspectionModule == "毛坯").OrderBy(it => it.Id).ToList(); - checkItem.Blank.ForEach(it => + checkItem.Blank.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcAgaininspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.program = Queryable().Where(it => it.InspectionModule == "程序").OrderBy(it => it.Id).ToList(); - checkItem.program.ForEach(it => + checkItem.program.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcAgaininspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Team = Queryable().Where(it => it.InspectionModule == "班组操作").OrderBy(it => it.Id).ToList(); - checkItem.Team.ForEach(it => + checkItem.Team.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcAgaininspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); return checkItem; @@ -220,50 +245,62 @@ namespace ZR.Service.mes.qc }); checkItem.device = Queryable().Where(it => it.InspectionModule == "设备").OrderBy(it => it.Id).ToList(); - checkItem.device.ForEach(it => + checkItem.device.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcFinalinspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Blank = Queryable().Where(it => it.InspectionModule == "毛坯").OrderBy(it => it.Id).ToList(); - checkItem.Blank.ForEach(it => + checkItem.Blank.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcFinalinspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.program = Queryable().Where(it => it.InspectionModule == "程序").OrderBy(it => it.Id).ToList(); - checkItem.program.ForEach(it => + checkItem.program.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcFinalinspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); checkItem.Team = Queryable().Where(it => it.InspectionModule == "班组操作").OrderBy(it => it.Id).ToList(); - checkItem.Team.ForEach(it => + checkItem.Team.ForEach(item => { - QcFirstinspectionRecord record = Context.Queryable() - .Where(it => it.FKWorkorderId == workorderID && it.FKInpectionId == it.Id).First(); + QcFinalinspectionRecord record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorderID && it.FkInpectionId == item.Id.ToString()).First(); if (record != null) { - it.Counter = record.Counter; + item.Counter = record.Counter; + } + else + { + item.Counter = 0; } - it.Counter = 0; }); return checkItem; @@ -582,7 +619,11 @@ namespace ZR.Service.mes.qc return Math.Round(percentage, 2); } - public static QcCurrentWorkorderDto Now_producting_Workorder = null; //当前生产工单 + public static QcCurrentWorkorderDto Now_producting_Workorder_first = null; //当前生产工单 首检 + public static QcCurrentWorkorderDto Now_producting_Workorder_again = null; //当前生产工单 二检 + public static QcCurrentWorkorderDto Now_producting_Workorder_thirty = null; //当前生产工单 三检 + + /// /// 获取当前_生产中_工单列表 /// @@ -619,28 +660,56 @@ namespace ZR.Service.mes.qc /// - /// 获取当前生产工单 + /// 获取当前生产工单 一检 /// /// /// - public QcCurrentWorkorderDto GetcurrentWorkorder() + public QcCurrentWorkorderDto GetcurrentWorkorder_first() { //获取状态为1的生产工单列表 List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); // 当前没有生产工单 if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) { - Now_producting_Workorder = null; + Now_producting_Workorder_first = null; return null; } - else if (Now_producting_Workorder == null) + else if (Now_producting_Workorder_first == null) { - Now_producting_Workorder = Now_producting_WorkorderList[0]; - return Now_producting_Workorder; + Now_producting_Workorder_first = Now_producting_WorkorderList[0]; + return Now_producting_Workorder_first; } else { - return Now_producting_Workorder; + return Now_producting_Workorder_first; + } + + } + + + /// + /// 获取当前生产工单 二检 + /// + /// + /// + public QcCurrentWorkorderDto GetcurrentWorkorder_again() + { + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_again = null; + return null; + } + else if (Now_producting_Workorder_again == null) + { + Now_producting_Workorder_again = Now_producting_WorkorderList[0]; + return Now_producting_Workorder_again; + } + else + { + return Now_producting_Workorder_again; } } @@ -648,52 +717,43 @@ namespace ZR.Service.mes.qc /// - /// 获取下一个生产工单 + /// 获取当前生产工单 三检 /// /// /// - public QcCurrentWorkorderDto GetcurrentWorkorder_next() + public QcCurrentWorkorderDto GetcurrentWorkorder_thirty() + { + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_thirty = null; + return null; + } + else if (Now_producting_Workorder_thirty == null) + { + Now_producting_Workorder_thirty = Now_producting_WorkorderList[0]; + return Now_producting_Workorder_thirty; + } + else + { + return Now_producting_Workorder_thirty; + } + + } + + + + /// + /// 获取下一个生产工单 一检 + /// + /// + /// + public QcCurrentWorkorderDto GetcurrentWorkorder_next_first() { - //#region 清空已经完成工单的缓存 - //// 获取状态为2的工单列表,然后清空缓存 - //List workorders = Context.Queryable().Where(it => it.Remark3 == "是").Where(it => it.Status >1).OrderBy(it => it.Sort).ToList(); - //if(workorders!=null&&workorders.Count>0) - //{ - // foreach(ProWorkorder_v2 workorder_item in workorders) - // { - // // key值规则 workorderid + "_"+ checkid + "_v1"; - // StringBuilder string_Key =new StringBuilder(); - // string_Key.Append(workorder_item.ClientWorkorder); - // // 获取所有检测项 - // List qcInspectionitems=Context.Queryable().ToList(); - // foreach(QcInspectionitem qc in qcInspectionitems) - // { - // string_Key.Append(qc.Id); - // string_Key.Append("_v1"); - // if (CacheHelper.Exists(string_Key.ToString())) - // { - // CacheHelper.Remove(string_Key.ToString()); - // } - // string_Key.Append("_v2"); - // if (CacheHelper.Exists(string_Key.ToString())) - // { - // CacheHelper.Remove(string_Key.ToString()); - // } - // string_Key.Append("_v3"); - // if (CacheHelper.Exists(string_Key.ToString())) - // { - // CacheHelper.Remove(string_Key.ToString()); - // } - - // } - - // } - //} - - - - //#endregion + //获取状态为1的生产工单列表 @@ -701,23 +761,23 @@ namespace ZR.Service.mes.qc // 当前没有生产工单 if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) { - Now_producting_Workorder = null; + Now_producting_Workorder_first = null; return null; } else { // 当前没有生产工单 - if (Now_producting_Workorder == null) + if (Now_producting_Workorder_first == null) { return null; } //获取上一个工单号 游标 - int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder.ClientWorkorder); + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_first.ClientWorkorder); if (index < 0) { // 逻辑异常 - Now_producting_Workorder = Now_producting_WorkorderList[0]; + Now_producting_Workorder_first = Now_producting_WorkorderList[0]; return null; } if (index == Now_producting_WorkorderList.Count() - 1) @@ -730,13 +790,117 @@ namespace ZR.Service.mes.qc } else { - Now_producting_Workorder = Now_producting_WorkorderList[index + 1]; - return Now_producting_Workorder; + Now_producting_Workorder_first = Now_producting_WorkorderList[index + 1]; + return Now_producting_Workorder_first; } } } + + /// + /// 获取下一个生产工单 二检 + /// + /// + /// + public QcCurrentWorkorderDto GetcurrentWorkorder_next_again() + { + + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_again = null; + return null; + } + else + { + + // 当前没有生产工单 + if (Now_producting_Workorder_again == null) + { + return null; + } + //获取上一个工单号 游标 + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_again.ClientWorkorder); + if (index < 0) + { + // 逻辑异常 + Now_producting_Workorder_again = Now_producting_WorkorderList[0]; + return null; + } + if (index == Now_producting_WorkorderList.Count() - 1) + { + // 已经是最后一个了没有 + + + return null; + + } + else + { + Now_producting_Workorder_again = Now_producting_WorkorderList[index + 1]; + return Now_producting_Workorder_again; + } + + } + + } + + /// + /// 获取下一个生产工单 三检 + /// + /// + /// + public QcCurrentWorkorderDto GetcurrentWorkorder_next_thirty() + { + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_thirty = null; + return null; + } + else + { + + // 当前没有生产工单 + if (Now_producting_Workorder_thirty == null) + { + return null; + } + //获取上一个工单号 游标 + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_thirty.ClientWorkorder); + if (index < 0) + { + // 逻辑异常 + Now_producting_Workorder_thirty = Now_producting_WorkorderList[0]; + return null; + } + if (index == Now_producting_WorkorderList.Count() - 1) + { + // 已经是最后一个了没有 + + + return null; + + } + else + { + Now_producting_Workorder_thirty = Now_producting_WorkorderList[index + 1]; + return Now_producting_Workorder_thirty; + } + + } + + } + + + + + /// /// 记录检测项结果 /// @@ -765,36 +929,38 @@ namespace ZR.Service.mes.qc } + + /// - /// 获取上一个工单 + /// 获取上一个工单 首检 /// /// - /// + /// - public QcCurrentWorkorderDto GetcurrentWorkorder_previous() + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_first() { //获取状态为1的生产工单列表 List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); // 当前没有生产工单 if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) { - Now_producting_Workorder = null; + Now_producting_Workorder_first = null; return null; } else { // 当前没有生产工单 - if (Now_producting_Workorder == null) + if (Now_producting_Workorder_first == null) { return null; } //获取上一个工单号 游标 - int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder.ClientWorkorder); + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_first.ClientWorkorder); if (index < 0) { // 逻辑异常 - Now_producting_Workorder = Now_producting_WorkorderList[0]; + Now_producting_Workorder_first = Now_producting_WorkorderList[0]; return null; } if (index == 0) @@ -805,40 +971,168 @@ namespace ZR.Service.mes.qc } else { - Now_producting_Workorder = Now_producting_WorkorderList[index - 1]; - return Now_producting_Workorder; + Now_producting_Workorder_first = Now_producting_WorkorderList[index - 1]; + return Now_producting_Workorder_first; } } } + + + + + /// + /// 获取上一个工单 二检 + /// + /// + /// + + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_again() + { + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_again = null; + return null; + } + else + { + + // 当前没有生产工单 + if (Now_producting_Workorder_again == null) + { + return null; + } + //获取上一个工单号 游标 + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_again.ClientWorkorder); + if (index < 0) + { + // 逻辑异常 + Now_producting_Workorder_again = Now_producting_WorkorderList[0]; + return null; + } + if (index == 0) + { + // 已经是最后一个了没有 + return null; + + } + else + { + Now_producting_Workorder_again = Now_producting_WorkorderList[index - 1]; + return Now_producting_Workorder_again; + } + + } + } + + + + + /// + /// 获取上一个工单 三检 + /// + /// + /// + + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_thirty() + { + //获取状态为1的生产工单列表 + List Now_producting_WorkorderList = GetNow_producting_WorkorderList(); + // 当前没有生产工单 + if (Now_producting_WorkorderList == null || Now_producting_WorkorderList.Count <= 0) + { + Now_producting_Workorder_thirty = null; + return null; + } + else + { + + // 当前没有生产工单 + if (Now_producting_Workorder_thirty == null) + { + return null; + } + //获取上一个工单号 游标 + int index = Now_producting_WorkorderList.FindIndex(x => x.ClientWorkorder == Now_producting_Workorder_thirty.ClientWorkorder); + if (index < 0) + { + // 逻辑异常 + Now_producting_Workorder_thirty = Now_producting_WorkorderList[0]; + return null; + } + if (index == 0) + { + // 已经是最后一个了没有 + return null; + + } + else + { + Now_producting_Workorder_thirty = Now_producting_WorkorderList[index - 1]; + return Now_producting_Workorder_thirty; + } + + } + } + + + + /// /// 缺陷项目 累加 (首检) /// - /// - /// - /// - /// + /// 工单id + /// 缺陷项 + /// 要累加的值 + /// 最终累加的值 /// - public int Accumulator_first(string workorder_id, int checkid, int counter, string name) + public int Accumulator_first(string workorder_id, int checkid, int number, string InspectionModule, string name) { - - QcFirstinspectionRecord record = new QcFirstinspectionRecord(); - record.Id = SnowFlakeSingle.Instance.NextId().ToString(); - record.FKWorkorderId = workorder_id; - record.FKInpectionId = checkid.ToString(); - record.InspectionModule = "paint"; - record.Counter = counter; - record.CreatedTime = DateTime.Now; - record.UpdatedTime = DateTime.Now; - record.CreatedBy = name; - record.UpdatedBy = name; - - var x = Context.Storageable(record) - .WhereColumns(it => new { it.FKWorkorderId, it.FKInpectionId }).ToStorage(); int result = 0; - result += x.AsInsertable.ExecuteCommand();//不存在插入 - result += x.AsUpdateable.UpdateColumns(it => new { it.Counter, it.UpdatedBy, it.UpdatedTime }).ExecuteCommand();//存在更新 + //TODO 获取已知的的检测项 +1 + QcFirstinspectionRecord exist_record= Context.Queryable() + .Where(it => it.FKWorkorderId == workorder_id && it.FKInpectionId == checkid.ToString()) + .First(); + if (exist_record == null) + { + QcFirstinspectionRecord record = new QcFirstinspectionRecord(); + + record.Id = SnowFlakeSingle.Instance.NextId().ToString(); + record.FKWorkorderId = workorder_id; + record.FKInpectionId = checkid.ToString(); + record.InspectionModule = InspectionModule; + + record.Counter = number; + record.CreatedTime = DateTime.Now; + record.UpdatedTime = DateTime.Now; + record.CreatedBy = name; + record.UpdatedBy = name; + Context.Insertable(record).ExecuteCommand(); + + result = 1; + + } + else + { + result= Context.Updateable() + .SetColumns(it=>it.Counter==(exist_record.Counter+ number)) + .SetColumns(it=>it.UpdatedTime== DateTime.Now) + .SetColumns(it=>it.UpdatedBy == name) + .Where(it=>it.FKInpectionId==checkid.ToString()&&it.FKWorkorderId==workorder_id) + .ExecuteCommand(); + + result = (int)exist_record.Counter + number; + + } + + + + + return result; @@ -851,27 +1145,47 @@ namespace ZR.Service.mes.qc /// /// /// - public int Accumulator_again(string workorder_id, int checkid, int counter, string name) + public int Accumulator_again(string workorder_id, int checkid, int number, string InspectionModule, string name) { - QcAgaininspectionRecord record = new QcAgaininspectionRecord(); - record.Id = SnowFlakeSingle.Instance.NextId().ToString(); - record.FkWorkorderId = workorder_id; - record.FkInpectionId = checkid.ToString(); - record.InspectionModule = "paint"; - record.Counter = counter; - record.CreatedTime = DateTime.Now; - record.UpdatedTime = DateTime.Now; - record.CreatedBy = name; - record.UpdatedBy = name; - - var x = Context.Storageable(record) - .WhereColumns(it => new { it.FkWorkorderId, it.FkInpectionId }).ToStorage(); + int result = 0; - result += x.AsInsertable.ExecuteCommand();//不存在插入 - result += x.AsUpdateable.UpdateColumns(it => new { it.Counter, it.UpdatedBy, it.UpdatedTime }).ExecuteCommand();//存在更新 + //TODO 获取已知的的检测项 +1 + QcAgaininspectionRecord exist_record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorder_id && it.FkInpectionId == checkid.ToString()) + .First(); + if (exist_record == null) + { + QcAgaininspectionRecord record = new QcAgaininspectionRecord(); + record.Id = SnowFlakeSingle.Instance.NextId().ToString(); + record.FkWorkorderId = workorder_id; + record.FkInpectionId = checkid.ToString(); + record.InspectionModule = InspectionModule; + + record.Counter = number; + record.CreatedTime = DateTime.Now; + record.UpdatedTime = DateTime.Now; + record.CreatedBy = name; + record.UpdatedBy = name; + Context.Insertable(record).ExecuteCommand(); + + result = 1; + + } + else + { + result = Context.Updateable() + .SetColumns(it => it.Counter == (exist_record.Counter + number)) + .SetColumns(it => it.UpdatedTime == DateTime.Now) + .SetColumns(it => it.UpdatedBy == name) + .Where(it => it.FkInpectionId == checkid.ToString() && it.FkWorkorderId == workorder_id) + .ExecuteCommand(); + + result = (int)exist_record.Counter + number; + + } return result; } @@ -883,25 +1197,51 @@ namespace ZR.Service.mes.qc /// /// /// - public int Accumulator_thirty(string workorder_id, int checkid, int counter, string name) + public int Accumulator_thirty(string workorder_id, int checkid, int number, string InspectionModule, string name) { - QcFinalinspectionRecord record = new QcFinalinspectionRecord(); - record.Id = SnowFlakeSingle.Instance.NextId().ToString(); - record.FkWorkorderId = workorder_id; - record.FkInpectionId = checkid.ToString(); - record.InspectionModule = "paint"; - record.Counter = counter; - record.CreatedTime = DateTime.Now; - record.UpdatedTime = DateTime.Now; - record.CreatedBy = name; - record.UpdatedBy = name; - var x = Context.Storageable(record) - .WhereColumns(it => new { it.FkWorkorderId, it.FkInpectionId }).ToStorage(); int result = 0; - result += x.AsInsertable.ExecuteCommand();//不存在插入 - result += x.AsUpdateable.UpdateColumns(it => new { it.Counter, it.UpdatedBy, it.UpdatedTime }).ExecuteCommand();//存在更新 + //TODO 获取已知的的检测项 +1 + QcFinalinspectionRecord exist_record = Context.Queryable() + .Where(it => it.FkWorkorderId == workorder_id && it.FkInpectionId == checkid.ToString()) + .First(); + + if (exist_record == null) + { + QcFinalinspectionRecord record = new QcFinalinspectionRecord(); + + record.Id = SnowFlakeSingle.Instance.NextId().ToString(); + record.FkWorkorderId = workorder_id; + record.FkInpectionId = checkid.ToString(); + record.InspectionModule = InspectionModule; + + record.Counter = number; + record.CreatedTime = DateTime.Now; + record.UpdatedTime = DateTime.Now; + record.CreatedBy = name; + record.UpdatedBy = name; + Context.Insertable(record).ExecuteCommand(); + + result = 1; + + } + else + { + result = Context.Updateable() + .SetColumns(it => it.Counter == (exist_record.Counter + number)) + .SetColumns(it => it.UpdatedTime == DateTime.Now) + .SetColumns(it => it.UpdatedBy == name) + .Where(it => it.FkInpectionId == checkid.ToString() && it.FkWorkorderId == workorder_id) + .ExecuteCommand(); + + result = (int)exist_record.Counter + number; + + } + + + + @@ -924,8 +1264,9 @@ namespace ZR.Service.mes.qc { sum = SqlFunc.AggregateSum(it.Counter ?? 0) }).First(); - - return list.sum; + if (list != null) + return list.sum; + else return 0; } /// @@ -938,40 +1279,84 @@ namespace ZR.Service.mes.qc public int CalculatePackagingInvestment(string workorder_id) { - //TODO 一次合格数=计划数-所有缺陷数 + int OnePassNumber = 0; int polishPassNumber = 0; UseTran(() => { + //TODO 一次合格数=计划数-所有缺陷数 var workorder = Context.Queryable().Where(it => it.ClientWorkorder == workorder_id).First(); - var list = Context.Queryable() - .Where(it => it.Equals(workorder_id)) - .GroupBy(it => it.FKWorkorderId) - .Select(it => new - { - sum = SqlFunc.AggregateSum(it.Counter ?? 0) - }).First(); - OnePassNumber = workorder.PreviousNumber - list.sum; + + if(workorder != null) + { - //TODO 计算抛光合格=首检的抛光-抛光缺陷项 - int polishNumber = CalculatePolishTotalNumber(workorder_id); - var polish_defect_Number = Context.Queryable() - .Where(it => it.Equals(workorder_id)) - .GroupBy(it => it.FkWorkorderId) - .Select(it => new - { - sum = SqlFunc.AggregateSum(it.Counter ?? 0) - }).First(); + var list = Context.Queryable() + .Where(it => it.FKWorkorderId.Equals(workorder_id)) + .GroupBy(it => it.FKWorkorderId) + .Select(it => new + { + sum = SqlFunc.AggregateSum(it.Counter ?? 0) + }).First(); + if (list != null) + { + OnePassNumber = workorder.PreviousNumber - list.sum; + } + else + { + OnePassNumber = workorder.PreviousNumber - 0; + } - polishPassNumber = polishNumber - polish_defect_Number.sum; + //TODO 计算抛光合格=首检的抛光-抛光缺陷项 + int polishNumber = CalculatePolishTotalNumber(workorder_id); + var polish_defect_Number = Context.Queryable() + .Where(it => it.FkWorkorderId.Equals(workorder_id)) + .GroupBy(it => it.FkWorkorderId) + .Select(it => new + { + sum = SqlFunc.AggregateSum(it.Counter ?? 0) + }).First(); + if (polish_defect_Number != null) + { + polishPassNumber = polishNumber - polish_defect_Number.sum; + } + else + { + polishPassNumber = polishNumber - 0; + } + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"打印工单{workorder_id} 一次合格数{OnePassNumber}=计划数{workorder.PreviousNumber}-----所有缺陷数{list?.sum} "); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"打印工单{workorder_id} 计算抛光合格{polishPassNumber}=首检的抛光{polishNumber}-----抛光缺陷项{polish_defect_Number?.sum}"); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine($"打印工单{workorder_id} 包装投入数{OnePassNumber + polishPassNumber}"); + + + + + } }); - + return OnePassNumber + polishPassNumber; } + /// + /// 更改工单为完成态 + /// + /// + /// + /// + public int UpdateWorkorderStatus(string workorder_id) + { + + return Context.Updateable() + .SetColumns(it => it.Status == 2) + .Where(it => it.ClientWorkorder == workorder_id) + .ExecuteCommand(); + } } } diff --git a/ZR.Service/mes/qc/IService/IFirstFQCService.cs b/ZR.Service/mes/qc/IService/IFirstFQCService.cs index 5ed5e686..736b3ca7 100644 --- a/ZR.Service/mes/qc/IService/IFirstFQCService.cs +++ b/ZR.Service/mes/qc/IService/IFirstFQCService.cs @@ -19,18 +19,29 @@ namespace ZR.Service.mes.qc.IService public Task SaveinspectItem_v2(string workorder_id, string InspectionModule, string checkid, int counter); public Task SaveinspectItem_v3(string workorder_id, string InspectionModule, string checkid, int counter); - public QcCurrentWorkorderDto GetcurrentWorkorder(); - public QcCurrentWorkorderDto GetcurrentWorkorder_next(); - public QcCurrentWorkorderDto GetcurrentWorkorder_previous(); + public QcCurrentWorkorderDto GetcurrentWorkorder_first(); + public QcCurrentWorkorderDto GetcurrentWorkorder_next_first(); + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_first(); - public int Accumulator_first(string workorder_id, int checkid, int counter,string name); - public int Accumulator_again(string workorder_id, int checkid, int counter,string name); - public int Accumulator_thirty(string workorder_id, int checkid, int counter,string name); + public QcCurrentWorkorderDto GetcurrentWorkorder_again(); + public QcCurrentWorkorderDto GetcurrentWorkorder_next_again(); + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_again(); + + public QcCurrentWorkorderDto GetcurrentWorkorder_thirty(); + public QcCurrentWorkorderDto GetcurrentWorkorder_next_thirty(); + public QcCurrentWorkorderDto GetcurrentWorkorder_previous_thirty(); + + public int Accumulator_first(string workorder_id, int checkid, int number, string InspectionModule, string name); + public int Accumulator_again(string workorder_id, int checkid, int number, string InspectionModule, string name); + public int Accumulator_thirty(string workorder_id, int checkid, int number, string InspectionModule, string name); public int CalculatePolishTotalNumber(string workorder_id); public int CalculatePackagingInvestment(string workorder_id); + public int UpdateWorkorderStatus(string workorder_id); + + } }