From 7ca4b885b03953b491fb7b60800274b83da6d698 Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 12 Aug 2022 14:58:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/wms/basedata/master/wql/mdme.xls | Bin 197120 -> 159744 bytes .../pdm/rest/WorkProcedureController.java | 87 --- .../pdm/service/dto/WorkProcedureDto.java | 77 --- .../impl/WorkProcedureServiceImpl.java | 162 ----- .../wms/basedata/st/StoreIvtServiceImpl.java | 4 +- .../st/service/impl/StructivtServiceImpl.java | 19 +- .../wms/basedata/st/wql/QST_STRUCTIVT001.wql | 56 +- .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 267264 -> 236544 bytes .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 233984 -> 233984 bytes .../org/nl/wms/sch/rest/PointController.java | 12 +- .../org/nl/wms/sch/rest/RegionController.java | 82 +++ .../org/nl/wms/sch/service/PointService.java | 10 +- .../org/nl/wms/sch/service/RegionService.java | 76 +++ .../org/nl/wms/sch/service/dto/PointDto.java | 2 +- .../service/dto/RegionDto.java} | 33 +- .../sch/service/impl/PointServiceImpl.java | 24 +- .../sch/service/impl/RegionServiceImpl.java | 153 +++++ .../wms/sch/service/wql/QSCH_BASE_POINT.wql | 16 +- .../nl/wms/sch/service/wql/QSCH_REGION_01.wql | 57 ++ .../nl/wms/sch/service/wql/QSCH_TASK_01.wql | 8 +- .../nl/wms/sch/service/wql/SCH_Point_01.wql | 16 +- .../java/org/nl/wms/sch/service/wql/sch.xls | Bin 208384 -> 168448 bytes .../nl/wms/sch/tasks/CallMaterialTask.java | 145 +---- .../nl/wms/sch/tasks/SendMaterialTask.java | 151 +---- .../main/java/org/nl/wms/st/in/AreaEnum.java | 35 - .../java/org/nl/wms/st/in/BussConstant.java | 15 - .../org/nl/wms/st/in/WorkProcedureEnum.java | 65 -- .../in/rest/WorkprocedureiosController.java | 124 ---- .../in/service/WorkprocedureiosService.java | 105 --- .../in/service/dto/WorkprocedureiosDto.java | 116 ---- .../impl/WorkprocedureiosServiceImpl.java | 310 --------- .../in/service/wql/ST_Workprocedureios_01.wql | 67 -- .../st/inbill/rest/RegionioInController.java | 80 +++ .../st/inbill/service/RegionioInService.java | 81 +++ .../st/inbill/service/dto/RegionioDto.java | 157 +++++ .../service/impl/RegionioInServiceImpl.java | 216 +++++++ .../nl/wms/st/inbill/wql/ST_REGION_IN_01.wql | 115 ++++ .../rest/WorkprocedureiosOutController.java | 145 ----- .../service/WorkprocedureiosOutService.java | 126 ---- .../impl/WorkprocedureiosServiceOutImpl.java | 362 ----------- .../service/wql/ST_WorkprocedureiosOut_01.wql | 101 --- .../outbill/rest/RegionioOutController.java | 84 +++ .../outbill/service/RegionioOutService.java} | 55 +- .../service/impl/RegionioOutServiceImpl.java | 227 +++++++ .../wms/st/outbill/wql/ST_REGION_OUT_01.wql | 147 +++++ .../src/test/java/org/nl/Test3.java | 6 +- mes/qd/src/api/wms/pdm/workprocedure.js | 9 +- mes/qd/src/api/wms/sch/point.js | 9 +- mes/qd/src/api/wms/sch/region.js | 35 + mes/qd/src/api/wms/st/in/workprocedureios.js | 81 --- mes/qd/src/api/wms/st/inbill/regionioIn.js | 35 + .../src/api/wms/st/out/workprocedureiosOut.js | 89 --- mes/qd/src/api/wms/st/outbill/regionioOut.js | 35 + .../wms/basedata/pdm/workProcedure/index.vue | 162 ----- .../src/views/wms/basedata/st/ivt/index.vue | 339 +--------- mes/qd/src/views/wms/pub/MaterDialog.vue | 12 +- .../PointDialog.vue} | 15 +- mes/qd/src/views/wms/sch/point/index.vue | 26 +- mes/qd/src/views/wms/sch/region/index.vue | 163 +++++ mes/qd/src/views/wms/sch/task/index.vue | 6 +- mes/qd/src/views/wms/st/in/MaterDialog.vue | 155 ----- mes/qd/src/views/wms/st/in/index.vue | 538 --------------- mes/qd/src/views/wms/st/inbill/index.vue | 449 +++++++++++++ .../src/views/wms/st/out/StartPointDialog.vue | 200 ------ mes/qd/src/views/wms/st/out/index.vue | 611 ------------------ .../wms/st/{out => outbill}/MaterDialog.vue | 29 +- mes/qd/src/views/wms/st/outbill/index.vue | 451 +++++++++++++ 67 files changed, 2868 insertions(+), 4510 deletions(-) delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/WorkProcedureController.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/dto/WorkProcedureDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WorkProcedureServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{st/out/service/dto/WorkprocedureDto.java => sch/service/dto/RegionDto.java} (50%) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/AreaEnum.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/BussConstant.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/WorkProcedureEnum.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/WorkprocedureiosController.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/WorkprocedureiosService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/dto/WorkprocedureiosDto.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/WorkprocedureiosServiceImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/wql/ST_Workprocedureios_01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/WorkprocedureiosOutController.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/WorkprocedureiosOutService.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/wql/ST_WorkprocedureiosOut_01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{basedata/pdm/service/WorkProcedureService.java => st/outbill/service/RegionioOutService.java} (50%) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql create mode 100644 mes/qd/src/api/wms/sch/region.js delete mode 100644 mes/qd/src/api/wms/st/in/workprocedureios.js create mode 100644 mes/qd/src/api/wms/st/inbill/regionioIn.js delete mode 100644 mes/qd/src/api/wms/st/out/workprocedureiosOut.js create mode 100644 mes/qd/src/api/wms/st/outbill/regionioOut.js delete mode 100644 mes/qd/src/views/wms/basedata/pdm/workProcedure/index.vue rename mes/qd/src/views/wms/{st/in/EndPointDialog.vue => pub/PointDialog.vue} (90%) create mode 100644 mes/qd/src/views/wms/sch/region/index.vue delete mode 100644 mes/qd/src/views/wms/st/in/MaterDialog.vue delete mode 100644 mes/qd/src/views/wms/st/in/index.vue create mode 100644 mes/qd/src/views/wms/st/inbill/index.vue delete mode 100644 mes/qd/src/views/wms/st/out/StartPointDialog.vue delete mode 100644 mes/qd/src/views/wms/st/out/index.vue rename mes/qd/src/views/wms/st/{out => outbill}/MaterDialog.vue (80%) create mode 100644 mes/qd/src/views/wms/st/outbill/index.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/wql/mdme.xls index fc139ebe2f8993c6b4856905739180a91680de55..bc79183f16ee0348d406c7806b69b66ddaaf6aca 100644 GIT binary patch delta 11244 zcmbta30PA{*Pgjq2!XIDJBXKn0)mhbRuxGIAh@FVDYhzW5GoJ^R8TZQajROvSVmhF zYSmh`bwS0}4b;}HRcftTs}kbkn#q@j2ad z?jW8cFq}wL0pqBXaJg2MhgTZ(jQYAl-YBjMXb?#sY**LJ8|SW@;}x%q^oppX8wV}Ag<2}l=LI-}LJPyvDFP>qaG6z|r@w(X~RKETBSpq6CUJSBEsKtj*pZF~T zp!hEaHNew>I@_eDJRO@P&C&W>b=;)7kArJ``K@$&1J)q6lY~={q7}yIrz}& z?@Lc=PM!L#-#9;|<*MC5898nV2^SxX9Y6kLDc^q&|60zG!c5`J^06le_tZVKd}sCJ ztrpF{Jx#lR<~Vmp<1E?rvE7LD*v|CA*A?UD<@VlsB`e&$X`X{zy*wZP&jS zwlgnqcBJdnW6yUKNXFhiXA>knaa%R?VRpFxPhAu})^*WTCwyMD?(v*;VW(DanfdPY zmz%nbnp3-NcWB?$N0PjM2xXRGd%0aaX9yY=C0vV-m*g&9^i9*vSK&Jr{b+fYanoLp zN)k_RkU2h{P;Q&*z~1irY0xjKq5Y?q4xD0l^Wi%m|LAt6ht|2aikTl&BpoJ=*fIKB zkLPN|{?T{t^~pZ;S`*>dUmE;@Do?&3|yeOtb(v){+Jop=3m@bmGXpBukov~69<*(PL{H1B3} z?uyy_3jb3o{A<+X<9ilfzq}Y!>VHqoKWoc5+I91%?mp{B@9TcIY^6rlD7)eRpVcVE z!cKQT<>}A)hnJw0M^5@LiJg*JdUBtm6DMg_$fto(B}>1$T{m^cdt2}C-E!%LKJEIF zCD*pBxu&$P9=+sn*`V-Yr_y6N)|`=1>nSm|6O8znwbw0`4&i)$a8AL@SWLav#HUuMV7(at~_+eY0O zx9~TIm+PjT-MshSi9WmVe~_=RQg2}ycPFB*f2x~@=BsxQI2MEw-bH97(1|Gs?FYxO z0q9Gh-l+&p;~}&f=$}CI(!g_qlhLIkbkhtWX$C?S;EqlL^)N?Bor%yvpwEF07J{A% z^nj*jAyj99ki`Uq#zTQMKp$8l4T{S~XoUz013J_Sq5K?#8i9Tflm(AvJrSXF8-!AT zZU=fCXg6DgqH+;h3iLyuw}5WQ2OC|%mKveEb_gvgK2uX?&n(Zt@=ox@P;N8Vj5Sr|Y5N|3%$!-YU0UFs2jFcc0;*QX(QiKw_Bhe5(YA&Iy8dd)-UYb=`jy_gED~#GK!CTm!>`+L-N5B(xJ_wATZY%|@W782I$uV# z1^ba5@`u(ox81rwKJpV?ZhJ<}x}G2J)pc1JuDklNM0fBj2VLsQ82%9*LiHp?5FC6mCXP z0S3Cp5`HrwDgeB+S>o&j;|KEsErC=C$pN010{w&}1YmF5RRC8*s)1AssY+Mg9EP{( zzG|LIB!Re}F84|$7egN1smoGb&AnvZ#PwcvWmkU^3U}Q^DE9>f6)&OIE9;)#3vjUj z3rJ3XP^Qjfox6nvOeGpBSRjk~F#`w>T?X&%$iO`VCtQ5tN`4Jp|1_$7**lHvPHj0&I#)vmah*B8uRCZ(=; zAcHMPd0*^G=a|JH%BC)e&dom=dtNi~B-i}YrgOs{0($srdk<-ZG@zh_%d@^yDS zx3fkqJ6*p2e{WQef7K{5z9$Z>U+j+SI_p7dG?%KvgaZ$e-4{_98*MvOIJ zG7;7mDi_$$37TxgmK3KNv0)`=Q>-CLg{2y?p|AoIriE3S zFeS^4m^M;_YK;$u!ZsMOp=G;Gd|E)05gQ7-Wx}*DgFAtqqb&pHV(3L$n8bvsYPb;_ zdQ@)2hO*)fI7GmuO36k6*U$o!5;as{;!~Xxz$QOJv}riW8NwziZs$%~#dp)NCmgVC z(s7a$q2>-+&}{~%WN@2+Y3&6x!YCJTAfzJ8(s3YUYoM%l#zBnf*4<=O#k6B?nJ|QW zkgNUC;vR7zaZ)(Ur0fo>j+zLByfh5SMMDVb}sv6^46gsCxt%OtO!V z1WiY=C=A7*aHK?16bHY(A%&w56b&dCIH7R&MhdtkNCqetZUx9AKuZQWV<5i_^k#r9 zDGGuV0y(6h6ARiwAfxuEEh$(CO#&DVDsk}G8-x-t5CV5NsLMc!nhFJD#)~!wI>W8o6&Q%{c_>gLJF|b(yVKo9;@cq!V50Nm{Qq-5{o^6J2A#X4G!eoyOEcfo*m0YBlF$h`Wpf z-MaFqY#E*M4NB}*?e=u*pw-sA&TQ3Z4(Pnm;jnwO z<{Z&JC%6`4E&ftsL4CgjT+mq~oM5ME%|86?+1&M1gFDZD9^PKG zW`FPP*)I;o&6wu^s)%eGkGs0lJgMN;Tk~q$*;(#b-3>dmojI(GN=ECK&EdS!*Pos@ zYPd)%fTOJGGGXHx!^oFVk(N9RhT|L}@(|n?nt0y8G&d|lY8m!nE(`&jec^(zi*D>K zMr??91g6l81}Cf$8zLTw2@A-{4BVSWk}&V-rcMJ2)`aPjlvDg>B!PT@6>rqx1^_N- zhilv6rgj+iDr)DAiqpIj%1?n-(1%p|V8WH{a6>1VValQwlMcm*F7yr+rJ4N#2n*O0o>gZVqBAceiO(|R zEXl%C!9YtEP63iQ0Xsr54RBJY<+_mt6AZ;HpMWP~RL{-EDSV)r`M58owZ+(#2Z7cz zx?@6tFq-6ODP96&ViRFx(W*F^a0Or=6Q)jUs|nM3o;PAH?Ufc2rsMgn9p9-BFrbU6 z4r{_g0sBx4-A5-%3B~+!0nZ2Oa&a0QZXmdujy+-Un);Ii1=t~}xxYc3&LYDypf#tx z-9q_*shMX+%!C3KL>c*1M{dMi%8zg36SfRHLhI+7#I%OXqsaXgW52Ni)FexR<@a<&Q6`A{Gy!=_@fmDa?g9kf+WG*hv|fTKp9Ijv=j5nDzB zhPaQ~GN-oUjaWqaiS78yjhGKQBzT5lHYCq5P9S)Kfo}l?a%DEQ}%bXB*Q_zYl(L}^}rFCYRFrtJ(jVtN!IsWY)7 zbW@^|q~u`-N3BVXM%?pFI1AJ^%)|r0d`YaqB8OVv9ZT-#;Q*@!BacTdAB`o$im`*| zdEl9*KWe7(cB@QWZi%4H^~D;TL}&BSIrtoh&gupD1f{u)@ij^ltFQ%c6y!xL#K_~& z4`?&ILZiP7dd!Unem+P#@+*O_Mn(VNQ!h9c4FmpTE{p58RpVhivV1jmu6JIIJqmFP z>1)GCHL+na;Yw*791E1;AcB3ZZ{Us8kW# z8)ANCc<*4T1P%_-A#u{)G6?cRLc(KZ!7@Qy=nPTjfLwKYMOrRim{gFKfz@nWT5gfb z@_l8YT$NUwmY!?hJyBbz%2Z|K=cXZkOhP6)GqP~9C^|N^q(EH+F2`0f5~=bEa?^@c zF*d5goGH~^l#`3tVs&25w1qJ-IVg`EIVLeSB?d(Y`A8)ae^wjh%PNZ4B(%#We}YIj z*Lv6pg+Mtt*2Q*6QqpkY;E!#_EVm)44vd3_8Cf2ikYB8tphAVL_wiTzFKt8jc5OI) zW9Q*-QOohYr|XV<{WM=wznN{8Q_hcMB}$GGql7G0oS7aZKGaZgxW~wBRsJEqf;C6` z*&JjhVMnTWvk?(yd~C+?h%}qplH<=xDgqkK8o>ib%`u-FvCt`2cr+fliP>9Xw&y?x z>0pOOQAIFcdZLGdA6ufyDP}qHz(M@j{7g0>tNaLesH&ux%{jsmdE!`tyxG29H^g~GMU!$bi}k;XXO|uj9}we- z3*)jZYQ&d$;wz{|{0VodxU@#BRqJcSS4oYyMqDXYS!im+jcyth$US)Pi*Mz!IX#xJ z`a$pd&y-)jB2X1yLA(t&ws5YYZ#E@OPG^;Bl$WlKR+j{&XqDM%`4dz=wH0n6VVYSj zr;+Df_ZS`DyJyR(gAHG}9e6OHF3qgR%anwCZBB7cT5is?tDM;*MrY*YM8 z#B&B~5-#J~{6h8ADtAu)Nut~;=CISK!YMPGoe_u z)x0}LTU_Lm;~S7KubeF9c&8?@WxQ)hbD9@$;P6s6MrSsO`vCvc-8|?Y3-ifPriG6_&|cS z?1)Vzlo9Rq6bA)t(!9X)uxv5*X6jUxYcg3MosSFxe^#94Q^^nA)uiFolrK;9Q1jHh9A1!b22U>! z?^xUO?SrFu0(+|da?(Vhy)4l56u^5O+AEI7u`jTb z*bPU`p`Lij!=T|vj9VnC{LHlQ=Q6~4r{7D=KIQn6>T|PK1v=?mvuWDqEt|$nZJ%W(!V|nG zpSFgX#ur2VPdktofGws2KMmppxQs8_mtAGTu`T^%)W!Iz=sebH=qID|kc%|SwKG`eWO2sLU)#vmsSLnxnIAb`>oGM2GkTpfw~S0Ebzw z0=U}5)|EB;8@>XQ%>mfSj%wC{Xa}U7tt#i6gM+Dnrf-3H1kzDR#~>YtbOI8UeGl{` zq*JD6o&1W#oCi$TnHo9!7_xV(0hKvp|ZyuY9%>R}J`GCwE)erxS z`4iq))+;|}HbYEYG!ix=)GZb95P7+g=`Z3MTx`f)msG^(lDJJwUt;|Q^RrI7S4+Bl z%^WnR-(X%PEF6ak?uMOx=+{T6lAaG1xQJs6y`d76*Z$Hq{$XcTaz+5*d=gAW72Kp@ z9V6ehmAQ#sp0OJp+{L(@@lUtBrW4zXxqfSq^BTd(?COI|0G5%!gG`i0FS>nI^q}x} zkvZE3C*ye%=>XKF5o`OZ(1pVFJEX|^I5+4FH_*RwBJ^YLK3}+d+HCispR!a#dWMC} zu-+I_Y7HbrV~sRkEwBz(Pq%);ms|g-xnCcA#p)b>#h1d$;#Z37)|)-&+ia&Z`0tC{ zKgigU{Wq90-j(ZICvy^Yn^ElA&YThae>#N(?O`0OmGG7}7-hkm+cdbd$ml&xH(EH2 zgrC8}(CeM(hfrr%J9x$0?@eWRV+?OM8KVL@w}-K2WE_(HCF5>xGKa#*k}nytuZ%-2 zwT(bAyileF`*$=*E`U08`>QV*N9(9JrNna!;{~$#Elf9Sc?VhX7N!?7@i?j7@$@AfgtRRvDAsnA2M z^NfDckx<=?s)E5}?E!|ZDhSqG{Z{^g|EksUS=>47fm*MbR2!TKYM92ivR$cE)az}} z7nJ;^Yvr%7I$0K+*DwCVZBLd>?)ju|EB~Vj!#v-6`DnoWyxObhf>Qij`7!Qma$(NdfP3(^!(0wm!)ACe2Zfr@0 zDp%{5ia6X+(Tb;6VOev@!3HKWfj%b|s^3#(6z@L(OB)pxXR32mx>SmXWo6}LsO%?G z=P@KHPF} zEa|@)j+&IJ|6t;|@UE>*%xpqr${);3;TOQA8!X6X-e%5lZydR6PCmH9uw=>|#*Vqp zC5!GbuQ(})CAGI1m-_X;GhEE@1PA&VRV{+>th&1^7<7sg?9;_b0E(ka@-GFk(rK| VPyb>efDMPO*S=u1oMjyC{{eWL?&tsj delta 42963 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 Z&>B}Naj+ffmquw7#Y)AY>|+)D{{d$K0;B){ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/WorkProcedureController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/WorkProcedureController.java deleted file mode 100644 index 57afc61..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/rest/WorkProcedureController.java +++ /dev/null @@ -1,87 +0,0 @@ - -package org.nl.wms.basedata.pdm.rest; - - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.annotation.Log; -import org.nl.wms.basedata.pdm.service.WorkProcedureService; -import org.nl.wms.basedata.pdm.service.dto.WorkProcedureDto; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** - * - * @author ldjun - * @date 2021-12-19 - **/ -@RestController -@RequiredArgsConstructor -@Api(tags = "工序管理") -@RequestMapping("/api/workProcedure") -@Slf4j -public class WorkProcedureController { - - - private final WorkProcedureService workProcedureService; - - @GetMapping - @Log("查询工序") - @ApiOperation("查询工序") - //@PreAuthorize("@el.check('WorkProcedure:list')") - - public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(workProcedureService.queryAll(whereJson, page), HttpStatus.OK); - } - - @PostMapping - @Log("新增工序") - @ApiOperation("新增工序") - //@PreAuthorize("@el.check('WorkProcedure:add')") - - public ResponseEntity create(@Validated @RequestBody WorkProcedureDto dto) { - workProcedureService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改工序") - @ApiOperation("修改工序") - //@PreAuthorize("@el.check('WorkProcedure:edit')") - - public ResponseEntity update(@Validated @RequestBody WorkProcedureDto dto) { - workProcedureService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除工序") - @ApiOperation("删除工序") - //@PreAuthorize("@el.check('WorkProcedure:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - workProcedureService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @GetMapping("/downSelect") - @Log("查询工序下拉列表") - @ApiOperation("查询工序下拉列表") - public ResponseEntity downSelect() { - return new ResponseEntity<>(workProcedureService.downSelect(), HttpStatus.OK); - } - @GetMapping("/queryWorkprocedure") - @Log("查询生产工序") - @ApiOperation("查询生产工序") - //@PreAuthorize("@el.check('workprocedure:list')") - public ResponseEntity queryWorkprocedure() { - return new ResponseEntity<>(workProcedureService.queryWorkprocedure(), HttpStatus.OK); - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/dto/WorkProcedureDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/dto/WorkProcedureDto.java deleted file mode 100644 index 6ecd659..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/dto/WorkProcedureDto.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.nl.wms.basedata.pdm.service.dto; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; - -import java.io.Serializable; - -/** - * @author ldjun - * @description / - * @date 2021-12-19 - **/ -@Data -public class WorkProcedureDto implements Serializable { - - - /** 工序标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long workprocedure_id; - - /** 工序编码 */ - private String workprocedure_code; - - /** 工序名称 */ - private String workprocedure_name; - - /** 对应工段 */ - private String worksection_type_scode; - - /** 分段计算类型 */ - private String burst_type_scode; - - /** 是否关键工序 */ - private String is_keyworkprocedure; - - /** 是否首道工序 */ - private String is_first; - - /** 是否启用 */ - private String is_used; - - /** 备注 */ - private String remark; - - /** 创建人 */ - private Long create_id; - - /** 创建人姓名 */ - private String create_name; - - /** 创建时间 */ - private String create_time; - - /** 是否删除 */ - private String is_delete; - - /** 修改人 */ - private Long update_optid; - - /** 修改人姓名 */ - private String update_optname; - - /** 修改时间 */ - private String update_time; - - /** 外部标识 */ - private String ext_id; - - /** 部门ID */ - private Long sysdeptid; - - /** 公司ID */ - private Long syscompanyid; -} - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WorkProcedureServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WorkProcedureServiceImpl.java deleted file mode 100644 index 29396e9..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/impl/WorkProcedureServiceImpl.java +++ /dev/null @@ -1,162 +0,0 @@ - -package org.nl.wms.basedata.pdm.service.impl; - - -import cn.hutool.core.date.DateUtil; -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; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.exception.BadRequestException; -import org.nl.modules.security.service.dto.JwtUserDto; -import org.nl.utils.SecurityUtils; -import org.nl.wms.basedata.pdm.service.WorkProcedureService; -import org.nl.wms.basedata.pdm.service.dto.WorkProcedureDto; -import org.nl.wms.st.out.service.dto.WorkprocedureDto; -import org.nl.wql.core.bean.ResultBean; -import org.nl.wql.core.bean.WQLObject; -import org.nl.wql.util.WqlUtil; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; - -/** - * @author ldjun - * @description 服务实现 - * @date 2021-12-19 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class WorkProcedureServiceImpl implements WorkProcedureService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - String where = ""; - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workprocedure"); - String search = (String) whereJson.get("search"); - if (!StrUtil.isEmpty(search)) { - where = " AND (workprocedure_code like '%" + search + "%' OR workprocedure_name like '%" + search + "%' ) "; - } - ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete= '0' " + where, "workprocedure_code"); - final JSONObject json = rb.pageResult(); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(WorkProcedureDto.class); - return list; - } - - @Override - public WorkProcedureDto findById(Long workProcedure_id) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - JSONObject json = wo.query("workProcedure_id =" + workProcedure_id + "").uniqueResult(0); - if (ObjectUtil.isEmpty(json)) return null; - final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class); - return obj; - } - - @Override - public WorkProcedureDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - JSONObject json = wo.query("workprocedure_code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(json)) return null; - final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class); - return obj; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(WorkProcedureDto dto) { - //判断编码是否存在 - String workprocedure_code = dto.getWorkprocedure_code(); - WorkProcedureDto byCode = this.findByCode(workprocedure_code); - if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); - - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - dto.setWorkprocedure_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(WorkProcedureDto dto) { - WorkProcedureDto entity = this.findById(dto.getWorkprocedure_id()); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - - String workprocedure_code = entity.getWorkprocedure_code(); - WorkProcedureDto byCode = this.findByCode(workprocedure_code); - if (ObjectUtil.isNotEmpty(byCode) && !dto.getWorkprocedure_id().equals(byCode.getWorkprocedure_id())) - throw new BadRequestException("存在相同的编码!"); - - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure"); - for (Long workProcedure_id : ids) { - JSONObject param = new JSONObject(); - param.put("workprocedure_id", String.valueOf(workProcedure_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.delete(param); - } - } - - @Override - public JSONArray downSelect() { - //工序表【PDM_BI_WorkProcedure】 - WQLObject workProcedureTab = WQLObject.getWQLObject("PDM_BI_WorkProcedure"); - JSONArray resultJSONArray = workProcedureTab.query("is_delete = '0' and is_used ='1'", "workprocedure_code").getResultJSONArray(0); - return resultJSONArray; - } - @Override - public List queryWorkprocedure() { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workprocedure"); - //只查清洗 跟仓储 - JSONArray arr = wo.query(" is_delete = '0' and is_used = '1'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkprocedureDto.class); - return null; - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java index 8e77444..db3236f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/StoreIvtServiceImpl.java @@ -60,7 +60,7 @@ public class StoreIvtServiceImpl { param.put("change_type", changeType.getIndex()); - param.put("workprocedure_id", disObj.getString("workprocedure_id")); + param.put("region_id", disObj.getString("region_id")); param.put("is_full", disObj.getString("is_full")); @@ -159,7 +159,7 @@ public class StoreIvtServiceImpl { json.put("struct_code", struct_code); json.put("struct_name", struct_name); json.put("barcode", param.getString("barcode")); - json.put("workprocedure_id", param.getString("workprocedure_id")); + json.put("region_id", param.getString("region_id")); String is_full = param.getString("is_full"); if (StrUtil.isEmpty(is_full)) { is_full = "1"; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java index 8fd469e..e914633 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructivtServiceImpl.java @@ -40,33 +40,18 @@ public class StructivtServiceImpl implements StructivtService { @Override public Map queryAll(Map whereJson, Pageable page){ - String stor_id = MapUtil.getStr(whereJson, "stor_id"); String material = MapUtil.getStr(whereJson, "material"); - String sect_id = MapUtil.getStr(whereJson, "sect_id"); - String workprocedure_id = MapUtil.getStr(whereJson, "workprocedure_id"); String struct = MapUtil.getStr(whereJson, "struct"); - String parent_id = MapUtil.getStr(whereJson, "product_series"); - String sale_code = MapUtil.getStr(whereJson, "sale_code"); - String product_series = ""; + String region_id = MapUtil.getStr(whereJson, "region_id"); JSONObject map = new JSONObject(); map.put("flag", "1"); - map.put("stor_id", stor_id); - map.put("sect_id", sect_id); - map.put("workprocedure_id", workprocedure_id); - if (StrUtil.isNotEmpty(parent_id)) { - product_series = classstandardService.getChildIdStr(parent_id); - map.put("product_series", product_series); - } - + map.put("region_id", region_id); if (StrUtil.isNotEmpty(material)) { map.put("material", "%" + material + "%"); } if (StrUtil.isNotEmpty(struct)) { map.put("struct", "%" + struct + "%"); } - if (StrUtil.isNotEmpty(sale_code)) { - map.put("sale_code", "%" + sale_code + "%"); - } JSONObject jsonObject = WQL.getWO("QST_STRUCTIVT001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.instorage_time desc"); return jsonObject; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql index ef7b9db..e23ba05 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCTIVT001.wql @@ -14,13 +14,9 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.sect_id TYPEAS s_string - 输入.workprocedure_id TYPEAS s_string 输入.struct TYPEAS s_string 输入.material TYPEAS s_string - 输入.sale_code TYPEAS s_string - 输入.product_series TYPEAS f_string + 输入.region_id TYPEAS f_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -48,38 +44,21 @@ PAGEQUERY SELECT ivt.*, - sect.sect_name, - bsrealstorattr.stor_name, - workprocedure.workprocedure_code, - workprocedure.workprocedure_name, - material.material_code, - material.material_name, - material.material_spec, - material.product_series, + point.point_code, + point.point_name, + mater.material_code, + mater.material_name, unit.unit_name, - saleorder.sale_code, - classstandard.class_name + region.region_name FROM ST_IVT_StructIvt ivt - left join st_ivt_structattr structattr on ivt.struct_id = structattr.struct_id - left join st_ivt_sectattr sect on structattr.sect_id = sect.sect_id - left join st_ivt_bsrealstorattr bsrealstorattr on sect.stor_id = bsrealstorattr.stor_id - left join pdm_bi_workprocedure workprocedure on ivt.workprocedure_id = workprocedure.workprocedure_id - left join md_me_materialbase material on ivt.material_id = material.material_id - left join md_pb_measureunit unit on ivt.qty_unit_id = unit.measure_unit_id - left join pcs_sale_order saleorder on ivt.sale_id = saleorder.sale_id - left join md_pb_classstandard classstandard on material.product_series = classstandard.class_id + LEFT JOIN sch_base_point point ON ivt.struct_id = point.point_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + LEFT JOIN SCH_BASE_Region region ON region.region_id = ivt.region_id WHERE 1 = 1 - OPTION 输入.stor_id <> "" - bsrealstorattr.stor_id = 输入.stor_id - ENDOPTION - OPTION 输入.sect_id <> "" - sect.sect_id = 输入.sect_id - ENDOPTION - OPTION 输入.workprocedure_id <> "" - ivt.workprocedure_id = 输入.workprocedure_id - ENDOPTION + OPTION 输入.struct <> "" ( ivt.struct_code like 输入.struct or @@ -88,16 +67,13 @@ ENDOPTION OPTION 输入.material <> "" ( - material.material_code like 输入.material or - material.material_name like 输入.material or - material.material_spec like 输入.material + mater.material_code like 输入.material or + mater.material_name like 输入.material ) ENDOPTION - OPTION 输入.sale_code <> "" - saleorder.sale_code like 输入.sale_code - ENDOPTION - OPTION 输入.product_series <> "" - material.product_series in 输入.product_series + + OPTION 输入.region_id <> "" + ivt.region_id = 输入.region_id ENDOPTION ENDSELECT ENDPAGEQUERY diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 8fe3586a880a6320013b6588244ebb0cc161dfaa..2d9049c2acb5bfa6a71643e95137aa66f8d5f1fb 100644 GIT binary patch delta 28154 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 j_}!v^_WesvOkoUTZ@et*aJzKL5t*uire( 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 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 9d8fe25cbaec32ed7e67e0429f5bb50ed30b5822..0edb77890b7d871a311248cf73bd11d94228538b 100644 GIT binary patch delta 5093 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 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java index 252d590..b6b9284 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java @@ -90,11 +90,17 @@ public class PointController { pointService.syncStruct(); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @GetMapping("/getEndPoint") + @GetMapping("/selectPoint") @Log("查询点位管理") @ApiOperation("查询点位管理") //@PreAuthorize("@el.check('Point:list')") - public ResponseEntity getEndPoint(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(pointService.getEndPoint(whereJson,page),HttpStatus.OK); + public ResponseEntity selectPoint(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(pointService.selectPoint(whereJson,page),HttpStatus.OK); + } + @GetMapping("/getRegion") + @Log("获取区域") + @ApiOperation("获取区域") + public ResponseEntity getRegion(){ + return new ResponseEntity<>(pointService.getRegion(),HttpStatus.OK); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java new file mode 100644 index 0000000..658268d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java @@ -0,0 +1,82 @@ + +package org.nl.wms.sch.rest; + + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.service.RegionService; +import org.nl.wms.sch.service.dto.RegionDto; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.nl.annotation.Log; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; + +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域管理管理") +@RequestMapping("/api/region") +@Slf4j +public class RegionController { + + private final RegionService regionService; + + @GetMapping + @Log("查询区域管理") + @ApiOperation("查询区域管理") + //@PreAuthorize("@el.check('region:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(regionService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域管理") + @ApiOperation("新增区域管理") + //@PreAuthorize("@el.check('region:add')") + public ResponseEntity create(@Validated @RequestBody RegionDto dto) { + regionService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域管理") + @ApiOperation("修改区域管理") + //@PreAuthorize("@el.check('region:edit')") + public ResponseEntity update(@Validated @RequestBody RegionDto dto) { + regionService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域管理") + @ApiOperation("删除区域管理") + //@PreAuthorize("@el.check('region:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + regionService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + //@PreAuthorize("@el.check('store:edit')") + public ResponseEntity update(@RequestBody JSONObject json) { + regionService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java index 10e3763..eb9280f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java @@ -76,7 +76,13 @@ public interface PointService { void syncStruct(); /** * - * 获取终点点位 + * 获取点位 */ - Map getEndPoint(Map whereJson, Pageable page); + Map selectPoint(Map whereJson, Pageable page); + + /** + * + * 获取区域 + */ + JSONArray getRegion(); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java new file mode 100644 index 0000000..162ea44 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java @@ -0,0 +1,76 @@ + +package org.nl.wms.sch.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.service.dto.RegionDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-11 + **/ +public interface RegionService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param region_id ID + * @return Region + */ + RegionDto findById(Long region_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Region + */ + RegionDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(RegionDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RegionDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + void changeActive(JSONObject json); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java index 968b42b..6bb4192 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java @@ -34,7 +34,7 @@ public class PointDto implements Serializable { /** * 所属区域 */ - private String area_type; + private Long region_id; /** * 点位类型 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/dto/WorkprocedureDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java similarity index 50% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/dto/WorkprocedureDto.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java index 13ced84..0a95274 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/dto/WorkprocedureDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/RegionDto.java @@ -1,33 +1,31 @@ -package org.nl.wms.st.out.service.dto; +package org.nl.wms.sch.service.dto; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; - import java.io.Serializable; -import java.math.BigDecimal; + import com.fasterxml.jackson.databind.annotation.JsonSerialize; + import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; /** * @description / -* @author geng by -* @date 2022-04-12 +* @author Liuxy +* @date 2022-08-11 **/ @Data -public class WorkprocedureDto implements Serializable { +public class RegionDto implements Serializable { - /** 工序标识 */ + /** 区域标识 */ /** 防止精度丢失 */ @JsonSerialize(using= ToStringSerializer.class) - private Long workprocedure_id; + private Long region_id; - /** 工序编码 */ - private String workprocedure_code; + /** 区域编码 */ + private String region_code; - /** 工序名称 */ - private String workprocedure_name; + /** 区域名称 */ + private String region_name; - /** 工序顺序 */ - private BigDecimal seq_no; + /** 备注 */ + private String remark; /** 是否启用 */ private String is_used; @@ -49,7 +47,4 @@ public class WorkprocedureDto implements Serializable { /** 修改时间 */ private String update_time; - - /** 是否删除 */ - private String is_delete; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index baa8ba4..5af69dc 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -15,7 +15,6 @@ import org.nl.exception.BadRequestException; import org.nl.utils.SecurityUtils; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; -import org.nl.wms.st.in.WorkProcedureEnum; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import org.nl.wql.util.WqlUtil; @@ -40,7 +39,7 @@ public class PointServiceImpl implements PointService { public Map queryAll(Map whereJson, Pageable page) { HashMap map = new HashMap(); map.put("flag", "1"); - map.put("area_type", whereJson.get("area_type")); + map.put("region_id", whereJson.get("region_id")); map.put("ids", whereJson.get("ids")); map.put("lock_type", whereJson.get("lock_type")); map.put("point_status", whereJson.get("point_status")); @@ -213,7 +212,7 @@ public class PointServiceImpl implements PointService { structMap.put("point_id", json.getString("struct_id")); structMap.put("point_code", json.getString("struct_code")); structMap.put("point_name", json.getString("struct_name")); - structMap.put("area_type", json.getString("sect_code")); + structMap.put("region_id", json.getString("region_id")); structMap.put("source_id", json.getString("struct_id")); structMap.put("point_type", "01"); structMap.put("is_used", json.getString("is_used")); @@ -228,21 +227,14 @@ public class PointServiceImpl implements PointService { } @Override - public Map getEndPoint(Map whereJson, Pageable page) { + public Map selectPoint(Map whereJson, Pageable page) { String search = MapUtil.getStr(whereJson, "search"); - String workprocedure_id = MapUtil.getStr(whereJson, "workprocedure_id"); + String region_id = MapUtil.getStr(whereJson, "region_id"); JSONObject map = new JSONObject(); - if (StrUtil.equals(workprocedure_id, WorkProcedureEnum.GJGX.getId())) { - map.put("point_code", "YSZCW%"); - } - - if (StrUtil.equals(workprocedure_id, WorkProcedureEnum.HKGX.getId())) { - map.put("point_code", "CPZCW%"); - } - map.put("flag", "3"); + map.put("region_id", region_id); if (ObjectUtil.isNotEmpty(search)) { map.put("search", "%" + search + "%"); } @@ -250,6 +242,12 @@ public class PointServiceImpl implements PointService { return json; } + @Override + public JSONArray getRegion() { + JSONArray resultJSONArray = WQLObject.getWQLObject("SCH_BASE_Region").query("is_used = '1'").getResultJSONArray(0); + return resultJSONArray; + } + //根据重量返回最大的 级数 public String getLoadSeriesByqty(Double qty) { JSONArray dictArr = WQLObject.getWQLObject("sys_dict_detail").query("dict_id ='108'", "label").getResultJSONArray(0); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java new file mode 100644 index 0000000..21d7c2d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java @@ -0,0 +1,153 @@ + +package org.nl.wms.sch.service.impl; + + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import lombok.RequiredArgsConstructor; +import org.nl.exception.BadRequestException; +import org.nl.wms.sch.service.RegionService; +import org.nl.wms.sch.service.dto.RegionDto; +import org.nl.wql.WQL; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.springframework.data.domain.Pageable; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.utils.SecurityUtils; +import org.nl.wql.core.bean.ResultBean; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import lombok.extern.slf4j.Slf4j; +import cn.hutool.core.util.ObjectUtil; + +/** + * @author Liuxy + * @description 服务实现 + * @date 2022-08-11 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionServiceImpl implements RegionService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String region_code = MapUtil.getStr(whereJson, "region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + if (ObjectUtil.isNotEmpty(region_code)) map.put("region_code",region_code+"%"); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "region.region_code ASC"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionDto.class); + return null; + } + + @Override + public RegionDto findById(Long region_id) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = wo.query("region_id = '" + region_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(RegionDto.class); + } + return null; + } + + @Override + public RegionDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(RegionDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionDto dto) { + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + JSONObject jsonDto = wo.query("region_code = '" + dto.getRegion_code() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDto)) throw new BadRequestException("编码已存在"); + + dto.setRegion_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionDto dto) { + RegionDto entity = this.findById(dto.getRegion_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + + WQLObject wo = WQLObject.getWQLObject("sch_base_region"); + for (Long region_id : ids) { + wo.delete("region_id ='"+region_id+"'"); + } + } + + @Override + public void changeActive(JSONObject json) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + WQLObject.getWQLObject("sch_base_region").update(json); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql index 271c8ee..15e78ec 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql @@ -14,7 +14,7 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string - 输入.area_type TYPEAS s_string + 输入.region_id TYPEAS s_string 输入.lock_type TYPEAS s_string 输入.name TYPEAS s_string 输入.point_type TYPEAS s_string @@ -51,11 +51,11 @@ point.point_id, point.point_code, point.point_name, - point.area_type, + point.region_id, + region.region_name, point.point_type, point.point_status, point.lock_type, - d2.label as area_type_name, d1.label as point_type_name, d4.label as point_status_name, d3.label as lock_type_name, @@ -77,14 +77,14 @@ point.update_time FROM sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id LEFT JOIN sys_dict_detail d1 ON point.point_type = d1.value and d1.name='sch_point_type' - LEFT JOIN sys_dict_detail d2 ON point.area_type = d2.value and d2.name='sch_area_type' LEFT JOIN sys_dict_detail d3 ON point.lock_type = d3.value and d3.name='d_lock_type' LEFT JOIN sys_dict_detail d4 ON point.point_status = d4.value and d4.name='sch_point_status' WHERE point.is_delete = '0' - OPTION 输入.area_type <> "" - point.area_type = 输入.area_type + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id ENDOPTION OPTION 输入.ids <> "" point.area_type in (输入.ids) @@ -114,11 +114,11 @@ IF 输入.flag = "2" QUERY SELECT - struct.*,sect.sect_code + struct.*,region.region_id FROM ST_IVT_StructAttr struct left join - ST_IVT_SectAttr sect on struct.sect_id = sect.sect_id + SCH_BASE_Region region on struct.region_id = region.region_id WHERE struct.is_delete = '0' ENDSELECT diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql new file mode 100644 index 0000000..9bb640f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_REGION_01.wql @@ -0,0 +1,57 @@ +[交易说明] + 交易名: 区域分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + region.* + FROM + SCH_BASE_Region region + WHERE + 1=1 + + OPTION 输入.region_code <> "" + (region.region_code like 输入.region_code or + region.region_name like 输入.region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql index 217c78e..7d266e3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql @@ -53,17 +53,17 @@ SELECT task.*, p1.point_name AS start_point_name, - d1.label AS start_area_name, + region1.region_name AS start_area_name, p2.point_name AS next_point_name, - d2.label AS next_area_name, + region2.region_name AS next_area_name, d3.label AS task_type_name, d4.label AS taskdtl_type_name FROM sch_base_task task LEFT JOIN sch_base_point p1 ON task.start_point_code = p1.point_code - LEFT JOIN sys_dict_detail d1 ON d1.`value` = p1.area_type AND d1.`name` = 'sch_area_type' + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = p1.region_id LEFT JOIN sch_base_point p2 ON task.next_point_code = p2.point_code - LEFT JOIN sys_dict_detail d2 ON d2.`value` = p2.area_type AND d2.`name` = 'sch_area_type' + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = p2.region_id LEFT JOIN sys_dict_detail d3 ON d3.`value` = task.task_type AND d3.`name` = 'SCH_TASK_TYPE' LEFT JOIN sys_dict_detail d4 ON d4.`value` = task.taskdtl_type AND d4.`name` = 'SCH_TASK_TYPE_DTL' WHERE diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql index bbbc95d..7f179c7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/SCH_Point_01.wql @@ -17,11 +17,11 @@ 输入.search TYPEAS s_string 输入.point_type TYPEAS s_string 输入.point_code TYPEAS s_string - 输入.area_type TYPEAS s_string + 输入.region_id TYPEAS s_string 输入.point_status TYPEAS s_string 输入.lock_type TYPEAS s_string - 输入.is_used TYPEAS s_string - 输入.material_id TYPEAS s_string + 输入.is_used TYPEAS s_string + 输入.material_id TYPEAS s_string 输入.vehicle_type TYPEAS s_string [临时表] @@ -96,22 +96,24 @@ IF 输入.flag = "3" PAGEQUERY SELECT - point.* + point.*, + region.region_name FROM sch_base_point point + LEFT JOIN sch_base_region region ON point.region_id = region.region_id WHERE point.lock_type = '00' AND point.is_used = '1' AND point.is_delete = '0' - AND point.area_type = 'ZCQ01' + AND point.point_status = '00' OPTION 输入.search <> "" (point.point_code like 输入.search or point.point_name like 输入.search) ENDOPTION - OPTION 输入.point_code <> "" - point.point_code like 输入.point_code + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id ENDOPTION ENDSELECT diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls index 55e01c6466fb68436282f46b3d68e2fcf19ed1e1..4659a85a4ffb85234f7fa0f35be1498fa465bc7b 100644 GIT binary patch delta 22324 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 LAaBkd-$?%lZme1@ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java index db2bcb7..b489d22 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java @@ -48,7 +48,7 @@ public class CallMaterialTask extends AbstractAcsTask { map.put("update_optid", SecurityUtils.getCurrentUserId()); map.put("update_optname", SecurityUtils.getNickName()); map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); + WQLObject.getWQLObject("ST_IVT_regionIO").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); } @@ -59,7 +59,7 @@ public class CallMaterialTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); jsonTask.put("remark", "任务执行完成"); ///审核单据 增加库存 改变出入库表的状态 - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_regionIO"); JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); //审核 加库存可和用数量 StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); @@ -79,7 +79,6 @@ public class CallMaterialTask extends AbstractAcsTask { param.put("pcsn", mstObj.getString("pcsn")); param.put("change_qty", mstObj.getString("qty")); param.put("vehicle_code", mstObj.getString("vehicle_code")); - param.put("workprocedure_id", mstObj.getString("ivt_workprocedure_id")); PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); PointDto nextPointDto = pointService.findByCode(next_point_code); if (ObjectUtil.isNull(nextPointDto)) { @@ -91,29 +90,16 @@ public class CallMaterialTask extends AbstractAcsTask { } param.put("struct_id", startPointDto.getPoint_id()); ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_IVT); + //解锁仓位,托盘信息,回写到点位上去 String vehicle_code = jsonTask.getString("vehicle_code"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject endpointObj = pointTab.query("point_code='" + jsonTask.getString("next_point_code") + "'").uniqueResult(0); - endpointObj.put("lock_type", "00"); - endpointObj.put("point_status", "02"); - endpointObj.put("vehicle_code", vehicle_code); - pointTab.update(endpointObj); JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); pointTab.update(startPointObj); - //假如是最底下的仓位,则要解锁对面的仓位 - JSONObject structRealObj = WQLObject.getWQLObject("ST_IVT_StructRelaStruct").query("struct_id = '" + startPointObj.getString("point_id") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(structRealObj)) { - JSONObject relaPointObj = pointTab.query("point_id='" + structRealObj.getString("bindstruct_id") + "'").uniqueResult(0); - relaPointObj.put("lock_type", "00"); - relaPointObj.put("point_status", "02"); - relaPointObj.put("vehicle_code", vehicle_code); - pointTab.update(relaPointObj); - } taskTab.update(jsonTask); } @@ -129,7 +115,7 @@ public class CallMaterialTask extends AbstractAcsTask { String task_id = taskObj.getString("task_id"); //1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 //找一个合适的仓位 - WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_regionIO"); JSONObject IosObj = ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(IosObj)) { throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); @@ -171,13 +157,11 @@ public class CallMaterialTask extends AbstractAcsTask { String start_point_code = form.getString("start_point_code"); String next_point_code = form.getString("next_point_code"); String vehicle_code = form.getString("vehicle_code"); - String task_status = TaskStatusEnum.SURE_START.getCode(); + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); String material_id = form.getString("material_id"); String create_mode = form.getString("create_mode"); String pcsn = form.getString("pcsn"); - String is_full = form.getString("is_full"); - String workprocedure_id = form.getString("workprocedure_id"); WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); String iostorinv_id = form.getString("iostorinv_id"); if (StrUtil.isEmpty(next_point_code)) { @@ -189,9 +173,6 @@ public class CallMaterialTask extends AbstractAcsTask { if (StrUtil.isEmpty(create_mode)) { throw new BadRequestException("创建方式不能为空!"); } - if (StrUtil.isEmpty(is_full)) { - throw new BadRequestException("是否满托不能为空!"); - } //判断终点有没有未完成的指令 JSONObject beforTaskObj = taskTable. query("is_delete='0' and next_point_code='" + next_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") @@ -207,7 +188,7 @@ public class CallMaterialTask extends AbstractAcsTask { String qty = ""; String qty_unit_id = ""; String ivt_workprocedure_id = ""; - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); if (StrUtil.isNotEmpty(start_point_code)) { if (StrUtil.isEmpty(iostorinv_id)) { throw new BadRequestException("入库单据号不能为空!"); @@ -222,128 +203,17 @@ public class CallMaterialTask extends AbstractAcsTask { } qty = ivtObj.getString("canuse_qty"); qty_unit_id = ivtObj.getString("qty_unit_id"); - ivt_workprocedure_id = ivtObj.getString("ivt_workprocedure_id"); } PointDto nextPoint = pointService.findByCode(next_point_code); - //如果没给终点,根据起点去找工序,找一个合适的仓位 并且生成入库单,并且锁定点位 - /* if (StrUtil.isEmpty(start_point_code)) { - if (StrUtil.isEmpty(workprocedure_id)) { - - JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", next_point_code) - .process().uniqueResult(0); - workprocedure_id = workInfo.getString("workprocedure_id"); - - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - switch (workProcedureEnum) { - //混黏工序 - case HNGX: - startArea_type = AreaEnum.KLHJ.getCode(); - bill_type = BillTypeEnum.HNCK.getCode(); - break; - // 压制工序 - case YZGX: - startArea_type = AreaEnum.KLHJ.getCode(); - bill_type = BillTypeEnum.YZCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.HNGX.getId(); - break; - //烧制工序 - case SZGX: - startArea_type = AreaEnum.CYHJ.getCode(); - bill_type = BillTypeEnum.SZCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); - break; - //分拣工序 - case FJGX: - startArea_type = AreaEnum.CYZC.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.SZGX.getId(); - break; - } - } else { - // (机械手呼叫空托盘,需要呼叫半满托盘)如果请求有工序,假如是压制工序,则库存工序是压制,起点是出窑货架 - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - switch (workProcedureEnum) { - // 压制工序 - case YZGX: - startArea_type = AreaEnum.CYHJ.getCode(); - bill_type = BillTypeEnum.YZCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.YZGX.getId(); - break; - //分拣工序 - case FJGX: - startArea_type = AreaEnum.BZZC.getCode(); - bill_type = BillTypeEnum.FJCK.getCode(); - ivt_workprocedure_id = WorkProcedureEnum.FJGX.getId(); - break; - } - } - - - JSONObject param = new JSONObject(); - param.put("material_id", material_id); - param.put("area_type", startArea_type); - param.put("workprocedure_id", ivt_workprocedure_id); - param.put("is_full", is_full); - JSONObject outStructObj = StructFindUtil.getOutStruct(param); - if (ObjectUtil.isEmpty(outStructObj)) { - throw new BadRequestException("未找到合适的出库仓位!"); - } - qty = outStructObj.getString("canuse_qty"); - qty_unit_id = outStructObj.getString("qty_unit_id"); - - start_point_code = outStructObj.getString("struct_code"); - vehicle_code = outStructObj.getString("vehicle_code"); - //创建出库单据 - JSONObject iosObj = new JSONObject(); - iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - iosObj.put("iostorinv_id", iostorinv_id); - iosObj.put("bill_code", CodeUtil.getNewCode("OUT_STORE_CODE")); - iosObj.put("io_type", "1"); - iosObj.put("bill_type", bill_type); - iosObj.put("workprocedure_id", workprocedure_id); - iosObj.put("ivt_workprocedure_id", ivt_workprocedure_id); - iosObj.put("material_id", material_id); - iosObj.put("vehicle_code", outStructObj.getString("vehicle_code")); - iosObj.put("qty", qty); - iosObj.put("qty_unit_id", qty_unit_id); - //默认是分配状态 - iosObj.put("bill_status", "20"); - iosObj.put("start_point_code", start_point_code); - iosObj.put("end_point_code", next_point_code); - iosObj.put("start_area", startArea_type); - iosObj.put("end_area", nextPoint.getArea_type()); - iosObj.put("cust_id", cust_id); - iosObj.put("create_mode", create_mode); - iosObj.put("task_id", task_id); - iosObj.put("pcsn", pcsn); - iosObj.put("create_id", SecurityUtils.getCurrentUserId()); - iosObj.put("create_name", SecurityUtils.getNickName()); - iosObj.put("create_time", DateUtil.now()); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); - }*/ - task_status = TaskStatusEnum.START_AND_POINT.getCode(); PointDto startPoint = pointService.findByCode(start_point_code); - start_area = nextPoint.getArea_type(); - //终点点加锁 - HashMap lock_map = new HashMap(); - lock_map.put("lock_type", "01"); - WQLObject.getWQLObject("sch_base_point").update(lock_map, "point_code = '" + next_point_code + "'"); - //起点点加锁 WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); JSONObject startPointObj = pointTable.query("point_code='" + start_point_code + "'").uniqueResult(0); startPointObj.put("lock_type", "01"); pointTable.update(startPointObj); - //假如是最底下的仓位,则要锁定对面的仓位 - JSONObject structRealObj = WQLObject.getWQLObject("ST_IVT_StructRelaStruct").query("struct_id = '" + startPointObj.getString("point_id") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(structRealObj)) { - JSONObject relaPointObj = pointTable.query("point_id='" + structRealObj.getString("bindstruct_id") + "'").uniqueResult(0); - relaPointObj.put("lock_type", "01"); - pointTable.update(relaPointObj); - } //减少库存可用数量 StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); @@ -354,11 +224,11 @@ public class CallMaterialTask extends AbstractAcsTask { param.put("change_qty", qty); param.put("struct_id", startPoint.getPoint_id()); param.put("vehicle_code", startPoint.getVehicle_code()); - param.put("workprocedure_id", ivt_workprocedure_id); ivtService.addIvtFlow(param, IvtChangeTypeEnum.SUB_CAN_USE); JSONObject taskObj = new JSONObject(); taskObj.put("task_id", task_id); + taskObj.put("taskdtl_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); taskObj.put("task_type", "02"); taskObj.put("taskdtl_type", "02"); @@ -367,7 +237,6 @@ public class CallMaterialTask extends AbstractAcsTask { taskObj.put("start_area", start_area); taskObj.put("request_param", form.toJSONString()); taskObj.put("next_point_code", next_point_code); - taskObj.put("next_area", nextPoint.getArea_type()); taskObj.put("vehicle_code", vehicle_code); taskObj.put("handle_class", THIS_CLASS); taskObj.put("is_auto_issue", "1"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java index 8b86620..26017a9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java @@ -57,7 +57,22 @@ public class SendMaterialTask extends AbstractAcsTask { map.put("update_optname", SecurityUtils.getNickName()); map.put("update_time", DateUtil.now()); map.put("bill_status", "40"); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); + WQLObject.getWQLObject("ST_IVT_regionIO").update(map, "task_id='" + jsonTask.getString("task_id") + "'"); + } + + if (TaskStatusEnum.ISSUE.getCode().equals(status)) { + // 下发任务 + this.renotifyAcs(task_id); + // 更新任务状态和单据状态 + jsonTask.put("task_status",TaskStatusEnum.ISSUE.getCode()); + jsonTask.put("car_no", taskObj.getString("car_no")); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); + mstObj.put("bill_status","30"); + mstTab.update(mstObj); } if (TaskStatusEnum.FINISHED.getCode().equals(status)) { @@ -67,7 +82,7 @@ public class SendMaterialTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); jsonTask.put("remark", "任务执行完成"); ///审核单据 增加库存 改变出入库表的状态 - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_regionIO"); JSONObject mstObj = mstTab.query("task_id='" + task_id + "' and is_delete='0'").uniqueResult(0); //审核 加库存可和用数量 StoreIvtServiceImpl ivtService = new StoreIvtServiceImpl(); @@ -91,10 +106,11 @@ public class SendMaterialTask extends AbstractAcsTask { param.put("pcsn", mstObj.getString("pcsn")); param.put("change_qty", mstObj.getString("qty")); param.put("vehicle_code", mstObj.getString("vehicle_code")); - param.put("workprocedure_id", mstObj.getString("workprocedure_id")); + param.put("region_id", mstObj.getString("start_region_id")); param.put("is_full", mstObj.getString("is_full")); param.put("stewing_time", mstObj.getString("stewing_time")); param.put("producetask_id", mstObj.getString("producetask_id")); + param.put("io_type", mstObj.getString("io_type")); PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); PointDto nextPointDto = pointService.findByCode(next_point_code); @@ -107,7 +123,7 @@ public class SendMaterialTask extends AbstractAcsTask { } param.put("struct_id", nextPointDto.getPoint_id()); ivtService.addIvtFlow(param, IvtChangeTypeEnum.ADD_IVT_AND_CAN_USE); - //解锁仓位,托盘信息,回写到点位上去 + // 解锁点位 String vehicle_code = jsonTask.getString("vehicle_code"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); JSONObject endpointObj = pointTab.query("point_code='" + jsonTask.getString("next_point_code") + "'").uniqueResult(0); @@ -115,15 +131,6 @@ public class SendMaterialTask extends AbstractAcsTask { endpointObj.put("point_status", "02"); endpointObj.put("vehicle_code", vehicle_code); pointTab.update(endpointObj); - //假如是最底下的仓位,则要锁定对面的仓位 - JSONObject structRealObj = WQLObject.getWQLObject("ST_IVT_StructRelaStruct").query("struct_id = '" + endpointObj.getString("point_id") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(structRealObj)) { - JSONObject relaPointObj = pointTab.query("point_id='" + structRealObj.getString("bindstruct_id") + "'").uniqueResult(0); - relaPointObj.put("lock_type", "00"); - relaPointObj.put("point_status", "02"); - relaPointObj.put("vehicle_code", vehicle_code); - pointTab.update(relaPointObj); - } JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); startPointObj.put("lock_type", "00"); @@ -150,7 +157,7 @@ public class SendMaterialTask extends AbstractAcsTask { String task_id = taskObj.getString("task_id"); //1 将任务修改为分配 2将终点写入,完成分配,3 加锁点位 //找一个合适的仓位 - WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject ProcedureIOStable = WQLObject.getWQLObject("ST_IVT_regionIO"); JSONObject IosObj = ProcedureIOStable.query("task_id='" + task_id + "' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(IosObj)) { throw new BadRequestException("未找到任务号为'" + taskObj.getString("task_code") + "'的入库单据!"); @@ -185,7 +192,7 @@ public class SendMaterialTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject form) { - //请求参数 载具、起点 物料,数量,客户,批次,创建方式 是否满托不能为空! 终点可以不为空时,入库单据编号不能为空 + //请求参数 载具、起点、终点 String vehicle_code = form.getString("vehicle_code"); String start_point_code = form.getString("start_point_code"); String next_point_code = form.getString("next_point_code"); @@ -201,9 +208,6 @@ public class SendMaterialTask extends AbstractAcsTask { if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); } - if (StrUtil.isEmpty(vehicle_code)) { - throw new BadRequestException("载具不能为空!"); - } //判断起点有没有未完成的指令 JSONObject beforTaskObj = taskTable. query("is_delete='0' and start_point_code='" + start_point_code + "' and task_status <>'" + TaskStatusEnum.FINISHED.getCode() + "'") @@ -217,7 +221,7 @@ public class SendMaterialTask extends AbstractAcsTask { String qty_unit_id = ""; String endArea_type = ""; String bill_type = ""; - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_workProcedureIOS"); + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); //如果给了终点,更新入库单据,给pc、手持调用 if (StrUtil.isNotEmpty(next_point_code)) { String iostorinv_id = form.getString("iostorinv_id"); @@ -228,101 +232,6 @@ public class SendMaterialTask extends AbstractAcsTask { IosObj.put("bill_status", "20"); iosTable.update(IosObj); } - //如果没给终点,根据起点去找工序,找一个合适的仓位 并且生成入库单,并且锁定点位 - /*if (StrUtil.isEmpty(next_point_code)) { - if (StrUtil.isEmpty(material_id)) { - throw new BadRequestException("物料标识不能为空!"); - } - if (StrUtil.isEmpty(qty)) { - throw new BadRequestException("数量数值不能为空!"); - } - if (StrUtil.isEmpty(cust_id)) { - throw new BadRequestException("客户不能为空!"); - } - if (StrUtil.isEmpty(create_mode)) { - throw new BadRequestException("创建方式不能为空!"); - } - if (StrUtil.isEmpty(is_full)) { - throw new BadRequestException("是否满托不能为空!"); - } - JSONObject workInfo = WQL.getWO("QSTRUCT_RULE").addParam("flag", "1").addParam("code", start_point_code) - .process().uniqueResult(0); - String workprocedure_id = workInfo.getString("workprocedure_id"); - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - - switch (workProcedureEnum) { - //混黏工序 - case HNGX: - qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; - endArea_type = AreaEnum.KLHJ.getCode(); - bill_type = BillTypeEnum.HNRK.getCode(); - break; - // 压制工序 - case YZGX: - qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; - endArea_type = AreaEnum.CYHJ.getCode(); - bill_type = BillTypeEnum.YZRK.getCode(); - break; - //烧制工序 - case SZGX: - qty_unit_id = BussConstant.YZ_IN_QTY_UNIT_ID; - bill_type = BillTypeEnum.SZRK.getCode(); - endArea_type = AreaEnum.CYZC.getCode(); - break; - //分拣工序 - case FJGX: - qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; - bill_type = BillTypeEnum.SZRK.getCode(); - endArea_type = AreaEnum.BZZC.getCode(); - break; - default: - qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; - break; - } - JSONObject param = new JSONObject(); - param.put("material_id", material_id); - param.put("area_type", endArea_type); - param.put("vehicle_code", vehicle_code); - JSONObject inStructObj = StructFindUtil.getInStruct(param); - if (ObjectUtil.isEmpty(inStructObj)) { - throw new BadRequestException("未找到合适的入库仓位!"); - } - next_point_code = inStructObj.getString("struct_code"); - //创建入库单据 - //假如静置时间为0 或者为空,则取物料表上的静置时间 - if (StrUtil.isEmpty(stewing_time) || StrUtil.equals(stewing_time, "0")) { - stewing_time = WQLObject.getWQLObject("md_me_material").query("material_id ='" + material_id + "'"). - uniqueResult(0).getString("stewing_time"); - } - JSONObject iosObj = new JSONObject(); - iosObj.put("iostorinv_id", IdUtil.getSnowflake(1, 1).nextId()); - iosObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); - iosObj.put("io_type", "0"); - iosObj.put("bill_type", bill_type); - iosObj.put("workprocedure_id", workprocedure_id); - iosObj.put("ivt_workprocedure_id", workprocedure_id); - iosObj.put("material_id", material_id); - iosObj.put("vehicle_code", vehicle_code); - iosObj.put("producetask_id", producetask_id); - iosObj.put("stewing_time", stewing_time); - iosObj.put("qty", qty); - iosObj.put("qty_unit_id", qty_unit_id); - //默认是分配状态 - iosObj.put("bill_status", "20"); - iosObj.put("start_point_code", start_point_code); - iosObj.put("end_point_code", next_point_code); - iosObj.put("start_area", startPoint.getArea_type()); - iosObj.put("end_area", endArea_type); - iosObj.put("cust_id", cust_id); - iosObj.put("create_mode", create_mode); - iosObj.put("task_id", task_id); - iosObj.put("pcsn", pcsn); - iosObj.put("create_id", SecurityUtils.getCurrentUserId()); - iosObj.put("create_name", SecurityUtils.getNickName()); - iosObj.put("create_time", DateUtil.now()); - iosObj.put("is_full", is_full); - WQLObject.getWQLObject("ST_IVT_workProcedureIOS").insert(iosObj); - }*/ String task_status = TaskStatusEnum.START_AND_POINT.getCode(); PointDto nextPoint = pointService.findByCode(next_point_code); //终点点加锁 @@ -330,26 +239,21 @@ public class SendMaterialTask extends AbstractAcsTask { JSONObject endPointObj = pointTable.query("point_code='" + next_point_code + "'").uniqueResult(0); endPointObj.put("lock_type", "01"); pointTable.update(endPointObj); - //假如是最底下的仓位,则要锁定对面的仓位 - JSONObject structRealObj = WQLObject.getWQLObject("ST_IVT_StructRelaStruct").query("struct_id = '" + endPointObj.getString("point_id") + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(structRealObj)) { - JSONObject relaPointObj = pointTable.query("point_id='" + structRealObj.getString("bindstruct_id") + "'").uniqueResult(0); - relaPointObj.put("lock_type", "01"); - pointTable.update(relaPointObj); - } + CodeUtil.getNewCode("TASK_CODE"); JSONObject taskObj = new JSONObject(); taskObj.put("task_id", task_id); + taskObj.put("taskdtl_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); taskObj.put("task_type", "01"); taskObj.put("taskdtl_type", "01"); taskObj.put("acs_task_type", "1"); taskObj.put("task_status", task_status); taskObj.put("start_point_code", start_point_code); - taskObj.put("start_area", startPoint.getArea_type()); + taskObj.put("start_area", startPoint.getRegion_id()); taskObj.put("request_param", form.toJSONString()); taskObj.put("next_point_code", next_point_code); - taskObj.put("next_area", nextPoint.getArea_type()); + taskObj.put("next_area", nextPoint.getRegion_id()); taskObj.put("vehicle_code", vehicle_code); taskObj.put("handle_class", THIS_CLASS); taskObj.put("is_auto_issue", "1"); @@ -378,5 +282,4 @@ public class SendMaterialTask extends AbstractAcsTask { } - } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/AreaEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/AreaEnum.java deleted file mode 100644 index c30edf8..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/AreaEnum.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.nl.wms.st.in; - -/** - * 区域字典表(sch_area_type): - * 01困料货架 ,02:出窑货架(预定),03、出窑暂存区,04、包装暂存区,21:混碾区域,22、压制区域 23、液压机料盅架 - * 24 窑区域 25 空钢托堆叠区 26 自动柴垛线 - */ -public enum AreaEnum { - CPHJ("KQ001", "成品库区"), - BCPHJ("KQ002", "半成品库区"), - BCPSLKKZCQ("KQ003", "半成品上料空框暂存区"), - BCPSXLZCQ("KQ004", "半成品上下料暂存区"), - BCPKKYJQ("KQ005", "半成品空框应急区"), - CPCKZCQ("KQ006", "成品出库暂存区"), - BCPLXQ("KQ007", "半成品料箱区"), - ULQ("RCK001", "原材料区"); - - - private final String name; - private final String code; - - AreaEnum(String code, String name) { - this.code = code; - this.name = name; - } - - public String getName() { - return name; - } - - public String getCode() { - return code; - } -} - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/BussConstant.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/BussConstant.java deleted file mode 100644 index 0b17a4f..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/BussConstant.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.nl.wms.st.in; - -/** - * 业务常量配置类 - */ -public class BussConstant { - // 混碾入库数量单位 - public static final String HN_IN_QTY_UNIT_ID = "1"; - // 压制入库数量单位 - public static final String YZ_IN_QTY_UNIT_ID = "1"; - // 压制出库数量单位 - public static final String YZ_OUT_QTY_UNIT_ID = "1"; - - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/WorkProcedureEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/WorkProcedureEnum.java deleted file mode 100644 index 9bee579..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/WorkProcedureEnum.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.nl.wms.st.in; - -import cn.hutool.core.util.StrUtil; - -/** - * 工序类型类型,对应工序表:生产工序表【PDM_BASE_workProcedure】 - */ -public enum WorkProcedureEnum { - - GJGX(1, "1556829396462080000", "01", "共挤工序", ""), - HKGX(2, "1556829712439971840", "02", "豪凯工序", ""); - //顺序号 - private int index; - //工序标识 - private String id; - // 工序编码 - private String code; - //名字 - private String name; - //描述 - private String desc; - - WorkProcedureEnum(int index, String id, String code, String name, String desc) { - this.index = index; - this.id = id; - this.code = code; - this.name = name; - this.desc = desc; - } - - - public String getName() { - return name; - } - - public String getCode() { - return code; - } - - public String getId() { - return id; - } - - public String getDesc() { - return desc; - } - - public static WorkProcedureEnum get(String workprocedure_id) { - for (WorkProcedureEnum workProcedureEnum : WorkProcedureEnum.values()) { - if (StrUtil.equals(workProcedureEnum.id, workprocedure_id)) { - return workProcedureEnum; - } - } - return null; - } - - public static void main(String[] args) { - System.out.println("测试完成1"); - for (WorkProcedureEnum workProcedureEnum : WorkProcedureEnum.values()) { - if (StrUtil.equals(workProcedureEnum.id, "1514444198529601536")) { - System.out.println("测试完成2"); - } - } - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/WorkprocedureiosController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/WorkprocedureiosController.java deleted file mode 100644 index 1ea945a..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/WorkprocedureiosController.java +++ /dev/null @@ -1,124 +0,0 @@ - -package org.nl.wms.st.in.rest; - - -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.st.in.service.WorkprocedureiosService; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.springframework.data.domain.Pageable; -import lombok.RequiredArgsConstructor; -import org.nl.annotation.Log; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.*; -import java.util.Map; -import lombok.extern.slf4j.Slf4j; - -/** -* @author geng by -* @date 2022-04-21 -**/ -@RestController -@RequiredArgsConstructor -@Api(tags = "工序入库管理") -@RequestMapping("/api/workprocedureiosIn") -@Slf4j -public class WorkprocedureiosController { - - private final WorkprocedureiosService workprocedureiosService; - - @GetMapping - @Log("查询工序入库") - @ApiOperation("查询工序入库") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(workprocedureiosService.queryAll(whereJson,page),HttpStatus.OK); - } - - @PostMapping - @Log("新增工序入库") - @ApiOperation("新增工序入库") - //@PreAuthorize("@el.check('workprocedureios:add')") - public ResponseEntity create(@Validated @RequestBody WorkprocedureiosDto dto){ - workprocedureiosService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改工序入库") - @ApiOperation("修改工序入库") - //@PreAuthorize("@el.check('workprocedureios:edit')") - public ResponseEntity update(@Validated @RequestBody WorkprocedureiosDto dto){ - workprocedureiosService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除工序入库") - @ApiOperation("删除工序入库") - //@PreAuthorize("@el.check('workprocedureios:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - workprocedureiosService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @GetMapping("/getBillTypes") - @Log("查询工序入库单据类型") - @ApiOperation("查询工序入库单据类型") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getBillTypes(){ - return new ResponseEntity<>(workprocedureiosService.getBillTypes(),HttpStatus.OK); - } - - - @PostMapping("/selectStartPoint") - @Log("根据工序查找起始点位") - @ApiOperation("根据工序查找起始点位") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity selectStartPoint(@RequestBody JSONObject json){ - return new ResponseEntity<>(workprocedureiosService.selectStartPoint(json.getString("workprocedureid")),HttpStatus.OK); - } - - @PostMapping("/getStartArea") - @Log("根据起始点位编码查询点位区域") - @ApiOperation("根据起始点位编码查询点位区域") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getStartArea(@RequestBody JSONObject json){ - return new ResponseEntity<>(workprocedureiosService.getStartArea(json.getString("start_point_code")),HttpStatus.OK); - } - - @GetMapping("/getMaterial") - @Log("选择物料") - @ApiOperation("选择物料") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getMaterial(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(workprocedureiosService.getMaterial(whereJson,page),HttpStatus.OK); - } - - @PostMapping("/genTask") - @Log("生成任务") - @ApiOperation("生成任务") - //@PreAuthorize("@el.check('workprocedureios:add')") - public ResponseEntity genTask(@RequestBody JSONObject taskJson){ - workprocedureiosService.genTask(taskJson); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PostMapping("/getEndAareaByworkprocedureId") - @Log("根据工序查询终点区域") - @ApiOperation("根据工序查询终点区域") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getEndAareaByworkprocedureId(@RequestBody JSONObject param){ - return new ResponseEntity<>(workprocedureiosService.getEndAareaByworkprocedureId(param.getString("workprocedure_id")),HttpStatus.OK); - } - - @PostMapping("/getWorkProce") - @Log("跟据单据类型获取工序") - @ApiOperation("跟据单据类型获取工序") - public ResponseEntity getWorkProce(@RequestBody JSONObject param){ - return new ResponseEntity<>(workprocedureiosService.getWorkProce(param),HttpStatus.OK); - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/WorkprocedureiosService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/WorkprocedureiosService.java deleted file mode 100644 index 2b824a4..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/WorkprocedureiosService.java +++ /dev/null @@ -1,105 +0,0 @@ - -package org.nl.wms.st.in.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.springframework.data.domain.Pageable; -import java.util.Map; -import java.util.List; - -/** -* @description 服务接口 -* @author geng by -* @date 2022-04-21 -**/ -public interface WorkprocedureiosService { - - /** - * 查询数据分页 - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * @param weight_unit_id ID - * @return Workprocedureios - */ - WorkprocedureiosDto findById(Long weight_unit_id); - - /** - * 根据编码查询 - * @param code code - * @return Workprocedureios - */ - WorkprocedureiosDto findByCode(String code); - - - /** - * 创建 - * @param dto / - */ - void create(WorkprocedureiosDto dto); - - /** - * 编辑 - * @param dto / - */ - void update(WorkprocedureiosDto dto); - - /** - * 多选删除 - * @param ids / - */ - void deleteAll(Long[] ids); - - /** - * 查询入库单据类型 - * @return - */ - JSONArray getBillTypes(); - - /** - * 根据工序查询开始点位 - * @return - */ - JSONArray selectStartPoint(String workprocedureid); - - /** - *根据起始点位编码获取起始区域 - * @param start_point_code - * @return - */ - JSONObject getStartArea(String start_point_code); - - /** - * 工序入库选择物料查询 - * @param whereJson - * @param page - * @return - */ - Map getMaterial(Map whereJson, Pageable page); - - /** - * 生成任务 - * @param taskJson - */ - void genTask(JSONObject taskJson); - - /** - * 根据工序获取终点区域 - */ - Map getEndAareaByworkprocedureId(String workprocedure_id); - - JSONObject getWorkProce(JSONObject param); -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/dto/WorkprocedureiosDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/dto/WorkprocedureiosDto.java deleted file mode 100644 index 9912c16..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/dto/WorkprocedureiosDto.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.nl.wms.st.in.service.dto; - -import lombok.Data; -import java.math.BigDecimal; -import java.io.Serializable; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; - -/** - * @description / - * @author geng by - * @date 2022-04-29 - **/ -@Data -public class WorkprocedureiosDto implements Serializable { - - /** 出入单标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long iostorinv_id; - - /** 单据编号 */ - private String bill_code; - - /** 出入类型 */ - private String io_type; - - /** 单据类型 */ - private String bill_type; - - /** 工序标识 */ - private Long workprocedure_id; - - /** 物料标识 */ - private Long material_id; - - /** 载具编码 */ - private String vehicle_code; - - /** 数量 */ - private BigDecimal qty; - - /** 数量单位标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long qty_unit_id; - - /** 单据状态 */ - private String bill_status; - - /** 起始点位编码 */ - private String start_point_code; - - /** 终点点位编码 */ - private String end_point_code; - - /** 起始区域 */ - private String start_area; - - /** 终点区域 */ - private String end_area; - - /** 客户标识 */ - private Long cust_id; - - /** 生成方式 */ - private String create_mode; - - /** 任务标识 */ - private Long task_id; - - /** 备注 */ - private String remark; - - /** 创建人 */ - private Long create_id; - - /** 创建人 */ - private String create_name; - - /** 创建时间 */ - private String create_time; - - /** 修改人 */ - private Long update_optid; - - /** 修改人 */ - private String update_optname; - - /** 修改时间 */ - private String update_time; - - /** 确认人 */ - private Long confirm_optid; - - /** 确认人 */ - private String confirm_optname; - - /** 确认时间 */ - private String confirm_time; - - /** 是否删除 */ - private String is_delete; - - /** 批次 */ - private String pcsn; - - /** 物料工序标识 */ - private Long ivt_workprocedure_id; - - /** 是否满拖 */ - private String is_full; - - /** 黏次 */ - private String mix_seq; -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/WorkprocedureiosServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/WorkprocedureiosServiceImpl.java deleted file mode 100644 index 1d8244b..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/WorkprocedureiosServiceImpl.java +++ /dev/null @@ -1,310 +0,0 @@ - -package org.nl.wms.st.in.service.impl; - - -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import lombok.RequiredArgsConstructor; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; -import org.nl.wms.sch.tasks.SendMaterialTask; -import org.nl.wms.st.in.AreaEnum; -import org.nl.wms.st.in.BussConstant; -import org.nl.wms.st.in.WorkProcedureEnum; -import org.nl.wms.st.in.service.WorkprocedureiosService; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.nl.wql.WQL; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import org.springframework.data.domain.Pageable; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.utils.SecurityUtils; -import org.nl.wql.core.bean.ResultBean; -import org.nl.wql.core.bean.WQLObject; -import org.nl.wql.util.WqlUtil; -import lombok.extern.slf4j.Slf4j; -import cn.hutool.core.util.ObjectUtil; - -/** - * @author geng by - * @description 服务实现 - * @date 2022-04-21 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class WorkprocedureiosServiceImpl implements WorkprocedureiosService { - /*private final String THIS_CLASS = SendMaterialTask.class.getName();*/ - - @Override - public Map queryAll(Map whereJson, Pageable page) { - - String search = MapUtil.getStr(whereJson, "search"); - JSONObject map = new JSONObject(); - map.put("flag", "1"); - - if (ObjectUtil.isNotEmpty(search)) { - map.put("search", "%" + search + "%"); - } - JSONObject json = WQL.getWO("ST_Workprocedureios_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "a.create_time desc"); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkprocedureiosDto.class); - return null; - } - - @Override - public WorkprocedureiosDto findById(Long iostorinv_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(WorkprocedureiosDto.class); - } - return null; - } - - @Override - public WorkprocedureiosDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(WorkprocedureiosDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(WorkprocedureiosDto dto) { - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); - WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); - JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { - JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonVehicle)) { - throw new BadRequestException("载具不存在"); - } - } - - String bill_code = CodeUtil.getNewCode("IN_STORE_CODE"); - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setBill_code(bill_code); - dto.setIo_type("0"); - dto.setBill_status("10"); - dto.setCreate_mode("01"); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(WorkprocedureiosDto dto) { - WorkprocedureiosDto entity = this.findById(dto.getIostorinv_id()); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - - WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); - WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); - JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); - - if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { - JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonVehicle)) { - throw new BadRequestException("载具不存在"); - } - } - - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - dto.setBill_status("10"); - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - for (Long iostorinv_id : ids) { - JSONObject param = new JSONObject(); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param, "iostorinv_id = '" + iostorinv_id + "'"); - } - } - - @Override - public JSONArray getBillTypes() { - WQLObject wo = WQLObject.getWQLObject("sys_dict_detail"); - JSONArray arr = wo.query(" name = 'ST_INV_TYPE' and value like '00%'").getResultJSONArray(0); - return arr; - } - - @Override - public JSONArray selectStartPoint(String workprocedureid) { - JSONArray arrPoint = new JSONArray(); - WQLObject woPoint = WQLObject.getWQLObject("sch_base_point"); - // 共挤工序 - if (StrUtil.equals(workprocedureid, WorkProcedureEnum.GJGX.getId())) { - arrPoint = woPoint.query("is_used='1' and is_delete='0' and point_code like 'GJX%'").getResultJSONArray(0); - return arrPoint; - } - // 豪凯工序 - if (StrUtil.equals(workprocedureid, WorkProcedureEnum.HKGX.getId())) { - arrPoint = woPoint.query("is_used='1' and is_delete='0' and point_code like 'HK%'").getResultJSONArray(0); - return arrPoint; - } - - return arrPoint; - } - - @Override - public JSONObject getStartArea(String start_point_code) { - WQLObject woPoint = WQLObject.getWQLObject("sch_base_point"); - JSONObject arrDevice = woPoint.query("is_delete = '0' and point_code = '" + start_point_code + "'").uniqueResult(0); - return arrDevice; - } - - @Override - public Map getMaterial(Map whereJson, Pageable page) { - String where = ""; - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - String search = MapUtil.getStr(whereJson, "search"); - if (!StrUtil.isEmpty(search)) { - where = " AND (material_code like '%" + search + "%' OR material_name like '%" + search + "%' ) "; - } - ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete= '0'" + where, "update_time desc"); - final JSONObject json = rb.pageResult(); - return json; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void genTask(JSONObject taskJson) { - - String iostorinv_id = taskJson.getString("iostorinv_id"); - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject jsonObject = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - //请求参数 载具、起点 物料,数量,客户,批次,创建方式不能为空! 终点可以不为空时,入库单据编号不能为空 - JSONObject form = new JSONObject(); - String next_point_code = jsonObject.getString("end_point_code"); - String start_point_code = jsonObject.getString("start_point_code"); - String vehicle_code = jsonObject.getString("vehicle_code"); - String material_id = jsonObject.getString("material_id"); - String cust_id = jsonObject.getString("cust_id"); - String qty = jsonObject.getString("qty"); - String pcsn = jsonObject.getString("pcsn"); - String create_mode = jsonObject.getString("create_mode"); - String is_full = jsonObject.getString("is_full"); - String ivt_workprocedure_id = jsonObject.getString("ivt_workprocedure_id"); - form.put("vehicle_code", vehicle_code); - form.put("start_point_code", start_point_code); - form.put("next_point_code", next_point_code); - form.put("material_id", material_id); - form.put("qty", qty); - form.put("cust_id", cust_id); - form.put("create_mode", create_mode); - form.put("pcsn", pcsn); - form.put("is_full", is_full); - form.put("ivt_workprocedure_id", ivt_workprocedure_id); - form.put("iostorinv_id", iostorinv_id); - SendMaterialTask sendMaterialTask = new SendMaterialTask(); - String task_id = sendMaterialTask.createTask(form); - JSONObject json = new JSONObject(); - json.put("task_id", task_id); - json.put("update_optid", SecurityUtils.getCurrentUserId()); - json.put("update_optname", SecurityUtils.getNickName()); - json.put("update_time", DateUtil.now()); - json.put("bill_status", "20"); - wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); - } - - @Override - public Map getEndAareaByworkprocedureId(String workprocedure_id) { - String endArea = ""; - String qty_unit_id = ""; - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); -// switch (workProcedureEnum) { -// //包装工序 -// case CCGX: -// endArea = AreaEnum.CPHJ.getCode(); -// qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; -// break; -// -// //包装工序 -// case BZGX: -// endArea = AreaEnum.CPHJ.getCode(); -// qty_unit_id = BussConstant.HN_IN_QTY_UNIT_ID; -// break; -// // 清洗工序 -// case QXGX: -// endArea = AreaEnum.BCPHJ.getCode(); -// qty_unit_id = BussConstant.YZ_IN_QTY_UNIT_ID; -// break; -// default: -// endArea = null; -// qty_unit_id = null; -// break; -// } - JSONObject map = new JSONObject(); - map.put("end_area", endArea); - map.put("qty_unit_id", qty_unit_id); - return map; - } - - @Override - public JSONObject getWorkProce(JSONObject param) { - String type = param.getString("type"); - - WQLObject tab = WQLObject.getWQLObject("pdm_bi_workprocedure"); - - String workprocedure = ""; - if (StrUtil.equals(type, "001001")) workprocedure = "HK01"; - if (StrUtil.equals(type, "001002")) workprocedure = "GJ001"; - - JSONObject json = tab.query("workprocedure_code = '" + workprocedure + "' and is_used = '1' and is_delete = '0'").uniqueResult(0); - - return json; - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/wql/ST_Workprocedureios_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/wql/ST_Workprocedureios_01.wql deleted file mode 100644 index 0bec87c..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/wql/ST_Workprocedureios_01.wql +++ /dev/null @@ -1,67 +0,0 @@ -[交易说明] - 交易名: 工序入库单分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - a.*, - b.workprocedure_name, - c.material_name, - p1.point_name AS start_point_name, - p2.point_name AS end_point_name, - unit.unit_name, - cust.cust_name - FROM - ST_IVT_workProcedureIOS a - LEFT JOIN pdm_bi_workprocedure b ON a.workprocedure_id = b.workprocedure_id - LEFT JOIN md_me_materialbase c ON c.material_id = a.material_id - LEFT JOIN sch_base_point p1 ON a.start_point_code = p1.point_code - LEFT JOIN sch_base_point p2 ON a.end_point_code = p2.point_code - LEFT JOIN md_pb_measureunit unit ON a.qty_unit_id = unit.measure_unit_id - LEFT JOIN md_cs_customerbase cust ON a.cust_id = cust.cust_id - WHERE - a.is_delete = '0' - AND a.io_type = '0' - OPTION 输入.search <> "" - a.bill_code like 输入.search - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java new file mode 100644 index 0000000..c730e08 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RegionioInController.java @@ -0,0 +1,80 @@ + +package org.nl.wms.st.inbill.rest; + + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.inbill.service.RegionioInService; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.springframework.data.domain.Pageable; +import lombok.RequiredArgsConstructor; +import org.nl.annotation.Log; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.*; + +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +import lombok.extern.slf4j.Slf4j; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域入库管理") +@RequestMapping("/api/regionioIn") +@Slf4j +public class RegionioInController { + + private final RegionioInService rgionioInService; + + @GetMapping + @Log("查询区域入库") + @ApiOperation("查询区域入库") + //@PreAuthorize("@el.check('regionio:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(rgionioInService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域入库") + @ApiOperation("新增区域入库") + //@PreAuthorize("@el.check('regionio:add')") + public ResponseEntity create(@Validated @RequestBody RegionioDto dto) { + rgionioInService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域入库") + @ApiOperation("修改区域入库") + //@PreAuthorize("@el.check('regionio:edit')") + public ResponseEntity update(@Validated @RequestBody RegionioDto dto) { + rgionioInService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域入库") + @ApiOperation("删除区域入库") + //@PreAuthorize("@el.check('regionio:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + rgionioInService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject jsonObject) { + rgionioInService.createTask(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java new file mode 100644 index 0000000..c031d4e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RegionioInService.java @@ -0,0 +1,81 @@ + +package org.nl.wms.st.inbill.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Liuxy + * @description 服务接口 + * @date 2022-08-11 + **/ +public interface RegionioInService { + + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * + * @param qty_unit_id ID + * @return Regionio + */ + RegionioDto findById(Long qty_unit_id); + + /** + * 根据编码查询 + * + * @param code code + * @return Regionio + */ + RegionioDto findByCode(String code); + + + /** + * 创建 + * + * @param dto / + */ + void create(RegionioDto dto); + + /** + * 编辑 + * + * @param dto / + */ + void update(RegionioDto dto); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Long[] ids); + + /** + * 生成任务 + * + * @param jsonObject / + */ + void createTask(JSONObject jsonObject); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java new file mode 100644 index 0000000..32f1f66 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/dto/RegionioDto.java @@ -0,0 +1,157 @@ +package org.nl.wms.st.inbill.service.dto; + +import lombok.Data; + +import java.math.BigDecimal; +import java.io.Serializable; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +/** + * @author Liuxy + * @description / + * @date 2022-08-11 + **/ +@Data +public class RegionioDto implements Serializable { + + /** 出入单标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long iostorinv_id; + + /** + * 单据编号 + */ + private String bill_code; + + /** + * 出入类型 + */ + private String io_type; + + /** + * 物料标识 + */ + private Long material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 载具编码 + */ + private String vehicle_code; + + /** + * 数量 + */ + private BigDecimal qty; + + /** 数量单位标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long qty_unit_id; + + /** + * 单据状态 + */ + private String bill_status; + + /** + * 起始点位编码 + */ + private String start_point_code; + + /** + * 终点点位编码 + */ + private String end_point_code; + + /** + * 起始区域 + */ + private String start_region_id; + + /** + * 终点区域 + */ + private String end_region_id; + + /** + * 客户标识 + */ + private Long cust_id; + + /** + * 生成方式 + */ + private String create_mode; + + /** + * 任务标识 + */ + private Long task_id; + + /** + * 备注 + */ + private String remark; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private Long update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 确认人 + */ + private Long confirm_optid; + + /** + * 确认人姓名 + */ + private String confirm_optname; + + /** + * 确认时间 + */ + private String confirm_time; + + /** + * 是否删除 + */ + private String is_delete; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java new file mode 100644 index 0000000..18b8344 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java @@ -0,0 +1,216 @@ + +package org.nl.wms.st.inbill.service.impl; + + +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSON; +import lombok.RequiredArgsConstructor; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.sch.tasks.SendMaterialTask; +import org.nl.wms.st.inbill.service.RegionioInService; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.wql.WQL; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import org.springframework.data.domain.Pageable; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.utils.SecurityUtils; +import org.nl.wql.core.bean.ResultBean; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import lombok.extern.slf4j.Slf4j; +import cn.hutool.core.util.ObjectUtil; + +/** +* @description 服务实现 +* @author Liuxy +* @date 2022-08-11 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionioInServiceImpl implements RegionioInService { + + @Override + public Map queryAll(Map whereJson, Pageable page){ + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); + String material_code = MapUtil.getStr(whereJson, "material_code"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); + String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); + String start_region_code = MapUtil.getStr(whereJson, "start_region_code"); + String end_region_code = MapUtil.getStr(whereJson, "end_region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + map.put("bill_status",MapUtil.getStr(whereJson, "bill_status")); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code", bill_code + "%"); + if (ObjectUtil.isNotEmpty(vehicle_code)) map.put("vehicle_code", vehicle_code + "%"); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", material_code + "%"); + if (ObjectUtil.isNotEmpty(pcsn)) map.put("pcsn", pcsn + "%"); + if (ObjectUtil.isNotEmpty(start_point_code)) map.put("start_point_code", start_point_code + "%"); + if (ObjectUtil.isNotEmpty(end_point_code)) map.put("end_point_code", end_point_code + "%"); + if (ObjectUtil.isNotEmpty(start_region_code)) map.put("start_region_code", start_region_code + "%"); + if (ObjectUtil.isNotEmpty(end_region_code)) map.put("end_region_code", end_region_code + "%"); + + JSONObject json = WQL.getWO("ST_REGION_IN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ios.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionioDto.class); + return null; + } + + @Override + public RegionioDto findById(Long qty_unit_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("qty_unit_id = '" + qty_unit_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + public RegionioDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionioDto dto) { + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + String bill_code = CodeUtil.getNewCode("IN_STORE_CODE"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setBill_code(bill_code); + dto.setIo_type("0"); + dto.setBill_status("10"); + dto.setCreate_mode("01"); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionioDto dto) { + RegionioDto entity = this.findById(dto.getQty_unit_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + dto.setBill_status("10"); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + for (Long iostorinv_id: ids) { + JSONObject param = wo.query("iostorinv_id = '" + String.valueOf(iostorinv_id) + "'").uniqueResult(0); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject jsonObject) { + String iostorinv_id = jsonObject.getString("iostorinv_id"); + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject jsonIn = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + + // 准备参数 并调用入库处理类中的创建任务方法 + JSONObject form = new JSONObject(); + form.put("vehicle_code", jsonIn.getString("vehicle_code")); + form.put("start_point_code", jsonIn.getString("start_point_code")); + form.put("next_point_code", jsonIn.getString("end_point_code")); + form.put("material_id", jsonIn.getString("material_id")); + form.put("qty", jsonIn.getString("qty")); + form.put("cust_id", jsonIn.getString("cust_id")); + form.put("create_mode", jsonIn.getString("create_mode")); + form.put("pcsn", jsonIn.getString("pcsn")); + form.put("iostorinv_id", iostorinv_id); + SendMaterialTask sendMaterialTask = new SendMaterialTask(); + String task_id = sendMaterialTask.createTask(form); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("update_optid", SecurityUtils.getCurrentUserId()); + json.put("update_optname", SecurityUtils.getNickName()); + json.put("update_time", DateUtil.now()); + json.put("bill_status", "20"); + wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql new file mode 100644 index 0000000..02b7b0b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql @@ -0,0 +1,115 @@ +[交易说明] + 交易名: 区域入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.start_point_code TYPEAS s_string + 输入.end_point_code TYPEAS s_string + 输入.start_region_code TYPEAS s_string + 输入.end_region_code TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ios.*, + mater.material_code, + mater.material_name, + unit.unit_name, + region1.region_name AS start_region_name, + region2.region_name AS end_region_name, + point1.point_name AS start_point_name, + point2.point_name AS end_point_name + FROM + ST_IVT_regionIO ios + LEFT JOIN md_me_materialbase mater ON mater.material_id = ios.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ios.qty_unit_id + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = ios.start_region_id + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = ios.end_region_id + LEFT JOIN sch_base_point point1 ON point1.point_code = ios.start_point_code + LEFT JOIN sch_base_point point2 ON point2.point_code = ios.end_point_code + WHERE + ios.is_delete = '0' + AND ios.io_type = '0' + + OPTION 输入.bill_code <> "" + ios.bill_code like 输入.bill_code + ENDOPTION + + OPTION 输入.bill_status <> "" + ios.bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.vehicle_code <> "" + ios.vehicle_code like 输入.vehicle_code + ENDOPTION + + OPTION 输入.pcsn <> "" + ios.pcsn like 输入.pcsn + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + OPTION 输入.start_point_code <> "" + (point1.point_code like 输入.start_point_code or + point1.point_name like 输入.start_point_code) + ENDOPTION + + OPTION 输入.end_point_code <> "" + (point2.point_code like 输入.end_point_code or + point2.point_name like 输入.end_point_code) + ENDOPTION + + OPTION 输入.start_region_code <> "" + (region1.region_code like 输入.start_region_code or + region1.region_name like 输入.start_region_code) + ENDOPTION + + OPTION 输入.end_region_code <> "" + (region2.region_code like 输入.end_region_code or + region2.region_name like 输入.end_region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/WorkprocedureiosOutController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/WorkprocedureiosOutController.java deleted file mode 100644 index 9167e94..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/WorkprocedureiosOutController.java +++ /dev/null @@ -1,145 +0,0 @@ - -package org.nl.wms.st.out.rest; - - -import com.alibaba.fastjson.JSONObject; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.annotation.Log; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.nl.wms.st.out.service.WorkprocedureiosOutService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Pageable; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -/** -* @author geng by -* @date 2022-04-21 -**/ -@RestController -@RequiredArgsConstructor -@Api(tags = "工序出库管理") -@RequestMapping("/api/workprocedureiosOut") -@Slf4j -public class WorkprocedureiosOutController { - - @Autowired - private final WorkprocedureiosOutService workprocedureiosOutService; - - @GetMapping - @Log("查询工序出库") - @ApiOperation("查询工序出库") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(workprocedureiosOutService.queryAll(whereJson,page),HttpStatus.OK); - } - - @PostMapping - @Log("新增工序出库") - @ApiOperation("新增工序出库") - //@PreAuthorize("@el.check('workprocedureios:add')") - public ResponseEntity create(@Validated @RequestBody WorkprocedureiosDto dto){ - workprocedureiosOutService.create(dto); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @PutMapping - @Log("修改工序出库") - @ApiOperation("修改工序出库") - //@PreAuthorize("@el.check('workprocedureios:edit')") - public ResponseEntity update(@Validated @RequestBody WorkprocedureiosDto dto){ - workprocedureiosOutService.update(dto); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); - } - - @Log("删除工序出库") - @ApiOperation("删除工序出库") - //@PreAuthorize("@el.check('workprocedureios:del')") - @DeleteMapping - public ResponseEntity delete(@RequestBody Long[] ids) { - workprocedureiosOutService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); - } - - @GetMapping("/getBillTypes") - @Log("查询工序出库单据类型") - @ApiOperation("查询工序出库单据类型") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getBillTypes(){ - return new ResponseEntity<>(workprocedureiosOutService.getBillTypes(),HttpStatus.OK); - } - - - @PostMapping("/selectEndPoint") - @Log("根据工序查找终点点位") - @ApiOperation("根据工序查找终点点位") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity selectEndPoint(@RequestBody JSONObject json){ - return new ResponseEntity<>(workprocedureiosOutService.selectEndPoint(json.getString("workprocedureid")),HttpStatus.OK); - } - - @PostMapping("/getEndArea") - @Log("根据终点点位编码查询点位区域") - @ApiOperation("根据起始点位编码查询点位区域") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getStartArea(@RequestBody JSONObject json){ - return new ResponseEntity<>(workprocedureiosOutService.getStartArea(json.getString("start_point_code")),HttpStatus.OK); - } - - @GetMapping("/getMaterial") - @Log("选择物料") - @ApiOperation("选择物料") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getMaterial(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(workprocedureiosOutService.getMaterial(whereJson,page),HttpStatus.OK); - } - - @PostMapping("/genTask") - @Log("生成任务") - @ApiOperation("生成任务") - //@PreAuthorize("@el.check('workprocedureios:add')") - public ResponseEntity genTask(@RequestBody JSONObject taskJson){ - workprocedureiosOutService.genTask(taskJson); - return new ResponseEntity<>(HttpStatus.CREATED); - } - - @GetMapping("/getStartPoint") - @Log("查询起点点位") - @ApiOperation("查询起点点位") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getStartPoint(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(workprocedureiosOutService.getStartPoint(whereJson,page),HttpStatus.OK); - } - - @PostMapping("/getEndAareaByworkprocedureId") - @Log("根据工序查询起点区域") - @ApiOperation("根据工序查询起点区域") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getEndAareaByworkprocedureId(@RequestBody JSONObject param){ - return new ResponseEntity<>(workprocedureiosOutService.getEndAareaByworkprocedureId(param.getString("workprocedure_id")),HttpStatus.OK); - } - - @GetMapping("/queryWorkprocedure") - @Log("出库工序下拉") - @ApiOperation("出库工序下拉") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity queryWorkprocedure(){ - return new ResponseEntity<>(workprocedureiosOutService.queryWorkprocedure(),HttpStatus.OK); - } - - @PostMapping("/getIvtWorkprocedureId") - @Log("根据选择工序查询上一工序") - @ApiOperation("根据选择工序查询上一工序") - //@PreAuthorize("@el.check('workprocedureios:list')") - public ResponseEntity getIvtWorkprocedureId(@RequestBody JSONObject param){ - return new ResponseEntity<>(workprocedureiosOutService.getIvtWorkprocedureId(param),HttpStatus.OK); - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/WorkprocedureiosOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/WorkprocedureiosOutService.java deleted file mode 100644 index 54cc2e4..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/WorkprocedureiosOutService.java +++ /dev/null @@ -1,126 +0,0 @@ - -package org.nl.wms.st.out.service; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.nl.wms.st.out.service.dto.WorkprocedureDto; -import org.springframework.data.domain.Pageable; - -import java.util.List; -import java.util.Map; - -/** -* @description 服务接口 -* @author geng by -* @date 2022-04-21 -**/ -public interface WorkprocedureiosOutService { - - /** - * 查询数据分页 - * @param whereJson 条件 - * @param page 分页参数 - * @return Map - */ - Map queryAll(Map whereJson, Pageable page); - - /** - * 查询所有数据不分页 - * @param whereJson 条件参数 - * @return List - */ - List queryAll(Map whereJson); - - /** - * 根据ID查询 - * @param weight_unit_id ID - * @return Workprocedureios - */ - WorkprocedureiosDto findById(Long weight_unit_id); - - /** - * 根据编码查询 - * @param code code - * @return Workprocedureios - */ - WorkprocedureiosDto findByCode(String code); - - - /** - * 创建 - * @param dto / - */ - void create(WorkprocedureiosDto dto); - - /** - * 编辑 - * @param dto / - */ - void update(WorkprocedureiosDto dto); - - /** - * 多选删除 - * @param ids / - */ - void deleteAll(Long[] ids); - - /** - * 查询入库单据类型 - * @return - */ - JSONArray getBillTypes(); - - /** - * 根据工序查找终点点位 - * @return - */ - JSONArray selectEndPoint(String workprocedureid); - - /** - *根据起始点位编码获取起始区域 - * @param start_point_code - * @return - */ - JSONObject getStartArea(String start_point_code); - - /** - * 工序入库选择物料查询 - * @param whereJson - * @param page - * @return - */ - Map getMaterial(Map whereJson, Pageable page); - - /** - * 生产任务 - * @param taskJson - */ - void genTask(JSONObject taskJson); - - /** - * 获得起始点位 - * @param whereJson - * @param page - * @return - */ - Map getStartPoint(Map whereJson, Pageable page); - - /** - * 根据工序获取终点区域 - */ - Map getEndAareaByworkprocedureId(String workprocedure_id); - - /** - * 出库工序下拉 - * @return - */ - List queryWorkprocedure(); - - /** - * 根据选择工序查询上一工序 - * @param param - * @return - */ - Map getIvtWorkprocedureId(JSONObject param); -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java deleted file mode 100644 index c948804..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/WorkprocedureiosServiceOutImpl.java +++ /dev/null @@ -1,362 +0,0 @@ - -package org.nl.wms.st.out.service.impl; - - -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; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.exception.BadRequestException; -import org.nl.modules.system.util.CodeUtil; -import org.nl.utils.SecurityUtils; -import org.nl.wms.sch.tasks.CallMaterialTask; -import org.nl.wms.st.in.AreaEnum; -import org.nl.wms.st.in.BussConstant; -import org.nl.wms.st.in.WorkProcedureEnum; -import org.nl.wms.st.in.service.dto.WorkprocedureiosDto; -import org.nl.wms.st.out.service.WorkprocedureiosOutService; -import org.nl.wms.st.out.service.dto.WorkprocedureDto; -import org.nl.wql.WQL; -import org.nl.wql.core.bean.ResultBean; -import org.nl.wql.core.bean.WQLObject; -import org.nl.wql.util.WqlUtil; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Map; - -/** - * @author geng by - * @description 服务实现 - * @date 2022-04-21 - **/ -@Service -@RequiredArgsConstructor -@Slf4j -public class WorkprocedureiosServiceOutImpl implements WorkprocedureiosOutService { - - @Override - public Map queryAll(Map whereJson, Pageable page) { - - String search = MapUtil.getStr(whereJson, "search"); - JSONObject map = new JSONObject(); - map.put("flag", "1"); - - if (ObjectUtil.isNotEmpty(search)) { - map.put("search", "%" + search + "%"); - } - JSONObject json = WQL.getWO("ST_WorkprocedureiosOut_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "a.create_time desc"); - return json; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkprocedureiosDto.class); - return null; - } - - @Override - public WorkprocedureiosDto findById(Long iostorinv_id) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(WorkprocedureiosDto.class); - } - return null; - } - - @Override - public WorkprocedureiosDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)) { - return json.toJavaObject(WorkprocedureiosDto.class); - } - return null; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(WorkprocedureiosDto dto) { - String bill_code = CodeUtil.getNewCode("OUT_STORE_CODE"); - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setBill_code(bill_code); - dto.setIo_type("1"); - dto.setBill_status("10"); - - Map endMap = this.getEndAareaByworkprocedureId(dto.getWorkprocedure_id().toString()); - String start_area = dto.getEnd_point_code(); - if (StrUtil.isEmpty(start_area)) { - String startArea = MapUtil.getStr(endMap, "start_area"); - if (StrUtil.isEmpty(startArea)) { - throw new BadRequestException("起始区域为空,枚举中未查到工序对应区域!"); - } - dto.setStart_area(startArea); - } - Long qty_unit_id = dto.getQty_unit_id(); - if (ObjectUtil.isNull(qty_unit_id)) { - String unit_id = MapUtil.getStr(endMap, "qty_unit_id"); - if (StrUtil.isEmpty(unit_id)) { - throw new BadRequestException("数量单位为空,枚举中未查到工序对应区域!"); - } - qty_unit_id = Long.valueOf(unit_id); - dto.setQty_unit_id(qty_unit_id); - } - dto.setCreate_mode("01"); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - dto.setCreate_time(now); - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(WorkprocedureiosDto dto) { - WorkprocedureiosDto entity = this.findById(dto.getIostorinv_id()); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - dto.setBill_status("10"); - - - Map endMap = this.getEndAareaByworkprocedureId(dto.getWorkprocedure_id().toString()); - String start_area = dto.getEnd_point_code(); - if (StrUtil.isEmpty(start_area)) { - String startArea = MapUtil.getStr(endMap, "start_area"); - if (StrUtil.isEmpty(startArea)) { - throw new BadRequestException("起始区域为空,枚举中未查到工序对应区域!"); - } - dto.setStart_area(startArea); - } - Long qty_unit_id = dto.getQty_unit_id(); - if (ObjectUtil.isNull(qty_unit_id)) { - String unit_id = MapUtil.getStr(endMap, "qty_unit_id"); - if (StrUtil.isEmpty(unit_id)) { - throw new BadRequestException("数量单位为空,枚举中未查到工序对应区域!"); - } - qty_unit_id = Long.valueOf(unit_id); - dto.setQty_unit_id(qty_unit_id); - } - - dto.setUpdate_time(now); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - for (Long iostorinv_id : ids) { - JSONObject param = new JSONObject(); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param, "iostorinv_id = '" + iostorinv_id + "'"); - } - } - - @Override - public JSONArray getBillTypes() { - WQLObject wo = WQLObject.getWQLObject("sys_dict_detail"); - JSONArray arr = wo.query(" name = 'ST_INV_TYPE' and value like '01%'").getResultJSONArray(0); - return arr; - } - - @Override - public JSONArray selectEndPoint(String workprocedureid) { - /*WQLObject woDevice = WQLObject.getWQLObject("pdm_base_device");*/ - JSONArray arrPoint = new JSONArray(); - WQLObject woPoint = WQLObject.getWQLObject("sch_base_point"); -// if (StrUtil.equals(workprocedureid, WorkProcedureEnum.CCGX.getId())) { -// arrPoint = woPoint.query("is_used='1' and is_delete='0' and area_type ='KQ006'").getResultJSONArray(0); -// return arrPoint; -// } -// //包装工序 -// if (StrUtil.equals(workprocedureid, WorkProcedureEnum.BZGX.getId())) { -// arrPoint = woPoint.query("is_used='1' and is_delete='0' and area_type ='KQ006'").getResultJSONArray(0); -// return arrPoint; -// } -// //清洗工序 -// if (StrUtil.equals(workprocedureid, WorkProcedureEnum.QXGX.getId())) { -// -// } - /* for (int i = 0; i < arrDevice.size(); i++) { - JSONObject jsonDevice = arrDevice.getJSONObject(i); - JSONArray arrPoints = woPoint.query("is_delete = '0' and device_point_type = '01' and device_id = '" + jsonDevice.getString("device_id") + "'").getResultJSONArray(0); - for (int j = 0; j < arrPoints.size(); j++) { - JSONObject jsonPoint = arrPoints.getJSONObject(j); - arrPoint.add(jsonPoint); - } - }*/ - return arrPoint; - } - - @Override - public JSONObject getStartArea(String start_point_code) { - WQLObject woPoint = WQLObject.getWQLObject("sch_base_point"); - JSONObject arrDevice = woPoint.query("is_delete = '0' and point_code = '" + start_point_code + "'").uniqueResult(0); - return arrDevice; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public Map getMaterial(Map whereJson, Pageable page) { - String where = ""; - WQLObject wo = WQLObject.getWQLObject("MD_ME_Material"); - String search = MapUtil.getStr(whereJson, "search"); - if (!StrUtil.isEmpty(search)) { - where = " AND (material_code like '%" + search + "%' OR material_name like '%" + search + "%' ) "; - } - ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_delete= '0'" + where, "update_time desc"); - final JSONObject json = rb.pageResult(); - return json; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void genTask(JSONObject taskJson) { - String iostorinv_id = taskJson.getString("iostorinv_id"); - WQLObject wo = WQLObject.getWQLObject("st_ivt_workprocedureios"); - JSONObject jsonObject = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - - //请求参数 载具、起点 物料,数量,客户,批次,创建方式不能为空! 终点可以不为空时,入库单据编号不能为空 - JSONObject form = new JSONObject(); - String next_point_code = jsonObject.getString("end_point_code"); - String start_point_code = jsonObject.getString("start_point_code"); - String vehicle_code = jsonObject.getString("vehicle_code"); - String material_id = jsonObject.getString("material_id"); - String cust_id = jsonObject.getString("cust_id"); - String pcsn = jsonObject.getString("pcsn"); - String is_full = jsonObject.getString("is_full"); - String ivt_workprocedure_id = jsonObject.getString("ivt_workprocedure_id"); - String create_mode = jsonObject.getString("create_mode"); - form.put("start_point_code", start_point_code); - form.put("next_point_code", next_point_code); - form.put("vehicle_code", vehicle_code); - form.put("material_id", material_id); - form.put("cust_id", cust_id); - form.put("create_mode", create_mode); - form.put("pcsn", pcsn); - form.put("is_full", is_full); - form.put("ivt_workprocedure_id", ivt_workprocedure_id); - form.put("iostorinv_id", iostorinv_id); - CallMaterialTask callMaterialTask = new CallMaterialTask(); - String task_id = callMaterialTask.createTask(form); - JSONObject json = new JSONObject(); - json.put("task_id", task_id); - json.put("update_optid", SecurityUtils.getCurrentUserId()); - json.put("update_optname", SecurityUtils.getNickName()); - json.put("update_time", DateUtil.now()); - json.put("bill_status", "20"); - wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); - - - } - - @Override - public Map getStartPoint(Map whereJson, Pageable page) { - String material_id = MapUtil.getStr(whereJson, "material_id"); - // String is_full = MapUtil.getStr(whereJson, "is_full"); - String ivt_workprocedure_id = MapUtil.getStr(whereJson, "ivt_workprocedure_id"); - JSONObject map = new JSONObject(); - map.put("flag", "2"); - map.put("material_id", material_id); - // map.put("is_full",is_full); - map.put("ivt_workprocedure_id", ivt_workprocedure_id); - JSONObject json = WQL.getWO("ST_WorkprocedureiosOut_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "structivt.pcsn desc"); - return json; - } - - @Override - public Map getEndAareaByworkprocedureId(String workprocedure_id) { - String startArea = ""; - String qty_unit_id = ""; - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(workprocedure_id); - // TODO -// switch (workProcedureEnum) { -// //包装工序 -// case CCGX: -// startArea = AreaEnum.CPHJ.getCode(); -// qty_unit_id = BussConstant.YZ_OUT_QTY_UNIT_ID; -// break; -// //包装工序 -// case BZGX: -// startArea = AreaEnum.CPHJ.getCode(); -// qty_unit_id = null; -// break; -// // 清洗工序 -// case QXGX: -// startArea = AreaEnum.BCPHJ.getCode(); -// qty_unit_id = BussConstant.YZ_OUT_QTY_UNIT_ID; -// break; -// default: -// startArea = null; -// qty_unit_id = null; -// break; -// } - JSONObject map = new JSONObject(); - map.put("start_area", startArea); - map.put("qty_unit_id", qty_unit_id); - return map; - } - - @Override - public List queryWorkprocedure() { - WQLObject wo = WQLObject.getWQLObject("pdm_base_workprocedure"); - JSONArray arr = wo.query(" is_delete = '0' and workprocedure_id != '1514444198529601536'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkprocedureDto.class); - return null; - } - - @Override - public Map getIvtWorkprocedureId(JSONObject param) { - - String ivt_workprocedure_id = ""; - WorkProcedureEnum workProcedureEnum = WorkProcedureEnum.get(param.getString("workprocedureid")); - // TODO -// switch (workProcedureEnum) { -// case BZGX: -// ivt_workprocedure_id = WorkProcedureEnum.BZGX.getId(); -// break; -// case QXGX: -// ivt_workprocedure_id = WorkProcedureEnum.QXGX.getId(); -// break; -// } - JSONObject map = new JSONObject(); - map.put("ivt_workprocedure_id", ivt_workprocedure_id); - return map; - } - -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/wql/ST_WorkprocedureiosOut_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/wql/ST_WorkprocedureiosOut_01.wql deleted file mode 100644 index 3989808..0000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/wql/ST_WorkprocedureiosOut_01.wql +++ /dev/null @@ -1,101 +0,0 @@ -[交易说明] - 交易名: 工序出库单分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.search TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.is_full TYPEAS s_string - 输入.ivt_workprocedure_id TYPEAS s_string - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - PAGEQUERY - SELECT - a.*, - b.workprocedure_name, - c.material_name, - p1.point_name AS start_point_name, - p2.point_name AS end_point_name, - unit.unit_name - FROM - ST_IVT_workProcedureIOS a - LEFT JOIN pdm_bi_workprocedure b ON a.workprocedure_id = b.workprocedure_id - LEFT JOIN md_me_materialbase c ON c.material_id = a.material_id - LEFT JOIN sch_base_point p1 ON a.start_point_code = p1.point_code - LEFT JOIN sch_base_point p2 ON a.end_point_code = p2.point_code - LEFT JOIN md_pb_measureunit unit ON a.qty_unit_id = unit.measure_unit_id - - WHERE - a.is_delete = '0' - AND a.io_type = '1' - OPTION 输入.search <> "" - a.bill_code like 输入.search - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "2" - PAGEQUERY - SELECT - point.*, - material.material_id, - material.material_name, - point.vehicle_code AS vehicle_code111, - structivt.pcsn, - structivt.canuse_qty, - structivt.frozen_qty, - structivt.ivt_qty, - structivt.warehousing_qty, - structivt.qty_unit_id, - structivt.instorage_time, - unit.unit_name - FROM - st_ivt_structivt structivt - LEFT JOIN sch_base_point point ON point.point_id = structivt.struct_id - LEFT JOIN md_me_materialbase material ON structivt.material_id = material.material_id - LEFT JOIN md_pb_measureunit unit ON structivt.qty_unit_id = unit.measure_unit_id - WHERE - point.is_delete = '0' - AND point.lock_type = '00' - AND structivt.canuse_qty > 0 - AND point.is_used = '1' - and structivt.workprocedure_id = 输入.ivt_workprocedure_id - and structivt.material_id = 输入.material_id - ENDSELECT - ENDPAGEQUERY - ENDIF - diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java new file mode 100644 index 0000000..d93f20a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/RegionioOutController.java @@ -0,0 +1,84 @@ + +package org.nl.wms.st.outbill.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.wms.st.outbill.service.RegionioOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author Liuxy + * @date 2022-08-11 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "区域出库管理") +@RequestMapping("/api/regionioOut") +@Slf4j +public class RegionioOutController { + + private final RegionioOutService regionioOutService; + + @GetMapping + @Log("查询区域出库") + @ApiOperation("查询区域出库") + //@PreAuthorize("@el.check('regionio:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(regionioOutService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增区域出库") + @ApiOperation("新增区域出库") + //@PreAuthorize("@el.check('regionio:add')") + public ResponseEntity create(@Validated @RequestBody RegionioDto dto) { + regionioOutService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改区域入库") + @ApiOperation("修改区域入库") + //@PreAuthorize("@el.check('regionio:edit')") + public ResponseEntity update(@Validated @RequestBody RegionioDto dto) { + regionioOutService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除区域出库") + @ApiOperation("删除区域出库") + //@PreAuthorize("@el.check('regionio:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + regionioOutService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("生成任务") + @ApiOperation("生成任务") + @PostMapping("/createTask") + public ResponseEntity createTask(@RequestBody JSONObject jsonObject) { + regionioOutService.createTask(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getMaterial") + @Log("选择物料") + @ApiOperation("选择物料") + public ResponseEntity getMaterial(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(regionioOutService.getMaterial(whereJson,page),HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/WorkProcedureService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java similarity index 50% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/WorkProcedureService.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java index 980caf5..9fc2b9d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/pdm/service/WorkProcedureService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/RegionioOutService.java @@ -1,20 +1,20 @@ -package org.nl.wms.basedata.pdm.service; +package org.nl.wms.st.outbill.service; -import com.alibaba.fastjson.JSONArray; -import org.nl.wms.basedata.pdm.service.dto.WorkProcedureDto; -import org.nl.wms.st.out.service.dto.WorkprocedureDto; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.st.inbill.service.dto.RegionioDto; import org.springframework.data.domain.Pageable; import java.util.List; import java.util.Map; /** - * @author ldjun + * @author Liuxy * @description 服务接口 - * @date 2021-12-19 + * @date 2022-08-11 **/ -public interface WorkProcedureService { +public interface RegionioOutService { + /** * 查询数据分页 * @@ -28,25 +28,25 @@ public interface WorkProcedureService { * 查询所有数据不分页 * * @param whereJson 条件参数 - * @return List + * @return List */ - List queryAll(Map whereJson); + List queryAll(Map whereJson); /** * 根据ID查询 * - * @param workProcedure_id ID - * @return WorkProcedure + * @param qty_unit_id ID + * @return Regionio */ - WorkProcedureDto findById(Long workProcedure_id); + RegionioDto findById(Long qty_unit_id); /** * 根据编码查询 * * @param code code - * @return WorkProcedure + * @return Regionio */ - WorkProcedureDto findByCode(String code); + RegionioDto findByCode(String code); /** @@ -54,8 +54,14 @@ public interface WorkProcedureService { * * @param dto / */ - void create(WorkProcedureDto dto); + void create(RegionioDto dto); + /** + * 编辑 + * + * @param dto / + */ + void update(RegionioDto dto); /** * 多选删除 @@ -65,24 +71,17 @@ public interface WorkProcedureService { void deleteAll(Long[] ids); /** - * 编辑 + * 生成任务 * - * @param dto / + * @param jsonObject / */ - void update(WorkProcedureDto dto); - + void createTask(JSONObject jsonObject); /** - * 获取下拉选列表 + * 选择出库物料 * - * @return - */ - JSONArray downSelect(); - /** - * 查询所有数据不分页 * @param whereJson 条件参数 - * @return List + * @return List */ - List queryWorkprocedure(); - + Map getMaterial(Map whereJson, Pageable page); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java new file mode 100644 index 0000000..6c44060 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/RegionioOutServiceImpl.java @@ -0,0 +1,227 @@ + +package org.nl.wms.st.outbill.service.impl; + + +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 com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SecurityUtils; +import org.nl.wms.sch.tasks.CallMaterialTask; +import org.nl.wms.sch.tasks.SendMaterialTask; +import org.nl.wms.st.inbill.service.dto.RegionioDto; +import org.nl.wms.st.outbill.service.RegionioOutService; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @description 服务实现 +* @author Liuxy +* @date 2022-08-11 +**/ +@Service +@RequiredArgsConstructor +@Slf4j +public class RegionioOutServiceImpl implements RegionioOutService { + + @Override + public Map queryAll(Map whereJson, Pageable page){ + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); + String material_code = MapUtil.getStr(whereJson, "material_code"); + String pcsn = MapUtil.getStr(whereJson, "pcsn"); + String start_point_code = MapUtil.getStr(whereJson, "start_point_code"); + String end_point_code = MapUtil.getStr(whereJson, "end_point_code"); + String start_region_code = MapUtil.getStr(whereJson, "start_region_code"); + String end_region_code = MapUtil.getStr(whereJson, "end_region_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + map.put("bill_status",MapUtil.getStr(whereJson, "bill_status")); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code", bill_code + "%"); + if (ObjectUtil.isNotEmpty(vehicle_code)) map.put("vehicle_code", vehicle_code + "%"); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code", material_code + "%"); + if (ObjectUtil.isNotEmpty(pcsn)) map.put("pcsn", pcsn + "%"); + if (ObjectUtil.isNotEmpty(start_point_code)) map.put("start_point_code", start_point_code + "%"); + if (ObjectUtil.isNotEmpty(end_point_code)) map.put("end_point_code", end_point_code + "%"); + if (ObjectUtil.isNotEmpty(start_region_code)) map.put("start_region_code", start_region_code + "%"); + if (ObjectUtil.isNotEmpty(end_region_code)) map.put("end_region_code", end_region_code + "%"); + + JSONObject json = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ios.create_time DESC"); + return json; + } + + @Override + public List queryAll(Map whereJson){ + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(RegionioDto.class); + return null; + } + + @Override + public RegionioDto findById(Long qty_unit_id) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("qty_unit_id = '" + qty_unit_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + public RegionioDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)){ + return json.toJavaObject( RegionioDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(RegionioDto dto) { + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + String bill_code = CodeUtil.getNewCode("OUT_STORE_CODE"); + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + dto.setIostorinv_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setBill_code(bill_code); + dto.setIo_type("1"); + dto.setBill_status("10"); + dto.setCreate_mode("01"); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(RegionioDto dto) { + RegionioDto entity = this.findById(dto.getQty_unit_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject vehicleTab = WQLObject.getWQLObject("MD_PB_StorageVehicleInfo"); + JSONObject jsonMater = materTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(dto.getVehicle_code())) { + JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + dto.getVehicle_code() + "' and is_delete = '0' and is_used= '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonVehicle)) { + throw new BadRequestException("载具不存在"); + } + } + + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + dto.setBill_status("10"); + dto.setUpdate_time(now); + dto.setUpdate_optid(currentUserId); + dto.setUpdate_optname(nickName); + dto.setQty_unit_id(jsonMater.getLongValue("base_unit_id")); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("st_ivt_regionio"); + for (Long iostorinv_id: ids) { + JSONObject param = wo.query("iostorinv_id = '" + String.valueOf(iostorinv_id) + "'").uniqueResult(0); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createTask(JSONObject jsonObject) { + String iostorinv_id = jsonObject.getString("iostorinv_id"); + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + JSONObject jsonIn = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + + // 准备参数 并调用入库处理类中的创建任务方法 + JSONObject form = new JSONObject(); + form.put("vehicle_code", jsonIn.getString("vehicle_code")); + form.put("start_point_code", jsonIn.getString("start_point_code")); + form.put("next_point_code", jsonIn.getString("end_point_code")); + form.put("material_id", jsonIn.getString("material_id")); + form.put("qty", jsonIn.getString("qty")); + form.put("cust_id", jsonIn.getString("cust_id")); + form.put("create_mode", jsonIn.getString("create_mode")); + form.put("pcsn", jsonIn.getString("pcsn")); + form.put("iostorinv_id", iostorinv_id); + CallMaterialTask callMaterialTask = new CallMaterialTask(); + String task_id = callMaterialTask.createTask(form); + + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("update_optid", SecurityUtils.getCurrentUserId()); + json.put("update_optname", SecurityUtils.getNickName()); + json.put("update_time", DateUtil.now()); + json.put("bill_status", "20"); + wo.update(json, "iostorinv_id = '" + iostorinv_id + "'"); + } + + @Override + public Map getMaterial(Map whereJson, Pageable page) { + String material_code = MapUtil.getStr(whereJson, "material_code"); + + HashMap map = new HashMap<>(); + map.put("flag", "2"); + map.put("region_id", MapUtil.getStr(whereJson, "region_id")); + if (ObjectUtil.isNotEmpty(material_code)) map.put("material_code",material_code); + + JSONObject json = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.instorage_time DESC"); + return json; + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql new file mode 100644 index 0000000..163ac53 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql @@ -0,0 +1,147 @@ +[交易说明] + 交易名: 区域入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.material_code TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.start_point_code TYPEAS s_string + 输入.end_point_code TYPEAS s_string + 输入.start_region_code TYPEAS s_string + 输入.end_region_code TYPEAS s_string + 输入.region_id TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + ios.*, + mater.material_code, + mater.material_name, + unit.unit_name, + region1.region_name AS start_region_name, + region2.region_name AS end_region_name, + point1.point_name AS start_point_name, + point2.point_name AS end_point_name + FROM + ST_IVT_regionIO ios + LEFT JOIN md_me_materialbase mater ON mater.material_id = ios.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ios.qty_unit_id + LEFT JOIN SCH_BASE_Region region1 ON region1.region_id = ios.start_region_id + LEFT JOIN SCH_BASE_Region region2 ON region2.region_id = ios.end_region_id + LEFT JOIN sch_base_point point1 ON point1.point_code = ios.start_point_code + LEFT JOIN sch_base_point point2 ON point2.point_code = ios.end_point_code + WHERE + ios.is_delete = '0' + AND ios.io_type = '1' + + OPTION 输入.bill_code <> "" + ios.bill_code like 输入.bill_code + ENDOPTION + + OPTION 输入.bill_status <> "" + ios.bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.vehicle_code <> "" + ios.vehicle_code like 输入.vehicle_code + ENDOPTION + + OPTION 输入.pcsn <> "" + ios.pcsn like 输入.pcsn + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + OPTION 输入.start_point_code <> "" + (point1.point_code like 输入.start_point_code or + point1.point_name like 输入.start_point_code) + ENDOPTION + + OPTION 输入.end_point_code <> "" + (point2.point_code like 输入.end_point_code or + point2.point_name like 输入.end_point_code) + ENDOPTION + + OPTION 输入.start_region_code <> "" + (region1.region_code like 输入.start_region_code or + region1.region_name like 输入.start_region_code) + ENDOPTION + + OPTION 输入.end_region_code <> "" + (region2.region_code like 输入.end_region_code or + region2.region_name like 输入.end_region_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + PAGEQUERY + SELECT + ivt.*, + mater.material_code, + mater.material_name, + mater.material_spec, + mater.material_model, + unit.unit_name, + point.vehicle_code + FROM + ST_IVT_StructIvt ivt + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + WHERE + 1=1 + + OPTION 输入.region_id <> "" + point.region_id = 输入.region_id + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code like 输入.material_code or + mater.material_name like 输入.material_code) + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java b/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java index 4120e86..6b21fdd 100644 --- a/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java +++ b/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java @@ -1244,9 +1244,9 @@ public class Test3 extends BaseTest { json.put("struct_code", code1+"01"+ code); json.put("struct_name", String.valueOf(i) + "排" + "1 层" + String.valueOf(j) + "列"); json.put("simple_name",json.getString("struct_name")); - json.put("sect_id", "1556544422710218752"); - json.put("sect_code","YSQ01"); - json.put("sect_name","二楼养生区A"); + json.put("region_id", "1557539288307077120"); + json.put("region_code","YSQA01"); + json.put("region_name","养生区A"); json.put("stor_id","1528627964823080960"); json.put("stor_code","F103"); json.put("stor_name","永裕仓库"); diff --git a/mes/qd/src/api/wms/pdm/workprocedure.js b/mes/qd/src/api/wms/pdm/workprocedure.js index 335b828..04663f0 100644 --- a/mes/qd/src/api/wms/pdm/workprocedure.js +++ b/mes/qd/src/api/wms/pdm/workprocedure.js @@ -39,4 +39,11 @@ export function queryWorkprocedure() { }) } -export default { add, edit, del, changeActive, queryWorkprocedure } +export function queryWorkprocedure2() { + return request({ + url: '/api/workProcedure/queryWorkprocedure2', + method: 'get' + }) +} + +export default { add, edit, del, changeActive, queryWorkprocedure, queryWorkprocedure2 } diff --git a/mes/qd/src/api/wms/sch/point.js b/mes/qd/src/api/wms/sch/point.js index b41e514..19f6817 100644 --- a/mes/qd/src/api/wms/sch/point.js +++ b/mes/qd/src/api/wms/sch/point.js @@ -53,4 +53,11 @@ export function getPoint(data) { }) } -export default { add, edit, del, syncStruct, changeActive, findPoints, getPoint } +export function getRegion() { + return request({ + url: '/api/point/getRegion', + method: 'get' + }) +} + +export default { add, edit, del, syncStruct, changeActive, findPoints, getPoint, getRegion } diff --git a/mes/qd/src/api/wms/sch/region.js b/mes/qd/src/api/wms/sch/region.js new file mode 100644 index 0000000..723ae26 --- /dev/null +++ b/mes/qd/src/api/wms/sch/region.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/region', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/region/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/region', + method: 'put', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/region/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, changeActive } diff --git a/mes/qd/src/api/wms/st/in/workprocedureios.js b/mes/qd/src/api/wms/st/in/workprocedureios.js deleted file mode 100644 index bccf21c..0000000 --- a/mes/qd/src/api/wms/st/in/workprocedureios.js +++ /dev/null @@ -1,81 +0,0 @@ -import request from '@/utils/request' - -export function add(data) { - return request({ - url: 'api/workprocedureiosIn', - method: 'post', - data - }) -} - -export function del(ids) { - return request({ - url: 'api/workprocedureiosIn/', - method: 'delete', - data: ids - }) -} - -export function edit(data) { - return request({ - url: 'api/workprocedureiosIn', - method: 'put', - data - }) -} - -export function getBillTypes() { - return request({ - url: 'api/workprocedureiosIn/getBillTypes', - method: 'get' - }) -} - -export function selectStartPoint(data) { - return request({ - url: 'api/workprocedureiosIn/selectStartPoint', - method: 'post', - data - }) -} - -export function getStartArea(data) { - return request({ - url: 'api/workprocedureiosIn/getStartArea', - method: 'post', - data - }) -} - -export function getEndArea(data) { - return request({ - url: 'api/workprocedureiosIn/getEndArea', - method: 'post', - data - }) -} - -export function genTask(data) { - return request({ - url: 'api/workprocedureiosIn/genTask', - method: 'post', - data - }) -} - -export function getEndAareaByworkprocedureId(data) { - return request({ - url: 'api/workprocedureiosIn/getEndAareaByworkprocedureId', - method: 'post', - data - }) -} - -export function getWorkProce(data) { - return request({ - url: 'api/workprocedureiosIn/getWorkProce', - method: 'post', - data - }) -} -export default { add, edit, del, getBillTypes, selectStartPoint, getStartArea, getEndArea, genTask, getEndAareaByworkprocedureId, getWorkProce } diff --git a/mes/qd/src/api/wms/st/inbill/regionioIn.js b/mes/qd/src/api/wms/st/inbill/regionioIn.js new file mode 100644 index 0000000..0bb1ff8 --- /dev/null +++ b/mes/qd/src/api/wms/st/inbill/regionioIn.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/regionioIn', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/regionioIn/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/regionioIn', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/regionioIn/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask } diff --git a/mes/qd/src/api/wms/st/out/workprocedureiosOut.js b/mes/qd/src/api/wms/st/out/workprocedureiosOut.js deleted file mode 100644 index 4166620..0000000 --- a/mes/qd/src/api/wms/st/out/workprocedureiosOut.js +++ /dev/null @@ -1,89 +0,0 @@ -import request from '@/utils/request' - -export function add(data) { - return request({ - url: 'api/workprocedureiosOut', - method: 'post', - data - }) -} - -export function del(ids) { - return request({ - url: 'api/workprocedureiosOut/', - method: 'delete', - data: ids - }) -} - -export function edit(data) { - return request({ - url: 'api/workprocedureiosOut', - method: 'put', - data - }) -} - -export function getBillTypes() { - return request({ - url: 'api/workprocedureiosOut/getBillTypes', - method: 'get' - }) -} - -export function selectStartPoint(data) { - return request({ - url: 'api/workprocedureiosOut/selectStartPoint', - method: 'post', - data - }) -} - -export function getEndArea(data) { - return request({ - url: 'api/workprocedureiosOut/getEndArea', - method: 'post', - data - }) -} - -export function genTask(data) { - return request({ - url: 'api/workprocedureiosOut/genTask', - method: 'post', - data - }) -} - -export function selectEndPoint(data) { - return request({ - url: 'api/workprocedureiosOut/selectEndPoint', - method: 'post', - data - }) -} - -export function getEndAareaByworkprocedureId(data) { - return request({ - url: 'api/workprocedureiosOut/getEndAareaByworkprocedureId', - method: 'post', - data - }) -} - -export function queryWorkprocedure() { - return request({ - url: 'api/workProcedure/queryWorkprocedure', - method: 'get' - }) -} - -export function getIvtWorkprocedureId(data) { - return request({ - url: 'api/workprocedureiosOut/getIvtWorkprocedureId', - method: 'post', - data - }) -} - -export default { add, edit, del, getBillTypes, selectStartPoint, getEndArea, genTask, selectEndPoint, getEndAareaByworkprocedureId, queryWorkprocedure, getIvtWorkprocedureId } diff --git a/mes/qd/src/api/wms/st/outbill/regionioOut.js b/mes/qd/src/api/wms/st/outbill/regionioOut.js new file mode 100644 index 0000000..8b82168 --- /dev/null +++ b/mes/qd/src/api/wms/st/outbill/regionioOut.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/regionioOut', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/regionioOut/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/regionioOut', + method: 'put', + data + }) +} + +export function createTask(data) { + return request({ + url: 'api/regionioOut/createTask', + method: 'post', + data + }) +} + +export default { add, edit, del, createTask } diff --git a/mes/qd/src/views/wms/basedata/pdm/workProcedure/index.vue b/mes/qd/src/views/wms/basedata/pdm/workProcedure/index.vue deleted file mode 100644 index 8a6d223..0000000 --- a/mes/qd/src/views/wms/basedata/pdm/workProcedure/index.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - diff --git a/mes/qd/src/views/wms/basedata/st/ivt/index.vue b/mes/qd/src/views/wms/basedata/st/ivt/index.vue index bed026b..c7bd046 100644 --- a/mes/qd/src/views/wms/basedata/st/ivt/index.vue +++ b/mes/qd/src/views/wms/basedata/st/ivt/index.vue @@ -11,16 +11,6 @@ label-width="90px" label-suffix=":" > - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - @@ -245,23 +86,18 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -import crudWorkProcedure from '@/api/wms/basedata/pdm/workProcedure' -import MaterDtl from '@/views/wms/pub/MaterDialog' -import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' -import '@riophae/vue-treeselect/dist/vue-treeselect.css' -import crudClassstandard from '@/api/wms/basedata/master/classstandard' -import crudSectattr from '@/api/wms/basedata/st/sectattr' +import crudPoint from '@/api/wms/sch/point' const defaultForm = { stockrecord_id: null, cascader: null, struct_id: null, struct_code: null, struct_name: null, workprocedure_id: null, material_id: null, material_code: null, quality_scode: null, pcsn: null, canuse_qty: null, frozen_qty: null, ivt_qty: null, warehousing_qty: null, qty_unit_id: null, instorage_time: null, sale_id: null } export default { name: 'Structivt', dicts: ['ST_QUALITY_SCODE'], - components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl, Treeselect }, + components: { pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ title: '库存管理', url: 'api/structivt', idField: 'stockrecord_id', sort: 'stockrecord_id,desc', optShow: { - add: true, + add: false, edit: false, del: false, download: false, @@ -271,168 +107,23 @@ export default { }, data() { return { - classes3: [], - sects: [], - workprocedureList: [], - structList: [], - unitList: [], - materType: '00', - materialShow: false, + reginoList: [], permission: { }, rules: { - struct_id: [ - { required: true, message: '仓位标识不能为空', trigger: 'blur' } - ], - struct_code: [ - { required: true, message: '仓位编码不能为空', trigger: 'blur' } - ], - struct_name: [ - { required: true, message: '仓位名称不能为空', trigger: 'blur' } - ], - workprocedure_id: [ - { required: true, message: '工序标识不能为空', trigger: 'blur' } - ], - material_id: [ - { required: true, message: '物料标识不能为空', trigger: 'blur' } - ], - quality_scode: [ - { required: true, message: '品质类型不能为空', trigger: 'blur' } - ], - pcsn: [ - { required: true, message: '批次不能为空', trigger: 'blur' } - ], - canuse_qty: [ - { required: true, message: '可用数不能为空', trigger: 'blur' } - ], - frozen_qty: [ - { required: true, message: '冻结数不能为空', trigger: 'blur' } - ], - ivt_qty: [ - { required: true, message: '库存数不能为空', trigger: 'blur' } - ], - warehousing_qty: [ - { required: true, message: '待入数不能为空', trigger: 'blur' } - ], - qty_unit_id: [ - { required: true, message: '计量单位标识不能为空', trigger: 'blur' } - ] - }, - queryTypeOptions: [ - { key: 'struct_code', display_name: '仓位编码' } - ] + } } }, created() { - this.getworkprocedure() - this.getStruct() - this.getUnits() - this.initClass3() - crudSectattr.getSect().then(res => { - this.sects = res.content + crudPoint.getRegion().then(res => { + this.reginoList = res }) }, methods: { - sectQueryChange(val) { - if (val.length === 1) { - this.query.stor_id = val[0] - this.query.sect_id = '' - } - if (val.length === 0) { - this.query.sect_id = '' - this.query.stor_id = '' - } - if (val.length === 2) { - this.query.stor_id = val[0] - this.query.sect_id = val[1] - } - this.crud.toQuery() - }, - queryClassId() { - const param = { - 'class_idStr': this.class_idStr - } - crudClassstandard.queryClassById(param).then(res => { - this.classes = res.content.map(obj => { - if (obj.hasChildren) { - obj.children = null - } - return obj - }) - }) - }, - buildTree(classes) { - classes.forEach(data => { - if (data.children) { - this.buildTree(data.children) - } - if (data.hasChildren && !data.children) { - data.children = null // 重点代码 - } - }) - }, - // 获取子节点数据 - loadChildNodes({ action, parentNode, callback }) { - if (action === LOAD_CHILDREN_OPTIONS) { - crudClassstandard.getClass({ pid: parentNode.id }).then(res => { - parentNode.children = res.content.map(function(obj) { - if (obj.hasChildren) { - obj.children = null - } - return obj - }) - setTimeout(() => { - callback() - }, 100) - }) - } - }, - initClass3() { - const param = { - parent_class_code: '07' - } - crudClassstandard.getClassType(param).then(res => { - const data = res.content - this.buildTree(data) - this.classes3 = data - }) - }, - sums() { - this.form.ivt_qty = Number(this.form.canuse_qty) + Number(this.form.frozen_qty) - }, - // 新增编辑给form表单物料相关信息赋值 - setMaterValue(row) { - this.form.material_id = row.material_id - this.form.material_code = row.material_code - }, - getStructById(struct_id) { - crudStructivt.getStructById({ struct_id: struct_id }).then(res => { - this.form.struct_code = res.struct_code - this.form.struct_name = res.struct_name - }) - }, - getStruct() { - // 查询工序 - crudStructivt.getStruct().then(res => { - this.structList = res - }) - }, - getUnits() { - // 查询工序 - crudStructivt.getUnits().then(res => { - this.unitList = res - }) - }, // 取两位小数点 rounding(row, column) { return parseFloat(row[column.property]).toFixed(2) }, - getworkprocedure() { - // 查询工序 - crudWorkProcedure.downSelect({}).then(res => { - this.workprocedureList = res - }) - }, // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { return true diff --git a/mes/qd/src/views/wms/pub/MaterDialog.vue b/mes/qd/src/views/wms/pub/MaterDialog.vue index 212a641..4556cfe 100644 --- a/mes/qd/src/views/wms/pub/MaterDialog.vue +++ b/mes/qd/src/views/wms/pub/MaterDialog.vue @@ -59,15 +59,9 @@ - - - - + + + diff --git a/mes/qd/src/views/wms/st/in/EndPointDialog.vue b/mes/qd/src/views/wms/pub/PointDialog.vue similarity index 90% rename from mes/qd/src/views/wms/st/in/EndPointDialog.vue rename to mes/qd/src/views/wms/pub/PointDialog.vue index d02e5fd..e9588ce 100644 --- a/mes/qd/src/views/wms/st/in/EndPointDialog.vue +++ b/mes/qd/src/views/wms/pub/PointDialog.vue @@ -1,6 +1,6 @@