refactor(crm): 统一配卷查询接口并增加筛选功能

- 将所有配卷查询接口统一为POST + Body BO方式
- 为配卷查询添加钢卷号、材料类型、质量状态、发货状态筛选条件
- 在合同详情页面为生产成果和发货配卷添加筛选表单
- 在订单页面为发货配卷添加筛选功能
- 在销售员页面为生产成果和计划发货添加筛选功能
- 更新异议管理页面的配卷查询参数结构
- 增加订单ID参数用于合同ID相关查询的兼容性处理
This commit is contained in:
2026-07-09 19:01:36 +08:00
parent 2d44ebaaed
commit 002ac3f3ab
17 changed files with 561 additions and 160 deletions

View File

@@ -25,8 +25,12 @@ import com.klp.crm.domain.vo.CrmOrderItemVo;
import com.klp.crm.domain.vo.CrmOrderItemExportVo;
import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
import com.klp.crm.domain.bo.CrmOrderItemBo;
import com.klp.crm.domain.bo.OrderCoilQueryBo;
import com.klp.crm.domain.bo.SalesmanCoilQueryBo;
import com.klp.crm.domain.bo.ContractCoilQueryBo;
import com.klp.crm.service.ICrmOrderItemService;
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import com.klp.common.core.page.TableDataInfo;
/**
@@ -134,19 +138,63 @@ public class CrmOrderItemController extends BaseController {
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByContractId(contractId));
}
// 根据订单id查询发货单据中的配卷分页
@GetMapping("/coils/order/{orderId}")
public TableDataInfo<WmsMaterialCoilVo> getCoilsByOrderId(@NotNull(message = "订单ID不能为空")
@PathVariable Long orderId,
PageQuery pageQuery) {
return iCrmOrderItemService.queryCoilsByOrderId(orderId, pageQuery);
// ==================== 钢卷查询(统一使用 POST + RequestBody BO ====================
/**
* 根据订单ID分页查询发货配卷支持钢卷信息筛选
*/
@PostMapping("/coils/order/query")
public TableDataInfo<WmsMaterialCoilVo> getCoilsByOrderId(@RequestBody @Validated OrderCoilQueryBo bo) {
return iCrmOrderItemService.queryCoilsByOrderId(bo.getOrderId(), toPageQuery(bo), bo.getCoilBo());
}
/**
* 根据销售员分页查询生产成果,支持钢卷信息筛选
*/
@PostMapping("/coils/salesman/query")
public TableDataInfo<WmsMaterialCoilVo> getCoilsBySalesman(@RequestBody @Validated SalesmanCoilQueryBo bo) {
return iCrmOrderItemService.queryCoilsBySalesman(bo.getSalesman(), toPageQuery(bo), bo.getCoilBo());
}
/**
* 根据合同ID分页查询生产成果支持钢卷信息筛选
*/
@PostMapping("/coils/contract/query")
public TableDataInfo<WmsMaterialCoilVo> getCoilsByContractIdPaginated(@RequestBody @Validated ContractCoilQueryBo bo) {
return iCrmOrderItemService.queryCoilsByContractIdPaginated(bo.getOrderId(), toPageQuery(bo), bo.getCoilBo());
}
/**
* 根据订单ID统计配卷汇总支持钢卷信息筛选
*/
@PostMapping("/coils/order/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsByOrderIdStatistics(@RequestBody @Validated OrderCoilQueryBo bo) {
return R.ok(iCrmOrderItemService.queryCoilsByOrderIdStatistics(bo.getOrderId(), bo.getCoilBo()));
}
/**
* 根据销售员统计生产成果汇总,支持钢卷信息筛选
*/
@PostMapping("/coils/salesman/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsBySalesmanStatistics(@RequestBody @Validated SalesmanCoilQueryBo bo) {
return R.ok(iCrmOrderItemService.queryCoilsBySalesmanStatistics(bo.getSalesman(), bo.getCoilBo()));
}
/**
* 根据合同ID统计生产成果汇总支持钢卷信息筛选
*/
@PostMapping("/coils/contract/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsByContractIdStatistics(@RequestBody @Validated ContractCoilQueryBo bo) {
return R.ok(iCrmOrderItemService.queryCoilsByContractIdStatistics(bo.getOrderId(), bo.getCoilBo()));
}
// ==================== 已有接口 ====================
// 根据合同id查询发货单据中的配卷。
@GetMapping("/coils/contract/{contractId}")
public R<List<WmsMaterialCoilVo>> getCoilsByContractId(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryCoilsByContractId(contractId));
@PathVariable Long orderId) {
return R.ok(iCrmOrderItemService.queryCoilsByContractId(orderId));
}
// 根据客户id查询该客户下属订单关联的异议和财务信息。
@@ -163,38 +211,16 @@ public class CrmOrderItemController extends BaseController {
return R.ok(iCrmOrderItemService.queryCoilsByCustomerId(customerId));
}
// 根据销售员查询生产成果(钢卷列表),分页
@GetMapping("/coils/bySalesman")
public TableDataInfo<WmsMaterialCoilVo> getCoilsBySalesman(@RequestParam String salesman,
PageQuery pageQuery) {
return iCrmOrderItemService.queryCoilsBySalesman(salesman, pageQuery);
}
// ==================== 私有辅助方法 ====================
// 根据合同ID查询生产成果钢卷列表分页
@GetMapping("/coils/byContract/{contractId}")
public TableDataInfo<WmsMaterialCoilVo> getCoilsByContractIdPaginated(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId,
PageQuery pageQuery) {
return iCrmOrderItemService.queryCoilsByContractIdPaginated(contractId, pageQuery);
}
private PageQuery toPageQuery(OrderCoilQueryBo bo) { return buildPageQuery(bo.getPageNum(), bo.getPageSize()); }
private PageQuery toPageQuery(SalesmanCoilQueryBo bo) { return buildPageQuery(bo.getPageNum(), bo.getPageSize()); }
private PageQuery toPageQuery(ContractCoilQueryBo bo) { return buildPageQuery(bo.getPageNum(), bo.getPageSize()); }
// 根据订单ID统计配卷汇总
@GetMapping("/coils/order/{orderId}/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsByOrderIdStatistics(@NotNull(message = "订单ID不能为空")
@PathVariable Long orderId) {
return R.ok(iCrmOrderItemService.queryCoilsByOrderIdStatistics(orderId));
}
// 根据销售员统计生产成果汇总
@GetMapping("/coils/bySalesman/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsBySalesmanStatistics(@RequestParam String salesman) {
return R.ok(iCrmOrderItemService.queryCoilsBySalesmanStatistics(salesman));
}
// 根据合同ID统计生产成果汇总
@GetMapping("/coils/byContract/{contractId}/statistics")
public R<java.util.Map<String, java.math.BigDecimal>> getCoilsByContractIdStatistics(@NotNull(message = "合同ID不能为空")
@PathVariable Long contractId) {
return R.ok(iCrmOrderItemService.queryCoilsByContractIdStatistics(contractId));
private PageQuery buildPageQuery(Integer pageNum, Integer pageSize) {
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(pageNum);
pageQuery.setPageSize(pageSize);
return pageQuery;
}
}

