package com.klp.controller; import java.util.*; import java.util.stream.Collectors; import com.klp.domain.vo.WmsMaterialCoilVo; import org.springframework.format.annotation.DateTimeFormat; import com.klp.domain.vo.WmsMaterialCoilBindVo; import com.klp.domain.vo.WmsDeliveryCoilRelationVo; 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.WmsDeliveryWaybillDetailVo; import com.klp.domain.bo.WmsDeliveryWaybillDetailBo; import com.klp.service.IWmsDeliveryWaybillDetailService; import com.klp.domain.bo.WmsMaterialCoilBo; import com.klp.service.IWmsMaterialCoilService; import com.klp.common.core.page.TableDataInfo; /** * 发货单明细 * * @author klp * @date 2025-11-25 */ @Validated @RequiredArgsConstructor @RestController @RequestMapping("/wms/deliveryWaybillDetail") public class WmsDeliveryWaybillDetailController extends BaseController { private final IWmsDeliveryWaybillDetailService iWmsDeliveryWaybillDetailService; private final IWmsMaterialCoilService iWmsMaterialCoilService; /** * 查询发货单明细列表 */ @GetMapping("/list") public TableDataInfo list(WmsDeliveryWaybillDetailBo bo, PageQuery pageQuery) { return iWmsDeliveryWaybillDetailService.queryPageList(bo, pageQuery); } /** * 导出发货单明细列表 */ @Log(title = "发货单明细", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(WmsDeliveryWaybillDetailBo bo, HttpServletResponse response) { List list = iWmsDeliveryWaybillDetailService.queryList(bo); ExcelUtil.exportExcel(list, "发货单明细", WmsDeliveryWaybillDetailVo.class, response); } /** * 获取发货单明细详细信息 * * @param detailId 主键 */ @GetMapping("/{detailId}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long detailId) { return R.ok(iWmsDeliveryWaybillDetailService.queryById(detailId)); } /** * 根据钢卷ID查询发货关联信息(发货单明细+发货单+发货计划+钢卷信息) * * @param coilId 钢卷ID */ @GetMapping("/coilRelation/{coilId}") public R getCoilRelation(@NotNull(message = "钢卷ID不能为空") @PathVariable Long coilId) { return R.ok(iWmsDeliveryWaybillDetailService.queryRelationByCoilId(coilId)); } /** * 新增发货单明细 */ @Log(title = "发货单明细", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody WmsDeliveryWaybillDetailBo bo) { return toAjax(iWmsDeliveryWaybillDetailService.insertByBo(bo)); } /** * 批量新增发货单明细 */ @Log(title = "发货单明细", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/batch") public R batchAdd(@Validated(AddGroup.class) @RequestBody List boList) { return toAjax(iWmsDeliveryWaybillDetailService.insertBatchByBo(boList)); } /** * 修改发货单明细 */ @Log(title = "发货单明细", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody WmsDeliveryWaybillDetailBo bo) { return toAjax(iWmsDeliveryWaybillDetailService.updateByBo(bo)); } /** * 删除发货单明细 * * @param detailIds 主键串 */ @Log(title = "发货单明细", businessType = BusinessType.DELETE) @DeleteMapping("/{detailIds}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] detailIds) { return toAjax(iWmsDeliveryWaybillDetailService.deleteWithValidByIds(Arrays.asList(detailIds), true)); } /** * 查询已发货绑定的钢卷列表 */ @GetMapping("/boundCoilList") public TableDataInfo boundCoilList( 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) { List boundCoilIds; if (startTime != null || endTime != null) { boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByTimeRange(startTime, endTime); } else { boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIds(); } if (boundCoilIds == null || boundCoilIds.isEmpty()) { return new TableDataInfo<>(); } bo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(java.util.stream.Collectors.joining(","))); bo.setStatusFirst(true); // 未发货的排在前面 return iWmsMaterialCoilService.queryPageListWithBindInfo(bo, pageQuery); } /** * 统计已发货绑定钢卷的汇总数据 * 根据coilIds查询条件统计毛重、净重、数量等指标 */ @GetMapping("/statistics") public R> 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) { List boundCoilIds; if (startTime != null || endTime != null) { boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByTimeRange(startTime, endTime); } else { boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIds(); } if (boundCoilIds == null || boundCoilIds.isEmpty()) { return R.ok(new HashMap<>()); } bo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); return R.ok(iWmsMaterialCoilService.getStatistics(bo)); } /** * 根据负责人(principal)查询已发货绑定的钢卷列表 */ @GetMapping("/coilListByPrincipal") public List coilListByPrincipal( @RequestParam(required = false) String principal) { List boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPrincipal(principal); if (boundCoilIds == null || boundCoilIds.isEmpty()) { return Collections.emptyList(); } WmsMaterialCoilBo wmsMaterialCoilBo = new WmsMaterialCoilBo(); wmsMaterialCoilBo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); return iWmsMaterialCoilService.queryList(wmsMaterialCoilBo); } }