This commit is contained in:
jhd
2026-05-30 10:47:52 +08:00
48 changed files with 2758 additions and 354 deletions

View File

@@ -134,9 +134,12 @@ public class WmsDeliveryWaybillDetailController extends BaseController {
WmsMaterialCoilBo bo,
PageQuery pageQuery,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
@RequestParam(required = false) Long planId) {
List<Long> boundCoilIds;
if (startTime != null || endTime != null) {
if (planId != null) {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPlanId(planId, startTime, endTime);
} else if (startTime != null || endTime != null) {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByTimeRange(startTime, endTime);
} else {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIds();
@@ -157,9 +160,12 @@ public class WmsDeliveryWaybillDetailController extends BaseController {
public R<java.util.Map<String, java.math.BigDecimal>> getStatistics(
WmsMaterialCoilBo bo,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime) {
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endTime,
@RequestParam(required = false) Long planId) {
List<Long> boundCoilIds;
if (startTime != null || endTime != null) {
if (planId != null) {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPlanId(planId, startTime, endTime);
} else if (startTime != null || endTime != null) {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByTimeRange(startTime, endTime);
} else {
boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIds();

View File

@@ -5,6 +5,9 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.stream.Collectors;
import java.util.HashMap;
@@ -30,6 +33,7 @@ import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.common.utils.StringUtils;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.domain.bo.WmsMaterialCoilReportSummaryBo;
import com.klp.domain.vo.dashboard.CoilTrimStatisticsVo;
@@ -130,6 +134,70 @@ public class WmsMaterialCoilController extends BaseController {
List<WmsMaterialCoilExportVo> list = iWmsMaterialCoilService.queryExportList(bo);
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilExportVo.class, response);
}
/**
* 个性化导出:前端传入要导出的字段名,仅导出选中列
* columns 参数为逗号分隔的 Java 字段名,如 "itemTypeDesc,enterCoilNo,netWeight"
* 不传 columns 时等同于 /exportAll 导出全部字段
*/
@Log(title = "钢卷物料表", businessType = BusinessType.EXPORT)
@PostMapping("/exportCustom")
public void exportCustom(WmsMaterialCoilBo bo,
@RequestParam(required = false) String columns,
HttpServletResponse response) {
List<WmsMaterialCoilAllExportVo> list = iWmsMaterialCoilService.queryExportListAll(bo);
if (StringUtils.isNotBlank(columns)) {
Set<String> includeFields = new HashSet<>(Arrays.asList(columns.split(",")));
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilAllExportVo.class, includeFields, response);
} else {
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilAllExportVo.class, response);
}
}
/**
* 获取可导出的列元数据(供前端列选择器使用)
* 返回 { "fieldName": "中文列名" } 的映射,基于完整导出字段
*/
@GetMapping("/exportColumns")
public R<Map<String, String>> getExportColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("itemTypeDesc", "类型");
columns.put("warehouseName", "逻辑库区");
columns.put("actualWarehouseName", "实际库区");
columns.put("enterCoilNo", "入场卷号");
columns.put("supplierCoilNo", "厂家卷号");
columns.put("currentCoilNo", "成品卷号");
columns.put("createTime", "日期");
columns.put("exportTime", "发货时间");
columns.put("exportBy", "发货人");
columns.put("netWeight", "重量");
columns.put("purpose", "用途");
columns.put("trimmingRequirement", "切边要求");
columns.put("packagingRequirement", "包装种类");
columns.put("qualityStatus", "产品质量");
columns.put("packingStatus", "原料材质");
columns.put("statusDesc", "库存状态");
columns.put("remark", "备注");
columns.put("itemName", "名称");
columns.put("length", "长度");
columns.put("specification", "规格");
columns.put("material", "材质");
columns.put("manufacturer", "厂家");
columns.put("surfaceTreatmentDesc", "表面处理");
columns.put("zincLayer", "锌层");
columns.put("itemId", "物品ID");
columns.put("dataTypeText", "数据类型");
columns.put("temperGrade", "调制度");
columns.put("coatingType", "镀层种类");
columns.put("businessPurpose", "业务用途");
columns.put("isRelatedToOrderText", "是否与订单相关");
columns.put("saleName", "销售人员");
columns.put("actualThickness", "实测厚度");
columns.put("transferType", "调拨类型");
columns.put("team", "班组");
return R.ok(columns);
}
/**
* 导出钢卷物料表列表(完整字段版本)
* 导出全部字段

View File

@@ -78,6 +78,7 @@ public class WmsMaterialCoilAllExportVo {
private BigDecimal netWeight;
// 班组
@ExcelProperty(value = "班组")
private String team;
/**

View File

@@ -73,4 +73,9 @@ public interface IWmsDeliveryWaybillDetailService {
* 根据负责人(principal)查询已绑定的钢卷ID列表
*/
List<Long> getBoundCoilIdsByPrincipal(String principal);
/**
* 根据发货计划ID查询已绑定的钢卷ID列表可结合时间段筛选
*/
List<Long> getBoundCoilIdsByPlanId(Long planId, Date startTime, Date endTime);
}

View File

@@ -338,6 +338,33 @@ public class WmsDeliveryWaybillDetailServiceImpl implements IWmsDeliveryWaybillD
return list.stream().map(WmsDeliveryWaybillDetail::getCoilId).distinct().collect(Collectors.toList());
}
@Override
public List<Long> getBoundCoilIdsByPlanId(Long planId, Date startTime, Date endTime) {
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper = Wrappers.lambdaQuery();
waybillWrapper.eq(WmsDeliveryWaybill::getPlanId, planId);
waybillWrapper.eq(WmsDeliveryWaybill::getDelFlag, 0);
if (startTime != null) {
waybillWrapper.ge(WmsDeliveryWaybill::getDeliveryTime, startTime);
}
if (endTime != null) {
waybillWrapper.le(WmsDeliveryWaybill::getDeliveryTime, endTime);
}
List<WmsDeliveryWaybill> waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper);
if (waybills == null || waybills.isEmpty()) {
return Collections.emptyList();
}
List<Long> waybillIds = waybills.stream().map(WmsDeliveryWaybill::getWaybillId).collect(Collectors.toList());
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper = Wrappers.lambdaQuery();
detailWrapper.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds);
detailWrapper.isNotNull(WmsDeliveryWaybillDetail::getCoilId);
detailWrapper.eq(WmsDeliveryWaybillDetail::getDelFlag, 0);
detailWrapper.select(WmsDeliveryWaybillDetail::getCoilId);
List<WmsDeliveryWaybillDetail> list = baseMapper.selectList(detailWrapper);
return list.stream().map(WmsDeliveryWaybillDetail::getCoilId).distinct().collect(Collectors.toList());
}
@Override
public List<Long> getBoundCoilIdsByPrincipal(String principal) {
if (principal == null || principal.trim().isEmpty()) {

View File

@@ -630,6 +630,8 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
qw.eq(StringUtils.isNotBlank(bo.getBusinessPurpose()), "mc.business_purpose", bo.getBusinessPurpose());
// 是否与订单相关0=否1=是)
qw.eq(bo.getIsRelatedToOrder() != null, "mc.is_related_to_order", bo.getIsRelatedToOrder());
// 加上remark的模糊匹配
qw.like(StringUtils.isNotBlank(bo.getRemark()), "mc.remark", bo.getRemark());
//逻辑删除
qw.eq("mc.del_flag", 0);
// 统一处理 warehouseId 与 warehouseIds