diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseStorageController.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseStorageController.java index 7f4de215..1fa067f8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseStorageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseStorageController.java @@ -3,16 +3,13 @@ package com.ruoyi.purchase.controller; import java.util.List; import com.ruoyi.purchase.domain.PurchaseStorageChild; +import com.ruoyi.purchase.domain.Vo.ExportPurchaseStorageVo; import com.ruoyi.purchase.service.IPurchaseStorageChildService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.purchase.domain.PurchaseStorage; @@ -66,15 +63,34 @@ public class PurchaseStorageController extends BaseController */ @RequiresPermissions("purchase:purchaseStorage:export") @Log(title = "采购入库单", businessType = BusinessType.EXPORT) - @PostMapping("/export") + @PostMapping("/exportAll") @ResponseBody - public AjaxResult export(PurchaseStorage purchaseStorage) + public AjaxResult exportAll(PurchaseStorage purchaseStorage) { List list = purchaseStorageService.selectPurchaseStorageList(purchaseStorage); - ExcelUtil util = new ExcelUtil(PurchaseStorage.class); - return util.exportExcel(list, "采购入库单数据"); + List exportPurchaseStorageVos = purchaseStorageService.exportPurchaseStorageList(list); + ExcelUtil util = new ExcelUtil(ExportPurchaseStorageVo.class); + return util.exportExcel(exportPurchaseStorageVos, "采购入库单数据"); + } + + + /** + * 导出采购入库单列表 + */ + @RequiresPermissions("purchase:purchaseStorage:export") + @Log(title = "采购入库单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(@RequestBody String[] warehouseStorageCodes) + { + List list = purchaseStorageService.selectPurchaseStorageListByCodes(warehouseStorageCodes); + List exportPurchaseStorageVos = purchaseStorageService.exportPurchaseStorageList(list); + ExcelUtil util = new ExcelUtil(ExportPurchaseStorageVo.class); + return util.exportExcel(exportPurchaseStorageVos, "采购入库单数据"); } + + /** * 新增采购入库单 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/ExportPurchaseStorageVo.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/ExportPurchaseStorageVo.java new file mode 100644 index 00000000..0f7d3b97 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/Vo/ExportPurchaseStorageVo.java @@ -0,0 +1,192 @@ +package com.ruoyi.purchase.domain.Vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** +* 采购入库单导出明细 +* */ +@Data +public class ExportPurchaseStorageVo { + + /** 入库单号 */ + @Excel(name = "入库单号") + private String warehouseStorageCode; + + /** 关联订单号(多种订单类型) */ + @Excel(name = "关联订单号") + private String relatedOrderCode; + + /** 入库状态(0待暂收、1已暂收、2待入库、3部分入库、4全部入库) */ + @Excel(name = "入库状态",dictType = "warehouse_storage_status") + private String warehouseStorageStatus; + + /** 品质状态(0待品质、1部分品质、2全部品质) */ + @Excel(name = "品质状态",dictType = "warehouse_quality_status") + private String warehouseQualityStatus; + + /** 入库类型(0采购入库、1供应商补货、2委内入库、3公司退货、4委外入库、5生产入库) */ + @Excel(name = "入库类型",dictType ="warehouse_storage_type" ) + private String warehouseStorageType; + + /** 订单类型(0采购订单、1生产订单、2退换货订单、3委外订单) */ + @Excel(name = "订单类型",dictType = "storage_order_type") + private String warehouseOrderType; + + /** 入库部门类型(0仓库,1采购 ) */ + @Excel(name = "入库部门类型",dictType = "warehouse_dept_type") + private String warehouseDeptType; + + /** 供应商ID */ + @Excel(name = "供应商ID") + private String supplierCode; + + /** 供应商名称 */ + @Excel(name = "供应商名称") + private String supplierName; + + + /** 通知已到货数量 */ + @Excel(name = "通知已到货数量") + private Integer notifyArrivedSum; + + /** 实际已到货数量 */ + @Excel(name = "实际已到货数量") + private Integer actualArrivedSum; + + /** 暂收合格数量 */ + @Excel(name = "暂收合格数量") + private Integer temporaryQualifiedSum; + + /** 暂收不合格数量 */ + @Excel(name = "暂收不合格数量") + private Integer temporaryUnqualifiedSum; + + /** 品质合格数量 */ + @Excel(name = "品质合格数量") + private Integer qualityQualifiedSum; + + /** 退换货数 */ + @Excel(name = "退换货数") + private Integer refundsExchangesSum; + + /** 入库数量 */ + @Excel(name = "入库数量") + private Integer storageSum; + + /** 到货时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "到货时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date arrivedTime; + + /** 暂收时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "暂收时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date temporaryTime; + + /** 交付质检时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "交付质检时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date deliveryInspectionTime; + + /** 品质时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "品质时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date qualityTime; + + /** 入库时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "入库时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date storageTime; + + + + + + /** 料号 */ + @Excel(name = "料号") + private String materialNo; + + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 物料型号 */ + @Excel(name = "物料型号") + private String materialModel; + + /** 物料品牌 */ + @Excel(name = "物料品牌") + private String materialBrand; + + /** 物料单位 */ + @Excel(name = "物料单位") + private String materialUnit; + + /** 物料描述 */ + @Excel(name = "物料描述") + private String materialDescribe; + + /** 物料加工方式 */ + @Excel(name = "物料加工方式",dictType = "processMethod") + private String materialProcessMethod; + + /** 生产订单数 */ + @Excel(name = "生产订单数") + private Integer makeTotal; + + /** 通知已到货数量 */ + @Excel(name = "通知已到货数量") + private Integer notifyHasArrivedNum; + + /** 通知到货数量 */ + @Excel(name = "通知到货数量") + private Integer notifyArriveNum; + + /** 实际已到货数量 */ + @Excel(name = "实际已到货数量") + private Integer actualHasArrivedNum; + + /** 实际到货数量 */ + @Excel(name = "实际到货数量") + private Integer actualArriveNum; + + /** 暂收已合格数量 */ + @Excel(name = "暂收已合格数量") + private Integer temporaryHasQualifiedNum; + + /** 暂收合格数量 */ + @Excel(name = "暂收合格数量") + private Integer temporaryQualifiedNum; + + /** 已入库数量 */ + @Excel(name = "已入库数量") + private Integer hasStorageNum; + + /** 入库数量 */ + @Excel(name = "入库数量") + private Integer storageNum; + + /** 生产入库数量 */ + @Excel(name = "生产入库数量") + private Integer makeStorageNum; + + /** 品质已合格数量 */ + @Excel(name = "品质已合格数量") + private Integer qualityHasQualifiedNum; + + /** 品质合格数量 */ + @Excel(name = "品质合格数量") + private Integer qualityQualifiedNum; + + /** 退换货数 */ + @Excel(name = "退换货数") + private Integer refundsExchangesNum; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageChildMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageChildMapper.java index f0163dc3..08603055 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageChildMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageChildMapper.java @@ -84,4 +84,9 @@ public interface PurchaseStorageChildMapper * 根据采购入库单号查询采购入库单子表 * */ List selectPurchaseStorageChildListByCode(String warehouseStorageCode); + + /** + * 根据采购入库单号集合查询采购入库单集合 + * */ + List selectPurchaseStorageListByCodes(List collectWarehouseStorageCodes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageMapper.java index b395f40e..e89c8b3a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseStorageMapper.java @@ -74,4 +74,9 @@ public interface PurchaseStorageMapper * @return 结果 */ public int restorePurchaseStorageById(Long purchaseStorageId); + + /** + * 通过采购入库通知单号数据查询采购入库通知单 + * */ + List selectPurchaseStorageListByCodes(String[] warehouseStorageCodes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseStorageService.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseStorageService.java index 0ecd03b7..501ded24 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseStorageService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseStorageService.java @@ -2,6 +2,7 @@ package com.ruoyi.purchase.service; import java.util.List; import com.ruoyi.purchase.domain.PurchaseStorage; +import com.ruoyi.purchase.domain.Vo.ExportPurchaseStorageVo; /** * 采购入库单Service接口 @@ -78,4 +79,15 @@ public interface IPurchaseStorageService * * */ int detailPurchaseStorage(PurchaseStorage purchaseStorage); + + /** + * 导出采购入库单明细 + * + * */ + List exportPurchaseStorageList(List list); + + /** + * 通过采购入库通知单号数据查询采购入库通知单 + * */ + List selectPurchaseStorageListByCodes(String[] warehouseStorageCodes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseStorageServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseStorageServiceImpl.java index edb384cd..a1b4b52f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseStorageServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseStorageServiceImpl.java @@ -1,8 +1,16 @@ package com.ruoyi.purchase.service.impl; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.purchase.domain.PurchaseStorageChild; +import com.ruoyi.purchase.domain.Vo.ExportPurchaseStorageVo; +import com.ruoyi.purchase.mapper.PurchaseStorageChildMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.purchase.mapper.PurchaseStorageMapper; @@ -22,6 +30,9 @@ public class PurchaseStorageServiceImpl implements IPurchaseStorageService @Autowired private PurchaseStorageMapper purchaseStorageMapper; + @Autowired + private PurchaseStorageChildMapper purchaseStorageChildMapper; + /** * 查询采购入库单 * @@ -46,6 +57,14 @@ public class PurchaseStorageServiceImpl implements IPurchaseStorageService return purchaseStorageMapper.selectPurchaseStorageList(purchaseStorage); } + /** + * 通过采购入库通知单号数据查询采购入库通知单 + * */ + @Override + public List selectPurchaseStorageListByCodes(String[] warehouseStorageCodes) { + return purchaseStorageMapper.selectPurchaseStorageListByCodes(warehouseStorageCodes); + } + /** * 新增采购入库单 * @@ -135,4 +154,80 @@ public class PurchaseStorageServiceImpl implements IPurchaseStorageService { return purchaseStorageMapper.restorePurchaseStorageById(purchaseStorageId); } + + /** + * 导出采购入库单明细 + * */ + @Override + public List exportPurchaseStorageList(List list) { + // 获取所有的入库单号 + List collectWarehouseStorageCodes = list.stream().map(PurchaseStorage::getWarehouseStorageCode).collect(Collectors.toList()); + + // 根据入库单号查询对应的详情列表 + List purchaseStorageChildren = purchaseStorageChildMapper.selectPurchaseStorageListByCodes(collectWarehouseStorageCodes); + + // 创建一个采购入库VO的Map,键为入库单号 + Map purchaseStorageMap = list.stream() + .collect(Collectors.toMap(PurchaseStorage::getWarehouseStorageCode, Function.identity())); + + // 初始化导出列表 + List exportPurchaseStorageVos = new ArrayList<>(); + + for (PurchaseStorageChild child : purchaseStorageChildren) { + ExportPurchaseStorageVo exportVo = new ExportPurchaseStorageVo(); + + // 从PurchaseStorageChild填充数据 + exportVo.setMaterialNo(child.getMaterialNo()); + exportVo.setMaterialName(child.getMaterialName()); + exportVo.setMaterialModel(child.getMaterialModel()); + exportVo.setMaterialBrand(child.getMaterialBrand()); + exportVo.setMaterialUnit(child.getMaterialUnit()); + exportVo.setMaterialDescribe(child.getMaterialDescribe()); + exportVo.setMaterialProcessMethod(child.getMaterialProcessMethod()); + exportVo.setMakeTotal(child.getMakeTotal()); + exportVo.setNotifyHasArrivedNum(child.getNotifyHasArrivedNum()); + exportVo.setNotifyArriveNum(child.getNotifyArriveNum()); + exportVo.setActualHasArrivedNum(child.getActualHasArrivedNum()); + exportVo.setActualArriveNum(child.getActualArriveNum()); + exportVo.setTemporaryHasQualifiedNum(child.getTemporaryHasQualifiedNum()); + exportVo.setTemporaryQualifiedNum(child.getTemporaryQualifiedNum()); + exportVo.setHasStorageNum(child.getHasStorageNum()); + exportVo.setStorageNum(child.getStorageNum()); + exportVo.setMakeStorageNum(child.getMakeStorageNum()); + exportVo.setQualityHasQualifiedNum(child.getQualityHasQualifiedNum()); + exportVo.setQualityQualifiedNum(child.getQualityQualifiedNum()); + exportVo.setRefundsExchangesNum(child.getRefundsExchangesNum()); + + // 从PurchaseStorage填充数据,通过入库单号进行关联 + PurchaseStorage storage = purchaseStorageMap.get(child.getWarehouseStorageCode()); + if (storage != null) { + exportVo.setWarehouseStorageCode(storage.getWarehouseStorageCode()); + exportVo.setRelatedOrderCode(storage.getRelatedOrderCode()); + exportVo.setWarehouseStorageStatus(storage.getWarehouseStorageStatus()); + exportVo.setWarehouseQualityStatus(storage.getWarehouseQualityStatus()); + exportVo.setWarehouseStorageType(storage.getWarehouseStorageType()); + exportVo.setWarehouseOrderType(storage.getWarehouseOrderType()); + exportVo.setWarehouseDeptType(storage.getWarehouseDeptType()); + exportVo.setSupplierCode(storage.getSupplierCode()); + exportVo.setSupplierName(storage.getSupplierName()); + exportVo.setNotifyArrivedSum(storage.getNotifyArrivedSum()); + exportVo.setActualArrivedSum(storage.getActualArrivedSum()); + exportVo.setTemporaryQualifiedSum(storage.getTemporaryQualifiedSum()); + exportVo.setTemporaryUnqualifiedSum(storage.getTemporaryUnqualifiedSum()); + exportVo.setQualityQualifiedSum(storage.getQualityQualifiedSum()); + exportVo.setRefundsExchangesSum(storage.getRefundsExchangesSum()); + exportVo.setStorageSum(storage.getStorageSum()); + exportVo.setArrivedTime(storage.getArrivedTime()); + exportVo.setTemporaryTime(storage.getTemporaryTime()); + exportVo.setDeliveryInspectionTime(storage.getDeliveryInspectionTime()); + exportVo.setQualityTime(storage.getQualityTime()); + exportVo.setStorageTime(storage.getStorageTime()); + } + + // 添加到结果列表 + exportPurchaseStorageVos.add(exportVo); + } + + return exportPurchaseStorageVos; + } } diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageChildMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageChildMapper.xml index 36da3b79..48ad757f 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageChildMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageChildMapper.xml @@ -65,6 +65,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where warehouse_storage_code = #{warehouseStorageCode} + + insert into purchase_storage_child diff --git a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageMapper.xml b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageMapper.xml index 5643dffa..d308dba9 100644 --- a/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/purchase/PurchaseStorageMapper.xml @@ -63,7 +63,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where purchase_storage_id = #{purchaseStorageId} - + + + insert into purchase_storage diff --git a/ruoyi-admin/src/main/resources/templates/purchase/purchaseStorage/purchaseStorage.html b/ruoyi-admin/src/main/resources/templates/purchase/purchaseStorage/purchaseStorage.html index 7e38774a..d995a565 100644 --- a/ruoyi-admin/src/main/resources/templates/purchase/purchaseStorage/purchaseStorage.html +++ b/ruoyi-admin/src/main/resources/templates/purchase/purchaseStorage/purchaseStorage.html @@ -77,16 +77,7 @@
- - - - - - - - - - + 导出
@@ -277,6 +268,61 @@ var url = prefix + "/detail/" + purchaseStorageId; $.modal.open("详情", url); } + + + // 导出 + function exportExcel(formId) { + // $.table.set(); + var warehouseStorageCodeData = []; + var selections = $("#bootstrap-table").bootstrapTable("getSelections"); + if(selections.length === 0){ + $.modal.confirm("确定导出所有采购入库单吗?", function() { + var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId; + var params = $("#bootstrap-table").bootstrapTable('getOptions'); + var dataParam = $("#" + currentId).serializeArray(); + dataParam.push({ "name": "orderByColumn", "value": params.sortName }); + dataParam.push({ "name": "isAsc", "value": params.sortOrder }); + $.modal.loading("正在导出数据,请稍后..."); + $.post(prefix + '/exportAll', dataParam, function(result) { + if (result.code == web_status.SUCCESS) { + window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true; + } else if (result.code == web_status.WARNING) { + $.modal.alertWarning(result.msg) + } else { + $.modal.alertError(result.msg); + } + $.modal.closeLoading(); + }); + }); + }else { + $.modal.confirm("确定导出选中的所有采购入库单吗?", function () { + //·拼接单号 + for(let i=0;i \ No newline at end of file