View File

@@ -0,0 +1,31 @@
package com.klp.crm.domain.bo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 合同钢卷查询请求对象
*
* @author klp
* @date 2026-07-09
*/
@Data
public class ContractCoilQueryBo implements Serializable {
private static final long serialVersionUID = 1L;
/** 合同ID必填 */
@NotNull(message = "合同ID不能为空")
private Long orderId;
/** 分页页码 */
private Integer pageNum;
/** 分页大小 */
private Integer pageSize;
/** 钢卷筛选条件 */
private WmsMaterialCoilBo coilBo;
}

View File

@@ -0,0 +1,31 @@
package com.klp.crm.domain.bo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 订单钢卷查询请求对象
*
* @author klp
* @date 2026-07-09
*/
@Data
public class OrderCoilQueryBo implements Serializable {
private static final long serialVersionUID = 1L;
/** 订单ID必填 */
@NotNull(message = "订单ID不能为空")
private Long orderId;
/** 分页页码 */
private Integer pageNum;
/** 分页大小 */
private Integer pageSize;
/** 钢卷筛选条件 */
private WmsMaterialCoilBo coilBo;
}

View File

@@ -0,0 +1,31 @@
package com.klp.crm.domain.bo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 销售员钢卷查询请求对象
*
* @author klp
* @date 2026-07-09
*/
@Data
public class SalesmanCoilQueryBo implements Serializable {
private static final long serialVersionUID = 1L;
/** 销售员(必填) */
@NotBlank(message = "销售员不能为空")
private String salesman;
/** 分页页码 */
private Integer pageNum;
/** 分页大小 */
private Integer pageSize;
/** 钢卷筛选条件 */
private WmsMaterialCoilBo coilBo;
}

