1
This commit is contained in:
@@ -284,4 +284,166 @@ public class JDOrderListController extends BaseController
|
|||||||
return AjaxResult.error("批量标记失败: " + e.getMessage());
|
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