feat(crm): 订单ID数据类型优化及配卷查询功能扩展

- 将CrmOrder、CrmOrderItem及其相关BO、VO类中的orderId和itemId字段从String类型改为Long类型
- 修改selectOrderItemsByOrderIds方法参数类型为List<Long>
- 在CrmOrderItemController中新增根据订单ID和合同ID查询配卷的接口
- 实现queryCoilsByOrderId和queryCoilsByContractId服务方法
- 移除WmsMaterialCoilServiceImpl中冗余的嵌套对象构建逻辑
- 更新销售报表中订单ID的类型转换和分组逻辑以适配Long类型
This commit is contained in:
2026-03-30 14:33:06 +08:00
parent 02469383f4
commit 6835a35c02
13 changed files with 140 additions and 43 deletions

View File

@@ -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<CrmContractOrderFinanceVo> getContractFinance(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByContractId(contractId));
}
// 根据订单id查询发货单据中的配卷。
@GetMapping("/coils/order/{orderId}")
public R<List<WmsMaterialCoilVo>> getCoilsByOrderId(@NotNull(message = "订单ID不能为空")
@PathVariable Long orderId) {
return R.ok(iCrmOrderItemService.queryCoilsByOrderId(orderId));
}
// 根据合同id查询发货单据中的配卷。
@GetMapping("/coils/contract/{contractId}")
public R<List<WmsMaterialCoilVo>> getCoilsByContractId(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryCoilsByContractId(contractId));
}
}

View File

@@ -26,7 +26,7 @@ public class CrmOrder extends BaseEntity {
* 订单ID主键
*/
@TableId(value = "order_id")
private String orderId;
private Long orderId;
/**
* 订单编号
*/

View File

@@ -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;
}
}

View File

@@ -23,7 +23,7 @@ public class CrmOrderBo extends BaseEntity {
/**
* 订单ID主键
*/
private String orderId;
private Long orderId;
/**
* 订单编号

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -28,7 +28,7 @@ public class CrmOrderVo extends BaseEntity {
*/
@ExcelProperty(value = "订单ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private String orderId;
private Long orderId;
/**
* 订单编号

View File

@@ -98,7 +98,7 @@ public class CrmSalesReportVo {
/**
* 订单ID
*/
private String orderId;
private Long orderId;
/**
* 订单编号

View File

@@ -21,5 +21,5 @@ public interface CrmOrderItemMapper extends BaseMapperPlus<CrmOrderItemMapper, C
* @param orderIds 订单ID列表
* @return 订单明细列表
*/
List<CrmOrderItem> selectOrderItemsByOrderIds(@Param("orderIds") List<String> orderIds);
List<CrmOrderItem> selectOrderItemsByOrderIds(@Param("orderIds") List<Long> orderIds);
}

View File

@@ -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<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId);
/**
* 根据合同ID查询发货单配卷
*/
List<WmsMaterialCoilVo> queryCoilsByContractId(Long contractId);
}

View File

@@ -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<CrmOrderItem> buildQueryWrapper(CrmOrderItemBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<CrmOrderItem> 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<String> 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<String> orderIds = orders.stream()
.map(CrmOrder::getOrderId)
.collect(Collectors.toList());
List<Long> orderIds = orders.stream()
.map(CrmOrder::getOrderId)
.collect(Collectors.toList());
LambdaQueryWrapper<CrmSalesObjection> objectionWrapper = new LambdaQueryWrapper<>();
objectionWrapper.in(CrmSalesObjection::getOrderId, orderIds);
@@ -158,12 +167,86 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
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()));
receivableWrapper.in(WmsReceivable::getOrderId, orderIds);
List<WmsReceivableVo> receivableList = wmsReceivableMapper.selectVoList(receivableWrapper);
result.setReceivableList(receivableList);
return result;
}
@Override
public List<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId) {
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper = new LambdaQueryWrapper<>();
waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, orderId);
List<WmsDeliveryWaybill> waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper);
if (waybills == null || waybills.isEmpty()) {
return Collections.emptyList();
}
List<Long> waybillIds = waybills.stream()
.map(WmsDeliveryWaybill::getWaybillId)
.collect(Collectors.toList());
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper = new LambdaQueryWrapper<>();
detailWrapper.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds);
List<WmsDeliveryWaybillDetail> 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<WmsMaterialCoilVo> queryCoilsByContractId(Long contractId) {
LambdaQueryWrapper<CrmOrder> orderWrapper = new LambdaQueryWrapper<>();
orderWrapper.eq(CrmOrder::getContractId, contractId);
List<CrmOrder> orders = crmOrderMapper.selectList(orderWrapper);
if (orders == null || orders.isEmpty()) {
return Collections.emptyList();
}
List<Long> orderIds = orders.stream()
.map(CrmOrder::getOrderId)
.collect(Collectors.toList());
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper = new LambdaQueryWrapper<>();
waybillWrapper.in(WmsDeliveryWaybill::getOrderId, orderIds);
List<WmsDeliveryWaybill> waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper);
if (waybills == null || waybills.isEmpty()) {
return Collections.emptyList();
}
List<Long> waybillIds = waybills.stream()
.map(WmsDeliveryWaybill::getWaybillId)
.collect(Collectors.toList());
LambdaQueryWrapper<WmsDeliveryWaybillDetail> detailWrapper = new LambdaQueryWrapper<>();
detailWrapper.in(WmsDeliveryWaybillDetail::getWaybillId, waybillIds);
List<WmsDeliveryWaybillDetail> 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);
}
}

View File

@@ -59,7 +59,7 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService {
List<CrmSalesReportVo.OrderDetail> orderDetails = baseMapper.selectOrderDetailList(bo);
if (StringUtils.isNotNull(orderDetails) && !orderDetails.isEmpty()) {
// 提取所有订单ID
List<String> orderIds = orderDetails.stream()
List<Long> orderIds = orderDetails.stream()
.map(CrmSalesReportVo.OrderDetail::getOrderId)
.filter(StringUtils::isNotNull)
.distinct()
@@ -70,7 +70,7 @@ public class CrmSalesReportServiceImpl implements ICrmSalesReportService {
List<CrmOrderItem> orderItems = crmOrderItemMapper.selectOrderItemsByOrderIds(orderIds);
// 将明细按订单ID分组
Map<String, List<CrmOrderItem>> orderItemMap = orderItems.stream()
Map<Long, List<CrmOrderItem>> orderItemMap = orderItems.stream()
.collect(Collectors.groupingBy(CrmOrderItem::getOrderId));
// 为每个订单设置对应的明细列表