From 5d6dcd6042caa1c7526b89496792a8fe8d4edf0a Mon Sep 17 00:00:00 2001 From: tzy Date: Mon, 15 Sep 2025 16:01:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=A8=E9=80=81=E8=87=B3=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KingdeeWorkCenterDataController.java | 86 ++---------------- .../domain/dto/PurchaseRequestExcelDTO.java | 6 +- .../java/com/ruoyi/system/runner/JdUtil.java | 2 +- .../resources/EXCEL模板/采购订单模板1.xlsx | Bin 11101 -> 11288 bytes 4 files changed, 13 insertions(+), 81 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java index a6d6e4d..fc39732 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java @@ -863,12 +863,11 @@ public class KingdeeWorkCenterDataController extends BaseController { // 过滤采购申请单数据 List purchaseRequestList = filterReqPurchaseOrders(allpurchaseRequestList); - msg.append("- 采购订单(已过滤):").append(purchaseOrderList.size()).append("条\n"); - msg.append("- 采购申请:").append(purchaseRequestList.size()).append("条\n"); - msg.append("- 过滤条件:生产令号0259/240605开头,交货日期小于当前时间\n"); + msg.append("- 采购订单:").append(purchaseOrderList.size()).append("条\n"); + msg.append("- 采购申请单:").append(purchaseRequestList.size()).append("条\n"); // 生成Excel文件使用采购模板 - String fileName = String.format("采购订单和申请数据_%s.xlsx", + String fileName = String.format("采购订单和申请数据_%s.xlsx", DateUtil.format(new Date(), "yyyyMMddHHmmss")); String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; @@ -879,13 +878,13 @@ public class KingdeeWorkCenterDataController extends BaseController { staticDataMap.put("purchaseRequestCount", purchaseRequestList.size()); List dynamicDataMappingList = new ArrayList<>(); - + // 添加采购订单数据 if (!purchaseOrderList.isEmpty()) { List> orderDataList = convertPurchaseOrderToMapList(purchaseOrderList); dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("PurchaseOrderExcelDTO", orderDataList)); } - + // 添加采购申请数据 if (!purchaseRequestList.isEmpty()) { List> requestDataList = convertPurchaseRequestToMapList(purchaseRequestList); @@ -902,7 +901,7 @@ public class KingdeeWorkCenterDataController extends BaseController { wxRobotUtil.sendFileToWeChatGroup(excelFile, robotId); FileUtils.deleteQuietly(excelFile); } - + msg.append("\n详细数据请查看发送的Excel文件!"); wxRobotUtil.sendMsgToWeChatGroup(msg.toString(), robotId, true); // @所有人 @@ -958,58 +957,13 @@ public class KingdeeWorkCenterDataController extends BaseController { map.put("FArrivalDate", item.getFArrivalDate()); map.put("FApplicationDate", item.getFApplicationDate()); map.put("FUCHNText", item.getFUCHNText()); + map.put("FCreatorIdFName", item.getFCreatorIdFName()); mapList.add(map); index++; } return mapList; } - /** - * 过滤采购订单数据 - */ - /* private List filterPurchaseOrders(List allOrders) { - String currentTime = DateUtil.format(new Date(), "yyyy-MM-dd"); - return allOrders.stream() - .filter(order -> { - String productionOrderNo = order.getFUCHNText2(); - String deliveryDate = order.getFDeliveryDate(); - - // 过滤条件1: FUCHNText2 不为空 - if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) { - return false; - } - - // 过滤条件2: 生产令号以NO开头 - if (!productionOrderNo.startsWith("NO")) { - return false; - } - - // 过滤条件3: 生产令号以0259开头或240605开头 - if (!productionOrderNo.startsWith("0259") && !productionOrderNo.startsWith("240605")) { - return false; - } - - // 过滤条件4: 交货日期小于当前时间 - if (deliveryDate != null && !deliveryDate.trim().isEmpty()) { - try { - // 处理日期格式 2024-02-22T00:00:00 - String dateStr = deliveryDate.split("T")[0]; // 提取日期部分 - if (dateStr.compareTo(currentTime) >= 0) { - return false; // 交货日期大于等于当前时间,过滤掉 - } - } catch (Exception e) { - log.warn("解析交货日期失败: {}", deliveryDate, e); - return false; - } - } - - return true; - }) - .collect(java.util.stream.Collectors.toList()); - }*/ - /** - * 过滤采购订单数据 - */ /** * 过滤采购订单数据 @@ -1026,20 +980,6 @@ public class KingdeeWorkCenterDataController extends BaseController { String productionOrderNo = allOrder.getFUCHNText2(); String deliveryDate = allOrder.getFDeliveryDate(); - // 条件1: 生产令号不能为空 - if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) { - log.debug("过滤掉: 生产令号为空"); - continue; - } - - // 条件2: 不能以 NO / GMJ / GSC 开头 - if (productionOrderNo.startsWith("NO") - || productionOrderNo.startsWith("GMJ") - || productionOrderNo.startsWith("GSC")) { - log.debug("过滤掉: 生产令号不符合前缀条件: {}", productionOrderNo); - continue; - } - // 条件3: 交货日期不能为空,并且必须早于今天 if (deliveryDate == null || deliveryDate.trim().isEmpty()) { log.debug("过滤掉: 交货日期为空"); @@ -1086,19 +1026,7 @@ public class KingdeeWorkCenterDataController extends BaseController { String productionOrderNo = allOrder.getFUCHNText(); String deliveryDate = allOrder.getFArrivalDate(); - // 条件1: 生产令号不能为空 - if (productionOrderNo == null || productionOrderNo.trim().isEmpty()) { - log.debug("过滤掉: 生产令号为空"); - continue; - } - // 条件2: 不能以 NO / 0259 / 240605 开头 - if (productionOrderNo.startsWith("NO") - || productionOrderNo.startsWith("0259") - || productionOrderNo.startsWith("240605")) { - log.debug("过滤掉: 生产令号不符合前缀条件: {}", productionOrderNo); - continue; - } // 条件3: 交货日期不能为空,并且必须早于今天 if (deliveryDate == null || deliveryDate.trim().isEmpty()) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PurchaseRequestExcelDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PurchaseRequestExcelDTO.java index bb966e4..af71639 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PurchaseRequestExcelDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PurchaseRequestExcelDTO.java @@ -69,7 +69,11 @@ public class PurchaseRequestExcelDTO { * 生产令号 */ @JsonProperty("F_UCHN_Text") - private String FUCHNText; + private String FUCHNText;/** + * 生产令号 + */ + @JsonProperty("FCreatorId.FName") + private String FCreatorIdFName; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java index 035fe56..5f8f345 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java @@ -2583,7 +2583,7 @@ public class JdUtil { // 请求参数,要求为json字符串 JsonObject json = new JsonObject(); json.addProperty("FormId", "PUR_Requisition"); - json.addProperty("FieldKeys", "FBillNo,FBillTypeID,FSuggestPurDate,FSuggestSupplierId.FName,FMaterialId.FNumber,FMaterialName,FPriceUnitId.FName,FReqQty,FArrivalDate,FApplicationDate,F_UCHN_Text"); + json.addProperty("FieldKeys", "FBillNo,FBillTypeID,FSuggestPurDate,FSuggestSupplierId.FName,FMaterialId.FNumber,FMaterialName,FPriceUnitId.FName,FReqQty,FArrivalDate,FApplicationDate,F_UCHN_Text,FCreatorId.FName"); // 创建过滤条件 JsonObject filterObject = new JsonObject(); JsonArray filterString = new JsonArray(); diff --git a/ruoyi-system/src/main/resources/EXCEL模板/采购订单模板1.xlsx b/ruoyi-system/src/main/resources/EXCEL模板/采购订单模板1.xlsx index 7f941c1753cb7526c4b75a72e093143717e7e683..49a77273262a093ea2a7dc5e8db3bd5d9d3d0823 100644 GIT binary patch delta 8010 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 TP>^1Qh#)e|SO|^uf7Sm7H6z?e delta 7799 zcmZX3WmuiN67Irf;aZAYaVuKf-Q8i~?pg|~I231Lt4MKocc-|tP~5e+Q=rJDd!M`a zJ?G{}o_v#;OrB&i$@ji#x+~i8+$f^>xYXP*0Dww@Ffka811sz_=oHJ%d71#5VF6F9 zKOI={K6YV&r#d~v!chOqKrk8nT6a`u%%`|-M~DZrQR|LYPhY^DC>wR2MhS=?re-ZX z1WD9jr5D80Ev2gn_JVQcVdXW3MqUs7M1;+Z?1RhlJM7L26EzD#Au^(DWiS`3$W8&h zvcygPeyf(F8pY=?iI*It4#dhYy;97C9EVQCJaOn z@vQtVZ`Q89yzPGRcy)1o`&AD-!6w@1y{G=0!Y6nd5l>$ws535Ag}x;jX0bn-=exZv z`O|Mwm!y)ZZb%82pgYx2a^$ zuqUr@oO+>E0GH*xr35ea-u*o9IBd#*3QG|YF$Wk`1vq#-004jt2v^<|Rr5z07kODt zdsqMf`$cNuY_96&?BdR5?(AmC>f`7TlW3ySM}ar6ru2Y;e#%ndt|7NHAhG~aP|Wyt z3zlAYq9%|B9N!!l9BY?d_Q>$G1>aEd-Kf6hX`o47tDW;mzKK_2TB zjJ|d10LP~=O{BdJHO<-}c$FR)fg#(21kS&!)?mUtFOiIv@ z>*CFsraVbw@nOR_$%F*g*nZB3dT@vb1ev5_su=yyJ@C>YQH27PTM%~b4OWq98$4DU zi%8;HY8v6Al1~g-pPc zgOjzFoHp69{7r11doKLk15?tGwSWcni^-)wjI&nyVak*<8qjT@JIw`9XvCOq5a_lz zt*rzHad(?eiDZx%@o{}aB-pwmc57sHJ7dnOz8sdJNXtV6DGj%|ddW36mImh7F4c#4 z8}c-%O^38Xy!8n=*L2Qftt5SOv)>)%gT<{R`^uK@OXHJhW*N4gD3GNCq;+FS`xK3P zDZeKTc+hV8OS>P-((Fh|JlPGRYSnen5uVc~CaKzIPRe~^YMMR^o$GjbOQ4V=S=ym% z(Wy{jvNQ9g@nCF|>>IRiB;vyop^m7bsB2X;=Obve0yp=5NF${{hhQY?k}(Pb2Syzf z{xRC|oyq`P>CDVY;Ed{VKoI2esqk9%J6Esw#*uGCj}vwm5zCKZ&bKUJ{LOI(L0W7K zG{PM&p71ziW~A2q3>hD8_#Y1q8KWC$s~@MGWmUc$0_@8mgpoL(6NTm!dY-E#PpJfv z+c$0z=ZHllTXG!Qrn6^rki2TFcJs13_@y54q7qAoHYzU&tornvJ%} zPwUx-*wQsZd5m_t34Gqj<}09z6`3r#11jhB#?|WCRV^jLmN+JFUHe~C#OSOs7=-iE z;SFBoK7@WMOs6hf84qh4ca;c@htfV#EqJs+3Md`yE5v9A)Xw)PdwN)$3gF%a_({#`tuEe1r$V1on<1%<9=AlV&EI*R{f#)Kvk$UYHHb_QH0SU&Rmj+a1;FY^@ z=NjU%cIN zS!O6zA5J4Oa7k>{Kl61S#%AJ8qY+`cKar6$$J)xyG7A>cK)#~Tp`^rj@l6?Ot{Ufh z-$n7UX3sKyiNc$+D!SQ27q~0n+E%RAU8GbXh3GepKsoJapkbskLgVrrVBuZfb-wUT zFRq*mtyBYA$?XLdH9W5bpupG&Gnn=Dwh{@Ijtr$<>sOq-9q}*SxZWvI5#oeDz8Pfn z!?a%Rnjj({y*^J*6gLz!z&Qq`Xz(`u1e-gzaLpHn+R`n z7+BeFLMkaFfm{^pdS^JWWV0aX%0$H>{Kjn{QG_co95AkG`Fr9MOV01$5DPHk4YJ-5 zJ?`g(s%=S}d9?T{*idGesx$inO*s-hh5(K`;<&7$p_~&{qJE~xu+3CFU7!Tf?ae$m zor_+sIwgO@^LsT-kG_=KanJU#Y;_q^Pyw*5N?crj#nal>qJG?hP>t|-Uv1tDwgJYjiRFf zgqwZl{eEd@3Bce->GGuWuevD@b#bO}d7Oy%V)COnHok$kj?3k%kwEhq(< zAiqF~%(NPFSaz!hN~9B6$~qrk8! zbm?pLp|hrD#;c?e#SkkF`qQf zvl$r5uBIUWoKp#GLtrJKokS{3)FJb((Tr;^0e*q=k_3vjYE~tU{_-Hi4dYq@rg44C zY?B4P@+IxQXjk?9$Si?18b2%5BtZH_c~V%aL+sX(gq-ASu-dW!r-v=keYy2&k(riK zz>!qj-ahj_c^CwA`^d-U=Z$mfuWIOa^#d!-7xVdZQ}tTRu7ZYGLqQ*pD}C zt!=>C$H{|N`^*_6DuaD|yi1Gvz~+@+SnU?L2e~E0R&^5=Epl9W`_&t-drM&8*NbU= z(#2Z!kG`?AEBRpMeDbfmA0o7b51v)T! zx{B~VI5Xg#4nKhl&tM1iM8t2uMOq-wUbYtFfDuJc5`uQ2lQi0?jL2v)B7R>QY2D4O z>|n!ARh6TFs2$3bF-#H1N0*+qYjAdYVA&j#y`bsdBI#uGs8g}_-`O)Whcx=`W#g6L z0RYUGcb$&|n>U0Q4;^geoc@wQztlf}e8_qw`%@NAJ@k!D^5;_dIuF0kB+c+;rqoLe zC54Z_j41Lm`IQ8X*0#3XML=HujBbYrNxSOs{X~oXu-Ky^Q4*q^j(LG9%#LZYx~vHB z+xT29S>PwGvi$d}3U>}UAE#i3qZx{l4)}tD_H&rU)|D8wdeFeF2cn)OA8GmF*rk+> zmO670wu0(WHGarQ6f(qt7`Dt|dh4lB-K^OCGtbq%?S?y1Jie8iij>O>MI(gXXC6** zhK^Y?OoHZay3H(oCsE6%i>fybTZTX(%qr8(%N!Tro}cy)XS3ne9ve^kK-}?xA7Ri_T@IdgY}ve0mKQka zj{L6x0sr&zFT&B>oj`lJU(Emj^uHs--NV$NX=zll3e@w<-GQ|W8|K!1_%9q*iTBL3~g@DnomS?#W4 zucIfiytBu2=^Eqsu+D|kwAiJl*P-V2y3LK(*Hw-fkLH7mBK6EBumq2wJeQxpgJaZf z=Y{Lv@1B(kRNtQ|&0W7Q#B5p>v*kNuuH%%H6e`Leach|2JPrtSng0oHsAJ!UuBylc zn=KuqE3P>$#2%BI8zYp=t@=D>pT4&mh0%%=6xv2h)hPG#T5=C}n(IO>mv?HiZ>nHG zPqrJbb6Oe_cn`9#6FDFf0@F9FsI58U)&ES8?DXw`!%Pm6jCN`zRozOtV%Z;QsxnM) zmaED+Bqv;GbMEADdz=G*+J;NLonR?ZMU|@g@Pp4p{HlwMJOQXZHltHMQ^GbJtSFzf zB@eG&HNx@xCtU3B2K#+!JJ%a%)wGHn+ zD6~5At198) z4T%0w1^8iU%&HXmrH1Q}b>^dG`6fe{Sdj|Ud0staU&#h#S0AVzs>Kx5#Ed*=7|8b4 zuCuz^Kc4a`&tWjKb#h8PfzBX(D)|>nm2>x;x{Lp%58$yBEF8_Rn#@Ew0xiH4ywp{5 zO;3z5{mJizWa~O*@mpsKc8v{jr7Y!#9mvt4* zSoA}32sEK9k)5qI2W?8z$Tf}VjtPa68cYkSWN97;_8J=eKccVG%2CegAWzC8n<^Sx z&I=tJE9ocs-u8S}0CRsi*I%Q7p$X5QKwtaxU&%HZR>75dsaNBK5)=*PRVWP}+_T4C z9R*8V?YF^km3sJ-r?fQk2sHYx-zXumDo{$@M$&^CFbQs6BRpdf?Dj(UOygVgaz$nU zNvhvOrKM5JF}3NaVd%*YG82Mcy<3uI7v0WOm7hGA&oj38Fcb5JRU*I;oEB01*~TV6 z_Xk%?q1FuJxv%!6xPT;O{`8%m#E_~5kWwO^BLr>&ro1UWueeJ>!mPLI+PIGY# zsW&`u5u2>&&9apCL_W09{Y_-|cPN*hW2PGIfEyZ|_WjuiAis8WMggR>aq!zAy=BwZ z4t}2?(R;})!#~LiJRkEG+#IHUtCp&F7OulFWyb!#2w>FvVC^FJox5dWk&EV^YjP)5^8%)&i<&mO_Wp6K=~$gqA$G$T5jn1ZD7Xs7X!n)_odvgj>)2N`E#* zrdrjj^l2mtAuos@41jq}nWJ8?ZsjS@fi74yBQG>izY#xFQuHFplDC7WbS%cUE3eX6cq5fiGe%D|L6N5A=qy{2PO!2vx3hRXk8NyOE9B1yse7l-tTe%zz3~Yh*Bj|d zff;qrf@C6(zOo0-rmX3z&8Ms5Kn18O-B>01kgOwBo(?Q`S{6a zBo+@&Wg815hyCJL{Pyr`^)7f1vL=kWlP%0uK)J`=zs&x01*w~6n3i{Ss91lWy0IOq4fm^=47Reo}Ld$)c{NqTV4;bEcRuQ)v% zPPa$?$dTWDIf)iI^=KU@g1Ga>o9y!YSvh+_1@gIAzuZR}b%Sp~io_2Qj`yxUH;WPB8DWD%dSYPbPZ2j&cUuzS%JBx})84P7a!wY=CW67e)71Iv& ze1A~|8P1%PaP|2bMu}}^_wZ9sGb=oVF{J-?db(IJ4pA#2>{6f$>~nr4C)sN*hHnOX z7_hc}ZU??17xDFZ`i5lP^%T-e5O+hA9+Iq^+(n6BpvfbsZHh+|k;{{g9!LJF5P4qH zx^9C*i@;3YR9TZvi%i#&vKprYr=}-Z?7+~iQmOqr?fcN$NNyeRp&ubb_@=ZY<(6c1E)kyrb&i%R&0q%Fm)uAUQtHY>u5r= z1m7z%f{~Hh4OV|G^X6^( zjD6Nz_6B7pu*8H9$rZFU@?ND^avtL@n;A<42>=I2zq5p@sfc`# zP(r0z( zpqQR%9$NWO#5gsA;1AZMcXQ$FRADN%+Y9lMH(qx4Cs{cJhZo8n#mN=&YE?%^;>xxs zM<=ga%SXnWU^0GsQ}D#%9lLckP#n@`K9Ip@=w{mxOCSX#^Z;?3<3)e%*GUJqw8Ubx zQBq@gsuDA!#?YhZt(DB*i^RXK)26nD!9d)z&%1j036gmM9A5(J*BK6Wgr zU!hOIY5pur{;KlZ4)PRBvyT8!40(S_h}HL5u*rt_rl<>VA#qQp*sm-i+qy@x_vev; z{MPsua;UJ5JBrrC2;@5_Cq(cyjncm+a)Yo@8V8QYchUXE&v69CEM8El}BQAwH& zd^YkKGQfc%zr@yoImVP&o62;rxz3<836#m1wc0F z@WB;HqfWhlmL>TfGoeY#%v4PaKTwK%l%V7a&d^Vsc{5xvtar^DCmSaTR&8F=?WkpM z;@X_g7|N(8E_&=RajzFgYg(YOIN^5l&R>aKH%LvFmeHEh+Fq20Y-JU#$R0CIwP7G5 znd4q&LM_D<-fAMa0NRT{O@-bU?MJx>Hhbah4p-dw9pH(lb?vLaoe`nd6q{Yt=B^Rb z!7y43Pg{Y;N1$h&-_<4EMpCs&Rll=P=8agPrz~!fE|@;h=VaZHS6BEI*#v3FD@sN< z_r{}FW@NzcB|vhH>PN8CE9vXuzw5sGL=oI-iNJVGgF9^RH=f-@qC}XJO;t3b?lgKS! z0ipfwMgVDQC<7*-js4lpX_d$;ji(@sDCZdA!73`=>x*5hcZYNSNfox!zPZbe=+o`` zcpm@#3ta~TiwF3Jup{}OJ$Z@QmjVNzc&QB_>vW>9?Nksd`nRy_R1j@?&41ZaNF6;l z@&B@Y|Jr_nz%dBJ-oip87(~!DUO=N4!02z+5K(FZ2$&v&51HmKsfnAVgZqE_{+X8O ze;=Sf@_pIX}oQ!lYq4?iu#J~N0_z*9~cQ7K5YDOLy zE65(>8{+>3xBgYmgwQhy!gxR|nJ9_>Vcd`bfLDK1UdrDtvmrT5OeFsh4F6yM4ie-i M6C>jNn?EN12X8T5-T(jq