diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCoilWarehouseOperationLogController.java b/klp-wms/src/main/java/com/klp/controller/WmsCoilWarehouseOperationLogController.java index af1d0cd1..26041895 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsCoilWarehouseOperationLogController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsCoilWarehouseOperationLogController.java @@ -19,6 +19,7 @@ import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; import com.klp.domain.vo.WmsCoilWarehouseOperationLogVo; +import com.klp.domain.vo.WmsCoilWarehouseOperationLogExportVo; import com.klp.domain.bo.WmsCoilWarehouseOperationLogBo; import com.klp.service.IWmsCoilWarehouseOperationLogService; import com.klp.common.core.page.TableDataInfo; @@ -151,4 +152,26 @@ public class WmsCoilWarehouseOperationLogController extends BaseController { @RequestParam(required = false) Date endTime) { return R.ok(iWmsCoilWarehouseOperationLogService.queryByCoilId(coilId, operationType, inOutType, startTime, endTime)); } + + /** + * 导出钢卷库区操作记录(报表导出) + * + * @param secondWarehouseId 二级库区ID + * @param operationType 操作类型 + * @param inOutType 出入库类型 + * @param startTime 开始时间 + * @param endTime 结束时间 + */ + @Log(title = "钢卷库区操作记录导出", businessType = BusinessType.EXPORT) + @PostMapping("/exportByWarehouseAndTime") + public void exportByWarehouseAndTime( + @RequestParam Long secondWarehouseId, + @RequestParam(required = false) Integer operationType, + @RequestParam(required = false) Integer inOutType, + @RequestParam(required = false) Date startTime, + @RequestParam(required = false) Date endTime, + HttpServletResponse response) { + List list = iWmsCoilWarehouseOperationLogService.exportBySecondWarehouseIdAndTimeRange(secondWarehouseId, operationType, inOutType, startTime, endTime); + ExcelUtil.exportExcel(list, "钢卷库区操作记录导出", WmsCoilWarehouseOperationLogExportVo.class, response); + } } diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogExportVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogExportVo.java new file mode 100644 index 00000000..01c9efc9 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogExportVo.java @@ -0,0 +1,106 @@ +package com.klp.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + + +/** + * 钢卷库区操作记录导出VO + * + * @author klp + * @date 2026-03-24 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsCoilWarehouseOperationLogExportVo { + + private static final long serialVersionUID = 1L; + @ExcelProperty(value = "创建人") + private String createBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ExcelProperty(value = "创建时间") + private Date createTimeLog; + + @ExcelProperty(value = "业务操作类型") + private String operationTypeDesc; + + @ExcelProperty(value = "出入库方向") + private String inOutTypeDesc; + + // 应该是被移动库区 + @ExcelProperty(value = "库区") + private String warehouseName; + + @ExcelProperty(value = "类型") + private String itemTypeDesc; + + @ExcelProperty(value = "逻辑库区") + private String logicalWarehouseName; + + @ExcelProperty(value = "钢卷当前实际库区") + private String actualWarehouseName; + + @ExcelProperty(value = "入场卷号") + private String enterCoilNo; + + @ExcelProperty(value = "厂家卷号") + private String supplierCoilNo; + + @ExcelProperty(value = "成品卷号") + private String currentCoilNo; + + @ExcelProperty(value = "日期") + private Date createTime; + + @ExcelProperty(value = "重量") + private BigDecimal netWeight; + + @ExcelProperty(value = "用途") + private String purpose; + + @ExcelProperty(value = "切边要求") + private String trimmingRequirement; + + @ExcelProperty(value = "包装种类") + private String packagingRequirement; + + @ExcelProperty(value = "产品质量") + private String qualityStatus; + + @ExcelProperty(value = "打包状态") + private String packingStatus; + + @ExcelProperty(value = "库存状态") + private String statusDesc; + + @ExcelProperty(value = "备注") + private String remark; + + @ExcelProperty(value = "名称") + private String itemName; + + @ExcelProperty(value = "规格") + private String specification; + + @ExcelProperty(value = "长度") + private BigDecimal length; + + @ExcelProperty(value = "材质") + private String material; + + @ExcelProperty(value = "厂家") + private String manufacturer; + + @ExcelProperty(value = "表面处理") + private String surfaceTreatmentDesc; + + @ExcelProperty(value = "锌层") + private String zincLayer; + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogVo.java index 54ec8631..803bc7a6 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilWarehouseOperationLogVo.java @@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import com.klp.common.annotation.ExcelDictFormat; import com.klp.common.convert.ExcelDictConvert; +import com.klp.common.core.domain.BaseEntity; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @@ -18,7 +19,7 @@ import java.util.Date; */ @Data @ExcelIgnoreUnannotated -public class WmsCoilWarehouseOperationLogVo { +public class WmsCoilWarehouseOperationLogVo extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsCoilWarehouseOperationLogMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsCoilWarehouseOperationLogMapper.java index b8b44501..879bab3e 100644 --- a/klp-wms/src/main/java/com/klp/mapper/WmsCoilWarehouseOperationLogMapper.java +++ b/klp-wms/src/main/java/com/klp/mapper/WmsCoilWarehouseOperationLogMapper.java @@ -3,6 +3,10 @@ package com.klp.mapper; import com.klp.domain.WmsCoilWarehouseOperationLog; import com.klp.domain.vo.WmsCoilWarehouseOperationLogVo; import com.klp.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; /** * 钢卷库区操作记录Mapper接口 @@ -12,4 +16,9 @@ import com.klp.common.core.mapper.BaseMapperPlus; */ public interface WmsCoilWarehouseOperationLogMapper extends BaseMapperPlus { + List selectVoListWithJoin(@Param("warehouseIds") List warehouseIds, + @Param("operationType") Integer operationType, + @Param("inOutType") Integer inOutType, + @Param("startTime") Date startTime, + @Param("endTime") Date endTime); } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsCoilWarehouseOperationLogService.java b/klp-wms/src/main/java/com/klp/service/IWmsCoilWarehouseOperationLogService.java index bd43c008..95a78a6f 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsCoilWarehouseOperationLogService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsCoilWarehouseOperationLogService.java @@ -8,6 +8,7 @@ import com.klp.common.core.domain.PageQuery; import javax.validation.constraints.NotNull; import java.util.Collection; +import com.klp.domain.vo.WmsCoilWarehouseOperationLogExportVo; import java.util.Date; import java.util.List; @@ -72,4 +73,16 @@ public interface IWmsCoilWarehouseOperationLogService { * @return 操作记录列表(含钢卷信息和库区信息) */ List queryByCoilId(Long coilId, Integer operationType, Integer inOutType, Date startTime, Date endTime); + + /** + * 导出钢卷库区操作记录(报表导出) + * + * @param secondWarehouseId 二级库区ID + * @param operationType 操作类型 + * @param inOutType 出入库类型 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 导出数据列表 + */ + List exportBySecondWarehouseIdAndTimeRange(Long secondWarehouseId, Integer operationType, Integer inOutType, Date startTime, Date endTime); } diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java index 1f6a0ecc..5127e406 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilWarehouseOperationLogServiceImpl.java @@ -17,7 +17,10 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.domain.bo.WmsCoilWarehouseOperationLogBo; import com.klp.domain.vo.WmsCoilWarehouseOperationLogVo; +import com.klp.domain.vo.WmsCoilWarehouseOperationLogExportVo; import com.klp.domain.vo.WmsMaterialCoilVo; +import com.klp.domain.vo.WmsRawMaterialVo; +import com.klp.domain.vo.WmsProductVo; import com.klp.domain.WmsCoilWarehouseOperationLog; import com.klp.mapper.WmsCoilWarehouseOperationLogMapper; import com.klp.service.IWmsCoilWarehouseOperationLogService; @@ -134,52 +137,49 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous return new ArrayList<>(); } - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.in(WmsCoilWarehouseOperationLog::getActualWarehouseId, warehouseIds); - lqw.eq(operationType != null, WmsCoilWarehouseOperationLog::getOperationType, operationType); - lqw.eq(inOutType != null, WmsCoilWarehouseOperationLog::getInOutType, inOutType); - lqw.ge(startTime != null, WmsCoilWarehouseOperationLog::getCreateTime, startTime); - lqw.le(endTime != null, WmsCoilWarehouseOperationLog::getCreateTime, endTime); - lqw.orderByDesc(WmsCoilWarehouseOperationLog::getCreateTime); - - List list = baseMapper.selectVoList(lqw); - - Set coilIds = list.stream() - .map(WmsCoilWarehouseOperationLogVo::getCoilId) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - - - Map coilMap = new HashMap<>(); - if (!coilIds.isEmpty()) { - WmsMaterialCoilBo bo = new WmsMaterialCoilBo(); - bo.setCoilIds(coilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); - List coils = wmsMaterialCoilService.queryList(bo); - for (WmsMaterialCoilVo coil : coils) { - coilMap.put(coil.getCoilId(), coil); - } - } - - - Map warehouseMap = new HashMap<>(); - if (!warehouseIds.isEmpty()) { - LambdaQueryWrapper warehouseQuery = Wrappers.lambdaQuery(); - warehouseQuery.in(WmsActualWarehouse::getActualWarehouseId, warehouseIds); - List warehouses = wmsActualWarehouseMapper.selectList(warehouseQuery); - for (WmsActualWarehouse warehouse : warehouses) { - WmsActualWarehouseVo vo = BeanUtil.toBean(warehouse, WmsActualWarehouseVo.class); - warehouseMap.put(warehouse.getActualWarehouseId(), vo); - } - } + List list = baseMapper.selectVoListWithJoin(new ArrayList<>(warehouseIds), operationType, inOutType, startTime, endTime); for (WmsCoilWarehouseOperationLogVo vo : list) { - vo.setCoil(coilMap.get(vo.getCoilId())); - vo.setWarehouse(warehouseMap.get(vo.getActualWarehouseId())); + if (vo.getCoil() != null) { + buildItemObjectFromJoin(vo.getCoil()); + } } return list; } + private void buildItemObjectFromJoin(WmsMaterialCoilVo vo) { + if (vo.getItemId() == null || vo.getItemType() == null) { + return; + } + + if ("raw_material".equals(vo.getItemType())) { + WmsRawMaterialVo rawMaterial = new WmsRawMaterialVo(); + rawMaterial.setRawMaterialId(vo.getItemId()); + rawMaterial.setRawMaterialCode(vo.getItemCode()); + rawMaterial.setRawMaterialName(vo.getItemName()); + rawMaterial.setSpecification(vo.getSpecification()); + rawMaterial.setMaterial(vo.getMaterial()); + rawMaterial.setManufacturer(vo.getManufacturer()); + rawMaterial.setSurfaceTreatmentDesc(vo.getSurfaceTreatmentDesc()); + rawMaterial.setZincLayer(vo.getZincLayer()); + vo.setRawMaterial(rawMaterial); + } + + if ("product".equals(vo.getItemType())) { + WmsProductVo product = new WmsProductVo(); + product.setProductId(vo.getItemId()); + product.setProductCode(vo.getItemCode()); + product.setProductName(vo.getItemName()); + product.setSpecification(vo.getSpecification()); + product.setMaterial(vo.getMaterial()); + product.setManufacturer(vo.getManufacturer()); + product.setSurfaceTreatmentDesc(vo.getSurfaceTreatmentDesc()); + product.setZincLayer(vo.getZincLayer()); + vo.setProduct(product); + } + } + private Set getAllChildWarehouseIds(Long parentId) { Set result = new HashSet<>(); if (parentId == null) { @@ -258,4 +258,84 @@ public class WmsCoilWarehouseOperationLogServiceImpl implements IWmsCoilWarehous return list; } + + @Override + public List exportBySecondWarehouseIdAndTimeRange(Long secondWarehouseId, Integer operationType, Integer inOutType, Date startTime, Date endTime) { + List voList = queryBySecondWarehouseIdAndTimeRange(secondWarehouseId, operationType, inOutType, startTime, endTime); + + List exportList = new ArrayList<>(); + for (WmsCoilWarehouseOperationLogVo vo : voList) { + WmsCoilWarehouseOperationLogExportVo exportVo = new WmsCoilWarehouseOperationLogExportVo(); + + WmsMaterialCoilVo coil = vo.getCoil(); + if (coil != null) { + exportVo.setEnterCoilNo(coil.getEnterCoilNo()); + exportVo.setCurrentCoilNo(coil.getCurrentCoilNo()); + exportVo.setSupplierCoilNo(coil.getSupplierCoilNo()); + exportVo.setNetWeight(coil.getNetWeight()); + exportVo.setItemTypeDesc(coil.getItemType()); + exportVo.setPurpose(coil.getBusinessPurpose()); + exportVo.setTrimmingRequirement(coil.getTrimmingRequirement()); + exportVo.setPackagingRequirement(coil.getPackagingRequirement()); + exportVo.setQualityStatus(coil.getQualityStatus()); + exportVo.setPackingStatus(coil.getPackingStatus()); + exportVo.setStatusDesc(getStatusDesc(coil.getStatus())); + exportVo.setItemName(coil.getItemName()); + exportVo.setSpecification(coil.getSpecification()); + exportVo.setLength(coil.getLength()); + exportVo.setMaterial(coil.getMaterial()); + exportVo.setManufacturer(coil.getManufacturer()); + exportVo.setSurfaceTreatmentDesc(coil.getSurfaceTreatmentDesc()); + exportVo.setZincLayer(coil.getZincLayer()); + exportVo.setCreateTime(coil.getCreateTime()); + exportVo.setLogicalWarehouseName(coil.getWarehouseName()); + exportVo.setActualWarehouseName(coil.getActualWarehouseName()); + } + + WmsActualWarehouseVo warehouse = vo.getWarehouse(); + if (warehouse != null) { + exportVo.setWarehouseName(warehouse.getActualWarehouseName()); + } + + exportVo.setOperationTypeDesc(getOperationTypeDesc(vo.getOperationType())); + exportVo.setInOutTypeDesc(getInOutTypeDesc(vo.getInOutType())); + exportVo.setCreateBy(vo.getCreateBy()); + exportVo.setCreateTimeLog(vo.getCreateTime()); + exportVo.setRemark(vo.getRemark()); + + exportList.add(exportVo); + } + + return exportList; + } + + private String getStatusDesc(Integer status) { + if (status == null) return null; + switch (status) { + case 0: return "在库"; + case 1: return "在途"; + case 2: return "已出库"; + default: return String.valueOf(status); + } + } + + private String getOperationTypeDesc(Integer operationType) { + if (operationType == null) return null; + switch (operationType) { + case 1: return "收货"; + case 2: return "加工"; + case 3: return "调拨"; + case 4: return "发货"; + default: return String.valueOf(operationType); + } + } + + private String getInOutTypeDesc(Integer inOutType) { + if (inOutType == null) return null; + switch (inOutType) { + case 1: return "入库"; + case 2: return "出库"; + default: return String.valueOf(inOutType); + } + } } diff --git a/klp-wms/src/main/resources/mapper/klp/WmsCoilWarehouseOperationLogMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsCoilWarehouseOperationLogMapper.xml index 6b06dd36..7c43bbdd 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsCoilWarehouseOperationLogMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsCoilWarehouseOperationLogMapper.xml @@ -18,5 +18,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +