From 8a5f2bc4df3e763163adece37048c4780b5c652f Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Mon, 30 Mar 2026 13:39:27 +0800
Subject: [PATCH 1/4] =?UTF-8?q?feat(crm):=20=E6=B7=BB=E5=8A=A0=E8=AE=A2?=
=?UTF-8?q?=E5=8D=95=E5=85=B3=E8=81=94=E5=90=88=E5=90=8CID=E5=92=8C?=
=?UTF-8?q?=E9=99=84=E4=BB=B6=E5=AD=97=E6=AE=B5=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在CrmOrder实体类中新增contractId和annexFiles字段
- 在CrmOrderBo业务对象中同步添加对应字段
- 更新CrmOrderMapper.xml映射文件中的结果映射和查询字段
- 在CrmOrderServiceImpl服务实现中添加字段查询条件支持
- 在CrmOrderVo视图对象中增加Excel导出注解配置
---
.../src/main/java/com/klp/crm/domain/CrmOrder.java | 10 ++++++++++
.../main/java/com/klp/crm/domain/bo/CrmOrderBo.java | 10 ++++++++++
.../main/java/com/klp/crm/domain/vo/CrmOrderVo.java | 12 ++++++++++++
.../klp/crm/service/impl/CrmOrderServiceImpl.java | 4 ++++
klp-crm/src/main/resources/mapper/CrmOrderMapper.xml | 6 ++++++
5 files changed, 42 insertions(+)
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 230acebf..e63f89db 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
@@ -85,6 +85,16 @@ public class CrmOrder extends BaseEntity {
*/
private String contractCode;
+ /**
+ * 关联合同ID(wms_contract.contract_id)
+ */
+ private Long contractId;
+
+ /**
+ * 附件(多个文件URL用逗号分隔)
+ */
+ private String annexFiles;
+
/**
* 删除标识 0正常 2删除
*/
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 4a92bf88..beee8ea8 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
@@ -95,5 +95,15 @@ public class CrmOrderBo extends BaseEntity {
*/
private String contractCode;
+ /**
+ * 关联合同ID(wms_contract.contract_id)
+ */
+ private Long contractId;
+
+ /**
+ * 附件(多个文件URL用逗号分隔)
+ */
+ private String annexFiles;
+
}
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 86e22111..3441237d 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
@@ -114,6 +114,18 @@ public class CrmOrderVo extends BaseEntity {
@ExcelProperty(value = "合同号")
private String contractCode;
+ /**
+ * 关联合同ID(wms_contract.contract_id)
+ */
+ @ExcelProperty(value = "关联合同ID")
+ private Long contractId;
+
+ /**
+ * 附件(多个文件URL用逗号分隔)
+ */
+ @ExcelProperty(value = "附件")
+ private String annexFiles;
+
// @ExcelProperty(value = "客户编号")
private String customerCode;
diff --git a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java
index c092ce81..85bd8186 100644
--- a/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java
+++ b/klp-crm/src/main/java/com/klp/crm/service/impl/CrmOrderServiceImpl.java
@@ -95,6 +95,8 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
qw.eq(bo.getFinanceStatus() != null, "co.finance_status", bo.getFinanceStatus());
qw.eq(bo.getUnpaidAmount() != null, "co.unpaid_amount", bo.getUnpaidAmount());
qw.like(StringUtils.isNotBlank(bo.getContractCode()), "co.contract_code", bo.getContractCode());
+ qw.eq(bo.getContractId() != null, "co.contract_id", bo.getContractId());
+ qw.like(StringUtils.isNotBlank(bo.getAnnexFiles()), "co.annex_files", bo.getAnnexFiles());
//逻辑删除
qw.eq("co.del_flag", 0);
//根据orderType排序预订单是0 正是订单是1 0排在前面 1排在后面 升序
@@ -128,6 +130,8 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
lqw.eq(bo.getFinanceStatus() != null, CrmOrder::getFinanceStatus, bo.getFinanceStatus());
lqw.eq(bo.getUnpaidAmount() != null, CrmOrder::getUnpaidAmount, bo.getUnpaidAmount());
lqw.like(StringUtils.isNotBlank(bo.getContractCode()), CrmOrder::getContractCode, bo.getContractCode());
+ lqw.eq(bo.getContractId() != null, CrmOrder::getContractId, bo.getContractId());
+ lqw.like(StringUtils.isNotBlank(bo.getAnnexFiles()), CrmOrder::getAnnexFiles, bo.getAnnexFiles());
return lqw;
}
diff --git a/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml b/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml
index 3d89ce6d..ffc1b182 100644
--- a/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml
+++ b/klp-crm/src/main/resources/mapper/CrmOrderMapper.xml
@@ -20,6 +20,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
@@ -43,6 +45,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
co.unpaid_amount AS unpaidAmount,
co.remark,
co.contract_code AS contractCode,
+ co.contract_id AS contractId,
+ co.annex_files AS annexFiles,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,
@@ -75,6 +79,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
co.unpaid_amount AS unpaidAmount,
co.remark,
co.contract_code AS contractCode,
+ co.contract_id AS contractId,
+ co.annex_files AS annexFiles,
co.create_by AS createBy,
co.create_time AS createTime,
co.update_by AS updateBy,
From 15a3f843f1bb339caead9de6d90971a0f4a56852 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Mon, 30 Mar 2026 13:47:10 +0800
Subject: [PATCH 2/4] =?UTF-8?q?feat(crm):=20=E6=B7=BB=E5=8A=A0=E6=9F=90?=
=?UTF-8?q?=E4=B8=80=E5=90=88=E5=90=8C=E4=B8=8B=E8=B4=A2=E5=8A=A1=E5=92=8C?=
=?UTF-8?q?=E5=BC=82=E8=AE=AE=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在CrmOrderItemController中新增getContractFinance接口用于查询合同关联的财务和异议数据
- 在CrmOrderItemService及其实现类中添加queryFinanceAndObjectionByContractId方法
- 创建CrmContractOrderFinanceVo数据传输对象封装异议列表和应收款列表
- 实现通过合同ID查询其下属订单的销售异议和财务信息的完整逻辑
- 修改全局异常处理器统一返回系统异常提示信息
---
.../controller/CrmOrderItemController.java | 7 +++
.../domain/vo/CrmContractOrderFinanceVo.java | 14 ++++++
.../klp/crm/service/ICrmOrderItemService.java | 7 +++
.../service/impl/CrmOrderItemServiceImpl.java | 46 ++++++++++++++++++-
.../web/exception/GlobalExceptionHandler.java | 4 +-
5 files changed, 75 insertions(+), 3 deletions(-)
create mode 100644 klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractOrderFinanceVo.java
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 10d98bf0..6daa08a6 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
@@ -18,6 +18,7 @@ import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
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.common.core.page.TableDataInfo;
@@ -96,4 +97,10 @@ public class CrmOrderItemController extends BaseController {
@PathVariable String[] itemIds) {
return toAjax(iCrmOrderItemService.deleteWithValidByIds(Arrays.asList(itemIds), true));
}
+
+ @GetMapping("/contractFinance/{contractId}")
+ public R getContractFinance(@NotNull(message = "合同ID不能为空")
+ @PathVariable Long contractId) {
+ return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByContractId(contractId));
+ }
}
diff --git a/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractOrderFinanceVo.java b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractOrderFinanceVo.java
new file mode 100644
index 00000000..72413627
--- /dev/null
+++ b/klp-crm/src/main/java/com/klp/crm/domain/vo/CrmContractOrderFinanceVo.java
@@ -0,0 +1,14 @@
+package com.klp.crm.domain.vo;
+
+import com.klp.domain.vo.WmsReceivableVo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CrmContractOrderFinanceVo {
+
+ private List objectionList;
+
+ private List receivableList;
+}
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 2111a1f4..9bcfe942 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
@@ -9,6 +9,8 @@ import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
+import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
+
/**
* 正式订单明细Service接口
*
@@ -46,4 +48,9 @@ public interface ICrmOrderItemService {
* 校验并批量删除正式订单明细信息
*/
Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ /**
+ * 根据合同ID查询下属订单的异议和财务信息
+ */
+ CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(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 1aeb4339..fef9e03c 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
@@ -7,17 +7,27 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.crm.domain.bo.CrmOrderItemBo;
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.crm.domain.CrmOrderItem;
+import com.klp.crm.domain.CrmOrder;
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.List;
import java.util.Map;
import java.util.Collection;
+import java.util.stream.Collectors;
/**
* 正式订单明细Service业务层处理
@@ -30,6 +40,9 @@ import java.util.Collection;
public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
private final CrmOrderItemMapper baseMapper;
+ private final CrmOrderMapper crmOrderMapper;
+ private final CrmSalesObjectionMapper crmSalesObjectionMapper;
+ private final WmsReceivableMapper wmsReceivableMapper;
/**
* 查询正式订单明细
@@ -122,4 +135,35 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
-}
\ No newline at end of file
+
+ @Override
+ public CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long contractId) {
+ CrmContractOrderFinanceVo result = new CrmContractOrderFinanceVo();
+
+ LambdaQueryWrapper orderWrapper = new LambdaQueryWrapper<>();
+ orderWrapper.eq(CrmOrder::getContractId, contractId);
+ List orders = crmOrderMapper.selectList(orderWrapper);
+
+ if (orders == null || orders.isEmpty()) {
+ return result;
+ }
+
+ List orderIds = orders.stream()
+ .map(CrmOrder::getOrderId)
+ .collect(Collectors.toList());
+
+ LambdaQueryWrapper objectionWrapper = new LambdaQueryWrapper<>();
+ objectionWrapper.in(CrmSalesObjection::getOrderId, orderIds);
+ List objectionList = crmSalesObjectionMapper.selectVoList(objectionWrapper);
+ result.setObjectionList(objectionList);
+
+ LambdaQueryWrapper receivableWrapper = new LambdaQueryWrapper<>();
+ receivableWrapper.in(com.klp.domain.WmsReceivable::getOrderId, orderIds.stream()
+ .map(Long::parseLong)
+ .collect(Collectors.toList()));
+ List receivableList = wmsReceivableMapper.selectVoList(receivableWrapper);
+ result.setReceivableList(receivableList);
+
+ return result;
+ }
+}
diff --git a/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java b/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
index cec8ee50..86228e67 100644
--- a/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
+++ b/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
@@ -115,7 +115,7 @@ public class GlobalExceptionHandler {
public R handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e);
- return R.fail(e.getMessage());
+ return R.fail("系统异常,请联系管理员处理");
}
/**
@@ -125,7 +125,7 @@ public class GlobalExceptionHandler {
public R handleException(Exception e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e);
- return R.fail(e.getMessage());
+ return R.fail("系统异常,请联系管理员处理");
}
/**
From 02469383f4c0ed63c5cc56d692a06adc77e522c4 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Mon, 30 Mar 2026 13:57:35 +0800
Subject: [PATCH 3/4] =?UTF-8?q?fix(exception):=20=E4=BF=AE=E6=94=B9?=
=?UTF-8?q?=E5=85=A8=E5=B1=80=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=85=B7=E4=BD=93=E9=94=99=E8=AF=AF=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修改 RuntimeException 处理器返回具体的异常消息而不是通用提示
- 修改 Exception 处理器返回具体的异常消息而不是通用提示
- 移除了硬编码的"系统异常,请联系管理员处理"消息
- 保留了原有的错误日志记录功能
---
.../klp/framework/web/exception/GlobalExceptionHandler.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java b/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
index 86228e67..cec8ee50 100644
--- a/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
+++ b/klp-framework/src/main/java/com/klp/framework/web/exception/GlobalExceptionHandler.java
@@ -115,7 +115,7 @@ public class GlobalExceptionHandler {
public R handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e);
- return R.fail("系统异常,请联系管理员处理");
+ return R.fail(e.getMessage());
}
/**
@@ -125,7 +125,7 @@ public class GlobalExceptionHandler {
public R handleException(Exception e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e);
- return R.fail("系统异常,请联系管理员处理");
+ return R.fail(e.getMessage());
}
/**
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 4/4] =?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
- }
-
/**
* 新增钢卷物料表
*/