master
袁野 4 months ago
commit b25f165054
  1. 60
      order/src/main/java/com/order/controller/business/OrderCouponController.java
  2. 1
      service/src/main/java/com/hfkj/dao/BsOrderCouponMapperExt.java
  3. 86
      service/src/main/java/com/hfkj/model/order/OrderCouponModel.java
  4. 8
      service/src/main/java/com/hfkj/service/order/OrderPaySuccessService.java
  5. 4
      service/src/main/java/com/hfkj/service/order/impl/BsOrderAfterSalesApplyServiceImpl.java
  6. 25
      service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java
  7. 9
      service/src/main/java/com/hfkj/sysenum/order/OrderChildStatusEnum.java
  8. 9
      service/src/main/java/com/hfkj/sysenum/order/OrderCouponNoStatusEnum.java
  9. 9
      service/src/main/java/com/hfkj/sysenum/order/OrderPayChannelEnum.java
  10. 9
      service/src/main/java/com/hfkj/sysenum/order/OrderPayTypeEnum.java

@ -1,16 +1,25 @@
package com.order.controller.business; package com.order.controller.business;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.hfkj.common.exception.ErrorCode; import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp; import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode; import com.hfkj.common.exception.SysCode;
import com.hfkj.common.security.UserCenter;
import com.hfkj.common.utils.ResponseMsgUtil; import com.hfkj.common.utils.ResponseMsgUtil;
import com.hfkj.config.CommonSysConst;
import com.hfkj.entity.BsOrderCoupon; import com.hfkj.entity.BsOrderCoupon;
import com.hfkj.model.ResponseData; import com.hfkj.model.ResponseData;
import com.hfkj.model.SecUserSessionObject;
import com.hfkj.model.order.OrderCouponModel; import com.hfkj.model.order.OrderCouponModel;
import com.hfkj.service.coupon.BsOrderCouponNoService; import com.hfkj.service.coupon.BsOrderCouponNoService;
import com.hfkj.service.coupon.BsOrderCouponService; import com.hfkj.service.coupon.BsOrderCouponService;
import com.hfkj.sysenum.SecUserObjectTypeEnum;
import com.hfkj.sysenum.order.OrderChildStatusEnum;
import com.hfkj.sysenum.order.OrderCouponNoStatusEnum;
import com.hfkj.sysenum.order.OrderPayChannelEnum;
import com.hfkj.sysenum.order.OrderPayTypeEnum;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -22,9 +31,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.io.File;
import java.util.List; import java.util.*;
import java.util.Map;
/** /**
* @className: OrderCouponController * @className: OrderCouponController
@ -41,6 +49,8 @@ public class OrderCouponController {
private BsOrderCouponService orderCouponService; private BsOrderCouponService orderCouponService;
@Resource @Resource
private BsOrderCouponNoService orderCouponNoService; private BsOrderCouponNoService orderCouponNoService;
@Resource
private UserCenter userCenter;
@RequestMapping(value="/queryCouNo",method = RequestMethod.GET) @RequestMapping(value="/queryCouNo",method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ -98,6 +108,12 @@ public class OrderCouponController {
@RequestParam(value = "pageSize" , required = true) Integer pageSize) { @RequestParam(value = "pageSize" , required = true) Integer pageSize) {
try { try {
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
SecUserSessionObject userSessionObject = userCenter.getSessionModel(SecUserSessionObject.class);
if (SecUserObjectTypeEnum.type1.getCode() == userSessionObject.getAccount().getObjectType()) {
} else if (SecUserObjectTypeEnum.type2.getCode() == userSessionObject.getAccount().getObjectType()) {
param.put("merId", userSessionObject.getAccount().getObjectId());
}
param.put("orderNo", orderNo); param.put("orderNo", orderNo);
param.put("userPhone", userPhone); param.put("userPhone", userPhone);
param.put("tradeStatus", tradeStatus); param.put("tradeStatus", tradeStatus);
@ -120,7 +136,7 @@ public class OrderCouponController {
@RequestMapping(value="/export",method = RequestMethod.GET) @RequestMapping(value="/export",method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ApiOperation(value = "查询交易订单列表") @ApiOperation(value = "导出订单")
public ResponseData export(@RequestParam(value = "orderNo" , required = false) String orderNo, public ResponseData export(@RequestParam(value = "orderNo" , required = false) String orderNo,
@RequestParam(value = "userPhone" , required = false) String userPhone, @RequestParam(value = "userPhone" , required = false) String userPhone,
@RequestParam(value = "tradeStatus" , required = false) Integer tradeStatus, @RequestParam(value = "tradeStatus" , required = false) Integer tradeStatus,
@ -133,6 +149,12 @@ public class OrderCouponController {
@RequestParam(value = "createTimeE" , required = false) Long createTimeE) { @RequestParam(value = "createTimeE" , required = false) Long createTimeE) {
try { try {
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
SecUserSessionObject userSessionObject = userCenter.getSessionModel(SecUserSessionObject.class);
if (SecUserObjectTypeEnum.type1.getCode() == userSessionObject.getAccount().getObjectType()) {
} else if (SecUserObjectTypeEnum.type2.getCode() == userSessionObject.getAccount().getObjectType()) {
param.put("merId", userSessionObject.getAccount().getObjectId());
}
param.put("orderNo", orderNo); param.put("orderNo", orderNo);
param.put("userPhone", userPhone); param.put("userPhone", userPhone);
param.put("tradeStatus", tradeStatus); param.put("tradeStatus", tradeStatus);
@ -145,8 +167,36 @@ public class OrderCouponController {
param.put("createTimeE", createTimeE); param.put("createTimeE", createTimeE);
List<OrderCouponModel> orderList = orderCouponService.getOrderList(param); List<OrderCouponModel> orderList = orderCouponService.getOrderList(param);
for (OrderCouponModel coupon : orderList) {
if (coupon.getPayChannel() != null) {
coupon.setPayChannel(OrderPayChannelEnum.getData(Integer.valueOf(coupon.getPayChannel())).getName());
}
if (coupon.getPayType() != null) {
coupon.setPayType(OrderPayTypeEnum.getData(Integer.valueOf(coupon.getPayType())).getName());
}
coupon.setTradeStatus(OrderChildStatusEnum.getData(Integer.valueOf(coupon.getTradeStatus())).getName());
coupon.setCouStatus(OrderCouponNoStatusEnum.getData(Integer.valueOf(coupon.getCouStatus())).getName());
coupon.setExceptionStatus(Boolean.getBoolean(coupon.getExceptionStatus())?"是":"否");
}
return ResponseMsgUtil.success(orderList); String fileUrl = CommonSysConst.getSysConfig().getFileUrl() + "/temporary/";
String pathName = System.currentTimeMillis()+".xlsx";
File file = new File(fileUrl);
if (!file.exists()) {
file.mkdirs();
}
//设置第几列开始合并
int[] mergeColumnIndex = {0,1,2,17};
//设置第几行开始合并
int mergeRowIndex = 1;
EasyExcel.write(fileUrl+pathName)
.head(OrderCouponModel.class)
.sheet("虚拟商品订单")
//.registerWriteHandler(new ExcelFillCellMergeStrategyUtils(mergeRowIndex, mergeColumnIndex))
.doWrite(orderList);
return ResponseMsgUtil.success(pathName);
} catch (Exception e) { } catch (Exception e) {
log.error("error!",e); log.error("error!",e);

@ -43,6 +43,7 @@ public interface BsOrderCouponMapperExt {
" bs_order_coupon_no a" + " bs_order_coupon_no a" +
" LEFT JOIN bs_order_coupon b on a.coupon_order_id = b.id" + " LEFT JOIN bs_order_coupon b on a.coupon_order_id = b.id" +
" WHERE 1 = 1" + " WHERE 1 = 1" +
" <if test='param.merId != null'> and b.mer_id = #{param.merId} </if>" +
" <if test='param.orderNo != null'> and b.order_no like concat('%',#{param.orderNo},'%') </if>" + " <if test='param.orderNo != null'> and b.order_no like concat('%',#{param.orderNo},'%') </if>" +
" <if test='param.orderChildNo != null'> and b.child_order_no = #{param.orderChildNo} </if>" + " <if test='param.orderChildNo != null'> and b.child_order_no = #{param.orderChildNo} </if>" +
" <if test='param.userPhone != null'> and b.user_phone like concat('%',#{param.userPhone},'%') </if>" + " <if test='param.userPhone != null'> and b.user_phone like concat('%',#{param.userPhone},'%') </if>" +

@ -1,5 +1,7 @@
package com.hfkj.model.order; package com.hfkj.model.order;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -14,30 +16,104 @@ import java.util.Date;
@Data @Data
public class OrderCouponModel { public class OrderCouponModel {
@ColumnWidth(20)
@ExcelProperty("交易单号")
public String orderNo; public String orderNo;
@ColumnWidth(15)
@ExcelProperty("商品单号")
public String childOrderNo; public String childOrderNo;
@ColumnWidth(20)
@ExcelProperty("用户手机号")
public String userPhone; public String userPhone;
@ColumnWidth(20)
@ExcelProperty("商品key")
public String goodsKey; public String goodsKey;
@ColumnWidth(30)
@ExcelProperty("商品名称")
public String goodsName; public String goodsName;
@ColumnWidth(30)
@ExcelProperty("商品规格")
public String goodsSpecsName; public String goodsSpecsName;
@ColumnWidth(20)
@ExcelProperty("商品价格")
public String goodsPrice; public String goodsPrice;
@ColumnWidth(20)
@ExcelProperty("购买数量")
public String goodsCount; public String goodsCount;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "订单金额"})
public BigDecimal totalPrice; public BigDecimal totalPrice;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "总优惠"})
public BigDecimal totalDeductionPrice; public BigDecimal totalDeductionPrice;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "优惠券优惠"})
public BigDecimal couponDiscountPrice; public BigDecimal couponDiscountPrice;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "积分抵扣"})
public BigDecimal integralDiscountPrice; public BigDecimal integralDiscountPrice;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "实付金额"})
public BigDecimal payRealPrice; public BigDecimal payRealPrice;
public Integer payChannel;
public Integer payType; @ColumnWidth(20)
@ExcelProperty({"交易信息", "支付渠道"})
public String payChannel;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "支付方式"})
public String payType;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "支付单号"})
public String paySerialNo; public String paySerialNo;
public Integer tradeStatus;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "交易状态"})
public String tradeStatus;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "创建时间"})
public Date createTime; public Date createTime;
@ColumnWidth(20)
@ExcelProperty({"交易信息", "支付时间"})
public Date payTime; public Date payTime;
@ColumnWidth(35)
@ExcelProperty("渠道订单号")
public String channelOrderNo; public String channelOrderNo;
@ColumnWidth(50)
@ExcelProperty("卡密")
public String couNo; public String couNo;
public Integer couStatus;
@ColumnWidth(20)
@ExcelProperty("卡密状态")
public String couStatus;
@ColumnWidth(20)
@ExcelProperty("过期时间")
public Date expireTime; public Date expireTime;
public String exceptionStatus;
@ColumnWidth(20)
@ExcelProperty("完成时间")
public Date finishTime; public Date finishTime;
@ColumnWidth(20)
@ExcelProperty("是否异常")
public String exceptionStatus;
} }

@ -23,8 +23,7 @@ import com.hfkj.service.goods.GoodsVpdService;
import com.hfkj.service.goods.impl.GoodsSpecsServiceImpl; import com.hfkj.service.goods.impl.GoodsSpecsServiceImpl;
import com.hfkj.service.hlt.HuiLianTongUnionCardService; import com.hfkj.service.hlt.HuiLianTongUnionCardService;
import com.hfkj.sysenum.GoodsVpdSourceEnum; import com.hfkj.sysenum.GoodsVpdSourceEnum;
import com.hfkj.sysenum.order.OrderChildProductTypeEnum; import com.hfkj.sysenum.order.*;
import com.hfkj.sysenum.order.OrderCinemaStatusEnum;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -122,6 +121,7 @@ public class OrderPaySuccessService {
JSONObject dataObject = (JSONObject) data; JSONObject dataObject = (JSONObject) data;
couponNo.setExpireTime(dataObject.getDate("validEndDate")); couponNo.setExpireTime(dataObject.getDate("validEndDate"));
couponNo.setGoodsVpdSourceCouNo(dataObject.getString("couNo")); couponNo.setGoodsVpdSourceCouNo(dataObject.getString("couNo"));
couponNo.setStatus(OrderCouponNoStatusEnum.status2.getCode());
orderCouponNoService.editData(couponNo); orderCouponNoService.editData(couponNo);
} }
} }
@ -137,6 +137,7 @@ public class OrderPaySuccessService {
for (Object data : codeList) { for (Object data : codeList) {
couponNo.setExpireTime(DateUtil.format(couponDetail.getString("expiredDate"), "yyyy-MM-dd")); couponNo.setExpireTime(DateUtil.format(couponDetail.getString("expiredDate"), "yyyy-MM-dd"));
couponNo.setGoodsVpdSourceCouNo(ChongQingCNPCCouponService.decryptCouponCode(String.valueOf(data))); couponNo.setGoodsVpdSourceCouNo(ChongQingCNPCCouponService.decryptCouponCode(String.valueOf(data)));
couponNo.setStatus(OrderCouponNoStatusEnum.status2.getCode());
orderCouponNoService.editData(couponNo); orderCouponNoService.editData(couponNo);
} }
} }
@ -153,6 +154,7 @@ public class OrderPaySuccessService {
JSONObject object = JSONObject.parseObject(data); JSONObject object = JSONObject.parseObject(data);
couponNo.setExpireTime(vpd.getSalesEndTime()); couponNo.setExpireTime(vpd.getSalesEndTime());
couponNo.setGoodsVpdSourceCouNo(object.getString("voucher")); couponNo.setGoodsVpdSourceCouNo(object.getString("voucher"));
couponNo.setStatus(OrderCouponNoStatusEnum.status2.getCode());
orderCouponService.editData(orderCoupon); orderCouponService.editData(orderCoupon);
} else if (vpd.getSource() == GoodsVpdSourceEnum.type10.getCode()) { } else if (vpd.getSource() == GoodsVpdSourceEnum.type10.getCode()) {
@ -164,6 +166,7 @@ public class OrderPaySuccessService {
JSONObject object = jsonObject.getJSONObject("data"); JSONObject object = jsonObject.getJSONObject("data");
couponNo.setExpireTime(vpd.getSalesEndTime()); couponNo.setExpireTime(vpd.getSalesEndTime());
couponNo.setGoodsVpdSourceCouNo(object.getString("couponCode")); couponNo.setGoodsVpdSourceCouNo(object.getString("couponCode"));
couponNo.setStatus(OrderCouponNoStatusEnum.status2.getCode());
orderCouponNoService.editData(couponNo); orderCouponNoService.editData(couponNo);
} }
@ -183,6 +186,7 @@ public class OrderPaySuccessService {
orderCoupon.setPayType(order.getPayType()); orderCoupon.setPayType(order.getPayType());
orderCoupon.setPaySerialNo(order.getPaySerialNo()); orderCoupon.setPaySerialNo(order.getPaySerialNo());
orderCoupon.setPayTime(order.getPayTime()); orderCoupon.setPayTime(order.getPayTime());
orderCoupon.setStatus(OrderChildStatusEnum.status2.getCode());
orderCouponService.editData(orderCoupon); orderCouponService.editData(orderCoupon);
/// 增加销量 /// 增加销量

@ -270,6 +270,10 @@ public class BsOrderAfterSalesApplyServiceImpl implements BsOrderAfterSalesApply
BsOrderAfterSalesApplyExample example = new BsOrderAfterSalesApplyExample(); BsOrderAfterSalesApplyExample example = new BsOrderAfterSalesApplyExample();
BsOrderAfterSalesApplyExample.Criteria criteria = example.createCriteria(); BsOrderAfterSalesApplyExample.Criteria criteria = example.createCriteria();
if (MapUtils.getLong(param, "merId") != null) {
criteria.andMerIdEqualTo(MapUtils.getLong(param, "merId"));
}
if (MapUtils.getLong(param, "userId") != null) { if (MapUtils.getLong(param, "userId") != null) {
criteria.andUserIdEqualTo(MapUtils.getLong(param, "userId")); criteria.andUserIdEqualTo(MapUtils.getLong(param, "userId"));
} }

@ -15,6 +15,7 @@ import com.hfkj.entity.BsOrderRefundExample;
import com.hfkj.mer.BsMerPayConfigService; import com.hfkj.mer.BsMerPayConfigService;
import com.hfkj.model.order.OrderChildModel; import com.hfkj.model.order.OrderChildModel;
import com.hfkj.model.order.OrderModel; import com.hfkj.model.order.OrderModel;
import com.hfkj.service.hlt.HuiLianTongUnionCardService;
import com.hfkj.service.order.BsOrderChildService; import com.hfkj.service.order.BsOrderChildService;
import com.hfkj.service.order.BsOrderRefundService; import com.hfkj.service.order.BsOrderRefundService;
import com.hfkj.service.order.BsOrderService; import com.hfkj.service.order.BsOrderService;
@ -36,10 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @className: BsOrderRefundServiceImpl * @className: BsOrderRefundServiceImpl
@ -101,7 +99,20 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
orderRefund.setRefundSerialNo(refundObj.getString("refundTraceNo")); orderRefund.setRefundSerialNo(refundObj.getString("refundTraceNo"));
orderRefund.setRefundPayChannelOrderNo(refundObj.getString("refundOrderNo")); orderRefund.setRefundPayChannelOrderNo(refundObj.getString("refundOrderNo"));
return true; return true;
} else {
} /*else if (OrderPayChannelEnum.type4.getCode() == orderRefund.getRefundPayChannel()) {
// 商户退款
JSONObject refundObj = HuiLianTongUnionCardService.refund(orderRefund.getRefundOrderNo(), orderRefund.getOrderNo());
if (!refundObj.getString("respCode").equals("0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, refundObj.getString("respMessage"));
}
JSONObject consumptionResult = HuiLianTongUnionCardService.resolveResponse(refundObj.getString("data"));
if (!(consumptionResult.getBoolean("success") || Objects.equals(consumptionResult.getString("message"), "原交易已撤销,不可再次操作"))) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败!"+consumptionResult.getString("message"));
}
orderRefund.setRefundSerialNo(consumptionResult.getString("orderId"));
return true;
}*/ else {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败!该支付方式暂不支持退款"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款失败!该支付方式暂不支持退款");
} }
} catch (BaseException e) { } catch (BaseException e) {
@ -254,6 +265,10 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
BsOrderRefundExample example = new BsOrderRefundExample(); BsOrderRefundExample example = new BsOrderRefundExample();
BsOrderRefundExample.Criteria criteria = example.createCriteria(); BsOrderRefundExample.Criteria criteria = example.createCriteria();
if (MapUtils.getLong(param, "merId") != null) {
criteria.andMerIdEqualTo(MapUtils.getLong(param, "merId"));
}
if (StringUtils.isNotBlank(MapUtils.getString(param, "userPhone"))) { if (StringUtils.isNotBlank(MapUtils.getString(param, "userPhone"))) {
criteria.andUserPhoneEqualTo(MapUtils.getString(param, "userPhone")); criteria.andUserPhoneEqualTo(MapUtils.getString(param, "userPhone"));
} }

@ -3,6 +3,8 @@ package com.hfkj.sysenum.order;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import java.util.Objects;
/** /**
* @className: OrderChildStatusEnum * @className: OrderChildStatusEnum
* @author: HuRui * @author: HuRui
@ -50,4 +52,11 @@ public enum OrderChildStatusEnum {
this.code = code; this.code = code;
this.name = name; this.name = name;
} }
public static OrderChildStatusEnum getData(Integer type) {
for (OrderChildStatusEnum ele : values()) {
if (Objects.equals(type,ele.getCode())) return ele;
}
return null;
}
} }

@ -2,6 +2,8 @@ package com.hfkj.sysenum.order;
import lombok.Getter; import lombok.Getter;
import java.util.Objects;
/** /**
* 卡券编号订单状态 * 卡券编号订单状态
* @className: OrderCouponNoStatusEnum * @className: OrderCouponNoStatusEnum
@ -40,4 +42,11 @@ public enum OrderCouponNoStatusEnum {
this.code = code; this.code = code;
this.name = name; this.name = name;
} }
public static OrderCouponNoStatusEnum getData(Integer type) {
for (OrderCouponNoStatusEnum ele : values()) {
if (Objects.equals(type,ele.getCode())) return ele;
}
return null;
}
} }

@ -2,6 +2,8 @@ package com.hfkj.sysenum.order;
import lombok.Getter; import lombok.Getter;
import java.util.Objects;
/** /**
* 交易支付渠道 * 交易支付渠道
* @className: OrderPayModelEnum * @className: OrderPayModelEnum
@ -36,4 +38,11 @@ public enum OrderPayChannelEnum {
this.code = code; this.code = code;
this.name = name; this.name = name;
} }
public static OrderPayChannelEnum getData(Integer type) {
for (OrderPayChannelEnum ele : values()) {
if (Objects.equals(type,ele.getCode())) return ele;
}
return null;
}
} }

@ -2,6 +2,8 @@ package com.hfkj.sysenum.order;
import lombok.Getter; import lombok.Getter;
import java.util.Objects;
/** /**
* 交易支付类型 * 交易支付类型
* @className: OrderPayModelEnum * @className: OrderPayModelEnum
@ -36,4 +38,11 @@ public enum OrderPayTypeEnum {
this.code = code; this.code = code;
this.name = name; this.name = name;
} }
public static OrderPayTypeEnum getData(Integer type) {
for (OrderPayTypeEnum ele : values()) {
if (Objects.equals(type,ele.getCode())) return ele;
}
return null;
}
} }

Loading…
Cancel
Save