适用情况
1 添加的标签默认排在第一位
比如:原有序列 1,2,3 ;新增标签时
新增标签序列为1 ,原有序列1->2,2->3,3->4
2 修改标签时,顺序自动向前排序
比如:原有序列 1,2,3 ,4;编辑标签时3 为1时:
编辑标签时3 为1(向上移动),原有序列1->2,2->3,3->4,4->5
编辑标签时1 为3(向下移动),原有序列2->1,3->2,3->1,4->4
3 删除标签时,标签自动排序
比如:原有序列 1,2,3 ,4;删除标签2时:
编辑标签2,原有序列1->1,2->删除,3->2,4->3
/**
* @param: request
* @param: operator null 排序; 0 添加; 1 删除;
* @return: Boolean
* @date: 2022/2/28
*/
private Boolean updateViewIndex(ViewIndexRequest request, Integer isDeleted) {
PbTag pbTag = pdTagDAO.selectById(request.getId());
if (Objects.isNull(pbTag)) {
throw new ErrorCodeException(ExceptionErrorEnum.BANNER_IS_NOT_EXIST);
}
List<PbTag> list = new ArrayList<>();
if (isDeleted != null) {
// 首位添加
if (isDeleted == 0 && request.getViewIndex() == 1) {
List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery());
pbArticleList.forEach(x -> {
if (!x.getId().equals(request.getId())) {
x.setViewIndex(x.getViewIndex() + 1);
list.add(x);
}
});
} else if (isDeleted == 1) {
// 删除时 大于自身的都减去1
List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
.gt(PbTag::getViewIndex, pbTag.getViewIndex()));
pbArticleList.forEach(x -> {
if (!x.getId().equals(request.getId())) {
x.setViewIndex(x.getViewIndex() - 1);
list.add(x);
}
});
}
} else {
// step1:判断是上移还是下移
if (request.getViewIndex() <= pbTag.getViewIndex()) {
// step2:如果是上移,则修改大于等于要修改的banner的viewIndex都加一
List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
.ge(PbTag::getViewIndex, request.getViewIndex())
.lt(PbTag::getViewIndex, pbTag.getViewIndex()));
pbArticleList.forEach(x -> {
x.setViewIndex(x.getViewIndex() + 1);
list.add(x);
});
} else {
// step4:如果是下移,则修改小于等于当前banner的viewIndex都减一,大于当前banner的viewIndex
List<PbTag> pbArticleList = pdTagDAO.selectList(Wrappers.<PbTag>lambdaQuery()
.gt(PbTag::getViewIndex, pbTag.getViewIndex())
.le(PbTag::getViewIndex, request.getViewIndex()));
pbArticleList.forEach(x -> {
x.setViewIndex(x.getViewIndex() - 1);
list.add(x);
});
}
}
Boolean record = updateBatchById(list);
// step3:修改当前banner序号等于需改的viewIndex // step5:修改当前banner序号等于需改的viewIndex
pbTag.setViewIndex(request.getViewIndex());
Boolean flag = SqlHelper.retBool(pdTagDAO.updateById(pbTag));
if (record && flag) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
@Data
public class ViewIndexRequest {
/**
* 主键ID
*/
private String id;
/**
* 上移下移下标
*/
private Integer viewIndex;
}
public class PbTag implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
/**
* 主键id
*/
@TableField("id")
private String id;
/**
* 标签名称
*/
@TableField("name")
private String name;
}