From 6835a35c02f42c5a9e208dba4bfa56d3759a34f2 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Mon, 30 Mar 2026 14:33:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(crm):=20=E8=AE=A2=E5=8D=95ID=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B=E4=BC=98=E5=8C=96=E5=8F=8A=E9=85=8D?= =?UTF-8?q?=E5=8D=B7=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将CrmOrder、CrmOrderItem及其相关BO、VO类中的orderId和itemId字段从String类型改为Long类型 - 修改selectOrderItemsByOrderIds方法参数类型为List - 在CrmOrderItemController中新增根据订单ID和合同ID查询配卷的接口 - 实现queryCoilsByOrderId和queryCoilsByContractId服务方法 - 移除WmsMaterialCoilServiceImpl中冗余的嵌套对象构建逻辑 - 更新销售报表中订单ID的类型转换和分组逻辑以适配Long类型 --- .../controller/CrmOrderItemController.java | 15 +++ .../java/com/klp/crm/domain/CrmOrder.java | 2 +- .../java/com/klp/crm/domain/CrmOrderItem.java | 6 +- .../com/klp/crm/domain/bo/CrmOrderBo.java | 2 +- .../com/klp/crm/domain/bo/CrmOrderItemBo.java | 8 +- .../com/klp/crm/domain/vo/CrmOrderItemVo.java | 6 +- .../com/klp/crm/domain/vo/CrmOrderVo.java | 2 +- .../klp/crm/domain/vo/CrmSalesReportVo.java | 2 +- .../klp/crm/mapper/CrmOrderItemMapper.java | 2 +- .../klp/crm/service/ICrmOrderItemService.java | 12 ++ .../service/impl/CrmOrderItemServiceImpl.java | 109 +++++++++++++++--- .../impl/CrmSalesReportServiceImpl.java | 4 +- .../impl/WmsMaterialCoilServiceImpl.java | 13 --- 13 files changed, 140 insertions(+), 43 deletions(-) diff --git a/klp-crm/src/main/java/com/klp/crm/controller/CrmOrderItemController.java b/klp-crm/src/main/java/com/klp/crm/controller/CrmOrderItemController.java index 6daa08a6..48bf4ab5 100644 --- a/klp-crm/src/main/java/com/klp/crm/controller/CrmOrderItemController.java +++ b/klp-crm/src/main/java/com/klp/crm/controller/CrmOrderItemController.java @@ -21,6 +21,7 @@ import com.klp.crm.domain.vo.CrmOrderItemVo; import com.klp.crm.domain.vo.CrmContractOrderFinanceVo; import com.klp.crm.domain.bo.CrmOrderItemBo; import com.klp.crm.service.ICrmOrderItemService; +import com.klp.domain.vo.WmsMaterialCoilVo; import com.klp.common.core.page.TableDataInfo; /** @@ -98,9 +99,23 @@ public class CrmOrderItemController extends BaseController { return toAjax(iCrmOrderItemService.deleteWithValidByIds(Arrays.asList(itemIds), true)); } + // 根据合同id查询该合同下属订单关联的异议和财务信息。。 @GetMapping("/contractFinance/{contractId}") public R getContractFinance(@NotNull(message = "合同ID不能为空") @PathVariable Long contractId) { return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByContractId(contractId)); } + // 根据订单id查询发货单据中的配卷。 + @GetMapping("/coils/order/{orderId}") + public R> getCoilsByOrderId(@NotNull(message = "订单ID不能为空") + @PathVariable Long orderId) { + return R.ok(iCrmOrderItemService.queryCoilsByOrderId(orderId)); + } + + // 根据合同id查询发货单据中的配卷。 + @GetMapping("/coils/contract/{contractId}") + public R> getCoilsByContractId(@NotNull(message = "合同ID不能为空") + @PathVariable Long contractId) { + return R.ok(iCrmOrderItemService.queryCoilsByContractId(contractId)); + } } diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java index e63f89db..aab3c578 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrder.java @@ -26,7 +26,7 @@ public class CrmOrder extends BaseEntity { * 订单ID(主键) */ @TableId(value = "order_id") - private String orderId; + private Long orderId; /** * 订单编号 */ diff --git a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java index 791f930f..132a83dd 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/CrmOrderItem.java @@ -24,11 +24,11 @@ public class CrmOrderItem extends BaseEntity { * 正式订单明细ID(主键) */ @TableId(value = "item_id") - private String itemId; + private Long itemId; /** * 关联正式订单ID(外键) */ - private String orderId; + private Long orderId; /** * 产品类型 */ @@ -99,4 +99,4 @@ public class CrmOrderItem extends BaseEntity { @TableLogic private Long delFlag; -} \ No newline at end of file +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java index beee8ea8..4fe75d45 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderBo.java @@ -23,7 +23,7 @@ public class CrmOrderBo extends BaseEntity { /** * 订单ID(主键) */ - private String orderId; + private Long orderId; /** * 订单编号 diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java index 8720724f..49896a75 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/CrmOrderItemBo.java @@ -21,12 +21,12 @@ public class CrmOrderItemBo extends BaseEntity { /** * 正式订单明细ID(主键) */ - private String itemId; + private Long itemId; /** * 关联正式订单ID(外键) */ - private String orderId; + private Long orderId; /** * 产品类型 @@ -57,7 +57,7 @@ public class CrmOrderItemBo extends BaseEntity { * 备注 */ private String remark; - + /** * 成品规格 */ @@ -109,4 +109,4 @@ public class CrmOrderItemBo extends BaseEntity { private String productionBatch; -} \ No newline at end of file +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java index a0f54694..07b05e32 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderItemVo.java @@ -25,14 +25,14 @@ public class CrmOrderItemVo { */ @ExcelProperty(value = "正式订单明细ID", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "主=键") - private String itemId; + private Long itemId; /** * 关联正式订单ID(外键) */ @ExcelProperty(value = "关联正式订单ID", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "外=键") - private String orderId; + private Long orderId; /** * 产品类型 @@ -132,4 +132,4 @@ public class CrmOrderItemVo { private String productionBatch; -} \ No newline at end of file +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java index 3441237d..6904667e 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmOrderVo.java @@ -28,7 +28,7 @@ public class CrmOrderVo extends BaseEntity { */ @ExcelProperty(value = "订单ID", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "主=键") - private String orderId; + private Long orderId; /** * 订单编号 diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java index 87826cca..7ab5e978 100644 --- a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java +++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmSalesReportVo.java @@ -98,7 +98,7 @@ public class CrmSalesReportVo { /** * 订单ID */ - private String orderId; + private Long orderId; /** * 订单编号 diff --git a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java index 250c9ab7..530c9a1f 100644 --- a/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java +++ b/klp-crm/src/main/java/com/klp/crm/mapper/CrmOrderItemMapper.java @@ -21,5 +21,5 @@ public interface CrmOrderItemMapper extends BaseMapperPlus selectOrderItemsByOrderIds(@Param("orderIds") List orderIds); + List selectOrderItemsByOrderIds(@Param("orderIds") List orderIds); } diff --git a/klp-crm/src/main/java/com/klp/crm/service/ICrmOrderItemService.java b/klp-crm/src/main/java/com/klp/crm/service/ICrmOrderItemService.java index 9bcfe942..fd584fca 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/ICrmOrderItemService.java +++ b/klp-crm/src/main/java/com/klp/crm/service/ICrmOrderItemService.java @@ -10,6 +10,8 @@ import java.util.Collection; import java.util.List; import com.klp.crm.domain.vo.CrmContractOrderFinanceVo; +import com.klp.domain.vo.WmsMaterialCoilVo; +import java.util.List; /** * 正式订单明细Service接口 @@ -53,4 +55,14 @@ public interface ICrmOrderItemService { * 根据合同ID查询下属订单的异议和财务信息 */ CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long contractId); + + /** + * 根据订单ID查询发货单配卷 + */ + List queryCoilsByOrderId(Long orderId); + + /** + * 根据合同ID查询发货单配卷 + */ + List queryCoilsByContractId(Long contractId); } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java index fef9e03c..947e51ef 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderItemServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.klp.common.utils.StringUtils; import com.klp.crm.domain.CrmSalesObjection; +import com.klp.domain.WmsReceivable; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.crm.domain.bo.CrmOrderItemBo; @@ -15,18 +16,23 @@ import com.klp.crm.domain.vo.CrmOrderItemVo; import com.klp.crm.domain.vo.CrmContractOrderFinanceVo; import com.klp.crm.domain.vo.CrmSalesObjectionVo; import com.klp.domain.vo.WmsReceivableVo; +import com.klp.domain.vo.WmsMaterialCoilVo; +import com.klp.domain.bo.WmsMaterialCoilBo; import com.klp.crm.domain.CrmOrderItem; import com.klp.crm.domain.CrmOrder; +import com.klp.domain.WmsDeliveryWaybill; +import com.klp.domain.WmsDeliveryWaybillDetail; import com.klp.crm.mapper.CrmOrderItemMapper; import com.klp.crm.mapper.CrmOrderMapper; import com.klp.crm.mapper.CrmSalesObjectionMapper; import com.klp.crm.service.ICrmOrderItemService; import com.klp.mapper.WmsReceivableMapper; +import com.klp.mapper.WmsDeliveryWaybillMapper; +import com.klp.mapper.WmsDeliveryWaybillDetailMapper; +import com.klp.service.IWmsMaterialCoilService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,12 +49,15 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { private final CrmOrderMapper crmOrderMapper; private final CrmSalesObjectionMapper crmSalesObjectionMapper; private final WmsReceivableMapper wmsReceivableMapper; + private final WmsDeliveryWaybillMapper wmsDeliveryWaybillMapper; + private final WmsDeliveryWaybillDetailMapper wmsDeliveryWaybillDetailMapper; + private final IWmsMaterialCoilService iWmsMaterialCoilService; /** * 查询正式订单明细 */ @Override - public CrmOrderItemVo queryById(String itemId){ + public CrmOrderItemVo queryById(String itemId) { return baseMapper.selectVoById(itemId); } @@ -74,7 +83,7 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { private LambdaQueryWrapper buildQueryWrapper(CrmOrderItemBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getOrderId()), CrmOrderItem::getOrderId, bo.getOrderId()); + lqw.eq(bo.getOrderId() != null, CrmOrderItem::getOrderId, bo.getOrderId()); lqw.eq(StringUtils.isNotBlank(bo.getProductType()), CrmOrderItem::getProductType, bo.getProductType()); lqw.eq(StringUtils.isNotBlank(bo.getRawMaterialSpec()), CrmOrderItem::getRawMaterialSpec, bo.getRawMaterialSpec()); lqw.eq(bo.getProductNum() != null, CrmOrderItem::getProductNum, bo.getProductNum()); @@ -121,7 +130,7 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(CrmOrderItem entity){ + private void validEntityBeforeSave(CrmOrderItem entity) { //TODO 做一些数据校验,如唯一约束 } @@ -130,7 +139,7 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; @@ -148,9 +157,9 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { return result; } - List orderIds = orders.stream() - .map(CrmOrder::getOrderId) - .collect(Collectors.toList()); + List orderIds = orders.stream() + .map(CrmOrder::getOrderId) + .collect(Collectors.toList()); LambdaQueryWrapper objectionWrapper = new LambdaQueryWrapper<>(); objectionWrapper.in(CrmSalesObjection::getOrderId, orderIds); @@ -158,12 +167,86 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { result.setObjectionList(objectionList); LambdaQueryWrapper receivableWrapper = new LambdaQueryWrapper<>(); - receivableWrapper.in(com.klp.domain.WmsReceivable::getOrderId, orderIds.stream() - .map(Long::parseLong) - .collect(Collectors.toList())); + receivableWrapper.in(WmsReceivable::getOrderId, orderIds); List receivableList = wmsReceivableMapper.selectVoList(receivableWrapper); result.setReceivableList(receivableList); return result; } + + @Override + public List queryCoilsByOrderId(Long orderId) { + LambdaQueryWrapper waybillWrapper = new LambdaQueryWrapper<>(); + waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, orderId); + List waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper); + + if (waybills == null || waybills.isEmpty()) { + return Collections.emptyList(); + } + + List waybillIds = waybills.stream() + .map(WmsDeliveryWaybill::getWaybillId) + .collect(Collectors.toList()); + + LambdaQueryWrapper detailWrapper = new LambdaQueryWrapper<>(); + detailWrapper.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds); + List details = wmsDeliveryWaybillDetailMapper.selectList(detailWrapper); + + if (details == null || details.isEmpty()) { + return Collections.emptyList(); + } + + String coilIds = details.stream() + .map(WmsDeliveryWaybillDetail::getCoilId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + + WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo(); + coilBo.setCoilIds(coilIds); + return iWmsMaterialCoilService.queryList(coilBo); + } + + @Override + public List queryCoilsByContractId(Long contractId) { + LambdaQueryWrapper orderWrapper = new LambdaQueryWrapper<>(); + orderWrapper.eq(CrmOrder::getContractId, contractId); + List orders = crmOrderMapper.selectList(orderWrapper); + + if (orders == null || orders.isEmpty()) { + return Collections.emptyList(); + } + + List orderIds = orders.stream() + .map(CrmOrder::getOrderId) + .collect(Collectors.toList()); + + LambdaQueryWrapper waybillWrapper = new LambdaQueryWrapper<>(); + waybillWrapper.in(WmsDeliveryWaybill::getOrderId, orderIds); + List waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper); + + if (waybills == null || waybills.isEmpty()) { + return Collections.emptyList(); + } + + List waybillIds = waybills.stream() + .map(WmsDeliveryWaybill::getWaybillId) + .collect(Collectors.toList()); + + LambdaQueryWrapper detailWrapper = new LambdaQueryWrapper<>(); + detailWrapper.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds); + List details = wmsDeliveryWaybillDetailMapper.selectList(detailWrapper); + + if (details == null || details.isEmpty()) { + return Collections.emptyList(); + } + + String coilIds = details.stream() + .map(WmsDeliveryWaybillDetail::getCoilId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + + WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo(); + coilBo.setCoilIds(coilIds); + return iWmsMaterialCoilService.queryList(coilBo); + } } diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java index 41c25ab0..3fadda9c 100644 --- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java +++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmSalesReportServiceImpl.java @@ -59,7 +59,7 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService { List orderDetails = baseMapper.selectOrderDetailList(bo); if (StringUtils.isNotNull(orderDetails) && !orderDetails.isEmpty()) { // 提取所有订单ID - List orderIds = orderDetails.stream() + List orderIds = orderDetails.stream() .map(CrmSalesReportVo.OrderDetail::getOrderId) .filter(StringUtils::isNotNull) .distinct() @@ -70,7 +70,7 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService { List orderItems = crmOrderItemMapper.selectOrderItemsByOrderIds(orderIds); // 将明细按订单ID分组 - Map> orderItemMap = orderItems.stream() + Map> orderItemMap = orderItems.stream() .collect(Collectors.groupingBy(CrmOrderItem::getOrderId)); // 为每个订单设置对应的明细列表 diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 2823937c..f07bb46d 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -964,12 +964,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { public List queryList(WmsMaterialCoilBo bo) { QueryWrapper lqw = buildQueryWrapperPlus(bo); List list = baseMapper.selectVoListWithDynamicJoin(lqw); - - // 从联查结果中构建产品和原材料对象(避免单独查询) - for (WmsMaterialCoilVo vo : list) { - buildItemObjectFromJoin(vo); - } - return list; } @@ -989,13 +983,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return one == null ? null : one.getQualityStatus(); } - /** - * 联查场景下数据已经是扁平字段,无需再构建 rawMaterial/product 嵌套对象。 - */ - private void buildItemObjectFromJoin(WmsMaterialCoilVo vo) { - // no-op - } - /** * 新增钢卷物料表 */