记得上下班打卡 | git大法好,push需谨慎

Commit c01a6ac1 authored by 胡佳晨's avatar 胡佳晨

Merge branch 'dev' into test

parents c14b920d a027a2bd
......@@ -225,12 +225,13 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
return ResponseDto.failure("无退款订单");
}
Integer[] orderRefundStatus = null;
Integer orderType = KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY;
Integer orderType = null;
switch (type) {
default:
return ResponseDto.failure("type类型错误");
case "cancel":
orderRefundStatus = new Integer[]{KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY, KylinTableStatusConst.ORDER_REFUND_STATUS_REJECT, KylinTableStatusConst.ORDER_REFUND_STATUS_REFUSE};
orderType = KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY;
break;
case "reapply":
orderRefundStatus = new Integer[]{KylinTableStatusConst.ORDER_REFUND_STATUS_REJECT, KylinTableStatusConst.ORDER_REFUND_STATUS_REFUSE};
......@@ -249,12 +250,12 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
break;
}
List<KylinOrderRefunds> refundList = kylinOrderRefundsMapper.selectList(
new QueryWrapper<KylinOrderRefunds>()
.eq("type", orderType)
.in("order_refunds_id", orderRefundsIdList)
.in("status", orderRefundStatus)
);
QueryWrapper<KylinOrderRefunds> listQuery = new QueryWrapper();
listQuery.in("order_refunds_id", orderRefundsIdList).in("status", orderRefundStatus);
if (null != orderType) {
listQuery.eq("type", orderType);
}
List<KylinOrderRefunds> refundList = kylinOrderRefundsMapper.selectList(listQuery);
if (orderRefundsIdList.size() != refundList.size()) {
return ResponseDto.failure("当前状态不允许操作");
}
......
......@@ -33,4 +33,6 @@ public interface KylinOrderTicketEntitiesMapper extends BaseMapper<KylinOrderTic
@Param("orderRefundStatus") Integer orderRefundStatus,
@Param("entitiesId") String entitiesId
);
List<KylinOrderTicketEntitiesDao> getOvertimeRefundEntitiesList(String orderTicketsId);
}
......@@ -46,4 +46,16 @@
AND b.order_ticket_entities_id = #{entitiesId}
</where>
</select>
<select id="getOvertimeRefundEntitiesList"
resultType="com.liquidnet.service.kylin.dao.KylinOrderTicketEntitiesDao">
SELECT a.order_ticket_entities_id, a.enter_name, a.status AS is_out, a.is_payment,
b.title, b.price, b.use_start, b.use_end,
c.get_ticket_type
FROM kylin_order_ticket_entities AS a
JOIN kylin_tickets AS b ON a.ticket_id = b.tickets_id
JOIN kylin_order_tickets AS c ON c.order_tickets_id = a.order_id
<where>
a.order_id = #{orderTicketsId}
</where>
</select>
</mapper>
......@@ -115,7 +115,14 @@ public class KylinOrderTicketsController {
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<OrderRefundVo> orderRefundDetails(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return ResponseDto.success(orderTicketsService.orderRefundDetails(orderId,orderRefundId));
return ResponseDto.success(orderTicketsService.orderRefundDetails(orderId, orderRefundId));
}
@PostMapping("sendOrderRefund")
@ApiOperation("发起退款申请")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<Boolean> orderRefundWithdraw(@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return orderTicketsService.orderRefundWithdraw(orderRefundId) == null ? ResponseDto.failure() : ResponseDto.success();
}
......
......@@ -990,7 +990,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
orderTicketVo.setFieldName(performanceVo.getFieldName());
if (ticketVo.getIsShowCode() == 1) {
Date date = DateUtil.parse(ticketVo.getQrCodeShowTime(), DateUtil.Formatter.yyyyMMddHHmmss.toString());
if (DateUtil.compareDay(DateUtil.now(), date) <= 0) {
if (DateUtil.now().compareTo(date)>= 0) {
orderTicketVo.setQrCode(orderTicketVo.getQrCode());
} else {
orderTicketVo.setQrCode("");
......@@ -1032,7 +1032,7 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
vo.setKuaidi_status(-2);
}
if (null!=performanceVo.getIsCanRefund() && performanceVo.getIsCanRefund() == 1) {
if (null != performanceVo.getIsCanRefund() && performanceVo.getIsCanRefund() == 1) {
Date refundOpenDate = DateUtil.parse(performanceVo.getRefundOpenTime(), "yyyy-MM-dd HH:mm:ss");
Date refundCloseDate = DateUtil.parse(performanceVo.getRefundCloseTime(), "yyyy-MM-dd HH:mm:ss");
if (DateUtil.compareDay(nowDate, refundCloseDate) < 0 && DateUtil.compareDay(nowDate, refundOpenDate) > 0) {
......@@ -1283,107 +1283,144 @@ public class KylinOrderTicketsServiceImpl extends ServiceImpl<KylinOrderTicketsM
@Override
public Boolean orderRefundWithdraw(String orderRefundsId) {
KylinOrderRefundsVoBase orderRefundsVo = dataUtils.getOrderRefundVo(orderRefundsId);
List<KylinOrderRefundEntitiesVo> refundEntities = orderRefundsVo.getOrderRefundEntitiesVoList();
String orderTicketsId = orderRefundsVo.getOrderTicketsId();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderTicketsId);
// 更新数据
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newStatus;
int refundingCount = 0;
List<KylinOrderRefundsVoBase> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderTicketsId);
for (KylinOrderRefundsVoBase item : orderRefundsVoList) {
int status = item.getStatus();
if (status != 2 && status != 4 && status != 6) {
refundingCount += 1;
LinkedList<String> sqls = new LinkedList<>();
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
LinkedList<Object[]> sqlsDataB = new LinkedList<>();
LinkedList<Object[]> sqlsDataC = new LinkedList<>();
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
try {
KylinOrderRefundsVoBase orderRefundsVo = dataUtils.getOrderRefundVo(orderRefundsId);
List<KylinOrderRefundEntitiesVo> refundEntities = orderRefundsVo.getOrderRefundEntitiesVoList();
String orderTicketsId = orderRefundsVo.getOrderTicketsId();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderTicketsId);
// 更新数据
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newStatus;
int refundingCount = 0;
List<KylinOrderRefundsVoBase> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderTicketsId);
for (KylinOrderRefundsVoBase item : orderRefundsVoList) {
int status = item.getStatus();
if (status != 2 && status != 4 && status != 6) {
refundingCount += 1;
}
}
}
if (refundingCount > 0) { // 存在其他正在退款的订单
newStatus = KylinTableStatusConst.ORDER_STATUS3;
} else {
if (orderTicketVo.getPriceRefund().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newStatus = KylinTableStatusConst.ORDER_STATUS6;
} else if (orderTicketVo.getStatus() != 2) {
newStatus = KylinTableStatusConst.ORDER_STATUS1;
if (refundingCount > 0) { // 存在其他正在退款的订单
newStatus = KylinTableStatusConst.ORDER_STATUS3;
} else {
newStatus = KylinTableStatusConst.ORDER_STATUS2;
if (orderTicketVo.getPriceRefund().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newStatus = KylinTableStatusConst.ORDER_STATUS6;
} else if (orderTicketVo.getStatus() != 2) {
newStatus = KylinTableStatusConst.ORDER_STATUS1;
} else {
newStatus = KylinTableStatusConst.ORDER_STATUS2;
}
}
}
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(newStatus);
// kylinOrderTicketStatusMapper.update(orderStatusTable, new UpdateWrapper<KylinOrderTicketStatus>()
// .eq("order_id", orderTicketsId));
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(newStatus);
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderTicketsId)).getQueryObject(),
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderTicketVo.getUserId(), 2, orderTicketsId, null);
// 入场人
for (KylinOrderRefundEntitiesVo item : refundEntities) {
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newIsPayment = 0;
int refundingEntitiesCount = 0;
for (KylinOrderRefundsVoBase item2 :orderRefundsVoList) {
int status = item2.getStatus();
if(!item2.getOrderRefundsId().equals(orderRefundsId) && (status != 2 && status != 4 && status != 6)){
for(KylinOrderRefundEntitiesVo item3: item2.getOrderRefundEntitiesVoList()){
if(item3.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())){
refundingEntitiesCount+=1;
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(newStatus);
orderStatusTable.setUpdatedAt(time);
sqlsDataA.add(new Object[]{
orderStatusTable.getStatus(), orderStatusTable.getUpdatedAt(), orderTicketsId, orderTicketVo.getChangeDate(), orderTicketVo.getChangeDate()
});
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(newStatus);
kylinOrderTicketVo.setUpdatedAt(strTime);
kylinOrderTicketVo.setChangeDate(time);
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderTicketsId)).getQueryObject(),
orderObject
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderTicketVo.getUserId(), 2, orderTicketsId, null);
// 入场人
for (KylinOrderRefundEntitiesVo item : refundEntities) {
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newIsPayment = 0;
int refundingEntitiesCount = 0;
for (KylinOrderRefundsVoBase item2 : orderRefundsVoList) {
int status = item2.getStatus();
if (!item2.getOrderRefundsId().equals(orderRefundsId) && (status != 2 && status != 4 && status != 6)) {
for (KylinOrderRefundEntitiesVo item3 : item2.getOrderRefundEntitiesVoList()) {
if (item3.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())) {
refundingEntitiesCount += 1;
}
}
}
}
}
if (refundingEntitiesCount > 0) { // 存在其他正在退款的该入场人订单
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT2;
} else {
KylinOrderTicketEntitiesVo entitiesVo = null;
for (KylinOrderTicketEntitiesVo entitiesVo1 : orderTicketVo.getEntitiesVoList()) {
if (entitiesVo1.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())) {
entitiesVo = entitiesVo1;
break;
}
}
if (entitiesVo.getRefundPrice().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT4;
if (refundingEntitiesCount > 0) { // 存在其他正在退款的该入场人订单
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT2;
} else {
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT1;
for (KylinOrderTicketEntitiesVo entitiesVo1 : orderTicketVo.getEntitiesVoList()) {
if (entitiesVo1.getOrderTicketEntitiesId().equals(item.getOrderTicketEntitiesId())) {
entitiesVo = entitiesVo1;
break;
}
}
if (entitiesVo.getRefundPrice().doubleValue() > 0) { // 已经有退完的 那就是部分退款了
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT4;
} else {
newIsPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT1;
}
}
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(newIsPayment);
entitiesTable.setUpdatedAt(time);
sqlsDataB.add(new Object[]{
entitiesTable.getIsPayment(), entitiesTable.getUpdatedAt(), item.getOrderTicketEntitiesId(), entitiesVo.getChangeDate(), entitiesVo.getChangeDate()
});
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(newIsPayment);
kylinOrderTicketEntitiesVo.setUpdatedAt(strTime);
kylinOrderTicketEntitiesVo.setChangeDate(time);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(item.getOrderTicketEntitiesId())).getQueryObject(),
entitiesObject
);
dataUtils.delOrderTicketEntitiesRedis(item.getOrderTicketEntitiesId());
}
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(newIsPayment);
// kylinOrderTicketEntitiesMapper.update(entitiesTable, new UpdateWrapper<KylinOrderTicketEntities>()
// .eq("order_ticket_entities_id", entitiesId)
// .eq("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT2)
// );
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(newIsPayment);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(item.getOrderTicketEntitiesId())).getQueryObject(),
entitiesObject
// 退款细节取消
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
KylinOrderRefundsVoBase orderRefundsVoBase = new KylinOrderRefundsVoBase();
orderRefundsVoBase.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
orderRefundsVoBase.setUpdatedAt(strTime);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVoBase)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)).getQueryObject(),
refundObject
);
dataUtils.delOrderTicketEntitiesRedis(item.getOrderTicketEntitiesId());
}
sqlsDataC.add(new Object[]{
orderRefundsVoBase.getStatus(), orderRefundsVoBase.getUpdatedAt(), orderRefundsId
});
// 退款细节取消
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
// kylinOrderRefundsMapper.update(kylinOrderRefunds, new UpdateWrapper<KylinOrderRefunds>()
// .eq("order_refunds_id", orderRefundsId));
sqls.add(SqlMapping.get("kylin_order_ticket_status.withDraw"));
sqls.add(SqlMapping.get("kylin_order_ticket_entities.withDraw"));
sqls.add(SqlMapping.get("kylin_order_refund.withDraw"));
return null;
//TODO 生成新QUERY
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_PAY, MQConst.ROUTING_KEY_SQL_ORDER_PAY,
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC));
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
......
......@@ -203,20 +203,16 @@ public class KylinRefundsStatusServiceImpl {
new UpdateWrapper<KylinOrderRefunds>().in("order_refunds_id", refundInfo.getOrderRefundsId())
);
log.info(UserPathDto.setData("开始处理库存", "info", "info"));
if (refundInfo.getType() == KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY) {
log.info(UserPathDto.setData("开始处理库存 1", "info", "info"));
// 退还库存
for (String entitiesId : orderTicketEntitiesIdsArr) {
log.info(UserPathDto.setData("entitiesId", "entitiesId=" + entitiesId, "info"));
KylinOrderTicketEntities entitiesInfo = kylinOrderTicketEntitiesMapper.selectOne(
new QueryWrapper<KylinOrderTicketEntities>().eq("order_ticket_entities_id", entitiesId)
);
log.info(UserPathDto.setData("IsPayment", "IsPayment=" + entitiesInfo.getIsPayment(), "info"));
if (entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3) {
dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
log.info(UserPathDto.setData("changeBuyInfo", "UserId=" + orderInfo.getUserId() + " PerformanceId=" + orderRelations.getPerformanceId() + " TicketId=" + entitiesInfo.getTicketId(), "info"));
dataUtils.changeBuyInfo(orderInfo.getUserId(), "", orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
log.info(UserPathDto.setData("changeBuyInfo", "UserId=" + orderInfo.getUserId() + "idCard=" + entitiesInfo.getEnterIdCode() + " PerformanceId=" + orderRelations.getPerformanceId() + " TicketId=" + entitiesInfo.getTicketId(), "info"));
dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
}
}
}
......@@ -468,6 +464,7 @@ public class KylinRefundsStatusServiceImpl {
orderRefundPic.getOrderRefundsId(), orderRefundPic.getOrderRefundsId(), orderRefundPic.getPicUrl(), orderRefundPic.getCreatedAt()
});
//TODO 生成新QUERY
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_PAY, MQConst.ROUTING_KEY_SQL_ORDER_PAY,
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC, sqlsDataD, sqlsDataE));
......
......@@ -121,7 +121,7 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
Double RefundPriceExpress = orderInfo.getPriceExpress().doubleValue() - refundPriceExpressSum;
// 查询订单入场人
List<KylinOrderTicketEntitiesDao> entitiesListTemp = kylinOrderTicketEntitiesMapper.getRefundEntitiesList(orderTicketsId);
List<KylinOrderTicketEntitiesDao> entitiesListTemp = kylinOrderTicketEntitiesMapper.getOvertimeRefundEntitiesList(orderTicketsId);
List<KylinOrderTicketEntitiesDao> entitiesList = new ArrayList<>();
if(entitiesListTemp.size() > 0) {
......@@ -130,7 +130,7 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
int allEntitiesCount = kylinOrderTicketEntitiesMapper.selectCount(// 总入场人数量 排出未付款的 用来计算单入场人的价格
new QueryWrapper<KylinOrderTicketEntities>()
.eq("order_id", orderInfo.getOrderTicketsId())
.ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
// .ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
);
double onePrice = (priceActual - priceExpress) / allEntitiesCount;//单价
for (KylinOrderTicketEntitiesDao entities : entitiesListTemp) {
......@@ -169,7 +169,7 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
);
if (entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3) {
dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
dataUtils.changeBuyInfo(orderInfo.getUserId(), "", orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
}
}
return true;
......
......@@ -40,5 +40,9 @@ kylin_order_refund_entities.refund=INSERT INTO kylin_order_refund_entities (orde
kylin_order_refund_pic.refund=INSERT INTO kylin_order_refund_pic (refund_pic_id,order_refunds_id,pic_url,created_at) VALUES (?,?,?,?)
# ------------------------用户发起订单退款撤回----------------------------
kylin_order_ticket_status.withDraw=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_ticket_entities.withDraw=UPDATE kylin_order_ticket_entities SET is_payment = ?,updated_at = ?,sys_damai = 1 WHERE order_id = ? and (updated_at <= ? or created_at = ?)
kylin_order_refund.withDraw=UPDATE kylin_order_refunds SET status = ? ,updated_at = ? WHERE order_refunds_id = ?
# ------------------------用户发起订单退款----------------------------
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment