Commit 46775ece authored by 周健威's avatar 周健威

车辆相关和优惠券相关

parent 61c999f3
...@@ -251,4 +251,10 @@ public class Coupon implements Serializable { ...@@ -251,4 +251,10 @@ public class Coupon implements Serializable {
@ApiModelProperty(value = "可使用门店ids") @ApiModelProperty(value = "可使用门店ids")
private String companyIds; private String companyIds;
/**
* 是否可领取;0-否;1-是
*/
@Column(name = "is_led")
@ApiModelProperty(value = "是否可领取;0-否;1-是")
private Integer isLed;
} }
...@@ -41,7 +41,7 @@ public class CouponAdminController implements UserRestInterface { ...@@ -41,7 +41,7 @@ public class CouponAdminController implements UserRestInterface {
} }
@ApiOperation("优惠券列表") @ApiOperation("优惠券列表")
@GetMapping("/page") @GetMapping("/operate/page")
public ObjectRestResponse<PageDataVO<CouponPagVo>> listCouponWithPage(CouponFindDTO couponFindDTO) { public ObjectRestResponse<PageDataVO<CouponPagVo>> listCouponWithPage(CouponFindDTO couponFindDTO) {
DataInterBean dataInterBean = getDataInter(); DataInterBean dataInterBean = getDataInter();
couponFindDTO.setBizType(dataInterBean.getBizType()); couponFindDTO.setBizType(dataInterBean.getBizType());
......
...@@ -346,4 +346,7 @@ public class BaseOrder implements Serializable { ...@@ -346,4 +346,7 @@ public class BaseOrder implements Serializable {
@Column(name = "revenue_json") @Column(name = "revenue_json")
private String revenueJson; private String revenueJson;
@Column(name = "goods_type")
private Integer goodsType;
} }
...@@ -13,6 +13,13 @@ import java.util.Date; ...@@ -13,6 +13,13 @@ import java.util.Date;
@Data @Data
@Table(name = "vehicle") @Table(name = "vehicle")
public class Vehicle { public class Vehicle {
public static final int GOODS_TYPE_RV = 1;
public static final int GOODS_TYPE_HM = 2;
public static final int GOODS_TYPE_YACHT = 3;
public static final int STATE_UP = 1;
public static final int STATE_DOWN = 2;
/** /**
* 主键(uuid) * 主键(uuid)
*/ */
......
...@@ -234,9 +234,12 @@ public interface VehicleFeign { ...@@ -234,9 +234,12 @@ public interface VehicleFeign {
ObjectRestResponse<List<CompanySearchVO>> listByIds(@RequestBody CompanySearchDTO vo); ObjectRestResponse<List<CompanySearchVO>> listByIds(@RequestBody CompanySearchDTO vo);
@GetMapping(value = "/vehicleHolidayPriceInfo/getByVehicleIdFeign") @GetMapping(value = "/vehicleHolidayPriceInfo/getByVehicleIdFeign")
public ObjectRestResponse<List<VehicleModelCalendarPriceDTO>> getByVehicleIdFeign( public ObjectRestResponse<List<VehicleModelCalendarPriceDTO>> getPriceByVehicleIdFeign(
@RequestParam("vehicleId") String vehicleId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("userId") Integer userId, @RequestParam("companyId") Integer companyId); @RequestParam("vehicleId") String vehicleId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("userId") Integer userId, @RequestParam("companyId") Integer companyId);
@GetMapping(value = "/vehicleInfo/getPriceByVehicleFeign")
public ObjectRestResponse<List<VehicleModelCalendarPriceDTO>> getPriceByVehicleIdFeignV2(
@RequestParam("vehicleId") String vehicleId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("userId") Integer userId, @RequestParam("companyId") Integer companyId);
@RequestMapping(value = "/vehicleInfo/selectByParam", method = RequestMethod.GET) @RequestMapping(value = "/vehicleInfo/selectByParam", method = RequestMethod.GET)
public RestResponse<List<Vehicle>> vehicleSelectByParam(@RequestParam(value = "vehicle")Map<String, Object> vehicleMap); public RestResponse<List<Vehicle>> vehicleSelectByParam(@RequestParam(value = "vehicle")Map<String, Object> vehicleMap);
......
package com.xxfc.platform.vehicle.pojo.dto;
import com.github.wxiaoqi.security.common.vo.DataInter;
import com.github.wxiaoqi.security.common.vo.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/23 16:27
*/
@Data
public class VehicleFindAppDTO extends PageParam implements DataInter {
@ApiModelProperty("商品Id")
private String vehicleId;
@ApiModelProperty("商品名称")
private String name;
@ApiModelProperty("商品类型 1--房车;2--机车;3--游艇")
private Integer goodsType;
@ApiModelProperty("状态:1-上架;2-下架")
private Integer state;
@ApiModelProperty("品牌id")
private Integer brandId;
@ApiModelProperty("型号id")
private Integer categoryId;
@ApiModelProperty("店铺id")
private Integer branchId;
@ApiModelProperty("是否全网最低价")
private Integer isMinPrice;
List<Integer> dataCorporationIds;
List<Integer> dataCompanyIds;
Integer bizType;
@ApiModelProperty("经度")
Double lon;
@ApiModelProperty("纬度")
Double lat;
/**
* 所属市区(id)
*/
private Integer addrCity;
}
...@@ -27,4 +27,6 @@ public class VehicleVO extends Vehicle { ...@@ -27,4 +27,6 @@ public class VehicleVO extends Vehicle {
private VehicleApply vehicleApply; private VehicleApply vehicleApply;
private List<VehicleExtensionVO> extensionVOS; private List<VehicleExtensionVO> extensionVOS;
private Double distance;
} }
\ No newline at end of file
...@@ -33,6 +33,7 @@ import com.xxfc.platform.vehicle.mapper.BookRecordAccItemMapper; ...@@ -33,6 +33,7 @@ import com.xxfc.platform.vehicle.mapper.BookRecordAccItemMapper;
import com.xxfc.platform.vehicle.mapper.VehicleBookInfoMapper; import com.xxfc.platform.vehicle.mapper.VehicleBookInfoMapper;
import com.xxfc.platform.vehicle.mapper.VehicleMapper; import com.xxfc.platform.vehicle.mapper.VehicleMapper;
import com.xxfc.platform.vehicle.pojo.*; import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindAppDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO; import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto; import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto;
import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO; import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO;
...@@ -1628,6 +1629,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR ...@@ -1628,6 +1629,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
return ObjectRestResponse.succ(PageDataVO.pageInfo(pageInfo)); return ObjectRestResponse.succ(PageDataVO.pageInfo(pageInfo));
} }
public PageDataVO<VehicleVO> appSelectList(VehicleFindAppDTO vehicleFindAppDTO){
return PageDataVO.pageInfo(vehicleFindAppDTO.initQuery(), ()-> mapper.appSelectList(vehicleFindAppDTO));
}
public VehicleVO info(VehicleFindDTO vehicleFindDTO){ public VehicleVO info(VehicleFindDTO vehicleFindDTO){
List<VehicleVO> vehicleVOS=getList(vehicleFindDTO); List<VehicleVO> vehicleVOS=getList(vehicleFindDTO);
if (vehicleVOS != null && vehicleVOS.size() > 0){ if (vehicleVOS != null && vehicleVOS.size() > 0){
......
...@@ -2,6 +2,7 @@ package com.xxfc.platform.vehicle.mapper; ...@@ -2,6 +2,7 @@ package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.Vehicle; import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.pojo.*; import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindAppDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO; import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto; import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto;
import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO; import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO;
...@@ -65,4 +66,6 @@ public interface VehicleMapper extends Mapper<Vehicle> { ...@@ -65,4 +66,6 @@ public interface VehicleMapper extends Mapper<Vehicle> {
@Select("SELECT COUNT(*) FROM vehicle WHERE is_del=0 and subordinate_branch = #{commpanyId}") @Select("SELECT COUNT(*) FROM vehicle WHERE is_del=0 and subordinate_branch = #{commpanyId}")
Long countByCompamyId(@Param("commpanyId") Integer commpanyId); Long countByCompamyId(@Param("commpanyId") Integer commpanyId);
List<VehicleVO> appSelectList(VehicleFindAppDTO vehicleFindAppDTO);
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.entity.BaseUserMember;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface; import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
...@@ -22,6 +23,8 @@ import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus; ...@@ -22,6 +23,8 @@ import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.constant.VehicleMemberType; import com.xxfc.platform.vehicle.constant.VehicleMemberType;
import com.xxfc.platform.vehicle.entity.Vehicle; import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleBookRecord; import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleCommonPriceInfo;
import com.xxfc.platform.vehicle.entity.VehicleHolidayPriceInfo;
import com.xxfc.platform.vehicle.pojo.*; import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO; import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO; import com.xxfc.platform.vehicle.pojo.vo.UsableVeicleVO;
...@@ -34,12 +37,14 @@ import org.apache.commons.lang3.StringUtils; ...@@ -34,12 +37,14 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.*; import static com.github.wxiaoqi.security.common.constant.CommonConstants.*;
import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP; import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP;
...@@ -51,6 +56,12 @@ import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP_NAME; ...@@ -51,6 +56,12 @@ import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP_NAME;
@IgnoreClientToken @IgnoreClientToken
@Api(value="租车相关车辆管理controller",tags={"租车相关车辆管理接口"}) @Api(value="租车相关车辆管理controller",tags={"租车相关车辆管理接口"})
public class RentVehicleController extends BaseController<VehicleBiz> implements UserRestInterface { public class RentVehicleController extends BaseController<VehicleBiz> implements UserRestInterface {
private static final Integer DEFAULT_DISCOUNT = 100;
private static final Integer DEFAULT_MEMBER_LEVEL = 0;
private static final Integer DEFAULT_MEMBER_TYPE = 0;
private static final Integer MEMBER_TYPE_ALL = 1;
private static final Integer MEMBER_TYPE_FORBID = 4;
@Autowired @Autowired
private VehiclePlatCataBiz vehiclePlatCataBiz; private VehiclePlatCataBiz vehiclePlatCataBiz;
...@@ -352,4 +363,100 @@ public class RentVehicleController extends BaseController<VehicleBiz> implements ...@@ -352,4 +363,100 @@ public class RentVehicleController extends BaseController<VehicleBiz> implements
VehicleBookRecord vehicleBookRecord = baseBiz.applyVehicle(operatorId, bookVehicleVo, userName); VehicleBookRecord vehicleBookRecord = baseBiz.applyVehicle(operatorId, bookVehicleVo, userName);
return ObjectRestResponse.succ(vehicleBookRecord); return ObjectRestResponse.succ(vehicleBookRecord);
} }
@GetMapping(value = "getPriceByVehicleFeign")
@IgnoreUserToken
public ObjectRestResponse<List<VehicleModelCalendarPriceDTO>> getByVehicleIdFeign(String vehicleId, String startDate, String endDate, Integer userId, Integer companyId) {
return ObjectRestResponse.succ(getSynthesizePrice(vehicleId, startDate, endDate, userId, companyId));
}
public List<VehicleModelCalendarPriceDTO> getSynthesizePrice (String vehicleId, String startDate, String endDate, Integer userId, Integer companyId) {
List<VehicleModelCalendarPriceDTO> priceDTOS = CollUtil.newArrayList();
cn.hutool.core.date.DateTime beginOfStartDate = DateUtil.beginOfDay(DateUtil.parse(startDate));
cn.hutool.core.date.DateTime endOfStartDate = DateUtil.endOfDay(DateUtil.parse(endDate));
//获取基本和周末价格
// VehicleCommonPriceInfo vehicleCommonPriceInfo = vehicleCommonPriceInfoBiz.selectOne(new VehicleCommonPriceInfo(){{
// setCompanyId(companyId);
// setVehicleId(vehicleId);
// }});
Vehicle vehicle = vehicleBiz.selectOne(new Vehicle(){{
setParkBranchCompanyId(companyId);
setId(vehicleId);
}});
if(null == vehicle) {
return CollUtil.newArrayList();
}
//Date currentDate = DateUtil.beginOfDay(DateUtil.parse(startDate));
for(cn.hutool.core.date.DateTime currentDate = DateUtil.beginOfDay(DateUtil.parse(startDate));
(currentDate.isAfterOrEquals(beginOfStartDate) && currentDate.isBeforeOrEquals(endOfStartDate));
currentDate = DateUtil.offsetDay(currentDate, 1)) {
cn.hutool.core.date.DateTime finalCurrentDate = currentDate;
VehicleModelCalendarPriceDTO dto = new VehicleModelCalendarPriceDTO(){{
setDate(DateUtil.beginOfDay(finalCurrentDate));
}};
if(currentDate.isWeekend()) {
dto.setNo_discount_price(vehicle.getHolidayPrice());
dto.setPrice(vehicle.getHolidayPrice());
dto.setFreeDays(1);
}else {
dto.setNo_discount_price(vehicle.getPrice());
dto.setPrice(vehicle.getPrice());
dto.setFreeDays(1);
}
priceDTOS.add(dto);
}
//获取节假日价格
// List<VehicleHolidayPriceInfo> vehicleHolidayPriceInfoList = getByVehicleIdAndDate(vehicleId, startDate, endDate);
//
// if(CollUtil.isNotEmpty(vehicleHolidayPriceInfoList)) {
// vehicleHolidayPriceInfoList.forEach(info -> {
// priceDTOS.forEach(tmpDto -> {
// if(DateUtil.isSameDay(info.getFestivalDate(), tmpDto.getDate())) {
// tmpDto.setNo_discount_price(info.getRentPrice());
// tmpDto.setPrice(info.getRentPrice());
// tmpDto.setFreeDays(info.getRentFreeDay());
// }
// });
// });
// }
//获取会员折扣
//查询车辆信息
// Vehicle vehicle = vehicleBiz.selectById(vehicleId);
//查询会员信息
//默认折扣
Integer discount = DEFAULT_DISCOUNT;
//会员默认等级
Integer memberLevel = DEFAULT_MEMBER_LEVEL;
Integer memberType = DEFAULT_MEMBER_TYPE;
if (Objects.nonNull(userId)) {
BaseUserMember baseUserMember = userFeign.findBaseUserMemberByUserId(userId.intValue());
log.info("用户会员信息:【{}】",baseUserMember);
discount = baseUserMember == null ? discount : baseUserMember.getDiscount();
memberLevel = baseUserMember == null ? memberLevel : baseUserMember.getMemberLevel();
memberType = baseUserMember == null ? memberType : baseUserMember.getMemberType();
}
//非会员禁用 非无会员
if(vehicle.getMemberUse() != MEMBER_TYPE_FORBID && DEFAULT_MEMBER_TYPE != memberType) {
//判断 允许所有会员,或者 memberType 和 车辆memberUse 相等
if(vehicle.getMemberUse().equals(MEMBER_TYPE_ALL) || (vehicle.getMemberUse().equals(memberType))) {
//设置会员价格
Integer finalDiscount = discount;
priceDTOS.forEach(dto -> {
dto.setPrice(dto.getNo_discount_price()
.multiply(new BigDecimal(""+ finalDiscount)
.divide(new BigDecimal("100"))));
});
}
}
return priceDTOS;
}
} }
...@@ -28,6 +28,7 @@ import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus; ...@@ -28,6 +28,7 @@ import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.*; import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.jobhandler.VehicleJobHandler; import com.xxfc.platform.vehicle.jobhandler.VehicleJobHandler;
import com.xxfc.platform.vehicle.pojo.*; import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindAppDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO; import com.xxfc.platform.vehicle.pojo.dto.VehicleFindDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO; import com.xxfc.platform.vehicle.pojo.dto.VehicleModelCalendarPriceDTO;
import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto; import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto;
...@@ -50,6 +51,8 @@ import java.util.List; ...@@ -50,6 +51,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
@RestController @RestController
@RequestMapping("/vehicleInfo") @RequestMapping("/vehicleInfo")
@Slf4j @Slf4j
...@@ -694,6 +697,15 @@ public class VehicleController extends BaseController<VehicleBiz> implements Use ...@@ -694,6 +697,15 @@ public class VehicleController extends BaseController<VehicleBiz> implements Use
return baseBiz.selectList(vehicleFindDTO); return baseBiz.selectList(vehicleFindDTO);
} }
@GetMapping("app/unauth/shop/selectList")
@ApiModelProperty("店铺商品列表(精选商品)")
@IgnoreUserToken
public ObjectRestResponse<PageDataVO<VehicleVO>> shopSelectList(VehicleFindAppDTO vehicleFindAppDTO) {
vehicleFindAppDTO.setState(Vehicle.STATE_UP);
vehicleFindAppDTO.setIsMinPrice(SYS_TRUE);
return ObjectRestResponse.succ(baseBiz.appSelectList(vehicleFindAppDTO));
}
@Data @Data
static public class VehicleVO extends Vehicle { static public class VehicleVO extends Vehicle {
private VehicleModel vehicleModel; private VehicleModel vehicleModel;
......
...@@ -1349,4 +1349,71 @@ ...@@ -1349,4 +1349,71 @@
</select> </select>
<select id="appSelectList" resultType="com.xxfc.platform.vehicle.pojo.vo.VehicleVO" parameterType="com.xxfc.platform.vehicle.pojo.dto.VehicleFindAppDTO">
SELECT
v.*,
b.cn_name as brandName,
c.`name` categoryName,
bc.`name` as companyName
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
FROM vehicle v
LEFT JOIN vehicle_brand b ON v.brand_id=b.id
LEFT JOIN vehicle_category c ON v.category_id=c.id
LEFT JOIN branch_company bc ON v.subordinate_branch=bc.id
<where>
v.is_del = 0
<if test="addrCity !=null">
AND bc.addr_city=#{addrCity}
</if>
<if test="name != null and name != ''">
AND ( v.`name` like concat('%',#{name},'%') or v.`number_plate` like concat('%',#{name},'%') )
</if>
<if test="brandId != null and brandId > 0">
AND v.`brand_id`= #{brandId}
</if>
<if test="vehicleId != null and vehicleId != '' ">
AND v.`id`= #{vehicleId}
</if>
<if test="categoryId != null and categoryId > 0">
AND v.`category_id`= #{categoryId}
</if>
<if test="branchId != null and branchId > 0">
AND v.`subordinate_branch`= #{branchId}
</if>
<if test="state != null ">
AND v.`state`= #{state}
</if>
<if test="goodsType != null ">
AND v.`goods_type`= #{goodsType}
</if>
<if test="dataCompanyIds != null and dataCompanyIds.size > 0">
and bc.id in
<foreach collection="dataCompanyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<if test="dataCorporationIds != null and dataCorporationIds.size > 0">
and bc.company_id in
<foreach collection="dataCorporationIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
order by
<if test="lon != null and lat != null">
distance asc,
</if>
<choose>
<when test="isMinPrice !=null and isMinPrice==1">
v.price ASC,v.create_time DESC
</when>
<otherwise>
v.create_time DESC
</otherwise>
</choose>
</select>
</mapper> </mapper>
\ No newline at end of file
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