Files
xgy-oa/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java
Joshi db309d67a1 feat(wms): 增加钢卷查询时过滤已发货的功能
- 在 WmsMaterialCoilBo 中新增 onlyUnshippedAndUnplanned 字段用于控制查询条件
- 修改 WmsMaterialCoilServiceImpl,在查询中增加对未发货且未绑定发货计划钢卷的筛选逻辑
- 删除原有的 queryAvailableForDelivery 方法及相关查询构建方法
- 移除了控制器中 /availableForDelivery 接口的独立实现
- 使用 NOT EXISTS + FIND_IN_SET 优化了钢卷是否被发货计划引用的判断逻辑
2025-12-10 14:15:08 +08:00

216 lines
7.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.controller;
import java.util.List;
import java.util.Map;
import java.util.Arrays;
import java.util.stream.Collectors;
import com.klp.domain.vo.WmsMaterialCoilExportVo;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
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.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.service.IWmsMaterialCoilService;
import com.klp.common.core.page.TableDataInfo;
/**
* 钢卷物料表
*
* @author Joshi
* @date 2025-07-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/materialCoil")
public class WmsMaterialCoilController extends BaseController {
private final IWmsMaterialCoilService iWmsMaterialCoilService;
/**
* 查询钢卷物料表列表
*/
@GetMapping("/list")
public TableDataInfo<WmsMaterialCoilVo> list(WmsMaterialCoilBo bo, PageQuery pageQuery) {
return iWmsMaterialCoilService.queryPageList(bo, pageQuery);
}
/**
* 导出钢卷物料表列表(完整字段版本)
*/
@Log(title = "钢卷物料表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsMaterialCoilBo bo, HttpServletResponse response) {
List<WmsMaterialCoilExportVo> list = iWmsMaterialCoilService.queryExportList(bo);
ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilExportVo.class, response);
}
/**
* 钢卷发货,将钢卷状态更新为已发货,且更新发货时间
*
* @param coilId 主键
*/
@Log(title = "钢卷物料表", businessType = BusinessType.DELETE)
@GetMapping("/exportCoil/{coilId}")
public R<Void> remove(@NotNull(message = "主键不能为空")
@PathVariable("coilId") Long coilId) {
return toAjax(iWmsMaterialCoilService.exportCoil(coilId));
}
/**
* 获取钢卷物料表详细信息
*
* @param coilId 主键
*/
@GetMapping("/{coilId}")
public R<WmsMaterialCoilVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("coilId") Long coilId) {
return R.ok(iWmsMaterialCoilService.queryById(coilId));
}
/**
* 新增钢卷物料表
*/
@Log(title = "钢卷物料表", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<WmsMaterialCoilVo> add(@Validated(AddGroup.class) @RequestBody WmsMaterialCoilBo bo) {
return R.ok(iWmsMaterialCoilService.insertByBo(bo));
}
/**
* 修改钢卷物料表
*/
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsMaterialCoilBo bo) {
return toAjax(iWmsMaterialCoilService.updateByBo(bo));
}
/**
* 简单更新钢卷物料表
* 直接更新属性内容,不进行历史记录处理
*/
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/update")
public R<Void> update(@Validated(EditGroup.class) @RequestBody WmsMaterialCoilBo bo) {
return toAjax(iWmsMaterialCoilService.updateSimple(bo));
}
/**
* 删除钢卷物料表
*
* @param coilIds 主键串
*/
@Log(title = "钢卷物料表", businessType = BusinessType.DELETE)
@DeleteMapping("/{coilIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("coilIds") Long[] coilIds) {
return toAjax(iWmsMaterialCoilService.deleteWithValidByIds(Arrays.asList(coilIds), true));
}
/**
* 钢卷溯源查询
* 根据入场钢卷号查询二维码解析content中的steps然后根据steps中的钢卷号反向查询数据库
*
* @param enterCoilNo 入场钢卷号
* @param currentCoilNo 当前钢卷号(可选参数,用于查询特定子钢卷)
*/
@GetMapping("/trace")
public R<Map<String, Object>> trace(@RequestParam @NotBlank(message = "入场钢卷号不能为空") String enterCoilNo,
@RequestParam(required = false) String currentCoilNo) {
Map<String, Object> traceResult = iWmsMaterialCoilService.queryTrace(enterCoilNo, currentCoilNo);
return R.ok(traceResult);
}
/**
* 查询各个库区中不同类型的钢卷分布情况
* 按库区分组统计每种物品类型和物品ID的钢卷数量和重量
*/
@GetMapping("/distributionByWarehouse")
public R<List<WmsMaterialCoilVo>> getDistributionByWarehouse(
@RequestParam(required = false) String itemType,
@RequestParam(required = false) Long itemId) {
List<WmsMaterialCoilVo> distribution = iWmsMaterialCoilService.getDistributionByWarehouse(itemType, itemId);
return R.ok(distribution);
}
/**
* 查询各个库区中不同类型的钢卷分布情况
* 按库区分组统计每种物品类型和物品ID的钢卷数量和重量
*/
@GetMapping("/distributionByActualWarehouse")
public R<List<WmsMaterialCoilVo>> getDistributionByActualWarehouse(
@RequestParam(required = false) String itemType,
@RequestParam(required = false) Long itemId) {
List<WmsMaterialCoilVo> distribution = iWmsMaterialCoilService.getDistributionByActualWarehouse(itemType, itemId);
return R.ok(distribution);
}
/**
* 查询不同类型的钢卷在不同库区的分布情况
* 按物品类型和物品ID分组统计每个库区的钢卷数量和重量
*/
@GetMapping("/distributionByItemType")
public R<List<WmsMaterialCoilVo>> getDistributionByItemType(
@RequestParam(required = false) String itemType,
@RequestParam(required = false) Long itemId) {
List<WmsMaterialCoilVo> distribution = iWmsMaterialCoilService.getDistributionByItemType(itemType, itemId);
return R.ok(distribution);
}
/**
* 查询不同类型的钢卷在不同库区的分布情况
* 按物品类型和物品ID分组统计每个库区的钢卷数量和重量
*/
@GetMapping("/distributionByActualItemType")
public R<List<WmsMaterialCoilVo>> getDistributionByActualItemType(
@RequestParam(required = false) String itemType,
@RequestParam(required = false) Long itemId) {
List<WmsMaterialCoilVo> distribution = iWmsMaterialCoilService.getDistributionByActualItemType(itemType, itemId);
return R.ok(distribution);
}
/**
* 批量更新钢卷发货状态
*
* @param coilIds 钢卷ID多个ID用逗号分隔
* @param status 目标状态 (0=在库, 1=在途, 2=已出库)
* @return 操作结果
*/
@Log(title = "钢卷物料表", businessType = BusinessType.UPDATE)
@PutMapping("/batchUpdateDeliveryStatus")
public R<Void> batchUpdateDeliveryStatus(
@RequestParam String coilIds,
@RequestParam Integer status) {
// 解析钢卷ID列表
List<Long> coilIdList = Arrays.stream(coilIds.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(Long::valueOf)
.collect(Collectors.toList());
Boolean result = iWmsMaterialCoilService.batchUpdateDeliveryStatus(coilIdList, status);
return result ? R.ok() : R.fail("批量更新失败");
}
}