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] =?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("系统异常,请联系管理员处理"); } /**