Browse Source

采购退库选择车辆分页列表

master
dimengzhe 3 years ago
parent
commit
5e71282634
  1. 4
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeign.java
  2. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeignFallback.java
  3. 40
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleReturnQuery.java
  4. 30
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleReturnVo.java
  5. 9
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.java
  6. 132
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml
  7. 13
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleRest.java
  8. 77
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleService.java

4
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeign.java

@ -177,6 +177,10 @@ public interface BaseVehicleFeign {
@PostMapping("/selExistingCarPageList") @PostMapping("/selExistingCarPageList")
public ResultBean<PagerVo<BaseExistingCarListPageVo>> selExistingCarPageList(@RequestBody PagerQuery<BaseExistingCarPageQuery> pagerQuery); public ResultBean<PagerVo<BaseExistingCarListPageVo>> selExistingCarPageList(@RequestBody PagerQuery<BaseExistingCarPageQuery> pagerQuery);
@ApiOperation("采购退库选择车辆分页列表")
@PostMapping("/vehicleReturnList")
ResultBean<PagerVo<BaseVehicleReturnVo>> vehicleReturnList(@RequestBody PagerQuery<BaseVehicleReturnQuery> pagerQuery);
/***************************************************** App接口 **********************************************************/ /***************************************************** App接口 **********************************************************/
@ApiOperation("手机端现车分页列表") @ApiOperation("手机端现车分页列表")

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeignFallback.java

@ -99,6 +99,11 @@ public class BaseVehicleFeignFallback implements BaseVehicleFeign {
return null; return null;
} }
@Override
public ResultBean<PagerVo<BaseVehicleReturnVo>> vehicleReturnList(PagerQuery<BaseVehicleReturnQuery> pagerQuery) {
return null;
}
@Override @Override
public ResultBean<PagerVo<AppCurrentCarModelByPageListVo>> getAppCurrentCarByPageList(PagerQuery<AppCurrentCarByPageListQuery> pagerQuery) { public ResultBean<PagerVo<AppCurrentCarModelByPageListVo>> getAppCurrentCarByPageList(PagerQuery<AppCurrentCarByPageListQuery> pagerQuery) {
return null; return null;

40
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleReturnQuery.java

@ -0,0 +1,40 @@
package com.yxt.anrui.base.api.basevehicle;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author dimengzhe
* @Date 2022/4/12 11:30
* @Description
*/
@Data
public class BaseVehicleReturnQuery implements Query {
private static final long serialVersionUID = 10773711417444473L;
@ApiModelProperty(value = "品牌")
private String brandSid;
@ApiModelProperty(value = "功能")
private String vehicleType;
@ApiModelProperty(value = "系列")
private String productLine;
@ApiModelProperty(value = "变速箱")
private String gearboxType;
@ApiModelProperty(value = "驱动")
private String driveForm;
@ApiModelProperty(value = "排放标准")
private String emissionStandard;
@ApiModelProperty(value = "马力")
private String power;
@ApiModelProperty(value = "燃料")
private String fuelType;
@ApiModelProperty(value = "版本")
private String vehicleVersion;
@ApiModelProperty(value = "车型")
private String vehicleAlias;
@ApiModelProperty(value = "快捷检索车型")
private String modelName;
}

30
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleReturnVo.java

@ -0,0 +1,30 @@
package com.yxt.anrui.base.api.basevehicle;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author dimengzhe
* @Date 2022/4/12 11:26
* @Description 采购退库选择车辆数据对象
*/
@Data
public class BaseVehicleReturnVo implements Vo {
private static final long serialVersionUID = -4203703835044248565L;
private String sid;
@ApiModelProperty(value = "品牌")
private String brandName;
@ApiModelProperty(value = "车型")
private String modelName;
@ApiModelProperty(value = "车架号")
private String vinNo;
@ApiModelProperty(value = "颜色")
private String color;
@ApiModelProperty(value = "存放地点")
private String location;
@ApiModelProperty(value = "销售指导价")
private String guidedPrice;
}

9
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.java

@ -249,4 +249,13 @@ public interface BaseVehicleMapper extends BaseMapper<BaseVehicle> {
* @return * @return
*/ */
IPage<AppBaseVehicleNowModelVo> getNowModelList(IPage<AppBaseVehicleNowModelQuery> page, @Param(Constants.WRAPPER) QueryWrapper<AppBaseVehicleNowModelVo> qw); IPage<AppBaseVehicleNowModelVo> getNowModelList(IPage<AppBaseVehicleNowModelQuery> page, @Param(Constants.WRAPPER) QueryWrapper<AppBaseVehicleNowModelVo> qw);
/**
* 分页列表
*
* @param page 分页
* @param qw 查询条件
* @return
*/
IPage<BaseVehicleReturnVo> vehicleReturnPageList(IPage<BaseVehicleReturnVo> page, @Param(Constants.WRAPPER) QueryWrapper<BaseVehicle> qw);
} }

132
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml

@ -12,12 +12,12 @@
<!--分页列表--> <!--分页列表-->
<select id="pagerList" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicleVo"> <select id="pagerList" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicleVo">
SELECT bv.sid, SELECT bv.sid,
bv.modelName, bv.modelName,
bv.vinNo, bv.vinNo,
bv.engineNo, bv.engineNo,
bv.vehicleStateValue, bv.vehicleStateValue,
bv.location, bv.location,
bv.libraryAge bv.libraryAge
FROM base_vehicle bv FROM base_vehicle bv
<where> <where>
${ew.sqlSegment} ${ew.sqlSegment}
@ -69,10 +69,10 @@
<!--库龄(根据首次发车日期计算)--> <!--库龄(根据首次发车日期计算)-->
bv.libraryAge bv.libraryAge
FROM base_vehicle bv FROM base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bvm.sid = bv.modelSid LEFT JOIN base_vehicle_model bvm ON bvm.sid = bv.modelSid
LEFT JOIN base_model_config bmc ON bmc.sid = bv.modelConfigSid LEFT JOIN base_model_config bmc ON bmc.sid = bv.modelConfigSid
LEFT JOIN anrui_portal.dict_common dc ON dc.dictKey = bv.vehicleState LEFT JOIN anrui_portal.dict_common dc ON dc.dictKey = bv.vehicleState
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<!--删除或批量删除车辆信息--> <!--删除或批量删除车辆信息-->
<delete id="deleteBySids" parameterType="java.util.List"> <delete id="deleteBySids" parameterType="java.util.List">
@ -158,16 +158,16 @@
bvm.isValidity, bvm.isValidity,
bvm.isValidityValue bvm.isValidityValue
FROM base_vehicle_model bvm FROM base_vehicle_model bvm
LEFT JOIN base_model_config bmc ON bmc.vehicleSid = bvm.sid LEFT JOIN base_model_config bmc ON bmc.vehicleSid = bvm.sid
LEFT JOIN base_manufacturer bm ON bvm.manufacturer = bm.sid LEFT JOIN base_manufacturer bm ON bvm.manufacturer = bm.sid
LEFT JOIN base_vehicle_brand bvb ON bvb.sid = bvm.carBrand LEFT JOIN base_vehicle_brand bvb ON bvb.sid = bvm.carBrand
WHERE bvm.sid = #{modelSid} WHERE bvm.sid = #{modelSid}
AND bmc.sid = #{modelConfigSid} AND bmc.sid = #{modelConfigSid}
</select> </select>
<!--导入车辆信息--> <!--导入车辆信息-->
<insert id="saveList"> <insert id="saveList">
INSERT INTO base_vehicle(sid, modelSid, modelConfigSid, vinNo, engineNo, manufactureDate, location, INSERT INTO base_vehicle(sid, modelSid, modelConfigSid, vinNo, engineNo, manufactureDate, location,
vehicleState, firstStartDate, libraryAge) vehicleState, firstStartDate, libraryAge)
VALUES VALUES
<foreach collection="list" item="item" index="index" separator=","> <foreach collection="list" item="item" index="index" separator=",">
(UUID(),<!--sid--> (UUID(),<!--sid-->
@ -196,8 +196,8 @@
</select> </select>
<select id="selBySid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle"> <select id="selBySid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle">
select bv.sid, select bv.sid,
bv.modelSid, bv.modelSid,
bv.modelConfigSid, bv.modelConfigSid,
<!--车架号(VIN)--> <!--车架号(VIN)-->
bv.vinNo, bv.vinNo,
<!--发动机号/许可证号--> <!--发动机号/许可证号-->
@ -255,16 +255,14 @@
<select id="getAppCurrentCarByPageList" <select id="getAppCurrentCarByPageList"
resultType="com.yxt.anrui.base.api.basevehicle.AppCurrentCarModelByPageListVo"> resultType="com.yxt.anrui.base.api.basevehicle.AppCurrentCarModelByPageListVo">
SELECT SELECT bvm.sid AS modelSid,
bvm.sid AS modelSid, bvm.vehicleAlias,
bvm.vehicleAlias, bvm.brandName,
bvm.brandName, bvm.vehicleVersionValue,
bvm.vehicleVersionValue, bvm.fuelTypeValue,
bvm.fuelTypeValue, bvm.gearboxTypeValue
bvm.gearboxTypeValue FROM base_vehicle bv
FROM LEFT JOIN base_vehicle_model bvm ON bv.modelSid = bvm.sid
base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bv.modelSid = bvm.sid
<where> <where>
${ew.sqlSegment} ${ew.sqlSegment}
</where> </where>
@ -355,8 +353,7 @@
</select> </select>
<select id="exiCarPagerList" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicleListVo"> <select id="exiCarPagerList" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicleListVo">
SELECT SELECT bv.sid,
bv.sid,
<!--车辆状态--> <!--车辆状态-->
bv.vehicleStateValue, bv.vehicleStateValue,
<!--品牌名称--> <!--品牌名称-->
@ -376,9 +373,9 @@
<!--配置Sid--> <!--配置Sid-->
bv.modelConfigSid AS configSid bv.modelConfigSid AS configSid
FROM base_vehicle bv FROM base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid` LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid`
LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid` LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid`
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="selectExiCarConfig" resultType="com.yxt.anrui.base.api.basevehicle.ExiCarConfigDetailVo"> <select id="selectExiCarConfig" resultType="com.yxt.anrui.base.api.basevehicle.ExiCarConfigDetailVo">
@ -425,8 +422,7 @@
AND bvc.useOrg = #{useOrg} AND bvc.useOrg = #{useOrg}
</select> </select>
<select id="getBusDepositVehByVehSid" resultType="com.yxt.anrui.base.api.basevehicle.BusDepositVehListVo"> <select id="getBusDepositVehByVehSid" resultType="com.yxt.anrui.base.api.basevehicle.BusDepositVehListVo">
SELECT SELECT bv.sid,
bv.sid,
<!--车辆状态--> <!--车辆状态-->
bv.vehicleStateValue, bv.vehicleStateValue,
<!--品牌名称--> <!--品牌名称-->
@ -442,8 +438,8 @@
<!--销售指导价--> <!--销售指导价-->
bv.guidedPrice bv.guidedPrice
FROM base_vehicle bv FROM base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid` LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid`
LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid` LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid`
WHERE bv.sid = #{sid} WHERE bv.sid = #{sid}
</select> </select>
@ -462,8 +458,7 @@
<select id="selExistingCarPageList" <select id="selExistingCarPageList"
resultType="com.yxt.anrui.base.api.basevehicle.BaseExistingCarListPageVo"> resultType="com.yxt.anrui.base.api.basevehicle.BaseExistingCarListPageVo">
SELECT SELECT bv.sid,
bv.sid,
<!--车辆状态--> <!--车辆状态-->
bv.vehicleStateValue, bv.vehicleStateValue,
<!--品牌名称--> <!--品牌名称-->
@ -481,34 +476,33 @@
<!--配置Sid--> <!--配置Sid-->
bv.modelConfigSid AS configSid bv.modelConfigSid AS configSid
FROM base_vehicle bv FROM base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid` LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid`
LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid` LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid`
${ew.customSqlSegment} ${ew.customSqlSegment}
ORDER BY ORDER BY
bv.priceDate desc bv.priceDate desc
</select> </select>
<select id="getModelList" resultType="com.yxt.anrui.base.api.basevehicle.AppVehicleModelPriceVo"> <select id="getModelList" resultType="com.yxt.anrui.base.api.basevehicle.AppVehicleModelPriceVo">
SELECT SELECT bvm.sid AS modelSid,
bvm.sid AS modelSid, bvm.vehicleAlias AS modelName,
bvm.vehicleAlias AS modelName, bvm.carBrand AS brandSid,
bvm.carBrand AS brandSid, bvm.brandName,
bvm.brandName, bvm.vehicleVersionValue AS versionValue,
bvm.vehicleVersionValue AS versionValue, bvm.fuelTypeValue,
bvm.fuelTypeValue, bvm.gearboxTypeValue,
bvm.gearboxTypeValue, bvc.priceValidity,
bvc.priceValidity, (SELECT count(*) FROM base_vehmodel_config WHERE bvc.modelSid = bvm.sid) AS configNum,
( SELECT count( * ) FROM base_vehmodel_config WHERE bvc.modelSid = bvm.sid ) AS configNum, (SELECT count(*) FROM base_vehicle bv WHERE bv.modelSid = bvm.sid AND lockedState = '0004') AS nowCarNum,
( SELECT count( * ) FROM base_vehicle bv WHERE bv.modelSid = bvm.sid AND lockedState = '0004' ) AS nowCarNum, (SELECT count(*)
( SELECT count( * ) FROM bus_vehicle_apply_detail bvad WHERE bvad.vehicleSid = bvm.sid ) AS produceCarNum FROM bus_vehicle_apply_detail bvad
FROM WHERE bvad.vehicleSid = bvm.sid) AS produceCarNum
base_vehicle_model bvm FROM base_vehicle_model bvm
LEFT JOIN base_vehmodel_config bvc ON bvm.sid = bvc.modelSid LEFT JOIN base_vehmodel_config bvc ON bvm.sid = bvc.modelSid
<where> <where>
${ew.sqlSegment} ${ew.sqlSegment}
</where> </where>
ORDER BY ORDER BY nowCarNum DESC
nowCarNum DESC
</select> </select>
<select id="getCompanyModelList" resultType="com.yxt.anrui.base.api.basevehicle.AppMoreConfigVo"> <select id="getCompanyModelList" resultType="com.yxt.anrui.base.api.basevehicle.AppMoreConfigVo">
@ -563,4 +557,24 @@
LEFT JOIN base_vehicle_model bvm ON bv.modelSid = bvm.sid LEFT JOIN base_vehicle_model bvm ON bv.modelSid = bvm.sid
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="vehicleReturnPageList" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicleReturnVo">
SELECT bv.sid,
<!--品牌名称-->
bvm.brandName,
<!--车型名称-->
bvm.vehicleAlias,
<!--车架号-->
bv.vinNo,
<!--颜色-->
bmc.carColor,
<!--存放地点-->
bv.location,
<!--销售指导价-->
bv.guidedPrice
FROM base_vehicle bv
LEFT JOIN base_vehicle_model bvm ON bv.`modelSid` = bvm.`sid`
LEFT JOIN base_model_config bmc ON bv.modelConfigSid = bmc.`sid`
${ew.customSqlSegment}
</select>
</mapper> </mapper>

13
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleRest.java

@ -290,6 +290,19 @@ public class BaseVehicleRest implements BaseVehicleFeign {
return rb.success().setData(pv1); return rb.success().setData(pv1);
} }
/**
* 采购退库选择车辆分页列表
*
* @param pagerQuery 查询条件
* @return
*/
@Override
public ResultBean<PagerVo<BaseVehicleReturnVo>> vehicleReturnList(PagerQuery<BaseVehicleReturnQuery> pagerQuery) {
ResultBean<PagerVo<BaseVehicleReturnVo>> rb = ResultBean.fireFail();
PagerVo<BaseVehicleReturnVo> pv = baseVehicleService.vehicleReturnList(pagerQuery);
return rb.success().setData(pv);
}
/** /**
* 手机端现车列表 * 手机端现车列表
* *

77
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleService.java

@ -2,11 +2,9 @@ package com.yxt.anrui.base.biz.basevehicle;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxt.anrui.base.api.basemodelconfig.AppCarConfigSummaryVo; import com.yxt.anrui.base.api.basemodelconfig.AppCarConfigSummaryVo;
import com.yxt.anrui.base.api.basemodelconfig.AppModelConfigDetailsVo; import com.yxt.anrui.base.api.basemodelconfig.AppModelConfigDetailsVo;
import com.yxt.anrui.base.api.basemodelconfig.AppModelConfigListVo; import com.yxt.anrui.base.api.basemodelconfig.AppModelConfigListVo;
import com.yxt.anrui.base.api.basemodelszconfig.BaseModelSzconfigVo;
import com.yxt.anrui.base.api.basevehicle.*; import com.yxt.anrui.base.api.basevehicle.*;
import com.yxt.anrui.base.biz.basemodelconfig.BaseModelConfigService; import com.yxt.anrui.base.biz.basemodelconfig.BaseModelConfigService;
import com.yxt.anrui.base.biz.basemodelszconfig.BaseModelSzconfigService; import com.yxt.anrui.base.biz.basemodelszconfig.BaseModelSzconfigService;
@ -879,5 +877,80 @@ public class BaseVehicleService extends MybatisBaseService<BaseVehicleMapper, Ba
return vo; return vo;
} }
/**
* 采购退库选择车辆分页列表
*
* @param pagerQuery 查询条件
* @return
*/
public PagerVo<BaseVehicleReturnVo> vehicleReturnList(PagerQuery<BaseVehicleReturnQuery> pagerQuery) {
IPage<BaseVehicleReturnVo> page = vehicleReturnPageList(pagerQuery);
PagerVo<BaseVehicleReturnVo> pv = new PagerVo<>();
PagerVo<BaseVehicleReturnVo> pv1 = PagerUtil.pageToVo(page, pv);
return pv1;
}
private IPage<BaseVehicleReturnVo> vehicleReturnPageList(PagerQuery<BaseVehicleReturnQuery> pagerQuery) {
IPage<BaseVehicleReturnVo> page = PagerUtil.queryToPage(pagerQuery);
QueryWrapper<BaseVehicle> qw = vehicleReturnWrapper(pagerQuery.getParams());
return baseMapper.vehicleReturnPageList(page, qw);
}
private QueryWrapper<BaseVehicle> vehicleReturnWrapper(BaseVehicleReturnQuery params) {
QueryWrapper<BaseVehicle> qw = new QueryWrapper<>();
if (params != null) {
//品牌
if (StringUtils.isNotBlank(params.getBrandSid())) {
qw.eq("bvm.carBrand", params.getBrandSid());
}
//功能
if (StringUtils.isNotBlank(params.getVehicleType())) {
qw.like("bvm.vehicleType", params.getVehicleType());
}
//系列
if (StringUtils.isNotBlank(params.getProductLine())) {
qw.like("bvm.productLine", params.getProductLine());
}
//变速箱
if (StringUtils.isNotBlank(params.getGearboxType())) {
qw.eq("bvm.gearboxType", params.getGearboxType());
}
//驱动
if (StringUtils.isNotBlank(params.getDriveForm())) {
qw.eq("bvm.driveForm", params.getDriveForm());
}
//排放标准
if (StringUtils.isNotBlank(params.getEmissionStandard())) {
qw.eq("bvm.emissionStandard", params.getEmissionStandard());
}
//马力
if (StringUtils.isNotBlank(params.getPower())) {
qw.eq("bvm.power", params.getPower());
}
//燃料
if (StringUtils.isNotBlank(params.getFuelType())) {
qw.eq("bvm.fuelType", params.getFuelType());
}
//版本
if (StringUtils.isNotBlank(params.getVehicleVersion())) {
qw.eq("bvm.vehicleVersion", params.getVehicleVersion());
}
//车型
if (StringUtils.isNotBlank(params.getVehicleAlias())) {
qw.eq("bvm.vehicleAlias", params.getVehicleAlias());
}
//快捷检索车型
if (StringUtils.isNotBlank(params.getModelName())) {
qw.like("bvm.modelName", params.getModelName());
}
//锁定状态
qw.and(wrapper -> wrapper.isNull("bv.lockedStateValue").or().eq("bv.lockedStateValue", ""));
// 虚拟订单选择车辆查询现车库存列表参数
// if (StringUtils.isNotBlank(params.getVehicleState())) { //车辆状态
// qw.and(wrapper -> wrapper.eq("bv.vehicleStateValue", "现车").or().eq("bv.vehicleStateValue", "库存"));
// }
}
return qw;
}
} }
Loading…
Cancel
Save