使用
后台首页公告管理,新添加一个首页公告时有对应的发布城市,一个城市可以有好多个首页公告,每个首页公告添加的时候都有对应的优先级,对应在app端被查询,通过这个cityCode码查询已开通的城市,再通过优先级确定首页公告的摆放在app端的位置
问题
在某个城市添加首页公告时除不能添加名称相同的首页公告外,还要不能添加已存在优先级的首页公告
解决
开始笨点的解决办法是在每次新添加首页公告时查询出对应此发布城市的所有的首页公告,再一个个进行比较,或者直接把优先级和cityCode码传到Mybatis里直接拿到是否有此优先级的首页公告信息,后来在看其他同事的代码时,发现大佬直接用了cityCode和priority做唯一性索引,那么添加首页公告时就会自动检测是否存在了
表中的唯一性索引
CREATE TABLE `notice` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`title` varchar(100) CHARACTER SET utf8mb4 NOT NULL COMMENT '公告标题',
`provinceCode` int(11) NOT NULL COMMENT '省code, 2代表全国',
`cityCode` int(11) NOT NULL COMMENT '城市code, 2代表全国',
`cityName` varchar(30) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '省市名称',
`noticeUrl` varchar(1024) CHARACTER SET utf8mb4 NOT NULL COMMENT '公告图片',
`startTime` bigint(11) NOT NULL COMMENT '开始时间',
`expireTime` bigint(11) NOT NULL COMMENT '失效时间',
`noticeStatus` tinyint(2) DEFAULT '0' COMMENT '0:待生效 1:已上架 2:已下架',
`showInterval` int(5) NOT NULL COMMENT '0:每次启动 1:12小时 2:24小时',
`showPriority` int(6) NOT NULL COMMENT '1-100整数',
`jumpMode` int(5) NOT NULL COMMENT '0:无跳转 1:跳转连接 ',
`jumpUrl` varchar(1024) DEFAULT NULL COMMENT '跳转url',
`gmtCreate` bigint(11) DEFAULT NULL COMMENT '创建时间',
`gmtModified` bigint(11) DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `province_code_city_code_show_priority` (`provinceCode`,`cityCode`,`showPriority`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
代码中的判断
这个大佬很厉害,包括前端传过来的List类型的数据都会进行去重处理,参数的校验使用的是JSR303校验,使用@Valid注解,记录一下
实体信息
package com.wscar.xny.baseconfig.domain.req;
import com.wscar.xny.commons.utils.AbstractObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 公告添加Request对象
* @author kimmy
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NoticeAddRequest extends AbstractObject {
private Long id;
/**
* 公告标题
*/
@NotBlank(message = "公告标题不能为空")
private String title;
@Valid
@NotEmpty(message = "未选择城市信息")
private List<Integer> cityRequests;
/**
* 公告图片
*/
@NotNull(message = "未上传首页公告图片")
private String noticeUrl;
/**
* 开始时间
*/
@NotNull(message = "公告开始时间不能为空")
private Long startTime;
/**
* 失效时间
*/
@NotNull(message = "公告失效时间不能为空")
private Long expireTime;
/**
* 0:每次启动 1:12小时 2:24小时
*/
@NotNull(message = "未选择展示时间间隔")
@Range(min = 0, max = 2, message = "展示时间间隔必须是一个大于等于0且小于等于2的正整数")
private Integer showInterval;
/**
* 1-100整数
*/
@NotNull(message = "未填写优先级")
@Range(min = 1, max = 100, message = "优先级必须是一个大于等于1且小于等于100的正整数")
private Integer showPriority;
/**
* 0:无跳转 1:跳转连接
*/
@NotNull(message = "未选择跳转配置")
@Range(min = 0, max = 1, message = "跳转配置必须是一个大于等于1且小于等于1的正整数")
private Integer jumpMode;
/**
* 跳转url
*/
private String jumpUrl;
/**
* 创建时间
*/
private Long gmtCreate;
/**
* 修改时间
*/
private Long gmtModified;
}
希望我学有所长吧