diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java index d9ae333..a4db1b5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/JDOrderListController.java @@ -284,4 +284,166 @@ public class JDOrderListController extends BaseController return AjaxResult.error("批量标记失败: " + e.getMessage()); } } + + /** + * 生成录单格式文本(Excel可粘贴格式) + * 根据当前查询条件生成Tab分隔的文本,可以直接粘贴到Excel + */ + @GetMapping("/generateExcelText") + public AjaxResult generateExcelText(JDOrder query, HttpServletRequest request) { + try { + // 处理时间筛选参数 + String beginTimeStr = request.getParameter("beginTime"); + String endTimeStr = request.getParameter("endTime"); + + if (beginTimeStr != null && !beginTimeStr.isEmpty()) { + query.getParams().put("beginTime", beginTimeStr); + } + if (endTimeStr != null && !endTimeStr.isEmpty()) { + query.getParams().put("endTime", endTimeStr); + } + + // 处理混合搜索参数 + String orderSearch = request.getParameter("orderSearch"); + if (orderSearch != null && !orderSearch.trim().isEmpty()) { + query.getParams().put("orderSearch", orderSearch.trim()); + } + + // 处理其他查询参数 + if (query.getRemark() != null && !query.getRemark().trim().isEmpty()) { + query.setRemark(query.getRemark().trim()); + } + if (query.getDistributionMark() != null && !query.getDistributionMark().trim().isEmpty()) { + query.setDistributionMark(query.getDistributionMark().trim()); + } + if (query.getModelNumber() != null && !query.getModelNumber().trim().isEmpty()) { + query.setModelNumber(query.getModelNumber().trim()); + } + if (query.getBuyer() != null && !query.getBuyer().trim().isEmpty()) { + query.setBuyer(query.getBuyer().trim()); + } + if (query.getAddress() != null && !query.getAddress().trim().isEmpty()) { + query.setAddress(query.getAddress().trim()); + } + if (query.getStatus() != null && !query.getStatus().trim().isEmpty()) { + query.setStatus(query.getStatus().trim()); + } + + // 获取订单列表(不分页,获取所有符合条件的订单) + List list = jdOrderService.selectJDOrderList(query); + + if (list == null || list.isEmpty()) { + return AjaxResult.success("暂无订单数据"); + } + + // 关联查询订单状态和赔付金额 + for (JDOrder jdOrder : list) { + OrderRows orderRows = orderRowsService.selectOrderRowsByOrderId(jdOrder.getOrderId()); + if (orderRows != null) { + jdOrder.setProPriceAmount(orderRows.getProPriceAmount()); + // estimateCosPrice 是京粉实际价格 + if (orderRows.getEstimateCosPrice() != null) { + jdOrder.setJingfenActualPrice(orderRows.getEstimateCosPrice()); + } + } + } + + // 按 remark 排序 + list.sort((o1, o2) -> { + String r1 = o1.getRemark() != null ? o1.getRemark() : ""; + String r2 = o2.getRemark() != null ? o2.getRemark() : ""; + return r1.compareTo(r2); + }); + + // 生成Excel格式文本(Tab分隔) + StringBuilder sb = new StringBuilder(); + for (JDOrder o : list) { + // 日期(格式:yyyy/MM/dd) + String dateStr = ""; + if (o.getOrderTime() != null) { + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy/MM/dd"); + dateStr = sdf.format(o.getOrderTime()); + } + + // 多多单号(第三方单号,如果没有则使用内部单号) + String duoduoOrderNo = o.getThirdPartyOrderNo() != null && !o.getThirdPartyOrderNo().trim().isEmpty() + ? o.getThirdPartyOrderNo() : (o.getRemark() != null ? o.getRemark() : ""); + + // 型号 + String modelNumber = o.getModelNumber() != null ? o.getModelNumber() : ""; + + // 数量(固定为1) + String quantity = "1"; + + // 姓名(下单人) + String buyer = o.getBuyer() != null ? o.getBuyer() : ""; + + // 地址 + String address = o.getAddress() != null ? o.getAddress() : ""; + + // 售价(京粉实际价格,如果没有则用付款金额-后返金额) + Double sellingPrice = o.getJingfenActualPrice(); + if (sellingPrice == null || sellingPrice == 0) { + Double payment = o.getPaymentAmount() != null ? o.getPaymentAmount() : 0.0; + Double rebate = o.getRebateAmount() != null ? o.getRebateAmount() : 0.0; + sellingPrice = payment - rebate; + } + String sellingPriceStr = sellingPrice != null && sellingPrice > 0 + ? String.format(java.util.Locale.ROOT, "%.2f", sellingPrice) : ""; + + // 成本(售价 - 利润,利润可能是后返金额) + Double cost = null; + Double rebate = o.getRebateAmount() != null ? o.getRebateAmount() : 0.0; + if (sellingPrice != null && sellingPrice > 0 && rebate > 0) { + cost = sellingPrice - rebate; + } + String costStr = cost != null && cost > 0 + ? String.format(java.util.Locale.ROOT, "%.2f", cost) : ""; + + // 利润(后返金额,或者售价-成本) + String profitStr = ""; + if (rebate > 0) { + profitStr = String.format(java.util.Locale.ROOT, "%.2f", rebate); + } else if (sellingPrice != null && sellingPrice > 0 && cost != null && cost > 0) { + double profit = sellingPrice - cost; + if (profit > 0) { + profitStr = String.format(java.util.Locale.ROOT, "%.2f", profit); + } + } + + // 京东单号 + String orderId = o.getOrderId() != null ? o.getOrderId() : ""; + + // 物流链接 + String logisticsLink = o.getLogisticsLink() != null ? o.getLogisticsLink() : ""; + + // 下单付款 + String paymentAmountStr = o.getPaymentAmount() != null + ? String.format(java.util.Locale.ROOT, "%.2f", o.getPaymentAmount()) : ""; + + // 后返 + String rebateAmountStr = o.getRebateAmount() != null + ? String.format(java.util.Locale.ROOT, "%.2f", o.getRebateAmount()) : ""; + + // 按顺序拼接:日期、多多单号、型号、数量、姓名、地址、售价、成本、利润、京东单号、物流、下单付款、后返 + sb.append(dateStr).append('\t') + .append(duoduoOrderNo).append('\t') + .append(modelNumber).append('\t') + .append(quantity).append('\t') + .append(buyer).append('\t') + .append(address).append('\t') + .append(sellingPriceStr).append('\t') + .append(costStr).append('\t') + .append(profitStr).append('\t') + .append(orderId).append('\t') + .append(logisticsLink).append('\t') + .append(paymentAmountStr).append('\t') + .append(rebateAmountStr).append('\n'); + } + + return AjaxResult.success(sb.toString()); + } catch (Exception e) { + return AjaxResult.error("生成失败: " + e.getMessage()); + } + } }