1
This commit is contained in:
@@ -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<JDOrder> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user