安灯基础数据导入导出

yun-zuoyi
汪云昊 6 years ago
parent 8e39e6d9fb
commit 0ed90485a6

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -28,6 +30,7 @@ import javax.persistence.Table;
@Api("ANDON_呼叫原因") @Api("ANDON_呼叫原因")
public class AndonAlarmCause extends BaseBean { public class AndonAlarmCause extends BaseBean {
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -36,6 +38,7 @@ public class AndonAlarmDetailType extends BaseBean {
@ApiParam(value = "安灯类型名称") @ApiParam(value = "安灯类型名称")
private String alarmDetailName; private String alarmDetailName;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型代码") @ApiParam(value = "安灯类型代码")
private String alarmCode; private String alarmCode;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -28,10 +30,12 @@ import javax.persistence.Table;
@Api("ANDON_呼叫通知配置") @Api("ANDON_呼叫通知配置")
public class AndonAlarmResponseCfg extends BaseBean { public class AndonAlarmResponseCfg extends BaseBean {
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型代码") @ApiParam(value = "安灯类型代码")
private String alarmCode; private String alarmCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_STATUS.class,refForeignKey = "value",value = "description")
@Column(name = "ANDON_STATUS") @Column(name = "ANDON_STATUS")
@ApiParam(value = "安灯状态") @ApiParam(value = "安灯状态")
private String andonStatus; private String andonStatus;
@ -40,6 +44,7 @@ public class AndonAlarmResponseCfg extends BaseBean {
@ApiParam(value = "通知条件时长") @ApiParam(value = "通知条件时长")
private String rpWhere; private String rpWhere;
@AnnoOutputColumn(refClass = AndonEnumUtil.NOTICE_MESSAGE_SEND_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "RP_CODE") @Column(name = "RP_CODE")
@ApiParam(value = "通知方式代码") @ApiParam(value = "通知方式代码")
private String rpCode; private String rpCode;
@ -48,6 +53,7 @@ public class AndonAlarmResponseCfg extends BaseBean {
@ApiParam(value = "通知对象代码") @ApiParam(value = "通知对象代码")
private String rpObjectCode; private String rpObjectCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.NOTICE_MESSAGE_SEND_LEVEL.class,refForeignKey = "value",value = "description")
@Column(name = "RP_LEVEL") @Column(name = "RP_LEVEL")
@ApiParam(value = "通知级别") @ApiParam(value = "通知级别")
private String rpLevel; private String rpLevel;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -36,6 +38,7 @@ public class AndonDisposalCfg extends BaseBean {
@ApiParam(value = "工作单元代码") @ApiParam(value = "工作单元代码")
private String workCellCode; private String workCellCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型代码") @ApiParam(value = "安灯类型代码")
private String alarmCode; private String alarmCode;
@ -44,6 +47,7 @@ public class AndonDisposalCfg extends BaseBean {
@ApiParam(value = "呼叫原因代码") @ApiParam(value = "呼叫原因代码")
private String acCode; private String acCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.APPROVAL_STATUS.class,refForeignKey = "value",value = "description")
@Column(name = "APPROVAL_STATUS") @Column(name = "APPROVAL_STATUS")
@ApiParam(value = "审批状态") @ApiParam(value = "审批状态")
private String approvalStatus; private String approvalStatus;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -40,6 +42,7 @@ public class AndonEventCause extends BaseBean {
@ApiParam(value = "父阶原因代码") @ApiParam(value = "父阶原因代码")
private String parentEcCode; private String parentEcCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -40,6 +42,7 @@ public class AndonEventMethod extends BaseBean {
@ApiParam(value = "父阶方法代码") @ApiParam(value = "父阶方法代码")
private String parentEmCode; private String parentEmCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -36,6 +38,7 @@ public class AndonEventPhenoMenon extends BaseBean {
@ApiParam(value = "事件现象描述") @ApiParam(value = "事件现象描述")
private String epmName; private String epmName;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;

@ -1,6 +1,8 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -34,6 +36,7 @@ import javax.persistence.Table;
@Api("安灯队列") @Api("安灯队列")
public class AndonHaltCfg extends BaseBean { public class AndonHaltCfg extends BaseBean {
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;

@ -1,6 +1,9 @@
package cn.estsh.i3plus.pojo.andon.bean; package cn.estsh.i3plus.pojo.andon.bean;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.AndonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
@ -64,14 +67,17 @@ public class AndonPLC extends BaseBean {
@ApiParam(value = "分组号") @ApiParam(value = "分组号")
private String groupNo; private String groupNo;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_TYPE.class,refForeignKey = "value",value = "description")
@Column(name = "ALARM_CODE") @Column(name = "ALARM_CODE")
@ApiParam(value = "安灯类型代码") @ApiParam(value = "安灯类型")
private String alarmCode; private String alarmCode;
@AnnoOutputColumn(refClass = AndonEnumUtil.ALARM_BUSI_FLAG.class,refForeignKey = "value",value = "description")
@Column(name = "TAG_BUSINESS_TYPE") @Column(name = "TAG_BUSINESS_TYPE")
@ApiParam(value = "标签业务类型") @ApiParam(value = "标签业务类型")
private String tagBusinessType; private String tagBusinessType;
@AnnoOutputColumn(refClass = CommonEnumUtil.TRUE_OR_FALSE.class,refForeignKey = "value",value = "description")
@Column(name = "IS_ALARM_STATUS") @Column(name = "IS_ALARM_STATUS")
@ApiParam(value = "是否按灯状态", example = "1") @ApiParam(value = "是否按灯状态", example = "1")
private Integer isAlarmStatus; private Integer isAlarmStatus;

@ -501,6 +501,11 @@ public class AndonHqlPack {
*/ */
public static DdlPackBean packAndonEventPhenoMenon(AndonEventPhenoMenon eventPhenoMenon) { public static DdlPackBean packAndonEventPhenoMenon(AndonEventPhenoMenon eventPhenoMenon) {
DdlPackBean result = new DdlPackBean(); DdlPackBean result = new DdlPackBean();
DdlPreparedPack.getStringLikerPack(eventPhenoMenon.getEpmCode(), "epmCode", result);
DdlPreparedPack.getStringLikerPack(eventPhenoMenon.getEpmName(), "epmName", result);
DdlPreparedPack.getStringEqualPack(eventPhenoMenon.getAlarmCode(), "alarmCode", result);
getStringBuilderPack(eventPhenoMenon, result); getStringBuilderPack(eventPhenoMenon, result);
return result; return result;

@ -45,6 +45,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -83,6 +93,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -119,6 +139,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static int descriptionOfValue(String val) {
int tmp = -1;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -149,6 +179,26 @@ public class AndonEnumUtil {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public static String valueOfDescription(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].value,val)) {
tmp = values()[i].description;
}
}
return tmp;
}
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -193,6 +243,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static int descriptionOfValue(String val) {
int tmp = -1;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
@ -232,6 +292,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static int descriptionOfValue(String val) {
int tmp = -1;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
@ -280,6 +350,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -311,12 +391,22 @@ public class AndonEnumUtil {
public static String valueOfDescription(int val) { public static String valueOfDescription(int val) {
String tmp = null; String tmp = null;
for (int i = 0; i < values().length; i++) { for (int i = 0; i < values().length; i++) {
if (values()[i].value == val ) { if (values()[i].value == val) {
tmp = values()[i].description; tmp = values()[i].description;
} }
} }
return tmp; return tmp;
} }
public static int descriptionOfValue(String val) {
int tmp = -1;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -343,6 +433,26 @@ public class AndonEnumUtil {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public static String valueOfDescription(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].value, val)) {
tmp = values()[i].description;
}
}
return tmp;
}
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -369,6 +479,26 @@ public class AndonEnumUtil {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public static String valueOfDescription(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].value, val)) {
tmp = values()[i].description;
}
}
return tmp;
}
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -407,6 +537,16 @@ public class AndonEnumUtil {
} }
return tmp; return tmp;
} }
public static int descriptionOfValue(String val) {
int tmp = -1;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -446,6 +586,26 @@ public class AndonEnumUtil {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public static String valueOfDescription(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].value, val)) {
tmp = values()[i].description;
}
}
return tmp;
}
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
/** /**
@ -479,5 +639,25 @@ public class AndonEnumUtil {
public String getDescription() { public String getDescription() {
return description; return description;
} }
public static String valueOfDescription(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].value, val)) {
tmp = values()[i].description;
}
}
return tmp;
}
public static String descriptionOfValue(String val) {
String tmp = null;
for (int i = 0; i < values().length; i++) {
if (StringUtils.equalsIgnoreCase(values()[i].description, val)) {
tmp = values()[i].value;
}
}
return tmp;
}
} }
} }

@ -390,36 +390,38 @@ public class CoreHqlPack {
/** /**
* *
* @param taskTimeExpression * @param sysTaskCycle
* @return * @return
*/ */
public static String packHqlSysTaskCycle(SysTaskCycle taskTimeExpression) { public static String packHqlSysTaskCycle(SysTaskCycle sysTaskCycle) {
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
// hql拼接 // hql拼接
HqlPack.getStringLikerPack(taskTimeExpression.getName(),"name",result); HqlPack.getStringLikerPack(sysTaskCycle.getName(), "name", result);
HqlPack.getStringEqualPack(sysTaskCycle.getOrganizeCode(), "organizeCode", result);
// 添加默认排序 // 添加默认排序
HqlPack.getOrderDefault(taskTimeExpression); HqlPack.getOrderDefault(sysTaskCycle);
return result.toString(); return result.toString();
} }
/** /**
* *
* @param taskTime * @param sysTaskPlan
* @return * @return
*/ */
public static String packHqlSysTaskPlan(SysTaskPlan taskTime){ public static String packHqlSysTaskPlan(SysTaskPlan sysTaskPlan){
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
// hql拼接 // hql拼接
HqlPack.getStringLikerPack(taskTime.getName(),"name",result); HqlPack.getStringLikerPack(sysTaskPlan.getName(),"name",result);
HqlPack.getNumEqualPack(taskTime.getTaskPlanStatus(),"taskPlanStatus",result); HqlPack.getNumEqualPack(sysTaskPlan.getTaskPlanStatus(),"taskPlanStatus",result);
HqlPack.getNumEqualPack(taskTime.getTaskCycleId(),"taskCycleId",result); HqlPack.getNumEqualPack(sysTaskPlan.getTaskCycleId(),"taskCycleId",result);
HqlPack.getStringEqualPack(sysTaskPlan.getOrganizeCode(), "organizeCode", result);
// 添加默认排序 // 添加默认排序
HqlPack.getOrderDefault(taskTime); HqlPack.getOrderDefault(sysTaskPlan);
return result.toString(); return result.toString();
} }
@ -655,6 +657,7 @@ public class CoreHqlPack {
HqlPack.getStringLikerPack(orderNoRule.getName(),"name",result); HqlPack.getStringLikerPack(orderNoRule.getName(),"name",result);
HqlPack.getStringLikerPack(orderNoRule.getOrderNoRuleCode(),"orderNoRuleCode",result); HqlPack.getStringLikerPack(orderNoRule.getOrderNoRuleCode(),"orderNoRuleCode",result);
HqlPack.getNumEqualPack(orderNoRule.getOrderNoRuleStatus(),"orderNoRuleStatus",result); HqlPack.getNumEqualPack(orderNoRule.getOrderNoRuleStatus(),"orderNoRuleStatus",result);
HqlPack.getNumEqualPack(orderNoRule.getOrganizeCode(),"organizeCode",result);
// 添加默认排序 // 添加默认排序
HqlPack.getOrderDefault(orderNoRule); HqlPack.getOrderDefault(orderNoRule);
@ -693,6 +696,7 @@ public class CoreHqlPack {
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
HqlPack.getStringLikerPack(sysTask.getName(),"name",result); HqlPack.getStringLikerPack(sysTask.getName(),"name",result);
HqlPack.getStringEqualPack(sysTask.getOrganizeCode(),"organizeCode",result);
return result.toString(); return result.toString();
} }

Loading…
Cancel
Save