From 002ac3f3ab6aa7424fa10c50cad517b0ae8bf267 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 9 Jul 2026 19:01:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(crm):=20=E7=BB=9F=E4=B8=80=E9=85=8D?= =?UTF-8?q?=E5=8D=B7=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=B9=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=AD=9B=E9=80=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将所有配卷查询接口统一为POST + Body BO方式 - 为配卷查询添加钢卷号、材料类型、质量状态、发货状态筛选条件 - 在合同详情页面为生产成果和发货配卷添加筛选表单 - 在订单页面为发货配卷添加筛选功能 - 在销售员页面为生产成果和计划发货添加筛选功能 - 更新异议管理页面的配卷查询参数结构 - 增加订单ID参数用于合同ID相关查询的兼容性处理 --- .../controller/CrmOrderItemController.java | 104 +++++++++++------- .../crm/domain/bo/ContractCoilQueryBo.java | 31 ++++++ .../klp/crm/domain/bo/OrderCoilQueryBo.java | 31 ++++++ .../crm/domain/bo/SalesmanCoilQueryBo.java | 31 ++++++ .../klp/crm/service/ICrmOrderItemService.java | 15 +-- .../service/impl/CrmOrderItemServiceImpl.java | 54 +++++---- klp-ui/src/api/crm/coil.js | 86 ++++++++------- klp-ui/src/api/crm/order.js | 11 +- klp-ui/src/api/wms/deliveryWaybillDetail.js | 8 +- .../views/crm/components/OrderObjection.vue | 4 +- .../crm/contract/components/ContractTabs.vue | 94 +++++++++++++++- klp-ui/src/views/crm/objection/index.vue | 6 +- klp-ui/src/views/crm/order/index.vue | 39 ++++++- klp-ui/src/views/crm/saleman/index.vue | 97 ++++++++++++++-- klp-ui/src/views/wms/post/aps/orderTrack.vue | 47 +++++++- .../WmsDeliveryWaybillDetailController.java | 35 +++--- .../klp/domain/bo/PrincipalCoilQueryBo.java | 28 +++++ 17 files changed, 561 insertions(+), 160 deletions(-) create mode 100644 klp-crm/src/main/java/com/klp/crm/domain/bo/ContractCoilQueryBo.java create mode 100644 klp-crm/src/main/java/com/klp/crm/domain/bo/OrderCoilQueryBo.java create mode 100644 klp-crm/src/main/java/com/klp/crm/domain/bo/SalesmanCoilQueryBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/PrincipalCoilQueryBo.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 610aaedbd..43fcfc6d2 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 @@ -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 getCoilsByOrderId(@NotNull(message = "订单ID不能为空") - @PathVariable Long orderId, - PageQuery pageQuery) { - return iCrmOrderItemService.queryCoilsByOrderId(orderId, pageQuery); + // ==================== 钢卷查询(统一使用 POST + RequestBody BO) ==================== + + /** + * 根据订单ID分页查询发货配卷,支持钢卷信息筛选 + */ + @PostMapping("/coils/order/query") + public TableDataInfo getCoilsByOrderId(@RequestBody @Validated OrderCoilQueryBo bo) { + return iCrmOrderItemService.queryCoilsByOrderId(bo.getOrderId(), toPageQuery(bo), bo.getCoilBo()); } + /** + * 根据销售员分页查询生产成果,支持钢卷信息筛选 + */ + @PostMapping("/coils/salesman/query") + public TableDataInfo getCoilsBySalesman(@RequestBody @Validated SalesmanCoilQueryBo bo) { + return iCrmOrderItemService.queryCoilsBySalesman(bo.getSalesman(), toPageQuery(bo), bo.getCoilBo()); + } + + /** + * 根据合同ID分页查询生产成果,支持钢卷信息筛选 + */ + @PostMapping("/coils/contract/query") + public TableDataInfo getCoilsByContractIdPaginated(@RequestBody @Validated ContractCoilQueryBo bo) { + return iCrmOrderItemService.queryCoilsByContractIdPaginated(bo.getOrderId(), toPageQuery(bo), bo.getCoilBo()); + } + + /** + * 根据订单ID统计配卷汇总,支持钢卷信息筛选 + */ + @PostMapping("/coils/order/statistics") + public R> getCoilsByOrderIdStatistics(@RequestBody @Validated OrderCoilQueryBo bo) { + return R.ok(iCrmOrderItemService.queryCoilsByOrderIdStatistics(bo.getOrderId(), bo.getCoilBo())); + } + + /** + * 根据销售员统计生产成果汇总,支持钢卷信息筛选 + */ + @PostMapping("/coils/salesman/statistics") + public R> getCoilsBySalesmanStatistics(@RequestBody @Validated SalesmanCoilQueryBo bo) { + return R.ok(iCrmOrderItemService.queryCoilsBySalesmanStatistics(bo.getSalesman(), bo.getCoilBo())); + } + + /** + * 根据合同ID统计生产成果汇总,支持钢卷信息筛选 + */ + @PostMapping("/coils/contract/statistics") + public R> getCoilsByContractIdStatistics(@RequestBody @Validated ContractCoilQueryBo bo) { + return R.ok(iCrmOrderItemService.queryCoilsByContractIdStatistics(bo.getOrderId(), bo.getCoilBo())); + } + + // ==================== 已有接口 ==================== + // 根据合同id查询发货单据中的配卷。 @GetMapping("/coils/contract/{contractId}") public R> 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 getCoilsBySalesman(@RequestParam String salesman, - PageQuery pageQuery) { - return iCrmOrderItemService.queryCoilsBySalesman(salesman, pageQuery); - } + // ==================== 私有辅助方法 ==================== - // 根据合同ID查询生产成果(钢卷列表),分页 - @GetMapping("/coils/byContract/{contractId}") - public TableDataInfo 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> getCoilsByOrderIdStatistics(@NotNull(message = "订单ID不能为空") - @PathVariable Long orderId) { - return R.ok(iCrmOrderItemService.queryCoilsByOrderIdStatistics(orderId)); - } - - // 根据销售员统计生产成果汇总 - @GetMapping("/coils/bySalesman/statistics") - public R> getCoilsBySalesmanStatistics(@RequestParam String salesman) { - return R.ok(iCrmOrderItemService.queryCoilsBySalesmanStatistics(salesman)); - } - - // 根据合同ID统计生产成果汇总 - @GetMapping("/coils/byContract/{contractId}/statistics") - public R> 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; } } diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/ContractCoilQueryBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/ContractCoilQueryBo.java new file mode 100644 index 000000000..63f2598c4 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/ContractCoilQueryBo.java @@ -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; +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/OrderCoilQueryBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/OrderCoilQueryBo.java new file mode 100644 index 000000000..881271161 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/OrderCoilQueryBo.java @@ -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; +} diff --git a/klp-crm/src/main/java/com/klp/crm/domain/bo/SalesmanCoilQueryBo.java b/klp-crm/src/main/java/com/klp/crm/domain/bo/SalesmanCoilQueryBo.java new file mode 100644 index 000000000..a540551f0 --- /dev/null +++ b/klp-crm/src/main/java/com/klp/crm/domain/bo/SalesmanCoilQueryBo.java @@ -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; +} 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 29d312fb1..99c574640 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 @@ -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 queryCoilsByOrderId(Long orderId, PageQuery pageQuery); + TableDataInfo queryCoilsByOrderId(Long orderId, PageQuery pageQuery, WmsMaterialCoilBo coilBo); /** * 根据合同ID查询发货单配卷 */ - List queryCoilsByContractId(Long contractId); + List queryCoilsByContractId(Long orderId); /** * 根据客户ID查询下属订单的异议和财务信息 @@ -79,25 +80,25 @@ public interface ICrmOrderItemService { /** * 根据销售员查询生产成果(钢卷列表)分页 */ - TableDataInfo queryCoilsBySalesman(String salesman, PageQuery pageQuery); + TableDataInfo queryCoilsBySalesman(String salesman, PageQuery pageQuery, WmsMaterialCoilBo coilBo); /** * 根据合同ID查询生产成果(钢卷列表)分页 */ - TableDataInfo queryCoilsByContractIdPaginated(Long contractId, PageQuery pageQuery); + TableDataInfo queryCoilsByContractIdPaginated(Long orderId, PageQuery pageQuery, WmsMaterialCoilBo coilBo); /** * 根据订单ID统计配卷汇总数据(数量、毛重、净重) */ - java.util.Map queryCoilsByOrderIdStatistics(Long orderId); + java.util.Map queryCoilsByOrderIdStatistics(Long orderId, WmsMaterialCoilBo coilBo); /** * 根据销售员统计生产成果汇总数据(数量、毛重、净重) */ - java.util.Map queryCoilsBySalesmanStatistics(String salesman); + java.util.Map queryCoilsBySalesmanStatistics(String salesman, WmsMaterialCoilBo coilBo); /** * 根据合同ID统计生产成果汇总数据(数量、毛重、净重) */ - java.util.Map queryCoilsByContractIdStatistics(Long contractId); + java.util.Map queryCoilsByContractIdStatistics(Long orderId, WmsMaterialCoilBo coilBo); } 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 d6a6d6346..8029bad84 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 @@ -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 objectionWrapper = new LambdaQueryWrapper<>(); - objectionWrapper.in(CrmSalesObjection::getOrderId, contractId); + objectionWrapper.in(CrmSalesObjection::getOrderId, orderId); List objectionList = crmSalesObjectionMapper.selectVoList(objectionWrapper); result.setObjectionList(objectionList); LambdaQueryWrapper receivableWrapper = new LambdaQueryWrapper<>(); - receivableWrapper.in(WmsReceivable::getOrderId, contractId); + receivableWrapper.in(WmsReceivable::getOrderId, orderId); List receivableList = wmsReceivableMapper.selectVoList(receivableWrapper); result.setReceivableList(receivableList); LambdaQueryWrapper waybillWrapper = new LambdaQueryWrapper<>(); - waybillWrapper.in(WmsDeliveryWaybill::getOrderId, contractId); + waybillWrapper.in(WmsDeliveryWaybill::getOrderId, orderId); List 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 relWrapper = new LambdaQueryWrapper<>(); - relWrapper.eq(WmsCoilContractRel::getContractId, contractId); + relWrapper.eq(WmsCoilContractRel::getContractId, orderId); relWrapper.eq(WmsCoilContractRel::getDelFlag, 0); List rels = coilContractRelMapper.selectList(relWrapper); if (rels == null || rels.isEmpty()) { @@ -363,34 +363,40 @@ public class CrmOrderItemServiceImpl implements ICrmOrderItemService { // ==================== 分页列表查询 ==================== @Override - public TableDataInfo queryCoilsByOrderId(Long orderId, PageQuery pageQuery) { + public TableDataInfo 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 queryCoilsBySalesman(String salesman, PageQuery pageQuery) { + public TableDataInfo 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 queryCoilsByContractIdPaginated(Long contractId, PageQuery pageQuery) { + public TableDataInfo 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 queryCoilsByOrderIdStatistics(Long orderId) { + public Map 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 queryCoilsBySalesmanStatistics(String salesman) { + public Map 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 queryCoilsByContractIdStatistics(Long contractId) { - String coilIds = resolveCoilIdsByContractId(contractId); + public Map 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 queryCoilsByContractId(Long contractId) { + public List queryCoilsByContractId(Long orderId) { LambdaQueryWrapper waybillWrapper = new LambdaQueryWrapper<>(); - waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, contractId); + waybillWrapper.eq(WmsDeliveryWaybill::getOrderId, orderId); List waybills = wmsDeliveryWaybillMapper.selectList(waybillWrapper); if (waybills == null || waybills.isEmpty()) { return Collections.emptyList(); diff --git a/klp-ui/src/api/crm/coil.js b/klp-ui/src/api/crm/coil.js index 2763424c6..78ac5394a 100644 --- a/klp-ui/src/api/crm/coil.js +++ b/klp-ui/src/api/crm/coil.js @@ -1,6 +1,6 @@ import request from '@/utils/request' -// ==================== 配卷列表查询 ==================== +// ==================== 配卷列表查询(统一 POST + Body BO) ==================== // 指定客户的发货配卷列表 export function listDeliveryCoilsByCustomer(customerId) { @@ -10,74 +10,76 @@ export function listDeliveryCoilsByCustomer(customerId) { }) } -// 指定合同的发货配卷列表(分页) -export function listDeliveryCoilsByOrder(orderId, query) { +// 根据订单ID分页查询发货配卷 +export function listDeliveryCoilsByOrder(queryBo) { return request({ - url: `/crm/orderItem/coils/order/${orderId}`, - method: 'get', - params: query + url: '/crm/orderItem/coils/order/query', + method: 'post', + data: queryBo }) } -// 指定销售员的发货配卷列表(分页) -export function listDeliveryCoilsByPrincipal(query) { +// 根据销售员分页查询生产成果 +export function listProductCoilsBySalesman(queryBo) { + return request({ + url: '/crm/orderItem/coils/salesman/query', + method: 'post', + data: queryBo + }) +} + +// 根据合同ID分页查询生产成果 +export function listProductCoilsByContract(queryBo) { + return request({ + url: '/crm/orderItem/coils/contract/query', + method: 'post', + data: queryBo + }) +} + +// 指定负责人的计划发货配卷列表(分页) +export function listDeliveryCoilsByPrincipal(queryBo) { return request({ url: '/wms/deliveryWaybillDetail/coilListByPrincipal', - method: 'get', - params: query + method: 'post', + data: queryBo }) } -// 指定销售员的生产成果列表(分页) -export function listProductCoilsBySalesman(query) { - return request({ - url: '/crm/orderItem/coils/bySalesman', - method: 'get', - params: query - }) -} - -// 指定合同的生产成果列表(分页) -export function listProductCoilsByContract(contractId, query) { - return request({ - url: `/crm/orderItem/coils/byContract/${contractId}`, - method: 'get', - params: query - }) -} - -// ==================== 配卷统计汇总 ==================== +// ==================== 配卷统计汇总(统一 POST + Body BO) ==================== // 根据订单ID统计发货配卷汇总 -export function getDeliveryCoilsStatisticsByOrder(orderId) { +export function getDeliveryCoilsStatisticsByOrder(queryBo) { return request({ - url: `/crm/orderItem/coils/order/${orderId}/statistics`, - method: 'get' + url: '/crm/orderItem/coils/order/statistics', + method: 'post', + data: queryBo }) } // 根据销售员统计生产成果汇总 -export function getProductCoilsStatisticsBySalesman(salesman) { +export function getProductCoilsStatisticsBySalesman(queryBo) { return request({ - url: '/crm/orderItem/coils/bySalesman/statistics', - method: 'get', - params: { salesman } + url: '/crm/orderItem/coils/salesman/statistics', + method: 'post', + data: queryBo }) } // 根据合同ID统计生产成果汇总 -export function getProductCoilsStatisticsByContract(contractId) { +export function getProductCoilsStatisticsByContract(queryBo) { return request({ - url: `/crm/orderItem/coils/byContract/${contractId}/statistics`, - method: 'get' + url: '/crm/orderItem/coils/contract/statistics', + method: 'post', + data: queryBo }) } // 根据负责人统计发货配卷汇总 -export function getDeliveryCoilsStatisticsByPrincipal(principal) { +export function getDeliveryCoilsStatisticsByPrincipal(queryBo) { return request({ url: '/wms/deliveryWaybillDetail/coilListByPrincipal/statistics', - method: 'get', - params: { principal } + method: 'post', + data: queryBo }) } diff --git a/klp-ui/src/api/crm/order.js b/klp-ui/src/api/crm/order.js index 428fb2cc8..60fcdd49b 100644 --- a/klp-ui/src/api/crm/order.js +++ b/klp-ui/src/api/crm/order.js @@ -44,13 +44,14 @@ export function delOrder(orderId) { } /** - * 查询该订单下的配卷(分页) + * 查询该订单下的配卷(分页),支持钢卷信息筛选 + * @param {object} queryBo - { orderId, pageNum, pageSize, ...钢卷筛选条件 } */ -export function listOrderPackaging(orderId, query) { +export function listOrderPackaging(queryBo) { return request({ - url: `/crm/orderItem/coils/order/${orderId}`, - method: 'get', - params: query + url: '/crm/orderItem/coils/order/query', + method: 'post', + data: queryBo }) } diff --git a/klp-ui/src/api/wms/deliveryWaybillDetail.js b/klp-ui/src/api/wms/deliveryWaybillDetail.js index f90b521b0..789677bc9 100644 --- a/klp-ui/src/api/wms/deliveryWaybillDetail.js +++ b/klp-ui/src/api/wms/deliveryWaybillDetail.js @@ -70,10 +70,10 @@ export function getBoundCoilStatisticsList(query) { } // 按销售员查询订单明细的卷(分页) -export function listDeliveryWaybillDetailBySaleman(query) { +export function listDeliveryWaybillDetailBySaleman(queryBo) { return request({ url: '/wms/deliveryWaybillDetail/coilListByPrincipal', - method: 'get', - params: query + method: 'post', + data: queryBo }) -} \ No newline at end of file +} diff --git a/klp-ui/src/views/crm/components/OrderObjection.vue b/klp-ui/src/views/crm/components/OrderObjection.vue index fd02ad0bf..bc244c2d5 100644 --- a/klp-ui/src/views/crm/components/OrderObjection.vue +++ b/klp-ui/src/views/crm/components/OrderObjection.vue @@ -371,7 +371,7 @@ export default { // 获取订单已发货的钢卷 getShippedCoils() { if (this.orderId) { - listOrderPackaging(this.orderId, { pageNum: 1, pageSize: 10000 }).then(response => { + listOrderPackaging({ orderId: this.orderId, pageNum: 1, pageSize: 10000 }).then(response => { this.shippedCoils = response.rows || []; }).catch(() => { this.shippedCoils = []; @@ -458,7 +458,7 @@ export default { ...this.form, coilIds: this.coilListToCsv(this.formCoilList) }; - + if (this.form.objectionId != null) { updateSalesObjection(formData).then(response => { this.$modal.msgSuccess("修改成功"); diff --git a/klp-ui/src/views/crm/contract/components/ContractTabs.vue b/klp-ui/src/views/crm/contract/components/ContractTabs.vue index 821c22e76..c0677dd13 100644 --- a/klp-ui/src/views/crm/contract/components/ContractTabs.vue +++ b/klp-ui/src/views/crm/contract/components/ContractTabs.vue @@ -59,6 +59,35 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + @@ -205,10 +263,12 @@ export default { productCoilStatistics: {}, productPagination: { total: 0, currentPage: 1, pageSize: 20 }, productCoilLoading: false, + productCoilBo: {}, deliveryCoilList: [], deliveryCoilStatistics: {}, deliveryPagination: { total: 0, currentPage: 1, pageSize: 20 }, deliveryCoilLoading: false, + deliveryCoilBo: {}, }; }, computed: { @@ -302,9 +362,11 @@ export default { }, fetchDeliveryCoils() { this.deliveryCoilLoading = true; - listDeliveryCoilsByOrder(this.orderId, { + listDeliveryCoilsByOrder({ + orderId: this.orderId, pageNum: this.deliveryPagination.currentPage, - pageSize: this.deliveryPagination.pageSize + pageSize: this.deliveryPagination.pageSize, + coilBo: this.deliveryCoilBo }).then(res => { this.deliveryCoilList = res.rows || []; this.deliveryPagination.total = res.total || 0; @@ -314,9 +376,11 @@ export default { }, fetchProductCoils() { this.productCoilLoading = true; - listProductCoilsByContract(this.orderId, { + listProductCoilsByContract({ + contractId: this.orderId, pageNum: this.productPagination.currentPage, - pageSize: this.productPagination.pageSize + pageSize: this.productPagination.pageSize, + coilBo: this.productCoilBo }).then(res => { this.productCoilList = res.rows || []; this.productPagination.total = res.total || 0; @@ -325,15 +389,33 @@ export default { }); }, fetchDeliveryCoilStatistics() { - getDeliveryCoilsStatisticsByOrder(this.orderId).then(res => { + getDeliveryCoilsStatisticsByOrder({ orderId: this.orderId, coilBo: this.deliveryCoilBo }).then(res => { this.deliveryCoilStatistics = res.data || {}; }); }, fetchProductCoilStatistics() { - getProductCoilsStatisticsByContract(this.orderId).then(res => { + getProductCoilsStatisticsByContract({ contractId: this.orderId, coilBo: this.productCoilBo }).then(res => { this.productCoilStatistics = res.data || {}; }); }, + handleProductFilter() { + this.productPagination.currentPage = 1; + this.fetchProductCoils(); + this.fetchProductCoilStatistics(); + }, + resetProductFilter() { + this.productCoilBo = {}; + this.handleProductFilter(); + }, + handleDeliveryFilter() { + this.deliveryPagination.currentPage = 1; + this.fetchDeliveryCoils(); + this.fetchDeliveryCoilStatistics(); + }, + resetDeliveryFilter() { + this.deliveryCoilBo = {}; + this.handleDeliveryFilter(); + }, handleProductPageChange({ currentPage, pageSize }) { this.productPagination.currentPage = currentPage; this.productPagination.pageSize = pageSize; diff --git a/klp-ui/src/views/crm/objection/index.vue b/klp-ui/src/views/crm/objection/index.vue index 961acfdfa..4373fd7d4 100644 --- a/klp-ui/src/views/crm/objection/index.vue +++ b/klp-ui/src/views/crm/objection/index.vue @@ -398,7 +398,7 @@ export default { ...this.form, coilIds: this.coilListToCsv(this.formCoilList) }; - + if (this.form.objectionId != null) { updateSalesObjection(formData).then(response => { this.$modal.msgSuccess("修改成功"); @@ -465,11 +465,11 @@ export default { path: '/wms/coil/' + coil.coilId, }); }, - + // 获取订单已发货的钢卷 getShippedCoils() { if (this.form.orderId) { - listOrderPackaging(this.form.orderId, { pageNum: 1, pageSize: 10000 }).then(response => { + listOrderPackaging({ orderId: this.form.orderId, pageNum: 1, pageSize: 10000 }).then(response => { this.shippedCoils = response.rows || []; }).catch(() => { this.shippedCoils = []; diff --git a/klp-ui/src/views/crm/order/index.vue b/klp-ui/src/views/crm/order/index.vue index 44aae12d1..9c2470d72 100644 --- a/klp-ui/src/views/crm/order/index.vue +++ b/klp-ui/src/views/crm/order/index.vue @@ -86,6 +86,28 @@
+ + + + + + + + + + + + + + + + + + + 查询 + 重置 + +
@@ -227,6 +249,7 @@ export default { customerList: [], contractList: [], coilList: [], + coilBo: {}, deliveryWaybillList: [], } }, @@ -259,10 +282,22 @@ export default { }, /** 查询发货配卷列表 */ getCoilList() { - listOrderPackaging(this.currentOrder.orderId, { pageNum: 1, pageSize: 10000 }).then(response => { + listOrderPackaging({ + orderId: this.currentOrder.orderId, + pageNum: 1, + pageSize: 10000, + coilBo: this.coilBo + }).then(response => { this.coilList = response.rows || []; }); }, + handleCoilFilter() { + this.getCoilList(); + }, + resetCoilFilter() { + this.coilBo = {}; + this.getCoilList(); + }, /** 合同号改变事件 */ handleContractChange(contractId) { const contract = this.contractList.find(item => item.contractId === contractId) @@ -398,4 +433,4 @@ export default { }, } } - \ No newline at end of file + diff --git a/klp-ui/src/views/crm/saleman/index.vue b/klp-ui/src/views/crm/saleman/index.vue index 89ae5b53a..bafe6dac1 100644 --- a/klp-ui/src/views/crm/saleman/index.vue +++ b/klp-ui/src/views/crm/saleman/index.vue @@ -77,14 +77,65 @@
- + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + +
- + + + + + + + + + + + + + + + + + + 查询 + 重置 + + +
@@ -181,6 +232,8 @@ export default { productPagination: { total: 0, currentPage: 1, pageSize: 20 }, // 生产成果统计 productCoilStatistics: {}, + // 生产成果筛选 + productCoilBo: {}, // 生产成果加载 productCoilLoading: false, // 计划发货列表 @@ -189,6 +242,8 @@ export default { deliveryPagination: { total: 0, currentPage: 1, pageSize: 20 }, // 计划发货统计 deliveryCoilStatistics: {}, + // 计划发货筛选 + deliveryCoilBo: {}, // 计划发货加载 deliveryCoilLoading: false, // 发货单据列表 @@ -292,7 +347,7 @@ export default { return Promise.resolve(); } this.rightLoading = true; - + switch (tabName) { case 'customer': return listCustomer({ @@ -349,9 +404,10 @@ export default { fetchProductCoils(salesman) { this.productCoilLoading = true; return listProductCoilsBySalesman({ - salesman: salesman, + salesman, pageNum: this.productPagination.currentPage, - pageSize: this.productPagination.pageSize + pageSize: this.productPagination.pageSize, + coilBo: this.productCoilBo }).then(res => { this.productList = res.rows || []; this.productPagination.total = res.total || 0; @@ -364,16 +420,28 @@ export default { }); }, fetchProductCoilStatistics(salesman) { - getProductCoilsStatisticsBySalesman(salesman).then(res => { + getProductCoilsStatisticsBySalesman({ salesman, coilBo: this.productCoilBo }).then(res => { this.productCoilStatistics = res.data || {}; }); }, + handleProductFilter() { + this.productPagination.currentPage = 1; + if (this.selectedItem) { + this.fetchProductCoils(this.selectedItem.dictValue); + this.fetchProductCoilStatistics(this.selectedItem.dictValue); + } + }, + resetProductFilter() { + this.productCoilBo = {}; + this.handleProductFilter(); + }, fetchDeliveryCoils(principal) { this.deliveryCoilLoading = true; return listDeliveryCoilsByPrincipal({ - principal: principal, + principal, pageNum: this.deliveryPagination.currentPage, - pageSize: this.deliveryPagination.pageSize + pageSize: this.deliveryPagination.pageSize, + coilBo: this.deliveryCoilBo }).then(res => { this.deliveryList = res.rows || []; this.deliveryPagination.total = res.total || 0; @@ -386,10 +454,21 @@ export default { }); }, fetchDeliveryCoilStatistics(principal) { - getDeliveryCoilsStatisticsByPrincipal(principal).then(res => { + getDeliveryCoilsStatisticsByPrincipal({ principal, coilBo: this.deliveryCoilBo }).then(res => { this.deliveryCoilStatistics = res.data || {}; }); }, + handleDeliveryFilter() { + this.deliveryPagination.currentPage = 1; + if (this.selectedItem) { + this.fetchDeliveryCoils(this.selectedItem.dictValue); + this.fetchDeliveryCoilStatistics(this.selectedItem.dictValue); + } + }, + resetDeliveryFilter() { + this.deliveryCoilBo = {}; + this.handleDeliveryFilter(); + }, handleProductPageChange({ currentPage, pageSize }) { this.productPagination.currentPage = currentPage; this.productPagination.pageSize = pageSize; diff --git a/klp-ui/src/views/wms/post/aps/orderTrack.vue b/klp-ui/src/views/wms/post/aps/orderTrack.vue index e9ff89e02..3defc8877 100644 --- a/klp-ui/src/views/wms/post/aps/orderTrack.vue +++ b/klp-ui/src/views/wms/post/aps/orderTrack.vue @@ -132,6 +132,35 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + @@ -221,6 +250,7 @@ export default { productCoilStatistics: {}, productPagination: { total: 0, currentPage: 1, pageSize: 20 }, productCoilLoading: false, + productCoilBo: {}, batchTransferDialogVisible: false, batchTargetContractId: '', batchTransferCoilIds: [], @@ -387,9 +417,11 @@ export default { fetchProductCoils() { if (!this.currentOrder || !this.currentOrder.orderId) return this.productCoilLoading = true - listProductCoilsByContract(this.currentOrder.orderId, { + listProductCoilsByContract({ + contractId: this.currentOrder.orderId, pageNum: this.productPagination.currentPage, - pageSize: this.productPagination.pageSize + pageSize: this.productPagination.pageSize, + coilBo: this.productCoilBo }).then(res => { this.productCoilList = res.rows || [] this.productPagination.total = res.total || 0 @@ -399,10 +431,19 @@ export default { }, fetchProductCoilStatistics() { if (!this.currentOrder || !this.currentOrder.orderId) return - getProductCoilsStatisticsByContract(this.currentOrder.orderId).then(res => { + getProductCoilsStatisticsByContract({ contractId: this.currentOrder.orderId, coilBo: this.productCoilBo }).then(res => { this.productCoilStatistics = res.data || {} }) }, + handleProductFilter() { + this.productPagination.currentPage = 1 + this.fetchProductCoils() + this.fetchProductCoilStatistics() + }, + resetProductFilter() { + this.productCoilBo = {} + this.handleProductFilter() + }, handleProductSelectionChange(selection) { this.selectedProductRows = selection }, diff --git a/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java b/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java index 8d7c2969d..4bfde79c7 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsDeliveryWaybillDetailController.java @@ -26,6 +26,7 @@ import com.klp.domain.vo.WmsDeliveryWaybillDetailVo; import com.klp.domain.bo.WmsDeliveryWaybillDetailBo; import com.klp.service.IWmsDeliveryWaybillDetailService; import com.klp.domain.bo.WmsMaterialCoilBo; +import com.klp.domain.bo.PrincipalCoilQueryBo; import com.klp.service.IWmsMaterialCoilService; import com.klp.common.core.page.TableDataInfo; @@ -188,34 +189,34 @@ public class WmsDeliveryWaybillDetailController extends BaseController { /** - * 根据负责人(principal)查询已发货绑定的钢卷列表(分页) + * 根据负责人(principal)查询已发货绑定的钢卷列表(分页),支持钢卷信息筛选 */ - @GetMapping("/coilListByPrincipal") - public TableDataInfo coilListByPrincipal( - @RequestParam(required = false) String principal, - PageQuery pageQuery) { - List boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPrincipal(principal); + @PostMapping("/coilListByPrincipal") + public TableDataInfo coilListByPrincipal(@RequestBody PrincipalCoilQueryBo bo) { + List boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPrincipal(bo.getPrincipal()); if (boundCoilIds == null || boundCoilIds.isEmpty()) { return new TableDataInfo<>(); } - WmsMaterialCoilBo wmsMaterialCoilBo = new WmsMaterialCoilBo(); - wmsMaterialCoilBo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); - return iWmsMaterialCoilService.queryPageList(wmsMaterialCoilBo, pageQuery); + WmsMaterialCoilBo coilBo = bo.getCoilBo() != null ? bo.getCoilBo() : new WmsMaterialCoilBo(); + coilBo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(bo.getPageNum()); + pageQuery.setPageSize(bo.getPageSize()); + return iWmsMaterialCoilService.queryPageList(coilBo, pageQuery); } /** - * 根据负责人(principal)统计已发货绑定钢卷的汇总数据(数量、毛重、净重) + * 根据负责人(principal)统计已发货绑定钢卷的汇总数据,支持钢卷信息筛选 */ - @GetMapping("/coilListByPrincipal/statistics") - public R> getCoilListByPrincipalStatistics( - @RequestParam(required = false) String principal) { - List boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPrincipal(principal); + @PostMapping("/coilListByPrincipal/statistics") + public R> getCoilListByPrincipalStatistics(@RequestBody PrincipalCoilQueryBo bo) { + List boundCoilIds = iWmsDeliveryWaybillDetailService.getBoundCoilIdsByPrincipal(bo.getPrincipal()); if (boundCoilIds == null || boundCoilIds.isEmpty()) { return R.ok(); } - WmsMaterialCoilBo wmsMaterialCoilBo = new WmsMaterialCoilBo(); - wmsMaterialCoilBo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); - return R.ok(iWmsMaterialCoilService.getStatistics(wmsMaterialCoilBo)); + WmsMaterialCoilBo coilBo = bo.getCoilBo() != null ? bo.getCoilBo() : new WmsMaterialCoilBo(); + coilBo.setCoilIds(boundCoilIds.stream().map(String::valueOf).collect(Collectors.joining(","))); + return R.ok(iWmsMaterialCoilService.getStatistics(coilBo)); } } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/PrincipalCoilQueryBo.java b/klp-wms/src/main/java/com/klp/domain/bo/PrincipalCoilQueryBo.java new file mode 100644 index 000000000..c7567920a --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/PrincipalCoilQueryBo.java @@ -0,0 +1,28 @@ +package com.klp.domain.bo; + +import lombok.Data; +import java.io.Serializable; + +/** + * 负责人钢卷查询请求对象 + * + * @author klp + * @date 2026-07-09 + */ +@Data +public class PrincipalCoilQueryBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 负责人 */ + private String principal; + + /** 分页页码 */ + private Integer pageNum; + + /** 分页大小 */ + private Integer pageSize; + + /** 钢卷筛选条件 */ + private WmsMaterialCoilBo coilBo; +}