feat(crm): 添加某一合同下财务和异议信息查询功能

- 在CrmOrderItemController中新增getContractFinance接口用于查询合同关联的财务和异议数据
- 在CrmOrderItemService及其实现类中添加queryFinanceAndObjectionByContractId方法
- 创建CrmContractOrderFinanceVo数据传输对象封装异议列表和应收款列表
- 实现通过合同ID查询其下属订单的销售异议和财务信息的完整逻辑
- 修改全局异常处理器统一返回系统异常提示信息
This commit is contained in:
2026-03-30 13:47:10 +08:00
parent 8a5f2bc4df
commit 15a3f843f1
5 changed files with 75 additions and 3 deletions

View File

@@ -18,6 +18,7 @@ import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType; import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil; import com.klp.common.utils.poi.ExcelUtil;
import com.klp.crm.domain.vo.CrmOrderItemVo; 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.domain.bo.CrmOrderItemBo;
import com.klp.crm.service.ICrmOrderItemService; import com.klp.crm.service.ICrmOrderItemService;
import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.page.TableDataInfo;
@@ -96,4 +97,10 @@ public class CrmOrderItemController extends BaseController {
@PathVariable String[] itemIds) { @PathVariable String[] itemIds) {
return toAjax(iCrmOrderItemService.deleteWithValidByIds(Arrays.asList(itemIds), true)); return toAjax(iCrmOrderItemService.deleteWithValidByIds(Arrays.asList(itemIds), true));
} }
@GetMapping("/contractFinance/{contractId}")
public R<CrmContractOrderFinanceVo> getContractFinance(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByContractId(contractId));
}
} }

View File

@@ -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<CrmSalesObjectionVo> objectionList;
private List<WmsReceivableVo> receivableList;
}

View File

@@ -9,6 +9,8 @@ import com.klp.common.core.domain.PageQuery;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
/** /**
* 正式订单明细Service接口 * 正式订单明细Service接口
* *
@@ -46,4 +48,9 @@ public interface ICrmOrderItemService {
* 校验并批量删除正式订单明细信息 * 校验并批量删除正式订单明细信息
*/ */
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
/**
* 根据合同ID查询下属订单的异议和财务信息
*/
CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long contractId);
} }

View File

@@ -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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils; import com.klp.common.utils.StringUtils;
import com.klp.crm.domain.CrmSalesObjection;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.klp.crm.domain.bo.CrmOrderItemBo; import com.klp.crm.domain.bo.CrmOrderItemBo;
import com.klp.crm.domain.vo.CrmOrderItemVo; 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.CrmOrderItem;
import com.klp.crm.domain.CrmOrder;
import com.klp.crm.mapper.CrmOrderItemMapper; 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.crm.service.ICrmOrderItemService;
import com.klp.mapper.WmsReceivableMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors;
/** /**
* 正式订单明细Service业务层处理 * 正式订单明细Service业务层处理
@@ -30,6 +40,9 @@ import java.util.Collection;
public class CrmOrderItemServiceImpl implements ICrmOrderItemService { public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
private final CrmOrderItemMapper baseMapper; 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; return baseMapper.deleteBatchIds(ids) > 0;
} }
@Override
public CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long contractId) {
CrmContractOrderFinanceVo result = new CrmContractOrderFinanceVo();
LambdaQueryWrapper<CrmOrder> orderWrapper = new LambdaQueryWrapper<>();
orderWrapper.eq(CrmOrder::getContractId, contractId);
List<CrmOrder> orders = crmOrderMapper.selectList(orderWrapper);
if (orders == null || orders.isEmpty()) {
return result;
}
List<String> orderIds = orders.stream()
.map(CrmOrder::getOrderId)
.collect(Collectors.toList());
LambdaQueryWrapper<CrmSalesObjection> objectionWrapper = new LambdaQueryWrapper<>();
objectionWrapper.in(CrmSalesObjection::getOrderId, orderIds);
List<CrmSalesObjectionVo> objectionList = crmSalesObjectionMapper.selectVoList(objectionWrapper);
result.setObjectionList(objectionList);
LambdaQueryWrapper<com.klp.domain.WmsReceivable> receivableWrapper = new LambdaQueryWrapper<>();
receivableWrapper.in(com.klp.domain.WmsReceivable::getOrderId, orderIds.stream()
.map(Long::parseLong)
.collect(Collectors.toList()));
List<WmsReceivableVo> receivableList = wmsReceivableMapper.selectVoList(receivableWrapper);
result.setReceivableList(receivableList);
return result;
}
} }

View File

@@ -115,7 +115,7 @@ public class GlobalExceptionHandler {
public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) { public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e); log.error("请求地址'{}',发生未知异常.", requestURI, e);
return R.fail(e.getMessage()); return R.fail("系统异常,请联系管理员处理");
} }
/** /**
@@ -125,7 +125,7 @@ public class GlobalExceptionHandler {
public R<Void> handleException(Exception e, HttpServletRequest request) { public R<Void> handleException(Exception e, HttpServletRequest request) {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e); log.error("请求地址'{}',发生系统异常.", requestURI, e);
return R.fail(e.getMessage()); return R.fail("系统异常,请联系管理员处理");
} }
/** /**