Commit e5051315 by xiaoer.li@freemud.com

Merge branch 'feature/2020-1104-混合支付' into qa

parents c2202787 64fffaac
...@@ -28,8 +28,8 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; ...@@ -28,8 +28,8 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo; import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.OrderChannelType; import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.OrderSourceType; import cn.freemud.enums.OrderSourceType;
import cn.freemud.enums.OrderType; import cn.freemud.enums.OrderType;
...@@ -3605,8 +3605,7 @@ public class OrderAdapter { ...@@ -3605,8 +3605,7 @@ public class OrderAdapter {
, String partnerPayOvertime , String partnerPayOvertime
, String orderClient , String orderClient
, String channel , String channel
, Integer totalAmount , Integer totalAmount) {
, Integer svcAmount) {
CombPayRequest orderPayDto = new CombPayRequest(); CombPayRequest orderPayDto = new CombPayRequest();
orderPayDto.setEbCode(paymentRequest.getPayCode()); orderPayDto.setEbCode(paymentRequest.getPayCode());
orderPayDto.setPartner_id(orderBean.getCompanyId()); orderPayDto.setPartner_id(orderBean.getCompanyId());
...@@ -3637,16 +3636,15 @@ public class OrderAdapter { ...@@ -3637,16 +3636,15 @@ public class OrderAdapter {
} }
orderPayDto.setProducts(productVOS); orderPayDto.setProducts(productVOS);
List<PayPlatformVO> platforms = new ArrayList<>(); List<PayPlatformVO> platforms = new ArrayList<>();
Long svc = svcAmount.longValue();
PayPlatformVO payPlatformVO = new PayPlatformVO(); PayPlatformVO payPlatformVO = new PayPlatformVO();
payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode()); payPlatformVO.setClientCode(PayChannelType.SVC.getEbcode());
payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode()); payPlatformVO.setEbcode(PayChannelType.SVC.getEbcode());
payPlatformVO.setAmount(svc); payPlatformVO.setAmount(0L);
platforms.add(payPlatformVO); platforms.add(payPlatformVO);
String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode(); String ebcode = PayChannelType.getByIndex(Byte.parseByte(channel)).getEbcode();
payPlatformVO = new PayPlatformVO(); payPlatformVO = new PayPlatformVO();
payPlatformVO.setAmount(totalAmount.longValue() - svc); payPlatformVO.setAmount(0L);
payPlatformVO.setClientCode(orderClient); payPlatformVO.setClientCode(orderClient);
payPlatformVO.setEbcode(ebcode); payPlatformVO.setEbcode(ebcode);
platforms.add(payPlatformVO); platforms.add(payPlatformVO);
...@@ -3664,9 +3662,7 @@ public class OrderAdapter { ...@@ -3664,9 +3662,7 @@ public class OrderAdapter {
*/ */
public OrderPayResponse convent2OrderCombPayResponse(List<CombPayResponse.PayPlatform> payPlatforms public OrderPayResponse convent2OrderCombPayResponse(List<CombPayResponse.PayPlatform> payPlatforms
,String partnerId ,String partnerId
,String storeId ,String storeId) {
,Integer totalAmount
,Integer svcAmount) {
CombPayResponse.PayPlatform payPlatform = payPlatforms CombPayResponse.PayPlatform payPlatform = payPlatforms
.stream() .stream()
.filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst() .filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
...@@ -3691,7 +3687,6 @@ public class OrderAdapter { ...@@ -3691,7 +3687,6 @@ public class OrderAdapter {
responseDto.setPayOrder(payBean); responseDto.setPayOrder(payBean);
} }
//供修改订单 //供修改订单
Integer cashAmount = totalAmount - svcAmount;
for (CombPayResponse.PayPlatform pt : payPlatforms) { for (CombPayResponse.PayPlatform pt : payPlatforms) {
PayItem payItem = new PayItem(); PayItem payItem = new PayItem();
payItem.setFmTradeNo(pt.getFmTradeNo()); payItem.setFmTradeNo(pt.getFmTradeNo());
...@@ -3700,14 +3695,19 @@ public class OrderAdapter { ...@@ -3700,14 +3695,19 @@ public class OrderAdapter {
payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName()); payItem.setPayChannelName(PayChannelType.getByEbcode(pt.getEbCode()).getName());
payItem.setTransId(pt.getTransId()); payItem.setTransId(pt.getTransId());
payItem.setPartnerId(partnerId); payItem.setPartnerId(partnerId);
if (pt.getEbCode().equals(PayChannel.SVC.getCode())) { if (PayChannelType.SVC.getEbcode().equals(pt.getEbCode())) {
payItem.setPayAmount(new BigDecimal(svcAmount)); payItem.setPayAmount(new BigDecimal(pt.getPayAmount()));
responseDto.setPayMode(PayChannelType.SVC.getEbcode());
} }
else { else if (PayChannelType.WECHAT.getEbcode().equals(pt.getEbCode()) || PayChannelType.ALIPAY.getEbcode().equals(pt.getEbCode())){
payItem.setPayAmount(new BigDecimal(cashAmount)); payItem.setPayAmount(new BigDecimal(pt.getPayAmount()));
responseDto.setPayMode(PayChannelType.getByEbcode(pt.getEbCode()).getEbcode());
} }
responseDto.getPayItem().add(payItem); responseDto.getPayItem().add(payItem);
} }
if(responseDto.getPayItem().size()==2) {
responseDto.setPayMode(PayChannelType.COMB.getEbcode());
}
return responseDto; return responseDto;
} }
} }
...@@ -51,12 +51,12 @@ public class CombPayResponse { ...@@ -51,12 +51,12 @@ public class CombPayResponse {
@ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一") @ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一")
private String outOrderNo; private String outOrderNo;
@ApiModelProperty(value = "支付帐号")
private String payAccount;
@ApiModelProperty(value = "第三方支付交易序号") @ApiModelProperty(value = "第三方支付交易序号")
private String platformTradeNo; private String platformTradeNo;
@ApiModelProperty(value = "支付金额")
private Integer payAmount;
@ApiModelProperty(value = "间联单号") @ApiModelProperty(value = "间联单号")
private String transId; private String transId;
@ApiModelProperty(value = "") @ApiModelProperty(value = "")
......
...@@ -4,6 +4,7 @@ import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter; ...@@ -4,6 +4,7 @@ import cn.freemud.adapter.LightApplicationConvertToAssortmentSdkAdapter;
import cn.freemud.adapter.OrderAdapter; import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal; import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.ConfirmOrderDto; import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto; import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.AppCreateOrderVo; import cn.freemud.entities.vo.AppCreateOrderVo;
...@@ -240,6 +241,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -240,6 +241,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return gson.toJson(message); return gson.toJson(message);
} }
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode()); QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
// 混合支付失败,取消订单
if (message.getResult_code().equals(ResponseCodeConstant.RESPONSE_SUCCESS)) {
return orderService.cannelComPayOrder(confirmOrderDto, orderBean);
}
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){ if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
return orderAdapter.sendPaySuccessNoticeMessage(); return orderAdapter.sendPaySuccessNoticeMessage();
} }
......
...@@ -2371,7 +2371,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2371,7 +2371,9 @@ public class OrderServiceImpl implements Orderservice {
, String storeId , String storeId
, String trackingNo) { , String trackingNo) {
boolean tigger = false;
OrderPayResponse orderPayResponse = new OrderPayResponse(); OrderPayResponse orderPayResponse = new OrderPayResponse();
/*
SVCCardAmountRequest svcRequest = new SVCCardAmountRequest(); SVCCardAmountRequest svcRequest = new SVCCardAmountRequest();
svcRequest.setPartnerId(orderBean.getCompanyId()); svcRequest.setPartnerId(orderBean.getCompanyId());
svcRequest.setCardCodes(Arrays.asList(cardCode)); svcRequest.setCardCodes(Arrays.asList(cardCode));
...@@ -2389,16 +2391,17 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2389,16 +2391,17 @@ public class OrderServiceImpl implements Orderservice {
// 校验金额 // 校验金额
Integer svcAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getAmount() ; Integer svcAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getAmount() ;
Integer svcVAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getVamount() ; Integer svcVAmount = svcCardAmount.getData().getData().getCardSimpleInfos().get(0).getVamount() ;
boolean tigger = false;
//todo : svc卡的金额小于订单金额 //todo : svc卡的金额小于订单金额
if(svcAmount + svcVAmount >0 && totalAmount> svcAmount + svcVAmount){ if(svcAmount + svcVAmount >0 && totalAmount> svcAmount + svcVAmount){
tigger = true; tigger = true;
} }
*/
tigger = true;
//混合支付 //混合支付
if (tigger && StringUtils.isNotBlank(channel)) { if (tigger && StringUtils.isNotBlank(channel)) {
log.info("混合支付:"); log.info("混合支付:");
String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId()); String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId());
orderPayResponse = comPayOrder(cardCode,orderBean,paymentRequest,partnerPayOvertime,totalAmount.intValue(), svcAmount,svcVAmount,channel,storeId,LogThreadLocal.getTrackingNo()); orderPayResponse = comPayOrder(cardCode,orderBean,paymentRequest,partnerPayOvertime,totalAmount.intValue(),channel,storeId,LogThreadLocal.getTrackingNo());
} }
//svc 支付 //svc 支付
else { else {
...@@ -2766,7 +2769,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2766,7 +2769,7 @@ public class OrderServiceImpl implements Orderservice {
orderEditRequest.setPayChannelType(PayChannelType.getByEbcode(orderPayResponse.getPayMode()).getIndex()); orderEditRequest.setPayChannelType(PayChannelType.getByEbcode(orderPayResponse.getPayMode()).getIndex());
} }
//混合支付项 //混合支付项
if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) { if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem()) && orderPayResponse.getPayMode().equals(PayChannelType.COMB.getEbcode())) {
orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem()); orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem());
orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode()); orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode());
orderEditRequest.setPayChannelName(PayChannelType.COMB.getName()); orderEditRequest.setPayChannelName(PayChannelType.COMB.getName());
...@@ -3279,8 +3282,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3279,8 +3282,6 @@ public class OrderServiceImpl implements Orderservice {
* @param paymentRequest * @param paymentRequest
* @param partnerPayOvertime * @param partnerPayOvertime
* @param totalAmount * @param totalAmount
* @param svcAmount
* @param svcVAmount
* @param channel * @param channel
* @param storeId * @param storeId
* @param trackingNo * @param trackingNo
...@@ -3291,8 +3292,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3291,8 +3292,6 @@ public class OrderServiceImpl implements Orderservice {
, PaymentRequest paymentRequest , PaymentRequest paymentRequest
, String partnerPayOvertime , String partnerPayOvertime
, Integer totalAmount , Integer totalAmount
, Integer svcAmount
, Integer svcVAmount
, String channel , String channel
, String storeId , String storeId
, String trackingNo) { , String trackingNo) {
...@@ -3304,33 +3303,70 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3304,33 +3303,70 @@ public class OrderServiceImpl implements Orderservice {
return orderPayResponse; return orderPayResponse;
} }
CombPayRequest combPayRequest = orderAdapter.convent2CombPayOrderRequest(cardNo, orderBean, paymentRequest, partnerPayOvertime, ebCode, channel, totalAmount, svcAmount+svcVAmount); CombPayRequest combPayRequest = orderAdapter.convent2CombPayOrderRequest(cardNo, orderBean, paymentRequest, partnerPayOvertime, ebCode, channel, totalAmount);
CombPayResponse combPayResponse = comPayClient.combPay(combPayRequest, combPayRequest.getPartner_id()); //todo :xxxooooo xxxoooxox
if (!ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(combPayResponse.getCode())|| combPayResponse.getData().getPayPlatformResponseList().size()==0) { CombPayResponse combPayResponse = null;
int i = 1;
do {
try {
combPayResponse = comPayClient.combPay(combPayRequest, combPayRequest.getPartner_id());
if (combPayResponse!=null) {
break;
}
} catch (Exception exception) {}
i++;
} while (i<4);
if (combPayResponse==null || !ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(combPayResponse.getCode())) {
log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(combPayResponse)); log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(combPayResponse));
orderPayResponse.setMsg(combPayResponse.getMsg()); orderPayResponse.setMsg(combPayResponse.getMsg());
return orderPayResponse; return orderPayResponse;
} }
Integer svcAmount = 0;
Integer svcVAmount = 0;
List<CombPayResponse.PayPlatform> payPlatforms = combPayResponse.getData().getPayPlatformResponseList();
if(payPlatforms.size()==0) {
orderPayResponse.setMsg("混合支付:生成预支付失败");
return orderPayResponse;
}
//生成预支付参数 //生成预支付参数
CombPayResponse.PayPlatform payPlatform = combPayResponse.getData().getPayPlatformResponseList() CombPayResponse.PayPlatform cashPay = payPlatforms
.stream() .stream()
.filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst() .filter(f -> !PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
.orElse(null); .orElse(null);
if(payPlatform==null) {
orderPayResponse.setMsg("支付:现金支付错误"); //现金+svc 现金
return orderPayResponse; if (payPlatforms.size()==2 || payPlatforms.size()==1 && cashPay!=null) {
} orderPayResponse = orderAdapter.convent2OrderCombPayResponse(combPayResponse.getData().getPayPlatformResponseList(),orderBean.getCompanyId(),storeId);
orderPayResponse = orderAdapter.convent2OrderCombPayResponse(combPayResponse.getData().getPayPlatformResponseList(),orderBean.getCompanyId(),storeId,totalAmount, svcAmount+svcVAmount);
orderPayResponse.setOpenId(paymentRequest.getOpenId()); orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId()); orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setPartnerId(orderBean.getCompanyId()); orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid()); orderPayResponse.setOrderId(orderBean.getOid());
orderPayResponse.setPayMode(PayChannelType.COMB.getEbcode()); orderPayResponse.setPayMode(orderPayResponse.getPayMode());
//隐射关系 //隐射关系
redisCache.save(RedisUtil.getPaymentTransIdOrderKey(payPlatform.getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS); redisCache.save(RedisUtil.getPaymentTransIdOrderKey(cashPay.getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
//加入轮训队列 //加入轮训队列
putDelMq(orderBean.getCompanyId(),storeId, orderPayResponse.getFmId(), orderBean.getOid(), PayChannelType.getByEbcode(payPlatform.getEbCode()).getIndex().intValue()); putDelMq(orderBean.getCompanyId(),storeId, orderPayResponse.getFmId(), orderBean.getOid(), PayChannelType.getByEbcode(cashPay.getEbCode()).getIndex().intValue());
return orderPayResponse;
}
//单svc
else{
CombPayResponse.PayPlatform svcPay = payPlatforms
.stream()
.filter(f -> PayChannelType.SVC.getEbcode().equals(f.getEbCode())).findFirst()
.orElse(null);
orderPayResponse.setFmId(orderPayResponse.getFmId());
orderPayResponse.setPayTransId(svcPay.getTransId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setPartnerId(orderBean.getCompanyId());
orderPayResponse.setOrderId(orderBean.getOid());
orderPayResponse.setPayMode(PayChannelType.SVC.getEbcode());
}
return orderPayResponse; return orderPayResponse;
} }
/** /**
...@@ -3353,4 +3389,43 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3353,4 +3389,43 @@ public class OrderServiceImpl implements Orderservice {
} }
return ""; return "";
} }
public String cannelComPayOrder(ConfirmOrderDto confirmOrderDto, QueryOrdersResponseDto.DataBean.OrderBean orderBean) {
//失败冲正库存,冲正活动库存,取消订单
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(confirmOrderDto.getOrderId(), orderBean.getCompanyId(),
AfterSalesType.SYSTEM_CANCEL,"混合支付SVC卡支付失败", LogTreadLocal.getTrackingNo(), null);
//BaseOrderResponse request = orderCenterSdkService.orderCancel(cancelOrderRequest);
BaseOrderResponse request = null;
int i = 1;
do {
try {
request = orderCenterSdkService.orderCancel(cancelOrderRequest);
if (ResponseCodeConstant.RESPONSE_SUCCESS.equals(request.getErrcode())) {
break;
}
} catch (Exception e) {}
i++;
}while (i<4);
backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
if(ResponseCodeConstant.RESPONSE_SUCCESS.equals(request.getErrcode())) {
return this.newSendPayFaileMessage();
} else {
return this.newSendPaySuccessNoticeMessage();
}
}
/**
* 取消混合支付svc扣款失败的订单
* @param orderId
* @return
*/
//public String cannelComPayOrder(String orderId) {
// //失败冲正库存,冲正活动库存,取消订单
// CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderId, orderBean.getCompanyId(),
// AfterSalesType.SYSTEM_CANCEL, StringUtils.join(new String[]{"获取预支付失败", msg}, '-'), trackingNo, null);
// orderCenterSdkService.orderCancel(cancelOrderRequest);
// // TODO: 2019/9/10 hubowen mq推送变更
// backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus());
//}
} }
...@@ -1676,26 +1676,10 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1676,26 +1676,10 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
svcPayAmount = svcTotalAmount; svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue()-svcPayAmount.longValue())); shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue()-svcPayAmount.longValue()));
} }
/**
BigDecimal svcPayAmount = BigDecimal.ZERO;
if (orderAmount >= amount1 + vamount) {
//throw new ServiceException(ResponseResult.USER_SVC_CARD_AMOUNT_DEFICIENCY);
svcPayAmount = new BigDecimal(amount1 + vamount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
shoppingCartGoodsResponseVo.setTotalAmount(orderAmount - svcPayAmount.multiply(new BigDecimal(100)).longValue());
}
else {
svcPayAmount = new BigDecimal(orderAmount - deliveryAmount).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
shoppingCartGoodsResponseVo.setTotalAmount(deliveryAmount.longValue());
}
*/
BigDecimal bigDecimal = new BigDecimal(svcPayAmount); BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString(); String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr); shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr); shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
//BigDecimal bigDecimal = new BigDecimal(orderAmount);
//String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
//shoppingCartGoodsResponseVo.setTotalAmount(0L);
//shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
} }
/** /**
......
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