商家订单增加退款数据上去。商家订单列表,完整化

This commit is contained in:
Jack 2025-11-15 19:38:49 +08:00
parent bd8e11a663
commit 171cbe9ea1
5 changed files with 745 additions and 171 deletions

View File

@ -42,6 +42,9 @@ public class MchOrderInfoDTO implements Serializable {
// 物流轨迹信息(物流已发货的才有数据)
@ApiModelProperty(value = "物流轨迹信息")
Map<String, Object> logistics_traces;
// 退款订单详情
MchReturnOrderDetailDTO return_order_detail;
// 订单信息
@ApiModelProperty(value = "订单编号")
@ -95,16 +98,12 @@ public class MchOrderInfoDTO implements Serializable {
private Integer is_deny_return;
@ApiModelProperty(value = "异常订单操作流程,0-可操作自行发货1-可操作订单完成2-订单完成不可操作")
private String operate_flag;
@ApiModelProperty(value = "订单配送预约状态1-立即配送2-预约配送")
private Integer booking_state;
@ApiModelProperty(value = "预约送达起始时间格式如yyyy-MM-dd HH:mm:ss")
private Date booking_begin_time;
@ApiModelProperty(value = "预约送达截止时间格式如yyyy-MM-dd HH:mm:ss")
private Date booking_end_time;
@ApiModelProperty(value = "预订单到达时间戳(秒)")
private Long booking_at;
}

View File

@ -0,0 +1,193 @@
/*
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.suisung.mall.common.modules.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "退款单详情主表实体类 对象", description = "商家版退款单详情主表实体类")
public class MchReturnOrderDetailDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "退货单编号")
private String return_id;
@ApiModelProperty(value = "订单编号")
private String order_id;
@ApiModelProperty(value = "买家用户ID")
private Integer buyer_user_id;
@ApiModelProperty(value = "买家店铺ID")
private Integer buyer_store_id;
@ApiModelProperty(value = "退货原因ID")
private Integer return_reason_id;
@ApiModelProperty(value = "退货原因名称")
private String return_reason_name;
@ApiModelProperty(value = "买家退货留言")
private String return_buyer_message;
@ApiModelProperty(value = "店铺ID")
private Integer store_id;
@ApiModelProperty(value = "退货退款金额")
private BigDecimal return_refund_amount;
@ApiModelProperty(value = "退货佣金费用")
private BigDecimal return_commision_fee;
@ApiModelProperty(value = "退货状态ID")
private Integer return_state_id;
@ApiModelProperty(value = "退货状态名称")
private String return_state_name;
@ApiModelProperty(value = "退货联系电话")
private String return_tel;
@ApiModelProperty(value = "退货年份")
private Integer return_year;
@ApiModelProperty(value = "退货月份")
private Integer return_month;
@ApiModelProperty(value = "退货日期")
private Integer return_day;
@ApiModelProperty(value = "退货地址")
private String return_addr;
@ApiModelProperty(value = "退货联系手机")
private Long return_mobile;
@ApiModelProperty(value = "退货联系电话")
private String return_telephone;
@ApiModelProperty(value = "退货联系人姓名")
private String return_contact_name;
@ApiModelProperty(value = "分站ID")
private Integer subsite_id;
@ApiModelProperty(value = "退货申请时间")
private Date return_add_time;
@ApiModelProperty(value = "退货完成时间")
private Date return_finish_time;
@ApiModelProperty(value = "是否已退款(ENUM): 0-未退款; 1-已退款")
private Integer return_is_paid;
@ApiModelProperty(value = "退款渠道代码")
private String return_channel_code;
@ApiModelProperty(value = "退款渠道交易ID")
private String return_channel_trans_id;
@ApiModelProperty(value = "退款渠道处理时间")
private Date return_channel_time;
@ApiModelProperty(value = "退款渠道状态(ENUM): 0-待退; 1-已退; 2-异常")
private Integer return_channel_flag;
@ApiModelProperty(value = "支付交易号")
private String deposit_trade_no;
@ApiModelProperty(value = "支付渠道ID")
private Integer payment_channel_id;
@ApiModelProperty(value = "商家处理留言")
private String return_store_message;
@ApiModelProperty(value = "平台退货状态ID")
private Integer plantform_return_state_id;
@ApiModelProperty(value = "平台退货状态名称")
private String plantform_return_state_name;
@ApiModelProperty(value = "退货类型(ENUM): 0-不用退货; 1-需要退货")
private Integer return_flag;
@ApiModelProperty(value = "申请类型(ENUM): 1-退款申请; 2-退货申请; 3-虚拟退款")
private Integer return_type;
@ApiModelProperty(value = "提交的退货退款金额")
private BigDecimal submit_return_refund_amount;
@ApiModelProperty(value = "订单商品ID列表")
private List<Long> order_item_ids;
@ApiModelProperty(value = "买家用户名")
private String buyer_user_name;
@ApiModelProperty(value = "是否有合同类型")
private Boolean contract_type_ids;
@ApiModelProperty(value = "尝试退款次数")
private Integer try_return_count;
// 收货地址相关信息
@ApiModelProperty(value = "收货省份")
private String da_province;
@ApiModelProperty(value = "收货城市")
private String da_city;
@ApiModelProperty(value = "收货区县")
private String da_county;
@ApiModelProperty(value = "收货详细地址")
private String da_address;
@ApiModelProperty(value = "收货人姓名")
private String da_name;
@ApiModelProperty(value = "收货人手机号")
private String da_mobile;
@ApiModelProperty(value = "收货人电话")
private String da_telephone;
@ApiModelProperty(value = "收货省份ID")
private Integer da_province_id;
@ApiModelProperty(value = "收货城市ID")
private Integer da_city_id;
@ApiModelProperty(value = "收货区县ID")
private Integer da_county_id;
@ApiModelProperty(value = "纬度")
private String da_latitude;
@ApiModelProperty(value = "经度")
private String da_longitude;
// 退款商品列表
@ApiModelProperty(value = "退货商品详情列表")
private List<MchReturnOrderItemDetailDTO> items;
}

View File

@ -0,0 +1,106 @@
/*
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
* Vestibulum commodo. Ut rhoncus gravida arcu.
*/
package com.suisung.mall.common.modules.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "退款单商品详情实体对象", description = "退款单商品详情实体类")
public class MchReturnOrderItemDetailDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "退货商品项ID")
private Long order_return_item_id;
@ApiModelProperty(value = "退货单编号")
private String return_id;
@ApiModelProperty(value = "订单商品项ID")
private Long order_item_id;
@ApiModelProperty(value = "订单编号")
private String order_id;
@ApiModelProperty(value = "退货商品数量")
private Integer return_item_num;
@ApiModelProperty(value = "退货商品小计金额")
private BigDecimal return_item_subtotal;
@ApiModelProperty(value = "退货原因ID")
private Integer return_reason_id;
@ApiModelProperty(value = "退货商品备注")
private String return_item_note;
@ApiModelProperty(value = "退货商品图片")
private String return_item_image;
@ApiModelProperty(value = "退货商品状态ID")
private Integer return_state_id;
@ApiModelProperty(value = "退货商品佣金费用")
private BigDecimal return_item_commision_fee;
@ApiModelProperty(value = "退货商品商家备注")
private String return_item_store_remark;
// 关联的订单商品信息
@ApiModelProperty(value = "商品名称")
private String item_name;
@ApiModelProperty(value = "产品名称")
private String product_name;
@ApiModelProperty(value = "货品ID")
private Long item_id;
@ApiModelProperty(value = "订单商品图片")
private String order_item_image;
@ApiModelProperty(value = "单位ID")
private Integer unit_id;
@ApiModelProperty(value = "单位名称")
private String unit_name;
@ApiModelProperty(value = "订单商品单价")
private BigDecimal order_item_unit_price;
@ApiModelProperty(value = "订单商品数量")
private Integer order_item_quantity;
@ApiModelProperty(value = "订单商品总金额")
private BigDecimal order_item_amount;
@ApiModelProperty(value = "订单商品总重量")
private BigDecimal order_item_weight_total;
@ApiModelProperty(value = "订单商品备注")
private String order_item_note;
@ApiModelProperty(value = "商品编号")
private String item_number;
@ApiModelProperty(value = "产品编号")
private String product_number;
}

View File

@ -1151,45 +1151,91 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
return true;
}
/**
* 获取退款详情数据
*
* @param return_id 退货单ID
* @return 退货单详情信息
*/
@Override
public Map getReturnDetail(String return_id) {
// 1. 获取退货单基础信息
ShopOrderReturn shopOrderReturn = get(return_id);
if (shopOrderReturn == null) {
logger.warn("退货单不存在: return_id={}", return_id);
return new HashMap<>();
}
Map return_row = Convert.toMap(String.class, Object.class, shopOrderReturn);
// 2. 获取退货单商品明细
QueryWrapper<ShopOrderReturnItem> itemQueryWrapper = new QueryWrapper<>();
itemQueryWrapper.eq("return_id", return_id);
List<ShopOrderReturnItem> shopOrderReturnItems = orderReturnItemService.find(itemQueryWrapper);
List<Map> return_item_rows = Convert.toList(Map.class, shopOrderReturnItems);
List<Long> order_item_ids = shopOrderReturnItems.stream().map(s -> s.getOrder_item_id()).distinct().collect(Collectors.toList());
List<Long> order_item_ids = shopOrderReturnItems.stream()
.map(ShopOrderReturnItem::getOrder_item_id)
.distinct()
.collect(Collectors.toList());
// 3. 获取原订单详情
String order_id = shopOrderReturn.getOrder_id();
Map order_row = shopOrderBaseService.getOrderDetail(order_id, null);
if (order_row == null) {
logger.warn("原订单详情不存在: order_id={}", order_id);
return return_row;
}
// 4. 获取退货原因列表
List<ShopOrderReturnReason> return_reason_rows = orderReturnReasonService.find(new QueryWrapper<>());
// 5. 获取订单收货地址信息
ShopOrderDeliveryAddress deliveryAddress = orderDeliveryAddressService.get(order_id);
Map order_delivery = Convert.toMap(String.class, Object.class, deliveryAddress);
return_row.putAll(order_delivery);
if (deliveryAddress != null) {
Map order_delivery = Convert.toMap(String.class, Object.class, deliveryAddress);
return_row.putAll(order_delivery);
}
// 6. 获取订单商品相关信息
List<Map> order_row_items = (List<Map>) order_row.get("items");
if (CollUtil.isEmpty(order_row_items)) {
logger.warn("订单商品列表为空: order_id={}", order_id);
return_row.put("items", new ArrayList<>());
return return_row;
}
List<Long> item_ids = order_row_items.stream().map(s -> Convert.toLong(s.get("item_id"))).distinct().collect(Collectors.toList());
List<Map> product_items = shopProductItemService.gets(item_ids);
List<Long> item_ids = order_row_items.stream()
.map(s -> Convert.toLong(s.get("item_id")))
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
List<Integer> product_ids = order_row_items.stream().map(s -> Convert.toInt(s.get("product_id"))).distinct().collect(Collectors.toList());
List<ShopProductInfo> product_infos = shopProductInfoService.gets(product_ids);
List<Map> product_items = CollUtil.isEmpty(item_ids) ? new ArrayList<>() :
shopProductItemService.gets(item_ids);
List<ShopProductIndex> product_indexs = shopProductIndexService.gets(product_ids);
List<Integer> product_ids = order_row_items.stream()
.map(s -> Convert.toInt(s.get("product_id")))
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
// 退货商品数据
Map return_item_temp_rows = new HashMap();
List<ShopProductInfo> product_infos = CollUtil.isEmpty(product_ids) ? new ArrayList<>() :
shopProductInfoService.gets(product_ids);
List<ShopProductIndex> product_indexs = CollUtil.isEmpty(product_ids) ? new ArrayList<>() :
shopProductIndexService.gets(product_ids);
// 7. 构建退货商品临时数据映射
Map<Long, Map> return_item_temp_rows = new HashMap<>();
for (Map item : order_row_items) {
Long order_item_id = Convert.toLong(item.get("order_item_id"));
// 只处理当前退货单相关的订单商品
if (order_item_ids.contains(order_item_id)) {
Map order_item = new HashMap();
Long item_id = Convert.toLong(item.get("item_id"));
Integer product_id = Convert.toInt(item.get("product_id"));
// 复制订单商品基本信息
order_item.put("item_name", item.get("item_name"));
order_item.put("product_name", item.get("product_name"));
order_item.put("item_id", item_id);
@ -1202,55 +1248,113 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
order_item.put("order_item_amount", item.get("order_item_amount"));
order_item.put("order_item_note", item.get("order_item_note"));
Optional<Map> productItemOpl = product_items.stream().filter(s -> ObjectUtil.equal(item_id, Convert.toInt(s.get("item_id")))).findFirst();
Map productItem = productItemOpl.orElseGet(HashMap::new);
order_item.put("item_number", productItem.get("item_number"));
// 关联SKU信息
if (CollUtil.isNotEmpty(product_items)) {
Optional<Map> productItemOpl = product_items.stream()
.filter(s -> ObjectUtil.equal(item_id, Convert.toLong(s.get("item_id"))))
.findFirst();
Map productItem = productItemOpl.orElse(new HashMap<>());
order_item.put("item_number", productItem.get("item_number"));
}
Optional<ShopProductInfo> productInfoOpl = product_infos.stream().filter(s -> ObjectUtil.equal(product_id, s.getProduct_id())).findFirst();
ShopProductInfo productInfo = productInfoOpl.orElseGet(ShopProductInfo::new);
order_item.put("product_number", productInfo.getProduct_number());
// 关联商品信息
if (CollUtil.isNotEmpty(product_infos)) {
Optional<ShopProductInfo> productInfoOpl = product_infos.stream()
.filter(s -> ObjectUtil.equal(product_id, s.getProduct_id()))
.findFirst();
ShopProductInfo productInfo = productInfoOpl.orElse(new ShopProductInfo());
order_item.put("product_number", productInfo.getProduct_number());
}
return_item_temp_rows.put(order_item_id, order_item);
}
}
// 8. 合并退货商品详细信息
for (Map return_item_row : return_item_rows) {
Long order_item_id = Convert.toLong(return_item_row.get("order_item_id"));
Map return_item_temp_row = (Map) return_item_temp_rows.get(order_item_id);
return_item_row.putAll(ObjectUtil.defaultIfNull(return_item_temp_row, new HashMap()));
Map return_item_temp_row = return_item_temp_rows.get(order_item_id);
// 合并订单商品信息到退货商品中
if (return_item_temp_row != null) {
return_item_row.putAll(return_item_temp_row);
}
// 处理退货图片信息
String return_item_image = (String) return_item_row.get("return_item_image");
if (StrUtil.isNotBlank(return_item_image)) {
return_item_row.put("return_item_image", Convert.toList(String.class, return_item_image));
// 如果是逗号分隔的图片字符串转换为列表
if (return_item_image.contains(",")) {
return_item_row.put("return_item_image",
Arrays.asList(return_item_image.split(",")));
} else {
return_item_row.put("return_item_image",
Collections.singletonList(return_item_image));
}
} else {
return_item_row.put("return_item_image", new ArrayList<>());
}
}
// 9. 处理合同类型信息
if (CollUtil.isNotEmpty(product_indexs)) {
return_row.put("contract_type_ids", StrUtil.isNotEmpty(product_indexs.get(0).getContract_type_ids()));
ShopProductIndex firstIndex = product_indexs.get(0);
if (firstIndex != null && StrUtil.isNotEmpty(firstIndex.getContract_type_ids())) {
return_row.put("contract_type_ids", true);
} else {
return_row.put("contract_type_ids", false);
}
} else {
return_row.put("contract_type_ids", false);
}
// 10. 添加买家信息
return_row.put("buyer_user_name", order_row.get("buyer_user_name"));
BigDecimal return_item_subtotal = shopOrderReturnItems.stream().map(s -> s.getReturn_item_subtotal()).reduce(BigDecimal.ZERO, BigDecimal::add);
// 11. 计算退货总金额
BigDecimal return_item_subtotal = shopOrderReturnItems.stream()
.map(ShopOrderReturnItem::getReturn_item_subtotal)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return_row.put("submit_return_refund_amount", return_item_subtotal);
return_row.put("order_item_ids", order_item_ids);
// 12. 处理退货原因名称
Integer return_reason_id = Convert.toInt(return_row.get("return_reason_id"));
Optional<ShopOrderReturnReason> reasonOpl = return_reason_rows.stream().filter(s -> ObjectUtil.equal(return_reason_id, s.getReturn_reason_id())).findFirst();
ShopOrderReturnReason returnReason = reasonOpl.orElseGet(ShopOrderReturnReason::new);
return_row.put("return_reason_name", returnReason.getReturn_reason_name());
if (return_reason_id != null && CollUtil.isNotEmpty(return_reason_rows)) {
Optional<ShopOrderReturnReason> reasonOpl = return_reason_rows.stream()
.filter(s -> ObjectUtil.equal(return_reason_id, s.getReturn_reason_id()))
.findFirst();
ShopOrderReturnReason returnReason = reasonOpl.orElse(new ShopOrderReturnReason());
return_row.put("return_reason_name", returnReason.getReturn_reason_name());
} else {
return_row.put("return_reason_name", "");
}
// 13. 设置退货商品列表和状态名称
return_row.put("items", return_item_rows);
return_row.put("return_state_name", stateCodeService.getText(Convert.toInt(return_row.get("return_state_id")), "1"));
Integer return_state_id = Convert.toInt(return_row.get("return_state_id"));
if (return_state_id != null) {
return_row.put("return_state_name",
stateCodeService.getText(return_state_id, "1"));
} else {
return_row.put("return_state_name", "");
}
// 14. 处理平台退货状态名称
Integer plantform_return_state_id = Convert.toInt(return_row.get("plantform_return_state_id"));
return_row.put("plantform_return_state_name", getPlantformReturnStateName(plantform_return_state_id));
if (plantform_return_state_id != null) {
return_row.put("plantform_return_state_name",
getPlantformReturnStateName(plantform_return_state_id));
} else {
return_row.put("plantform_return_state_name", "");
}
return return_row;
}
/**
* 退货单审核(商家同意退款退库)
* 处理逻辑

View File

@ -592,6 +592,7 @@
<result property="kind_id" column="kind_id"/>
<result property="delivery_type_id" column="delivery_type_id"/>
<result property="distance" column="distance"/>
<!--预约订单相关字段-->
<result property="booking_state" column="booking_state"/>
<result property="booking_begin_time" column="booking_begin_time"/>
@ -656,10 +657,320 @@
<result property="order_item_return_num" column="order_item_return_num"/>
<result property="order_item_return_agree_amount" column="order_item_return_agree_amount"/>
</collection>
<!-- 退款订单集合映射 -->
<collection property="return_order_detail" ofType="com.suisung.mall.common.modules.order.dto.MchReturnOrderDetailDTO">
<id property="return_id" column="return_id"/>
<result property="order_id" column="return_order_id"/>
<result property="buyer_user_id" column="return_buyer_user_id"/>
<result property="buyer_store_id" column="return_buyer_store_id"/>
<result property="return_reason_id" column="return_reason_id"/>
<result property="return_reason_name" column="return_reason_name"/>
<result property="return_buyer_message" column="return_buyer_message"/>
<result property="store_id" column="return_store_id"/>
<result property="return_refund_amount" column="return_refund_amount"/>
<result property="return_commision_fee" column="return_commision_fee"/>
<result property="return_state_id" column="return_state_id"/>
<result property="return_state_name" column="return_state_name"/>
<result property="return_tel" column="return_tel"/>
<result property="return_year" column="return_year"/>
<result property="return_month" column="return_month"/>
<result property="return_day" column="return_day"/>
<result property="return_addr" column="return_addr"/>
<result property="return_mobile" column="return_mobile"/>
<result property="return_telephone" column="return_telephone"/>
<result property="return_contact_name" column="return_contact_name"/>
<result property="subsite_id" column="return_subsite_id"/>
<result property="return_add_time" column="return_add_time"/>
<result property="return_finish_time" column="return_finish_time"/>
<result property="return_is_paid" column="return_is_paid"/>
<result property="return_channel_code" column="return_channel_code"/>
<result property="return_channel_trans_id" column="return_channel_trans_id"/>
<result property="return_channel_time" column="return_channel_time"/>
<result property="return_channel_flag" column="return_channel_flag"/>
<result property="deposit_trade_no" column="return_deposit_trade_no"/>
<result property="payment_channel_id" column="return_payment_channel_id"/>
<result property="return_store_message" column="return_store_message"/>
<result property="plantform_return_state_id" column="plantform_return_state_id"/>
<result property="plantform_return_state_name" column="plantform_return_state_name"/>
<result property="return_flag" column="return_flag"/>
<result property="return_type" column="return_type"/>
<result property="submit_return_refund_amount" column="submit_return_refund_amount"/>
<result property="buyer_user_name" column="return_buyer_user_name"/>
<result property="contract_type_ids" column="contract_type_ids"/>
<result property="try_return_count" column="try_return_count"/>
<!-- 收货地址相关信息 -->
<result property="da_province" column="return_da_province"/>
<result property="da_city" column="return_da_city"/>
<result property="da_county" column="return_da_county"/>
<result property="da_address" column="return_da_address"/>
<result property="da_name" column="return_da_name"/>
<result property="da_mobile" column="return_da_mobile"/>
<result property="da_telephone" column="return_da_telephone"/>
<result property="da_province_id" column="return_da_province_id"/>
<result property="da_city_id" column="return_da_city_id"/>
<result property="da_county_id" column="return_da_county_id"/>
<result property="da_latitude" column="return_da_latitude"/>
<result property="da_longitude" column="return_da_longitude"/>
<!-- 退款商品列表映射 -->
<collection property="items" ofType="com.suisung.mall.common.modules.order.dto.MchReturnOrderItemDetailDTO">
<id property="order_return_item_id" column="order_return_item_id"/>
<result property="return_id" column="item_return_id"/>
<result property="order_item_id" column="return_order_item_id"/>
<result property="order_id" column="item_order_id"/>
<result property="return_item_num" column="return_item_num"/>
<result property="return_item_subtotal" column="return_item_subtotal"/>
<result property="return_reason_id" column="item_return_reason_id"/>
<result property="return_item_note" column="return_item_note"/>
<result property="return_item_image" column="return_item_image"/>
<result property="return_state_id" column="item_return_state_id"/>
<result property="return_item_commision_fee" column="return_item_commision_fee"/>
<result property="return_item_store_remark" column="return_item_store_remark"/>
<!-- 关联的订单商品信息 -->
<result property="item_name" column="return_item_name"/>
<result property="product_name" column="return_product_name"/>
<result property="item_id" column="return_item_id"/>
<result property="order_item_image" column="return_order_item_image"/>
<result property="unit_id" column="return_unit_id"/>
<result property="unit_name" column="return_unit_name"/>
<result property="order_item_unit_price" column="return_order_item_unit_price"/>
<result property="order_item_quantity" column="return_order_item_quantity"/>
<result property="order_item_amount" column="return_order_item_amount"/>
<result property="order_item_weight_total" column="return_order_item_weight_total"/>
<result property="order_item_note" column="return_order_item_note"/>
<result property="item_number" column="return_item_number"/>
<result property="product_number" column="return_product_number"/>
</collection>
</collection>
</resultMap>
<!--refundstatus 退款状态:0-是无退款;1-是部分退款;2-是全部退款
<select id="selectMchOrderPageList" resultMap="MchOrderResult">
<include refid="mchOrderColumns"/>
<include refid="mchOrderFromAndJoins"/>
<include refid="mchOrderWhereCondition"/>
ORDER BY ob.order_time DESC
</select>
<select id="countMchOrderByCondition" resultType="java.lang.Long">
SELECT COUNT(DISTINCT ob.order_id)
<include refid="mchOrderFromAndJoins"/>
<include refid="mchOrderWhereCondition"/>
</select>
<select id="getMchOrderDetail" resultMap="MchOrderResult">
<include refid="mchOrderColumns"/>
<include refid="mchOrderFromAndJoins"/>
<where>
ob.order_id=#{orderId}
</where>
ORDER BY ob.order_id DESC
</select>
<!--应付金额/应支付金额:order_goods_amount - order_discount_amount + order_shipping_fee - order_voucher_price - order_points_fee - order_adjust_fee-->
<sql id="mchOrderColumns">
SELECT
ob.order_id,
ob.order_time,
<!--送达时间戳-->
CASE
WHEN oi.delivery_type_id IS NOT NULL AND oi.delivery_type_id = 16 AND #{expireSeconds} IS NOT NULL AND
#{expireSeconds} > 0
THEN oi.order_time + #{expireSeconds}*1000
ELSE oi.order_time + 864000000 <!-- 10天 = 10*24*60*60*1000 = 864000000毫秒 -->
END as arrival_time,
ob.order_product_amount,
ob.order_payment_amount,
ob.currency_id,
ob.order_state_id,
ob.operate_flag,
ST_Distance_Sphere(
POINT(sb.store_longitude, sb.store_latitude),
POINT(oda.da_longitude, oda.da_latitude)
) as distance,
oi.order_title,
oi.order_pickup_num,
oi.delivery_type_id,
oi.buyer_user_id,
oi.order_picked_time,
oi.order_is_received,
oi.kind_id,
IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id IN
(2011,2012,
2013, 2014, 2020, 2030, 2040))>1,2,1)
AS is_new_buyer,
oi.payment_time,
oi.booking_state,
oi.booking_begin_time,
oi.booking_end_time,
oi.booking_at,
od.order_shipping_fee,
IFNULL(od.order_shipping_fee_inner, 0) as order_shipping_fee_inner,
IFNULL(od.lkl_fee, 0) as lkl_fee,
<!--总计优惠金额 order_discount_amount + order_voucher_price + order_points_fee + order_adjust_fee-->
(od.order_discount_amount + od.voucher_price + od.order_points_fee + od.order_adjust_fee) as
total_discount_amount,
<!--预计收入:订单原价金额-总计优惠金额-配送费-平台费-拉卡拉手续费 + 打包费-->
(ob.order_product_amount-od.order_discount_amount-od.voucher_price-od.order_points_fee-od.order_adjust_fee-od.platform_fee-order_shipping_fee_inner-lkl_fee+od.packing_fee)
as order_income_amount,
(od.platform_fee+lkl_fee) as platform_fee,
od.packing_fee,
od.order_message,
sb.store_id,
sb.store_name,
sb.store_logo,
sb.store_latitude,
sb.store_longitude,
sb.store_area,
sb.store_address,
sb.store_grade_id,
sbsg.store_grade_name,
oit.item_id,
oit.product_id,
oit.item_name,
oit.order_item_quantity,
oit.item_unit_price,
oit.order_item_amount,
IF(oit.order_item_return_num > 0, oit.order_item_return_num, 0) AS order_item_return_num,
IF(oit.order_item_return_agree_amount > 0, oit.order_item_return_agree_amount, 0.00) AS
order_item_return_agree_amount,
spi.item_barcode,
oit.order_item_image,
oit.spec_info,
oda.da_name,
oda.da_mobile,
oda.da_latitude,
oda.da_longitude,
oda.da_province,
oda.da_city,
oda.da_county,
oda.da_address,
osf.sf_order_id,
osf.operator_name,
osf.operator_phone,
osf.rider_lng,
osf.rider_lat,
osf.order_status,
osf.status_desc,
osf.cancel_code,
osf.cancel_reason,
osf.push_time,
osf.h5_url,
osf.feed,
<!-- 退款信息字段 -->
sor.return_id,
sor.order_id as return_order_id,
sor.buyer_user_id as return_buyer_user_id,
sor.buyer_store_id as return_buyer_store_id,
sor.return_reason_id,
sorr.return_reason_name,
sor.return_buyer_message,
sor.store_id as return_store_id,
sor.return_refund_amount,
sor.return_commision_fee,
sor.return_state_id,
sc1.state_code_name as return_state_name,
sor.return_tel,
sor.return_year,
sor.return_month,
sor.return_day,
sor.return_addr,
sor.return_mobile,
sor.return_telephone,
sor.return_contact_name,
sor.subsite_id as return_subsite_id,
sor.return_add_time,
sor.return_finish_time,
sor.return_is_paid,
sor.return_channel_code,
sor.return_channel_trans_id,
sor.return_channel_time,
sor.return_channel_flag,
sor.deposit_trade_no as return_deposit_trade_no,
sor.payment_channel_id as return_payment_channel_id,
sor.return_store_message,
sor.plantform_return_state_id,
sc2.state_code_name as plantform_return_state_name,
sor.return_flag,
sor.return_type,
sor.return_refund_amount as submit_return_refund_amount,
ob.buyer_user_name as return_buyer_user_name,
sor.try_return_count,
<!-- 退款收货地址信息 -->
sorda.da_province as return_da_province,
sorda.da_city as return_da_city,
sorda.da_county as return_da_county,
sorda.da_address as return_da_address,
sorda.da_name as return_da_name,
sorda.da_mobile as return_da_mobile,
sorda.da_telephone as return_da_telephone,
sorda.da_province_id as return_da_province_id,
sorda.da_city_id as return_da_city_id,
sorda.da_county_id as return_da_county_id,
sorda.da_latitude as return_da_latitude,
sorda.da_longitude as return_da_longitude,
<!-- 退款商品信息 -->
sori.order_return_item_id,
sori.return_id as item_return_id,
sori.order_item_id as return_order_item_id,
sori.order_id as item_order_id,
sori.return_item_num,
sori.return_item_subtotal,
sori.return_reason_id as item_return_reason_id,
sori.return_item_note,
sori.return_item_image,
sori.return_state_id as item_return_state_id,
sori.return_item_commision_fee,
sori.return_item_store_remark,
soi.item_name as return_item_name,
spb.product_name as return_product_name,
soi.item_id as return_item_id,
soi.order_item_image as return_order_item_image,
spb.unit_id as return_unit_id,
sbpu.unit_name as return_unit_name,
soi.order_item_unit_price as return_order_item_unit_price,
soi.order_item_quantity as return_order_item_quantity,
soi.order_item_amount as return_order_item_amount,
soi.order_item_note as return_order_item_note,
spi.item_number as return_item_number,
spb.product_number as return_product_number
</sql>
<!-- 公共的FROM和JOIN子句 -->
<sql id="mchOrderFromAndJoins">
FROM shop_order_base ob
JOIN shop_order_info oi ON ob.order_id = oi.order_id
JOIN shop_order_data od ON ob.order_id = od.order_id
JOIN shop_store_base sb ON ob.store_id = sb.store_id
JOIN shop_order_delivery_address oda ON ob.order_id = oda.order_id
JOIN shop_order_item oit ON ob.order_id = oit.order_id
LEFT JOIN shop_store_sf_order osf ON ob.order_id = osf.shop_order_id
LEFT JOIN shop_product_item spi ON oit.item_id = spi.item_id
LEFT JOIN shop_base_store_grade sbsg ON sb.store_grade_id = sbsg.store_grade_id
LEFT JOIN shop_order_return sor ON ob.order_id = sor.order_id
LEFT JOIN shop_order_return_reason sorr ON sor.return_reason_id = sorr.return_reason_id
LEFT JOIN shop_base_state_code sc1 ON sor.return_state_id = sc1.state_code_id
LEFT JOIN shop_base_state_code sc2 ON sor.plantform_return_state_id = sc2.state_code_id
LEFT JOIN shop_order_delivery_address sorda ON sor.order_id = sorda.order_id
LEFT JOIN shop_order_return_item sori ON sor.return_id = sori.return_id
LEFT JOIN shop_order_item soi ON sori.order_item_id = soi.order_item_id
LEFT JOIN shop_product_base spb ON soi.product_id = spb.product_id
LEFT JOIN shop_base_product_unit sbpu ON spb.unit_id = sbpu.unit_id
</sql>
<!--refundstatus 退款状态:0-是无退款;1-是部分退款;2-是全部退款
orderstatus 订单状态2010-待付款;2011-待订单审核;2012-待发货;2013-待财务审核;2014-待配货/待出库审核;2020-待发货;
2030-待发货/待收货确认;2040-已发货/待收货确认;2050-已签收;2060-已完成/已签收;2070-已取消/已作废;2080-自提-->
<!-- status: 同城配送订单状态delivery=1时才生效无值 or 0-全部订单1-进行中订单2-异常超时订单3-退款订单9-已完成订单-->
@ -765,145 +1076,6 @@
</where>
</sql>
<!--应付金额/应支付金额:order_goods_amount - order_discount_amount + order_shipping_fee - order_voucher_price - order_points_fee - order_adjust_fee-->
<sql id="mchOrderColumns">
SELECT
ob.order_id,
ob.order_time,
<!--送达时间戳-->
CASE
WHEN oi.delivery_type_id IS NOT NULL AND oi.delivery_type_id = 16 AND #{expireSeconds} IS NOT NULL AND
#{expireSeconds} > 0
THEN oi.order_time + #{expireSeconds}*1000
ELSE oi.order_time + 864000000 <!-- 10天 = 10*24*60*60*1000 = 864000000毫秒 -->
END as arrival_time,
ob.order_product_amount,
ob.order_payment_amount,
ob.currency_id,
ob.order_state_id,
ob.operate_flag,
ST_Distance_Sphere(
POINT(sb.store_longitude, sb.store_latitude),
POINT(oda.da_longitude, oda.da_latitude)
) as distance,
oi.order_title,
oi.order_pickup_num,
oi.delivery_type_id,
oi.buyer_user_id,
oi.order_picked_time,
oi.order_is_received,
oi.kind_id,
IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id IN
(2011,2012,
2013, 2014, 2020, 2030, 2040))>1,2,1)
AS is_new_buyer,
oi.payment_time,
oi.booking_state,
oi.booking_begin_time,
oi.booking_end_time,
oi.booking_at,
od.order_shipping_fee,
IFNULL(od.order_shipping_fee_inner, 0) as order_shipping_fee_inner,
IFNULL(od.lkl_fee, 0) as lkl_fee,
<!--总计优惠金额 order_discount_amount + order_voucher_price + order_points_fee + order_adjust_fee-->
(od.order_discount_amount + od.voucher_price + od.order_points_fee + od.order_adjust_fee) as
total_discount_amount,
<!--预计收入:订单原价金额-总计优惠金额-配送费-平台费-拉卡拉手续费 + 打包费-->
(ob.order_product_amount-od.order_discount_amount-od.voucher_price-od.order_points_fee-od.order_adjust_fee-od.platform_fee-order_shipping_fee_inner-lkl_fee+od.packing_fee)
as order_income_amount,
(od.platform_fee+lkl_fee) as platform_fee,
od.packing_fee,
od.order_message,
sb.store_id,
sb.store_name,
sb.store_logo,
sb.store_latitude,
sb.store_longitude,
sb.store_area,
sb.store_address,
sb.store_grade_id,
sbsg.store_grade_name,
oit.item_id,
oit.product_id,
oit.item_name,
oit.order_item_quantity,
oit.item_unit_price,
oit.order_item_amount,
IF(oit.order_item_return_num > 0, oit.order_item_return_num, 0) AS order_item_return_num,
IF(oit.order_item_return_agree_amount > 0, oit.order_item_return_agree_amount, 0.00) AS
order_item_return_agree_amount,
spi.item_barcode,
oit.order_item_image,
oit.spec_info,
oda.da_name,
oda.da_mobile,
oda.da_latitude,
oda.da_longitude,
oda.da_province,
oda.da_city,
oda.da_county,
oda.da_address,
osf.sf_order_id,
osf.operator_name,
osf.operator_phone,
osf.rider_lng,
osf.rider_lat,
osf.order_status,
osf.status_desc,
osf.cancel_code,
osf.cancel_reason,
osf.push_time,
osf.h5_url,
osf.feed
</sql>
<select id="selectMchOrderPageList" resultMap="MchOrderResult">
<include refid="mchOrderColumns"/>
from shop_order_base ob
join shop_order_info oi on ob.order_id=oi.order_id
join shop_order_data od on ob.order_id=od.order_id
join shop_store_base sb on ob.store_id=sb.store_id
join shop_order_delivery_address oda on ob.order_id=oda.order_id
join shop_order_item oit on ob.order_id=oit.order_id
left join shop_store_sf_order osf on ob.order_id=osf.shop_order_id
left join shop_product_item spi on oit.product_id=spi.product_id
left join shop_base_store_grade sbsg on sb.store_grade_id=sbsg.store_grade_id
<include refid="mchOrderWhereCondition"/>
ORDER BY ob.order_time DESC
</select>
<select id="countMchOrderByCondition" resultType="java.lang.Long">
SELECT COUNT(DISTINCT ob.order_id)
FROM shop_order_base ob
JOIN shop_order_info oi ON ob.order_id = oi.order_id
JOIN shop_order_data od ON ob.order_id = od.order_id
JOIN shop_store_base sb ON ob.store_id = sb.store_id
JOIN shop_order_delivery_address oda ON ob.order_id = oda.order_id
<include refid="mchOrderWhereCondition"/>
</select>
<select id="getMchOrderDetail" resultMap="MchOrderResult">
<include refid="mchOrderColumns"/>
from shop_order_base ob
join shop_order_info oi on ob.order_id=oi.order_id
join shop_order_data od on ob.order_id=od.order_id
join shop_store_base sb on ob.store_id=sb.store_id
join shop_order_delivery_address oda on ob.order_id=oda.order_id
join shop_order_item oit on ob.order_id=oit.order_id
left join shop_store_sf_order osf on ob.order_id=osf.shop_order_id
left join shop_product_item spi on oit.product_id=spi.product_id
left join shop_base_store_grade sbsg on sb.store_grade_id=sbsg.store_grade_id
<where>
ob.order_id=#{orderId}
</where>
ORDER BY ob.order_id DESC
</select>
<select id="getWxOrderBaseInfo" resultMap="WxOrderBaseInfoResult">
SELECT a.store_id,