From 2b06717f72f5e6d091f6a788d225120116a25ba4 Mon Sep 17 00:00:00 2001 From: suncz Date: Thu, 9 May 2024 14:53:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E7=AE=A1=E7=90=86=EF=BC=9A?= =?UTF-8?q?=E6=9D=90=E6=96=99=E6=98=8E=E7=BB=86=E8=A1=A8=E6=96=99=E5=8D=95?= =?UTF-8?q?=E9=98=B6=E6=AE=B5=E6=AF=94=E8=BE=83=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/MaterialOrderController.java | 22 ++- .../java/com/vverp/entity/MaterialOrder.java | 10 ++ .../vverp/service/MaterialOrderService.java | 143 ++++++++++++++---- .../resources/excel/template/specialMO.xlsx | Bin 9123 -> 9168 bytes .../template/materialOrder/conduit/list.html | 10 ++ .../dialog/findPrevStageListDialog.html | 38 ++++- 6 files changed, 184 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/vverp/controller/admin/MaterialOrderController.java b/src/main/java/com/vverp/controller/admin/MaterialOrderController.java index 87c2b02..a09db7e 100644 --- a/src/main/java/com/vverp/controller/admin/MaterialOrderController.java +++ b/src/main/java/com/vverp/controller/admin/MaterialOrderController.java @@ -107,7 +107,7 @@ public class MaterialOrderController extends BaseController { modelMap.addAttribute("productList", productService.findAll()); modelMap.addAttribute("type", orderQuery.getMaterialType()); modelMap.addAttribute("pageType",pageType); -// modelMap.addAttribute("adminId",admin.getId()); + modelMap.addAttribute("adminId",admin.getId()); Page page = (Page) modelMap.get("page"); Map map = new HashMap<>(); for (MaterialOrder materialOrder : page.getContent()){ @@ -433,14 +433,30 @@ public class MaterialOrderController extends BaseController { } /** - * 导入明细表页面中 根据前缀和阶段找以往阶段的料单 + * 导入明细表页面中及阶段比较功能 根据前缀和阶段找以往阶段的料单 */ @RequestMapping(value = "/findPrevStageListDialog") - public String findPrevStageListDialog(ModelMap modelMap, Long adminId, String preTitle, Long stage) { + public String findPrevStageListDialog(ModelMap modelMap, Long adminId, String preTitle, Long stage, Long materialOrderId) { + modelMap.addAttribute("materialOrderId", materialOrderId); modelMap.addAttribute("materialOrderList", materialOrderService.findPrevStageList(adminId, preTitle, stage)); return "materialOrder/dialog/findPrevStageListDialog"; } + /** + * 对以往阶段的料单进行阶段比较 + */ + @RequestMapping(value = "/PrevStageComparisonExcel") + @ResponseBody + public RespData PrevStageComparisonExcel(Long materialOrderId) { + MaterialOrder materialOrder = materialOrderService.find(materialOrderId); + if(materialOrder.getStageNum()==1){ + return RespData.error("该料单是第一阶段,无法进行阶段比较"); + } else { + materialOrderService.PrevStageComparisonExcel(materialOrderId); + return RespData.success("料单比较成功"); + } + } + /** * 导入明细表 diff --git a/src/main/java/com/vverp/entity/MaterialOrder.java b/src/main/java/com/vverp/entity/MaterialOrder.java index c7fc3fe..9ae36e7 100644 --- a/src/main/java/com/vverp/entity/MaterialOrder.java +++ b/src/main/java/com/vverp/entity/MaterialOrder.java @@ -83,6 +83,8 @@ public class MaterialOrder extends OrderBase{ // this.stage = stage; // } + private Integer stage; + private String stageName; private String stageCode; @@ -196,6 +198,14 @@ public class MaterialOrder extends OrderBase{ this.bidStatus = bidStatus; } + public Integer getStage() { + return stage; + } + + public void setStage(Integer stage) { + this.stage = stage; + } + public String getStageName() { return stageName; } diff --git a/src/main/java/com/vverp/service/MaterialOrderService.java b/src/main/java/com/vverp/service/MaterialOrderService.java index 5bee9ed..370f80f 100644 --- a/src/main/java/com/vverp/service/MaterialOrderService.java +++ b/src/main/java/com/vverp/service/MaterialOrderService.java @@ -682,6 +682,7 @@ public class MaterialOrderService extends BaseOrderService } } } + materialOrder.setStage(stage.getId().intValue()); materialOrder.setStageCode(stage.getCode()); materialOrder.setStageName(stage.getName()); materialOrder.setStageNum(stage.getStageNum()); @@ -1037,23 +1038,24 @@ public class MaterialOrderService extends BaseOrderService BigDecimal useCount = countMap.get(str); if (useCount!=null){ count = needCount.subtract(useCount); - countMap.remove(str); + } else { + count = needCount; } - //count = needCount.subtract(useCount); +// count = needCount.subtract(useCount); //后续阶段数量意外减少 if (count.compareTo(BigDecimal.ZERO)<0){ - Map map = new HashMap<>(); - map.put("ind",item.getInd()); - map.put("name",item.getName()); - map.put("unit",item.getUnitAccount()); - map.put("site",item.getSiteAccount()); - map.put("line",item.getLineAccount()); - map.put("code",item.getProductCode()); - map.put("longDescription",item.getLongDescription()); - map.put("needCount",needCount); - map.put("preCount",useCount); - map.put("errorMessage","阶段提升后采购数量减少"); - specialList.add(map); +// Map map = new HashMap<>(); +// map.put("ind",item.getInd()); +// map.put("name",item.getName()); +// map.put("unit",item.getUnitAccount()); +// map.put("site",item.getSiteAccount()); +// map.put("line",item.getLineAccount()); +// map.put("code",item.getProductCode()); +// map.put("longDescription",item.getLongDescription()); +// map.put("needCount",needCount); +// map.put("preCount",useCount); +// map.put("errorMessage","当前阶段较以往阶段采购数量减少"); +// specialList.add(map); count = BigDecimal.ZERO; } } @@ -1135,22 +1137,8 @@ public class MaterialOrderService extends BaseOrderService throw new ImportExcelException(failNum+"条导入失败", "3", map); } } - if (!firstStage && countMap!=null && !countMap.isEmpty()){ - for (Map.Entry entry : countMap.entrySet()) { - Map map = new HashMap<>(); - map.put("ind",""); - map.put("name",entry.getKey().split("_")[0]); - map.put("unit",entry.getKey().split("_")[15]); - map.put("site",entry.getKey().split("_")[14]); - map.put("line",entry.getKey().split("_")[12]); - map.put("code",entry.getKey().split("_")[16]); - map.put("longDescription",entry.getKey().split("_")[5]); - map.put("needCount","无"); - map.put("preCount",entry.getValue()); - map.put("errorMessage","上阶段有,现阶段没有"); - specialList.add(map); - System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); - } + if (!firstStage){ + PrevStageComparisonExcel(materialOrder.getId()); } return specialList.size(); } @@ -1182,18 +1170,107 @@ public class MaterialOrderService extends BaseOrderService lm.put("unit",item.get("unit")); lm.put("site",item.get("site")); lm.put("line",item.get("line")); - lm.put("code", item.get("code")); + lm.put("code",item.get("code")); lm.put("longDescription", item.get("longDescription")); lm.put("needCount", item.get("needCount")); lm.put("preCount", item.get("preCount")); lm.put("errorMessage", item.get("errorMessage")); - listMap.add(lm); } value.put("maplist", listMap); - ExcelUtils.export(response, value, params, "料单数量问题.xlsx"); + ExcelUtils.export(response, value, params, "料单阶段比较报告.xlsx"); } + @Transactional + public void PrevStageComparisonExcel(Long materialOrderId){ + specialList = new ArrayList<>(); + Map map = new HashMap<>(); + MaterialOrder materialOrder = find(materialOrderId); + //获取以前阶段 + Map prevMap = new HashMap<>(); + Map LongMap = new HashMap<>(); + List prevMaterialOrderList = findByStageNum(materialOrder.getPreTitle(), materialOrder.getStageNum(), materialOrder.getProgressId()); + for (MaterialOrder prevMaterialOrder : prevMaterialOrderList) { + List prevItemList = materialOrderItemService.findByVersionNum(prevMaterialOrder.getVersionNum(), prevMaterialOrder.getId()); + for (MaterialOrderItem prevItem : prevItemList){ + String str = prevItem.getName()+"_"+prevItem.getUnitAccount()+"_"+prevItem.getSiteAccount() + +"_"+prevItem.getLineAccount()+"_"+prevItem.getProductCode(); + if (!prevMap.containsKey(str)){ + prevMap.put(str,prevItem.getCount()); + }else { + BigDecimal prevCount = prevMap.get(str).add(prevItem.getCount()); + prevMap.put(str,prevCount); + } + LongMap.put(str,prevItem.getLongDescription()); + } + } + //获取当前阶段 + List itemList = materialOrderItemService.findByVersionNum(materialOrder.getVersionNum(), materialOrder.getId()); + for (MaterialOrderItem item : itemList){ + String str = item.getName()+"_"+item.getUnitAccount()+"_"+item.getSiteAccount() + +"_"+item.getLineAccount()+"_"+item.getProductCode(); + if (prevMap.containsKey(str)){ + BigDecimal prevCount = prevMap.get(str); + if (prevCount.compareTo(item.getNeedCount()) > 0){ + map = new HashMap<>(); + map.put("ind",item.getInd()); + map.put("name",item.getName()); + map.put("unit",item.getUnitAccount()); + map.put("site",item.getSiteAccount()); + map.put("line",item.getLineAccount()); + map.put("code",item.getProductCode()); + map.put("longDescription",item.getLongDescription()); + map.put("needCount",item.getNeedCount()); + map.put("preCount",prevCount); + map.put("errorMessage","当前阶段较以往阶段采购数量减少"); + specialList.add(map); + } else if (prevCount.compareTo(item.getNeedCount()) < 0) { + map = new HashMap<>(); + map.put("ind",item.getInd()); + map.put("name",item.getName()); + map.put("unit",item.getUnitAccount()); + map.put("site",item.getSiteAccount()); + map.put("line",item.getLineAccount()); + map.put("code",item.getProductCode()); + map.put("longDescription",item.getLongDescription()); + map.put("needCount",item.getNeedCount()); + map.put("preCount",prevCount); + map.put("errorMessage","当前阶段较以往阶段采购数量增加"); + specialList.add(map); + } + prevMap.remove(str); + } else { + map = new HashMap<>(); + map.put("ind",item.getInd()); + map.put("name",item.getName()); + map.put("unit",item.getUnitAccount()); + map.put("site",item.getSiteAccount()); + map.put("line",item.getLineAccount()); + map.put("code",item.getProductCode()); + map.put("longDescription",item.getLongDescription()); + map.put("needCount",item.getNeedCount()); + map.put("preCount",' '); + map.put("errorMessage","当前阶段料单新增采购"); + specialList.add(map); + } + } + for (Map.Entry entry : prevMap.entrySet()) { + map = new HashMap<>(); + map.put("ind",' '); + map.put("name",entry.getKey().split("_")[0]); + map.put("unit",entry.getKey().split("_")[1]); + map.put("site",entry.getKey().split("_")[2]); + map.put("line",entry.getKey().split("_")[3]); + map.put("code",entry.getKey().split("_")[4]); + map.put("longDescription",LongMap.get(entry.getKey())); + map.put("needCount",' '); + map.put("preCount",entry.getValue()); + map.put("errorMessage","以往阶段已采购,当前阶段没有采购"); + specialList.add(map); + } + } + + // @Transactional(propagation = Propagation.NESTED) //老版 @Transactional diff --git a/src/main/resources/excel/template/specialMO.xlsx b/src/main/resources/excel/template/specialMO.xlsx index 68668b54b5afc0f7b35a847c9113676ee0555c06..1c1e72be70d46d3992dc6b1a92f033a4a9a1f0bd 100644 GIT binary patch delta 1580 zcmV+{2GjYYN6<&GlK}(`rn7RBmjNGt(MrQG6o&5w-=XBbP1;b4WN@=b7~YQl*86kn0d+fnWts zMG~Rw`P3dEOKB=N%?be#+JHin`1mMfWxxsvm$E29>J*e^NJ0gyjL=f+GQe0Eu_feG zImRK3xF}>!wYka!mz3Sp1h7ZQlS~2~f3D-=AFl?Pt3MkWrRU63y(!I1ySRNeXRX+| z*DCFdRaH5a-^4KaU3@#cxN1hVQ&I1V0g6M;0w#g#LdGivGFcTN?$zr3WmM^zS@j|X ze!7XbPamJJ&)b*BulKhQ|JDt%nV{tYw@jv>onWur_-E(yDT+PfdA94?-gxc~CR~jU{q?(sIHpLN{Y(EjzYOqN$Y-(mgo|NtY@!r8h>?H z_@xp6{8GdvCi!}5nQ8W)H-Glv@3ZY*| zcu^R;eY2##u=+3F<{6M4vy%rc5DEWHgIRU~007UE$rl`dlFdrPKoo`dg6|Lpw>H&< zNJ-*Capz7SU`Vd*Kr)GQr=k==5v_tHLMawkDu^qC3x7(*_GLP@c?(Ai3Q1hfckbaZ z_a19yFYt|B5XeGqlZ8^57{J}oW4vmUt) zlQOE9Cb~6$2q>1q2)I_ZLlID^pQ37FB!GHY1CW7lE|$wnWt?LqJFj3wU409^R0OdL#A!5)xoxNfH1e6gi!3qj85yS|OPmIfr+V=+Pm#%j zS)cI&s{2wvbz!P&fUaPX)a}YgZ~*V;-g!xX?H>h%2*m~<(kdJr{5efsNaqVsO9KQH z00029SQ%Ib0vjHavL8PIgOl<@lnW1!U_qOvM5376qIF1LJ?L*XsLBcFjj0A2{~1c zaR?(W3Yk-Fjxxa|W%o1z?7QxhO#&T%p5x&kuLhZ`KQA;&&zYxsQ<_e@xP3Nft=PHO zD(#F_RXJ7A#4!0id^@|iYO30)sCUHx#UW>eNuaur@k)VARz-+=vwD9SReEMty-0zd zZsP6J$LH(w_T};G{Vl}5b%Sggv|Qkp$wb-)d*voLJD*Qc?7O~id!Fr&=iZPh1Oai~ zyZZTq`*p^4knckLPaN3p!1l&-cSMFh84h~HJs@s!AO4H@8?zAuwgC$IT?rqC0ssJ$ z29wbQAb(wN+aMH%?1xLvPma->qt; zpG*#52`ZE(p}DoyG7JsRp3fvjJB{ z*roP*my2-W?X%#ogx)Z#VEXA;U7>J=o7)R1>`S}dOG04(>eO`|)RhT%dCtNyD4vC2 zH-ATCRk3B3(e zC9qfOshN0>Ls6sMPG}Svx8ejFkTRj$DOS<%HU@SvK-foc`ia#Y5XXIP}efL*qO+bk2iA>pVF0&Vxhq zJUDdEgG2i~IP|Z(gk1$z>;PYwK8Vr~2^l&U1v9)wy1P@|gH=^qqrjwV;s19{^WO-4`B}>M0sJ1_G#qO#tb+dZk?6 z);-EN(QLoPrAaEvw#C_T3wD12%Rpus(uyZx9DW+Qv|1Z~Keq*DM$J z2l2&ufhfMZjBh3d#3C9kCes2U?e&tkm&M~*)*~HE=V6#kbLL6(l|-Yo7iJZ+fAMuX z{Fq1Yt3L}S()%cV8fJ9MkgFI_TZOMuL=bHtR;QzF)S>Fpz-8(Xvc$NfWt5gIaq2-H zRY}V{icA*Fx{Mc~svrfZYDi-b&=xF^s!n+e4&eM8I8Uk7{$W4}UmO4;Z9upCr_@yg zt#43E0|XQR000O8hfd-^@e?}YvyT~01_JIKliwdd0alYAATt4alT#p*1nqq>K9lMo z#{r^~vLQAB$&=|JEgL%e+U;xs006)O000yK0000000031AOHXWvXe0)K@F%4004Mw zFLQKxY-Mwk@E;(PpCS$cb(5|lHUXTI +  阶段比较 @@ -453,6 +455,14 @@ $form.find('[name="ids"]').val(ids); $form.submit(); } + + function findPrevStageList(adminId,preTitle,stage,materialOrderId) { + if (preTitle == null || preTitle === '' || stage == null || stage === '') { + Dialog.error("前缀或阶段不能为空"); + } else { + Dialog.functionDialog(null, null, 'materialOrder/findPrevStageListDialog.html?adminId=' + adminId + "&preTitle=" + preTitle + "&stage=" + stage + "&materialOrderId=" + materialOrderId); + } + } diff --git a/src/main/webapp/WEB-INF/template/materialOrder/dialog/findPrevStageListDialog.html b/src/main/webapp/WEB-INF/template/materialOrder/dialog/findPrevStageListDialog.html index c1f7f6e..a60e3a1 100644 --- a/src/main/webapp/WEB-INF/template/materialOrder/dialog/findPrevStageListDialog.html +++ b/src/main/webapp/WEB-INF/template/materialOrder/dialog/findPrevStageListDialog.html @@ -6,6 +6,9 @@ display: inline-block; margin-top: 10px; } + .on td{ + background-color: #BFEFFF; /* 背景颜色*/ + }
以往阶段料单 @@ -35,12 +38,13 @@
- + - @@ -49,12 +53,40 @@