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

Commit 22d41171 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/dev' into dev

parents 2a2c6879 42f29831
package com.liquidnet.service.kylin.dto.vo.mongo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class KylinOrderRefundsVoBase {
private Integer mid;
private String orderRefundsId;
private String orderTicketsId;
private String orderRefundCode;
private String orderRefundBatchesId;
private String refundCode;
private String refundAt;
private String refundId;
private String refundError;
private BigDecimal price;
private BigDecimal priceExpress;
private Integer status;
private Integer type;
private String applicantId;
private String applicantName;
private String applicantAt;
private String reason;
private String auditorId;
private String auditorName;
private String auditorAt;
private String reject;
private String executorId;
private String executorName;
private String executorAt;
private String refuse;
private Integer refundType;
private String refundCate;
private String createdAt;
private String updatedAt;
private List<KylinOrderRefundEntitiesVo> orderRefundEntitiesVoList;
private List<KylinOrderRefundPicVo> orderRefundPicVos;
}
package com.liquidnet.service.kylin.dto.vo.returns;
import com.liquidnet.service.kylin.dao.KylinOrderRefundsEntitiesDao;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundPicVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -106,6 +108,9 @@ public class KylinOrderRefundsVo implements Serializable {
List<KylinOrderRefundsEntitiesDao> entities;
private List<KylinOrderRefundEntitiesVo> orderRefundEntitiesVoList;
private List<KylinOrderRefundPicVo> orderRefundPicVos;
public void setStatusName(Integer status){
this.status=status;
switch (status){
......
package com.liquidnet.service.kylin.dto.vo.returns;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundsVoBase;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import lombok.Data;
import java.util.List;
......
package com.liquidnet.service.kylin.dto.vo.returns;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderRefundsVoBase;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import lombok.Data;
import java.util.List;
@Data
public class OrderRefundVo {
private KylinOrderTicketVo orderTicketVo;
private KylinOrderRefundsVoBase kylinOrderRefundsVoBaseList;
private KylinOrderRefundsVo kylinOrderRefundsVoBaseList;
}
......@@ -1040,16 +1040,16 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
List<KylinOrderRefundsOrderCodeVo> orderRefundsVoBaseList = new ArrayList<>();
for (KylinOrderRefundsVoBase item : dataUtils.getOrderRefundVoByOrderId(orderId)) {
for (KylinOrderRefundsVo item : dataUtils.getOrderRefundVoByOrderId(orderId)) {
KylinOrderRefundsOrderCodeVo data = new KylinOrderRefundsOrderCodeVo();
data.setOrderRefundsId(item.getOrderRefundsId());
data.setOrderRefundCode(item.getOrderRefundCode());
data.setStatus(item.getStatus());
}
List<KylinOrderRefundsVoBase> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderId);
List<KylinOrderRefundsVo> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderId);
List<OrderRefundListVo> orderRefundListVos = new ArrayList<>();
for (KylinOrderRefundsVoBase item : orderRefundsVoList){
for (KylinOrderRefundsVo item : orderRefundsVoList){
OrderRefundListVo data = new OrderRefundListVo();
data.setOrderRefundCode(item.getOrderRefundCode().substring(item.getOrderRefundCode().length()-10));
data.setOrderRefundsId(item.getOrderRefundsId());
......@@ -1121,7 +1121,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
List<KylinOrderRefundsVoBase> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
}
......@@ -1164,7 +1164,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
return null;
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
KylinOrderRefundsVoBase kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
return vo;
......@@ -1176,7 +1176,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
try {
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
List<KylinOrderRefundsVoBase> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
......@@ -1221,7 +1221,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
try {
KylinOrderRefundsVoBase orderRefundsVo = dataUtils.getOrderRefundVo(orderRefundsId);
KylinOrderRefundsVo orderRefundsVo = dataUtils.getOrderRefundVo(orderRefundsId);
if(!orderRefundsVo.getStatus().equals(0)){
return ResponseDto.failure(ErrorMapping.get("20020"));
}
......@@ -1233,8 +1233,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newStatus;
int refundingCount = 0;
List<KylinOrderRefundsVoBase> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderTicketsId);
for (KylinOrderRefundsVoBase item : orderRefundsVoList) {
List<KylinOrderRefundsVo> orderRefundsVoList = dataUtils.getOrderRefundVoByOrderId(orderTicketsId);
for (KylinOrderRefundsVo item : orderRefundsVoList) {
int status = item.getStatus();
if (status != 2 && status != 4 && status != 6 && !item.getOrderRefundsId().equals(orderRefundsId)) {
refundingCount += 1;
......@@ -1277,7 +1277,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
// 订单状态表 判断是退到正在退款 已付款 部分退款?(取消,完成,失败)
int newIsPayment = 0;
int refundingEntitiesCount = 0;
for (KylinOrderRefundsVoBase item2 : orderRefundsVoList) {
for (KylinOrderRefundsVo item2 : orderRefundsVoList) {
int status = item2.getStatus();
if (!item2.getOrderRefundsId().equals(orderRefundsId) && (status != 2 && status != 4 && status != 6)) {
for (KylinOrderRefundEntitiesVo item3 : item2.getOrderRefundEntitiesVoList()) {
......@@ -1329,11 +1329,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
KylinOrderRefundsVoBase orderRefundsVoBase = new KylinOrderRefundsVoBase();
KylinOrderRefundsVo orderRefundsVoBase = new KylinOrderRefundsVo();
orderRefundsVoBase.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
orderRefundsVoBase.setUpdatedAt(strTime);
orderRefundsVoBase.setUpdatedAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVoBase)));
mongoTemplate.getCollection(KylinOrderRefundsVoBase.class.getSimpleName()).updateOne(
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)).getQueryObject(),
refundObject
);
......@@ -1363,7 +1363,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
String uid = CurrentUtil.getCurrentUid();
KylinOrderRefundsVoBase orderRefundVo = dataUtils.getOrderRefundVo(orderRefundsId);
KylinOrderRefundsVo orderRefundVo = dataUtils.getOrderRefundVo(orderRefundsId);
// 订单状态表 MQ
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
......@@ -1401,12 +1401,12 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
);
dataUtils.delOrderTicketEntitiesRedis(orderRefundVo.getOrderRefundEntitiesVoList().get(0).getOrderTicketEntitiesId());
// 订单退款表 MONGO
KylinOrderRefundsVoBase orderRefundsVo = new KylinOrderRefundsVoBase();
KylinOrderRefundsVo orderRefundsVo = new KylinOrderRefundsVo();
orderRefundsVo.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
orderRefundsVo.setUpdatedAt(strTime);
orderRefundsVo.setApplicantAt(strTime);
orderRefundsVo.setUpdatedAt(time);
orderRefundsVo.setApplicantAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVo)));
mongoTemplate.getCollection(KylinOrderRefundsVoBase.class.getSimpleName()).updateOne(
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundVo.getOrderRefundsId())).getQueryObject(),
refundObject
);
......
......@@ -272,11 +272,11 @@ public class KylinRefundsStatusServiceImpl {
}
kylinOrderRefunds.setCreatedAt(time);
KylinOrderRefundsVoBase orderRefundsVo = new KylinOrderRefundsVoBase();
KylinOrderRefundsVo orderRefundsVo = new KylinOrderRefundsVo();
BeanUtils.copyProperties(kylinOrderRefunds,orderRefundsVo);
orderRefundsVo.setCreatedAt(strTime);
orderRefundsVo.setApplicantAt(strTime);
mongoTemplate.insert(orderRefundsVo, KylinOrderRefundsVoBase.class.getSimpleName());
orderRefundsVo.setCreatedAt(time);
orderRefundsVo.setApplicantAt(time);
mongoTemplate.insert(orderRefundsVo, KylinOrderRefundsVo.class.getSimpleName());
......
......@@ -9,6 +9,7 @@ import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderListVo;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.KylinBuyNoticeMapper;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -569,25 +570,25 @@ public class DataUtils {
return query;
}
public KylinOrderRefundsVoBase getOrderRefundVo(String orderRefundsId){
public KylinOrderRefundsVo getOrderRefundVo(String orderRefundsId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND + orderRefundsId)) {
} else {
KylinOrderRefundsVoBase orderRefundsVo = mongoTemplate.findOne(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundsVoBase.class, KylinOrderRefundsVoBase.class.getSimpleName());
KylinOrderRefundsVo orderRefundsVo = mongoTemplate.findOne(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
orderRefundsVo.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
orderRefundsVo.setOrderRefundPicVos(picVos);
redisUtil.set(KylinRedisConst.ORDER_REFUND + orderRefundsId, orderRefundsVo);
}
return (KylinOrderRefundsVoBase) redisUtil.get(KylinRedisConst.ORDER_REFUND + orderRefundsId);
return (KylinOrderRefundsVo) redisUtil.get(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public List<KylinOrderRefundsVoBase> getOrderRefundVoByOrderId(String orderId){
public List<KylinOrderRefundsVo> getOrderRefundVoByOrderId(String orderId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId)) {
} else {
List<KylinOrderRefundsVoBase> orderRefundsVoList = new ArrayList<>();
List<KylinOrderRefundsVoBase> data = mongoTemplate.find(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderRefundsVoBase.class, KylinOrderRefundsVoBase.class.getSimpleName());
for (KylinOrderRefundsVoBase item : data) {
List<KylinOrderRefundsVo> orderRefundsVoList = new ArrayList<>();
List<KylinOrderRefundsVo> data = mongoTemplate.find(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName());
for (KylinOrderRefundsVo item : data) {
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
if(kylinOrderTicketEntitiesVoList.size()>1){
continue;
......@@ -599,7 +600,7 @@ public class DataUtils {
}
redisUtil.set(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId, orderRefundsVoList);
}
return (List<KylinOrderRefundsVoBase>) redisUtil.get(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
return (List<KylinOrderRefundsVo>) redisUtil.get(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
public void delOrderRefundVo(String orderRefundsId){
......@@ -616,7 +617,7 @@ public class DataUtils {
* @param orderTicketEntitiesId 票单id
* @return
*/
public BigDecimal getCanRefundOrderEntitiesPrice(KylinOrderTicketVo orderTicketVo, List<KylinOrderRefundsVoBase> kylinOrderRefundsVoBaseList, String orderTicketEntitiesId){
public BigDecimal getCanRefundOrderEntitiesPrice(KylinOrderTicketVo orderTicketVo, List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList, String orderTicketEntitiesId){
//单票实付价格
BigDecimal singlePrice = orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()));
//单票剩余未退款金额
......@@ -628,7 +629,7 @@ public class DataUtils {
}
//订单锁定金额
BigDecimal orderLockPrice = new BigDecimal("0.00");
for (KylinOrderRefundsVoBase refundVo : kylinOrderRefundsVoBaseList) {
for (KylinOrderRefundsVo refundVo : kylinOrderRefundsVoBaseList) {
int status = refundVo.getStatus();
if (status == 0 || status == 3 || status == 5 || status == 7) { //退款流程未完成 金额锁定
List<KylinOrderRefundEntitiesVo> refundEntitiesVos = refundVo.getOrderRefundEntitiesVoList();
......
......@@ -586,38 +586,6 @@ public class DataUtils {
return query;
}
public KylinOrderRefundsVoBase getOrderRefundVo(String orderRefundsId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND + orderRefundsId)) {
} else {
KylinOrderRefundsVoBase orderRefundsVo = mongoTemplate.findOne(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundsVoBase.class, KylinOrderRefundsVoBase.class.getSimpleName());
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
orderRefundsVo.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
orderRefundsVo.setOrderRefundPicVos(picVos);
redisUtil.set(KylinRedisConst.ORDER_REFUND + orderRefundsId, orderRefundsVo);
}
return (KylinOrderRefundsVoBase) redisUtil.get(KylinRedisConst.ORDER_REFUND + orderRefundsId);
}
public List<KylinOrderRefundsVoBase> getOrderRefundVoByOrderId(String orderId){
if (redisUtil.hasKey(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId)) {
} else {
List<KylinOrderRefundsVoBase> orderRefundsVoList = new ArrayList<>();
List<KylinOrderRefundsVoBase> data = mongoTemplate.find(Query.query(Criteria.where("orderTicketsId").is(orderId)), KylinOrderRefundsVoBase.class, KylinOrderRefundsVoBase.class.getSimpleName());
for (KylinOrderRefundsVoBase item : data) {
List<KylinOrderRefundEntitiesVo> kylinOrderTicketEntitiesVoList = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())), KylinOrderRefundEntitiesVo.class, KylinOrderRefundEntitiesVo.class.getSimpleName());
if(kylinOrderTicketEntitiesVoList.size()>1){
continue;
}
item.setOrderRefundEntitiesVoList(kylinOrderTicketEntitiesVoList);
List<KylinOrderRefundPicVo> picVos = mongoTemplate.find(Query.query(Criteria.where("orderRefundsId").is(item.getOrderRefundsId())),KylinOrderRefundPicVo.class,KylinOrderRefundPicVo.class.getSimpleName());
item.setOrderRefundPicVos(picVos);
orderRefundsVoList.add(item);
}
redisUtil.set(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId, orderRefundsVoList);
}
return (List<KylinOrderRefundsVoBase>) redisUtil.get(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
public void delOrderRefundVo(String orderRefundsId){
redisUtil.del(KylinRedisConst.ORDER_REFUND + orderRefundsId);
......@@ -627,41 +595,4 @@ public class DataUtils {
redisUtil.del(KylinRedisConst.ORDER_REFUND_BY_ORDER_ID + orderId);
}
/**
* 获取可退款票单价格
* @param orderTicketVo 订单vo数据
* @param orderTicketEntitiesId 票单id
* @return
*/
public BigDecimal getCanRefundOrderEntitiesPrice(KylinOrderTicketVo orderTicketVo, List<KylinOrderRefundsVoBase> kylinOrderRefundsVoBaseList, String orderTicketEntitiesId){
//单票实付价格
BigDecimal singlePrice = orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()));
//单票剩余未退款金额
BigDecimal canRefundSinglePrice = new BigDecimal("0.00");
for (KylinOrderTicketEntitiesVo item : orderTicketVo.getEntitiesVoList()) {
if (item.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
canRefundSinglePrice = singlePrice.subtract(item.getRefundPrice()==null?BigDecimal.valueOf(0.00):item.getRefundPrice());
}
}
//订单锁定金额
BigDecimal orderLockPrice = new BigDecimal("0.00");
for (KylinOrderRefundsVoBase refundVo : kylinOrderRefundsVoBaseList) {
int status = refundVo.getStatus();
if (status == 0 || status == 3 || status == 5 || status == 7) { //退款流程未完成 金额锁定
List<KylinOrderRefundEntitiesVo> refundEntitiesVos = refundVo.getOrderRefundEntitiesVoList();
for (KylinOrderRefundEntitiesVo refundEntitiesVo : refundEntitiesVos) {
if (refundEntitiesVo.getOrderTicketEntitiesId().equals(orderTicketEntitiesId)) {
orderLockPrice = orderLockPrice.add(refundEntitiesVo.getRefundPrice());
}
}
}
}
//订单可退金额
BigDecimal refundSinglePrice = canRefundSinglePrice.subtract(orderLockPrice);
//是否包含快递费
if (orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).subtract(orderTicketVo.getPriceRefund()).compareTo(canRefundSinglePrice) == 0) {
refundSinglePrice = refundSinglePrice.add(orderTicketVo.getPriceExpress());
}
return refundSinglePrice;
}
}
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