- 将所有配卷查询接口统一为POST + Body BO方式 - 为配卷查询添加钢卷号、材料类型、质量状态、发货状态筛选条件 - 在合同详情页面为生产成果和发货配卷添加筛选表单 - 在订单页面为发货配卷添加筛选功能 - 在销售员页面为生产成果和计划发货添加筛选功能 - 更新异议管理页面的配卷查询参数结构 - 增加订单ID参数用于合同ID相关查询的兼容性处理
227 lines
9.4 KiB
Java
227 lines
9.4 KiB
Java
package com.klp.crm.controller;
|
||
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.List;
|
||
import java.util.Arrays;
|
||
import java.util.stream.Collectors;
|
||
|
||
import cn.hutool.core.bean.BeanUtil;
|
||
|
||
import lombok.RequiredArgsConstructor;
|
||
import javax.servlet.http.HttpServletResponse;
|
||
import javax.validation.constraints.*;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import org.springframework.validation.annotation.Validated;
|
||
import com.klp.common.annotation.RepeatSubmit;
|
||
import com.klp.common.annotation.Log;
|
||
import com.klp.common.core.controller.BaseController;
|
||
import com.klp.common.core.domain.PageQuery;
|
||
import com.klp.common.core.domain.R;
|
||
import com.klp.common.core.validate.AddGroup;
|
||
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.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;
|
||
|
||
/**
|
||
* 正式订单明细
|
||
*
|
||
* @author klp
|
||
* @date 2025-12-15
|
||
*/
|
||
@Validated
|
||
@RequiredArgsConstructor
|
||
@RestController
|
||
@RequestMapping("/crm/orderItem")
|
||
public class CrmOrderItemController extends BaseController {
|
||
|
||
private final ICrmOrderItemService iCrmOrderItemService;
|
||
|
||
/**
|
||
* 查询正式订单明细列表
|
||
*/
|
||
@GetMapping("/list")
|
||
public TableDataInfo<CrmOrderItemVo> list(CrmOrderItemBo bo, PageQuery pageQuery) {
|
||
return iCrmOrderItemService.queryPageList(bo, pageQuery);
|
||
}
|
||
|
||
/**
|
||
* 导出正式订单明细列表
|
||
*/
|
||
@Log(title = "正式订单明细", businessType = BusinessType.EXPORT)
|
||
@PostMapping("/export")
|
||
public void export(CrmOrderItemBo bo, HttpServletResponse response) {
|
||
List<CrmOrderItemVo> list = iCrmOrderItemService.queryList(bo);
|
||
ExcelUtil.exportExcel(list, "正式订单明细", CrmOrderItemVo.class, response);
|
||
}
|
||
|
||
/**
|
||
* 导出正式订单明细列表(业务精简字段,用于订单明细列表页导出)
|
||
*/
|
||
@Log(title = "正式订单明细", businessType = BusinessType.EXPORT)
|
||
@PostMapping("/exportDetail")
|
||
public void exportDetail(@RequestBody CrmOrderItemBo bo, HttpServletResponse response) {
|
||
List<CrmOrderItemVo> list = iCrmOrderItemService.queryList(bo);
|
||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||
List<CrmOrderItemExportVo> exportList = list.stream().map(vo -> {
|
||
CrmOrderItemExportVo export = new CrmOrderItemExportVo();
|
||
BeanUtil.copyProperties(vo, export);
|
||
// 日期格式化
|
||
export.setSignTime(vo.getSignTime() != null ? sdf.format(vo.getSignTime()) : null);
|
||
// 展平 orderInfo 中的 salesman、orderCode、contractName
|
||
if (vo.getOrderInfo() != null) {
|
||
export.setSalesman(vo.getOrderInfo().getSalesman());
|
||
export.setOrderCode(vo.getOrderInfo().getOrderCode());
|
||
export.setContractName(vo.getOrderInfo().getContractName());
|
||
}
|
||
return export;
|
||
}).collect(Collectors.toList());
|
||
ExcelUtil.exportExcel(exportList, "订单明细列表", CrmOrderItemExportVo.class, response);
|
||
}
|
||
|
||
/**
|
||
* 获取正式订单明细详细信息
|
||
*
|
||
* @param itemId 主键
|
||
*/
|
||
@GetMapping("/{itemId}")
|
||
public R<CrmOrderItemVo> getInfo(@NotNull(message = "主键不能为空")
|
||
@PathVariable String itemId) {
|
||
return R.ok(iCrmOrderItemService.queryById(itemId));
|
||
}
|
||
|
||
/**
|
||
* 新增正式订单明细
|
||
*/
|
||
@Log(title = "正式订单明细", businessType = BusinessType.INSERT)
|
||
@RepeatSubmit()
|
||
@PostMapping()
|
||
public R<CrmOrderItemVo> add(@Validated(AddGroup.class) @RequestBody CrmOrderItemBo bo) {
|
||
return R.ok(iCrmOrderItemService.insertByBo(bo));
|
||
}
|
||
|
||
/**
|
||
* 修改正式订单明细
|
||
*/
|
||
@Log(title = "正式订单明细", businessType = BusinessType.UPDATE)
|
||
@RepeatSubmit()
|
||
@PutMapping()
|
||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CrmOrderItemBo bo) {
|
||
return toAjax(iCrmOrderItemService.updateByBo(bo));
|
||
}
|
||
|
||
/**
|
||
* 删除正式订单明细
|
||
*
|
||
* @param itemIds 主键串
|
||
*/
|
||
@Log(title = "正式订单明细", businessType = BusinessType.DELETE)
|
||
@DeleteMapping("/{itemIds}")
|
||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||
@PathVariable String[] itemIds) {
|
||
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));
|
||
}
|
||
// ==================== 钢卷查询(统一使用 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 orderId) {
|
||
return R.ok(iCrmOrderItemService.queryCoilsByContractId(orderId));
|
||
}
|
||
|
||
// 根据客户id查询该客户下属订单关联的异议和财务信息。
|
||
@GetMapping("/customerFinance/{customerId}")
|
||
public R<CrmContractOrderFinanceVo> getCustomerFinance(@NotNull(message = "客户ID不能为空")
|
||
@PathVariable String customerId) {
|
||
return R.ok(iCrmOrderItemService.queryFinanceAndObjectionByCustomerId(customerId));
|
||
}
|
||
|
||
// 根据客户id查询发货单据中的配卷。
|
||
@GetMapping("/coils/customer/{customerId}")
|
||
public R<List<WmsMaterialCoilVo>> getCoilsByCustomerId(@NotNull(message = "客户ID不能为空")
|
||
@PathVariable String customerId) {
|
||
return R.ok(iCrmOrderItemService.queryCoilsByCustomerId(customerId));
|
||
}
|
||
|
||
// ==================== 私有辅助方法 ====================
|
||
|
||
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()); }
|
||
|
||
private PageQuery buildPageQuery(Integer pageNum, Integer pageSize) {
|
||
PageQuery pageQuery = new PageQuery();
|
||
pageQuery.setPageNum(pageNum);
|
||
pageQuery.setPageSize(pageSize);
|
||
return pageQuery;
|
||
}
|
||
}
|