1. 新增crm订单主、订单明细的导出接口,支持业务精简字段导出 2. 为订单明细VO新增业务员字段,关联查询订单表填充数据 3. 在订单列表页新增业务员表格列展示 4. 为合同编辑页、订单明细页添加导出按钮并实现导出逻辑 5. 新增导出专用的VO类,处理日期格式化和状态转文本
201 lines
8.8 KiB
Java
201 lines
8.8 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.service.ICrmOrderItemService;
|
||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||
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));
|
||
}
|
||
// 根据订单id查询发货单据中的配卷(分页)。
|
||
@GetMapping("/coils/order/{orderId}")
|
||
public TableDataInfo<WmsMaterialCoilVo> getCoilsByOrderId(@NotNull(message = "订单ID不能为空")
|
||
@PathVariable Long orderId,
|
||
PageQuery pageQuery) {
|
||
return iCrmOrderItemService.queryCoilsByOrderId(orderId, pageQuery);
|
||
}
|
||
|
||
// 根据合同id查询发货单据中的配卷。
|
||
@GetMapping("/coils/contract/{contractId}")
|
||
public R<List<WmsMaterialCoilVo>> getCoilsByContractId(@NotNull(message = "合同ID不能为空")
|
||
@PathVariable Long contractId) {
|
||
return R.ok(iCrmOrderItemService.queryCoilsByContractId(contractId));
|
||
}
|
||
|
||
// 根据客户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));
|
||
}
|
||
|
||
// 根据销售员查询生产成果(钢卷列表),分页
|
||
@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);
|
||
}
|
||
|
||
// 根据订单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));
|
||
}
|
||
}
|