View File

@@ -11,6 +11,7 @@ import java.util.List;
import com.klp.crm.domain.vo.CrmContractOrderFinanceVo;
import com.klp.domain.vo.WmsMaterialCoilVo;
import com.klp.domain.bo.WmsMaterialCoilBo;
import java.util.List;
/**
@@ -59,12 +60,12 @@ public interface ICrmOrderItemService {
/**
* 根据订单ID查询发货单配卷分页
*/
TableDataInfo<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId, PageQuery pageQuery);
TableDataInfo<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId, PageQuery pageQuery, WmsMaterialCoilBo coilBo);
/**
* 根据合同ID查询发货单配卷
*/
List<WmsMaterialCoilVo> queryCoilsByContractId(Long contractId);
List<WmsMaterialCoilVo> queryCoilsByContractId(Long orderId);
/**
* 根据客户ID查询下属订单的异议和财务信息
@@ -79,25 +80,25 @@ public interface ICrmOrderItemService {
/**
* 根据销售员查询生产成果(钢卷列表)分页
*/
TableDataInfo<WmsMaterialCoilVo> queryCoilsBySalesman(String salesman, PageQuery pageQuery);
TableDataInfo<WmsMaterialCoilVo> queryCoilsBySalesman(String salesman, PageQuery pageQuery, WmsMaterialCoilBo coilBo);
/**
* 根据合同ID查询生产成果钢卷列表分页
*/
TableDataInfo<WmsMaterialCoilVo> queryCoilsByContractIdPaginated(Long contractId, PageQuery pageQuery);
TableDataInfo<WmsMaterialCoilVo> queryCoilsByContractIdPaginated(Long orderId, PageQuery pageQuery, WmsMaterialCoilBo coilBo);
/**
* 根据订单ID统计配卷汇总数据数量、毛重、净重
*/
java.util.Map<String, java.math.BigDecimal> queryCoilsByOrderIdStatistics(Long orderId);
java.util.Map<String, java.math.BigDecimal> queryCoilsByOrderIdStatistics(Long orderId, WmsMaterialCoilBo coilBo);
/**
* 根据销售员统计生产成果汇总数据(数量、毛重、净重)
*/
java.util.Map<String, java.math.BigDecimal> queryCoilsBySalesmanStatistics(String salesman);
java.util.Map<String, java.math.BigDecimal> queryCoilsBySalesmanStatistics(String salesman, WmsMaterialCoilBo coilBo);
/**
* 根据合同ID统计生产成果汇总数据数量、毛重、净重
*/
java.util.Map<String, java.math.BigDecimal> queryCoilsByContractIdStatistics(Long contractId);
java.util.Map<String, java.math.BigDecimal> queryCoilsByContractIdStatistics(Long orderId, WmsMaterialCoilBo coilBo);
}

View File

