From 27d3eaec0a9282ba8f3cc97eba399c938db5ad99 Mon Sep 17 00:00:00 2001 From: ling li <709673163@qq.com> Date: Mon, 12 Jun 2023 09:40:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E5=AF=B9=E8=B4=A6=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E9=87=87=E8=B4=AD=E5=AF=B9=E8=B4=A6=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E6=88=90=E5=93=81=E5=85=A5=E5=BA=93=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E5=8E=9F=E6=96=99=E9=A2=86=E6=96=99=E5=8D=95?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterialRequisitionInfoController.java | 117 +++- .../domain/MaterialRequisitionDetail.java | 16 +- .../MaterialRequisitionDetailDto.java | 46 +- .../exportDto/MaterialRequisitionInfoDto.java | 11 + .../controller/PurchaseOrderController.java | 18 +- .../domain/exportDto/PurchaseMaterialDto.java | 2 +- .../domain/exportDto/PurchaseOrderDto.java | 5 +- .../SalesAccountReconciliationController.java | 121 +++- .../domain/SalesAccountReconciliation.java | 29 +- .../SalesAccountReconciliationDto.java | 295 ++++++++ .../SalesAccountReconciliationMapper.java | 4 +- .../ISalesAccountReconciliationService.java | 7 +- ...SalesAccountReconciliationServiceImpl.java | 17 +- .../WarehousingInInfoController.java | 97 ++- .../exportDto/WarehousingInDetailDto.java | 95 ++- .../utils/CustomRowWriteCellHandler.java | 40 ++ .../utils/CustomRowWriteCellsHandler.java | 52 ++ .../utils/CustomRowWriteHandler.java | 37 + .../com/ruoyi/storehouse/utils/MyHandler.java | 86 +++ .../MaterialRequisitionDetailMapper.xml | 6 +- .../SalesAccountReconciliationMapper.xml | 37 +- .../materialRequisitionYL/add.html | 58 +- .../materialRequisitionYL/edit.html | 43 +- .../materialRequisitionYL.html | 27 +- .../warehousingFinishProductNotice/edit.html | 59 +- .../manufacture/workOrderInfo/edit.html | 639 +++++++++++++++++- .../salesAccountReconciliation.html | 68 +- .../storehouse/warehousingCheckInfo/add.html | 4 +- .../storehouse/warehousingCheckInfo/edit.html | 12 +- .../warehousingCheckInfo.html | 10 +- .../warehousingInFinishProduct.html | 6 +- .../warehousingInPDFinishProduct/add.html | 44 +- .../warehousingInPDFinishProduct/edit.html | 41 +- .../warehousingInPDFinishProduct.html | 6 +- .../warehousingInRGFinishProduct.html | 7 +- .../warehousingInRawMaterial.html | 10 +- .../warehousingInSearch.html | 4 +- .../warehousingInSubsidiary.html | 10 +- .../warehousingInspectionNotice/add.html | 4 +- .../warehousingInspectionNotice/edit.html | 4 +- .../warehousingInspectionNotice.html | 6 +- .../resources/templates/system/bom/bom.html | 2 +- .../MaterialRequisitionInfoController.class | Bin 21498 -> 23548 bytes .../domain/MaterialRequisitionDetail.class | Bin 5332 -> 5584 bytes .../MaterialRequisitionDetailDto.class | Bin 5763 -> 6778 bytes .../MaterialRequisitionInfoDto.class | Bin 7861 -> 8316 bytes .../controller/PurchaseOrderController.class | Bin 14295 -> 14369 bytes .../exportDto/PurchaseMaterialDto.class | Bin 5500 -> 5453 bytes .../domain/exportDto/PurchaseOrderDto.class | Bin 10606 -> 10598 bytes ...SalesAccountReconciliationController.class | Bin 5521 -> 13601 bytes .../domain/SalesAccountReconciliation.class | Bin 6228 -> 6496 bytes .../SalesAccountReconciliationMapper.class | Bin 840 -> 838 bytes .../ISalesAccountReconciliationService.class | Bin 820 -> 818 bytes ...alesAccountReconciliationServiceImpl.class | Bin 2169 -> 2202 bytes .../MaterialRequisitionDetailMapper.xml | 6 +- .../SalesAccountReconciliationMapper.xml | 37 +- .../manufacture/workOrderInfo/edit.html | 639 +++++++++++++++++- .../salesAccountReconciliation.html | 68 +- .../warehousingInspectionNotice/add.html | 4 +- .../warehousingInspectionNotice/edit.html | 4 +- .../warehousingInspectionNotice.html | 6 +- .../classes/templates/system/bom/bom.html | 2 +- 62 files changed, 2707 insertions(+), 261 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/sales/domain/exportDto/SalesAccountReconciliationDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellHandler.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellsHandler.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteHandler.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/MyHandler.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java index d9a1d8e7..f1defacf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java @@ -6,7 +6,6 @@ import com.alibaba.excel.util.MapUtils; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.style.WriteCellStyle; -import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.ruoyi.ck.utils.Result; import com.ruoyi.common.annotation.Log; @@ -17,16 +16,23 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.manufacture.domain.MaterialRequisitionDetail; import com.ruoyi.manufacture.domain.MaterialRequisitionInfo; +import com.ruoyi.manufacture.domain.WorkOrderInfo; import com.ruoyi.manufacture.domain.exportDto.MaterialRequisitionDetailDto; import com.ruoyi.manufacture.domain.exportDto.MaterialRequisitionInfoDto; +import com.ruoyi.manufacture.domain.exportDto.WorkOrderInfoDto; import com.ruoyi.manufacture.service.IMaterialRequisitionDetailService; import com.ruoyi.manufacture.service.IMaterialRequisitionInfoService; import com.ruoyi.outsource.domain.OutsourceOrderMaterial; import com.ruoyi.outsource.service.IOutsourceOrderMaterialService; import com.ruoyi.outsource.service.impl.OutsourceOrderMaterialServiceImpl; +import com.ruoyi.manufacture.service.IWorkOrderInfoService; +import com.ruoyi.system.domain.SysBom; +import com.ruoyi.system.domain.SysBomRawMaterial; +import com.ruoyi.system.service.ISysBomBcpService; +import com.ruoyi.system.service.ISysBomRawMaterialService; +import com.ruoyi.system.service.ISysBomService; import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.utils.ExcelFillCellMergePrevColUtils; -import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -62,12 +68,23 @@ public class MaterialRequisitionInfoController extends BaseController private String prefixBcp = "manufacture/materialRequisitionBCP"; private String prefixOutsource = "outsource/materialRequisitionOutsource"; + //excel数据量 + private Integer excelSize = 28; + @Autowired private IMaterialRequisitionInfoService materialRequisitionInfoService; @Autowired private IMaterialRequisitionDetailService materialRequisitionDetailService; @Autowired private ISysDictTypeService sysDictTypeService; + @Autowired + private ISysBomService sysBomService; + @Autowired + private ISysBomBcpService sysBomBcpService; + @Autowired + private ISysBomRawMaterialService sysBomRawMaterialService; + @Autowired + private IWorkOrderInfoService workOrderInfoService; // @RequiresPermissions("manufacture:materialRequisitionInfo:view") // @GetMapping() @@ -331,6 +348,7 @@ public class MaterialRequisitionInfoController extends BaseController return Result.getSuccessResult(materialRequisitionInfoService.getOutsourceId()); } + /** * 导出领料单列表 */ @@ -342,16 +360,32 @@ public class MaterialRequisitionInfoController extends BaseController // System.out.println(materialRequisitionId); + //领料单基础信息 MaterialRequisitionInfo materialRequisitionInfo = materialRequisitionInfoService.selectMaterialRequisitionInfoById(materialRequisitionId); MaterialRequisitionInfoDto materialRequisitionInfoDto = new MaterialRequisitionInfoDto(); BeanUtils.copyProperties(materialRequisitionInfo,materialRequisitionInfoDto); + //查询制工单信息 + WorkOrderInfo workOrderInfo = new WorkOrderInfo(); + workOrderInfo.setWorkOrderNumber(materialRequisitionInfo.getWorkOrderNumber()); + List workOrderInfoList = workOrderInfoService.selectWorkOrderInfoList(workOrderInfo); + WorkOrderInfoDto workOrderInfoDto = new WorkOrderInfoDto(); + String specificationModel = ""; + String versionNumber = ""; + if (workOrderInfoList.size() == 1) { + BeanUtils.copyProperties(workOrderInfoList.get(0),workOrderInfoDto); + specificationModel = workOrderInfoDto.getSpecificationModel(); + versionNumber = workOrderInfoDto.getVersionNumber(); + } + + //查询物料信息 MaterialRequisitionDetail materialRequisitionDetail = new MaterialRequisitionDetail(); materialRequisitionDetail.setMaterialRequisitionNumber(materialRequisitionInfo.getMaterialRequisitionNumber()); // 创建列合并工具类对象 ExcelFillCellMergePrevColUtils mergePrevColUtils = new ExcelFillCellMergePrevColUtils(); + //领料单包含的物料 List materialRequisitionDetailList = materialRequisitionDetailService.selectMaterialRequisitionDetailList(materialRequisitionDetail); List materialRequisitionDetailDtoList = new ArrayList<>(); @@ -362,10 +396,27 @@ public class MaterialRequisitionInfoController extends BaseController Object source = values.next(); MaterialRequisitionDetailDto target = MaterialRequisitionDetailDto.class.newInstance(); BeanUtils.copyProperties(source, target); - mergePrevColUtils.add(number+5,1,1); - mergePrevColUtils.add(number+5,4,1); target.setNumber(++number); materialRequisitionDetailDtoList.add(target); +// getBomDetail(number, target.getMaterialCode(), materialRequisitionDetailDtoList); + } + int size = materialRequisitionDetailDtoList.size(); + if (materialRequisitionDetailDtoList.size()>>>>>异常<<<<<<", e); @@ -373,13 +424,13 @@ public class MaterialRequisitionInfoController extends BaseController System.out.println(materialRequisitionDetailDtoList); response.setCharacterEncoding("utf-8"); - String fileName = URLEncoder.encode("销售订单", "UTF-8").replaceAll("\\+", "%20"); + String fileName = URLEncoder.encode("领料单", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); String templateFileName = "C:\\exportTemplates\\exportMaterialRequisition.xlsx"; try (ExcelWriter excelWriter = EasyExcel .write(response.getOutputStream(), MaterialRequisitionDetailDto.class) .withTemplate(templateFileName) - .registerWriteHandler(mergePrevColUtils) +// .registerWriteHandler(mergePrevColUtils) //样式注册 .registerWriteHandler(horizontalCellStyleStrategyBuilder()) .build()) { @@ -403,13 +454,47 @@ public class MaterialRequisitionInfoController extends BaseController map.put("deptName", materialRequisitionInfoDto.getDeptName()); map.put("finishProductCode", materialRequisitionInfoDto.getFinishProductCode()); - map.put("typeMachine", materialRequisitionInfoDto.getTypeMachine()); map.put("workOrderQuantity", materialRequisitionInfoDto.getWorkOrderQuantity()); - map.put("materialRequisitionPerson", materialRequisitionInfoDto.getMaterialRequisitionPerson()); + map.put("typeMachine", materialRequisitionInfoDto.getTypeMachine()); + map.put("specificationModel", specificationModel); + map.put("versionNumber", versionNumber); excelWriter.fill(map, writeSheet); } } + public void getBomDetail(Integer number, String materialCode, List materialRequisitionDetailDtoList) { + //获取bom信息 + //判断是否有bom + SysBom sysBom = new SysBom(); + sysBom.setFinishProductCode(materialCode); + List sysBomList = sysBomService.selectSysBomList(sysBom); + //如果是半成品,则继续查询 + if (sysBomList.size() != 0) { + //先查询原料 + SysBomRawMaterial sysBomRawMaterial = new SysBomRawMaterial(); + sysBomRawMaterial.setFinishProductCode(sysBomList.get(0).getFinishProductCode()); + List sysBomRawMaterialList = sysBomRawMaterialService.selectSysBomRawMaterialList(sysBomRawMaterial); + try { +// Iterator values1= sysBomRawMaterialList.iterator(); + for (int i = 0; i < sysBomRawMaterialList.size(); i++){ + MaterialRequisitionDetailDto target1 = MaterialRequisitionDetailDto.class.newInstance(); +// BeanUtils.copyProperties(source1, target1); + target1.setNumber(++number); + target1.setMaterialCode(sysBomRawMaterialList.get(i).getRawMaterialCode()); + target1.setMaterialName(sysBomRawMaterialList.get(i).getRawMaterialName()); + target1.setSpecificationModel(sysBomRawMaterialList.get(i).getSpecificationModel()); + target1.setItemNumber(sysBomRawMaterialList.get(i).getSupplierNumber()); + target1.setInventoryUnit(sysBomRawMaterialList.get(i).getInventoryUnit()); + target1.setUnitUsage(sysBomRawMaterialList.get(i).getRawMaterialConsumption()); + materialRequisitionDetailDtoList.add(target1); + getBomDetail(number,sysBomRawMaterialList.get(i).getRawMaterialCode(),materialRequisitionDetailDtoList); + } + } catch (Exception e) { + log.error(">>>>>>异常<<<<<<", e); + } + } + } + /** * 导出领料单列表 @@ -482,10 +567,10 @@ public class MaterialRequisitionInfoController extends BaseController public HorizontalCellStyleStrategy horizontalCellStyleStrategyBuilder() { WriteCellStyle headWriteCellStyle = new WriteCellStyle(); //设置头字体 - WriteFont headWriteFont = new WriteFont(); - headWriteFont.setFontHeightInPoints((short) 13); - headWriteFont.setBold(true); - headWriteCellStyle.setWriteFont(headWriteFont); +// WriteFont headWriteFont = new WriteFont(); +// headWriteFont.setFontHeightInPoints((short) 13); +// headWriteFont.setBold(true); +// headWriteCellStyle.setWriteFont(headWriteFont); //设置头居中 headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); @@ -496,10 +581,10 @@ public class MaterialRequisitionInfoController extends BaseController //垂直居中 contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //单元格边框 - contentWriteCellStyle.setBorderTop(BorderStyle.DASHED); - contentWriteCellStyle.setBorderLeft(BorderStyle.DASHED); - contentWriteCellStyle.setBorderRight(BorderStyle.DASHED); - contentWriteCellStyle.setBorderBottom(BorderStyle.DASHED); +// contentWriteCellStyle.setBorderTop(BorderStyle.THIN); +// contentWriteCellStyle.setBorderLeft(BorderStyle.THIN); +// contentWriteCellStyle.setBorderRight(BorderStyle.THIN); +// contentWriteCellStyle.setBorderBottom(BorderStyle.THIN); return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java index 0ffb0e4f..ac64194c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java @@ -34,6 +34,10 @@ public class MaterialRequisitionDetail extends BaseEntity @Excel(name = "规格型号") private String specificationModel; + /** 料号 */ + @Excel(name = "料号") + private String itemNumber; + /** 机种 */ @Excel(name = "机种") private String typeMachine; @@ -121,7 +125,16 @@ public class MaterialRequisitionDetail extends BaseEntity { return specificationModel; } - public void setTypeMachine(String typeMachine) + + public String getItemNumber() { + return itemNumber; + } + + public void setItemNumber(String itemNumber) { + this.itemNumber = itemNumber; + } + + public void setTypeMachine(String typeMachine) { this.typeMachine = typeMachine; } @@ -227,6 +240,7 @@ public class MaterialRequisitionDetail extends BaseEntity .append("materialCode", getMaterialCode()) .append("materialName", getMaterialName()) .append("specificationModel", getSpecificationModel()) + .append("itemNumber", getItemNumber()) .append("typeMachine", getTypeMachine()) .append("inventoryUnit", getInventoryUnit()) .append("planQuantity", getPlanQuantity()) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionDetailDto.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionDetailDto.java index c08d4696..075b4726 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionDetailDto.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionDetailDto.java @@ -1,6 +1,8 @@ package com.ruoyi.manufacture.domain.exportDto; import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -17,6 +19,7 @@ public class MaterialRequisitionDetailDto extends BaseEntity private static final long serialVersionUID = 1L; /** 序号 */ @ExcelProperty("序号") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private Integer number; /** 领料物料id */ @@ -28,26 +31,36 @@ public class MaterialRequisitionDetailDto extends BaseEntity /** 物料代码 */ @ExcelProperty("物料代码") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String materialCode; /** 物料名称 */ @ExcelProperty("物料名称") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String materialName; /** 规格型号 */ @ExcelProperty("规格型号") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String specificationModel; + /** 料号 */ + @ExcelProperty("料号") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String itemNumber; + /** 机种 */ @ExcelProperty("机种") private String typeMachine; /** 单位 */ @ExcelProperty("单位") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String inventoryUnit; /** 计划数量 */ @ExcelProperty("计划数量") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String planQuantity; /** 说明 */ @@ -56,10 +69,12 @@ public class MaterialRequisitionDetailDto extends BaseEntity /** 单位用量 */ @ExcelProperty("单位用量") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String unitUsage; /** 存放位置 */ @ExcelProperty("存放位置") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String storageLocation; /** 物料类别 */ @@ -72,6 +87,11 @@ public class MaterialRequisitionDetailDto extends BaseEntity /** 备用二 */ private String standbyTwo; + /** 实发数量 */ + @ExcelProperty("实发数量") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String actualQuantity; + /** bom阶 */ @Excel(name = "bom阶") private String bomRank; @@ -133,7 +153,16 @@ public class MaterialRequisitionDetailDto extends BaseEntity { return specificationModel; } - public void setTypeMachine(String typeMachine) + + public String getItemNumber() { + return itemNumber; + } + + public void setItemNumber(String itemNumber) { + this.itemNumber = itemNumber; + } + + public void setTypeMachine(String typeMachine) { this.typeMachine = typeMachine; } @@ -230,6 +259,15 @@ public class MaterialRequisitionDetailDto extends BaseEntity public void setUpFinishProductCode(String upFinishProductCode) { this.upFinishProductCode = upFinishProductCode; } + + public String getActualQuantity() { + return actualQuantity; + } + + public void setActualQuantity(String actualQuantity) { + this.actualQuantity = actualQuantity; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -239,6 +277,7 @@ public class MaterialRequisitionDetailDto extends BaseEntity .append("materialCode", getMaterialCode()) .append("materialName", getMaterialName()) .append("specificationModel", getSpecificationModel()) + .append("itemNumber", getItemNumber()) .append("typeMachine", getTypeMachine()) .append("inventoryUnit", getInventoryUnit()) .append("planQuantity", getPlanQuantity()) @@ -248,8 +287,9 @@ public class MaterialRequisitionDetailDto extends BaseEntity .append("materialType", getMaterialType()) .append("standbyOne", getStandbyOne()) .append("standbyTwo", getStandbyTwo()) - .append("bomRank", getBomRank()) - .append("upFinishProductCode", getUpFinishProductCode()) + .append("bomRank", getBomRank()) + .append("upFinishProductCode", getUpFinishProductCode()) + .append("actualQuantity", getActualQuantity()) .toString(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionInfoDto.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionInfoDto.java index b092ad79..4dd188ec 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionInfoDto.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/exportDto/MaterialRequisitionInfoDto.java @@ -1,6 +1,8 @@ package com.ruoyi.manufacture.domain.exportDto; import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.ruoyi.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -20,18 +22,22 @@ public class MaterialRequisitionInfoDto extends BaseEntity /** 领料单号 */ @ExcelProperty("领料单号") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String materialRequisitionNumber; /** 订单号码 */ @ExcelProperty("订单号码") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String salesOrderNumber; /** 制工单号 */ @ExcelProperty("制工单号") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String workOrderNumber; /** 领料部门 */ @ExcelProperty("领料部门") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String deptName; /** 领料人 */ @@ -60,18 +66,22 @@ public class MaterialRequisitionInfoDto extends BaseEntity /** 出库日期 */ @ExcelProperty("出库日期") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String outputDate; /** 成品代码 */ @ExcelProperty("成品代码") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String finishProductCode; /** 机种 */ @ExcelProperty("机种") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String typeMachine; /** 工单数量 */ @ExcelProperty("工单数量") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String workOrderQuantity; /** 备注内容 */ @@ -84,6 +94,7 @@ public class MaterialRequisitionInfoDto extends BaseEntity /** 录入时间 */ @ExcelProperty("录入时间") + @ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) private String firstAddTime; /** 修改时间 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java index c13f9c82..c1efbef4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java @@ -21,6 +21,7 @@ import com.ruoyi.purchase.domain.exportDto.PurchaseMaterialDto; import com.ruoyi.purchase.domain.exportDto.PurchaseOrderDto; import com.ruoyi.purchase.service.IPurchaseMaterialService; import com.ruoyi.purchase.service.IPurchaseOrderService; +import com.ruoyi.storehouse.utils.CustomRowWriteHandler; import com.ruoyi.system.utils.ExcelFillCellMergePrevColUtils; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -192,15 +193,15 @@ public class PurchaseOrderController extends BaseController List purchaseMaterialList = purchaseMaterialService.selectPurchaseMaterialList(purchaseMaterial); List purchaseMaterialDtoList = new ArrayList<>(); double total = 0.00; + int number = 0; try { - int number = 0; Iterator values= purchaseMaterialList.iterator(); while(values.hasNext()) { Object source = values.next(); PurchaseMaterialDto target = PurchaseMaterialDto.class.newInstance(); BeanUtils.copyProperties(source, target); - mergePrevColUtils.add(number+8,1,1); - mergePrevColUtils.add(number+8,10,1); +// mergePrevColUtils.add(number+8,1,1); +// mergePrevColUtils.add(number+8,10,1); target.setNumber(++number); purchaseMaterialDtoList.add(target); total = total + Double.parseDouble(target.getAmountMoney()); @@ -211,6 +212,12 @@ public class PurchaseOrderController extends BaseController } System.out.println(purchaseMaterialDtoList); +// Map colMap = new HashMap<>(); +//// colMap.put(8, 9); +// colMap.put("rowNum1", purchaseMaterialDtoList.size()+8); +// colMap.put("rowNum2", purchaseMaterialDtoList.size()+8); +// colMap.put("colNum1", 8); +// colMap.put("colNum2", 9); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("采购订单", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); @@ -220,7 +227,10 @@ public class PurchaseOrderController extends BaseController .withTemplate(templateFileName) .registerWriteHandler(mergePrevColUtils) //样式注册 - .registerWriteHandler(horizontalCellStyleStrategyBuilder()) +// .registerWriteHandler(horizontalCellStyleStrategyBuilder()) + .registerWriteHandler(new CustomRowWriteHandler(1)) + .registerWriteHandler(new CustomRowWriteHandler(10)) +// .registerWriteHandler(new CustomRowWriteCellsHandler(colMap)) .build()) { WriteSheet writeSheet = EasyExcel.writerSheet().build(); FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseMaterialDto.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseMaterialDto.java index 608df3b6..4c1de123 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseMaterialDto.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseMaterialDto.java @@ -14,7 +14,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; * @date 2023-04-03 */ -@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) +//@ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) public class PurchaseMaterialDto extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseOrderDto.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseOrderDto.java index 6fb15987..b2931139 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseOrderDto.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/exportDto/PurchaseOrderDto.java @@ -13,7 +13,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; * @author ruoyi * @date 2023-03-31 */ -@ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) +//@ContentStyle(borderLeft = BorderStyleEnum.NONE,borderTop = BorderStyleEnum.NONE,borderBottom = BorderStyleEnum.NONE,borderRight = BorderStyleEnum.NONE) public class PurchaseOrderDto extends BaseEntity { private static final long serialVersionUID = 1L; @@ -145,7 +145,8 @@ public class PurchaseOrderDto extends BaseEntity @ExcelProperty("修改时间") private String updateInfoTime; - @ExcelProperty("金额总计") + @ExcelProperty(value = "金额总计") + @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private Double total; public Double getTotal() { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAccountReconciliationController.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAccountReconciliationController.java index dd1753d2..90a1121f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAccountReconciliationController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/controller/SalesAccountReconciliationController.java @@ -1,22 +1,46 @@ package com.ruoyi.sales.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sales.domain.SalesAccountReconciliation; +import com.ruoyi.sales.domain.exportDto.SalesAccountReconciliationDto; import com.ruoyi.sales.service.ISalesAccountReconciliationService; import com.ruoyi.system.domain.SysCustomer; import com.ruoyi.system.service.ISysCustomerService; +import com.ruoyi.system.service.ISysDictTypeService; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Map; + +import static com.ruoyi.common.config.datasource.DynamicDataSourceContextHolder.log; /** * 销售对账Controller @@ -36,6 +60,9 @@ public class SalesAccountReconciliationController extends BaseController @Autowired private ISysCustomerService customerService; + @Autowired + private ISysDictTypeService sysDictTypeService; + @RequiresPermissions("sales:salesAccountReconciliation:view") @GetMapping() public String salesAccountReconciliation() @@ -94,10 +121,10 @@ public class SalesAccountReconciliationController extends BaseController /** * 修改销售对账 */ - @GetMapping("/edit/{salesOrderCode}") - public String edit(@PathVariable("salesOrderCode") String salesOrderCode, ModelMap mmap) + @GetMapping("/edit/{salesFinishId}") + public String edit(@PathVariable("salesFinishId") Long salesFinishId, ModelMap mmap) { - SalesAccountReconciliation salesAccountReconciliation = salesAccountReconciliationService.selectSalesAccountReconciliationById(salesOrderCode); + SalesAccountReconciliation salesAccountReconciliation = salesAccountReconciliationService.selectSalesAccountReconciliationById(salesFinishId); mmap.put("salesAccountReconciliation", salesAccountReconciliation); return prefix + "/edit"; } @@ -133,4 +160,92 @@ public class SalesAccountReconciliationController extends BaseController List list = customerService.selectSysCustomerList(customer); return list; } + + /** + * 导出 + * @param ids + * @param response + * @throws IOException + */ + @RequiresPermissions("purchase:purchaseOrder:export") + @Log(title = "采购订单", businessType = BusinessType.EXPORT) + @RequestMapping("/exportSelected/{ids}") + @ResponseBody + public void exportSelected(@PathVariable("ids") String ids, HttpServletResponse response) throws IOException { + String[] idsStr = ids.split(","); + // 创建列合并工具类对象 +// ExcelFillCellMergePrevColUtils mergePrevColUtils = new ExcelFillCellMergePrevColUtils(); + List salesAccountReconciliationDtoList = new ArrayList<>(); + List salesAccountReconciliationList = new ArrayList<>(); + for (int i = 0; i < idsStr.length; i++) { + SalesAccountReconciliation salesAccountReconciliation = salesAccountReconciliationService.selectSalesAccountReconciliationById(Long.valueOf(idsStr[i])); + salesAccountReconciliationList.add(salesAccountReconciliation); + } + Double total = 0.00; + try { + int number = 0; + Iterator values= salesAccountReconciliationList.iterator(); + while(values.hasNext()) { + Object source = values.next(); + SalesAccountReconciliationDto target = SalesAccountReconciliationDto.class.newInstance(); + BeanUtils.copyProperties(source, target); + List deptData = sysDictTypeService.selectDictDataByType("sys_common_currency"); + for (int i = 0;i>>>>>异常<<<<<<", e); + } + + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("销售对账订单", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + String templateFileName = "C:\\exportTemplates\\exportSalesReconciliation.xlsx"; + try (ExcelWriter excelWriter = EasyExcel + .write(response.getOutputStream(), SalesAccountReconciliationDto.class) + .withTemplate(templateFileName) +// .registerWriteHandler(mergePrevColUtils) + //样式注册 + .registerWriteHandler(horizontalCellStyleStrategyBuilder()) + .build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(salesAccountReconciliationDtoList, fillConfig, writeSheet); + Map map = MapUtils.newHashMap(); + map.put("date", DateTimeFormatter.ofPattern("yyyy/MM/dd").format(LocalDateTime.now())); + map.put("total", total); + excelWriter.fill(map, writeSheet); + } + } + + public HorizontalCellStyleStrategy horizontalCellStyleStrategyBuilder() { + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + //设置头字体 + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontHeightInPoints((short) 13); + headWriteFont.setBold(true); + headWriteCellStyle.setWriteFont(headWriteFont); + //设置头居中 + headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + + //内容策略 + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + //设置 水平居中 + contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); +// 垂直居中 + contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); +//// 单元格边框 +// contentWriteCellStyle.setBorderTop(BorderStyle.THIN); +// contentWriteCellStyle.setBorderBottom(BorderStyle.THIN); +// contentWriteCellStyle.setBorderLeft(BorderStyle.THIN); +// contentWriteCellStyle.setBorderRight(BorderStyle.THIN); + + return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAccountReconciliation.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAccountReconciliation.java index 0f57a7ac..f056e8e8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAccountReconciliation.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/SalesAccountReconciliation.java @@ -14,6 +14,10 @@ public class SalesAccountReconciliation extends BaseEntity { private static final long serialVersionUID = 1L; + /** 销售物料id */ + @Excel(name = "销售物料id") + private String salesFinishId; + /** 发货通知单号 */ @Excel(name = "发货通知单号") private String noticeOrderNumber; @@ -54,9 +58,9 @@ public class SalesAccountReconciliation extends BaseEntity @Excel(name = "客户料号") private String customerNumber; - /** 机种 */ - @Excel(name = "机种") - private String typeMachine; + /** 币别 */ + @Excel(name = "币别") + private String commonCurrency; /** 单价 */ @Excel(name = "单价") @@ -94,6 +98,14 @@ public class SalesAccountReconciliation extends BaseEntity @Excel(name = "对账时间") private String accountReconciliationTime; + public String getSalesFinishId() { + return salesFinishId; + } + + public void setSalesFinishId(String salesFinishId) { + this.salesFinishId = salesFinishId; + } + public String getNoticeOrderNumber() { return noticeOrderNumber; } @@ -174,12 +186,12 @@ public class SalesAccountReconciliation extends BaseEntity this.customerNumber = customerNumber; } - public String getTypeMachine() { - return typeMachine; + public String getCommonCurrency() { + return commonCurrency; } - public void setTypeMachine(String typeMachine) { - this.typeMachine = typeMachine; + public void setCommonCurrency(String commonCurrency) { + this.commonCurrency = commonCurrency; } public String getProcessPrice() { @@ -257,6 +269,7 @@ public class SalesAccountReconciliation extends BaseEntity @Override public String toString() { return new ToStringBuilder(this) + .append("salesFinishId", salesFinishId) .append("noticeOrderNumber", noticeOrderNumber) .append("deliveryDate", deliveryDate) .append("salesOrderNumber", salesOrderNumber) @@ -267,7 +280,7 @@ public class SalesAccountReconciliation extends BaseEntity .append("finishProductName", finishProductName) .append("specificationModel", specificationModel) .append("customerNumber", customerNumber) - .append("typeMachine", typeMachine) + .append("commonCurrency", commonCurrency) .append("processPrice", processPrice) .append("productQuantity", productQuantity) .append("amountMoney", amountMoney) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/exportDto/SalesAccountReconciliationDto.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/exportDto/SalesAccountReconciliationDto.java new file mode 100644 index 00000000..12a3aab4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/domain/exportDto/SalesAccountReconciliationDto.java @@ -0,0 +1,295 @@ +package com.ruoyi.sales.domain.exportDto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * 销售对账对象 sales_account_reconciliation + * + * @author ruoyi + * @date 2023-02-03 + */ +public class SalesAccountReconciliationDto extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 销售物料id */ + @ExcelProperty("销售物料id") + private String salesFinishId; + + /** 发货通知单号 */ + @ExcelProperty("发货通知单号") + private String noticeOrderNumber; + + /** 发货日期 */ + @ExcelProperty("发货日期") + private String deliveryDate; + + /** 订单号码 */ + @ExcelProperty("订单号码") + private String salesOrderNumber; + + /** 客户代码 */ + @ExcelProperty("客户代码") + private String enterpriseCode; + + /** 客户名称 */ + @ExcelProperty("客户名称") + private String enterpriseName; + + /** 联系人 */ + @ExcelProperty("联系人") + private String customerContact; + + /** 成品代码 */ + @ExcelProperty("成品代码") + private String finishProductCode; + + /** 成品名称 */ + @ExcelProperty("成品名称") + private String finishProductName; + + /** 规格型号 */ + @ExcelProperty("规格型号") + private String specificationModel; + + /** 客户料号 */ + @ExcelProperty("客户料号") + private String customerNumber; + + /** 币别 */ + @ExcelProperty("币别") + private String commonCurrency; + + /** 单价 */ + @ExcelProperty("单价") + private String processPrice; + + /** 数量 */ + @ExcelProperty("数量") + private String productQuantity; + + /** 金额 */ + @ExcelProperty("金额") + private String amountMoney; + + /** 客户使用否 */ + @ExcelProperty("客户使用否") + private String customerUseOrNot; + + /** 客户使用数量 */ + @ExcelProperty("客户使用数量") + private String customerUseQuantity; + + /** 客户使用备注说明 */ + @ExcelProperty("客户使用备注说明") + private String customerUseRemarks; + + /** 对账否 */ + @ExcelProperty("对账否") + private String accountReconciliationOrNot; + + /** 对账人 */ + @ExcelProperty("对账人") + private String accountReconciliationPerson; + + /** 对账时间 */ + @ExcelProperty("对账时间") + private String accountReconciliationTime; + + public String getSalesFinishId() { + return salesFinishId; + } + + public void setSalesFinishId(String salesFinishId) { + this.salesFinishId = salesFinishId; + } + + public String getNoticeOrderNumber() { + return noticeOrderNumber; + } + + public void setNoticeOrderNumber(String noticeOrderNumber) { + this.noticeOrderNumber = noticeOrderNumber; + } + + public String getDeliveryDate() { + return deliveryDate; + } + + public void setDeliveryDate(String deliveryDate) { + this.deliveryDate = deliveryDate; + } + + public String getSalesOrderNumber() { + return salesOrderNumber; + } + + public void setSalesOrderNumber(String salesOrderNumber) { + this.salesOrderNumber = salesOrderNumber; + } + + public String getEnterpriseCode() { + return enterpriseCode; + } + + public void setEnterpriseCode(String enterpriseCode) { + this.enterpriseCode = enterpriseCode; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getCustomerContact() { + return customerContact; + } + + public void setCustomerContact(String customerContact) { + this.customerContact = customerContact; + } + + public String getFinishProductCode() { + return finishProductCode; + } + + public void setFinishProductCode(String finishProductCode) { + this.finishProductCode = finishProductCode; + } + + public String getFinishProductName() { + return finishProductName; + } + + public void setFinishProductName(String finishProductName) { + this.finishProductName = finishProductName; + } + + public String getSpecificationModel() { + return specificationModel; + } + + public void setSpecificationModel(String specificationModel) { + this.specificationModel = specificationModel; + } + + public String getCustomerNumber() { + return customerNumber; + } + + public void setCustomerNumber(String customerNumber) { + this.customerNumber = customerNumber; + } + + public String getCommonCurrency() { + return commonCurrency; + } + + public void setCommonCurrency(String commonCurrency) { + this.commonCurrency = commonCurrency; + } + + public String getProcessPrice() { + return processPrice; + } + + public void setProcessPrice(String processPrice) { + this.processPrice = processPrice; + } + + public String getProductQuantity() { + return productQuantity; + } + + public void setProductQuantity(String productQuantity) { + this.productQuantity = productQuantity; + } + + public String getAmountMoney() { + return amountMoney; + } + + public void setAmountMoney(String amountMoney) { + this.amountMoney = amountMoney; + } + + public String getCustomerUseOrNot() { + return customerUseOrNot; + } + + public void setCustomerUseOrNot(String customerUseOrNot) { + this.customerUseOrNot = customerUseOrNot; + } + + public String getCustomerUseQuantity() { + return customerUseQuantity; + } + + public void setCustomerUseQuantity(String customerUseQuantity) { + this.customerUseQuantity = customerUseQuantity; + } + + public String getCustomerUseRemarks() { + return customerUseRemarks; + } + + public void setCustomerUseRemarks(String customerUseRemarks) { + this.customerUseRemarks = customerUseRemarks; + } + + public String getAccountReconciliationOrNot() { + return accountReconciliationOrNot; + } + + public void setAccountReconciliationOrNot(String accountReconciliationOrNot) { + this.accountReconciliationOrNot = accountReconciliationOrNot; + } + + public String getAccountReconciliationPerson() { + return accountReconciliationPerson; + } + + public void setAccountReconciliationPerson(String accountReconciliationPerson) { + this.accountReconciliationPerson = accountReconciliationPerson; + } + + public String getAccountReconciliationTime() { + return accountReconciliationTime; + } + + public void setAccountReconciliationTime(String accountReconciliationTime) { + this.accountReconciliationTime = accountReconciliationTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("salesFinishId", salesFinishId) + .append("noticeOrderNumber", noticeOrderNumber) + .append("deliveryDate", deliveryDate) + .append("salesOrderNumber", salesOrderNumber) + .append("enterpriseCode", enterpriseCode) + .append("enterpriseName", enterpriseName) + .append("customerContact", customerContact) + .append("finishProductCode", finishProductCode) + .append("finishProductName", finishProductName) + .append("specificationModel", specificationModel) + .append("customerNumber", customerNumber) + .append("commonCurrency", commonCurrency) + .append("processPrice", processPrice) + .append("productQuantity", productQuantity) + .append("amountMoney", amountMoney) + .append("customerUseOrNot", customerUseOrNot) + .append("customerUseQuantity", customerUseQuantity) + .append("customerUseRemarks", customerUseRemarks) + .append("accountReconciliationOrNot", accountReconciliationOrNot) + .append("accountReconciliationPerson", accountReconciliationPerson) + .append("accountReconciliationTime", accountReconciliationTime) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAccountReconciliationMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAccountReconciliationMapper.java index 9d95884a..fb962718 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAccountReconciliationMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/mapper/SalesAccountReconciliationMapper.java @@ -15,10 +15,10 @@ public interface SalesAccountReconciliationMapper /** * 查询销售对账 * - * @param salesOrderCode 销售对账ID + * @param salesFinishId 销售对账ID * @return 销售对账 */ - public SalesAccountReconciliation selectSalesAccountReconciliationById(String salesOrderCode); + public SalesAccountReconciliation selectSalesAccountReconciliationById(Long salesFinishId); /** * 查询销售对账列表 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAccountReconciliationService.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAccountReconciliationService.java index aae791a3..0a4e689a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAccountReconciliationService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/ISalesAccountReconciliationService.java @@ -1,8 +1,9 @@ package com.ruoyi.sales.service; -import java.util.List; import com.ruoyi.sales.domain.SalesAccountReconciliation; +import java.util.List; + /** * 销售对账Service接口 * @@ -14,10 +15,10 @@ public interface ISalesAccountReconciliationService /** * 查询销售对账 * - * @param salesOrderCode 销售对账ID + * @param salesFinishId 销售对账ID * @return 销售对账 */ - public SalesAccountReconciliation selectSalesAccountReconciliationById(String salesOrderCode); + public SalesAccountReconciliation selectSalesAccountReconciliationById(Long salesFinishId); /** * 查询销售对账列表 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAccountReconciliationServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAccountReconciliationServiceImpl.java index bf5b41d7..cabba3e8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAccountReconciliationServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/sales/service/impl/SalesAccountReconciliationServiceImpl.java @@ -1,12 +1,13 @@ package com.ruoyi.sales.service.impl; -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.ruoyi.sales.mapper.SalesAccountReconciliationMapper; +import com.ruoyi.common.core.text.Convert; import com.ruoyi.sales.domain.SalesAccountReconciliation; +import com.ruoyi.sales.mapper.SalesAccountReconciliationMapper; import com.ruoyi.sales.service.ISalesAccountReconciliationService; -import com.ruoyi.common.core.text.Convert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; /** * 销售对账Service业务层处理 @@ -23,13 +24,13 @@ public class SalesAccountReconciliationServiceImpl implements ISalesAccountRecon /** * 查询销售对账 * - * @param salesOrderCode 销售对账ID + * @param salesFinishId 销售对账ID * @return 销售对账 */ @Override - public SalesAccountReconciliation selectSalesAccountReconciliationById(String salesOrderCode) + public SalesAccountReconciliation selectSalesAccountReconciliationById(Long salesFinishId) { - return salesAccountReconciliationMapper.selectSalesAccountReconciliationById(salesOrderCode); + return salesAccountReconciliationMapper.selectSalesAccountReconciliationById(salesFinishId); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/controller/WarehousingInInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/controller/WarehousingInInfoController.java index 0752b11e..a01978e5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/controller/WarehousingInInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/controller/WarehousingInInfoController.java @@ -15,12 +15,17 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.manufacture.domain.WarehousingFinishProductNotice; +import com.ruoyi.manufacture.domain.WorkOrderInfo; +import com.ruoyi.manufacture.service.IWarehousingFinishProductNoticeService; +import com.ruoyi.manufacture.service.IWorkOrderInfoService; import com.ruoyi.storehouse.domain.WarehousingInDetail; import com.ruoyi.storehouse.domain.WarehousingInInfo; import com.ruoyi.storehouse.domain.exportDto.WarehousingInDetailDto; import com.ruoyi.storehouse.domain.exportDto.WarehousingInInfoDto; import com.ruoyi.storehouse.service.IWarehousingInDetailService; import com.ruoyi.storehouse.service.IWarehousingInInfoService; +import com.ruoyi.storehouse.utils.CustomRowWriteHandler; import com.ruoyi.system.utils.ExcelFillCellMergePrevColUtils; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.HorizontalAlignment; @@ -35,8 +40,6 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -66,7 +69,13 @@ public class WarehousingInInfoController extends BaseController @Autowired private IWarehousingInDetailService warehousingInDetailService; + @Autowired + private IWarehousingFinishProductNoticeService warehousingFinishProductNoticeService; + @Autowired + private IWorkOrderInfoService workOrderInfoService; + //excel数据量 + private Integer excelSize = 9; /** * 页面跳转 * @return @@ -482,7 +491,7 @@ public class WarehousingInInfoController extends BaseController } /** - * 导出辅料入库单 + * 导出成品入库单 */ @RequiresPermissions("storehouse:warehousingInInfo:export") @Log(title = "入库", businessType = BusinessType.EXPORT) @@ -503,32 +512,74 @@ public class WarehousingInInfoController extends BaseController ExcelFillCellMergePrevColUtils mergePrevColUtils = new ExcelFillCellMergePrevColUtils(); List warehousingInDetailList = warehousingInDetailService.selectWarehousingInDetailList(warehousingInDetail); - WarehousingInDetail warehousingInDetail1 = warehousingInDetailList.get(0); - WarehousingInDetailDto warehousingInDetailDto = new WarehousingInDetailDto(); - BeanUtils.copyProperties(warehousingInDetail1,warehousingInDetailDto); + List warehousingInDetailDtoList = new ArrayList<>(); + try { + int number = 0; + Iterator values= warehousingInDetailList.iterator(); + while(values.hasNext()) { + Object source = values.next(); + WarehousingInDetailDto target = WarehousingInDetailDto.class.newInstance(); + BeanUtils.copyProperties(source, target); + mergePrevColUtils.add(number+7,1,1); + WorkOrderInfo workOrderInfo = new WorkOrderInfo(); + workOrderInfo.setWorkOrderNumber(warehousingInInfo.getWorkOrderNumber()); + List workOrderInfoList = workOrderInfoService.selectWorkOrderInfoList(workOrderInfo); + WarehousingFinishProductNotice warehousingFinishProductNotice = new WarehousingFinishProductNotice(); + warehousingFinishProductNotice.setWorkOrderNumber(warehousingInInfo.getWorkOrderNumber()); + List warehousingFinishProductNoticeList = warehousingFinishProductNoticeService.selectWarehousingFinishProductNoticeList(warehousingFinishProductNotice); + target.setSalesOrderNumber(workOrderInfoList.get(0).getSalesOrderNumber()); + target.setAcceptanceQuantity(String.valueOf(Float.valueOf(warehousingFinishProductNoticeList.get(0).getQualifiedQuantity())+Float.valueOf(warehousingFinishProductNoticeList.get(0).getUnqualifiedQuantity()))); + target.setRejectionQuantity(warehousingFinishProductNoticeList.get(0).getUnqualifiedQuantity()); + target.setNumber(++number); + target.setInspectionStatus("OK"); + warehousingInDetailDtoList.add(target); + } + int size = warehousingInDetailDtoList.size(); + if (warehousingInDetailDtoList.size()>>>>>异常<<<<<<", e); + } // System.out.println(warehousingInDetailDtoList); + for (int i=0;i map = MapUtils.newHashMap(); - map.put("date", DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now())); - map.put("workOrderNumber", warehousingInInfoDto.getWorkOrderNumber()); - map.put("enterpriseCode", warehousingInInfoDto.getEnterpriseCode()); - map.put("enterpriseName", warehousingInInfoDto.getEnterpriseName()); - map.put("materialCode", warehousingInDetailDto.getMaterialCode()); - map.put("materialName", warehousingInDetailDto.getMaterialName()); +// map.put("date", DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now())); excelWriter.fill(map, writeSheet); } } @@ -550,10 +601,10 @@ public class WarehousingInInfoController extends BaseController //垂直居中 contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //单元格边框 - contentWriteCellStyle.setBorderTop(BorderStyle.DASHED); - contentWriteCellStyle.setBorderLeft(BorderStyle.DASHED); - contentWriteCellStyle.setBorderRight(BorderStyle.DASHED); - contentWriteCellStyle.setBorderBottom(BorderStyle.DASHED); + contentWriteCellStyle.setBorderTop(BorderStyle.THIN); + contentWriteCellStyle.setBorderLeft(BorderStyle.THIN); + contentWriteCellStyle.setBorderRight(BorderStyle.THIN); + contentWriteCellStyle.setBorderBottom(BorderStyle.THIN); return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/domain/exportDto/WarehousingInDetailDto.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/domain/exportDto/WarehousingInDetailDto.java index e5c72571..192718df 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/domain/exportDto/WarehousingInDetailDto.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/domain/exportDto/WarehousingInDetailDto.java @@ -1,6 +1,8 @@ package com.ruoyi.storehouse.domain.exportDto; import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.ruoyi.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -15,6 +17,9 @@ public class WarehousingInDetailDto extends BaseEntity { private static final long serialVersionUID = 1L; + /** 序号 */ + @ExcelProperty("序号") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private Integer number; /** 入库物料id */ @@ -24,12 +29,15 @@ public class WarehousingInDetailDto extends BaseEntity @ExcelProperty("入库单号") private String warehousingNumber; + /** 物料代码 */ @ExcelProperty("物料代码") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String materialCode; /** 物料名称 */ @ExcelProperty("物料名称") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String materialName; /** 物料类型 */ @@ -38,6 +46,7 @@ public class WarehousingInDetailDto extends BaseEntity /** 规格型号 */ @ExcelProperty("规格型号") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String specificationModel; /** 机种 */ @@ -50,6 +59,7 @@ public class WarehousingInDetailDto extends BaseEntity /** 合格数量 */ @ExcelProperty("合格数量") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) private String warehousingQuantity; /** 说明 */ @@ -72,6 +82,36 @@ public class WarehousingInDetailDto extends BaseEntity @ExcelProperty("退货数量") private String returnGoodsQuantity; + /** 订单号 */ + @ExcelProperty("订单号") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String salesOrderNumber; + + /** 报废数量 */ + @ExcelProperty("报废数量") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String scrapQuantity; + + /** 验收数量 */ + @ExcelProperty("验收数量") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String acceptanceQuantity; + + /** 验退数量 */ + @ExcelProperty("验退数量") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String rejectionQuantity; + + /** 单位检验状况 */ + @ExcelProperty("单位检验状况") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String inspectionStatus; + + /** 库别名称备注 */ + @ExcelProperty("库别名称备注") +// @ContentStyle(borderLeft = BorderStyleEnum.THIN,borderTop = BorderStyleEnum.THIN,borderBottom = BorderStyleEnum.THIN,borderRight = BorderStyleEnum.THIN) + private String warehouseNameRemarks; + public Integer getNumber() { return number; } @@ -207,6 +247,54 @@ public class WarehousingInDetailDto extends BaseEntity return returnGoodsQuantity; } + public String getSalesOrderNumber() { + return salesOrderNumber; + } + + public void setSalesOrderNumber(String salesOrderNumber) { + this.salesOrderNumber = salesOrderNumber; + } + + public String getScrapQuantity() { + return scrapQuantity; + } + + public void setScrapQuantity(String scrapQuantity) { + this.scrapQuantity = scrapQuantity; + } + + public String getAcceptanceQuantity() { + return acceptanceQuantity; + } + + public void setAcceptanceQuantity(String acceptanceQuantity) { + this.acceptanceQuantity = acceptanceQuantity; + } + + public String getRejectionQuantity() { + return rejectionQuantity; + } + + public void setRejectionQuantity(String rejectionQuantity) { + this.rejectionQuantity = rejectionQuantity; + } + + public String getInspectionStatus() { + return inspectionStatus; + } + + public void setInspectionStatus(String inspectionStatus) { + this.inspectionStatus = inspectionStatus; + } + + public String getWarehouseNameRemarks() { + return warehouseNameRemarks; + } + + public void setWarehouseNameRemarks(String warehouseNameRemarks) { + this.warehouseNameRemarks = warehouseNameRemarks; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -224,7 +312,12 @@ public class WarehousingInDetailDto extends BaseEntity .append("batchNumber", getBatchNumber()) .append("manufacturerBatchNumber", getManufacturerBatchNumber()) .append("storageLocation", getStorageLocation()) - .append("returnGoodsQuantity", getReturnGoodsQuantity()) + .append("salesOrderNumber", getSalesOrderNumber()) + .append("scrapQuantity", getScrapQuantity()) + .append("acceptanceQuantity", getAcceptanceQuantity()) + .append("rejectionQuantity", getRejectionQuantity()) + .append("inspectionStatus", getInspectionStatus()) + .append("warehouseNameRemarks", getWarehouseNameRemarks()) .toString(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellHandler.java new file mode 100644 index 00000000..68548e83 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellHandler.java @@ -0,0 +1,40 @@ +package com.ruoyi.storehouse.utils; + +import com.alibaba.excel.write.handler.RowWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import java.util.Map; + +/** + * 自定义 excel 行处理 + * + * @author zjw + * @date 2021-08-31 + */ +public class CustomRowWriteCellHandler implements RowWriteHandler { + + private final Map colMap; + + public CustomRowWriteCellHandler(Map colMap) { + this.colMap = colMap; + } + + @Override + public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { + if (relativeRowIndex == null) { + return; + } + for (Map.Entry entry : colMap.entrySet()) { + int key = entry.getKey() - 1; + int val = entry.getValue() - 1; + Cell cell = row.createCell(key + 1); + cell.setCellStyle(row.getCell(key).getCellStyle()); + int rowNum = row.getRowNum(); + CellRangeAddress cellRangeAddress = new CellRangeAddress(rowNum, rowNum, key, val); + writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress); + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellsHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellsHandler.java new file mode 100644 index 00000000..201a2d00 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteCellsHandler.java @@ -0,0 +1,52 @@ +package com.ruoyi.storehouse.utils; + +import com.alibaba.excel.write.handler.RowWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.util.CellRangeAddress; + +import java.util.Map; + +/** + * 自定义 excel 行处理 + * + * @author zjw + * @date 2021-08-31 + */ +public class CustomRowWriteCellsHandler implements RowWriteHandler { + + private final Map colMap; + + public CustomRowWriteCellsHandler(Map colMap) { + this.colMap = colMap; + } + +// @Override +// public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { +// for (Map.Entry entry : colMap.entrySet()) { +// Integer key = entry.getKey() - 1; +// Integer val = entry.getValue() - 1; +// Cell cell = row.createCell(key + 1); +// cell.setCellStyle(row.getCell(key).getCellStyle()); +// int rowNum = row.getRowNum(); +// CellRangeAddress cellRangeAddress = new CellRangeAddress(rowNum, rowNum, key, val); +// writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress); +// } +// } + + + @Override + public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { + Integer rowNum1 = colMap.get("rowNum1"); + Integer rowNum2 = colMap.get("rowNum2"); + Integer colNum1 = colMap.get("colNum1"); + Integer colNum2 = colMap.get("colNum2"); + Cell cell = row.createCell(rowNum1); + cell.setCellStyle(row.getCell(rowNum1).getCellStyle()); + int rowNum = row.getRowNum(); + CellRangeAddress cellRangeAddress = new CellRangeAddress(rowNum1, rowNum2, colNum1, colNum2); + writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteHandler.java new file mode 100644 index 00000000..d2397ec1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/CustomRowWriteHandler.java @@ -0,0 +1,37 @@ +package com.ruoyi.storehouse.utils; + +import com.alibaba.excel.write.handler.RowWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; + +import java.util.Arrays; +import java.util.List; + +/** + * 自定义 excel 行处理 + * + * @author ll + * @date 2023-06-09 + */ +public class CustomRowWriteHandler implements RowWriteHandler { + + private final List cols; + + public CustomRowWriteHandler(Integer... cols) { + this.cols = Arrays.asList(cols); + } + + @Override + public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { + for (Integer col : cols) { + Cell cell = row.createCell(col + 1); + cell.setCellStyle(row.getCell(col).getCellStyle()); + int rowNum = row.getRowNum(); + CellRangeAddress cellRangeAddress = new CellRangeAddress(rowNum, rowNum, col, col + 1); + writeSheetHolder.getSheet().addMergedRegionUnsafe(cellRangeAddress); + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/MyHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/MyHandler.java new file mode 100644 index 00000000..9ad9d541 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/storehouse/utils/MyHandler.java @@ -0,0 +1,86 @@ +package com.ruoyi.storehouse.utils; + +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.write.merge.AbstractMergeStrategy; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.RegionUtil; +import java.util.List; + +/** + * 合并单元格处理类 + */ +public class MyHandler extends AbstractMergeStrategy { + + /** + * 合并开始行 + */ + private Integer startRow = 0; + /** + * list表格所有的合并列集合 + */ + private List cellRangeAddressList = null; + + public MyHandler() { + } + + public MyHandler(int startRow, List cellRangeAddressList) { + this.startRow = startRow; + this.cellRangeAddressList = cellRangeAddressList; + } + + @Override + protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { + // 设置样式 + CellStyle cellStyle = cell.getCellStyle(); + //水平居中 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + //自动换行 + cellStyle.setWrapText(true); + //在这里判断从哪一行开始调用合并的方法 + if (cell.getRowIndex() > this.startRow) { + if (relativeRowIndex == null || relativeRowIndex == 0) { + return; + } + mergeColumn(sheet, cell, head, relativeRowIndex); + } + } + + /** + * 合并单元格 + * + * @param sheet + * @param cell + * @param head + * @param relativeRowIndex + */ + protected void mergeColumn(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { + int rowIndex = cell.getRowIndex(); + int colIndex = cell.getColumnIndex(); + sheet = cell.getSheet(); + // 获取前一行 + Row preRow = sheet.getRow(rowIndex - 1); + //获取前一列 + Cell preCell = preRow.getCell(colIndex); + List list = this.cellRangeAddressList; + for (int i = 0; i < list.size(); i++) { + CellRangeAddress cellRangeAddress = list.get(i); + if (cellRangeAddress.containsColumn(preCell.getColumnIndex())) { + int lastColIndex = cellRangeAddress.getLastColumn(); + int firstColIndex = cellRangeAddress.getFirstColumn(); + CellRangeAddress cra = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex(), firstColIndex, lastColIndex); + sheet.addMergedRegion(cra); + // 加边框 + RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet); + RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet); + RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet); + RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet); + return; + } + } + + } + + + +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml index 2fb0864b..d4a540be 100644 --- a/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml @@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -24,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select material_requisition_detail_id, material_requisition_number, material_code, material_name, specification_model, type_machine, inventory_unit, plan_quantity, description, unit_usage, storage_location, material_type, standby_one, standby_two, bom_rank, up_finish_product_code from material_requisition_detail + select material_requisition_detail_id, material_requisition_number, material_code, material_name, specification_model, item_number, type_machine, inventory_unit, plan_quantity, description, unit_usage, storage_location, material_type, standby_one, standby_two, bom_rank, up_finish_product_code from material_requisition_detail - - - - - - + + + diff --git a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/add.html b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/add.html index 2f52c4e6..2374305c 100644 --- a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/add.html +++ b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/add.html @@ -47,10 +47,10 @@
- +
-
@@ -355,6 +355,7 @@ // $.operate.save(prefix + "/add", $('#form-materialRequisitionYL-add').serialize()); // } let getData=$('#addMaterialTable').bootstrapTable('getData', true) + console.log(JSON.stringify(getData)) if(getData.length > 0){ //确认添加选中的物料数据 confirmMaterial(); @@ -388,7 +389,6 @@ clickToSelect: true,//点击行选中 paginationDetailHAlign: ' hiddenDetailInfo', height: 250, - uniqueId: 'materialCode', queryParams: function (params) { //console.log("123"); var curParams = { @@ -428,6 +428,10 @@ field: 'specificationModel', title: '规格型号' }, + { + field: 'itemNumber', + title: '客户料号' + }, // { // field: 'typeMachine', // title: '机种', @@ -453,6 +457,11 @@ validate: function (value) { } + }, + formatter: (value, row, index) => { + let quantity = $("input[name='workOrderQuantity']").val(); + row.planQuantity = quantity * row.unitUsage; + return quantity * row.unitUsage; } }, { @@ -528,6 +537,8 @@ // console.log(finishProductData[i].finishProductCode) $("#form-materialRequisitionYL-add select[name='materialRequisitionPerson']").append(""); } + let userName = [[${@permission.getPrincipalProperty('userName')}]]; + $("#form-materialRequisitionYL-add select[name='materialRequisitionPerson']").val(userName).trigger("change") } } @@ -613,7 +624,7 @@ //选择工单号显示表内订单信息 function showDetailMaterial(workOrderNumber) { $('#addMaterialTable').bootstrapTable("removeAll") - console.log(workOrderNumber) + // console.log(workOrderNumber) $.ajax({ url: ctx + 'manufacture/workOrderDetail/list', type: 'post', @@ -626,7 +637,39 @@ var count = res.rows.length; var data = res.rows; var materialRequisitionNumber = $("input[name='materialRequisitionNumber']").val(); - for (i = 0; i < data.length; i++) { + for (let i = 0; i < data.length; i++) { + $("#addMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + materialRequisitionNumber: materialRequisitionNumber, + materialCode: data[i].materialCode, + materialName: data[i].materialName, + specificationModel: data[i].specificationModel, + itemNumber: data[i].itemNumber, + inventoryUnit: data[i].inventoryUnit, + planQuantity: '', + description: '', + unitUsage: data[i].materialConsumption, + storageLocation: '', + materialType: data[i].materialType + } + }); + } + } + }) + $.ajax({ + url: ctx + 'manufacture/workOrderDetail/list', + type: 'post', + data: { + workOrderNumber: workOrderNumber, + materialType: '半成品' + }, + success: function (res) { + console.log(res) + var count = res.rows.length; + var data = res.rows; + var materialRequisitionNumber = $("input[name='materialRequisitionNumber']").val(); + for (let i = 0; i < data.length; i++) { $("#addMaterialTable").bootstrapTable('insertRow', { index: count + i, row: { @@ -634,10 +677,11 @@ materialCode: data[i].materialCode, materialName: data[i].materialName, specificationModel: data[i].specificationModel, + itemNumber: data[i].itemNumber, inventoryUnit: data[i].inventoryUnit, - planQuantity: data[i].materialConsumption, + planQuantity: '', description: '', - unitUsage: '', + unitUsage: data[i].materialConsumption, storageLocation: '', materialType: data[i].materialType } diff --git a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/edit.html b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/edit.html index f0150946..8090f394 100644 --- a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/edit.html +++ b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/edit.html @@ -426,6 +426,10 @@ field: 'specificationModel', title: '规格型号' }, + { + field: 'itemNumber', + title: '客户料号' + }, // { // field: 'typeMachine', // title: '机种', @@ -451,6 +455,10 @@ validate: function (value) { } + }, + formatter: (value, row, index) => { + let quantity = $("input[name='workOrderQuantity']").val(); + return quantity * row.unitUsage; } }, { @@ -620,8 +628,41 @@ materialCode: data[i].materialCode, materialName: data[i].materialName, specificationModel: data[i].specificationModel, + itemNumber: data[i].itemNumber, + inventoryUnit: data[i].inventoryUnit, + planQuantity: '', + description: '', + unitUsage: '', + storageLocation: '', + materialType: data[i].materialType + } + }); + } + } + }) + $.ajax({ + url: ctx + 'manufacture/workOrderDetail/list', + type: 'post', + data: { + workOrderNumber: workOrderNumber, + materialType: '半成品' + }, + success: function (res) { + console.log(res) + var count = res.rows.length; + var data = res.rows; + var materialRequisitionNumber = $("input[name='materialRequisitionNumber']").val(); + for (let i = 0; i < data.length; i++) { + $("#addMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + materialRequisitionNumber: materialRequisitionNumber, + materialCode: data[i].materialCode, + materialName: data[i].materialName, + specificationModel: data[i].specificationModel, + itemNumber: data[i].itemNumber, inventoryUnit: data[i].inventoryUnit, - planQuantity: data[i].materialConsumption, + planQuantity: '', description: '', unitUsage: '', storageLocation: '', diff --git a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/materialRequisitionYL.html b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/materialRequisitionYL.html index 4e2a23ec..fa56cec7 100644 --- a/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/materialRequisitionYL.html +++ b/ruoyi-admin/src/main/resources/templates/manufacture/materialRequisitionYL/materialRequisitionYL.html @@ -35,7 +35,6 @@
  • @@ -219,6 +218,32 @@ $.table.init(options); }); + //获取仓库信息 + $.ajax({ + url: ctx + "stock/stockInfo/list", + type: "post", + success: function (res) { + // console.log(res) + if (res.rows.length > 0) { + let stockData = res.rows; + for (let i in stockData) { + // console.log(finishProductData[i].finishProductCode) + $("#formId select[name='stockName']").append(""); + // $("#formId select[name='stockName']").change(function () { + // var stockName = $(this).val(); + // for (let i=0;i
  • - +
    -
    @@ -186,24 +186,25 @@ let orderData = res.rows; for (let i in orderData) { $("#form-warehousingFinishProductNotice-edit select[name='workOrderNumber']").append(""); - $("#form-warehousingFinishProductNotice-edit select[name='workOrderNumber']").val(getData.workOrderNumber).trigger("change") - $("#form-warehousingFinishProductNotice-edit select[name='workOrderNumber']").change(function () { - var workOrderNumber = $(this).val(); - for (let i=0;i" + stockData[i].stockname + ""); - $("#form-warehousingFinishProductNotice-edit select[name='stockName']").val(getData.stockName).trigger("change") - $("#form-warehousingFinishProductNotice-edit select[name='stockName']").change(function () { - var stockName = $(this).val(); - for (let i=0;i' + + '
    '+ + '
    ' + ).find('table'); + initRawDetail(index,row,$detail); + initSubsidiaryDetail(index,row,$detail); + initBcpDetail(index,row,$detail); + } }; $.table.init(options); } + //初始化子表格(循环) 一阶--原料 + initRawDetail = function (index, row, $detail) { + var bcpCode = row.bcpCode; + // var raw_table = $detail.html('
    ').find('table'); + $("#raw_table").bootstrapTable({ + url: ctx + 'system/bomrawmaterial/list', + contentType: "application/x-www-form-urlencoded", + method: 'post', + queryParams: function (params) { + var curParams = { + // 传递参数查询参数 + pageSize: params.limit, + pageNum: params.offset / params.limit + 1, + finishProductCode: bcpCode + }; + // console.log(data[0].enterpriseCode) + return curParams + }, + toolbar: false, //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: false, //是否显示分页(*) + sortable: false, //是否启用排序 + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) + search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 + strictSearch: true, + showColumns: false, //是否显示所有的列 + showRefresh: false, //是否显示刷新按钮 + clickToSelect: true, //是否启用点击选中行 + showToggle: false, //是否显示详细视图和列表视图的切换按钮 + cardView: false, //是否显示详细视图 + columns: [ + { + checkbox: true + }, + { + field: 'rawMaterialId', + title: '原料id', + visible: false + }, + { + field: 'finishProductCode', + title: '成品代码', + visible: false + }, + { + field: 'rawMaterialCode', + title: '原料代码' + }, + { + field: 'rawMaterialName', + title: '原料名称' + }, + { + field: 'specificationModel', + title: '规格型号' + }, + { + field: 'inventoryUnit', + title: '单位' + }, + { + field: 'rawMaterialConsumption', + title: '用量' + }, + { + field: 'rawMaterialLoss', + title: '损耗%' + }, + { + field: 'supplierNumber', + title: '厂商料号' + }, + { + field: 'finishedProductQuantity', + title: '成品数量' + }, + { + field: 'remarks', + title: '备注说明' + }, + { + field: 'processingCategory', + title: '加工类别' + }], + //无线循环取子表,直到子表里面没有记录 + onExpandRow: function (index, row, $detail) { + initRawDetail(index, row, $detail); + } + + }) + } + //初始化子表格(循环) 一阶--辅料 + initSubsidiaryDetail = function (index, row, $detail) { + var bcpCode = row.bcpCode; + // var subsidiary_table = $detail.html('
    ').find('table'); + $("#subsidiary_table").bootstrapTable({ + url: ctx + 'system/bomsubsidiarymaterial/list', + contentType: "application/x-www-form-urlencoded", + method: 'post', + queryParams: function (params) { + var curParams = { + // 传递参数查询参数 + pageSize: params.limit, + pageNum: params.offset / params.limit + 1, + finishProductCode: bcpCode + }; + // console.log(data[0].enterpriseCode) + return curParams + }, + toolbar: false, //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: false, //是否显示分页(*) + sortable: false, //是否启用排序 + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) + search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 + strictSearch: true, + showColumns: false, //是否显示所有的列 + showRefresh: false, //是否显示刷新按钮 + clickToSelect: true, //是否启用点击选中行 + showToggle: false, //是否显示详细视图和列表视图的切换按钮 + cardView: false, //是否显示详细视图 + columns: [ + { + checkbox: true + }, + { + field: 'subsidiaryMaterialId', + title: 'bom辅料id', + visible: false + }, + { + field: 'finishProductCode', + title: '成品代码', + visible: false + }, + { + field: 'subsidiaryMaterialCode', + title: '辅料代码' + }, + { + field: 'subsidiaryMaterialName', + title: '辅料名称' + }, + { + field: 'specificationModel', + title: '规格型号' + }, + { + field: 'inventoryUnit', + title: '单位' + }, + { + field: 'subsidiaryMaterialConsumption', + title: '用量' + }, + { + field: 'subsidiaryMaterialLoss', + title: '损耗%' + }, + { + field: 'supplierNumber', + title: '厂商料号' + }, + { + field: 'finishedProductQuantity', + title: '成品数量' + }, + { + field: 'remarks', + title: '备注说明' + }, + { + field: 'processingCategory', + title: '加工类别' + }], + //无线循环取子表,直到子表里面没有记录 + onExpandRow: function (index, row, $detail) { + initSubsidiaryDetail(index, row, $detail); + } + + }) + } + //初始化子表格(循环) 一阶--半成品 + initBcpDetail = function (index, row, $detail) { + var bcpCode = row.bcpCode; + // var bcp_table = $detail.html('
    ').find('table'); + $("#bcp_table").bootstrapTable({ + url: ctx + 'system/bomBcp/list', + contentType: "application/x-www-form-urlencoded", + method: 'post', + queryParams: function (params) { + var curParams = { + // 传递参数查询参数 + pageSize: params.limit, + pageNum: params.offset / params.limit + 1, + finishProductCode: bcpCode + }; + // console.log(data[0].enterpriseCode) + return curParams + }, + toolbar: false, //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: false, //是否显示分页(*) + sortable: false, //是否启用排序 + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) + search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 + strictSearch: true, + showColumns: false, //是否显示所有的列 + showRefresh: false, //是否显示刷新按钮 + clickToSelect: true, //是否启用点击选中行 + showToggle: false, //是否显示详细视图和列表视图的切换按钮 + cardView: false, //是否显示详细视图 + detailView: true, + columns: [ + { + checkbox: true + }, + { + field: 'bcpCode', + title: '半成品代码(二阶)' + }, + { + field: 'bcpName', + title: '半成品名称' + }, + { + field: 'bcpVersionNumber', + title: '版本号' + }, + { + field: 'specificationModel', + title: '规格型号' + }, + { + field: 'inventoryUnit', + title: '单位' + }, + { + field: 'bcpConsumption', + title: '用量' + }, + { + field: 'bcpLoss', + title: '损耗%' + }, + { + field: 'customerNumber', + title: '厂商料号' + }, + { + field: 'finishedProductQuantity', + title: '成品数量' + }, + { + field: 'remarks', + title: '备注说明' + }, + { + field: 'processingCategory', + title: '加工类别' + }], + //无线循环取子表,直到子表里面没有记录 + onExpandRow: function (index, row, $bcpdetail) { + $bcpdetail.html('
    ' + + '
    ' + + '
    ' + ).find('table'); + initBcpDetail(index, row, $bcpdetail); + initBcpRawDetail(index, row, $bcpdetail); + initBcpSubsidiaryDetail(index, row, $bcpdetail); + initBcpBcpDetail(index, row, $bcpdetail); + } + + }) + } + //初始化子表格(循环) 二阶--原料 + initBcpRawDetail = function (index, row, $detail) { + var bcpCode = row.bcpCode; + // var bcpVersionNumber = row.bcpVersionNumber; + // var raw_table = $detail.html('
    ').find('table'); + $("#bcp_raw_table").bootstrapTable({ + url: ctx + 'system/bomrawmaterial/list', + contentType: "application/x-www-form-urlencoded", + method: 'post', + queryParams: function (params) { + var curParams = { + // 传递参数查询参数 + pageSize: params.limit, + pageNum: params.offset / params.limit + 1, + finishProductCode: bcpCode + // versionNumber: bcpVersionNumber + }; + // console.log(data[0].enterpriseCode) + return curParams + }, + toolbar: false, //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: false, //是否显示分页(*) + sortable: false, //是否启用排序 + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) + search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 + strictSearch: true, + showColumns: false, //是否显示所有的列 + showRefresh: false, //是否显示刷新按钮 + clickToSelect: true, //是否启用点击选中行 + showToggle: false, //是否显示详细视图和列表视图的切换按钮 + cardView: false, //是否显示详细视图 + columns: [ + { + checkbox: true + }, + { + field: 'rawMaterialId', + title: '原料id', + visible: false + }, + { + field: 'finishProductCode', + title: '成品代码', + visible: false + }, + { + field: 'rawMaterialCode', + title: '原料代码' + }, + { + field: 'rawMaterialName', + title: '原料名称' + }, + { + field: 'specificationModel', + title: '规格型号' + }, + { + field: 'inventoryUnit', + title: '单位' + }, + { + field: 'rawMaterialConsumption', + title: '用量' + }, + { + field: 'rawMaterialLoss', + title: '损耗%' + }, + { + field: 'supplierNumber', + title: '厂商料号' + }, + { + field: 'finishedProductQuantity', + title: '成品数量' + }, + { + field: 'remarks', + title: '备注说明' + }, + { + field: 'processingCategory', + title: '加工类别' + }], + //无线循环取子表,直到子表里面没有记录 + onExpandRow: function (index, row, $detail) { + initBcpRawDetail(index, row, $detail); + } + + }) + } + //初始化子表格(循环) 二阶--辅料 + initBcpSubsidiaryDetail = function (index, row, $detail) { + var bcpCode = row.bcpCode; + // var bcpVersionNumber = row.bcpVersionNumber; + // var subsidiary_table = $detail.html('
    ').find('table'); + $("#bcp_subsidiary_table").bootstrapTable({ + url: ctx + 'system/bomsubsidiarymaterial/list', + contentType: "application/x-www-form-urlencoded", + method: 'post', + queryParams: function (params) { + var curParams = { + // 传递参数查询参数 + pageSize: params.limit, + pageNum: params.offset / params.limit + 1, + finishProductCode: bcpCode + // versionNumber: bcpVersionNumber + }; + // console.log(data[0].enterpriseCode) + return curParams + }, + toolbar: false, //工具按钮用哪个容器 + striped: true, //是否显示行间隔色 + cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) + pagination: false, //是否显示分页(*) + sortable: false, //是否启用排序 + pageNumber: 1, //初始化加载第一页,默认第一页 + pageSize: 10, //每页的记录行数(*) + pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) + search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 + strictSearch: true, + showColumns: false, //是否显示所有的列 + showRefresh: false, //是否显示刷新按钮 + clickToSelect: true, //是否启用点击选中行 + showToggle: false, //是否显示详细视图和列表视图的切换按钮 + cardView: false, //是否显示详细视图 + columns: [ + { + checkbox: true + }, + { + field: 'subsidiaryMaterialId', + title: 'bom辅料id', + visible: false + }, + { + field: 'finishProductCode', + title: '成品代码', + visible: false + }, + { + field: 'subsidiaryMaterialCode', + title: '辅料代码' + }, + { + field: 'subsidiaryMaterialName', + title: '辅料名称' + }, + { + field: 'specificationModel', + title: '规格型号' + }, + { + field: 'inventoryUnit', + title: '单位' + }, + { + field: 'subsidiaryMaterialConsumption', + title: '用量' + }, + { + field: 'subsidiaryMaterialLoss', + title: '损耗%' + }, + { + field: 'supplierNumber', + title: '厂商料号' + }, + { + field: 'finishedProductQuantity', + title: '成品数量' + }, + { + field: 'remarks', + title: '备注说明' + }, + { + field: 'processingCategory', + title: '加工类别' + }], + //无线循环取子表,直到子表里面没有记录 + onExpandRow: function (index, row, $detail) { + initBcpSubsidiaryDetail(index, row, $detail); + } + + }) + } + //关闭BOM信息 function closeBomDetailModal() { $("#bomMaterialModal").modal("hide"); @@ -907,14 +1395,19 @@ var dataRaw = $("#rawMaterialBomTable").bootstrapTable("getSelections"); var dataSubsidiary = $("#subsidiaryMaterialBomTable").bootstrapTable("getSelections"); var dataBcp = $("#bcpMaterialBomTable").bootstrapTable("getSelections"); + var dataRawTable = $("#raw_table").bootstrapTable("getSelections"); + var dataSubsidiaryTable = $("#subsidiary_table").bootstrapTable("getSelections"); + var dataBcpTable = $("#bcp_table").bootstrapTable("getSelections"); + var dataBcpRawTable = $("#bcp_raw_table").bootstrapTable("getSelections"); + var dataBcpSubsidiaryTable = $("#bcp_subsidiary_table").bootstrapTable("getSelections"); var count = $('#addBomMaterialTable').bootstrapTable('getData').length; var workOrderNumber = $("input[name='workOrderNumber']").val(); for (let i = 0; i < dataRaw.length; i++) { - let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataRaw[i].rawMaterialCode); - if (material != null) { - alert(material.materialName + "已存在,不可重复添加!"); - continue; - } + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataRaw[i].rawMaterialCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } $("#addBomMaterialTable").bootstrapTable('insertRow', { index: count + i, row: { @@ -931,11 +1424,11 @@ }); } for (let i = 0; i < dataSubsidiary.length; i++) { - let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataSubsidiary[i].subsidiaryMaterialCode); - if (material != null) { - alert(material.materialName + "已存在,不可重复添加!"); - continue; - } + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataSubsidiary[i].subsidiaryMaterialCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } $("#addBomMaterialTable").bootstrapTable('insertRow', { index: count + i, row: { @@ -952,11 +1445,11 @@ }); } for (let i = 0; i < dataBcp.length; i++) { - let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); - if (material != null) { - alert(material.materialName + "已存在,不可重复添加!"); - continue; - } + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } $("#addBomMaterialTable").bootstrapTable('insertRow', { index: count + i, row: { @@ -972,9 +1465,119 @@ } }); } + for (let i = 0; i < dataRawTable.length; i++) { + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } + $("#addBomMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + workOrderNumber: workOrderNumber, + materialCode: dataRawTable[i].rawMaterialCode, + materialName: dataRawTable[i].rawMaterialName, + specificationModel: dataRawTable[i].specificationModel, + inventoryUnit: dataRawTable[i].inventoryUnit, + materialType: '原料', + materialConsumption: dataRawTable[i].rawMaterialConsumption, + itemNumber: dataRawTable[i].supplierNumber, + description: '' + } + }); + } + for (let i = 0; i < dataSubsidiaryTable.length; i++) { + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } + $("#addBomMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + workOrderNumber: workOrderNumber, + materialCode: dataSubsidiaryTable[i].subsidiaryMaterialCode, + materialName: dataSubsidiaryTable[i].subsidiaryMaterialName, + specificationModel: dataSubsidiaryTable[i].specificationModel, + inventoryUnit: dataSubsidiaryTable[i].inventoryUnit, + materialType: '辅料', + materialConsumption: dataSubsidiaryTable[i].subsidiaryMaterialConsumption, + itemNumber: dataSubsidiaryTable[i].supplierNumber, + description: '' + } + }); + } + for (let i = 0; i < dataBcpTable.length; i++) { + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } + $("#addBomMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + workOrderNumber: workOrderNumber, + materialCode: dataBcpTable[i].bcpCode, + materialName: dataBcpTable[i].bcpName, + specificationModel: dataBcpTable[i].specificationModel, + inventoryUnit: dataBcpTable[i].inventoryUnit, + materialType: '半成品', + materialConsumption: dataBcpTable[i].bcpConsumption, + itemNumber: dataBcpTable[i].customerNumber, + description: '' + } + }); + } + for (let i = 0; i < dataBcpRawTable.length; i++) { + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } + $("#addBomMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + workOrderNumber: workOrderNumber, + materialCode: dataBcpRawTable[i].rawMaterialCode, + materialName: dataBcpRawTable[i].rawMaterialName, + specificationModel: dataBcpRawTable[i].specificationModel, + inventoryUnit: dataBcpRawTable[i].inventoryUnit, + materialType: '原料', + materialConsumption: dataBcpRawTable[i].rawMaterialConsumption, + itemNumber: dataBcpRawTable[i].supplierNumber, + description: '' + } + }); + } + for (let i = 0; i < dataBcpSubsidiaryTable.length; i++) { + // let material = $('#addBomMaterialTable').bootstrapTable('getRowByUniqueId', dataBcp[i].bcpCode); + // if (material != null) { + // alert(material.materialName + "已存在,不可重复添加!"); + // continue; + // } + $("#addBomMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + workOrderNumber: workOrderNumber, + materialCode: dataBcpSubsidiaryTable[i].subsidiaryMaterialCode, + materialName: dataBcpSubsidiaryTable[i].subsidiaryMaterialName, + specificationModel: dataBcpSubsidiaryTable[i].specificationModel, + inventoryUnit: dataBcpSubsidiaryTable[i].inventoryUnit, + materialType: '辅料', + materialConsumption: dataBcpSubsidiaryTable[i].subsidiaryMaterialConsumption, + itemNumber: dataBcpSubsidiaryTable[i].supplierNumber, + description: '' + } + }); + } $("#rawMaterialBomTable").bootstrapTable("uncheckAll"); $("#subsidiaryMaterialBomTable").bootstrapTable("uncheckAll"); $("#bcpMaterialBomTable").bootstrapTable("uncheckAll"); + $("#raw_table").bootstrapTable("uncheckAll"); + $("#subsidiary_table").bootstrapTable("uncheckAll"); + $("#bcp_table").bootstrapTable("uncheckAll"); + $("#bcp_raw_table").bootstrapTable("uncheckAll"); + $("#bcp_subsidiary_table").bootstrapTable("uncheckAll"); closeBomDetailModal(); } diff --git a/ruoyi-admin/src/main/resources/templates/sales/salesAccountReconciliation/salesAccountReconciliation.html b/ruoyi-admin/src/main/resources/templates/sales/salesAccountReconciliation/salesAccountReconciliation.html index 905e1395..b3fab025 100644 --- a/ruoyi-admin/src/main/resources/templates/sales/salesAccountReconciliation/salesAccountReconciliation.html +++ b/ruoyi-admin/src/main/resources/templates/sales/salesAccountReconciliation/salesAccountReconciliation.html @@ -3,6 +3,7 @@ +