From 49c1b5f94261ece8da5799c960bb89f260cc1f25 Mon Sep 17 00:00:00 2001 From: "ZHOUZ\\Noble'lift" <1014987728@qq.com> Date: Wed, 20 Sep 2023 15:31:46 +0800 Subject: [PATCH] =?UTF-8?q?rev:=E4=BF=AE=E6=94=B9=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=80=E8=B4=A7=E5=BA=93=E5=8C=BA=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E6=A0=B9=E6=8D=AE=E5=BD=93=E5=89=8D=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E9=9C=80=E6=B1=82=E6=96=B0=E5=A2=9E=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E5=87=BA=E5=85=A5=E5=BA=93=E6=8A=A5=E8=A1=A8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E5=87=BA=E5=BA=93=E5=88=86=E9=85=8D?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B7=B2=E7=BB=8F=E4=B8=8B=E5=8F=91=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=97=A0=E6=B3=95=E5=8F=96=E6=B6=88=EF=BC=9B?= =?UTF-8?q?4=E3=80=81=E5=87=BA=E5=85=A5=E5=BA=93=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E3=80=81=E8=BD=AC=E5=8D=95=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AD=90=E5=8D=B7=E5=8F=B7=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=9B5=E3=80=81=E5=86=B7=E5=8D=B4=E5=8C=BA=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=96=B0=E5=A2=9E=E5=9B=9E=E4=BC=A0MES=E5=85=A5?= =?UTF-8?q?=E5=86=B7=E5=8D=B4=E6=8C=89=E9=92=AE=EF=BC=9B6=E3=80=81?= =?UTF-8?q?=E6=89=8B=E6=8C=81=E5=85=B6=E4=BB=96=E5=85=A5=E5=BA=93=E4=B9=9F?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BA=93=E5=8C=BA=E9=80=89=E6=8B=A9=EF=BC=9B?= =?UTF-8?q?7=E3=80=81=E6=96=B0=E5=A2=9E=E6=94=B9=E5=88=87=E5=85=A5?= =?UTF-8?q?=E5=BA=93=E7=B1=BB=E5=9E=8B=EF=BC=8C=E6=8C=89=E7=85=A7MES?= =?UTF-8?q?=E4=BC=A0=E7=9A=84=E5=8C=85=E8=A3=85=E5=85=B3=E7=B3=BB=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=94=B9=E5=88=87=E5=85=A5=E5=BA=93=E5=8D=95=EF=BC=9B?= =?UTF-8?q?8=E3=80=81=E4=B8=B4=E6=9C=9F=E5=BA=93=E5=8C=BA=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=BF=AE=E6=94=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/service/impl/MesToLmsServiceImpl.java | 4 + .../impl/ProductInstorServiceImpl.java | 11 + .../pdm/ivt/rest/CoolPointIvtController.java | 10 + .../pdm/ivt/service/CoolPointIvtService.java | 3 + .../service/impl/CoolPointIvtServiceImpl.java | 27 ++ .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 261120 -> 293888 bytes .../java/org/nl/wms/sch/tasks/OutTask.java | 6 +- .../service/impl/InbillServiceImpl.java | 9 +- .../service/impl/ChangeServiceImpl.java | 3 + .../nl/wms/st/instor/wql/QST_IVT_CHANGE.wql | 10 +- .../service/impl/CheckOutBillServiceImpl.java | 15 +- .../st/outbill/wql/QST_IVT_CHECKOUTBILL.wql | 2 +- .../wms/stat/rest/InBillQueryController.java | 14 + .../wms/stat/rest/OutBillQueryController.java | 18 +- .../wms/stat/service/InBillQueryService.java | 4 + .../wms/stat/service/OutBillQueryService.java | 6 +- .../service/impl/InBillQueryServiceImpl.java | 191 ++++++++++ .../service/impl/OutBillQueryServiceImpl.java | 107 +++++- .../nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql | 325 +++++++++++++++++- .../nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql | 123 ++++++- .../views/wms/pdm/ivt/coolpointivt/Dialog.vue | 83 +++++ .../wms/pdm/ivt/coolpointivt/coolpointivt.js | 10 +- .../wms/pdm/ivt/coolpointivt/inventory.vue | 30 +- .../src/views/wms/st/inStor/change/index.vue | 34 +- .../src/views/wms/stat/inbillquery/index.vue | 8 + .../src/views/wms/stat/inbillquery/index2.vue | 302 ++++++++++++++++ .../src/views/wms/stat/outbillquery/index.vue | 11 +- .../views/wms/stat/outbillquery/index2.vue | 224 ++++++++++++ 28 files changed, 1548 insertions(+), 42 deletions(-) create mode 100644 lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/Dialog.vue create mode 100644 lms/nladmin-ui/src/views/wms/stat/inbillquery/index2.vue create mode 100644 lms/nladmin-ui/src/views/wms/stat/outbillquery/index2.vue diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index bcb28e7f8..9c8ee691b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -1009,6 +1009,10 @@ public class MesToLmsServiceImpl implements MesToLmsService { String demand_limit = detail.getString("Attribute4");//客户需求抗拉下限 String standard_limit = detail.getString("Attribute5");//内控标准抗拉下限 String actual_value = detail.getString("Attribute6");//生产实际抗拉值 + String Attribute7 = detail.getString("7");//生产实际抗拉值 + if (ObjectUtil.isNotEmpty(Attribute7) && Attribute7.equals("1")){ + sub_type = "2"; + } //查询库内是否存在相同的子卷号 JSONObject container_jo = WQLObject.getWQLObject("PDM_BI_SubPackageRelation").query("container_name = '" + ContainerName + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java index d23d95a2d..d27689c44 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java @@ -149,6 +149,17 @@ public class ProductInstorServiceImpl implements ProductInstorService { mst_jo.put("bill_type", "0006"); } } + for (int i = 0; i < box_rows.size(); i++) { + HashMap box_row = box_rows.get(i); + sub_type = box_row.get("sub_type"); + if (ObjectUtil.isNotEmpty(sub_type)){ + if (sub_type.equals("2")){ + //如果为改切的包装关系则变为改切入库 + mst_jo.put("bill_type", "0007"); + break; + } + } + } //查询成品库仓库 JSONObject stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_delete = '0' AND is_used = '1' AND is_productstore = '1'").uniqueResult(0); mst_jo.put("stor_id", stor.getString("stor_id")); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java index 94d5fa0e9..d95bfa81d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/rest/CoolPointIvtController.java @@ -2,6 +2,7 @@ package org.nl.wms.pdm.ivt.rest; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -72,4 +73,13 @@ public class CoolPointIvtController { public ResponseEntity coolRegionIOQueryAll(@RequestParam Map whereJson, Pageable page){ return new ResponseEntity<>(coolpointivtService.coolRegionIOQueryAll(whereJson,page),HttpStatus.OK); } + + @PostMapping("/uploadMes") + @Log("手动回传MES") + @ApiOperation("手动回传MES") + public ResponseEntity uploadMes(@RequestBody JSONObject form){ + coolpointivtService.uploadMes(form); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java index 3dc66f566..8ae4a1914 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/CoolPointIvtService.java @@ -1,6 +1,7 @@ package org.nl.wms.pdm.ivt.service; +import com.alibaba.fastjson.JSONObject; import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; import org.springframework.data.domain.Pageable; @@ -69,4 +70,6 @@ public interface CoolPointIvtService { * @return */ Map coolRegionIOQueryAll(Map whereJson, Pageable page); + + void uploadMes(JSONObject form); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java index 56729f9fa..9b7f6a303 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/CoolPointIvtServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -15,8 +16,11 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.WqlUtil; +import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; +import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.pdm.ivt.service.CoolPointIvtService; import org.nl.wms.pdm.ivt.service.dto.CoolPointIvtDto; import org.springframework.data.domain.Pageable; @@ -175,4 +179,27 @@ public class CoolPointIvtServiceImpl implements CoolPointIvtService { return json; } + @Override + public void uploadMes(JSONObject form) { + //调用回传MES的半成品入库接口 + // 将入冷却信息发送给mes + JSONObject param = new JSONObject(); + String userName = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_USERNAME").getValue(); + String passWord = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MES_PASSWORD").getValue(); + String container_name = form.getString("container_name"); + if (StrUtil.isEmpty(container_name)){ + throw new BadRequestException("母卷号不能为空!"); + } + param.put("iContainerName", container_name); + param.put("iArrivalTime", DateUtil.now()); + param.put("iWarehouse", 2); + param.put("UserName", userName); + param.put("PassWord", passWord); + + //判断该接口是否需要回传 + JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'momRollSemiFGInboundComplete'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(back_jo) && back_jo.getString("is_back").equals("1")){ + new LmsToMesServiceImpl().momRollSemiFGInboundComplete(param); + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 3d0f8ed7cb7e7820715ec0d882ee336d1929121e..0706d3f17d4aa8da545afba4377631b1b6b5e4bc 100644 GIT binary patch delta 52887 zcmcG12S63a_V>)(LJ<%UDGGQ+RBUtOEpFLerI;~-leF?d+!^Vo!K*IPMbbEySMCO^RkNp3%VxS z7-Jk>I)BC<`Jz_Sf1xx8Eg#+Uh>Az@ms(9m@kMKIE}&wiE4l4ZtDO$Cq_aI*eF`4{u_l= zaoB=91YkRzLb=B_z$+5*Ht?;Lw$_mF_`CZ_3I-)4xZI-POgjhjy0-Pmg^H0(`6DFO z4o-u{+^D37-k{`#wosOYPUC#FJ?vep(mFDH^|^>>p}ZEBySjxV(Ha&9s=w617Hf3! z);5k4EQrM^W1~ZwNbRhrKG9@qYdv*Klc`dHoGciBkz#*Axd_1AdghiqC=Fr z=y+vodpkjty3Sg7uKi-=@y>xtNwl3ODoZSb zXjoDsTWi)#R{D18AC_XIJ{1t4HdC81Yp}FPcV%g(5Z*&M78Rnr+o`Q`wo^ZTof6wQ zB&?Sy$JRDm+ZZ`|D`PvyDSJD3DMO;Ylx3P-xVN;}e%(q9trpTHGOQ2iapqvm6A^Nv zN=nd28PX+$_f;l!iQ|2gx4VQWPj?AbQs6)D63_c7eqBSt`mqG$ZN=EV0Rd@_GzYV5 zC6=c2?HZ!^W<@HQS)t1H**;2}I8S9+*I=Heyqy`MJQNqHJeM4({1O|gybu@4)0Mdc z;*?u+LqT^-w+N+IY@l~K(Y6GFwlcX}2PGmWR5{ZPKD(6?*DqXAx&if>#zROuTRg6rtGI0&<^YY47$V?!W9WO4}D z??Y-oWr&PljtkMuV{tH6RG(@;<%w=YCstnHPKZ#Fl0uY4@tHhBnTy5|lTPTT@8KG>93v5Dgh|-Hx8Qm+6 zOvP==bQq2dr5i0Q8}!>+LQVAJ^n!QS!Vu-(nJunV$jav4p<(HuvRr_Q+mw<@x^lKR z>T*heGQFFx)G4-44{ukiiBTrUcYykD=TLcRC3~z-gz{mpK#1E)8P_eCtSME1O-Yfy zD1kbs^vMcceWu?D4%B_=R3$E_BiriWjLBRX z)iqRkIx|#hIgA?WF*LY7U8&xk?Wvb3L)Y&rQ>`#irf3WOl+jsndbxWyGDSaSX%^Mw z%URT3G+kq}DOXPRIK>uA+=dLG`(p`orM3Z^$QIH)r$2O?3oE55)BB?{=@Y5!P6))^ zv78X)zCNL_4A~I19qp!1e`+_dm+~~){X_lpW%0=FAT@xat8sNxkfy&;Q=wI()Yx2- z0aD2xBqGO4*_Y5c?ecQm!q6P{FmeaC3Zj?9n&|9x+Jo4c6K1TE<51V9;qjZ zQ10m#2Z`ZI%L7A{6krb>Nc>~3H)-iAI|Fy$Kq*>-)PGI$Wxr!Ciq zc)(uNl9lb(cQW^AnkDT<4Tu~>R3;6IQ%0p=DD7rf-Wn9DY?cl5*dXFhvPLo1yMCXM zuJ{cOQMx60DO(0N2gkmHL&7wU=$U2*_+wze&|ozB>A-D2I24?g0#EB>(9Ji%>!a)& z90%K8#uarWwzcwqUHzm5ZyiEfp)ME{NUWg& ztkR(4z)&`j1)GE!_&RD#yK^LF`^*Mu2q2 zVnp}HM>$q|jb53p62_@mNIKj0*P|!y4d){9;_WX2Z(DQ*J z3ZQ9`O5f)lqMbX6NvQ_)SGtw>i}pfUHLsO&_ECS)K`6@?gmcU4K`%@UcFqal5J7N$ z%Xsx6Xjs*X?ydZh!U;t`Kk7G$U?cmpAnW9*q^=p==@l`_WE#Pm zGj@J~08wT?Uy6{&b2b=vgH~@{(@!Y-*2E~6*S7Mg_8`RdtJ_pgu=vI?e!hhjIx&y) z(U|(ud5<*nnr>)1xXNkYxNl9$$})%n$c zHN<=#-MHZvBGMi{ZHqsPh_|wNz-O0d^S4Ity?&%~SWv%ndmn4_<$?)CPd#>B(i5G= zAK3ZI=t;}6MlbftI209~81>nq6~TL7&*>jg{P}y2FWkLy)X3c0j76S*d5D>6vVXV4 zfid!OT1FTzl%&NVP`NrTQ&fjjvK+2ir| z-~F&t(CqJ`KglU;Rqi)mB&B(u__qJNu(HI+n}_cB;=tic)-{iP==Fm=ylmpqP7D3c z@5#QeU%VJ(c`3ZsZ{?mlpHcQN9s2FDA2+@8ZqL2xw+1c|OCHF2X8n>^7lnV)<;w+o zZa(qbz|FUMOgq|d^2=GzMduBOcsBF2Z>pMCh%g*Se7ezWW1V|$OSd;NLa{@$M+nBsqX?$@texaZ}u_Y{uJ{_Kkz zGg}j}2UZvQ{km(^S6=5o{iw^i*hTAGgI4AD`O^;vc+|9b^Tn1cU%Fv)n;-6dKB+qC ztFEK=l|9LyKJ};b$bD-)F0^Ccta_tn!onA_m(JYk^Vq!C-h1|l+NSph8^3+@uKRxd z?nL&BpI<({G+|G{v4ytZ&c568(0dzlpYQnXi63X4`!w*J#yyjn_K>H;k}@>U)OCZ`0@53(O>uY?CWuF&0Kx>oqkFA z&hN@UuetBshr|DPxb)axJI>#mdqY`5xz~yHec9}}KS#9M^~;(2UikjQK7agbxp(o! zyv}j|<=2deqjh@tP<8?>b`ta1GuP41Zap5v<>kM!qf2I!hZ+2(bC(W&~F3E6!@v|*c0g;K*0NOGZ)?oU#8p_^hl%~T_U^9hW-g*5&Fna5&s4L zb36JmC8}kY;4)T+E^yDD;LR&P4;!>@>Eh=`4PARk$+HGIK*r@r@-H6P`s1cg@&?Y^ zG~&aOlN*DSM_S$x)ezW_QeEBRB_f8Wsuz}tu!W_us&6QttF-yvL#+tqN0swmdss(} zm_9)nb|#2!Jn4qU5!FAKhgioKPo1hPywE~j+MIh@aPxE=Z>jV>>EZliSm7{b?5Gih z%b5?eOVerc*0F=alWkhb0LOUn8e`8RochMA=4Ou}{0!mm z2nV#l{U+QaJcZDi9K=}hX2#YdJdH55C1b<3KpTXgBkUH;Sk6|)79;Fe#n_V}j2%Z9 zhqYE_HEIpQxc5K^lepY%j4i=rxWjhF?rhE2uLyI(8EdrzwFi?)pPh`|f<3dK8pbBJ zVJzVT)UjJ((%rjYCRB}syHT&HdhLN}VA=`$zz`-Kw;$$%NvG8^_6$sV_5g^&gnJG$ zb`jyvA7au3i)}rGc7*Wlj~M#|mV4naV;{g`uN`6RBUmcrV+f5IR)XJBC{_5;E?gh|eGFcCD{cpha5 z&9Z+)Zvl4qs0|zz+fgC9=fdRn_cLq>5k*L<_fbW<4|%L}+0FV2){m-!|*o7}P| z{iz$`c^6*~H$Zq+{us~aa{J-dob6~!C0AA1J&BhIrNeHv zMwV$R16pm9a4Nf|@ToF41*gheA3jcFjOO1UL4%_^XcCU@p-DLUz4~x}Y?ZrMY`8Xbq|hYI5_ zO#ST!eh+V@&K$!>@Yd?iF?=Y3kQ;d>f}6EqnHGFWLAcuSCIk`cl$&@v9;rU51*^5- zh!*@wK^wKr%?KjYObQ~^$y)HJ7Q9128}&m9BGlhBVC!2XW@bGnbu1S#@)(a1*XSX3G6~aaOKdkJd6AB0i5-@g|q5uoV_}|5@i%)?bude zs7HZD;mTQCafLs%cZ@hw`T0ctiDxs1u%jwamLSy;BOWL+sMa={ZT#>A-kKeZuodoFE^$YIhuW zy8+Yg1n%~@?ku>YzEVrG;%=|&&W5{vt~)#K_Pg#p*hEGJujTVZ+5yZG^;<989(3J# zUX#`!0EWdO4>|5Rm+)-h1^rK7B3!mc}mX)35bCFkr+kmCP z?ZBYklBPyW)wxy?raCc$OZJr1mr3e(P~n66GE7N+=UpHkQCa4qz6|p~FFt{*8*L)h z-Wi%s73#?l5v@kpg}+A(ONP~ES0-aNC|b&0Jy2+l*^NKj0M^Y}g*wnv%o*V?d6r9_ zcj`RLCC>t#XSs`KIe0GP^K^~MnW0fR=AGwwXXGZ0%GIS_BCOYPpplh>B!lIW!Ckl~ zrIt$u<8=nh!600kX1QdrK%MI)T02SK<;+93=5jo54d#zZ9)W;+u>c;321|cIsK`{X zD|D8jlI04?a<c5X4$)HjSL#{l z6>wP%NkrjvE1E5Wo<5?=|X-}6bpB1^3VQv+^pA1hV= zKX}-6G!-HaouyWlI(Ur#W;=k`&*O6d%$lz9T74Rkt)3A#IJadB;WI z9ZA4Y;T@@hvqD!PS<`kFJLnQtxENHpnkF^C3Toz{q?L08 zI<=oT%?D`VSbUwrsE$wtOO}D8Ir%DEE zBm?ZnFsj3ABm?Zq$P!xv23mKr1`N*f$u77th^&zeXyrtM$Qn5;_Inq%#Gt2S@Gcm< zz_Gz28N3SypK)yS=yw*jm}5&!zq7I#Y_7T`P_&Mq8uKpfK1)yXM7AG*NH%|0Eq_F` zym>8diO+RuB>Gy(=ZsEkt>kkScSL9{6j>~Lt+h~OIUnwV+t^IWU@a7xiG3PPk+tfv zKpNj$2+t|KB=t&3{hUs{Qc^#!Q>k=OuLSiOa%YsdR-zm<>Xk0)8r)E;5>@FlenD~# zL=_^noa=B)YW0?k*U9psds1>87%yiw*PR8!XQb=S%3fl9b)nXQ`CWP*J9|#5Ms;~z zy}G;(0<`3hfdbie9SzV^8;#KGb%FXwf!0fbp4FMIhd{sc=Ws`wt%oJF`O^7soDMl%TfnqZhueW+bje%P zw}WB#t-4m=084L`T0N#S*ebPpQk@YZ`tv2~h7b|qHDAt%XR-O}i4f6R{XIlD)M1On z{pt&$qIZJ{F)fg3LVPwy=ZrtDLG`<)qJ z(J0sOXF-P=Wi=Y5yX>aQvb)ury$3C*&16c6-;;tY(gk@Bg8aZ0U6A)&g1iSo&hjBH zxKUx=a|uE<@;!A+xCpy$o5r9_W3UYje&im(yYOTx;RsWZ6>w9g_Tdo%{|-euGYa zhl~6UkazdJJ6z;!}H{6M}rtH|v7z zgdjKYP3ptpVoW&8k)qZ}j4e7wjl|fh{sD}UWg5l@5~E7T_&{P*mt^ps&R~~|!7f?a9hllYQgpSf;oH={ zk<_R(8oNQ`5`PgisRrx@jrIZ?OH#<)E*iT*!@WS;?GkdgOGr{`x9t2hI-cw@-w9dB z;=7w@RCvZnT?i?YE0x&;LF)K!U70;nkiEJxdt8F-fgtW3gFO)BvTVhBAP5sihqy-y za@o}f_vKnk_LjRX;8~XIluY-6DHnTmrh6sReLB;; zUXdyFfs(1@xldZ$S)()E2c|-NpflYErkA8f`@r-Puhp6E15*QT)^s130xtjL#28Ik zTj|r@k(=p$Fzq1r>pb@};l%Aqo%nt*3%RZ;AW=#!IWdug#O%2k6=IT z6rSF7<@4Em%p|oxBj$$v!16F6s23u|2p>i>_%!(5Y@!-4f`_$;K$_(MYyxAm1Naj{ zy|)c2?sM!p_0q$9NIPn%Px}fs%pq96M8TfR66}G|f~~?CfSWNfST$GQ|EzR~u^yeG z#BdNZHh0_Ms94i~(UpB;#QUDWr+rDn4}=6!IAwN)zsjx&Vxb@KY5$V&yIceR>we;{ z0N~?jo5UY@4g80PiF^F9J=|KypA7sfY)#Xab!F%AVyHjpx7G0~hV`7)LQWiXj+v!yl-}6J#<*O)pt@}^gs$2*jZs*=8 z%VzanJ_!l~b@qn`E^y=UH-ZgEjTy%hm0>ND)T-|+p4_KFmMEZ3qNjOq<}68+h5IYj z)+DcFq{+v=>hfnri-o0~d7k>l643>DyGLOQ8PB3|!od}5m?d8=UoXOYSD-zSo1z6ce4;r|oEEU+&u~vs-G=iCNEC#D2UC(lbTrw6 zoSw1HABzuqXl3N3oaztHh(SR`z&dZOtE06fJ^aKqjid-t^Pd%-u|$A?v}z(DjeGF` z?cQr?6w+ooc5atGBU-hMU=Def@BZ=_DVBy=S4Z810ENry@@GVdO`_>WoZlf2mLNjp zVi7kxqD}C4p-y^MH5$XEAcdk8q^##8O;g(aMgoO8&lZ@mp+1J zyQ-UD&zR!HMr(n7J@t-+bS3uWqP2ic#*~HOO3yCnOzcfo&W_qF{=AH!gmlrx4MpEd zW~4&U>MS8>E(qNlw%F;KovXvBCX*}H1=Fg42BRy{FmRfr=Zw;j(b9cUSV7tyo*k94 z0F#1k-G)LPmCotVLO;fDV#2fjok52*JE>Q1t$Ax@?85eynRV%%N`Nh@*NjnV$YpkE z`i&79X*h)>ovX^B3vLlPA23gx0FyCgM3)Pc9Q(F#k&fg6vD#aniZBI;vcJ8p(q(e%IC#oDDpaP`L}VxS?;EjWSxzZd5f@#(e7;Z^YkuVdqHL$Eb$ThNR@F(mkjY-J|5p!`D3XsFGD9aTbfcq6Hd`@v~(eF~;~% zeT?s2Z;Y=1j(dy`iNN?~u62?ErXKZbS#)F>;JI3wyb>p^GdpjU13H~+ggMi2)hc0= zgLJP(gYVMH^K*|N7aY&mzY!=^BT52=0e}0G?)w z59y&2dUT9h`ld+JPIs?4nx#elIvS%zVm?mRBKaTp?n*ho)pOEw3VP^3PZiGUFzTad znm~AJ&0Cl-U0ztQ)dy2nmIW}J?8;Ne|NW}bXl%kP57b?bh`KAX_98#=!SEh=+keBx z+K5dJ?CFX5`ALMDL#t<&d>_8jA_u(gxXoed>^{~GGu>Fsd)rALi})?@?&}S#m`%qa zkrF(In5mvQXlZY`g(a#1A6oi5J0n*z+8FoOC(_9X+p#2|^Is*XKf4E9GQlH@Wn*wn z#C*CN5V`}Jh*$#tG9gJfq{Xuoq;x|VkJNM-c9++lP0Jc-5>pfT+QKF??xzbIFNK}N zj?>vg#txuj(gK0pLB!+r_!o%l+tKV4;%Pek6U1}%_}7T%>G97HAEU=VMLb`NJK0CL zDbf?DQk3fP4*{nY47o#ym+A4th|kyKM-X42$B!buM2~-tc)1=whWJW7ejM=%#Jx1K zxT^nBd16;ugDkVM2R)5>A2Z^igsH>hWn684Kn&uZ>Wl-T7xz=&K7b<+q3i^u&GYmO z#5|oE5#m09C?!wgjJOZxvkoop-wN9=@p{}7+edkNT;OE0G!gIxv(uzO4vw*%w88NZ zI?)fhF!o|s902=Fo6l0#*=pytqTRqMd|LvCzkO%jS+cr$`t!X;vloZod-&v_p}oeXCMer(T=iZ>&ifBB%}Rw!!-%(*=)q91@)9IE*r2Uw6qNTbw^qb z@^wf2KD5*<#1fE8OYJFJWhS7>k`}ej6bZ{lo(#m&Sw@y@zDaV)oC!cG60$%H^$$*t z(!2&EzOe^jgf8vaBJN2GoD@uiq$||J)^aKADQ%M@^2H=^o0uv}u}hSO6ZbT$xN^>X zq@bZM`4ChvU7en_c>cc_6eqaC%_rPBJUFxq~Y)RMmZl7rO4@d#hj-to>J;%jdCs!HOT38#hm9YUf3e=#`!wUxhu(H z;lPp`Z%bUEbS_%FA(1D0t5MG9#cbqkrsoXr?P#x|G_0V^+6?xjLnfMY^G+1Cpx~oZ zh;CFfJgq*^$qOe38s@xPl%tXP8aZ8?r!nZ%s9O75eX+$jACEQloY?NFEZZs`wL-?b^%;fMal~?9fi|4r&4<cB?{ik(O#oUMoD2oTuK3WW3qf?L7nz z^>N&_l4D&xTARdqa6Erm-BKljTOFlYdcE{2u@31~m({U5M6fl0H8fxmb^|F#JklP) zADx6JC#_z!gNiDUHO!QX4wW*cB5gSS`k{j(_Y@Xzl?!UbQ{38uHOv%>*&}62L)tL> zEi`8;-9?##8fChO?KaAki?k8=`@)0r z;ZbFMg(qfmMF10O8l_98Z{h;R0^BEb!QG$5DJ zu{XGen;ROmPF;rmuL#O;e|fCbNw14_kQGjUdeOq0P)<`Vvyj}ayh9;RJbbQp->M2D z>;fdGA|%{WEEg$s$WOQhi*>CiUzGDG(rb}Mlb87j&F##A`~)utyo@r#QTsFCvys=_ z@C^6~;OA-RF8qstt%ElPOl?_R=d4R5#5QiiMIcH9%!m%a;&piSqeFtS~@^K7d}JaVJ|tY zR8bxD2T?}@bJ4Tr!&8>o2vfmozX|wxz%OFnN6yEI#%GwC04IzD7yLa@fo5D|g2V8#$Wqa)t8}>0 zGaCKTx<>Fpawwz;Cpjt_qBHtDcej5n2`k|yV6@gX(me&56TES6gjMY{m}h(HUOGF+ z==VlCg|x<937-m|Ysr;DVSJageB>?>DVHlek$zgwNWxNIlnWT;H(V*=gl9NXz6|$z zXY7=d7za|907$|ZLj@t8#(fnrXroPb2=6FhM8LqK zg(<%_4mveNe*nvg5}eW7#{fnGX#1ENUM^ru2&s)5FBLG#Z{X$Y_gJ}0M}m|Bwt(`% z8T97^mg~d?gRl#6CGO`FRvS0s62ORnfmfy9qiVVG)dE&V`QQu&rvW2+_;=w^`fR$i z(eQdYkaQ6kM8H6#bhD2NQY7&ER|KsiVd{P>lzI0fnh~i~lQhl-w;MPDVi`4e8 z^_^jA;Kt6d+>_RKhO0EV+!?ObOgiq-1)wB>zT zk7LUlt<$0rr9E$dJxw~&>q|{Ivk}+M z3;D4!f|sebL!y;hVzYEr>sAYUn4Qg+aMXA>DklAWks7&1w8Q5MGS-L@2|?^c11w02 zijAd{71ez@LWy4W6p@@9=-X{|WyW{AGAK z^+8D0y^d6&LF}|HayXR-?WfD~@M8`=PUVzF@v?MxF%wb@dxhm{NY+>!OD{FW%T4iG zcU*nqkO&#DgT+&`MuVno`KI^+Q@o1eWnNUgvSty!A8PA)9S3psEXZMh&EHGqheV`$ ze6Ql{b_Yo2V$E_*Rz#aij7k9!BN$ zS4V5X-G^n?*AI)k0E{{!#)aeUm1a^p63$%jSyeMll#NFu+g(S*6z*Ty{iqmcN4WTy z=tbedQ=+xa*Um2XKz0b=&*IfTz7c7BV422dQ`|n!(-wn+gnr+P)z+zOeqXiE zmmDiUQ`!Nh3jDRb$rrhNk6si8XUoU@(1B<{hF=or(XC(1jT@vhU7h#-NHT7Kmk%y zpH`&D{UA_jnmX?r;qZTjmFdt>=unZSuKGp<4S0psXizT_{=63V$zZz}o-GkQFA_di zi~ABh&jq)$C0g7L9Cgwe+0Xs!4C;to-9UGT)njK+ExWU{4E6KRM3mb4tO)jfip|cD zq;axqwA%Nq2pJQ}PG}%6f97E4wK#?!G{{VeYVV9D=BdZ23{thY?7?#>UcY@ ztMg8YAb%fr6i~f&;L9!Qykn>c{*|ws6C!?CC1lFILY`^+~%WxI-#>p#nA;A1$k&PTOeoLfoyuT@qUPrQPy> zcky%Tw7Hf9XLe$8PI6{8p7LkJC#QEy#skRgZas5)CU#@lNl7Ug8Qt;7F|&KdefMN_ zw_4?+e8JSV{LvAm z1rvBlPJ!ptnT0<8%A8SH;6JNi{M43h@@5n|CKgVZs+K&Dmwpb7oN~1!{ z+02qDLwp|aC{CDX@8gKiv}E!Dld2q16UQe;RXw=9ed)-e!s*-W=?=EVA&QwtyklgE zqi1YS4?8~L)wYkvUBzAha>PFvTkTPemHR_p5BF^TXlS-~O)d+Mazr^cbQl<%Fetd% z_rc_Z-R-N>?b)-7XE~f{ao5|^vZqgU44AajIwZev_AE#7PD?wUZNW!Z+Lg>Gm@u`l z&e?8mJL}EI+pW0nc)RjNJKNPg(yU)}+jfNvS6ip(ucA&&n>q9LsmG&^MLjU5Zfn%m zC_d%UoJq}=McJZGvfq|PEw?U;nzJmbtYlf#7i!(IsAW+Lq6(2*?F=tu%c73Awf!sV z^i)T2`zIaO-`sU>UE1-Jo`thcGTX|p-uaTf{{|az$9P9($+YpTB%@?@;<(HrN5S;T zg)!w1`g(g5c$8bJZ5>ztvTGCD_|E?Ks@~fAqeuVM1s?7H95-Nk@vIZY1yhUf{=zc+ zh6%+dily`aeaQ~mVx8L; zg^Lo!<96$h{G&D<^CN%pDZc3F<~VtCJWp?3ed9yX9;F_KBNlr{O)H!^@!|2yqqg#> z8?vrn#)n<-jT)Xgk9X{6iJCNQ8BYp`%3Z|Acqa9`!87xQ59~F(^oa$~$kB1v`VY6w z>sVduzv_&y_xm0Ru_K~q%~|p6q-l#-mU9LxDa|UmYx&#gJ@s5s1zTLp~Z~gJ` zySsKeMx^rxIvjqtr#0h5_{6HrlBsu0o4#OZ+I`DveCurV_q#1I_Ok8PubL&DYes*L zZ*55d=WHD-4vc92!Rf?XH=Y>#2Y-Y+ zJ10HPJBrnX3syK{!jzaUj)Y;JnVUX56nONb7ks_D^y}kD@}1Gj@zV-kzWet>pZM3- z`g$J#H2Kj}cssu1h2F`vwLkTK;6mEJd;5CdP*hyuX!c~1qgTvL9-U${3-hKzIZS$5m^V@z?Vk@x~+Y&oXu%*S>Y+Fw~)X(-w z_B-CMc=xl7+cxK(I9r@;R{6gV#(mN}&Ngo8;1$yd5@##9tL+E-pJ{%vdHU}0wuDa2 zTUv+w>1=gJtCZ#~y;}COeRWgwmY3`;ll$2`TN3*1Q@mSlNs80&Vr|_!+v+SWGfRWw zgNCsa-P`e>5{Iz~QT%*-;q-|GsY%Q+x8wLTc}4p}J}P|8qf|-g_pry^WhchWc%w^M z+TdvgZ2H8EJ7&!)na(Q5K4@9dLw%sF2v*{)zD_IaiP1uHR@SMNJ06DpX9HgBaL0SL zbH_V%aL28vb_CRlp>Uvid; zcgOT_vfPGt+9%6T2A0}aiCRqJC(~~!u-|M6>>HV$#dhMbG#%EbB|@ovnQ)!}+8Nsf z_OPuAF}qBRN8&<3DGT{|TBoq3g04?mif|1Vf<0oP`|aYWWI{$$W&9hw=*)0VW~cZL z;bhSp*WYaIP1L}^OwDN`m&b3n&|cA6aaxka>VVzu(uAgrJLE^i%&#FVlVZLkg&!y} zPD3<9??jW{klLiTp|hZj+eD4Z|L^Fn2}lbk?ez;o zZxTKYEO!XA-bp6CFE*+7!#3LE`Vnt6URCd!zpeLS$>!?iU7wm%+X*SIR^C5KvW@j7 z>ANGXzTVL$y)}Cn_1q}$hi$WwQ%j@bb~atlFaB-4_sHsYb-n9Tt5@7kw9%&Oxh7#_ zy-E76lBGLsp=|4=_P%I#q391Liy(-9*_IF7K(dx=-Ab8$i+)Ev0y(4EQv4zxK>=e9cw$LNsd^lN z%bDI3az;}Z0QVHFgy9T=r0tz{t&3W2aX=1tFG%G+S!Nu%58EY@~ABp z*IX&aA`rO1=}9o&F#)t(XL(I#CSEnn0>1HePMn>$`GW{P;3i@aR$G4N4jkrMD(`;g zI(Cp$Cd&^ z(ULvgMXOob-)3h{&D4`cGSDu{ns6ob3gMv_%q9z!-<9&13$t;a2104&Z#E4{b#dB1JJ|QAPi*hi(Am{v5^7> zL_8ke+#q*~$IxR=7CV{{Q~Z4~oeew0Ci*CnlT2#5sRx@es!B2=hMG%j5bC#bM51^AU9_pX`3)(Xd=-Jx$k7uxs?h-sy3^de zwnhx_Xm@;Adv`n_#vPyMT0;Pz+Mn)*VGUvMXBT1(Fh0KD#vMPk^I~p-Cj&jGVU5gszrIB8D)wBz&yMQz! zhNqzzKMg0%ujy}P)vlEi9%7i{Jjp=Es=*YWXA-EbNr+*l_(D_scGoHkiy%{cmD6-{ zz!VQKX;5H_&ojl__Hhe0%oM-f6kl$NU!dJ>-3?3EBC`DF={E$bHpR8muYqhKO{8>J zZHiwo#oKE3lvrr1(iND}JyG9dVE$nyyycuZbh4byGbPa5MY`9YN6#Ki1mYVLaOJ-} zP>&*@Hj29LRWwJwiIt+q~W(gNDb*YOEAId%__rdy3#rD zVpqRlP|XKbU-?qem1He2QKfgZ46n&br|65d`8}jCsOG|g{_^#tE6IAnIGKoC^tPAo zbqkit{Q0oh74u`5F&w=irh6m5)T-zzCD7KypI$06yrvaS;pP|n81!9QMd2I1@)Oq! zO*Sbol|Xe1`C)~Yoc)2SPA_)M(H<*;ltE>Ilx_A^WIGUKaK`U|KsLi`veDZXJzdfp zRH=6O%GchmRF2$LqqJA#=ruX=8dZ7|qm!#v)~7oEDzYY+sM5=JhS#Xln*%*N8rsyS zy5K5Q3rtk$wLQaYRO$VTp2qnYmtCpOdCHgi7MgM|HQ>oDlfV$V~OuWor4ymq` zzuH8XUK-TBkzba;%ByH~(v+WGG&H=X6}=nMi5|a8SKn3@SD_j}pUBW1y|QR{jVir2 zGN-MP?xL!e)e5UK7;mLsa2W`@esTkjkgcrPwK~VPrK_=F+mhy^(gEMqIRiha!5a43 zQ#PlZT3&t5wgjwbH|*MTwtqflbN)9|b|9lF4u_-?`Isneq8zhALjyExE<^owN)f45zKiL4cZ;c!b2e5@G!OIybEe9G z_UC92pe=J1NxFC^O`ln{P;&-;_Ju|brropdBiQZf@ zyZ@XLz3*mr*QRv!hYj-Zq$Frix?;Ip&W?5;`4xj~=4&)1hJM&pYIncr-IXn<6wk6T*fiAp%e+kCmRt~J0~ydYSW5O`sBSo1;+#iqsxL0R6X_P0YTY6EQr|_{$nonA^4vO3C7}M{88NQT`UFUNHvzZ4 z)Dd_hZ81l!gl5Zxe3uWewL4%dimw&)irRNJZ&~R{G-6MAh|OeC+DIA6%jwd_%CP~`lM=Qp*_%S+4T`UD1%1N}#HYb&4 z1cbmlc4&r_wayxh;cBsrYu(>a9xs_tnSO`I&;}DCLF^|Bhh#>byHT<=5=-mwcZeaf zsnd3g#$FRic5~O`Y{Mi}AOnd8&&l#mIK}BCyC5K8|kd|lVqy^FxCoygmL#KTG#j;dKbbs z?1e*4*fBB&QmKSfHWW>ZcK@*!|G5&*f3Afgze5&+xrmH1Cs@OQze>WsMjmq^6*&Rc z_9x7xv=UHrDg9IZ$lz2+PuR))0j`Q2f{KkH5(TGK?|iG%+e)vB{$`8DnKycw6v?>$ zgs;v~UDe8#UK;(L&Ve8#?54_@SQ0a`r%`<=pR1RXQe>B)jVIjGG$+B@r;0|fs6 zS!1DYjiH=`ylgv)t208c!RAuQM}oGxUx1j=be14ag;Ig=e=*e=%F#1AAqUNPIzSAq z8zrOtV8c6gXi(Jrs9u=o80L8e=@Ac4#l+yXuGZXxP_tYth^E&2tgSoPKT!-v$+dVcBy>UZanPMN$*b|r2tJ6)kCY^+%s zNd7lHg_DfkxIfn#M`wsZ)k`yW<5rI+AjnO&p^8YAaECZ671FBU-%!hGqjBnguh-vI z3-#~s=%w}fI|LqjxyCO|N9}spRe- zzGl;!T4&r*5e~&qyEIjha{g<~+DKlbBq`Hmyn|*;qKp|5m9{ZMqPR9M)M|(^k8Wy7 zqitTh^fuI{We)Xn|BI#UT0t9)4U5wdYBW?aW|4%qOpy4_I%}Am?a_@kR&{kvNy#4O z`F{PD?SnlHqh%kJm@9GRvQOA4((ugG=)P!yuhH)2>b|r^znzXgOcvA|V`3CK$b60KzuAWMZI;u3QXC4p3?ww0Tz1OkWW2t-x-ywlAfrvqjF!^WzSB`_D;8y; zY1-{_NxN8%_S#xUt6xSlrXnXbob^{aMl!X2LraR+$c3YvvD6jF8Kc&08*YD5Q~sIL z_Sa^MHdC~^CNjpvg;>*AL3BN7{@ZZoq7{Kd8m@6QGWO6g&Y;l7;%e+sBPv}e%eT_5 z9d$zuHW2Xy+Hl&L2C9GZ<0|+e52%b^3xGg^QCkrDb~SYt#-=q*q;Ni5;!r6HwnSd5 zB&0~jQ{~kmuXyBR@MG>HW>i3&k$t#Rn#UqPmt>J2N5Yd27{xnX)m zO7uB5vqNM154VG>Tn7L&djB~k`dppa{pXa7kI@;_u1N{+rAsFzSctOHoRy)%NY_CF z_%Uk<6P|F?9^hOVIgX%JyPlF**#Xxx1uM2=q`S)ReK=`{u9OG3T85Rib)Ood4;PSg zI%I&`tNd_?1z#39>DpMgvH)t6(lr!BSCgp97N?UnOku^BNZen~x3ZJ2%GZz(2$0kB z8)OYSHXKQEpACd%TouMm$9Xl4>^Mgkpi`q`DQ#V6XsrLpG9H-!oeb7wB{~7re5A8F z8Q$*L;OIPmPCY3wsObo=cs>YP&F*$h3|}4hf`i@f0!nMZpgV!b2ZE0 z$C!D5LuQb9+O~Da|4E%`=ER}GlTq%>?!&_k1u=ARXvhsLiex)9@JZX{ov)4Gu-Q^KSl!ii*xB9Suf&MDlI5}goDo&} z>i8?=bD|_*|j?)XtQ&AIh&z((&- zTx_TbR;TK@P+N`iX^<^T!=T@0Xi@JMHB#Ka{MPJYAib`2mulTcOO~2>%#vVx0Z{y2 z&nC+~_F&YGk3-ZyHd*e@dkf%!dOv#-aLwVvtF9vf^?z=t4St(0j}66>@c=y+)kQk= zi;w+T^j|eRLYLm8{8m)@4@taS1Nt@)V3)JqSbsw15h zpU$%6tzM%_9=hpKg#cZ!NH1e!BKw4Kgxfh z8%aYB@3%3^AM=m$yI*0z&?EE5|AYK#>_P(ZCTC^z(PcbW(eih#Z$H8yo29V;Q$Ijo zT(;sHdD7xn%yBY>a+9;-12vQ*_Zm6eFIQL@eQVju^0XZ2Bh95sG)XGgw1@z3(6NHq$)^VQJNl74@LK`j&%h( zMhAvl2a{%Jlu z^Y-}K`1{($XWZVd%BPGSSeg>gUM}-`q>817vec~fp52pjvRJp29z7GfCHG*dJ-THi z^~mbRdSvxXNz6)#_e|)X^ncx{rm&f}3>tIeE$OAKGz*H|;v7`MCKOD)1>ff>Ww&I{ zo=`Y7HTL0nHsSsrv4yiIdQS9sx_4Ss89N!9?fWFYLhb)htjK>Xba1mZ^A2oF99}pn zFMDF~tOtsQr>T>ISa#ax;;Jo4?A`~;{IUinCZ{Cy@EmY^?Z$-I#BCdQFY$f+mi!qd zC9`g^ET~#Myec~WK?QdfN(4iz?WdA&zf;>$<(@(6Up}n{*f{}JU)m$ksn@q zDm*ZFWFqsEogKS~)fs(fK# ze#)$>qE;&{iKE`Ogn!|kyMiS|E&H-t)$?lQ9!uADX?NXl|LiGj{0UZGf?tDeb=H>n zhiz|3U}oCZX@PGapAxuywQApMNg4C;1IUT{ru2`bAdy)u>dQ z=}gCO)^uk{=zU>zmVzHe=_!BVCK<6*_--r%sXb&WU3&tDerYO&#RHFWCcA&(O6~W7 zCCoO6jbS%de)FMaGaq&WUlP=qr6Uu5%m#mnItwBb4^Ka$lMWW$5hL;`5QcuDDj9c) zQZP-ZLW!%2lKGQBdm9@dldys+La>jVag}(InRpKq3BS!3052 zywPv!sqX+i?xI8wWTV(jAkTnhN^qTqVxUZoK76|PV@r$}_LOQMhbSTy#fQwBUJ`HOS!J+Ub5d3Nf$ z$1c6v+km$#oe}tH?@#-``R|wqk|%$))PP4F+@GH^?14cQ_d3S?`SAZ08*rQR`EwII zPWQ{L{Ie{o{d-<3jfC_k-@hZL&xZ6zN}bzNdmgGa;1uRT!!lV$i}>Tr&bOzj>7Q9z z`1r`)u&hfyv-qg_pILGS_>9g-&zn(lTj7LRTef1*@|-zqV#(A(C7mx1@LR8Cg_3lSX;^;?%ug zQu+w$l6szR<%%bME92_o&n>rwq2C^f0VyIK$>Xp9Gk!)p-u)AQv;)+#{!jdcwTGUg z^cSDZ*%C|(s;$Vk8hCKV?+nH^z7H|Z#t$O zvm`rr0X9vao|~s7-Sy>^{GJHqt2b%sVWb+b4bcbJbd~irxG>g3u1OU>9YzxeBVBIB zO$TLTawNYPrp+P@9DN;IpLy~)IkUPdPD;}_YV9^lkn^fJdull~`(h;ocUAnPra9F! zSND22PWeR@B3uuthlXTW*4V+NIVV26mY`eDNcN-raP)P*S%vZ&aQNh&k!obtQitMG za)nb}$xbHUGjQk58lUJ&WWp#?E$`qtrX*vDtR-a)&l+Kv##GoewIz;I3)3e~Gz7wk zDIIC-1Oh%Hh*TrDtO`ii?V;r!Tr#nE(i{V&0R!aM(xWxHegZqUL7tw%bF>EV9mz+c z($~P#dfjkEh;W-)@qfHE4qNI!jTWKTe{{*3^VGv72>&*6%|AiD*aWikN@D2ZTLS4! zC|s4ivK#~caRaz6J`_CQTJ%HhHd;2i8hwRsRc8kRI#;D&z;ug}FPzOxOIkdyFw6m5eeXn*)6KIw%1tL$i~3nCPeB8_ zr#VfRha2TO9mD@Lly-f2pg%doHnY(Z+*`lc&e6LB!qM&4j255{eC>2N%f|d?B(C^K zrko=UlJNl;;T>!UHmF7-%*L#007in5@DAgx9mC`W{yKl6Zx}Es;^3nhKkN%w>dRhd z`Qra|b~Hdy9q0Gn9(ZtKIK2?XIz5?Yh#jQ-iCE*nae#`T2u5_gCZ)tQOo@o78OOwv zahj$f2@;KOI%#!GI!QXFQ;3bUCN?nrOQuF;>ZGY1Ef_;H)@sn$R;Nk&eY@ZH-rjL& zr+ahn?c4o!_xszwZ{OR!=I~r>me#?Qj?u(PyvZt8-&e5wp!3TCn_4}nOD)Kw-dGFa%RnY; zx+9X4@2^Fg_yw+*eIH-aN7jK4ogadM=i%t=q?NY71I=e~Ol6S!v-pz@5 zTJC5vwia%!TMnb`8u$@Id?@!IC^R1G8Io~WH?s}gy$+o$C_65*Fw~4%_*Ft>M(|s4 zARRd1zgK03*WDTirmJ9FltagykWxYZqo)oetrP7^0b}Pt>Gxn-fZhuid`7GmgRU$G z-y*ngfM1)ev*QU3!xwz0Q4IjQ3ZS>ZoaG^ymIaMyJWr5l~uTa1hNAg(i#Jco}jjvvoB_UhRgHNPm?zwd?nRvbCa5y1%(oZt2K)wj;nRd>GC z@W-~1Hv=9VPM1gbEc@ykLiP+W<&>r4!5zwnS9EHh4&{TPg%id;Zp9H!p`i{I#luDU zXTX+2WrSmy%)v0=uIT0fYUUDJ6(G(398L}L4!)CKj!U0PQK2ql%&Ju0Lw@xeqZkk7?ogcVRN++BJWl=69FXVe=en z&M-xf<{#4hil-!R(^On*j5l7%c2ZMCw49NPV|^eHi)w-)?FEGl zPrbgO+Z7U~z)z^qseF)+G9&!z3SDgW&a5463+Q-m&5Vcz=d&@z75w}R+MX~FakCh{LjzL zhnpIYFuvRwLNt|<+DUO(7;7>v(jpOkTHH#ZweEFi`o#VL?Qhx(aePw|%c)5po5F7hquhg`_4o$VO;QXdNsxTvpPlnHTY2 zJ*e_oZbMWUhPrQ;!Ms(0$t%K|&WPx<=AS&%)A+r`haZ3Z`MGr&MKq|DTY@4uV2kYs zuSVfwRJ18l)5dF2ycCrOf|9mWT#aIUhqwuXj1r;i%=I8%NB0vfnH-|a10h4)1r<=z zKcJ$ks3>b8fsa$O+f?j&T-;i^DiQO^63m*%RbqV<&2dbkpG{>@zV7EyUPy}{(){V# zSOC4QM0#F7^wYGtTdSXc!1LT^+onE6y@bUBgm84cNMa;{%W8zXE{ucR-AsV#kQT3F zniq#D%#m2tZ#$g+e@D|wn8IJ7m_MMN$=C(9OV%rA&7CnCoMLTn{n-isfhuT)8mm`O zxJ7Es)ZM;BJqWDw7NTnTg81rs4v2yb>umsrLnOytxFh$J}~ zY-8tg5^Br>&h4G>R{XiEdQz?d*@Vo9Vq;rA=fklf+55*kDretYmJ9F*4!C#Ks2@CBI9 zRYxJ0lHs!(c9XPuVUojB5>v_;@du%Mm`C6z`GC)4(?m)qkNY8Xr8bkygJ!|_0ArNCF=uZA*booAAWq*d z^Hc&@K)BTj)^}h0#0lkI)8Loy4LG?8mQYC=UanpIt`BL3m-}XUybw)h@qM!ld+7}Hbi(hDM6bbZudw_FhSLmu|K7X)r;(SHN(CI-wI1&?8`85OwA zh5h|eF$X6t_8X(3%WQMjPCZFDE1nU%fNOqWUq2@r%*?ppkL@jg717BTA;sO)r|!Eb zDw1#xpAie|y8>av@BY$ZG0pV+HgYM&es%&(6a?C&|6e^jQS6rT7QC!7;dnXo)Je?I=Y|>T4&AxF_Y&XBK zxBOkeGAUsCglXR#6U)tDEOg~0h#Q6!=rHfBwA6~a@FI^fm1<`^&C~Ro0}F@0|X5aPYeQ!k8%b z9{zJHE`f_Z{-o?9pNcZm-g#AQPVzyTC+!>OMD?Cud-9Vq;jsm!yUZT=0W>0~j#^&( X)HQg8Vz+Hp#D(>jT}L+Ggv|a66urVq delta 24739 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

I&`t>x{?;NRW3pC;W;NPLT<} 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�>^Dp^j4G*;E;iOK!a|83WRsS z!sx{ap*4+*7K*pD5mfLqKdVewYkKs}9I&@UnVH%>T-z-$(Kl6HJ?MC=P}C7=!s4q@ z^1Ecj`vtZ*>0Pb%#>4<^;=2LWwg$8$YPc4yHCTOIjS@Vf4Kd-V$u7sczyID0}jvs_nldO-s+ico% zMiFV~ojWuoC$Ds0-tyjt1w&Dap(+nmdqkiK2Ky;p!y}_U4r`zOn&YmpkZ{E=h0Vh5 zGY5<;(ifEuP$bPk3wo!drX+W9>$5k;;G|yW1T%O|Vd==C{H4)`sP~;$EQ}uGqeWtt z&!}H~PktE`u#@*NFf12LiUzvY@LS1D zG#tvg@IpicV15?)_L!Y9!(9_hhjn!x?Elw1yAnrIzqwNH`E{+4p_9HUlS>G1(1hI;@Pxg z2SGijIFf!8D>%~W9Rx=`dyvNb>M%M;HRIyy?p38rGm;lOJ2M(dc@(pdXkV1GPG2!p4uw)2*^9sYF z_e_$(h;UjEC$#Ir>U)kXdM9^CY1M96k5EZzPEmfYn8n~8Lx<)K$#or-g)C6_%+#Wh z1tm!iP%wbw6iOt|lOGB|E6|_ggbuJG`E?Q!+6sM!=auv=8aZNcQPGGAKePHwHYLT@ zdYR$y-#ARCbrRm8hIpaWj=cz805-6zh?d0*N$?lx@H2Es=2r*sMmlP+kSV~SV*}&~ z`e3l2w>|~PmaOX#tr{qJ;R^cwKtUr+dC$YjST{syhK1l^zgy9aTtQ8va|IWACP!#N z3v-1Z75y`N(5xK6%Q$qXAYd}Jg60ns=FJ}@v{Im6h_)Ui3?$bw>AwaEA>{8&<2J}K z852f-%L1Sm^~e@NiB}ozk}b4Wl$I9JQQ5-uEyIOsLJdQNWJ@@lWPeXnud?k~C{;jW z*Zh1SQ3Buw$!x0fJ17OxvH8My{0n`MFX(Nr0p>$)AUl+PM+n9}Qj=0sw9zRE+Jw{? zZA!zWv9nI@nb=9AP0=Q$Mux#BA~L*vM3j`EHZ7@>CR`gHo}3VtoSeu~N;r)z6#j75 z#ssUQ+s6j0lkBW{$3;+m5xjZPyGY2V)kT7C%SfRQvG}Rt@Ll!!-)a9+A=>iXJthBp ze(@V+AT<;S=>i-q)LUcwJCtf5v1|T&LaDMAfT?usV4*92;L6P6w$qw?!2{>9RiP_A wx`Ei!NuLoFduhj#mX`=I#tWrF5Z*EdoQt1r%wCG;6lWQ$#|b*jHbK?@57MF7djJ3c diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java index 19a109e26..15e1b850f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutTask.java @@ -119,9 +119,9 @@ public class OutTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(jsonTask)) { if (StrUtil.equals(status, "0")) { - // 任务为下发之后就不允许取消 - if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.START_AND_POINT.getCode())) { - throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已下发,不可取消"); + // 任务为执行之后就不允许取消 + if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已执行,不可取消"); } // 更新删除字段 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java index 20a1c21b0..41fb7c382 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/InbillServiceImpl.java @@ -105,14 +105,17 @@ public class InbillServiceImpl { dis_table.update(dis_row); String pcsn = dis_row.getString("pcsn"); - JSONObject sub_jo = sub_table.query("container_name = '"+pcsn+"'").uniqueResult(0); + JSONObject sub_jo = sub_table.query("container_name = '"+pcsn+"' AND package_box_sn = '"+dis_row.getString("box_no")+"'").uniqueResult(0); if (ObjectUtil.isEmpty(sub_jo)){ throw new BadRequestException("未查询到子卷号为:"+pcsn+"对应的包装关系!"); } JSONObject mst_jo = mst_table.query("iostorinv_id = '" + dis_row.getString("iostorinv_id") + "'").uniqueResult(0); - sub_jo.put("io_code",mst_jo.getString("bill_code")); + sub_jo.put("bill_code",mst_jo.getString("bill_code")); + sub_jo.put("bill_id",mst_jo.getString("iostorinv_id")); + sub_jo.put("bill_type",mst_jo.getString("bill_type")); + sub_jo.put("io_type","0"); sub_jo.put("insert_time",DateUtil.now()); - sub_jo.put("record_id",IdUtil.getSnowflake(1, 1)); + sub_jo.put("record_id",IdUtil.getSnowflake(1, 1).nextId()); sub_record.insert(sub_jo); //回写明细表实际数量 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ChangeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ChangeServiceImpl.java index 889aeae53..a5325809d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ChangeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ChangeServiceImpl.java @@ -53,6 +53,9 @@ public class ChangeServiceImpl implements ChangeService { if (StrUtil.isNotEmpty(map.get("buss_type"))) { map.put("buss_type", whereJson.get("buss_type") + "%"); } + if (StrUtil.isNotEmpty(map.get("pcsn"))) { + map.put("pcsn", (String) whereJson.get("pcsn")); + } //获取人员对应的仓库 UserStorServiceImpl userStorService = new UserStorServiceImpl(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHANGE.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHANGE.wql index d9114ff71..4cffdd9f5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHANGE.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHANGE.wql @@ -64,18 +64,22 @@ IF 输入.flag = "1" PAGEQUERY - SELECT + SELECT DISTINCT cg.changeinv_id AS id, cg.* FROM - st_ivt_structivtchange cg + st_ivt_structivtchange cg + LEFT JOIN st_ivt_structivtchangedtl dtl ON cg.changeinv_id = dtl.changeinv_id WHERE 1 = 1 AND cg.is_delete = '0' and cg.stor_id in 输入.in_stor_id OPTION 输入.bill_code <> "" - cg.bill_code like 输入.bill_code + cg.bill_code like 输入.bill_code + ENDOPTION + OPTION 输入.pcsn <> "" + dtl.pcsn = 输入.pcsn ENDOPTION OPTION 输入.buss_type <> "" cg.buss_type like 输入.buss_type diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 02e684182..6962911b9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -1436,7 +1436,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { .getResultJSONArray(0); //若存在记录,则不可取消该出库明细对应的任何分配记录 if (dtl.size() != 0) { - throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + throw new BadRequestException("存在出库明细对应任务下发、执行中或完成!"); } double plan_qty = dis.getDoubleValue("plan_qty"); //更新库存 @@ -1565,7 +1565,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { .getResultJSONArray(0); //若存在记录,则不可取消该出库明细对应的任何分配记录 if (dtl.size() != 0) { - throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + throw new BadRequestException("存在出库明细对应任务下发、执行中或完成!"); } double plan_qty = dis.getDoubleValue("plan_qty"); //更新库存 @@ -4143,6 +4143,8 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { WQLObject sectTab = WQLObject.getWQLObject("st_ivt_sectattr"); // 子卷包装关系表 WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); + //包装关系出入库记录表 + WQLObject sub_record = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord"); String iostorinv_id = form.getString("iostorinv_id"); String currentUserId = SecurityUtils.getCurrentUserId(); @@ -4239,6 +4241,15 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } subTab.update(jsonSub); + //插入包装关系出入库记录表 + jsonSub.put("bill_code",jo_mst.getString("bill_code")); + jsonSub.put("bill_id",jo_mst.getString("iostorinv_id")); + jsonSub.put("bill_type",jo_mst.getString("bill_type")); + jsonSub.put("io_type","1"); + jsonSub.put("insert_time",DateUtil.now()); + jsonSub.put("record_id",IdUtil.getSnowflake(1, 1).nextId()); + sub_record.insert(jsonSub); + // 更新分配明细执行状态为 - 99 JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0); jsonDis.put("work_status", "99"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql index 7a3fab5a6..9a1c43722 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql @@ -434,7 +434,7 @@ WHERE 1 = 1 AND dis.work_status = '01' - AND task.task_status IN ('02', '03', '99') + AND task.task_status IN ('02', '03','05','06','99') OPTION 输入.iostorinvdtl_id <> "" dis.iostorinvdtl_id = 输入.iostorinvdtl_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/InBillQueryController.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/InBillQueryController.java index 5fa3fd9ca..6f516bd06 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/InBillQueryController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/InBillQueryController.java @@ -41,6 +41,13 @@ public class InBillQueryController { return new ResponseEntity<>(inBillQueryService.queryAll(whereJson, page, product_area), HttpStatus.OK); } + @GetMapping(value = "/query2") + @Log("查询") + @ApiOperation("查询") + public ResponseEntity query2(@RequestParam Map whereJson, Pageable page, String[] product_area) { + return new ResponseEntity<>(inBillQueryService.queryAll2(whereJson, page, product_area), HttpStatus.OK); + } + @PostMapping @Log("新增") @ApiOperation("新增") @@ -71,4 +78,11 @@ public class InBillQueryController { public void download(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException { inBillQueryService.download(map, response, product_area); } + + @Log("导出数据2") + @ApiOperation("导出数据2") + @GetMapping(value = "/download2") + public void download2(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException { + inBillQueryService.download2(map, response, product_area); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/OutBillQueryController.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/OutBillQueryController.java index d46f630d0..e3617ac97 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/OutBillQueryController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/rest/OutBillQueryController.java @@ -40,6 +40,13 @@ public class OutBillQueryController { return new ResponseEntity<>(outBillQueryService.queryAll(whereJson, page, bill_types), HttpStatus.OK); } + @GetMapping(value = "/query2") + @Log("新查询") + @ApiOperation("新查询") + public ResponseEntity query2(@RequestParam Map whereJson, Pageable page, String[] bill_types) { + return new ResponseEntity<>(outBillQueryService.queryAll2(whereJson, page, bill_types), HttpStatus.OK); + } + @PostMapping @Log("新增") @ApiOperation("新增") @@ -67,7 +74,14 @@ public class OutBillQueryController { @Log("导出数据") @ApiOperation("导出数据") @GetMapping(value = "/download") - public void download(@RequestParam Map map, HttpServletResponse response) throws IOException { - outBillQueryService.download(map, response); + public void download(@RequestParam Map map, HttpServletResponse response, String[] bill_types) throws IOException { + outBillQueryService.download(map, response,bill_types); + } + + @Log("导出数据2") + @ApiOperation("导出数据2") + @GetMapping(value = "/download2") + public void download2(@RequestParam Map map, HttpServletResponse response, String[] bill_types) throws IOException { + outBillQueryService.download2(map, response,bill_types); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/InBillQueryService.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/InBillQueryService.java index af2a08899..b9b7706c4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/InBillQueryService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/InBillQueryService.java @@ -26,6 +26,8 @@ public interface InBillQueryService { */ Map queryAll(Map whereJson, Pageable page, String[] product_area); + Map queryAll2(Map whereJson, Pageable page, String[] product_area); + /** * 查询所有数据不分页 * @@ -56,4 +58,6 @@ public interface InBillQueryService { void deleteAll(Long[] ids); void download(Map map, HttpServletResponse response, String[] product_area) throws IOException; + + void download2(Map map, HttpServletResponse response, String[] product_area) throws IOException; } \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/OutBillQueryService.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/OutBillQueryService.java index 062c7e9a8..b1af33782 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/OutBillQueryService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/OutBillQueryService.java @@ -26,6 +26,8 @@ public interface OutBillQueryService { */ Map queryAll(Map whereJson, Pageable page, String[] bill_types); + Map queryAll2(Map whereJson, Pageable page, String[] bill_types); + /** * 查询所有数据不分页 * @@ -55,5 +57,7 @@ public interface OutBillQueryService { */ void deleteAll(Long[] ids); - void download(Map map, HttpServletResponse response) throws IOException; + void download(Map map, HttpServletResponse response, String[] bill_types) throws IOException; + + void download2(Map map, HttpServletResponse response, String[] bill_types) throws IOException; } \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java index 692a2a96b..b8362afa2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java @@ -51,6 +51,7 @@ public class InBillQueryServiceImpl implements InBillQueryService { String end_time = MapUtil.getStr(whereJson, "end_time"); String is_virtual = MapUtil.getStr(whereJson, "is_virtual"); String classes = MapUtil.getStr(whereJson, "classes"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); String is_all = MapUtil.getStr(whereJson, "is_all"); String thickness_request = MapUtil.getStr(whereJson, "thickness_request"); @@ -65,6 +66,69 @@ public class InBillQueryServiceImpl implements InBillQueryService { map.put("with", with); map.put("is_virtual", is_virtual); map.put("classes", classes); + map.put("pcsn", pcsn); + map.put("thickness_request", thickness_request); + + // 处理时间 + if (ObjectUtil.isNotEmpty(begin_time) && ObjectUtil.isNotEmpty(end_time)) { + String begin_time_today = begin_time.substring(0, 10); + String end_time_today = end_time.substring(0, 10); + + + // 开始时间 + String today_begin_time = begin_time_today + " 08:00:00"; + + // 结束时间:19:59:59 + DateTime parse = DateUtil.parse(end_time_today); + String substring = DateUtil.offsetDay(parse, 1).toString().substring(0, 10); + + String today_end_time = substring + " 07:59:59"; + + map.put("begin_time", today_begin_time); + map.put("end_time", today_end_time); + } + + + if (ObjectUtil.isNotEmpty(product_area)) { + String areas = "("; + for (int i = 0; i < product_area.length; i++) { + if (i != product_area.length - 1) { + areas += "'" + product_area[i] + "',"; + } else { + areas += "'" + product_area[i] + "')"; + } + } + map.put("areas", areas); + } + JSONObject json = WQL.getWO("ST_IVT_INBILLQUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mst.confirm_time DESC,dis.box_no"); + return json; + } + + @Override + public Map queryAll2(Map whereJson, Pageable page, String[] product_area) { + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String bill_type = MapUtil.getStr(whereJson, "bill_type"); + String with = MapUtil.getStr(whereJson, "with"); // 厚度*幅宽 + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String is_virtual = MapUtil.getStr(whereJson, "is_virtual"); + String classes = MapUtil.getStr(whereJson, "classes"); + String is_all = MapUtil.getStr(whereJson, "is_all"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String thickness_request = MapUtil.getStr(whereJson, "thickness_request"); + + JSONObject map = new JSONObject(); + if ("0".equals(is_all)) { + map.put("flag", "5"); + } else { + map.put("flag", "6"); + } + map.put("stor_id", stor_id); + map.put("bill_type", bill_type); + map.put("with", with); + map.put("pcsn", pcsn); + map.put("is_virtual", is_virtual); + map.put("classes", classes); map.put("thickness_request", thickness_request); // 处理时间 @@ -148,6 +212,7 @@ public class InBillQueryServiceImpl implements InBillQueryService { String end_time = MapUtil.getStr(map, "end_time"); String is_virtual = MapUtil.getStr(map, "is_virtual"); String classes = MapUtil.getStr(map, "classes"); + String pcsn = MapUtil.getStr(map, "pcsn"); String is_all = MapUtil.getStr(map, "is_all"); String thickness_request = MapUtil.getStr(map, "thickness_request"); @@ -160,6 +225,7 @@ public class InBillQueryServiceImpl implements InBillQueryService { mapParam.put("stor_id", stor_id); mapParam.put("bill_type", bill_type); mapParam.put("with", with); + mapParam.put("pcsn", pcsn); mapParam.put("is_virtual", is_virtual); mapParam.put("classes", classes); mapParam.put("thickness_request", thickness_request); @@ -260,4 +326,129 @@ public class InBillQueryServiceImpl implements InBillQueryService { } FileUtil.downloadExcel(list, response); } + + @Override + public void download2(Map map, HttpServletResponse response, String[] product_area) throws IOException { + String stor_id = MapUtil.getStr(map, "stor_id"); + String bill_type = MapUtil.getStr(map, "bill_type"); + String with = MapUtil.getStr(map, "with"); // 厚度*幅宽 + String begin_time = MapUtil.getStr(map, "begin_time"); + String end_time = MapUtil.getStr(map, "end_time"); + String is_virtual = MapUtil.getStr(map, "is_virtual"); + String classes = MapUtil.getStr(map, "classes"); + String pcsn = MapUtil.getStr(map, "pcsn"); + String is_all = MapUtil.getStr(map, "is_all"); + String thickness_request = MapUtil.getStr(map, "thickness_request"); + + JSONObject mapParam = new JSONObject(); + if ("0".equals(is_all)) { + mapParam.put("flag", "5"); + } else { + mapParam.put("flag", "6"); + } + mapParam.put("stor_id", stor_id); + mapParam.put("bill_type", bill_type); + mapParam.put("with", with); + mapParam.put("pcsn", pcsn); + mapParam.put("is_virtual", is_virtual); + mapParam.put("classes", classes); + mapParam.put("thickness_request", thickness_request); + + // 处理时间 + if (ObjectUtil.isNotEmpty(begin_time) && ObjectUtil.isNotEmpty(end_time)) { + String begin_time_today = begin_time.substring(0, 10); + String end_time_today = end_time.substring(0, 10); + + + // 开始时间 + String today_begin_time = begin_time_today + " 08:00:00"; + + // 结束时间:19:59:59 + DateTime parse = DateUtil.parse(end_time_today); + String substring = DateUtil.offsetDay(parse, 1).toString().substring(0, 10); + + String today_end_time = substring + " 07:59:59"; + + mapParam.put("begin_time", today_begin_time); + mapParam.put("end_time", today_end_time); + } + + if (ObjectUtil.isNotEmpty(product_area)) { + String areas = "("; + for (int i = 0; i < product_area.length; i++) { + if (i != product_area.length - 1) { + areas += "'" + product_area[i] + "',"; + } else { + areas += "'" + product_area[i] + "')"; + } + } + mapParam.put("areas", areas); + } + + JSONArray resultJSONArray = WQL.getWO("ST_IVT_INBILLQUERY").addParamMap(mapParam).process().getResultJSONArray(0); + List> list = new ArrayList<>(); + if ("0".equals(is_all)){ + for (int i = 0; i < resultJSONArray.size(); i++) { + JSONObject json = resultJSONArray.getJSONObject(i); + Map mp = new LinkedHashMap<>(); + mp.put("日期", (json.getString("confirm_time_class").substring(0,10)).replace("-","/")); + mp.put("班次", json.getString("classes")); + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("客户编码", json.getString("customer_name")); + mp.put("规格", json.getString("thickness_request")); + mp.put("尺寸(mm)(客户要求幅宽)", json.getString("width_standard")); + mp.put("实际尺寸(mm)(实际幅宽)", json.getString("width")); + String box_name = json.getString("box_name"); + if (StrUtil.isNotEmpty(box_name)){ + String[] s = box_name.split("木箱"); + String s1 = s[1]; + String[] split = s1.split("\\|"); + mp.put("木箱规格/尺寸", split[1]+"*"+split[2]); + }else { + mp.put("木箱规格/尺寸", ""); + } + mp.put("毛重合计", NumberUtil.round(StrUtil.isEmpty(json.getString("box_weight")) ? "0" : json.getString("box_weight"), 1)); + mp.put("净重(KG)", NumberUtil.round(StrUtil.isEmpty(json.getString("net_weight")) ? "0" : json.getString("net_weight"), 1)); + mp.put("卷数", json.getString("quanlity_in_box")); + mp.put("品级", "A"); + mp.put("小卷号", json.getString("pcsn")); + mp.put("箱号", json.getString("box_no")); + mp.put("母卷号", json.getString("parent_container_name")); + mp.put("基重(g/m³)(面密度)", NumberUtil.round(StrUtil.isEmpty(json.getString("mass_per_unit_area")) ? "0" : json.getString("mass_per_unit_area"), 1)); + mp.put("居中度(mm)", "±1"); + mp.put("塌边(mm)", "≤10"); + mp.put("米数(长度)", NumberUtil.round(StrUtil.isEmpty(json.getString("length")) ? "0" : json.getString("length"), 1)); + mp.put("管件类型", json.getString("paper_type")); + mp.put("管件编码", json.getString("paper_code")); + mp.put("管件描述", json.getString("paper_name")); + mp.put("生产实际抗拉值", json.getString("actual_value")); + mp.put("内控标准抗拉下限", json.getString("standard_limit")); + mp.put("客户需求抗拉下限", json.getString("demand_limit")); + mp.put("生产日期", json.getString("date_of_production").replace("-","/")); + mp.put("入库日期", json.getString("confirm_time").substring(0,10).replace("-","/")); + list.add(mp); + } + }else { + for (int i = 0; i < resultJSONArray.size(); i++) { + JSONObject json = resultJSONArray.getJSONObject(i); + Map mp = new LinkedHashMap<>(); + mp.put("序号", String.valueOf(i+1)); + mp.put("日期", (json.getString("confirm_time_class").substring(0,10)).replace("-","/")); + mp.put("班次", json.getString("classes")); + mp.put("库区", json.getString("sect_name")); + mp.put("客户编码", json.getString("customer_name")); + mp.put("销售订单及行号", json.getString("sale_order_name")); + mp.put("生产日期", json.getString("date_of_production").replace("-","/")); + mp.put("箱号", json.getString("box_no")); + mp.put("生产批号", (json.getString("confirm_time").substring(0,10)).replace("-","").trim()); + mp.put("规格", json.getString("specification")); + mp.put("净重", NumberUtil.round(json.getString("net_weight"), 1)); + mp.put("等级", "A"); + mp.put("备注", ""); + list.add(mp); + } + } + FileUtil.downloadExcel(list, response); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java index 0d6b3051b..591517987 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java @@ -42,6 +42,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { String with = MapUtil.getStr(whereJson, "with"); // 厚度*幅宽 String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); String customer_name = MapUtil.getStr(whereJson, "customer_name"); JSONObject map = new JSONObject(); @@ -56,6 +57,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { } map.put("with",with); map.put("begin_time",begin_time); + map.put("pcsn",pcsn); map.put("end_time",end_time); if (ObjectUtil.isNotEmpty(customer_name)) map.put("customer_name","%"+customer_name+"%"); @@ -63,6 +65,36 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { return json; } + @Override + public Map queryAll2(Map whereJson, Pageable page, String[] bill_types) { + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + + String with = MapUtil.getStr(whereJson, "with"); // 厚度*幅宽 + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String customer_name = MapUtil.getStr(whereJson, "customer_name"); + + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("stor_id",stor_id); + if (ObjectUtil.isNotEmpty(bill_types)){ + StringJoiner joiner = new StringJoiner(",","(",")"); + for (String type : bill_types){ + joiner.add("'"+type+"'"); + } + map.put("bill_type",joiner.toString()); + } + map.put("with",with); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("pcsn",pcsn); + if (ObjectUtil.isNotEmpty(customer_name)) map.put("customer_name","%"+customer_name+"%"); + + JSONObject json = WQL.getWO("ST_IVT_OUTBILLQUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "mst.input_time DESC,dis.box_no"); + return json; + } + @Override public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("sch_base_point"); @@ -101,20 +133,91 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { } @Override - public void download(Map map, HttpServletResponse response) throws IOException { + public void download(Map map, HttpServletResponse response, String[] bill_types) throws IOException { String stor_id = MapUtil.getStr(map, "stor_id"); String bill_type = MapUtil.getStr(map, "bill_type"); String with = MapUtil.getStr(map, "with"); // 厚度*幅宽 String begin_time = MapUtil.getStr(map, "begin_time"); + String pcsn = MapUtil.getStr(map, "pcsn"); String end_time = MapUtil.getStr(map, "end_time"); String customer_name = MapUtil.getStr(map, "customer_name"); JSONObject mapParam = new JSONObject(); mapParam.put("flag", "1"); mapParam.put("stor_id",stor_id); - mapParam.put("bill_type",bill_type); + if (ObjectUtil.isNotEmpty(bill_types)){ + StringJoiner joiner = new StringJoiner(",","(",")"); + for (String type : bill_types){ + joiner.add("'"+type+"'"); + } + mapParam.put("bill_type",joiner.toString()); + } mapParam.put("with",with); mapParam.put("begin_time",begin_time); + mapParam.put("pcsn",pcsn); + mapParam.put("end_time",end_time); + if (ObjectUtil.isNotEmpty(customer_name)) mapParam.put("customer_name","%"+customer_name+"%"); + + JSONArray resultJSONArray = WQL.getWO("ST_IVT_OUTBILLQUERY").addParamMap(mapParam).process().getResultJSONArray(0); + + List> list = new ArrayList<>(); + for (int i = 0; i < resultJSONArray.size(); i++) { + JSONObject json = resultJSONArray.getJSONObject(i); + Map mp = new LinkedHashMap<>(); + + mp.put("仓库", json.getString("stor_name")); + if (ObjectUtil.isNotEmpty(bill_type) && bill_type.equals("1004")){ + mp.put("移入仓库", json.getString("in_stor_name")); + } + mp.put("库区", json.getString("sect_name")); + mp.put("交货单号", json.getString("vbeln")); + mp.put("物流公司", json.getString("cust_name")); + mp.put("运费", json.getString("estimated_freight")); + mp.put("木箱号", json.getString("box_no")); + mp.put("物料编码", json.getString("material_code")); + mp.put("物料名称", json.getString("material_name")); + mp.put("子卷号", json.getString("pcsn")); + mp.put("sap批次", json.getString("sap_pcsn")); + mp.put("净重", json.getString("net_weight")); + mp.put("单位", json.getString("qty_unit_name")); + mp.put("客户编码", json.getString("customer_name")); + mp.put("发货客户名称", json.getString("customer_description")); + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("出库日期", json.getString("input_time")); + mp.put("产品规格", json.getString("width")); + mp.put("产品厚度", json.getString("thickness")); + mp.put("单位面积", json.getString("mass_per_unit_area")); + mp.put("制单人", json.getString("input_optname")); + mp.put("备注", json.getString("remark")); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + + } + + @Override + public void download2(Map map, HttpServletResponse response, String[] bill_types) throws IOException { + String stor_id = MapUtil.getStr(map, "stor_id"); + String bill_type = MapUtil.getStr(map, "bill_type"); + String with = MapUtil.getStr(map, "with"); // 厚度*幅宽 + String begin_time = MapUtil.getStr(map, "begin_time"); + String pcsn = MapUtil.getStr(map, "pcsn"); + String end_time = MapUtil.getStr(map, "end_time"); + String customer_name = MapUtil.getStr(map, "customer_name"); + + JSONObject mapParam = new JSONObject(); + mapParam.put("flag", "2"); + mapParam.put("stor_id",stor_id); + if (ObjectUtil.isNotEmpty(bill_types)){ + StringJoiner joiner = new StringJoiner(",","(",")"); + for (String type : bill_types){ + joiner.add("'"+type+"'"); + } + mapParam.put("bill_type",joiner.toString()); + } + mapParam.put("with",with); + mapParam.put("pcsn",pcsn); + mapParam.put("begin_time",begin_time); mapParam.put("end_time",end_time); if (ObjectUtil.isNotEmpty(customer_name)) mapParam.put("customer_name","%"+customer_name+"%"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql index 591ec7b12..eceac5df6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql @@ -19,6 +19,7 @@ 输入.with TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string + 输入.pcsn TYPEAS s_string 输入.is_virtual TYPEAS s_string 输入.classes TYPEAS s_string 输入.thickness_request TYPEAS s_string @@ -110,7 +111,12 @@ LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id WHERE b.io_type = '0' - AND b.bill_type = 输入.bill_type + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION AND b.bill_status = '99' GROUP BY pcsn @@ -236,7 +242,12 @@ LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id WHERE b.io_type = '0' - AND b.bill_type = 输入.bill_type + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION AND b.bill_status = '99' GROUP BY pcsn @@ -365,7 +376,12 @@ LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id WHERE b.io_type = '0' - AND b.bill_type = 输入.bill_type + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION AND b.bill_status = '99' GROUP BY pcsn @@ -493,7 +509,12 @@ LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id WHERE b.io_type = '0' - AND b.bill_type = 输入.bill_type + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION AND b.bill_status = '99' GROUP BY pcsn @@ -559,4 +580,298 @@ ENDSELECT ENDPAGEQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "5" + PAGEQUERY + SELECT DISTINCT + mst.stor_name, + dis.sect_name, + dis.struct_code, + dis.struct_name, + mst.bill_type, + dis.box_no, + mater.material_code, + mater.material_name, + mb.material_name AS box_name, + dis.pcsn, + sub.sap_pcsn, + sub.net_weight, + dis.qty_unit_name, + sub.customer_name, + sub.quanlity_in_box, + sub.customer_description, + sub.sale_order_name, + mst.input_time, + mst.confirm_time, + sub.date_of_production, + mst.input_optname, + sub.width, + case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_material when plan.paper_tube_or_FRP = '2' then plan.FRP_material end AS paper_code, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_description when plan.paper_tube_or_FRP = '2' then plan.FRP_description end AS paper_name, + sub.thickness, + sub.box_weight, + sub.length, + sub.thickness_request, + sub.width_standard, + sub.mass_per_unit_area, + sub.demand_limit, + sub.standard_limit, + sub.actual_value, + (case when plan.parent_container_name <> '' then plan.parent_container_name else plan.restruct_container_name end) AS parent_container_name, + mst.remark, + (case when DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '19:59:59' then '白班' + when (( + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='20:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + OR + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + )) then '晚班' end) AS classes, + CONCAT( sub.box_length,'*',sub.box_width,'*',sub.box_high) AS box_size, + CASE + + WHEN DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >= '08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + THEN mst.confirm_time + WHEN DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >= '00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + THEN DATE_SUB(mst.confirm_time,INTERVAL 1 day) + END AS confirm_time_class + + FROM + ( + SELECT + MIN( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '0' + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + + UNION + + SELECT + MIN( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '0' + OPTION 输入.bill_type = "0001" + b.bill_type = '0007' + ENDOPTION + OPTION 输入.bill_type = "0001" + (b.bill_type = '0001' OR b.bill_type = '0007') + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + ) AS c + LEFT JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id + LEFT JOIN st_ivt_sectattr sect ON sect.sect_id = dis.sect_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + INNER JOIN pdm_bi_subpackagerelationrecord sub ON sub.container_name = dis.pcsn AND sub.package_box_sn = dis.box_no AND sub.bill_id = dis.iostorinv_id + LEFT JOIN (SELECT + container_name, + MAX(paper_tube_or_FRP) AS paper_tube_or_FRP, + MAX(paper_tube_material) AS paper_tube_material, + MAX(paper_tube_description) AS paper_tube_description, + MAX(paper_tube_model) AS paper_tube_model, + MAX(FRP_material) AS FRP_material, + MAX(parent_container_name) AS parent_container_name, + MAX(restruct_container_name) AS restruct_container_name, + MAX(FRP_description) AS FRP_description, + MAX(FRP_model) AS FRP_model + FROM + pdm_bi_slittingproductionplan plan1 + WHERE + plan1.is_delete = '0' + GROUP BY container_name) plan ON plan.container_name = sub.container_name + LEFT JOIN md_me_materialbase mb ON mb.material_code = sub.box_type + WHERE + mst.io_type = '0' + AND mst.is_delete = '0' + AND mst.bill_status = '99' + + OPTION 输入.stor_id <> "" + mst.stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.is_virtual = "0" + sect.sect_type_attr <> '09' + ENDOPTION + OPTION 输入.is_virtual = "1" + sect.sect_type_attr = '09' + ENDOPTION + OPTION 输入.areas <> "" + LEFT(sub.container_name,2) IN 输入.areas + ENDOPTION + OPTION 输入.thickness_request <> "" + sub.thickness_request = 输入.thickness_request + ENDOPTION + + OPTION 输入.bill_type = "0001" + IFNULL(sub.sub_type,'') = '' + ENDOPTION + + OPTION 输入.bill_type = "0007" + sub.sub_type = '2' + ENDOPTION + + + OPTION 输入.begin_time <> "" + mst.confirm_time >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + mst.confirm_time <= 输入.end_time + ENDOPTION + + OPTION 输入.with <> "" + CONCAT( sub.thickness_request,'*',sub.width) = 输入.with + ENDOPTION + + OPTION 输入.classes = "1" + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '19:59:59' + ENDOPTION + + OPTION 输入.classes = "2" + ( + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='20:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + OR + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + ) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "6" + PAGEQUERY + SELECT DISTINCT + MAX(mst.stor_name) AS stor_name, + MAX(dis.sect_name) AS sect_name, + MAX(dis.struct_code) AS struct_code, + MAX(dis.struct_name) AS struct_name, + MAX(mst.bill_type) AS bill_type, + MAX(mater.material_code) AS material_code, + MAX(mater.material_name) AS material_name, + MAX(dis.qty_unit_name) AS qty_unit_name, + MAX(sub.customer_description) AS customer_description, + MAX(mst.input_optname) AS input_optname, + MAX(mst.remark) AS remark, + mst.iostorinv_id, + dis.box_no, + MAX(sub.customer_name) AS customer_name, + MAX(sub.sale_order_name) AS sale_order_name, + MAX(sub.date_of_production) AS date_of_production, + SUM(sub.net_weight) AS net_weight, + MAX(mst.input_time) AS input_time, + MAX(mst.confirm_time) AS confirm_time, + CONCAT_WS('',MAX(sub.thickness_request),'*',MAX(sub.width)) AS specification, + CONCAT( MAX(sub.box_length),'*',MAX(sub.box_width),'*',MAX(sub.box_high)) AS box_size, + (case when DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '19:59:59' then '白班' + when (( + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='20:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + OR + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + )) then '晚班' end) AS classes, + CASE + WHEN DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >= '08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + THEN mst.confirm_time + WHEN DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >= '00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + THEN DATE_SUB(mst.confirm_time,INTERVAL 1 day) + END AS confirm_time_class + + FROM + ( + SELECT + MIN( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '0' + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + ) AS c + LEFT JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id + LEFT JOIN st_ivt_sectattr sect ON sect.sect_id = dis.sect_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + INNER JOIN pdm_bi_subpackagerelationrecord sub ON sub.container_name = dis.pcsn AND sub.package_box_sn = dis.box_no AND sub.bill_id = dis.iostorinv_id + WHERE + mst.io_type = '0' + AND mst.is_delete = '0' + AND mst.bill_status = '99' + + OPTION 输入.stor_id <> "" + mst.stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.is_virtual = "0" + sect.sect_type_attr <> '09' + ENDOPTION + OPTION 输入.is_virtual = "1" + sect.sect_type_attr = '09' + ENDOPTION + OPTION 输入.areas <> "" + LEFT(sub.container_name,2) IN 输入.areas + ENDOPTION + OPTION 输入.thickness_request <> "" + sub.thickness_request = 输入.thickness_request + ENDOPTION + OPTION 输入.bill_type <> "" + mst.bill_type = 输入.bill_type + ENDOPTION + + OPTION 输入.begin_time <> "" + mst.confirm_time >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + mst.confirm_time <= 输入.end_time + ENDOPTION + + OPTION 输入.with <> "" + CONCAT( sub.thickness_request,'*',sub.width) = 输入.with + ENDOPTION + + OPTION 输入.classes = "1" + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '19:59:59' + ENDOPTION + + OPTION 输入.classes = "2" + ( + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='20:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '23:59:59' + OR + DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='00:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '07:59:59' + ) + ENDOPTION + GROUP BY + mst.iostorinv_id, + dis.box_no + + ENDSELECT + ENDPAGEQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql index f615dba74..0832cde63 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql @@ -17,6 +17,7 @@ 输入.stor_id TYPEAS s_string 输入.bill_type TYPEAS f_string 输入.with TYPEAS s_string + 输入.pcsn TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.customer_name TYPEAS s_string @@ -74,7 +75,22 @@ mst.remark, stor.stor_name AS in_stor_name FROM - st_ivt_iostorinvdis dis + ( + SELECT + MAX( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '1' + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + ) AS c + LEFT JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id LEFT JOIN st_ivt_iostorinvdtl dtl ON dtl.iostorinvdtl_id = dis.iostorinvdtl_id LEFT JOIN md_cs_transportationbase base ON base.cust_code = mst.trans_code @@ -127,4 +143,107 @@ ENDSELECT ENDPAGEQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + mst.stor_name, + dis.sect_name, + mst.bill_type, + dtl.vbeln, + base.cust_name, + mst.estimated_freight, + dis.box_no, + mater.material_code, + mater.material_name, + dis.pcsn, + sub.sap_pcsn, + sub.net_weight, + dis.qty_unit_name, + sub.customer_name, + sub.customer_description, + sub.sale_order_name, + mst.input_time, + sub.width, + sub.thickness, + sub.mass_per_unit_area, + mst.input_optname, + case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_material when plan.paper_tube_or_FRP = '2' then plan.FRP_material end AS paper_code, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_description when plan.paper_tube_or_FRP = '2' then plan.FRP_description end AS paper_name, + mst.remark, + stor.stor_name AS in_stor_name + FROM + ( + SELECT + MAX( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '1' + OPTION 输入.bill_type <> "" + b.bill_type = 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + ) AS c + LEFT JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id + LEFT JOIN st_ivt_iostorinvdtl dtl ON dtl.iostorinvdtl_id = dis.iostorinvdtl_id + LEFT JOIN md_cs_transportationbase base ON base.cust_code = mst.trans_code + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + LEFT JOIN st_ivt_bsrealstorattr stor ON stor.stor_id = mst.out_stor_id + INNER JOIN pdm_bi_subpackagerelationrecord sub ON sub.container_name = dis.pcsn AND sub.package_box_sn = dis.box_no AND sub.bill_id = mst.iostorinv_id + LEFT JOIN (SELECT + container_name, + MAX(paper_tube_or_FRP) AS paper_tube_or_FRP, + MAX(paper_tube_material) AS paper_tube_material, + MAX(paper_tube_description) AS paper_tube_description, + MAX(paper_tube_model) AS paper_tube_model, + MAX(FRP_material) AS FRP_material, + MAX(FRP_description) AS FRP_description, + MAX(FRP_model) AS FRP_model + FROM + pdm_bi_slittingproductionplan plan1 + WHERE + plan1.is_delete = '0' + GROUP BY container_name) plan ON plan.container_name = sub.container_name + WHERE + mst.io_type = '1' + AND mst.is_delete = '0' + AND mst.bill_status = '99' + + OPTION 输入.stor_id <> "" + mst.stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.bill_type <> "" + mst.bill_type IN 输入.bill_type + ENDOPTION + + OPTION 输入.begin_time <> "" + mst.input_time >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + mst.input_time <= 输入.end_time + ENDOPTION + + OPTION 输入.with <> "" + CONCAT(sub.width,'*',sub.thickness) = 输入.with + ENDOPTION + + OPTION 输入.customer_name <> "" + (sub.customer_name LIKE 输入.customer_name OR + sub.customer_description LIKE 输入.customer_name) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/Dialog.vue b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/Dialog.vue new file mode 100644 index 000000000..beb163763 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/Dialog.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/coolpointivt.js b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/coolpointivt.js index 64fbbcfc3..3bfda7354 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/coolpointivt.js +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/coolpointivt.js @@ -24,4 +24,12 @@ export function edit(data) { }) } -export default { add, edit, del } +export function uploadMes(data) { + return request({ + url: 'api/stIvtCoolpointivt/uploadMes', + method: 'post', + data + }) +} + +export default { add, edit, del, uploadMes } diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/inventory.vue b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/inventory.vue index c692308e3..dd9922795 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/inventory.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/coolpointivt/inventory.vue @@ -141,7 +141,19 @@ - + + + 回传MES + + @@ -282,6 +294,7 @@ + @@ -292,12 +305,13 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' +import Dialog from '@/views/wms/pdm/ivt/coolpointivt/Dialog.vue' const defaultForm = { ivt_id: null, point_code: null, full_point_code: null, container_name: null, workorder_id: null, full_vehicle_code: null, empty_point_code: null, empty_vehicle_code: null, region_id: null, pcsn: null, ivt_qty: null, qty_unit_id: null, instorage_time: null, product_area: null, point_location: null, sort_seq: null, is_used: null, remark: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null, full_point_status: null, cool_ivt_status: null, empty_point_status: null } export default { name: 'Inventory', dicts: ['sch_full_point_status', 'sch_empty_point_status', 'sch_cool_ivt_status', 'is_used', 'point_location', 'product_area'], - components: { pagination, crudOperation, rrOperation, udOperation }, + components: { Dialog, pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -319,6 +333,8 @@ export default { return { permission: { }, + dialogShow: false, + openParam: null, rules: { full_point_status: [ { required: true, message: '满轴位状态不能为空', trigger: 'blur' } @@ -340,7 +356,15 @@ export default { [CRUD.HOOK.beforeRefresh]() { return true }, - + uploadMES() { + debugger + const _selectData = this.$refs.table.selection + if (_selectData.length !== 1) { + return this.crud.notify('请选择一个点位进行回传!', CRUD.NOTIFICATION_TYPE.INFO) + } + this.openParam = _selectData[0] + this.dialogShow = true + }, hand(value) { this.crud.toQuery() } diff --git a/lms/nladmin-ui/src/views/wms/st/inStor/change/index.vue b/lms/nladmin-ui/src/views/wms/st/inStor/change/index.vue index bee44b788..071a2a2af 100644 --- a/lms/nladmin-ui/src/views/wms/st/inStor/change/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/inStor/change/index.vue @@ -46,6 +46,15 @@ @keyup.enter.native="crud.toQuery" /> + + + - + + + diff --git a/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue b/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue index 6d5b985d4..c6e36677d 100644 --- a/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue +++ b/lms/nladmin-ui/src/views/wms/stat/inbillquery/index.vue @@ -75,6 +75,14 @@ @keyup.enter.native="crud.toQuery" /> + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + 导出 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + diff --git a/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue index e5caf53ef..7d49f8268 100644 --- a/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue +++ b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index.vue @@ -76,6 +76,15 @@ @keyup.enter.native="crud.toQuery" />
+ + + @@ -189,7 +198,7 @@ export default { crud.downloadLoading = true const data = { 'stor_id': this.crud.query.stor_id, - 'bill_type': this.crud.query.bill_type, + 'bill_types': this.crud.query.bill_types, 'with': this.crud.query.with, 'customer_name': this.crud.query.customer_name } diff --git a/lms/nladmin-ui/src/views/wms/stat/outbillquery/index2.vue b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index2.vue new file mode 100644 index 000000000..413adcd1c --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/stat/outbillquery/index2.vue @@ -0,0 +1,224 @@ + + + +