@@ -260,21 +260,21 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
}
@Override
public CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long contractId) {
public CrmContractOrderFinanceVo queryFinanceAndObjectionByContractId(Long orderId) {
CrmContractOrderFinanceVo result = new CrmContractOrderFinanceVo();
LambdaQueryWrapper<CrmSalesObjection> objectionWrapper = new LambdaQueryWrapper<>();
objectionWrapper.in(CrmSalesObjection::getOrderId, contractId);
objectionWrapper.in(CrmSalesObjection::getOrderId, orderId);
List<CrmSalesObjectionVo> objectionList = crmSalesObjectionMapper.selectVoList(objectionWrapper);
result.setObjectionList(objectionList);
LambdaQueryWrapper<com.klp.domain.WmsReceivable> receivableWrapper = new LambdaQueryWrapper<>();
receivableWrapper.in(WmsReceivable::getOrderId, contractId);
receivableWrapper.in(WmsReceivable::getOrderId, orderId);
List<WmsReceivableVo> receivableList = wmsReceivableMapper.selectVoList(receivableWrapper);
result.setReceivableList(receivableList);
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper = new LambdaQueryWrapper<>();
waybillWrapper.in(WmsDeliveryWaybill::getOrderId, contractId);
waybillWrapper.in(WmsDeliveryWaybill::getOrderId, orderId);
List<WmsDeliveryWaybillVo> wmsDeliveryWaybills = wmsDeliveryWaybillMapper.selectVoList(waybillWrapper);
result.setWmsDeliveryWaybills(wmsDeliveryWaybills);
@@ -345,9 +345,9 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
* 根据合同ID解析关联的线圈ID串通过crm_order→wms_coil_contract_rel
* @return 逗号分隔的coilId字符串无数据返回null
*/
private String resolveCoilIdsByContractId(Long contractId) {
private String resolveCoilIdsByContractId(Long orderId) {
LambdaQueryWrapper<WmsCoilContractRel> relWrapper = new LambdaQueryWrapper<>();
relWrapper.eq(WmsCoilContractRel::getContractId, contractId);
relWrapper.eq(WmsCoilContractRel::getContractId, orderId);
relWrapper.eq(WmsCoilContractRel::getDelFlag, 0);
List<WmsCoilContractRel> rels = coilContractRelMapper.selectList(relWrapper);
if (rels == null || rels.isEmpty()) {
@@ -363,34 +363,40 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
// ==================== 分页列表查询 ====================
@Override
public TableDataInfo<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId, PageQuery pageQuery) {
public TableDataInfo<WmsMaterialCoilVo> queryCoilsByOrderId(Long orderId, PageQuery pageQuery, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsByOrderId(orderId);
if (coilIds == null) {
return new TableDataInfo<>();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.queryPageList(coilBo, pageQuery);
}
@Override
public TableDataInfo<WmsMaterialCoilVo> queryCoilsBySalesman(String salesman, PageQuery pageQuery) {
public TableDataInfo<WmsMaterialCoilVo> queryCoilsBySalesman(String salesman, PageQuery pageQuery, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsBySalesman(salesman);
if (coilIds == null) {
return new TableDataInfo<>();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.queryPageList(coilBo, pageQuery);
}
@Override
public TableDataInfo<WmsMaterialCoilVo> queryCoilsByContractIdPaginated(Long contractId, PageQuery pageQuery) {
public TableDataInfo<WmsMaterialCoilVo> queryCoilsByContractIdPaginated(Long contractId, PageQuery pageQuery, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsByContractId(contractId);
if (coilIds == null) {
return new TableDataInfo<>();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.queryPageList(coilBo, pageQuery);
}
@@ -398,34 +404,40 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
// ==================== 统计汇总查询 ====================
@Override
public Map<String, java.math.BigDecimal> queryCoilsByOrderIdStatistics(Long orderId) {
public Map<String, java.math.BigDecimal> queryCoilsByOrderIdStatistics(Long orderId, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsByOrderId(orderId);
if (coilIds == null) {
return emptyStatistics();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.getStatistics(coilBo);
}
@Override
public Map<String, java.math.BigDecimal> queryCoilsBySalesmanStatistics(String salesman) {
public Map<String, java.math.BigDecimal> queryCoilsBySalesmanStatistics(String salesman, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsBySalesman(salesman);
if (coilIds == null) {
return emptyStatistics();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.getStatistics(coilBo);
}
@Override
public Map<String, java.math.BigDecimal> queryCoilsByContractIdStatistics(Long contractId) {
String coilIds = resolveCoilIdsByContractId(contractId);
public Map<String, java.math.BigDecimal> queryCoilsByContractIdStatistics(Long orderId, WmsMaterialCoilBo coilBo) {
String coilIds = resolveCoilIdsByContractId(orderId);
if (coilIds == null) {
return emptyStatistics();
}
WmsMaterialCoilBo coilBo = new WmsMaterialCoilBo();
if (coilBo == null) {
coilBo = new WmsMaterialCoilBo();
}
coilBo.setCoilIds(coilIds);
return iWmsMaterialCoilService.getStatistics(coilBo);
}
@@ -433,10 +445,10 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService {
// ==================== 已有方法(非分页) ====================
@Override
public List<WmsMaterialCoilVo> queryCoilsByContractId(Long contractId) {
public List<WmsMaterialCoilVo> queryCoilsByContractId(Long orderId) {
LambdaQueryWrapper<WmsDeliveryWaybill> waybillWrapper = new LambdaQueryWrapper<>();
waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, contractId);
waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, orderId);
List<WmsDeliveryWaybill> waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper);
if (waybills == null || waybills.isEmpty()) {
return Collections.emptyList();